|
|
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. Вот кстати рабочий вариант, который исключает ситуацию, что задача закончилась до того, как мы прилепили ей коллбэк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 13:10 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questioner Код: java 1. 2. 3. 4. Вот кстати рабочий вариант, который исключает ситуацию, что задача закончилась до того, как мы прилепили ей коллбэк Т.е. опять- пишут "метод должен отрабатывать как можно быстрее", а тут await. Не, я понимаю, тут может всё достаточно быстро, но нафига писать такой код? Его трудно понимать, трудно поддерживать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 13:15 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Alexey TominquestionerДа и заказчику зачастую на%?#ть понятно написано или нет - лишь бы работало. Вас оценивали потенциальные коллеги. Они не заказчики, им важна понятность. По разному бывает. Вообще странно как-то писать, что у вас не работает корректно детально то-то и то-то, а по факту подразумевать, что код не понятен. Не находите? questionerпропущено... Alexey TominПочему? Потому что это не очередь, а элемент, за котором будет исполнена наша задача. Или та, что исполняется- понять сразу я это не смог, а вчитыватся и тестировать нет желания. В общем- queue это конкретный элемент очереди, а не очередь. Нельзя путать понятия в именах переменных. То, что Вы не смогли это сразу понять ещё не значит, что это непонятно написано. Скажем есть список рукописный и у вас есть ссылка на голову. Нельзя назвать эту ссылку list ? Этот аргумент по сути является очередью задач, а для меня ожидателем выполнения всей очереди до этого элемента включительно. Именование дело такое... как не назови - все не поймут, но мне кажется я постарался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 13:17 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Alexey Tominquestioner Код: java 1. 2. 3. 4. Вот кстати рабочий вариант, который исключает ситуацию, что задача закончилась до того, как мы прилепили ей коллбэк Т.е. опять- пишут "метод должен отрабатывать как можно быстрее", а тут await. Не, я понимаю, тут может всё достаточно быстро, но нафига писать такой код? Его трудно понимать, трудно поддерживать. Предложите вариант получше? я не смог просто. Думаете я стараюсь посложнее специально написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 13:18 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questionerAlexey Tominпропущено... Вас оценивали потенциальные коллеги. Они не заказчики, им важна понятность. По разному бывает. Не понял. Что, кто-то любит непонятный код в репозитории? Не знаю, я бы не хотел там работать... questionerВообще странно как-то писать, что у вас не работает корректно детально то-то и то-то, а по факту подразумевать, что код не понятен. Не находите? 1. Я оцениваю код, а не тех, кто оценивал код 2. Может там и ошибка. Мне не хочется разбираться. questionerСкажем есть список рукописный и у вас есть ссылка на голову. Нельзя назвать эту ссылку list ? head, по-моему, правильнее. Например потом, что queue не может быть null. А head - может. questionerПредложите вариант получше? я не смог просто. Думаете я стараюсь посложнее специально написать? Не знаю. В соседней теме я показал то, что написал за неполный час. По мне- так намного проще. Возможно чуть медленнее, но для начала точно хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 13:42 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Alexey Tominquestionerпропущено... По разному бывает. Не понял. Что, кто-то любит непонятный код в репозитории? Не знаю, я бы не хотел там работать... Этот комментарий относился к тому, что иногда оценивают коллеги, а иногда и заказчику могут заслать. Alexey TominquestionerВообще странно как-то писать, что у вас не работает корректно детально то-то и то-то, а по факту подразумевать, что код не понятен. Не находите? 1. Я оцениваю код, а не тех, кто оценивал код 2. Может там и ошибка. Мне не хочется разбираться. Собственно суть топика в том, чтобы обсудить аргументацию. Да, дополнительно обсудить какие-то другие решения тоже интересно. Alexey TominquestionerСкажем есть список рукописный и у вас есть ссылка на голову. Нельзя назвать эту ссылку list ? head, по-моему, правильнее. Например потом, что queue не может быть null. А head - может. Согласен, но это название допустимо всё же. Alexey TominquestionerПредложите вариант получше? я не смог просто. Думаете я стараюсь посложнее специально написать? Не знаю. В соседней теме я показал то, что написал за неполный час. По мне- так намного проще. Возможно чуть медленнее, но для начала точно хватит. Для какого начала? это тестовое задание) Тем более вариант попроще и попонятнее я и так имею и он был вместе с этим отправлен. То, что там могут быть коллизии ребятам не понравилось. EmptyLock не используется у вас нигде кроме комментариев. зачем он? что такое "conflict" error ? Ваша имплементация нарушает требования тестового задания, что все задачи должны выполняться в порядке прихода. Это на первый взгляд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 14:00 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, Код: java 1. будет тратить поток на все ключи без исключения. То есть подряд идущие key1 key1 key2 займут 3 потока вместо 2-ух. Но я думаю Вы это понимаете. Первое моё решение как-раз ругали из-за подобной "неоптимальности" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 14:05 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questionerЭтот комментарий относился к тому, что иногда оценивают коллеги, а иногда и заказчику могут заслать. Заказчик либо не читает, либо тоже смотрит понятность кода. questionerAlexey TominНе знаю. В соседней теме я показал то, что написал за неполный час. По мне- так намного проще. Возможно чуть медленнее, но для начала точно хватит. EmptyLock не используется у вас нигде кроме комментариев. зачем он? что такое "conflict" error ? Ваша имплементация нарушает требования тестового задания, что все задачи должны выполняться в порядке прихода. Это на первый взгляд Это был пример теста вообще-то, а задания я не читал. Комментарий- это чтобы тест уронить. В любом случае- не надо использовать методы Map для того, чтобы ставить задания в очередь. Это не то. Их аргументацию обсуждать мне не интересно, т.к. они здесь не пишут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 14:23 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Alexey TominquestionerЭтот комментарий относился к тому, что иногда оценивают коллеги, а иногда и заказчику могут заслать. Заказчик либо не читает, либо тоже смотрит понятность кода. questionerпропущено... EmptyLock не используется у вас нигде кроме комментариев. зачем он? что такое "conflict" error ? Ваша имплементация нарушает требования тестового задания, что все задачи должны выполняться в порядке прихода. Это на первый взгляд Это был пример теста вообще-то, а задания я не читал. Комментарий- это чтобы тест уронить. В любом случае- не надо использовать методы Map для того, чтобы ставить задания в очередь. Это не то. Их аргументацию обсуждать мне не интересно, т.к. они здесь не пишут. Им были заданы вопросы, на которые им некогда отвечать) Так что считаю обсудить тут вполне корректно. К тому же имён я не раскрывал. А зачем вы скинули пример теста если мы сейчас обсуждаем имплементацию экзекутора? Ну в общем суть в том, что "для начала сойдёт" - не сошло) Как я уже писал - решение с подобным перформансом было и оно не удовлетворило проверяющих. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 14:35 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questionerТолько они этого не нашли) Надо подумать как это решить... из спортивного интереса Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 15:18 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questioner, Что-то я не понимаю как должен taskMap.remove() вообще работать в приведенном коде? Он же на каждую задачу в цепочке будет вызываться, даже если там есть ещё задачи, мы всю цепочку по ключу удалим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 15:22 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerТолько они этого не нашли) Надо подумать как это решить... из спортивного интереса Код: java 1. Да, годится. По коду так попроще конечно будет и никаких новых race condition от этого я не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 15:33 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Alexey TominНа самом деле имя "queue" для этого параметра- уже смертный приговор. Поддержу. В одном методе два разных Future и у них абсолютно ни о чем не говорящие имена queue и future. Почему было бы не назвать last/tail и next, например? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 15:34 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestioner, Что-то я не понимаю как должен taskMap.remove() вообще работать в приведенном коде? Он же на каждую задачу в цепочке будет вызываться, даже если там есть ещё задачи, мы всю цепочку по ключу удалим? task.remove удаляет не по ключу, а по ключу и значению. Если значение(фьюча) поменялась, то ничего удалится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 15:35 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questioner, questionerЕсли значение(фьюча) поменялась, то ничего удалится Если значение(фьюча) поменялась, то ничего НЕ удалится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 15:35 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Это на мой взгляд самая хитрая часть этого кода и было потрачено много времени, чтобы придумать эту конструкцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 15:37 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questionerЕсли значение(фьюча) поменялась, то ничего НЕ удалится Точно. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 15:37 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questionerВ jdk ConcurrentHashMap compute не может исполняться Параллельно для ключей из одного бакета. Этим мы расписываемся в том что решение не устойчиво к атаке на hash collision? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 16:02 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Alexey TominВас оценивали потенциальные коллеги. Они не заказчики, им важна понятность. Да, стоило написать явно на чем именно ключи синхронизируются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 16:04 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerВ jdk ConcurrentHashMap compute не может исполняться Параллельно для ключей из одного бакета. Этим мы расписываемся в том что решение не устойчиво к атаке на hash collision? Это же инфраструктурный класс. Кому придёт в голову его атаковать? К тому же ничего уж сильно плохого не случится. Добавление в мапу и создание парочки фьючей не такая уж и тяжёлая операция по сравнению с самой задачей. BlazkowiczДа, стоило написать явно на чем именно ключи синхронизируются. То, что всё это работает на очереди фьючей? комментарии в коде имеете ввиду или что-то типа сопроводительного письма? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 16:34 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questioner Это же инфраструктурный класс. Кому придёт в голову его атаковать? К тому же ничего уж сильно плохого не случится. Добавление в мапу и создание парочки фьючей не такая уж и тяжёлая операция по сравнению с самой задачей. Чисто теоретически можно деградировать вашу систему до sequential состояния, а это уже косяк. Не агритесь, вам дело говорят. Да и вообще интервью с заданием на многопоточность это лотерея, ну не прошли и ничего страшного, я тоже из 3 одно прохожу хоть и опыта хватает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 16:43 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questionerЭто же инфраструктурный класс. Кому придёт в голову его атаковать? Мы не знаем источника ключей. questionerК тому же ничего уж сильно плохого не случится. Добавление в мапу и создание парочки фьючей не такая уж и тяжёлая операция по сравнению с самой задачей. Ну, тогда бы и решение с synchronized подошло бы? questionerТо, что всё это работает на очереди фьючей? комментарии в коде имеете ввиду или что-то типа сопроводительного письма? В документации сказано что compute атомарный и всё. Стоило указать в коде что мы полагаемся на это поведение, ожидая синхронизацию для ключа исходя из атомарности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 16:47 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questioner, Придется ждать vimba, я тоже не вижу как параллельно запустить задачи с одним ключом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 16:57 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerЭто же инфраструктурный класс. Кому придёт в голову его атаковать? Мы не знаем источника ключей. questionerК тому же ничего уж сильно плохого не случится. Добавление в мапу и создание парочки фьючей не такая уж и тяжёлая операция по сравнению с самой задачей. Ну, тогда бы и решение с synchronized подошло бы? Вы утрируете. Synchronized - всё в один поток и многопоточности нет тогда. допустим у нас большой объём разных ключей, которые валятся в один бакет, но при этом они в основном разные. Грубо говоря можно представить, что в данной есть один тред, который занимается маршрутизацией, то есть создаёт фьючи только, а сами таски выполняются в экзекуторе в отдельных тредах. Или Вы про Collections.synchronizedMap ? тогда да, то же самое. Но это на мой взгляд не такая уж и большая проблема. Не очень понял Ваш пассаж. Что Вы имеете ввиду? BlazkowiczquestionerТо, что всё это работает на очереди фьючей? комментарии в коде имеете ввиду или что-то типа сопроводительного письма? В документации сказано что compute атомарный и всё. Стоило указать в коде что мы полагаемся на это поведение, ожидая синхронизацию для ключа исходя из атомарности. автор Some attempted update operations on this map by other threads may be blocked while computation is in progress, so the computation should be short and simple, and must not attempt to update any other mappings of this Map. Согласен, что явно этого не сказано, но намёк очень явен. В принципе да, согласен, если бы написал - они бы уточнили, проверили и не написали бы то, что написали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 17:03 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questionerSynchronized - всё в один поток и многопоточности нет тогда. Ну, при коллизии hash кодов у нас будет compute всегда synchronized. То есть распределение таски по очередям полностью синхронизировано. Разницы вот с этим кодом нет: Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2017, 17:08 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39515027&tid=2122587]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
90ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 431ms |

| 0 / 0 |
