|
|
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо, да, не вовремя я подключился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 10:30 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, Алексей Вы специально игнорируете мои сообщения? вот напрочь игнорируете - не понимаю зачем. Я уже не раз писал, что 1. БЫЛО ОТПРАВЛЕНО ПРОСТОЕ НО МЕНЕЕ ПРОИЗВОДИТЕЛЬНОЕ РЕШЕНИЕ. С КОЛЛИЗИЯМИ. ИМ НЕ ПОНРАВИЛОСЬ ПО ПЕРФОРМАНСУ. ВСЕГО Я ОТПРАВИЛ 2!!!!! (ДВА) РЕШЕНИЯ Там код не сложнее вашего, только под все условия подходит. Второе решение реально более сложное и производлительное и пришлось почесать репу, чтобы его придумать. А Вы будто поставили задачу оправдать этих проверяющих)) Я кстати замечу, что никто (от слова абсолютно) не предложил решения похожего по распределению задач, но более простого. Ну а к наименованию придираться можно конечно, но если тебе что-то непонятно можно спросить товарища, который это писал. Нейминг это не точная наука. А по поводу того, что проверяющие не обязаны разбираться - ну как бы смешно. Задачу придумать они могут, простое решение не достаточно производительное, поэтому очевидно, что будет не что-то простое им отправлено и им должно хватать квалификации разбираться в том, что они задали. А так получилось, что они сами не разобрались в чем проблема. А в работе как будет? тесты упали, оооо да там всё не так, давайте всё перепишем, а там условно не хватает одного volatile ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 10:41 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Andrei TquestionerЕсли имелось ввиду то, что whenComplete(Async) может не выполниться, то это не правда Наверно все-таки имелось в виду то, что надо делать так: Код: java 1. 2. 3. 4. 5. Иначе возникает race condition между экзекутором и тредом, выполняющим compute, и как следствие блокировка с зависанием в отдельных случаях. Andrei Tquestionerпропущено... я думаю это по другому называется) просто произойдёт зависание в случае если таска выплюнет эксекпшн Даже если не выплюнет, а просто выполнится раньше, чем будет привязан колбэк. На второй странице это обсуждали. В принципе не суть важно, как это называть, но обычно зависимость результата от порядка выполнения кода в многопоточной среде называют именно так :) finally не влияет на race condition-ы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 10:46 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questioner, А у тебя бенчмарков случаем не осталось? Я чуть покрутил твой алгоритм, заменив CompletableFuture на не синхронизированную очередь(синхронизация уже провайдится compute ) и внёс(на мой взгляд) ряд оптимизиций: Шедуля таску не надо каждые раз возвращать новый маппинг для мапы, если уже есть таска в прогрессе то просто возвращаем уже сушествующую очередь жаждущих выполнится на том же самом ключе, что позволяет не аллоцировать новый узел для мапы если уже есть таска с таким ключем в прогрессе. Отказ от фьюч позволил совместить compute и remove в одно целое, воспользовавшись свойством того, что если compute возвращает null то entry удалается из мапы, тобишь whenCompleteAsync стал вообще не нужным, не нужно на кажду таску вкидывать в пул еще одну таску, абсолютный win на мой взгляд по CPU и аллокациям Код: 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. Но надо признаться, что я этот код еще не тестил, потому что тесты дома остались, и естественно как предполагал Blazkowicz кода меньше не стало, стало только больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 12:09 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
vimba, я не бенчмаркил. Очень поверхностные замеры только были. тут это не поможет. в этом решении удаление блочит бакет зато и случается абсолютно для каждой таски. А в моём варианте оно происходит параллельно с задачами из бакета и вообще не происходит в случае если фьча по этому ключу поменялась(то есть новая задача подкинулась по этому ключу). Но на каких-то входных данных всё же видимо заработает быстрее. Думаю на реалистичных задачах он будут работать одинаково) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 12:40 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
vimbaкак предполагал Blazkowicz кода меньше не стало, стало только больше. Ну, если так писать, то да. Но, что-то мне подсказывает что можно и так, например: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 13:36 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:22 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Код: java 1. 2. 3. Рано или поздно здесь выскочит ConcurrentModificationException ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:42 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questionerBlazkowicz, Это на мой взгляд самая хитрая часть этого кода и было потрачено много времени, чтобы придумать эту конструкцию Извините, что так поздно, но мне кажется, что вы не ответили на показанный vimba спорный кусок кода Код: 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. А потом сделайте финту ушами и закомментируйте taskMap.remove(key, future); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:48 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Andrei TРано или поздно здесь выскочит ConcurrentModificationException Полюбому выскочит. Надо циклы объединить и poll использовать. Но, блин, через poll уродливо выходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:51 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Andrei TBlazkowicz, Код: java 1. 2. 3. Рано или поздно здесь выскочит ConcurrentModificationException Вообще-то нет, вру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:51 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Andrei T, Путаешь меня почем зря. javadocIterators are <i>weakly consistent</i>, returning elements reflecting the state of the queue at some point at or since the creation of the iterator. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:53 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевИзвините, что так поздно, но мне кажется, что вы не ответили на показанный vimba спорный кусок кода Вроде, три раза уже ответили: whenCompleteAsync() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:55 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAndrei T, Путаешь меня почем зря. javadocIterators are <i>weakly consistent</i>, returning elements reflecting the state of the queue at some point at or since the creation of the iterator. Да, ввел в заблуждение всех, сорян ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:55 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Andrei TДа, ввел в заблуждение всех, сорян Но, там всё равно через poll() должно эффективнее работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 14:58 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВроде, три раза уже ответили: whenCompleteAsync() Как это влияет на то, что из мапы пытаются удалить что-то до того, как туда его вставили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 15:03 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 15:06 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Result in map then remove: null Final result in map: java.util.concurrent.CompletableFuture@3e3abc88[Completed normally] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 15:06 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевКак это влияет на то, что из мапы пытаются удалить что-то до того, как туда его вставили? Хороший вопрос. А ведь и правда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 15:08 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСергей АрсеньевКак это влияет на то, что из мапы пытаются удалить что-то до того, как туда его вставили? Хороший вопрос. А ведь и правда. Это влияет на то в каком треде будет происходить удаление. Тогда только летч поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 16:16 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczvimbaкак предполагал Blazkowicz кода меньше не стало, стало только больше. Ну, если так писать, то да. Но, что-то мне подсказывает что можно и так, например: Код: java 1. 2. 3. 4. 5. порядок мне кажется может нарушиться 1ый тред сделал computeIfAbsent 2ый тред сделал computeIfAbsent ... 2ый тред добавил в очередь 1ый тред добавил в очередь но это мелочь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 16:20 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAndrei TРано или поздно здесь выскочит ConcurrentModificationException Полюбому выскочит. Надо циклы объединить и poll использовать. Но, блин, через poll уродливо выходит. а что с poll-ом не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 16:37 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА, давайте оптимизациями меряться! на мой взгляд стало хуже. Вот здесь задачи с одинаковым ключом получают преимущество в планировании: Код: java 1. 2. 3. А вот здесь Код: java 1. из очереди ничего удаляться не будет, for loop же не удаляет из Queue ничего, если предположить что вы забыли удалить задачу тем или иным образом (ну там poll вместо for loop), то все равно беда, потому что вот здесь: Код: java 1. к моменту вызова add очередь может быть уже пустой, и ничего выполняться уже не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 16:56 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
questionerЭто влияет на то в каком треде будет происходить удаление. У меня это влияет и на то, вызовется потом новый whenCompleteAsync (другими словами будет ли запущен следующая задача с тем же ключом) или нет. В одном запуске теста вызывается, в другом нет. Т.е. не только утечка памяти по отработанным ключам, но и потеря задач. Я б не мудрствовал бы и просто сделал очередь задач. И разгребальщик с мапой для работающих. Правда ошибок бы понасажал поначалу... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 16:57 |
|
||
|
Сказали, что выполнил тестовое задание неправильно, я с этим не согласен. Кто прав?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевquestionerЭто влияет на то в каком треде будет происходить удаление. У меня это влияет и на то, вызовется потом новый whenCompleteAsync (другими словами будет ли запущен следующая задача с тем же ключом) или нет. В одном запуске теста вызывается, в другом нет. Т.е. не только утечка памяти по отработанным ключам, но и потеря задач. А это про какой конкретно код речь. Не очень понятно почему whenCompleteAsync может не отработать. он же цепляется к фьюче. Другое дело, что как Вы внимательно заметили в мапу значение может и не быть добавлено ещё. Сергей АрсеньевЯ б не мудрствовал бы и просто сделал очередь задач. И разгребальщик с мапой для работающих. Правда ошибок бы понасажал поначалу... :) Можно как-то поподробнее? есть очередь, есть мапа. Как они связаны? мапа очередей или очередь мап? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 17:18 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39515602&tid=2122587]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
101ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 482ms |

| 0 / 0 |
