|
|
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
В дойчебанке просят имплементировать функцию transer(from,to,amount) свободную от дедлоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 16:57:29 |
|
||
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪВ дойчебанке просят имплементировать функцию transer(from,to,amount) свободную от дедлоков. Кстати, да. Ещё одна хорошая причина использовать CAS. Я таки был не прав на счет блокировки. CAS выходит лучше со всех сторон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 17:01:34 |
|
||
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪВ дойчебанке просят имплементировать функцию transer(from,to,amount) свободную от дедлоков. и с возможностью послать одновременно в обе стороны по 100 евро? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 17:48:06 |
|
||
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
Если мне не изменяет память, то задача перевода с одного аккаунта на другой от и до рассмотрена в Java Concurrency in Practice ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 18:58:33 |
|
||
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЯ таки был не прав на счет блокировки. CAS выходит лучше со всех сторон. Эта транзакция полностью детерминирована на начальный момент - поэтому проблем с дедлоком можно избежать блокируя в определенном порядке (например по возрастанию номеров аккаунтов). Так что блокирование в этом смысле не столь плачевно, чем в случае, когда операнды возникают по ходу пьесы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 20:05:07 |
|
||
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪВ дойчебанке просят имплементировать функцию transer(from,to,amount) свободную от дедлоков. Можно в каждом потоке просто логгировать бизнес-операции с указанием сигналов точного времени в микросекундах. Здесь барьером будет только обращение к системному таймеру и... и конечно-же процедура мёрджа бизнес-операций в конце опер-периода. Ну и ... цена вопроса - когда мёржить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 20:15:18 |
|
||
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
Andrew1411для такого мультивалютного счета, я бы лучше написал такой код (беглый рефакторинг) Код: java 1. 2. 3. 4. 5. 6. 7. 8. Извините, но это же трэшачок. У вас здесь лютый race condition, ибо вы вы делаете классический неатомарный read-modify-write, хоть каждая отдельная операция и атомарна. Вот корректная имплементация: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Если напрягает создание нового AtomicLong каждый раз, то вот так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 21:30:41 |
|
||
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
А, не. Гонки нет. Просто непонятно зачем вы 3 раза лезите в конкурентную коллекцию, хотя это можно сделать за 1 раз, если не жалко закинуть AtomicLong в GC, или 2 раза, если таки жалко. Игнорирование результата операций типа compareAndSet, putIfAbsent или replace - это в 95% случаев code smell, то есть какая-то хрень в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2013, 21:33:38 |
|
||
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
Обсуждать задачу в контексте банковской бизнес-логики смысла не имеет: - прежде всего, многопоточность тут вообще не при делах, т.к. количество jvm существенно больше одной в подобных системах. - остаток счета в виде одной цифры также не имеет смысла, - нужно держать информацию о каждом движении, изменяющем остаток по счету - есть счета, остатки по которым меняются очень часто, причем если по счетам доходов банка актуализировать остатки не надо, то, например, по счету кассы подразделения - надо. - счета одновалютные. мультивалютный счет - это просто несколько счетов, открытых к одному договору. - конверсия - отдельная тема, с остатками по счетам не связанная. Поэтому, данную задачу следует рассматривать исключительно как задачу на многопоточность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:13:34 |
|
||
|
Задача с собеседования
|
|||
|---|---|---|---|
|
#18+
Спасибо за замечания, коллеги, 1)Эксепшоны надо, конечно, делать checked. И getPrevCurrencyBalance в отдельном методе выглядит посмпотичнее 2)Еще понравилась идея с енумами, на первый взгляд неочевидная, вкупе с AtomicArray интересно может получиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 18:50:37 |
|
||
|
|

start [/forum/topic.php?fid=59&startmsg=38462326&tid=2128209]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
171ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 443ms |

| 0 / 0 |
