Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/48: Рейтинг темы: голосов - 48, средняя оценка - 4.67
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249

Тестовое задание от компании Exness

07.08.2017, 22:55. Показов 10265. Ответов 69
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня нет никакого вопроса, но я так и не понял в какую ветку надо написать (все изучил внимательно), поэтому пишу сюда.
Я просто хочу поделиться своим опытом трудоустройства на тот случай если это кому нибудь поможет и узнать мнение общественности.
Я получил тестовое задание от компании Exness и решил сделать его рефакторинг, а потом выполнил его и получил рецензию.
Всё во вложении.
Аннотация:
TA.2017.refactoring-optimization (2) (1).pdf - тестовое задание
MultiQueueProcessor.zip - код для рефакторинга
Описание_задачи.docx - моя версия рефакторинга самого задания
exness_testwork.zip - мой результат выполнения

Рецензия от lyubov.belogrudova@exness.com>: вот:
Юрий, добрый день! В пятницу не успела Вам написать.
Вас благодарим за внимание к нашей компании, за уделенное на тестовое задание время. Но, к сожалению, по результатам тестового задания делать оффер мы не готовы.
Пишу feedback от коллег:

Есть несколько основных проблемы присланного кода:
1. Читаемость и понимаемость кода стремится к нулю
2. Нет краткости, элегантности, какой-то красоты в присланном решении
3. Технически код выглядит очень старомодным:
a. Встречаются new/delete, unique_ptr/shared_ptr не найден
b. Обилие малооправданных "велосипедов"
c. С++11 очень мало по проекту

Вам успехов. Еси решение изменится, дам Вам знать.
Вложения
Тип файла: pdf TA.2017.refactoring-optimization (2) (1).pdf (45.8 Кб, 95 просмотров)
Тип файла: docx Описание_задачи.docx (16.1 Кб, 77 просмотров)
Тип файла: zip exness_testwork.zip (23.4 Кб, 67 просмотров)
Тип файла: zip MultiQueueProcessor.zip (870 байт, 56 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.08.2017, 22:55
Ответы с готовыми решениями:

Тестовое задание от работадателя. Хотелось бы услышать критику.
Пробую устроиться программистом. Вот одна из компаний выслала мне тестовое задание следующего содержания: Немного поломав голову,...

Небольшое тестовое задание в финской компании.
Привествую всех жителей форума. Сразу отмечу, что решения просить не хочу, а просто хочу показать задание, которая давала компания...

Тестовое задание
private class Connect (){ public Device dev1 = new Device(); public Device dev2 = new Device(); puclic void Connect (){ for...

69
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
09.08.2017, 12:48  [ТС]
Студворк — интернет-сервис помощи студентам
Croessmah, Там выводиться сообщение об ошибки, потом идёт посылка события о завершении потока, которое будет передано в главный поток. После того как главный поток получит событие, весь процесс будет убит. Освобождать память при её нехватки и продолжать работу плохая идея, так как ситуация с нехваткой памяти в общем случае - это признак неудачной программной архитектуры, и тут главное вовремя исправить ситуацию.
Так что нахрена козе баян ?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
09.08.2017, 13:02
Цитата Сообщение от Pechkin80 Посмотреть сообщение
Так что нахрена козе баян ?
Действительно. Нафига читать то что пишут.
Цитата Сообщение от Croessmah Посмотреть сообщение
Хотя если send_exit_event убьет процесс (не поток, а весь процесс),
то может и не надо заботится об освобождении ресурса,
хотя всё равно всё зависит от устройства.
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
09.08.2017, 13:11  [ТС]
Croessmah, send_exit_event сама по себе не убивает процесс, но запускает цепочку событий, окончанием которой является завершение процесса. Ваш упрёк не по адресу, так как я точно также могу сказать, а нафига я тут привёл программный код ? Её реализаия там приведена.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
09.08.2017, 13:23
Цитата Сообщение от Pechkin80 Посмотреть сообщение
send_exit_event сама по себе не убивает процесс, но запускает цепочку событий, окончанием которой является завершение процесса.
Но мне, например, неизвестно что такое TLN и как оно устроено.
Оно может создать злополучный файл, который потом не убьет,
и получим какое-нибудь "проге не удается получить доступ к файлу блокировки".
И ладно если прога упала (линуксоидам знакома ситуация),
но если она не позаботилась об этом файле из-за того,
что кто-то забыл написать delete - то это ужас.
Цитата Сообщение от Pechkin80 Посмотреть сообщение
Её реализаия там приведена.
Я буду лазить по всему коду в поисках того, как это реализовано?
Ради чего, спрашивается?
Тем более сегодня оно приводит к завершению процесса,
а завтра, решили что процесс должен устоять и продолжить работу,
возможно, запустив новый поток или еще как-то.
Процесс выжил, ресурсы утекли.
Я же написал - потенциальная утечка.
В задании сказано:
Цитата Сообщение от Pechkin80 Посмотреть сообщение
Провести рефакторинг существующего кода так, чтобы класс было легко развивать
и поддерживать
А по факту получаем, что в одном месте поправили,
но при этом в другом утекать ресурсы начали.
Поддерживать и расширять такой код затруднительно.

В общем, смысла продолжать не вижу.
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
09.08.2017, 19:38  [ТС]
Croessmah, Но за желание потратить время на изучение моего программного кода большое спасибо. Я это очень ценю.

Добавлено через 11 минут
Тем более сегодня оно приводит к завершению процесса,
а завтра, решили что процесс должен устоять и продолжить работу,
Почему такую ситуацию я исключаю, я написал выше.
Croessmah, TLN не нужно развивать. Там много разных требований к реализации. Я выбирал программные решения которые учитывают всю совокупность требований.

Добавлено через 6 часов 1 минуту
А кто нибудь напишет тут:
1) почему умные указатели для многопоточной очереди это плохо
2)почему дублирование кода это не всегда плохо
3)почему "велосипеды" очень даже обоснованы в случае многопоточной очереди
А то совсем тоскливо както.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
09.08.2017, 19:42
Цитата Сообщение от Pechkin80 Посмотреть сообщение
почему умные указатели это плохо
Ими нужно уметь пользоваться.
В остальном всё нормально с ними,
если они применяются там, где нужны.
Цитата Сообщение от Pechkin80 Посмотреть сообщение
почему "велосипеды" очень даже обоснованы
Когда общее решение работает хуже,
а вам нужна узкоспециализированная приблуда
под конкретный случай, то можно и навелосипедить.
Кликните здесь для просмотра всего текста
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
09.08.2017, 21:16
Croessmah, ТС писал:
Цитата Сообщение от Pechkin80 Посмотреть сообщение
У меня нет никакого вопроса, но я так и не понял в какую ветку надо написать
Вероятнее всего он расчитывал на ответы в стиле: "ты молодец, а они придираются". Когда не прокатило... Бесполезно объяснять человеку, что "так он слона не продаст" если общение с ним в стиле "он д'Артаньян а мы ..."
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
10.08.2017, 12:34  [ТС]
Croessmah, Ну вот в том месте где вы показали применение умных указателей и тем способом для данной конкретной задачи, вы считаете они уместны ?

Добавлено через 1 минуту
avgoor, Вы меня разоблачили)))

Добавлено через 14 часов 2 минуты
Единственный пункт, где мне возможно стоит посмотреть как это делается у других это читаемость и понимаемость кода. Что надо сделать с кодом ? Только не говорите про комментарии. Их там не хватает потому что времени не было больше на данное тестовое задание.
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
27.10.2017, 22:41  [ТС]
ЧуднО будоражить старые темы, но всё же вопрос timeoverhead-a не давал мне покоя всё это время и я наконец, причесав код, и сделав рефакторинг всей архитектуры, хотел бы выложить новую версию, а заодно и статиситику. Собственно дело в том, что работодатель запросил максимальную производительность, а когда увидел код начал плеваться, мол где умные указатели.
остальные претензии про велосипеды тоже не в кассу(ИМХО).
новая_версия
статистика
Вложения
Тип файла: zip exness_testwork.zip (38.8 Кб, 12 просмотров)
Тип файла: txt stat.txt (445 байт, 6 просмотров)
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
27.10.2017, 23:03  [ТС]
Забыл...
чтобы работало надо буст пропатчить.
Файлы во вложении.
Вложения
Тип файла: zip patch_win.zip (5.4 Кб, 6 просмотров)
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.10.2017, 14:51
Цитата Сообщение от Pechkin80 Посмотреть сообщение
читаемость и понимаемость кода. Что надо сделать с кодом ? Только не говорите про комментарии.
Комментарии не улучшают читабельность кода, в общем случае они только захламляют код. А как ты считаешь, твой код легко читать и понимать?

Добавлено через 11 минут
Цитата Сообщение от Pechkin80 Посмотреть сообщение
чтобы работало надо буст пропатчить.
Файлы во вложении.
а где патч? во вложении файлы с кодом
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
28.10.2017, 15:04  [ТС]
Kastaneda, Смотhя что. Тестбенч не оформлял. Остальной код написан аккуратно с комментариями. Не самую удачную архитектуру выбрал с самого начала и это наверно затрудняет читаемость кода. Чтото ещё кроме архитектуры и стиля кодирования может существенно повлиять на читаемость кода ?
Патч в последнем сообщении.

Комментарии не улучшают читабельность кода, в общем случае они только захламляют код.
Спорное утверждение. Но тема не об этом.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.10.2017, 15:07
Цитата Сообщение от Pechkin80 Посмотреть сообщение
Патч в последнем сообщении.
Там не патч, там файлы, которые (похоже) нужно заменить. Интересно посмотреть на патч.
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
28.10.2017, 15:34  [ТС]
Kastaneda,
Наверно не тот случай когда важна терминология. Патч, в переводе на русский - заплатка.
Заменить файлы проще, но если надо просто посмотреть, то см. вложении. сделал 2 .diff файла
Вложения
Тип файла: zip patch.zip (1.1 Кб, 5 просмотров)
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
28.10.2017, 15:40  [ТС]
Только надо пути подправить. Утилита создала патч с абсолютными путями.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
28.10.2017, 19:42
Цитата Сообщение от Pechkin80 Посмотреть сообщение
Наверно не тот случай когда важна терминология.
да вроде патч он и в Африке патч - создаешь утилитой patch (или похожей, или умной VCS) патч, потом этой же утилитой патчишь файлы.

А зачем понадобилось буст патчить? Решение с патчем явно попахивает.
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
28.10.2017, 19:46  [ТС]
Kastaneda, А вы попробуйте, без патча. Может и не нужен он)))
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
28.10.2017, 20:08
Pechkin80, а что переделал?
Вот если бы был патч, сразу были бы видны изменения.
0
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
28.10.2017, 20:20  [ТС]
Croessmah, патччи бесполезны когда уже иная архитектура. Там почти всё по другому.

Добавлено через 7 минут
Croessmah, Я уже думую код вполне себе зрелый, хотя критика интересна, но интересно уже и куда эту самую многопоточную очередь впихнуть чтобы вышел программный продукт. Наверно в каких то серверах нужна, но вот в каких и где большой вопрос. времени и сил потрачено много так что есть интерес найти ей применение.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
28.10.2017, 20:33
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <typename TValue, TTraitID _ID>
TMultiPipeProcessor<TValue,_ID>::
TMultiPipeProcessor(TThreadArgs & args) : m_args(&args)
{
    const char * funcname = __PRETTY_FUNCTION__;
    try
    {
        m_mngthread = nullptr;
        m_prodlist = new TProducerRecord[TLockNodeCodes::lock_last];
        initProdList(m_prodlist);
        m_expextedRemoveNode.store(nullptr);
        m_mngthread = new ManagedThread(&TMultiPipeProcessor::Process,this,boost::ref(args));
    }
    catch (...)
    {
        this->~TMultiPipeProcessor();
        errspace::show_errmsg(funcname);
    }
}
1) Возможна утечка
2) Вызов деструктора в конструкторе?
3) А деструктор еще и виртуальный.

Ух! Всё полетит классно в случае исключения.

Не, не буду портить Boost.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2017, 20:33

Тестовое задание на Junior C++ dev
Доброго времени суток. Неделю назад ради интереса отправил свое резюме в одну компанию, куда требуются с++ юниоры. Получил от них...

ООП. Тестовое задание собеседования.
Это тестовое задание для устройста на работу. Я не совсем понимаю что от меня хотят. Не могли бы вы мне далее составить набросок плана...

Тестовое задание для трудоустройства
Решил попробовать устроиться в компанию и узнать что вообще и как. Отправил в компанию резюме, дали тестовое задание: Страуструп. Глава...

Написать ответы на тестовое задание при приёме на работу (исключения, sizeof, mutex)
Добрый день! Ходил недавно на собеседование. Имеется список вопросов, на некоторые ответил правильно на какие-то - нет. Хотелось бы...

Тестовое задание
Добрый день! Относительно недавно начал изучать SQL, подкинули тестовое задание (во вложении). Ума не приложу как его сделать....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru