Сам себя поправлю
Здравствуйте, 0xCAFEDEAD, Вы писали:
CAF>Здравствуйте, arth, Вы писали:
A>>Здравствуйте, 0xCAFEDEAD, Вы писали:
CAF>>>Здравствуйте, arth, Вы писали:
CAF>>>Честно говоря, по американским меркам, ты им посто нахамил. Думаю, что можно списать на разницу культур, учитывая общий уровень англ. — но вообще это просто жесть.
A>>а при чем здесь америка? может они из австралии? а по факту русские пацаны из питера CAF>Я написал для примера. CAF>Раз уж у тебя собеседование на англ., то и культуру в конторе перенимают оттуда скорее всего.
CAF>>>Ксати в дискусси на форуме нет смысла особенно препираться, это тебе с работой не поможет. Твоя задача, не нас уюедить, а понять что у тебя не так. Лучше подумай почему люди тебя не понимают.
A>>откуда ты знаешь какая у меня задача? может мне тут пободаться в кайф и работа мне вообще не нужна?
CAF>Да видимо так и есть.
A>>>>The solution is no concurrency safe — transaction is not atomic A>>>> me — there is no explicit requirement and actually basic A>>>>transaction (add) is atomic. There is no race conditions. Atomicity of A>>>>_transfer_ is required if we don't want to loose data — but here there A>>>>is no such problem since we don;t store anything between sessions.
CAF>Проверил хватает ли денег в первой транзакциии, затем вьорая все списала, и вот ты в минусе CAF>Нужен лок на всю операцию по аккаунту.
Неправду я тут написал, есть там и есть лок (мерж) на всю операцию. Просмотрел.
Трансфер не атомарен, но вроде действительно работает правильно. В реальной жизни, проблема только, с тем что сумма денег не можеть не соответствовать реальной.
Здравствуйте, arth, Вы писали:
A>>>кто платит премиальные деньги? откуда такая информация? B>>Очевидно, что соглашаясь на тестовое задание в 6 часов, ты рассчитываешь на какие-то премиальные деньги. Ты же не станешь делать тестовое задание в контору, где платят в 2 раза меньше чем ты имеешь сейчас. A>почему какая-то бинарность — либо в 2 раза меньше, либо премиальные? просто нормальные деньги. меньше, чем на моей предыдущей работе
По мне это странно, ну ок.
A>>>и откуда ты знаешь насколько со мной приятно работать? B>>Из фрагмента твоей деловой переписки. После такого матраса я бы на месте интервьюера порекомендовал бы no-go. Собственно, советую не очень удивляться, получая отлупы на казалось бы ровном месте. Одно дело желание агрессивно заэнфорсить свое мнение в срачике на РСДН, и совсем другое — работая в западной конторе. Впрочем, я думаю в Нетфликсе тебе бы очень понравилось. A>ну это еще зависит от того как читать, верно? ну и деловая переписка бывает разной )
Читать по-английски, полагаю? Я читаю, и то что я читаю мне совсем не нравится, будь ты 100 раз прав. Контор с культурой Нетфликса тут совсем немного.
A>я, строго говоря, им ничего не должен, как и они мне. вот если бы я на них работал, было бы другое дело.
Ты к ним и не попадешь, если будешь и впредь продолжать жить в парадигме совковой настырности. Это не оскорбление, а констатация факта, я сам был таким же, и это стоило мне довольно дорого.
A>>>>>If we transfer negative amount money, author don’t throw exceptions, it takes abs value of this amount and transfer positive amount of money. A>>>>>transferring negative amount is something which is odd. So it's a A>>>>>convention. It either has to be documented or exception should be A>>>>>thrown. So I partially agree. B>>>>ИМО это эпичный фэйл, а не partially agree. A>>>эпичный фейл это отсутствие abs. а с abs это просто другая культура B>>Мде. A>ну да. где-то -1 — это "все хорощо", а где-то 0. но я в целом согласен, что тут лучше с exception. я не согласен с тем, что это major
Понимаешь в чем проблема, тебе было очевидно, что надо сделать Abs, а мне — нет. Я, как пользователь API, не должен додумывать за его создателя, я должен получить ясный ответ, в чем моя проблема. Не надо делать странные манипуляции с инпутом, надо просто кидать кастомный эксепшен с объяснением проблемы.
A>>>>>Author don't know how to catch exceptions in junit A>если по теме, то я не совсем понял суть предложения "Author don't know how to catch exceptions in junit". как ловить эксепшены вне Junit я, кажется, знаю)
Я не джавист, но полагаю что речь вот об этом:
@Test
fun testFailedAdd() {
val s = WalletImpl( StorageImpl())
try {
s.add("1", (-1).toBigDecimal())
}
catch (e: Exception) {
Assert.assertTrue(s.list().count() == 0)
return
}
Assert.assertTrue(false)
}
Это собственно, очень печально, поскольку такой функционал появился, судя по release notes, появился в 2006 году. Ты должен был объявить кастомный эксепшен для этой ситуации, и кидать его, а юнит-тест, полагаю, должен был быть таким:
@Test(expected = WhateverCustomException.class)
fun Add_should_fail_when_negative_input_value_provided() {
val s = WalletImpl( StorageImpl())
s.add("1", (-1).toBigDecimal())
}
Улучшенная версия, разумеется, не должна содержать конкретной имплементации депенденсис, потому что ты тестируешь поведение твоего кода в контролируемом окружении (повторяю — я не джавист):
@BeforeClass
public void setUpClass() throws Exception {
// тут инициализация абстракций_storage = Substitute.For<Storage>()// хз как это делать в джаве
}
@Test(expected = WhateverCustomException.class)
fun testFailedAdd() {
val s = WalletImpl(_storage);
s.add("1", (-1).toBigDecimal())
}
...
A>>я, строго говоря, им ничего не должен, как и они мне. вот если бы я на них работал, было бы другое дело. B>Ты к ним и не попадешь, если будешь и впредь продолжать жить в парадигме совковой настырности. Это не оскорбление, а констатация факта, я сам был таким же, и это стоило мне довольно дорого.
так я и не собираюсь к ним попадать.
A>>>>>>If we transfer negative amount money, author don’t throw exceptions, it takes abs value of this amount and transfer positive amount of money. A>>>>>>transferring negative amount is something which is odd. So it's a A>>>>>>convention. It either has to be documented or exception should be A>>>>>>thrown. So I partially agree. B>>>>>ИМО это эпичный фэйл, а не partially agree. A>>>>эпичный фейл это отсутствие abs. а с abs это просто другая культура B>>>Мде. A>>ну да. где-то -1 — это "все хорощо", а где-то 0. но я в целом согласен, что тут лучше с exception. я не согласен с тем, что это major B>Понимаешь в чем проблема, тебе было очевидно, что надо сделать Abs, а мне — нет. Я, как пользователь API, не должен додумывать за его создателя, я должен получить ясный ответ, в чем моя проблема. Не надо делать странные манипуляции с инпутом, надо просто кидать кастомный эксепшен с объяснением проблемы.
получил бы в документации. но тут уже че мусолить, я согласился что у меня не лучший варик
A>>>>>>Author don't know how to catch exceptions in junit A>>если по теме, то я не совсем понял суть предложения "Author don't know how to catch exceptions in junit". как ловить эксепшены вне Junit я, кажется, знаю) B>Я не джавист, но полагаю что речь вот об этом:
B>
B>Это собственно, очень печально, поскольку такой функционал появился, судя по release notes, появился в 2006 году. Ты должен был объявить кастомный эксепшен для этой ситуации, и кидать его, а юнит-тест, полагаю, должен был быть таким:
B>
B> @Test(expected = WhateverCustomException.class)
B> fun Add_should_fail_when_negative_input_value_provided() {
B> val s = WalletImpl( StorageImpl())
B> s.add("1", (-1).toBigDecimal())
B> }
B>
почему печально? я просто этого не знал. может быть потому, что на джаве в прод писал я меньше года. и это как-бы публичная инфа для работодателя.
B>Улучшенная версия, разумеется, не должна содержать конкретной имплементации депенденсис, потому что ты тестируешь поведение твоего кода в контролируемом окружении (повторяю — я не джавист):
B>
B> @BeforeClass
B> public void setUpClass() throws Exception {
B> // тут инициализация абстракций
B> _storage = Substitute.For<Storage>()// хз как это делать в джаве
B> }
B> @Test(expected = WhateverCustomException.class)
B> fun testFailedAdd() {
B> val s = WalletImpl(_storage);
B> s.add("1", (-1).toBigDecimal())
B> }
B>
у меня прям в коде есть коммент "mock Storage?". Я просто не стал этого делать
...
A>>я вообще не очень понимаю суть претензий от них. ты вот мне можешь вместо "мдааа" написать в чем косяк? CAF>Мдаа по поводу ответа. Вот спросил бы у них, что им не нравится.
не было возможности
...
A>>>>Poor documentation — there is no specifications of endpoints, how to build a project A>>>>KL — there is a README. And there is a build.gradle. It's kind of A>>>>misunderstanding what we expect from 6hrs test.
CAF>>>Вот кстати, уже более внятное объяснение. К концы начало получаться немного.
A>>ну мне не 15 лет чтобы хотеть всем нравиться
CAF>Причем тут это?
при том, что у меня не 3 года опыта чтобы хотеть нравиться всем подряд, а 13+.
представь, что ты тратишь 10 часов на работу, которую, как многие в этой ветке, проверяют наотвали.
тут половина людей, включая тебя, не сразу увидели в чем прикол с потокобезопасностью. но у вас не стоит задачи
меня нанять, с вас взятки гладки. а вот у них стоит, и свою задачу они решают очень посредственно. ну я им об этом и говорю. а в какой форме говорить — ну сам выбираю в соответствии со своим впечатлением о них
...
CAF>>Проверил хватает ли денег в первой транзакциии, затем вьорая все списала, и вот ты в минусе CAF>>Нужен лок на всю операцию по аккаунту. CAF>Неправду я тут написал, есть там и есть лок (мерж) на всю операцию. Просмотрел.
супер
CAF>Трансфер не атомарен, но вроде действительно работает правильно.
ага
CAF>В реальной жизни, проблема только, с тем что сумма денег не можеть не соответствовать реальной.
Здравствуйте, arth, Вы писали:
A>>>я, строго говоря, им ничего не должен, как и они мне. вот если бы я на них работал, было бы другое дело. B>>Ты к ним и не попадешь, если будешь и впредь продолжать жить в парадигме совковой настырности. Это не оскорбление, а констатация факта, я сам был таким же, и это стоило мне довольно дорого. A>так я и не собираюсь к ним попадать.
А какой тогда смысл? Не могу уловить.
A>>>>>>>Author don't know how to catch exceptions in junit A>>>если по теме, то я не совсем понял суть предложения "Author don't know how to catch exceptions in junit". как ловить эксепшены вне Junit я, кажется, знаю) B>>Я не джавист, но полагаю что речь вот об этом:
B>>Это собственно, очень печально, поскольку такой функционал появился, судя по release notes, появился в 2006 году. Ты должен был объявить кастомный эксепшен для этой ситуации, и кидать его, а юнит-тест, полагаю, должен был быть таким: A>почему печально? я просто этого не знал. может быть потому, что на джаве в прод писал я меньше года. и это как-бы публичная инфа для работодателя.
Печально потому, что ты утверждаешь, что у тебя 13 лет экспы. За 13 лет можно наверное было поднавтыкаться читать доки на минимальном уровне, да и раньше наверняка занимался чем-то схожим, там должны были быть похожие конструкции.
Это на самом деле говорит о низкой мотивации, и низком уровне самообразования. Когда у программиста нет любопытства — это так себе программистЪ, просто человек работающий за деньги Кого-то это устроит, кого-то нет. Я бы не рекомендовал брать, выше по трэду говорят что норм.
A>у меня прям в коде есть коммент "mock Storage?". Я просто не стал этого делать
А почему не стал? Это же десяток строк полуавтоматического кода.
Здравствуйте, binnom, Вы писали:
B>Здравствуйте, arth, Вы писали:
A>>>>я, строго говоря, им ничего не должен, как и они мне. вот если бы я на них работал, было бы другое дело. B>>>Ты к ним и не попадешь, если будешь и впредь продолжать жить в парадигме совковой настырности. Это не оскорбление, а констатация факта, я сам был таким же, и это стоило мне довольно дорого. A>>так я и не собираюсь к ним попадать. B>А какой тогда смысл? Не могу уловить.
я написал тест, они посмотрели и ответили что no go. я спросил почему. они прислали список претензий; я ответил
A>>>>>>>>Author don't know how to catch exceptions in junit A>>>>если по теме, то я не совсем понял суть предложения "Author don't know how to catch exceptions in junit". как ловить эксепшены вне Junit я, кажется, знаю) B>>>Я не джавист, но полагаю что речь вот об этом:
B>>>Это собственно, очень печально, поскольку такой функционал появился, судя по release notes, появился в 2006 году. Ты должен был объявить кастомный эксепшен для этой ситуации, и кидать его, а юнит-тест, полагаю, должен был быть таким: A>>почему печально? я просто этого не знал. может быть потому, что на джаве в прод писал я меньше года. и это как-бы публичная инфа для работодателя. B>Печально потому, что ты утверждаешь, что у тебя 13 лет экспы. За 13 лет можно наверное было поднавтыкаться читать доки на минимальном уровне, да и раньше наверняка занимался чем-то схожим, там должны были быть похожие конструкции.
что за ерунду ты пишешь? первый тут твой комментарий в ветке — "Они, конечно же, правы. Комон сенс здесь как бы орет, что метод должен быть трэдсейф."
то есть ты даже не потрудился разобраться в том, что ты комментируешь. я спокойно тебе ответил на него, не стал делать каких-то выводов о твоей способности
читать, писать и думать. какой смысл делать какие-то далеко идущие выводы на тему умею я читать доки на минимальном уровне или нет?
что за культура предсказателей?
B>Это на самом деле говорит о низкой мотивации, и низком уровне самообразования. Когда у программиста нет любопытства — это так себе программистЪ, просто человек работающий за деньги Кого-то это устроит, кого-то нет. Я бы не рекомендовал брать, выше по трэду говорят что норм.
я для начала предлагаю тебе научиться врубаться в контекст, а потом рассуждать про мой уровень чего бы то ни было
A>>у меня прям в коде есть коммент "mock Storage?". Я просто не стал этого делать B>А почему не стал? Это же десяток строк полуавтоматического кода.
Здравствуйте, arth, Вы писали:
A>я написал тест, они посмотрели и ответили что no go. я спросил почему. они прислали список претензий; я ответил
А зачем ответил? Думаешь что это что-то изменит?
B>>Печально потому, что ты утверждаешь, что у тебя 13 лет экспы. За 13 лет можно наверное было поднавтыкаться читать доки на минимальном уровне, да и раньше наверняка занимался чем-то схожим, там должны были быть похожие конструкции. A>что за ерунду ты пишешь? A>что за культура предсказателей?
У тебя повышенная возбудимость, ты в этом не виноват — гены поднасрали. Ты в очередной раз махнешь рукой на непрошенный совет, но все же — почитай про майндфулнэс и медитацию. Если не поможет, то можно сходить на курсы anger management.
B>>Это на самом деле говорит о низкой мотивации, и низком уровне самообразования. Когда у программиста нет любопытства — это так себе программистЪ, просто человек работающий за деньги Кого-то это устроит, кого-то нет. Я бы не рекомендовал брать, выше по трэду говорят что норм. A>я для начала предлагаю тебе научиться врубаться в контекст, а потом рассуждать про мой уровень чего бы то ни было
Зачем мне врубаться во что-то? Есть определенные маркеры, которые говорят — go or no go. С моей точки зрения ты показал множественные no go, и уже третий день пытаешься нас всех агрессивно переубедить и доказать что ты хороший и все сделал правильно. Я собственно, поэтому бы и не стал брать. Мне лично на работе не нужны истерики и драматурги, с которыми надо тратить время на уговоры.
A>>>у меня прям в коде есть коммент "mock Storage?". Я просто не стал этого делать B>>А почему не стал? Это же десяток строк полуавтоматического кода. A>времени жалко
А три дня проведенные в этом срачике совсем не жалко?
Здравствуйте, arth, Вы писали:
A>когда ты приносишь кеш в банк тоже есть парный счет? здравый смысл подсказывает, что в контексте этого тестового задания они обязаны появляться из воздуха
Представь себе есть и называется он "счет кассы". Деньги вносятся на счет кассы и переходят в активы банка, а взамен этого банк становится тебе должен равную сумму, которая отражается на твоем личном счете и относится к пассивам банка.
И когда ты попросишь свои деньги кешем обратно, банк сделает обратную операцию с твоего счета на счет кассы.
A>вообще без комментариев, учитывая твои предположения об источниках денег
ЧТо-то мне подсказывает, что про источники денег я знаю много больше твоего
Здравствуйте, arth, Вы писали:
A>Здравствуйте, 0xCAFEDEAD, Вы писали:
A>...
CAF>>>Проверил хватает ли денег в первой транзакциии, затем вьорая все списала, и вот ты в минусе CAF>>>Нужен лок на всю операцию по аккаунту. CAF>>Неправду я тут написал, есть там и есть лок (мерж) на всю операцию. Просмотрел.
A>супер
CAF>>Трансфер не атомарен, но вроде действительно работает правильно.
A>ага
CAF>>В реальной жизни, проблема только, с тем что сумма денег не можеть не соответствовать реальной.
A>не понял
у тебя на всех аккаунтах в сумме будет неправильное в середине трансфера, где-то списалось, но не начислсилось еще
на самом деле, все равно все сложнее, так что это только разговор начать
Здравствуйте, arth, Вы писали:
A>Здравствуйте, 0xCAFEDEAD, Вы писали:
A>...
A>>>я вообще не очень понимаю суть претензий от них. ты вот мне можешь вместо "мдааа" написать в чем косяк? CAF>>Мдаа по поводу ответа. Вот спросил бы у них, что им не нравится.
A>не было возможности
Ты же им ответ писал? A>...
A>>>>>Poor documentation — there is no specifications of endpoints, how to build a project A>>>>>KL — there is a README. And there is a build.gradle. It's kind of A>>>>>misunderstanding what we expect from 6hrs test.
CAF>>>>Вот кстати, уже более внятное объяснение. К концы начало получаться немного.
A>>>ну мне не 15 лет чтобы хотеть всем нравиться
CAF>>Причем тут это?
A>при том, что у меня не 3 года опыта чтобы хотеть нравиться всем подряд, а 13+. A>представь, что ты тратишь 10 часов на работу, которую, как многие в этой ветке, проверяют наотвали. A>тут половина людей, включая тебя, не сразу увидели в чем прикол с потокобезопасностью. но у вас не стоит задачи A>меня нанять, с вас взятки гладки. а вот у них стоит, и свою задачу они решают очень посредственно. ну я им об этом и говорю. а в какой форме говорить — ну сам выбираю в соответствии со своим впечатлением о них
Я имел ввиду твою манеру письма (ответы им). Это вообще автоматически должно делаться нормальными выражениями.
Конечно по-хорошему, любое более-менее нормально сделанное задание стоит получше обсудить, иначе смысл его давать?
А так забей просто. Если от тебя не ждут познаний в финансах (и не обсуждали явно) — нормально задание сделал. Может и в реальной жизни трансфер не атомарен, хз. Ну может они в голове у себя решение прибили, может уже другого выбрали, может еще много чего. Был бы иы им интересен — сами бы продолжили обсуждение.
Там в этой конторе хоть что-нибудь интересное было?
Здравствуйте, lintik, Вы писали:
L>Представь себе есть и называется он "счет кассы". Деньги вносятся на счет кассы и переходят в активы банка, а взамен этого банк становится тебе должен равную сумму, которая отражается на твоем личном счете и относится к пассивам банка. L>И когда ты попросишь свои деньги кешем обратно, банк сделает обратную операцию с твоего счета на счет кассы.
Просто мимо проходил и заинтересовало: а для "счета кассы" какой счет парный? Как туда деньги зачисляют?
Здравствуйте, StatujaLeha, Вы писали:
SL>Просто мимо проходил и заинтересовало: а для "счета кассы" какой счет парный? Как туда деньги зачисляют?
Счет где учитывается сумма на счетах клиента(ов).
Но тут некоторое смешение бух.учета с банковской операционной деятельность. Хотя в реальных системах оно и на самом деле скорее всего ведется вместе.
Здравствуйте, pagid, Вы писали:
P>Счет где учитывается сумма на счетах клиента(ов). P>Но тут некоторое смешение бух.учета с банковской операционной деятельность. Хотя в реальных системах оно и на самом деле скорее всего ведется вместе.
Я понимаю, что раз на счет клиента деньги зачисляются со счета кассы, то в рамках перевода возникает пара "счет кассы" — "счет клиента".
Пришел человек с кэшем: как в рамках этой модели кэш попадает на "счет кассы"?
Здравствуйте, StatujaLeha, Вы писали:
SL>Пришел человек с кэшем: как в рамках этой модели кэш попадает на "счет кассы"?
Дебет счета "Деньги в кассе"
Кредит — "Счет клиента"
Проверка — сумма по дебету и по кредиту равна
Сумма на счете "деньги в кассе" равна тому сколько налички должно быть в кассе
Сумма в кредите "Счета клиентов" общей сумме денег клиентов.
Это бухгалтерский подход, не настаиваю на том, что выполняющий то тестовое задание должен быть про него в курсе.
Здравствуйте, arth, Вы писали:
A>зачем? чтобы просто показать, что я умею затащить в апп как депенденси и сделать таблицу из 2х полей?
Чтобы показать что ты знаешь что такое БД, умеешь правильно делать ее схему, знаешь что такое транзакция и уроыень ее изоляции. Ты же показал, что очень далек от финансовых приложений.
Второй момент — ты конкретно так накосячил с REST API. Т.е. ты вообще не знаешь что такое REST, у тебя самая примитивная ошибка — глаголы в урлах. Чего не должно быть в принципе.
Итого: не знаешь БД, не знаешь REST.
Здравствуйте, elmal, Вы писали:
E>Так что если кого подобный код на тестовых заданиях не удовлетворит — это их проблемы, зажрались
Никто там не зажрался. Когда на задание, называющееся "Design and implement a RESTful API" выдают такой неумелый треш с кандидатом разговаривать больше не о чем, это полный ноль в означенной теме. И ведь всего то надо было ознакомиться с любым дизайн гайдом по REST API, чтива на полчасика. Но нет, мы сразу бросаемся лопатить 6 часов код не ознакомившись с основами.