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

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

07.08.2017, 22:55. Показов 9444. Ответов 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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 / 3205 / 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 / 3205 / 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 / 3205 / 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru