|
|
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
Решил тут склепать платформу с задачками по программированию, но отличную от существующих. http://frocate.com/ Обычно в онлайн платформах есть 2 варианта тестов по программированию: либо multiple choice вопросы, либо олимпиадные задачки. Вот я решил предложить альтернативу и делать более реалистичные задачки, типа как домашнее задание до/после собеседования бывает - некие более менее реалистичные требования и возможность использовать любые библиотеки. Пока задачки предполагалось использовать для тренировки/обучения и как вариант тестового задания в рамках собеседования. Собственно задачка пока готова только одна - написать приложение, которое принимает http запросы и дергает third-party сервис. Тема - денежные переводы. Подразумевается, что у нас есть legacy сервис, который позволяет изменять баланс счета, а нам нужно сделать сервис, который обернет такой АПИ в некоторое подобие транзакций и сможет делать retry/rollback. В минимальном варианте можно сделать часа за 2, оптимальный вариант может занять часов 15. Плюс, если конкретно такого типа задачки никогда не делали, то смело умножайте время на 5 :) Платформа пока еле работает, поэтому ошибки могут быть.. Любой фидбек приветствуется - от общих мыслей насчет осмысленности такого подхода, до найденных косяков и даже (!!!) собственно попыток решить задачку :) Let's roll! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2016, 20:12 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
че то я сомневаюсь в целесообразности этой затеи, ведь те кто уже может-умеет делать такое, то врядли будут себя на это растрачивать, а те кто не умеет, врядли будут браться. разумеется, это только имхо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2016, 20:32 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
rema174че то я сомневаюсь в целесообразности этой затеи, ведь те кто уже может-умеет делать такое, то врядли будут себя на это растрачивать, а те кто не умеет, врядли будут браться. разумеется, это только имхо :) Любое имхо пригодится :) Сомнения понятны и вполне обоснованы, поэтому думаю стоит добавить небольшое пояснение на этот счет. Я предполагал 2 юз кейса: 1. Начинающие (кто еще не работал программистом или работает недавно) порой спрашивают "как бы понять - я разрабатывать то умею/возьмут меня на работу или надо что-то срочно подтягивать?". Вот задачки, которые в итоге вам автоматически выдают результат в каком-то виде в этом случае помогают, решил задачку - можешь писать код, нет вопросов, не решил или как-то неожиданно много времени заняло - можно разобраться почему. 2. В рамках трудоустройства порой дают "домашнее задание" написать какую-то программку. Хотят посмотреть как человек пишет код. Проблема в том, что кандидат код прислал, там несколько тестов есть, но не на все кейсы, непонятно - программа вообще насколько работает. Да и составлять такие задания не всегда легко - можно сочинить слишком простую/сложную/непоказательную задачку. В общем база таких задачек не помешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2016, 21:08 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
rrrrrrrr, Вопрос по обработке ошибок - имеет ли смысл выносить на траспортный уровень (http) сообщения типа NOT_ENOUGH_MONEY? Получается обработчик бизнес логики завязан на транспортную ошибку http 400. Может быть имеет смысл оставить на http уровне все что относиться к низкому уровню http (сервису капут, запрос неправильный или не туда, упало все и тд) а NOT_ENOUGH_MONEY вернуть в http 200 в виде поля json объекта? { result: ERROR code: 123 message: NOT_ENOUGH_MONEY } Сегодня это http запрос с параметрами, завтра это будет веб сервис, потом это будет веб сервис с аутентикацией по сертификату и обработка ошибки бизнес уровня потащится в обработчик транспортного уровня. Или новая ошибка появится и придется модуль с транспортом переписывать. Или боже упаси один транспортный модуль в разных бизнес задачах в одной NOT ENOUGH MONEY а в другой NOT ENOUGH PEOPLE. Или это сторонний http клиент. И junit тяжелее делать когда транспорт слит с бизнес логикой. В случае возврата ошибки уровня бизнес логики в 200 response code в виде объекта расширение функционала будет проще и без разницы какой транспорт. Хоть на MQ Series переноси - вопрос 5 минут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2016, 23:42 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
мне нравится! добавьте русскую версию - потянутся школьники из РФ ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2016, 23:49 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
uid uniquerrrrrrrr, Вопрос по обработке ошибок - имеет ли смысл выносить на траспортный уровень (http) сообщения типа NOT_ENOUGH_MONEY? В случае возврата ошибки уровня бизнес логики в 200 response code в виде объекта расширение функционала будет проще и без разницы какой транспорт. Хоть на MQ Series переноси - вопрос 5 минут. Хороший поинт, спасибо, поправлю на днях, правда немного в другом виде, наверное. Конкретно в данном случае я не думаю, что http коды смешивают бизнес-логику и транспорт, ведь логично вынести транспорт в отдельный класс и дергать Status performDebitOperation() Которая будет возвращать enum с NOT_ENOUGH_MONEY и другими ошибками. То есть, например, класс-транспорт будет мапить http code + header value на Status. Другое дело, что наличие кода 400 в условии никакие доп. скиллы не проверяет, но добавляет немного работы, что не является целью задачки, а значит этот момент действительно можно убрать и всегда возвращать 200. Я упустил этот момент изначально. Насчет json все хитро. Я думал делать задачку близкую к реальности, грубо говоря завтра будешь писать настоящий код, который twitter вызывает и он вернет json, значит в задачке тоже неплохо бы json. Однако в задачке мы билдим jar-with-dependencies, а значит json библиотеку нужно паковать, что увеличивает размер бинарника. Хотелось бы чтобы он не стал огромным, тогда его можно сохранять на память, вместе с результатами билда :) Конкретно json-парсер наверное не занимает много места и его можно добавить, но возможно достаточно просто возвращать значение enum в теле запроса? Всем проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 12:10 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
Для информации - результаты тестов выглядят вот так: http://frocate.com/task.jsp?taskId=task-account-transfer#buildId=task-account-transfer__05-09-2016__12h-20m-00s-b1 http://frocate.com/task.jsp?taskId=task-account-transfer#buildId=task-account-transfer__04-09-2016__17h-08m-32s-b1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 13:29 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
rrrrrrrr, красиво и понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 20:25 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
rrrrrrrrКонкретно json-парсер наверное не занимает много места и его можно добавить, но возможно достаточно просто возвращать значение enum в теле запроса? Всем проще. Можно и так и сяк, путей много но желательно упростить отладку, уменьшить дублирование кода и делать отдельные хорошо отлаженные модили с повторным использованием. Отладка кода (и создание тестов) упрощается - за транспорт отвечает внешняя библиотека или отдельный отлаженный модуль, проверка нужна только для бизнес логики. При выполнении задачи у меня мысли о том не как написать а как расширять и поддерживать в будущем (работать с support division, объяснить как добыть нужную информацию, как понять в чем проблема так как у меня может не быть доступа к системе заказчика) и расширять текищий функционал с минимумом переделок и хорошим покрытием тестами, желательйо чтоб новый код не ломал сильно старые тесты (рефакторинг с умеренными усилиями и расходом времени). К примеру, у меня на проектах счет на тесты удет на сотни (больше 500+) частъ из них интеграционные и медленные, сборка проекта может делаться полчаса если врубать все тесты и если из за добавки кода придется тесты переделывать, то процесс затянется значит нужно новое (бизнес логика) накладывать наверх работающего базиса (транспорт). Сделал базис, отладил и не трогай его. PS json парсеры простые и их масса, можно добавить gson или jackson с примером кода и dependency блоком в условие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 22:14 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
пардон за опечатки, клавиатура фонетическая, путаю буквы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 22:15 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
А можно подробнее? Что использовали для создания? Мне нравится оформление и навигация просто :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2016, 08:32 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
NixicА можно подробнее? Что использовали для создания? Мне нравится оформление и навигация просто :) Bootstrap же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2016, 09:21 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
BlazkowiczNixicА можно подробнее? Что использовали для создания? Мне нравится оформление и навигация просто :) Bootstrap же Да, это конечно же bootstrap (использованный в стиле my first webapp). В остальном все тоже стандартно: jetty, docker, jsp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2016, 11:56 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
Герой дняrrrrrrrr, красиво и понятно Спасибо, стараемся :) Пока начальный фидбек такой, что все хотят симпатичную картинку и низкий порог вхождения. Поэтому в ближайшее время разнообразим описание задачки картинками, спрячем большие объемы текста в требованиях под кат, чтобы не отпугивать пользователей и немного доработаем формат результата - там будут более подробные описания кейсов и референсные значения для BAD/GOOD/EXCELLENT результатов, чтобы легче было понять чего от вас хотят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2016, 12:01 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
uid uniqueОтладка кода (и создание тестов) упрощается - за транспорт отвечает внешняя библиотека или отдельный отлаженный модуль, проверка нужна только для бизнес логики. Да мне кажется нет разницы. Вот берете вы http библиотеку, какой-нибудь Unirest например, вы можете ее дергать прям из кода - Unirest.get() и прям тут же парсить респонс с кодами, хедерами и json-контентом, а можете обернуть в отдельный класс и дергать BalanceServiceHttpImpl.performDebit(), который скроет все эти штуки. Замокали его для юнит тестов и нет разницы какой транспорт. uid uniqueПри выполнении задачи у меня мысли о том не как написать а как расширять и поддерживать в будущем (работать с support division, объяснить как добыть нужную информацию, как понять в чем проблема так как у меня может не быть доступа к системе заказчика) и расширять текищий функционал с минимумом переделок и хорошим покрытием тестами, желательйо чтоб новый код не ломал сильно старые тесты (рефакторинг с умеренными усилиями и расходом времени). Я думаю это слишком out of scope, хотя имхо, в этой конкретной задачке подобные моменты должны несильно влиять на код: базовая модульность всегда пригодится, а продвинутые вещи типа сложной системы мониторинга, ведения истории операции, автодетекта перформанс проблем тут не требуются (мне кажется их вообще нельзя проверить на проекте длинной меньше месяца). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2016, 12:12 |
|
||
|
Сделал платформу с задачками, зацените :)
|
|||
|---|---|---|---|
|
#18+
автор как понять в чем проблема так как у меня может не быть доступа к системе заказчика )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2016, 12:30 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=85&tid=2123609]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
15ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 277ms |

| 0 / 0 |
