|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Sergunka авторОдин из папских посланцев прибыл в город Флоренцию к художнику Джотто ди Бондоне, пообщался с ним и попросил несколько рисунков для демонстрации мастерства. Джотто улыбнулся, взял лист бумаги, макнул кисть в красную краску и одним движением нарисовал абсолютно правильный идеально ровный круг. - Вот рисунок, отвезите это Его Святейшеству – сказал художник... Придворного посланника круг не впечатлил. Более того, он решил, что над ним издеваются и насмехаются. Ему хотелось получить нормальный, классический рисунок, желательно на библейскую тему. Поэтому он стал спорить и требовать что-нибудь посолиднее, чем простой ровный круг. И тогда Джотто сказал: - Этого достаточно. Пошлите его с остальными рисунками, и вы увидите, заметят ли его. Если Папа разбирается в живописи, то он поймёт. Папа Римский всё понял. И пригласил Джотто участвовать в украшении собора Святого Петра. После чего художник стал знаменит, богат и получил множество заказов на фрески и мозаики в других храмах Италии. Умение решать задачи с литкода это сродни круга Джотто ди Бондоне я умею разворачивать листы. да. молодец. а теперь разверни докер. :) я жду когда этот тренд решения этого дибилизма закончится как и все предыдущие. к реальной работе это увы имеет не особо много отношения. и даже к нереальной. это как знание латыни. круто конечно то ты знаешь и я думаю ты будешь очень уважаем в кругу своих друзей программистов потому что они латынь не знают. всё же у меня вопрос. за какой срок на изи вы решаете задачки? я в гадилити изи решаю от 15ти минут до 3х часов на задачку ))) в литкоде вообще какой то трешняк. жмешь прогон тестов - пишет ок. жмешь сабмит оно говорит 20% тесткейсов пройдено твой результат отстой. мазафака. так вы хоть тесткейсы то покажите чтоб я сам прогнал. нет. должен сам догадаться и протестить со всех сторон свой код. да пошло оно всё. бомбит. тут думаю с джотто ди бондини чтоб выделиться среди толпы таких же одноклеточных бейсик-ориентированных программистов на предложение порешать задачку с обходом очередного дерева надо насрать просто кругом и предложить будущим коллегам проверить результат. уверен эффект будет тоже как у того итальянца. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 12:24 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 Lelouch пропущено... - только у тебя в вызове второй параметр явно не pageable P.S. По коду похоже, что ищешь пользователей, которые не участвовали в опросе. а кто сказал,что я его туда не дабавлю? конечно никто не будет выгружать все и целиком- там по 2-3 млн записей в среднем вот я сделал как ты предлагал,выбрать все сразу и потом произвести фильтрацию и маппинг и если в моем случае мы в базу ходим- то тут сношаем коллекцию с парой млн элементов - и просто нет времени сейчас проверять что быстрей - но вангую что в бд сходить циклом будет точно не медленней,а может и быстрей [/src] это всё относительно. и надо смотреть конкретный случай ну это мой личный опыт. ты фетчишь с джойном всё что надо для выборки - у тебя запрос играет скажем 10 секунд. ты бежишь по циклу у тебя 10 запросов по секунде. в итоге задача одного запроса решена. но перформанс чот ни разу лучше не стал :) но в хибере есть всякие свистелки-перделки которые тебе позволяют вытаскивать только то что надо и тогда выходит малость быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 12:28 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79, >я таки проведу эксперемент все равно Бла бла бла ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 13:10 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
У задач с коллекциями есть два аспекта. Первое - это решить корректно . Ну тоесть чтобы ваш тест-кейс зашел в зеленый сегмент. С этим у вас все чики-пики. Решаете. Вовлекая сущности мира Collections, Streams e.t.c. И второй аспект - это оптимизация потребления памяти . Я о нем думаю постоянно. Heap не резиновый. А коллекции из баз данных обычно во много раз превышают размеры доступной памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 14:03 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79, Это хорошо, только в данном коде по прежнему есть проблемы. Если я правильно помню, hibernate по умолчанию использует передачу параметров с помощью setParameter у PreparedStatement (он умеет еще и инлайнить значения прямо в строку запроса). У баз данных часто есть ограничения на количество параметров в запросе, например ~2000 в MS SQL. Поэтому, если findAllByPollIdAndDebugFalseOrderByIdAsc может вернуть несколько тысяч записей, необходимо разбивать коллекцию идентификаторов PollChannel на пачки и запрашивать данные для каждой пачки отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 15:37 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Вопрос вобщем ко всем участникам. Zzz79 Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Я желтым маркером отметил подозрительный Performance-smell, который мне не нравится. Я пока не готов сказать что этот код не проходит review. Если он прошел тестирование - то хорошо. Но мой вопрос касается философии работы stream-технологий и дополнительных расходов. Если мы можем уйти от боксинга или от форсирования коллекций и работать только на уровне стримов - то давайте работать. Сколько-бы много на серверах у вас не стояло памяти - а при параллельной эксплуатации запросов мы увеличиваем вероятность OutOfMemoryError. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 17:17 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
mayton У задач с коллекциями есть два аспекта. Первое - это решить корректно . Ну тоесть чтобы ваш тест-кейс зашел в зеленый сегмент. С этим у вас все чики-пики. Решаете. Вовлекая сущности мира Collections, Streams e.t.c. И второй аспект - это оптимизация потребления памяти . Я о нем думаю постоянно. Heap не резиновый. А коллекции из баз данных обычно во много раз превышают размеры доступной памяти. вроде есть тру стрим интерфейсы которые действительно стримы а не коллекции в стрим-враппере. но это кажется зависит от бд. в любом случае согласен. ту коллекшн - это должен быть финальный шаг а не два по середине. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 19:29 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Мой поинт вообще не касается БД. Я просто говорю о философии. Если мы взялись использовать стримы - то зачем в середину конвейера вставили массив? Просрали все полимеры память. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 19:57 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79, Ты можешь что угодно писать. Но тебе говорили выше - ты не тестировал под нагрузкой - ты не писал высоконагруженные системы - ты не закончил курсы по субд Поэтому код выше это просто прикол про стримы от java8. Хайп про микросервисы уже прошел. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 11:26 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79, Он говорил что сам метод должен возвращать не List а Stream Тогда Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 11:41 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 PetroNotC Sharp - ты не тестировал под нагрузкой . ну вот откуда это? под белкой приснилось? я работаю в компании и у нас есть тестировщики и весь код проходит все этапы тестирования ,в том числе и нагрузочные. Хватит фантазировать уже Мы не видели ни разу. DDL тоже не видели "тормозит от количества join" твои слова))))))) 22270936 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 11:43 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79, >запрос к бд идет вне стрима Переведи фразу ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 17:37 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
[quot Zzz79#22271707] PetroNotC Sharp Zzz79, Он говорил что сам метод должен возвращать не List а Stream Тогда Код: java 1. 2. 3.
и в чем тут смысл? запрос к бд идет вне стрима .Получаем две коллекции и в стриме мапим из них коллекцию нужных объектов Вообще можно переписать код так, чтобы все обращения к БД были в рамках Stream. И при этом почти полностью избавиться от формирования коллекций внутри стрима (коллекции все-таки потребуются из-за загрузки данных подзапроса) Например, можно написать примерно такой код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Правда я не уверен, что это хорошее решение: - код переусложнен - запросы к БД в данном случае скорее всего будут выполняться в отдельных транзакциях, что замедлит их выполнение. Чтобы они выполнялись в 1 транзакции - можно открывать и завершать ее в Servlet Filter (ну или использовать Spring open-in-view https://habr.com/ru/post/440734/)) P.S. этот код был бы гораздо мене ужасным, если бы это была не java а условные Kotlin/Scala (как минимум очень не хватает поддержки кортежей) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 18:27 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 Lelouch,не такое точно делать не надо - куча стримов,обращение к бд внутри стрима опять же,код сложно читается и скорей всего работает еще хуже чем читается. оптимальный вариант делать 1 запрос и выгребать все рассылки по id опроса далее запросы с пагинацией по 500 элементов к примеру и далее уже в стриме это размапить в респонс дто я вот так это сделал Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
1) как работает - замеры в студию) 2) У вас тут опять O(n * m) - .createdAt(pollChannelList.stream().filter(y -> x.equals(y.getId())).findFirst().orElseThrow().getCreatedAt().getTime()) вот тут линейный поиск, который вызвается N раз. Так что КМК мой вариант будет быстрее) 3)Мой код - это не пример "как надо" Это пример - как все сделать стримом, не получая ничего до вызова collect на стриме ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 19:51 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 Lelouch 1) как работает - замеры в студию) 2) У вас тут опять O(n * m) - .createdAt(pollChannelList.stream().filter(y -> x.equals(y.getId())).findFirst().orElseThrow().getCreatedAt().getTime()) вот тут линейный поиск, который вызвается N раз. Так что КМК мой вариант будет быстрее) 3)Мой код - это не пример "как надо" Это пример - как все сделать стримом, не получая ничего до вызова collect на стриме 1.еще раз я не qa - замеры делают они - раз от них нет стонов - значит все норм у меня бд лежит локально с парой записей для своих тестов - нагрузку делают qa-у них там дампы есть на хулиарды записей и мне оно нах не надо если честно - я не на фрилансе ,чтобы делать все за всех) 2.тут у нас 500 элементов - поверь мне это все будет в рамках одной итерации- так как на каждую рассылку 400к+ ответов 3.твой код это пример оптимизации- которая наглядно показывает,что оптимизаторов нужно бить палками) 4.зачем мне получать стрим и потом его все равно в лист мапить))) ну и еще конечно вся эта тема цирк- 500 элементов сейчас перварит моя кофеварка - вас оптимзаторов нужно сжигать на костре!!!) Смешно. Задайте самому себе вопрос - зачем вы собираете Map с соответствием channelId и ответов, чтобы потом линейным поиском искать для них channel? Что мешает сразу итерироваться по каналам?) видимо религия и отсутствие опыта. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 20:33 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 Lelouch 2) У вас тут опять O(n * m) - .createdAt(pollChannelList.stream().filter(y -> x.equals(y.getId())).findFirst().orElseThrow().getCreatedAt().getTime()) вот тут линейный поиск, который вызвается N раз. Так что КМК мой вариант будет быстрее) ты ошибся) ибо все это будет в рамках одного пол ченела))так что твой вариант априори будет медленней если вообще можно это сравнитвать в рамках обработки коллекции в 500 элементов- я на наших серверах такое могу вертеть и в хвост и в гриву с отликом 2-3 ms В чем ошибся, в оценке сложности?) ну привели свою оценку и покажи, почему так) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 20:34 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 Lelouch пропущено... В чем ошибся, в оценке сложности?) ну привели свою оценку и покажи, почему так) потому что O*1=O То есть вы даже не знаете, что такое O-нотация?) Если что, поиск за константу - это О(1) Zzz79пс. представляю - я такой залетаю на мит ап - с идей все коллекции отдавать клиентам как стрим,ухзахаааа пля поржал от души ,спасибо дядь Обычно клиентам отдают не коллекции, а JSON, XML, etc. Внезапно jaсkson умеет серилизовать стримы: https://github.com/FasterXML/jackson-modules-java8/issues/3. Можешь ворваться к ним и сказать, что они идиоты Zzz79за такой код надо бить ,бить программиста палками,и чем сильней - тем лучше - в идеале так ,чтобы он уже в профессию не вернулся),тем более с влажными фантазиями о котлене и прочей чепухе Жаль за неумение читать вас не били) Вы же до сих пор не поняли, к чему был написан этот код) Zzz79далее по их id раскидываю ответы в мапу - где ключ это id poll_channel Что и где вы "раскидываете по мапе"? Zzz79покажи как бы это сделал ты - только вот без того говнокода что был выше Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 21:49 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Всем кто в топике - советую посмотреть примеры работы с Apache Spark. Это не Java-коллекции. Это специальный API который является дальнейшим развитием Hadoop/BigData технологий, при том что запросы можно писать в Stream-style. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 22:05 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 Lelouch,все это печально,вы даже не поняли сути) вы случаем не тот индус-оптимизатор из боинга?особенно после вышего выстера - отдать клиенту стрим) давайте закончим прения на этом,я вижу что вы являетесь профаном и скорей всего работаете на фрилансе- поэтому нет смысла с вами дальше дискутировать) Классно сливаетесь) Ни конкретики, ни примеров) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 22:05 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
mayton Всем кто в топике - советую посмотреть примеры работы с Apache Spark. Это не Java-коллекции. Это специальный API который является дальнейшим развитием Hadoop/BigData технологий, при том что запросы можно писать в Stream-style. Я Flink так-то использую) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 22:07 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 Lelouch пропущено... Классно сливаетесь) Ни конкретики, ни примеров) в вашем случае несомннено - кусок говно кода ,который не работает- но пафоса на целый яндекс) пилите свои парсеры или что там у вас на бирже- зачем вы лезете в энтерпрайз ) Тоже самое могу сказать про ваш код) Я тоже не видел, чтобы он работал) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 22:09 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 я вот так это сделал Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Я спрашивал простую штуку для джуна и уровня джуна. При пошаговой отладке на коде выше, на какой строке кода пойдет первый запрос в бд? ВЫДЕЛИТЕ СТРОКУ ВАШЕГО КОДА ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 23:03 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz, Я почему спрашиваю уже второй раз одно и тоже. Вот тут 22271707 ты не ответил и не объяснил свою фразу "запрос выполняется вне стрима". НА КАКОЙ СТРОКЕ? Второй раз спрашиваю. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 23:25 |
|
кодилити литкод и прочее задачки
|
|||
---|---|---|---|
#18+
Zzz79 Lelouch пропущено... Тоже самое могу сказать про ваш код) Я тоже не видел, чтобы он работал) он работает ) и куа молчат) ваш же пример - полня шляпа единственно полезное я наверно уберу мапу из моего кода ибо смысла в этом нет -выборка на 500 элеметов и лишние преобразования наборот замедлят респонс пс.оптимизатров надо жечь,я в этом еще лишний раз убеделся -увидев ту кучу говно кода,который ты генерируешь) Вы ни привели замеров, ни базу, ни ddl, ничего. Применили предвыборку per rectum, получив тот же самый линейный поиск, от которого она избавляла. Не поняли, к чему был код со стримами (кстати, вы о реактивных стримах слышали? Код как раз будет похож). Ну и вам начали видится индусы.) Я очень рад, что ваши qa молчат, значит вы находитесь в команде своего уровня. Но я все-таки пожелаю, чтобы объём данных, проходящий через ваш код не увеличился хотя бы на 2 порядка, потому что чинить это будете уже не вы (вы же там в сеньоры собирались через полгода) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2021, 23:57 |
|
|
start [/forum/topic.php?fid=59&msg=40039865&tid=2120533]: |
0ms |
get settings: |
7ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
55ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
396ms |
get tp. blocked users: |
0ms |
others: | 282ms |
total: | 751ms |
0 / 0 |