Программирование 😎 - это не только скучное кодописание 😏, а настоящее приключение в мире бесконечных возможностей 🚀. Высокоуровневая ☝ абстракция, поиск общих черт, умение оптимизировать - всё это как кисти художника, воплощающие высший уровень интеллектуального мастерства, взаимодействующего с магией программирования на Java 😜.
>>2816536 → Сервис пользователей вычитывает весь топик по фильмам. И сохраняет себе в бд табличку фильмов(табличка фильмов может состоять из одних юидов, сгенеренных сервисом фильмов). Потом по к этой табличке делаешь свою manytomany табличку к юзерам. Ну и создал ты юзера. Потом идешь поиском по фильмам(имя через like и год) на сервис фильмов. Он возвращает тебе юид. И потом идешь на сервис юзеров и делаешь запись в таблицу user_film, туда и оценки можно добавить. В какой-то из книжек по микропенисам были эти ваши кинопоиски.
>>2816636 Когда идешь вверх по файлам для импорта в jsp, то фильтр по секурности не пропускает этот форвард, если не добавить пик 2. Вопрос, какой конкретно файл-то не проходит? Я не хочу вообще все добавлять.
Что-то опять по срокам проебываюсь. Ну в принципе-то почти готово, думаю, надюсь к концу недели захосчу... https://github.com/anywaythanks/Twister Только не знаю, стоит ли того, возможно и не нужно этот проект в резюме пихать, а написать что-то другое потом
Я не хочу тебя обидеть, серьезно. Нахуя тебе столько интерфейсов? Просто было было? Так вообще НИКТО не пишет. В качестве маппингов погугли про mapstruct. Как минимум аутентификацию/авторизацию вынести в отдельный модуль бы, но это всё хуйня, если смотреть как ты пишешь код с этими ебучими интерфейсами
>>2818265 >Как минимум аутентификацию/авторизацию вынести в отдельный модуль бы В плане? Она и так на отдельном сервере авторизации keycloack. Че мне еще сделать-то? >погугли про mapstruct. О, пасиба. Глянем. >Нахуя тебе столько интерфейсов? Ну прочетал, что сервисы это интерфейс и имплементация. Разделил.
>сервисы это интерфейс и имплементация. Разделил. Хуйня это ебанная. Антипаттерн. Имеет смысл, если у тебя будет несколько разных реализаций
Сори, хуй знает чё у тебя там с авторизацией, я читать это ебал. Для начала попробуй писать монолиты, но с нормальной архитектурой внутри проекта, хотя бы. Потом уже переключишься на микросервисы. Я бы тебе советовал почекать какие-то боевые проекты, которые писали челы с опыток, но я не ебу где такое искать в оперсурсе. Можно всякие видосики на тыртубе от всяких Eugene Suleimanov чекнуть
>>2818285 Че сразу шиз-то? >>2818279 >Антипаттерн У суки, прям в доках антипатернят. Где почитать про это можно хотя бы? >Для начала попробуй писать монолиты, но с нормальной архитектурой внутри проекта, хотя бы. Все это разделение нужно только лишь для OAuth2. Иные способы авторизации хуевые. Да и честно говоря я не очень понимаю, что я не так сделал. Просто какие-то обвинения, то дто вложенные, то интерфейсов много... > Я бы тебе советовал почекать какие-то боевые проекты Ммм, я прошу скинуть хотя бы какой-то вот уже сколько времени... Ну когдаааа-нибудь скинут, да.
>>2818293 Доки в джаве... Вот бы ты еще до доков про многопоточность дошел. Ахуел бы что там их около 0
Ну, и тебе в доке пишут про DDD. У тебя интерфейс не зависит от реализации. Нахуя тебе его описывать? - Не понятно. Твой интерфейс - методы торчащие наружу из класса (public)
>>2818311 Ты рофлишь? У меня проект по многопоточке сверху скинут.
>У тебя интерфейс не зависит от реализации. Что это вообще значит? Почему он вообще должен зависеть от имплементации, это ж контракт. Можешь скинуть что-то про это все?
>Ты рофлишь? У меня проект по многопоточке сверху скинут. Ну а чё ты доками тычишь. В коммьюнити всем на них плевать. Это хуево, но ничего не поделаешь.
>Что это вообще значит? Почему он вообще должен зависеть от имплементации, это ж контракт. Можешь скинуть что-то про это все? Представь что ты написал какой-то код со сторонней библиотекой. Ты знаешь что какой то методполучается оговоренные параметры и ты ожидаешь оговоренный результат. (Например, либа Math) Тебя не ебет че там чел под капотом сделал, ты ждешь результат через интерфейс, который описан. Через время чел, разраб библиотеки, меняет РЕАЛИЗАЦИЮ этого метода. Но он должен сохранить контракт. Чтобы не сломать совместимость. Типа тебе вообще похую чё под капотом, если контракт сохраняется.
Где про это читать? Ну, я не ебу. Я не читал книги по этим темам. Но, наверное, самое тупое - чистый код, чистая архитектура. Эти книги люто обсирают. Можно прочитать, но нужно быть критичным. Я лично видел как автор в чистом коде ебанул абстракций, которые 1 метод на 10 размазали.
>>2818347 Могу себе позволить. >>2818348 > В коммьюнити всем на них плевать. Блин, не знал. Я неиронично думал, что доки это что-то чуть ниже спек, и фактически то, на что стоит ориентироваться. Ну лан. >Но он должен сохранить контракт. Чтобы не сломать совместимость. Типа тебе вообще похую чё под капотом, если контракт сохраняется. Ну вот, в чем проблема? Возможно я в будущем захочу часть сервисов под жука переписать, нинаю. Или еще что. А контракты уже будут. Я правда не понимаю доеба.
>>2818322 >Почему он вообще должен зависеть от имплементации Прикинь что я тебе вместо HuiPizdaDto в новой версии буду отправлять PizdaDtoV2. Вот тут у тебя контракт зависит от реализации. Я что-то поменял и всё сломал.
>>2818347 >может позволить держать две разные базы данных >не может позволить ломбок Томкат нахуя, он и так там есть в миниатюрной версии в спринг буте
>>2818363 Ломбок я просто сам не хочу. >миниатюрной версии в спринг буте Да пофег. В любом случае я это на томкат хочу пульнуть в итоге. >>2818362 Ну еблан тут ты и не пройдешь по валидации.
>>2818355 Возможно я в будущем захочу часть сервисов под жука переписать, нинаю. Или еще что. А контракты уже будут. Я правда не понимаю доеба.
У тебя код невозможно читать стороннему человеку. Банально лень во всех этих десятках интерфейсов лазить = глаз замыливается. На будущее смотрят, если строят какую-то сложную архитектуру, которая в будущем может быть еще где-то переиспользована. У тебя ебучие пара методов, которые ты можешь в любой момент переписать без проблем.
Офк, брат, это ТВОЙ КОД СТАЙЛ!!! Но тебя с ним никто не пустить писать ничего. У тебя реальные проблемы с этим. Это не такая хуйня, когда ты срешься с тимлидом из-за фигурных скобок и т.д. У тебя само понимание архитектуры слабое. Как фиксить? Я не ебу. Читай проекты + смотри видосы. Было бы заебись, если ты на стажировку устроился. Там хотя бы научат какому-то код стайлу. Тоже мб не супер, но лучше, чем сейчас
Почему бидерекшнл связи в хибере такое говно? Какие-то дикие костыли для сериализации, чтобы не уйти в рекурсию. При этом это защищает тебя для jackson, но никак не поможет, если кто-то просто сделает get. Все выглядит так, что нужно избегать бидерекшнл связей.
>>2818382 > У тебя само понимание архитектуры слабое. Ну я не особо спорю, но кроме интерфейсов-то критика есть? Как бы там к реальному коду, например? То, как персистенс контекст сохраняется, еще чего. А то доебы уровня, а вот у тебя отступ 1.25, а надо 1.5.
>>2818423 Ну лан, пасиба еще раз. Уберу интерфейсы из сервисов и попробую маппинг через структ сделать. Возможно сервисы красивше станут... >Ты аннотации транкакций еблански ставишь Почти osiv. Ну поправлю думаю, как раз. >почитаю Приму как обещание)
Котлин выглядит компактнее, в нём есть защита от нулла, нет 25-летней легаси истории (Int - это класс, а не переменная) и прочие плюхи. Почему же ты душишь старую жабу?
>>2818979 Эм, что? В котлин проект вальгалла уже реализован? Или просто примитивы запрещены? Второе хуета же абсолютная. Защита от нулла мб и полезна, но лучше бы скуфы из оракла сделали стандартные аннотации для этого.
>>2818987 Само наличие в джаве типа int и класса Integer признак легаси, в котлине отсутствие примитивов позволяет автоматически приводить "тип", это значит меньше телодвижений. И так во многом. Допустим в джаве для класса вы прописываете геттеры сеттеры (пусть даже одним кликом в IDE), а в котлине просто пишут data class и они сами потом генерируются при компиляции
>>2818994 Нет, ты несёшь хуйню. Это решение создателя языка, как и отсутствие перегрузки операторов. Удалить примитивы, просто идиотское решение, мне даже не верится, что в котлине это провернули.
>>2819052 Ну и что? У меня была в мухосрани была одна вакансия на соротыгу, когда я вкатывался. И проработал там в итоге целых 2 недели, пока не нашел что-то получше на удаленке.
>>2818211 Открыл твой проект. Ну как это можно ревьюить, если у тебя нет описания проекта? Не ясно что это, не ясно зачем. 1. Тут в проекте 9к строчек, из них 7к строчек на джаве. По идее к таким проектам нужно минимум десяток страниц текста + диаграммы. Особенно, если ты сделал 2 сервиса. Заполни хотя-бы README.md. Хотя-бы десяток-другой предложений что сервис делает. Какие есть юзкейсы, какая связь между сервисами. 2. В ResourceServer у тебя больше 30 эндпоинтов в десятке контроллеров. Прикрути описания к контроллерам через springdoc-openapi-ui. Хотя бы в одном предложении что делает каждый эндпоинт. 3. У тебя там 20 классов в моделях. У тебя 20 таблиц? Если да, то с таким количеством уже нужна дока на бдху. Er-диаграммы или что-то подобное. Таблицы создает хибер? Если да, то это хуево. Прикручивай liquibase/flyway. Иначе при доработке схемы ты можешь все поломать. 4. Чисто рандомно заглянул в HibernateConfig: a. Аннотаха HibernateProps зачем нужна? b. Почему проперти в коде захардкожены, а не в профильных проперти/yml файлах лежат? 5. Так же рандомно взял сервис. То что ты постоянно вставляешь один вызов в метода в другой сильно ухудшает чтение. Вот посмотри, разлепляешь все вызовы в отдельную строчку с созданием переменной и намного легче и читать и дебажить. Я бы лично и от var отказался, но это вкусовщина.
>>2819120 1-2. Ну я обычно в самом конце пишу, как и тесты. В основном потому, что не умею нормально писать ни то ни другое. Постараюсь, конечно описать, но судя вот по этому https://github.com/anywaythanks/ExtendedSynchronizers не гарантирую хорошесть... 3. Таблички делал вроде, но они теряют актуальность, потому и схемы тоже потом сделаю, а пока хибер генерит. 4. Аннотация из-за конфликта бинов нужна. А так можно? Надо глянуть тогда, вроде у меня уже есть подобное. 5. Можно и так. Я ещё попробую это убрать через мапструкт. Не ну зря, что ли вар делали в оракл? Жалко, что немного планы сместились и нет возможности за пк пока что сесть.
В общем пасиба, постараюсь исправить по возможности...
>>2819147 5. Хотя глянул я, нормально, что это такое. По сути кодогенерация аля ломбока. Надо тогда и последний тоже включить.
Но это не решает каскада вызова методов: получение сущности из бд в отдельном сервисе, перевод её в id и отправка, получение этого id через маппер, потом через репозиторий получение сущности по id(вытаскивание из контекста). Возможно, конечно, стоит убрать целых 3 вложенных друг в друга вызова в каждом сервисе и возвращать сразу сущность, но тут встаёт вопрос по тому, а persistence ли она, а может detach или transient. Хотя это merge можно решить, наверное. Раз уж это реальная сущность, то и все one-to-many коллекции будут persistence, а не lang, ну это только если детач, с трансиент будет декартово произведение потенциально. Ну и ещё встаёт вопрос существования методов getPartial.
В общем вообще не понятно как именно проектировать сервисы, нормально ли возвращать сущности, а не дто...? Ну пока мне кажется, что да, наверное так и уберу эти цепочки вызовов.
>>2819412 Из слоя сервиса возвращать сущность и маппить ее в дто в контроллере - вариант нормы. Но я предпочитаю маппить в сервисе. Отдавать на контроллерах сущность - не нормально. Если не нравится mupstract могу предложить modelmapper. +- тоже самое, но в рантайме и без кодогенерации. Естественно медленее, но это обычно не критично.
>>2819632 Вообще, я про общение между сервисами. Но похоже я просто херни навертел и надо просто сущности между ними передавать. Правда как семантически отделить методы для сервисного слоя и межслойного... Т.е. вот есть сервис для перевода монет; сначала он запросит у другого сервиса общий аккаунт, потом уже в третьем сервисе из этого общего аккаунта ему вернут счёт для кредита. Потом нужно из того же третьего получить счёт для дебита посредством какого-то номера для переводов. Ну и произвести операции над сущностями. Во время этих запросов соответственно @Authorize проверки проводятся о которых сервис переводов знать не знает. Сейчас же у меня возвращается дто с id, а сущность надо забрать из репозитория.
Ну кодогенерация объем кода снизит, так проще будет ревьюить. Может чистый код почитать, а то реально глупо все это как-то.
Вот я еще раз разлепил getPartial. Тут 6 строчек(50-55) с вызовами методов. И вопросов не вызывает только обращение к репошке. Вопросы: 1. Что это вообще за метод и что он делает? 2. Почему на 50 generalAccountInformationService.getId возвращает не айдишкник, а какой-то шизовый GeneralAccountIdResponseDto с наследованием от двух интерфейсов? 3. Почему на на 51 нужен маппер, а не просто .getId()? 4. На 53 идет маппинг отдельным классом-маппером. Смотрим что там за дто и энтитя(пик2). А там классы с одной единственной стрингой. Нужна ли вообще такая дтошка и такая таблица? 5. Что за get() на 54? Смотрим что делает getAccounts() и там какая я то жесть с кучей логики на аннотациях хибера. Пик 3. Что это и зачем тут Map<AccountNumber, Account> accounts? 6. На 55 возвращается AccountPartialResponseDto. Смотрим эту дто. Пик 4 Почему дто имплемнтит что то параметризированное (Amount<MoneyPartialResponseDto>)? Зачем нужен класс Money, помеченный как @Embedded?
Вообще по коду невозможно догадаться что это за сервис и что он делает. Ощущения, что просто все переусложнено на пустом месте. Можешь сгенерить идеей диаграмму табличек бд?
>>2819640 Чистый код тебе очень мало поможет. Многие его советы вообще идиотские, некоторые противоречат магии спринга и других фреймворков с которыми мы работаем.
>>2819644 Ебать тут перефутболиваний, если задуматься... Попробовал, конечно через ноут поделать, нооо оперативка кончилась. В общем-то сейчас нет возможности. Ну по крайней мере есть вот это https://2ch.hk/pr/res/2756391.html#2811164 4 сущности для автогенерации имён и номеров. Там AccountNumber, GeneralAccountName и тд. Т.е. табличка существует чисто для sequence. Также есть несколько скрытых маппинг табличек, они для Map<?, Entity> соответственно. Так, есть uuid из keycloak, оно связывается с GeneralAccount one-to-one связью. Потом в этом общем аккаунте есть счета для денег и инвентари. Каждый счёт в себе содержит какой-то тип денег и amount. Это агрегировано в табличку. Инвентарь же содержит слоты с предметом и его количеством. Предмет это Item, причём есть разные виды предметов, на данный момент это те, что можно продать(ItemMoney) и те что нельзя(ItemTrash). Определяется соответствующим интерфейсом SellingItem. Потом есть кейсы, что содержат в себе похожие на инвенторные слоты(CaseSlot), но уже и с шансом выпадения. Также есть цена. Ну и Twist это табличка последних прокручиваний кейсов. По сути журналирование. Крайне спорная табличка, поскольку очень часто просматриваться будет, а ещё она объёмная. Это по поводу model.
1. Возвращает информацию об счёте. 2. Там в интерфейсе @Authorize проверка через returnValue, короче, чтобы не делать лишние запросы в бд. Но думаю вместо этого напрямую сущности буду возвращать. 3. Не знаю, просто показалась, что все операции с дто должны быть в маппере. 4. Автогенерация имён, поэтому да, нужна... 5. В основном, чтобы не писать методы в репозитории для проверки существования. Хотя они там вроде универсальные есть. В общем, просто карта понравилась, красиво же с объектной точки зрения, но маппинг таблица, конечно всю малину портит. 6. А эт чтоб не писать несколько интерфейсов для Request и Response. В любом случае все, что я могу сделать с вложенным дто, это проверить на @NotNull, хотя есть и исключения. 7. Там внутри есть значение value. Оно агрегировано в 3 сущности: Account, Case, ItemMoney. Т.е. каждая сущность имеет собственное значение, там цену, стоимость и пр.
Вот смотрю я на библиотечный метод. Библиотечный метод делает кучу всякой хуйни, которая не может не выбрасывать эксепшены. Потому что внутри этого библиотечного метода вызывается десять других методов, внутри каждого из которых вызывается ещё по десять, ну вы поняли. Ожидаю, что там будут рантайм эксепшены, с которыми мне надо будет что-то делать. Джавадоков, разумеется, нет. Есть ли какой-нибудь инструмент в Идее, который может заглянуть во все методы и выдать список эксепшенов, которые там выбрасываются, чтобы я знал, чего ожидать?
>>2818994 >>отсутствие примитивов позволяет автоматически приводить "тип", это значит меньше телодвижений. мне нужно поле boolean с дефолтным значением false, как это работает в котлин?
>>Допустим в джаве для класса вы прописываете геттеры сеттеры >>в котлине просто пишут data class Как и в джаве @Data. Они наверное из жабы эту фичу и взяли.
День добрый, на связи студент почти 2-ого курса информатики. За этот год учёбы много чего учил: C++, ASSembler, Питоняку и прочее дерьмо. Решил вкатиться на галеры явы, но чувствую, что сейчас начинать сидеть и писать голые принты с циклами не даст ничего кроме скуки. Что можно комбинировать с жабой, чтобы был интерес+выгода?Выгода имеется ввиду, что ява+хуйня_нейм даст какой-то стек.
>>2820174 >Что можно комбинировать с жабой, чтобы был интерес+выгода? Майнкрафт плагины. >P.S. Планирую идти в бэк, да и вообще туда, где будут платить через год-два бабки. Джава уже мертва, а через год-два разложится окончательно.
>>2820215 Что ты блять под "кором" подразумеваешь, ебанат? В своем оп-посте написал яп, которые изучал, но не дальше ООП, т.к. скакать по хуям яп люблю. Ты мне предлагаешь сейчас идти дрочить алгоритмы или читать про то, как устроен компьютер?
>>2820222 Пиздюньчик, мне джава нужна кодошлепства за первый пару месяцев работы. Урчать от удовольствия я могу на питончике или держа писю в руках. Мне сейчас нужно направление, а не совет "вот прочитай пару книг, а потом уже задавай ответы".
>>2820224 Ну вкатывался бы в бек на питоне. Вообще вот этот плейлист тебе даст нормальное представление о работе на жабе. https://www.youtube.com/playlist?list=PLU2ftbIeotGoGSEUf54LQH-DgiQPF2XRO Разве что шаблонизаторы в проде не используются, используются рестконтроллеры. Классический бекендерский стек на жабе это: 0. Жаба и ооп. Тут и гоф-паттерны и клин коды и прочее. 1. Spring(mvc, data, test, security) ну и знать спринг кор и бут 2. Бд - postgres, hibernate, liqubase/flyway, изредка нереляциоки. Знать теорию с нормализацией, изоляцией и прочей хренью. 3. http + очереди (rabbit/kafka), изредка grpc и graphql 4. Тесты - junit, mockito, знать как писать юниты и интеграшки 5. Веб секурити. Всякие jwt, oauth2, sso. 6. Всякая модная микросервисная хрень. Из обязательных только докер. Ну а там и кубер и куча микросервисных паттернов и инструментов.
>>2820224 Ты даже не представляешь каким количеством вопросов тебя убьют по жава кору на собесе. Ты не дойдешь до секции со спрингом и т.д. Просто попустят на базе, которую ты вообще изучать не хочешь.
Всем вот реально похуй - думай как хочешь. Просто можешь чекнуть любые записи интервью, там примерно 3-4 части. Одна из которых, обычна самая первая, про сам Java Core.
>>2819412 >В общем вообще не понятно как именно проектировать сервисы, нормально ли возвращать сущности, а не дто...? Ну пока мне кажется, что да, наверное так и уберу эти цепочки вызовов.
Нет и еще раз нет. Ты вообще не должен уносить ПЕРСИСТЕНТУЮ сущность из СЕРВИСА. Ты просто представь что ты её кому отдал, чел с ней чета сделал и у тебя НАХУЙ ДАННЫЕ потерялись. Потому что манипуляция с сущностью = изменения данных в БД.
Это вообще плохой тон тянуть наружу такую сущность.
Делай так: Никогда не выноси из контроллера DTO в серсис, и никогда не выноси из сервиса персистентую сущность. Если тебе нужно куда-то отправить эту сущность, то сделай еще одну - бизнес сущность, которая не будет иметь НИКАКИХ МАППИНГОВ В БД. Просто отдаешь её, и всё. Да, сущностей будет больше, но тогда ты ГАРАНТИРУЕШЬ ЦЕЛОСТНОСТЬ ДАННЫХ
>>2820383 Блин, ну я же сказал что это не межслойное общение, а межсервисное. Мне надо от одного сервиса другому именно сущность передать. Пока я по id это делаю. Понятно, что в контроллер тащить сущность такое себе.
>>2820395 Так отдай сущность, которая содержить в себе все данные из entity, но которая не может менять ничего в бд (без маппингов). Я же тебе это и предложил.
>>2820401 Детачить её до ретерна что ли? И потом мерджем восстановить? По объёму это конечно от получения id не отличается... У меня пример вот есть >>2819640 мне именно, что нужна сущность, значение которой я могу изменить. Просто разрываюсь между тем, чтобы стереть это огромное количество вызовов мапперов и репозиториев или оставить так... Правда транзакции надо пересмотреть все же.
>>2820174 >Что можно комбинировать с жабой, чтобы был интерес+выгода Хз че ты подразумеваешь под этой формулировкой конечно.
Если ты - результатоориентирован и хочешь сразу понять что прикладное можно сделать по фану, и из чего, гугли awesome листы. Если ищешь работу, еби спрингбут и не еби мозги.
>>2820174 > Что можно комбинировать с жабой, чтобы был интерес+выгода? Если смешать килограмм варенья и килограмм говна, получится два килограмма говна.
Сейчас сижу учу джаву и решил сделать какой-нибудь пет-проект, выбор пал на две вещи: калькулятор матриц или случайная генерация паролей (есть желание оформить в веб приложении). НО! Появился закономерный вопрос: а это вообще будет полезно? Т.е. вместо того, чтобы дрочить матрицы или рандомом писать строчки паролей, я бы мог сделать что-то реально полезное, за что HR'ы смогут дать плюсик. Понятное дело, что делать ручками что-то буду, да боюсь, что и время проебу, и показать людям нечего будет.
>>2821052 Шта? Бля, ты какие-то тупые вопросы задаёшь. Ну тебе калькулятор матриц полезен? Ты матрицы считаешь? Зачем стараться для hr, если у неё задачи другие. Она не считает матрицы. Старайся делать полезное для себя. Нахуя ты стараешься для собеседования. А если ты устроишься на работу, получается ты вообще прекратишь учиться и кодить хобби проекты? Только дом-работа, дом-работа, дом-работа. И так каждый день.
>>2821052 >я бы мог сделать что-то реально полезное, за что HR'ы смогут дать плюсик Олсо, если ты реально хочешь понравиться HR, юзай свою харизму. Сделай ей комплимент, расспроси как дела, поболтай о чём-нибудь. Софт-скиллы гораздо больше на баб действуют чем твои проекты. Ей это всё равно ничего не говорит.
>>2821052 Идеи для петов приходят сами собой. Если вообще приходят. Если не приходят, то нихуя не делай. Просто научись делать то, что надо кабану. Нефтяники после работы не бурят скважины у себя на даче, а лифтеры не строят в своей квартире лифт, ну ты понел.
>>2821207 В пятницу зашел к бывшему однокласснику на работу. Он в госухе работает админом. Ему там при мне тетя срака тыщу рублей сунула за переустановку винды и сделала новый заказ на настройку чего-то там у нее на смартфоне.
Вот допустим пришел у меня запрос с полем "Service-Version": "v3" в теле. В коде у меня есть три имплементации сервиса с разными квалифаерами. Как мне вызвать из контроллера нужный сервис, не делая трех разных ручек?
>>2821069 И что она сделает? Сбросит в группу где сидят сеньки, которые собесят на проект: >Ребята посмотрите кандидата, он спросил как у меня дела ? Решение о тех. собесе не hr принимает обычно.
>>2820174 В джаве отсутствует практически выбор. Это энтерпрайз язык и дорожка тут одна: Spring, Spring Boot, Hibernate Из spring как минимум spring data, spring web, spring security. Это прям минимальный набор для джуна.
>>2821384 Ни в какой. У джунов супер большая конкуренция, нужна удача. Ты как учащийся в вузике по специальности можешь попробовать залететь на стажировку к крупным компания, у них есть такие программы.
>>2821409 Нет ты. >>2821406 И сколько лет некоммерческой до этого? >>2821392 К сожалению именно я не могу. Ну лан, буду дальше задрачивать джеву. Посмотрим, по собесам, если они будут вообще.
Нихуя, в идее есть возможность генерировать геттеры в стиле пупуня() а не гетПупуня(). Называется records style. А я всегда переписывал гетпупуни руками...
>>2821436 Субъективно. Но я точно уверен, что геттеры стандарт и поддерживаются во многих штуках, а вот рекорд стайл... Хотя может уже переписали все, черт его знает.
>>2821432 Records появились в java 17. Это имьютебл объекты, которые могут хранить только состояние, без методов. Астеничная модель pojo официально победила, сосат Этот >>2821436 чел несет хуйню. ООПшно это как раз get, так как не нарушает инкапсуляцию.
У нас чел есть, который на сервис с единственным полем навешивает @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) и при этом все равно умудряется прописать private final
>>2821470 >>2821473 На самом деле это ответ на давнюю дискуссию: что важнее srp или инкапсуляция? Инкапсуляция предполагает, что данные и методы их обрабатывающие должны быть инкапсулированы внутри программной единицы. Исходя из этого раньше рич модель класса (имеющая данные и все методы, которые обрабатывают эти данные) считалась каноном. Но дядя Боб в своей книге и отдельно в статье https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html разгромил нахуй этот подход как противоречащий srp. После этого произошло переосмысление модели класса и астеничная модель класса, в которой мы храним состояние, а всю обработку вынесли в сервисный слой и этот подход стало нормой. Java 17 по сути закрепил этот подход внеся объекты типа record, которые по сути и являются формализованной астеничной моделью pojo/
>>2821691 Мне вообще не понятно с какой целью в рекордах нужны ацесоры, логично бы было сделать поля публичными. private поле в рекорде это какая-то хуйня.
>>2821793 >Правда зачем private на fina Угу. У меня к этому собственно вопросы. У вас же не может быть нарушения инкапсуляции по определению, зачем вам выставлять кастомный интерфейс к классу?
>>2822417 Чел, у тебя какой-то не уловимый оверхед, как мне кажется постоянно. Но я краем глаза слежу, та к что могу пиздеть. Но от var я бы отказался, этот реверанс в сторону нетепезированных языков, который нахуй не нужен в джава.
>>2822431 Ну хуй знает насколько понятнее без них, но вары хотя бы скрывают вот эти очень нужные предупреждения. Можно, наверное аннотациями заглушить, но нужно ли >Чел, у тебя какой-то не уловимый оверхед, как мне кажется постоянно. Не очень понимаю где, конечно. Вот тут постарался все к одной табличке свести. Хотя если orderBy будет не по id, то, наверное будет жоин есче. Но в идеале, наверное стоит ввести отдельный журнал, мол какие и когда кейсы крутил какой-то аккаунт. А то максимум по журналу... Впрочем черт его знает, я-т никогда в жизни не видел нагруженных сервисов.
>>2822469 Количество кода сокращают и импортов. Возмоожно будет проще смотреть. Мне-то в общем-то пофиг вар не вар. Я вон до какого-то момента онли на 8 писал, так по фану. Просто если без вар реально понятнее, можно убрать, почему нет... >>2822472 Не очень понял.
>>2822484 Придет Twist<?>, но я не могу взять класс этого типа, тк в жабе есть фича по стиранию информации об женериках в рантайме. >>2822482 Понятно. Ну уберу большую часть.
Ненавижу ебаные метрики,делаешь сука атомик интежер переменную, завязываешь на нее метрику. Сетаешь и ебаная мразь графана отображает ее рандомно. Может половину значений скипнуть,может вообще нихуя не показать,одним словом,мразь. Еще и в микрометр ебаный ручной счетчик не завезли, приходится с этими ебаными атомиками ебаться
>>2823702 Меня очень подбодрили твои слова,на этой позитивной волне я решил посмотреть в графану,вдруг карма на нее распространяется. И знаешь что? Ничего не поменялось. Видимо докер контейнеры изолированны от позитивной энергии
>>2823728 Сожалею. Правда не очень понял откуда тут докеры взялись и графаны какие-то. Так бы помог, но я не девопс. А пока и сам вот ебался какое-то время с транзакциями, чтобы они нормально обрабатывали случай insert. А то до insert нихуя не видит, потому может создаться дубликат... Можно конечно ограничить на стороне бд, но так-то хуйня, если б я не мог на сервер стороне это сделать. Правда чувствую, что скоро придется документировать всю эту парашу, чтобы я сам хотя бы не запутался.
>>2823836 Бля, ну сложно описать, что решает эта хрень. Есть две транзакции и у них есть кондишен по какому-то полю. Но если это поле еще не существует, то обе транзакции создадут свое поле и добавят в бд оба. Т.е. insert вроде как не создает конфликта. Вот эта хрень заставляет создать что-то вне транзакции основной. Т.е. есть гарантия, что поле точно существует, и так лока по нему будет.
Всем кулити, вкатун ИТТ. Посоветуйте книгу годную по жабке. Помню как-то давно пытался в жаву, обосрался на спринге и дропнул от лютого жопного возгорания. Сейчас сильно тянет снова говном обмазаться. Кстати, если кто может поделиться адекватным роадмапом, буду крайне благодарен. В целом буду рад любому совету. нет, дропать сразу не хочу С меня как всегда.
>>2824036 Затем, что долбоеб пиздит. Вчера в МВП треде петушарп был обоссан по фактам, в связи с чем у шарпоблядей замечено рост средней жопной температуры.
>>2824006 Нет, петушарп это убогий клон джавы, в котором дополнительно накидана куча бесполезного говна, от котого у программистов на нормальных языках глаза на лоб лезут, и в котором нет таких маст-хев функций, как автоматическое создание конструктора и классы-делегаты.
>>2824315 Дженерики в рантайме не появлятся никогда. Никакой проект это не исправит. Ну впрочем всегда можно сказать нинужна. >>2824309 А почему дешевле?
>>2824560 Те кто рисуют себе опыт разработки, которого нету в трудовой, когда заполняют анкету при устройстве, что там пишут? И что в дальнейшем происходит так сказать
Анончик, только начинаю вкатываться в Java. Часто сталкиваюсь с такими проблемами, когда переношу JAR файлы с одного компа на другой.
Вроде два одинаковых сервера, но на одном всё работает, а на другом вылетает ошибка что не найден класс.
Объясни принцип как это фиксить? Где искать недостающие либы? Как их включать в проект или как понять где их нехватает в системе и как их поставить?
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/ws/Service at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) at hello.World.run(World.java:67) at hello.World.main(World.java:53) Caused by: java.lang.ClassNotFoundException: javax.xml.ws.Service at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 11 more
1. Не быть салагой, не искать оправданий 2. Четко понимать, как работает класслодинг в джаве - как таковой, и в конкретном сервере, который ты используешь (обычно в каждом сервере могут быть свои навороты поверх стандартного класслодинга - гугли документацию) 3. Если первые два пункта - чек, просто гуглишь имя класса. Обычно этого хватает чтобы понять, откуда он. Остается только забрать джарку и подставить в класспаф
Спасибо, значит всё же надо надо эти классы для старых веб-сервисом вручную включать в проект. Это грустно. Особенно с учётом того что это не мавен проект, а говно мамонта на нетбинсе 10 летней давности.
>>2824702 Мавен и в нетбинсе можно. В чем проблема? >>2824708 Я много знаю вообще-то! Не надо тут мне. >>2824715 Помню на юнити что-то делал: не понравилось. >>2824700 Ты так и не сказал, нафига там 16+1 скуфы написали
>>2824730 >Мавен и в нетбинсе можно. В чем проблема?
Он скорее всего имеет ввиду проект, созданный нетбинсом для нетбинса, где вся сборка описана в нетбинсовых xmlках. Такое следовало запретить женевской конвенцией еще на заре появления IDE что для нетбинса, что для идеи.
>>2824730 > Мавен и в нетбинсе можно. В чем проблема? > Я много знаю вообще-то! Не надо тут мне. > Помню на юнити что-то делал: не понравилось. > Ты так и не сказал, нафига там 16+1 скуфы написали
>>2819640 Бля, у меня такая ахуенная идея появилась. А что если разделить сервисы по типу их предназначения, как в CRUD. Мол вот @InformationService обязуется исполнять буковку R и только ее, не давая никаких гарантий по поводу персистентности @RegistrationService буковка C, гарантирует создание новой ентити из каких-то дтоошек. @MergeService буковка U, типа можно мерджить сущность.
Так, будет сервис TransferMoney из InformationService запросит дтоошку с полной инофрмацией об аккаунтах по двум разным методам, там публичному для дебита и приватному для кредита. В маппере соберет ентити. Потом изменит данные и разберет ентитю в маппере, ну и отправит в MergeService, для апдейта. Все проверки Authorize будут на уровне InformationService, а остальные валидируют уровень доступа по наличию id. Мол в ином случае у тебя его быть не может. Впрочем можно продублировать на другие уровни, это не принципиально.
Еще можно разные интерфейсы присобачить, типа InformationSuppliterParitalService<P>{ P get(); } InformationFunctionParitalService<P, N>{ P get(N n); } InformationBiFunctionParitalService<P, N1, N2>{ P get(N1 n1, N2 n2); }
>>2824986 Аннотации чтобы как-то обозначить принадлежность. Не пустой же интерфейс по типу Serializable делоть. >Ты только что ООП Ну нормльно нормально, стабильно велосипеды делаю.
Расскажите как у вас с либами обстоят дела. Я изначально вообще на плюсах хотел писать, ибо все либы есть и под Java и под C++, но я заебался их подключать. Я готов язык сменить, если все заработает там быстрее
>>2825079 Подключаются либы легко, указываешь имена и версии либ в специальном файлике, мавен сам их скачает и подключит к проекту. > Заработает быстрее Ты имеешь в виду скорость разработки или скорость работы итогового приложения? Если второе, забудь о джаве.
>>2825009 Ну неплохо. Только придется убрать все Set<> оставив только @ManyToOne, в ином случае мердж через жопу работает, так как там lang, а не persistence. Чет все меньше и меньше хибера остается...
>>2825273 А по мне красиво. Только не знаю нужен ли Service у интерфейсов на конце. Еще из-за контракта можно сляпать метод getModel. Похоже на пик 2 чем-то. >>2825271 Няшно звучит.
Я те так скажу по своему опыту: если у тебя нет логики, которая работает с коллекциями инстансов дженерикового интерфейса обобщенно - в пизду дженериковые интерфейсы. Даже про запас - не надо. Заебешься потом. Я крайне сомневаюсь что у тебя такая логика есть.
>>2825315 Какое-то нагромождение из ключевых слов. >>2825308 Ну в спринге эта логика есть же. По сути я просто хотел подобное в филды пихать. Т.е. как бы переход от конкретного сервиса к отдельной функции, которую может реализовать кто угодно. Не знаю как это можно выразить не через женерики... Типа 100500 интферфейсов писать? Или просто забить и оставить только инстансы. >>2825298 А че за основная ветка? >>2825312 Стараюсь...
>>2824643 Анкету попросили заполнить в одной около госпараше после успешного собеса. В анкете помимо персональных данных просили написать все имущество что у меня есть (недвига, авто и тп), фио и контакты всех родственников ну и тп дичь. Оффера кстати так и не дали, якобы там начальник в отпуске и подписать прям щас не может тупая отмазка, другие "подписывали" картинкой печати и подписи или вообще хуй забивали - это не документ в РФ, а вы там пока заполните и ждите проверки сбшников.
Не стал дожидаться, через неделю я уже работал в другом месте без всяких анкет.
>>2825372 Не отклоняйся от линии партии, с выходом 21 версии этот функционал перестал быть бесполезным синтаксическим сахаром для детишек из майкрософт и стал очередным достоинством современного языка программирования от оракла.
Главная проблема в новых строках в джаве это то, что они, блядь, какого-то хуя в превью были высраны в LTS, блядь. Учитывая, что новый LTS планируется уже после конца времён, много кто их так и не потрогает.
ку, ананасы, подскажите каким образом в вебфлюхе можно сделать отложенную таску, выполняющуюся ежедневно в определенное время? Flux.interval, очевидно, работает, через какое-то время после запуска, а мне нужно, условно, чтобы таска выполнялась ежедневно в 2:22 ночи. как быть?
Почему в ArrayDeque 16 + 1 элемент. В нем два указателя: head и tail. Про указатель tail написано, что это the index at which the next element would be added to the tail of the deque (via addLast(E), add(E), or push(E)). Elements[tail] is always null. Соответственно, один из элементов в массиве дэка всегда будет фиктивным, равным null, на него указывает tail. И чтобы выполнить свой контрактусси изначального capacity в 16 элементов, приходится выделять один дополнительный под tail.
Почему в Java нет подобия деструкторов из C++? Это только в одном месте меня бесит - надо явно закрывать все ресурсы типо файлов, сокетов и тд. Как на C пишу. Слышал про try with resources, но это все равно не то
У вас все объекты передаются по ссылке. А если я не хочу, чтобы функция поменяла переданный объект? В C++ есть константные ссылки. И тогда 100% функция не изменит ничего. А в Java че делать?
>>2826105 Деструктор вызывается при уничтожении объекта. В жабе момент удаления объекта непредсказуем из-за сборки мусора, и пожтому никаких полезных действий на событие удаления объекта не повесить. >>2826118 Проектировать объекты иммутабельными. Других способов нет.
Да, никому это не нравится. Нет, с этим ничего нельзя поделать.
>>2826132 Короче. Какой канон? У меня есть обращение к бд которое может мне выдать ошибку. И я хотел это в монаду Result завернуть. Выглядит красиво. Но мб у вас более хорошие способы есть
Но проблемы с производительностью эксепшенов решаемы - у эксепшена можно кастрировать метод сбора стектрейса. Метода - так себе, но видел в нескольких фреймворках это чудо.
>>2826204 Хоть и непосредственно логику на эксепшенах делать не стоит, это один из важнейших инструментов языка и замены им нет. Почти каждый метод подразумевает наличие какого-то контекста для его исполнения. Если условия не соответствуют требуемым, необходимо вывалить исключение, и это в хорошем коде происходит очень часто.
Блин, няши, это какой-то ужас. Опять проебываюсь по срокам. Из всей вчерашней замены сделал дай ты бог половину: 50 добавленных файлов ~3000 строк изменённых. Когда я уже это закончу...
>>2816669 Братик, а не можешь подсказать мне как стоит реализовать security для сервисов? Сделать отдельный auth-service? В каждый сервис добавить filter? Или прям в gateway сервисе реализовать?
>>2826263 ПС. Я попробовал добавить spring security & jwt в оба микросервиса user-servic & movie-service но по итогу у меня почему то теперь на каждый эндпоинт статус 200 и пустой респонс.
>>2826429 Что за кончи в треде сидят, пиздец просто. То они крестоблядей уважают, то какую то хуйню про jwt несут. Тебе дали кейклок, нет хочу говно жрать и пилить собственный обоссаный iam который и сотой части функционала кейклока не высрет.
>>2826263 Мы через keycloak реализуем. Подробности не знаю, не я этим занался. Но знаю, что там и без spring security было и вместе с ним. Подключение к oauth2 провайдерам идет через плагины кейклока. Даже какие-то свои плагины писали.
>>2826986 Ебу? Я шарпом не пользовался никогда. Просто знаю, что аддоныдля кейклока усе, депрекатед. Теперь надо напрямую через спринг секурити делать, без прослоек.
>>2827147 >In addition, Keycloak adapters has not received the love and attention they require >Rather than continue to spreading ourselves thin we are going to deprecate the adapters, and focus more on the Keycloak server. https://www.keycloak.org/2022/02/adapter-deprecation.html
А вот спринг секурити отказался от сервера авторизации, мол вот есть кейклока и другие их и используйте.
>>2820174 >на связи студент почти 2-ого курса информатики. За этот год учёбы много чего учил: C++, ASSembler, Питоняку и прочее дерьмо. Решил вкатиться на галеры явы, но чувствую, что сейчас начинать сидеть и писать голые принты с циклами не даст ничего кроме скуки. Что можно комбинировать с жабой, чтобы был интерес+выгода?Выгода имеется ввиду, что ява+хуйня_нейм даст какой-то стек
Спринг, хуйбирнейт. Вообще я бы еще навернул говна по распределенным системам, микросервисам, то как данные в БД хранятся, транзакции, шардирование, партиции, MVCC, вот это всякое. Я когда в бакалавриате учился, от скуки начал литкод решать сутками. В итоге дорешался до того, что попал стажером в Яндекс на питухон и го, после чего к жэбе больше не прикасался в своей жизни.
>>2827470 Это не наследование, которое нельзя наследовать, а enum с поддержкой per-type данных. Я каждый раз кончаю в штаны, когда пишу свитч-кейс на силед интерфейсы.
Есть кто на свежем спринг буте пишет? Есть нужные фичи у 3.1 по сравнению с 2.7? Вот жаба 21 выйдет через три недели. Еще через месяц думаю обновиться с 17. А спринг бут так и не поднял. Во время выхода 3.0 я полчасика потыкал в одном сервисе - у меня сломались фейн и кафка и я забил.
>>2827742 Самые заметные изменения - замена spring-security-oauth2 на spring-security и spring-cloud-sleuth на micrometer-tracing. Причем некоторые фичи при этом проебались и пришлось писать их самим. Но при этом 2.7 скоро перестанут поддерживать, поэтому на 3.х переходить придется.
>>2827781 >spring-cloud-sleuth на micrometer-tracing вот это у меня есть. А полезное новое то что-то есть? Там я помню читал из нового есть новый http клиент, что-то про докеры. А вот по полезности - хз.
>>2827786 Не особо заметил пока. Локальным докером у нас не пользуются. Есть нативная компиляция прямо в буте, но на винде она работает через жопу, очень сыро пока.
>>2828098 Ну я ца получаеца. Блять, это реально троллинг или че. Може можно как-то еще этот он метход заюзать не в геттере. Но эти пидоры в изьюзах писаль, вай сложна сложна... Это есть - кушойте
>>2820143 потому, шо throwable избыточно ждать, так как он будет либо эксепшоном, либо эрором, с которым все равно жавамашине разбираться. А возьмешь рантайм - проебешь ИОэксепшн
>>2828736 Да ничего ловить не надо. Один раз пишешь глобальный обраьотчик эксепшенов и ловишь там Exception. А catch в бизнес-логике - это почти всегда борьба с проверяемыми эксепшенами.
Байткод и лобок тут не при чем. Фокус в том, что эксепшены проверяемы только на этапе компиляции. А рантайму абсолютно по хую какие эксепшоны и откуда швырять.
>>2828706 И да - лобок не трогает байткод. Вместо этого он делает абсолютно ректальный гейский нелегальный трюк: через приватные API выдирает из annotation processorа редактируемую версию AST сорцов, и правит это AST перед тем как оно будет скомпилировано в байткод.
Пока писал пост, ответил сам себе на вопрос, но появился другой. Какую роль в деливери семантик играет продюсер??нахуй? При чем здесь сука продюсер? Или ни при чем и сам это придумал?
>просто нет таких кейсов, когда interruptedException может быть нужен фор (вар хуй : жопаФактори.гетЖопаОфАнон(">>2829230").гетХуйс()) { __тру { ____хуй.ремув(); __} катч(InterruptedException e) { ____бреак; __} } Не поймал исключение и у тебя застряли хуи в жопе.
Мой лид скуф останавливает потоки через Thread.stop(). А в коде потока перехватывает ThreadDeath, обрабатывает ситуацию и снова бросает ThreadDeath. А потом аж приговаривает ух бля. Надо ли говорить какой тред дамп получается? Аж ждуны от херочек отклеиваются.
А как можно сохранять сущность со связью @ManyToOne, если вот эта вложенная заполнена только по id полю и соответственно является Transient? Т.е. A{ @ManyToOne B; } Хотелось бы провернуть подобное: save(new A(new B(1)); Не создавая новую B. По сути я хочу выполнить простой запрос insert.
>>2829416 Понятно, ну 2 года это не много и немало. Готовься новые штуки осваивать в короткий срок, еще есть шанс спалится на какой самой простой вещи. Вполне жди мидловских задач.
>>2816575 (OP) Соре за тупой вопрос, но: Может ли ключевое слово static быть применено к определению внутреннего класса? Уверен, что да, но gpt почему-то говорит, что нет. Поясните плиз
>>2829766 Когда же до вас, детей имбицильных, дойдет уже...
ЧатГпт - не интеллект. ЧатГпт - просто Т9-переросток, с косяками такого же рода что и у предшественника. Он нихуя не знает и не умозаключает, он просто выдает портянку текста, которая наиболее вероятна согласно его модели. За ЧатГпт всегда нужно перепроверять. Никогда не верить на слово.
И если перепроверив ты выяснил что реальность не сходится с маняфантазиями нейронки, верх тупости копротивляться и верить в нейронку до конца блять. Поэтому нет, не "соре", пошел нахуй.
>>2829775 Ну блять, а как еще? "Уверен, что да, но gpt почему-то говорит, что нет"... Пиздец блять, сингулярность наступила. Похуй что машины так и не прошли тест тьюринга, зато люди его больше не вывозят.
ананасы, сколько времени может занять перекат с ноды в джаву?
конкретнее с неста в спринг? и насколько хорошая/ебанутая идея туда закатываться? работы с джавой овермного в сравнении с остальным и это не кнопкоебство на реакте с 123123123 откликов.
какой стек в целом смотреть для вката?
я сам на кабана ебашу за такие се 90к, хочу как мой знакомый ебанат одноклеточный 180-200 ловить (2к баксов кек)
>>2829965 на шарпе писал по универу (я с мухосранска двшного) и вакансий на шарп тут хуй да нихуя.
а вот на джаву вполне можно вкатиться (при должном пиздеже и подготовке к собесам за 2-3 месяца мб даже на мидла влезу, опыт то на другой платформе есть)
+ еще имхо конечно, но вакансии в целом по палате в финтехе и тд в ру сегменте и забугорные почему-то куда чаще на джаве встречал, поэтому кажется логичным попробовать туда (+ там куча всяких скал груви и остальной котлинатории)
>>2829992 >и вакансий на шарп тут хуй да нихуя. Главное пытаться же. >месяца мб даже на мидла влезу Ты ж в ней нихуя не знаешь. Каким образом ты это провернешь? Опыт на другой платформе ну никак не ляжет на опыт жабовский. >котлинатории Ну вот, сразу туда и катись. >>2829985 Мимо.
>Ты ж в ней нихуя не знаешь. Каким образом ты это провернешь? дрочка дрочка и еще раз дрочка + заливы петов тестовых на которых буду дрочить задними числами))) вот те и два года опыта хыхы
>Опыт на другой платформе ну никак не ляжет на опыт жабовский. .net + nest вполне может налезть, концепции схожие есть.
Как передать методу более одной переменной? Я пытаюсь передать массив, вот так: public class JavaFile { public static void main(String[] args) { String[] array1 = { "Red", "Blue" }; Yellow yellow1 = new Yellow(); String result = yellow1.forAddtion(array1); System.out.println(result); } }
class Yellow { public String[] forAddition(String[] input) { String result = ""; result = input[0] + input[1]; return result; } } Но Java ругается, говорит что The method forAddition(String[]) is undefined for the type Yellow.
>>2830358 Паттерны - это не архитектурные бестпрактисы, а просто единообразный код, получающийся при решении схожих задач. Можно писать дохуя кода и даже не подозревать, что реализуешь какие-то паттерны, потому что они тупо получаются сами собой, когда пытаешься обобщить схожие подходы. Вот надо тебе часто создавать один и тот же объект с одинаковыми параметрами, ты выносишь логику его создания в хелпер и только месяцы спустя узнаешь, что это ниибацца какой фабричный метод.
>>2830390 У меня в любом случае, сломалась сама технология методов Java. Вот последняя итерация кода: public class JavaFile { public static void main(String[] args) { String array1 = "3 5"; Yellow yellow1 = new Yellow(); String result = yellow1.forAddtion(array1); System.out.println(result); } }
class Yellow { public int forAddition(String input) { int result = 0; String[] forMath = input.split(" "); result = Integer.parseInt(forMath[0]) + Integer.parseInt(forMath[1]); return result; } } Причем в моем предыдущем коде, все идеально - методы объявляются, вызываются, все нормально.
>>2830395 Исправил опечатки. Теперь у меня лишь вываливается другая ошибка: "java.lang.NoSuchMethodError: 'java.lang.String Yellow.forAddition(java.lang.String)'"
А есть какие-то гайды по тому как тестировать с бдшкой? Т.е. почти функциональное тестирование но через juinit, там по полному циклу диспатч сервер -> хандлер маппинг -> контроллер -> сервис -> бд -> виев прогнать бы. Есть подобное из одной книжки, но не очень понятно как сюда еще бдшку лучше вкорячить. >>2831243 Бля, мб лучше стоило их оставить, раз они так внимание привлекают...
>>2831700 Почему не jpql... Нет ну вообще понятно, что использовать. Мне не понятно как. Я ведь могу нахуярить и чистого sql со схемами, но... Нинаю даже
>>2831704 Нууу. Пример тестов можешь скинуть? Я могу конфиг сделать с такой бд, какой раз повторюсь, проблема в том, чтобы опять велосипедов не наделать...
У меня Java поломалась - не выполняет собственные же правила. Есть код: public class TSringList { public static void main(String[] args) { System.out.println("Hello world"); } } При попытке запустить, ругается на строку: public static void main(String[] args) Пишет: "java.lang.Error: Unresolved compilation problem:
>>2832280 Все у меня установлено. Более того, до недавнего времени, когда я писал такой же код - все работало. Да и сейчас есть файлы с расширением .java, которые абсолютно нормально запускаются.
>>2832402 Хз, когда я последний раз пробовал гпт, она мне даже банальный код написать не смогла... Скажем есть массив произвольной глубины и надо определить зубчатый ли он.
есть общение с сокетом. И есть два потока - один читает, другой пишет. Есть также InputStream и OutputStream, общие для потоков. Делаю тест на чтение/запись, запускаю одиночный тест - нормально. Запускаю все тесты - тесты начинают нестабильно падать. Судя по логам - из сокета не читаются данные, и тест за это время успевает завершиться.
Т.е. тред теста, тред чтения, тред записи. В треде теста я ставлю Thread.sleep. Но всё-равно почему-то не всегда читаются данные. Можно как-то синхронизировать эти потоки в разных тредах? Или сказать чтобы всегда выполнялось поровну, без отдачи приоритета тому или другому треду
>>2832621 Можно ебнуть две блокирующие очереди. Так, тред чтения это консумер, тред записи продусер. Тред теста будет как продусером для треда чтения, так консумером для треда записи. Т.е. тред записи все что делает, так это кладет в очередь данные. Тред записи берет из своей очереди данные и пишет их. Можно сделать общими блокирующие очереди, а не стримы. И вот в тесте берешь данные из очереди чтения чета делаешь, клодешь в очередь записи. Ну это если я правильно понял. >>2832711 https://youtu.be/m8UaCpo62Cs?si=T4MFHsd2qsn0j3lG&t=2955
Сап джавовый, пришел за советом, у меня ситуация следующая Я разрабатываю свою соцсеть, у которой пока есть только какой никакой фронтенд на vuejs. Мне нужно на стеке java + spring boot сделать следующий функционал. Когда user1 лайкает пост, в базу должен записываться лайк и после этого мое рест говно должно обновить данные в браузере что user1 понравился его пост. Запись лайков в базу данных я уже сделал, теперь нужно сделать так чтобы приложение уведомляла пользователя. Что лучше для этого использовать, websocket, webhook или long polling?
1. Что быстрее 2. Что меньше ресурсов сервера растрачивает 3. Что быстрее можно реализовать
>>2832781 Да ебать этот варик не пойдет пчел, вот мне кажется можно попробовать использовать websocket. Он наверное куда легче нем каждый раз дрочить http запросы серверу, какими они там лонгполлингами не были
>>2832794 >ТЕБЕ ТВОЙ ЛЮБОВНИК ЛАЙК ПОСТАВИЛ ДОЛБОЕБ ПИШИ ТЗ НОРМАЛЬНО лонг поллинг от вебсокетов у сервера писька отвалится с каждым соединение держать в час наибольшей загрузки
Сап, подскажите как правильно сделать? Есть один реактивный сервис с блокирующим доступом к БД (это хуйня, я знаю, не я принимал такое решение), который генерит .xlsx по расписанию, после чего отправляет этот файлик в другой сервис через WebClient. Собственно, вопрос - каким образом мне его отправлять? Обязательно ли нужно хранить сгенеренный файл на сервере, создавая File (или другую абстракцию) или же можно каким-то образом OutputStream запихнуть в WebClient и не париться о том, что где-то на диске файл будет временно храниться? Или я вообще долбоеб и то, что файл будет сохранен это нормальная практика?
Есть сервис-регист с eureka server, сервис для конфигов других мс и собственно сам мс.
В йамлке мс: spring: application: name: test-service config: import: "optional:configserver:http://config-server:8088"
Решил стартануть их через докер предварительно поменяв везде localhost на назв. контейнеров и нужные порты.
Но в итоге мс не может взять конфиг с сервиса конфигов. Получаю такой еррор: I/O error on GET request for "http://config-server:8088/test-service/default": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
В композе поставил их в одну сеть и сделал зависимость. Все равно еррор. Как фиксануть?
>>2833199 Инфы мало. Очевидно, что сервис не может достучаться до хоста config-server:8088. Почему? Мадо смотреть что ты там в композе нахуевертил, и прочие настройки.
В общем есть некоторый прогресс с дтошек вложенных. Переделал архитектуру на cqrs. Немного документации добавил. Частично тестов. Еще мапстркут и ломбок. Все мапы хиберовские убрал.
Наверное моя лучшая итерация ресурс сервера, тк я могу полностью контролировать то, сколько информации доставать из бд и также не иметь никаких проблем с lazy init, т.е. транзакция теперь нужна не для хибера, а для того, чего она была предназначена изначально. Но с другой стороны я все @OneToMany. Короче не знаю, такое чувство, что пошел по какому-то простому пути и скипнул всю еблю с хибером, что мне конечно не очень нравится. Пока не знаю нужно ли полностью все тестами покрывать, да и по планам много чего осталось. Возможно проскипать часть и забить.
>>2833186 Долбоёб, я просто не знаю, что еще сказать, потому что у меня такой хуйни не было никогда. Отношения переустановка JDK к переустановке шинды не имеет никакого, потому что я предположил, что он хуёвую сборку скачал или она криво установилась, что может произойти с любой программой.
>>2833992 Нет, конечно, сама суть исключений в том, чтобы прерывать выполнения методов вверх по цепочке вызовов, пока исключение не будет перехвачено. И после перехвата к этому методу программа не вернётся, она продолжит выполнять инструкции там, где исключение перехвачено. Научись сам проверять изученное, вместо do3() напиши System.out.println("here"), если в консоль что-то выведется, значит, метод продолжил выполняться, иначе нет. В будущем вместо вывода в консоль научишься пользоваться дебаггером.
>>2834005 Ты тролишь нахуй? У тебя на скрине сука примитив, который не имеет методов. Так, для восьми примитивов свои классы обертки, для обжектов внутренний метод. Для автобоксинга в строку при кокатенации тип 1 + "123" нужен однообразный класс, который полимрфно решит, что и как. 1 + "123" = String.valueOf(1) + "123" Также велика вероятность, что этот метод может во время рантайма меняться.
В хибернейте saveOrUpdate, он race-condition безопасен? Возможно ли что произойдёт коммит другой транзакции в момент сразу после select. Или оно через контекст работает? Тогда для корректной работы с базой может работать только одна приложуха и только через хибернейт?
Использую либу которая использует другу плюсовую через JNI. При попытке собрать проект получаю Can't find dependent libraries. Че делать? В инструкции ничего про это не написано
>>2834252 >>Пустая строка и null два разных случая. Пустую строку или нул легко отфильтровать, а так нужно парсить строку чтоб понять что эта хуита туда "null" закинула при нуловом аргументе. Ну спасибо хоть не NPE, блядь
>>Ты ещё NaN в ноль преврати. Так этот и есть аналог того что ParseInt(null) возвращал бы 0 или еще какое нибудь особое число.
Последняя строчка инструкции говорит "Add the shared libraries within ./build/ to your application's classpath." Я это вроде сделал в intellij через project structure -> libs. И после этого у меня либа даже находится во время сборки, но дальше падает с " Can't find dependent libraries"
Ребят сказали сделать приложение графическое на java, с открытием редактированием созданием и удалением баз данных( например mysql), подскажите с чего начать.
>>2835182 Где здесь неявность-то бля? Тебе явно логгируют null вместо "". Причём, если к тебе пришло "null" то это не null и не пустая строка. А вот ввести NaN и в инты пиздец нужно, конечно. Как мы живём-то без этого. Только undefined не хватает.
>>2835202 >>Тебе явно логгируют null вместо Мне явно засирается какая то константа в ответ и узнать какая это константа сегодня можно только заглянув в исходники.
String.of(null) и String.of("null") не должны жавать одинаковый результат.
Спасите, помогите. Не шарю в микросервисах. Дали проект, конфиг-сервер и эврика-сервер подняты, на каких-то портах, на локалхосте. Пытаюсь обратиться к ним из фича-сервиса. В аппликейшен-проперти в фича-сервисе написано, создателем этого всего, spring.config.import=configserver:http://localhost:8888. Если я через павершелл пингую, этот адрес он отвечает. Но когда я пытаюсь поднять фича-сервис падает с эксепшеном. Failed to configure a DataSource: url attribute is not specified... Чё ему надо? Квда смотреть?
>>2837192 По той инфе что ты дал, можно однозначно сказать только то, что твой сервис не знает, где находится его БД, так как ты ему url к БД не отдал. Может в конфиге на КС его добавить забыли - хуй знат. Инфы мало дал.
>>2837299 Я понимаю, что нет бд. А какая инфа ещё нужна? Есть пэкедж services, в нем конфиг-сервер, еврика-сервер, и пэкедж config->dev->фича-сервис-проперти. В этих проперти прописаны пути к бд. Конфиг-сервер, еврика-сервер крутятся, локально. Пытаюсь поднять фича-сервис падение.
Есть докер компоуз файл с двумя сервисами: спринг-бут приложение и постгрес. Допустим все настроено правильно, по команде докер-компоуз ап все стартует и работает нормально. Теперь нужно внести изменения в код спринг-бут приложения. Я правильно понимаю, что после этого нужно перепаковать джарник (mvn:clean package). Потом пересобрать образ и перезапустить докер-компоуз? Это все занимает много времени. Если приложение уже протестировано локально, тогда это делается один раз. А как разрабатывать сразу с докер-компоуз? Сразу извиняюсь, возможно непонятно написал.
ставишь базу локально на твой комп. В идее открываешь проект и задаешь в переменные окружения адрес и порт твоей базы. При изменении перезапускаешь приложуху в идее. Плюс появляется возможность дебага и запуска тестов
Поясните за топ конторы, которые работают с Java. Очевидные Яндекс, Тинькофф, Сбер, Озон, vk, Альфа. Кто ещё? Где ЗП выше рынка, где ниже? Кто больше других дрочит на собесах? Тинькофф, говорят, возомнил себя Яндексом и требует алгоритмы. Что по остальным? Хочу сразу спланировать направление, в которое буду развиваться, чтобы через годик-два херки текли от моего резюме.
Ну и можете напилить своих прохладных про работу в этих компаниях.
>>2838214 Я не говорил, что они короли, просто они могут себя такими считать. И не в плане королей джавы, а в плане крупнейшей и фактически единственной после начала гойды сосальной сети в пидорашке.
>>2838215 Все перечисленные тобою конторы, окромя вк, учувствовали в жпоинтах. Крупнейший банк, крупнейший поиск и тд и тп. >фактически единственной В мечтах разве что. Вот даже по твоей хуйне, это сервисы от мейла и андроид. Ну вперед, че. Только это не вк, а говнецо от мейла.
>>2838201 Хуавей. Хедхантер. Из крупных еще МТС вроде ничего. Х5 вроде не так плохи. В озоне джавы нет. Но после ухода жидбрейнса, оракла, райфа и дойчебанка единственным местом с большой компетенцией по жабе остался тинек.
>>2839218 Пиздаболы ебаные,ведомые пидорасы,в новых версиях будет RestClient. Тот же самый темплейт без изменений,но с новым названием. Омномном зато не деприкейтед это другое омномном
>>2838105 Со свечкой не стоял, но предполагаю что эта кухня плотно прижилась в питоне благодаря Jupiter Notebook. Последний обнулил порог входа до уровня экселя.
А как запретить изменение полей? Вот я сделал класс который хранит описание задачи. Я не хочу, чтобы какой то еблан изменил это, потому что задача по ходу выполнения никогда не меняется. Но у если наружу торчит string, то как запретить менять это поле?
>>2839736 Сделать поле файнал епта,еще и класс можешь тоже финальным сделать чтобы от него унаследоваться никто не мог. Плюс если ты не сделаешь сеттеры то и менять будет нечем
>>2839747 М, точно. Ну это вряд ли тоже самое, что и у вебклиента. Тк в последнем верояяятно нет блокирующего кода, а значит натив треды не простаивают. С лумом на это поебать будет, конечно.
А можете подсказать как мне триггер в бд оформить? Вот я insert массив данных они соответственно group by к какому-то FK. И мне нужно каким-то образом гарантировать, что общая сумма числового столбца в этой группе равна какому-то числу. Скажем A( id integer, primary key(id) ); B ( id integer, num bigint, a_id integer, primary key(id) ) A.id one-to-many B.a_id;
И я хочу гарантировать, что select sum(b.num) from B b group by a_id Всегда будет содержать массив из одинаковых значений, скажем "500".
Пока думаю навесить триггер на все dml кроме select. И тут два пути или делать первый insert из максимального значения(тут 500), а потом заполнить нулями. И через n update сделать нормальные значения. Или как-то по особому определять момент, что пакетные данные вот точно загружены. Флаг куда-то добавить или табличку со значениями FK пока не знаю. Как лучше поступить, пупуни?
Пишу игрушечную стистему сборки. И хочу вести лон процесса сборки. На сколько норм пропихнуть лог через несколько классов внутрь? Звучит как хуйня полная. Но как иначе?
>>2841011 Я не врубаюсь, что значит "пихать лог". Ты руками чтоли логируешь, прям в стрим файла лога? Если так, то не еби себе мозг и возьми уже slf4j. Откроешь по логгеру в каждом классе и отлоггируешь все что нужно без гомопропихонов.
Плохая идея, потом сам об этом пожалеешь. Логируй все, что может представлять интерес. Если заботит перформанс, уводи часть логов в трейсы, за проверку isTraceEnabled/isDebugEnabled, и включай/выключай трейсы конфигом.
Ну в общем поле с числом - это шанс выпадения. Для формулы сумма всегда должна быть равна 100 или 1. Иначе говоря, есть n предметов у каждого есть свой шанс выпадения и я не хочу допускать ситуации, как в той новости, когда насчитали 146%. Я могу со стороны ресурс сервера это гарантировать, но в одной книжке писали, мол если на уровне бд нет валидации - ваши данные хуйня, тк строятся на хрупких гарантиях консинстентости. Реальные данные на пике и поле соответственно - percentage_wining.
>>2841131 >Иначе говоря, есть n предметов у каждого есть свой шанс выпадения и я не хочу допускать ситуации, как в той новости, когда насчитали 146%
Отлично, примерно это я и предположил.
А ты возьми и храни не проценты, а веса. А вероятность получай уже постфактум, путем деления веса на их общую сумму. И ничего валидировать не придется. Не?
>>2841136 Я няша, меня не кроют хуями. :3 Просто боюсь, что у меня тут слишком специфичная репутация и из-за нее игнорить могут. >>2841143 Деление операция которую я вообще не хочу допускать. Какая-то 1/3 непредставима в BigDecimal.
>>2841154 >Просто боюсь, что у меня тут слишком специфичная репутация и из-за нее игнорить могут.
Бля, за окном ядерный рагнарек назревает, а ты волнуешься о таких мелочах. Не похуй ли - у нас где не рейдшадоулегендс, там гейшин импакт. Бухтеть еще о каких то слотах вшивых...
>Какая-то 1/3 непредставима в BigDecimal. А по твоему numeric в БД - это другое, чтоли? И во что ты собрался десериализовывать эти вероятности при извлечении?
Никакого пресижена ты априори не потеряешь, храня целочисленные веса. А там уж чтобы приготовить омлет, яйца однажды придется разбить во что-то.
Угу, другое. Я использую там только сложение, а значит не теряю точность. Деление единственная операция, при которой неясен результат, поетому туда можно запихать mc. Проще говоря, 1/3+1/3+1/3 != 1. А в бд я не могу запихать 0.3333... три раза таким образом, чтобы они не дали суммы равной в один. Т.е. при поствычислении можно запихать бесконечные дроби, а если пихать именно шанс, то дроби всегда конечны.
>>2841202 Да что ты говоришь. О чем еще мне расскажешь, о машинном эпсилоне?
Открой доку по numeric у своей БД (предположим что это постгрес). Затем открой джавадоку по BigDecimal у джавы. Сравни, найди различия. Открой для себя тот факт, что оба - ни что иное как arbitrary-precision numbers. Обрати внимание что максимальный пресижен что у numeric в постгресе, что у джавы имеет конфигурируемые и предельные лимиты, и mc можно "запихать", как ты выразился, обоим.
И не рассказывай больше сказки о том что "это другое".
>>2841269 Блин, я правда так плохо объясняю что ли~ Ммм, на данный момент у меня нет в формулах деления, а значит и потери точности. И изначальная гарантия, по тому, чтобы сумма шансов была равна 1 или 100 с делением будет вообще недостижима, максимум в какой-то области, мол 1±mc, а это слабая гарантия.
кто нибудь сталкивался с приемом RTP, а в частности DTMF? ебучий JMF не поддерживает его из коробки, в апи гайде написано, что можно вкорячить туда свой payload type, но, сука, не написано как...
>>2841364 rtp - real time protocol, типа голос, в этом случае dtmf - Dual-Tone Multi-Frequency, передача циферок во время звонка, тут речь идет про rfc2833 jmf - java media framework, фреймворк для всей этой хуйни я тоже друн, брат
И че, прям долей процентов у тебя тоже вообще никогда нет? Всегда целочисленное число от 0 до сотни? Че вообще ты с ними делаешь, с этими процентами?
И как ты выражаешь в процентах случай, когда у тебя три кейса с равной вероятностью выпадения (33.3333...%)? Че пишешь в numericи эти свои (не надо здесь о том что "в бд я не могу запихать 0.3333... три раза таким образом, чтобы они не дали суммы равной в один" - если в БД у тебя unconstrained numericи, это еще не означает что они там представлены как то по особенному)?
=====
Ну и ок, если тебе не нравятся веса (я могу понять чем они могут не нравиться, без бузы. Например, тем, что при добавлении/удалении этих весов вероятности гулять будут у всех кейсов), вот что я тебе скажу в ответ на этот вот кусок твоей постановки проблемы >>2841131:
>Я могу со стороны ресурс сервера это гарантировать, но в одной книжке писали, мол если на уровне бд нет валидации - ваши данные хуйня, тк строятся на хрупких гарантиях консинстентости.
В этой же книжке по совести должны были написать, что консистентность консистентности - рознь, и она бывает вообще разная, в зависимости от постановки проблемы и требований к системе. В том числе - eventual. Где есть нормализация, случается и денормализация. Консистентность очень часто сознательно ломают во имя прочих плюшек. Микросервисная архитектура вся строится литералли на на идее о разбиении монолитной схемы на bounded contextы с потоками эвентов между ними. Поэтому скорее всего нет ничего зазорного в том, чтобы заниматься валидацией таких кейсов, как у тебя, со стороны сервера. Если ты понимаешь, что делаешь и знаешь свою СУБД.
>>2841394 не покатит, во-первых, это sip клиентпочему я сразу это не написал..., т. е. все протоуолы уже описаны и есть оборудование, которое по этим протоколам работает, а во-вторых, рест это tcp, соответственно, задержки
>>2841378 >И как ты выражаешь в процентах случай Логично, что никак. Абсолютно не мои проблемы. Я дал точность, допустим 2 знака после запятой. Вот пиши "0.33", "0.33", "0.34". Естественно я могу дать и 38 знаков после запятой. По сути те, кто проектируют шансы должны скушать вот это вот ограничение, а сильная гарантия останется. >должны были написать Вообще там много разного написали - пик1. А по поводу нормализации и прочего - это не моя экспертная область, вон даже пишут: спросите админа. В общем пофиг, я уже написал темп таблички через апи Work хибера. Будет какой никакой опыт.
>>2841306 >с делением будет вообще недостижима, максимум в какой-то области,
И кстати, вот это вот твое "недостижима" - вопрос очень относительный. Потому что весь прикол arbitrary precision numbers именно в том, что в отличие от классических плавающих точек с фиксированной длиной, ты сам определяешь путем presicion и scale величину того самого "плюс-минус". И эта область может быть запредельно микроскопической, в ущерб скорости вычислений. Поэтому давай избавляйся от этих своих стереотипах.
>>2841414 Ууу, а темп таблички бьют по перфомансу? По сути ж они будут использовать раз в никогда админами сайта. Ну по сути я хочу гарантировать без плюс и минуса. На данный момент я могу это осуществить и вроде без потерь по перфомансу, но даа пришлось в jdbc залезть.
>>2841410 >Логично, что никак. Абсолютно не мои проблемы. Я дал точность, допустим 2 знака после запятой. Вот пиши "0.33", "0.33", "0.34". Естественно я могу дать и 38 знаков после запятой. По сути те, кто проектируют шансы должны скушать вот это вот ограничение, а сильная гарантия останется.
Ну вот же ты сам то же самое пишешь. Так с чего ты взял, что деление для тебя неприемлемо, если на самом деле ты также делишь с точностью до N знаков как и все остальное, а дальше просто округляешь?
>В общем пофиг, я уже написал темп таблички через апи Work хибера. Будет какой никакой опыт.
Дело твое. Чужие сексуальные фетиши - не предмет для дискуссий.
>>2841421 >Ну по сути я хочу гарантировать без плюс и минуса.
Так я битый час до тебя и пытаюсь донести, что у тебя те же плюс-минус, только неявные. И ничего ты по сути не добился. Вот те выдержка из постгрес-доков:
>The maximum precision that can be explicitly specified in a numeric type declaration is 1000. An unconstrained numeric column is subject to the limits described in Table 8.2. >If the scale of a value to be stored is greater than the declared scale of the column, the system will round the value to the specified number of fractional digits.
>>2841424 Правила округления будут на уровне ресурс сервера, а не бд. Т.е. данные не однозначны. Хотяя, можно и их запихать в бд, наверное. >не предмет для дискуссий В плане... Как же так
>>2841431 Если даже из-за правил округления бд 0.33333333 ушло в 0.34, то триггер проверит, а точно ли сумма будет равна 1. Если нет, то пошлет нахуй. По сути с таким правилом неважно какие округления были до записи, главное, что записано все однозначно и консистентно. А значит при чтении не возникнет различных интерпретаций.
А вот кстати по поводу смешения процента из-за добавления, вообще это как фича, тк на данный момент я не придумал как мне сделать PUT.
>>2841448 Да нихрена он не проверит! Если у тебя scale=1, твой триггер даже не увидит эту четверку в конце. А если scale>1, ты эту четверку на конце априори не получишь, и триггер будет просто вхолостую заниматься хуйней.
>>2841459 Блин, ну вот увидим. Ты главное подожди - вот допишу все ddl. Я ведь помню мне тут не верили, что хибер не будет мне генерить декартовых произведений.
Как понять, почему он мне не создает базу по конфигу, а создает рандомную херню хуйми пойми где? Консоль h2 вообще ищет базу в корне системы (C:\users\..).
Мне нужно протестить сборку проекта на джаве с зависимостями. Поэтому справшиваю какую самую простую либу для Java вы знаете? Нужно что то очень простое, как isOdd для js
>Спрингу похуй и он стартует своим дефолтным Hikari. Доходит ли он до моей инструкции или нет?
В спринге нет инструкций. В спринге - конфигурация (описываемая аннотациями и записями в конфиге).
>КАк этот Спринг дебажить вообще, не понимаю.
Я бы в код стартеров полез. Скорее всего, у тебя либо прямыми, либо транзитивными зависимостями вытащился какой нибудь конфиг с дефолтным кондишенал бином на хикари с рандомной H2 базой. Надо найти эту декларацию и прибить.
Наконец-то доделал, вроде. Пришлось дробить еще методы, тк ddl транзакции сносит, а dml мне тоже нужен и не хочеца самому весь персистенс контекст инсертить.... Хотя, надеюсь, что flush не убивает транзакцию и роллбэк все еще возможен.
>>2842433 У меня задача не создать новые обжекты, а их имя запихать в контекст. Это делается так или иначе через foreach. Где ты его возьмешь: в стриме, в коллекции, через iterable - сути никак не меняет. Мне бы посмотреть как тут транзакции работают, а вот на такие мелочи абсолютно плевать.
>>2842334 На строке 35 мы отправляем в сеттер пожеванный результат из геттера, я правильно понимаю? Строка 40 - final tempTable ()нет ничего более постоянного, чем временное)
Пытаюсь собрать java из консоли. Есть ли способ не прописывать при сборке вообще все файлы? Почему он не может их сам найти, они же импортятся через пакеты, можно по папкам пройтись и все?
>>2842836 Можно же рефлекшеном расприватить, не? Другое дело, что если они запривачены, значит и никаких гарантий нет. Мб он делает что-то не так, раз они понадобились...
Ставлю анус, после выхода java 21 о 17 и тем более 11 все забудут, как и не будут думать о переходе на новые версии, потому что всем будет 21 хватать. Потому и повторится ситуация с 8, когда все поголовно на неё перейдут резко и на ней застрянут, и не начнут переходить дальше, пока уж совсем жопу печь не будет.
>>2844165 Как раз обычные разрабы лум и не заметят. Он в кишках либ будет. Свитчи это крайне редкий кейс. Это все ещё не лямбды. Или дженерики с jmm. А вот то, что вальхалла не нужна вообще пиздец. Это переработка объектной модели жабы, что огромный шаг вперёд.
Скоро собес по Java/Kotlin. Нужны нюансы языка, вплоть до каких то знаний о байткоде, приколюках с системой типов, понимания как можно котлин в java компилировать и наоборот. Где брать материалы?
>>2844492 String иммутабельный. А почему в иммутабельном объекте не может быть не final полей? Я не знаю как ответить на твой вопрос, потому что я не знаю какие там поля не final, но не удивляюсь тому, что они есть
Да и вообще. Я не прошу сейчас собес устраивать. Я вполне четкий вопрос задал вроде
>>2844496 >А почему в иммутабельном объекте не может быть не final полей? Это один из критериев. Иначе это де факто неизменяемый. >Я вполне четкий вопрос задал вроде Ну вообще у тебя пробелы в терминологии. Еще как видишь, ты не знаешь внутрянку жавакор. >но не удивляюсь тому, что они есть Читай effective java какой-нибудь. Лазай по сорцам кора. Потом можешь по сорцам jvm. Но правда хз, зачем последнее нужно, если только не в оракл идти.
>>2844499 >>А почему в иммутабельном объекте не может быть не final полей? >Это один из критериев. Иначе это де факто неизменяемый.
Так то ты тоже не прав. Стринги в джаве иммутабельны несмотря на некоторые мутабельные нутря, и джавадок стринги, равно как и прочие официальные источники, это постулируют многократно.
Определение иммутабельности шире, нежели чем тупо "класс у которого все аттрибуты - final". Иммутабельный обьект - это обьект с неизменяемым состоянием, каким образом достугнута неизменяемость состояния - вторичный вопрос. В стринге мутабельные поля к состоянию стринги не имеют никакого отношения - это просто штуки для всяких разных оптимизаций.
>>2844514 Няша ты моя, а где я заявлял что это к стрингам относится? Я именно, что и спросил, почему они иммутабельные несмотря на это. Вообще в 17 этот момент хорошо так объяснили.
>>2844521 Блять, без малого с десяток лет уже нытье про эти сраные свитчи слышу, и вангую что когда их выкатят, все равно останется бухтежь аля "не так сделали".
>>2844524 Эх, я вообще плохо мысли формулирую, знаю. Еще ты такая няша, нинаю. Настроение игривое что-то сегодня. >>2844529 Там примитивов нет. Не помню, что они ждут теперь или вальхалу или болт забили.
>>2844532 Сука, вот че эти люди со своими синтаксическими амбициями в хаскель не перекатываются. Там весь спектр паттерн матчинг фич есть, и при этом максимально лаконичен. Такими темпами ща бы жили в мире, где ФП - мейнстрим и учится со школ.
Посмотрел пару докладов по реактивному спрингу и в обоих докладчики тонко намекают что у не реактивного подхода куча минусов. Отсюда вопрос почему асинхронщина не стала мейнстримом в тырпрайзе? Создаётся впечатление что это какая-то лютая имба которой почему то никто не пользуется
>>2845546 >Создаётся впечатление что это какая-то лютая имба Че такого имбового? >тсюда вопрос почему асинхронщина не стала мейнстримом в тырпрайзе? Пришел лум, на этом усе.
>>2845549 Плюс я имел ввиду почему мы достаем из базы листы объектов,а не флакс потоки? Почему мы отдаем с контроллера пачку объектов а не поток объектов. Так-то джава же язык на котором пишут системы, которые в 90% работают под серьёзной нагрузкой,а тут парадигма предлагающая эту нагрузку распараллелить
>>2845588 Lock мощнее же. Или у тебя сильные просадки по перфомансу? >>2845586 Ну это можно достигнуть и без реактивщины. Больше скажу, с ней этого не достигнуть, ибо она лишняя прослойка. >>2845589 Вообще без понятия в чем разница между листом объектов и флакс потоками. Типа на последние ты можешь подписаться? Мол воот как достанете, пж верните в контроллер. Ну обычный подход эту нагрузку ровно так же паралелит. Там проблема в другом так-то.
>>2845608 >Lock мощнее же. Или у тебя сильные просадки по перфомансу? Чем мощнее-то? Дело не в просадках, а в подходе. Зачем использовать более тормозящий инструмент, если можно использовать менее тормозящий? Алсо, синхронайзед покрасивше, чем лок с траем, намного.
>>2845612 Да сук, где он тормозит-то... У синхронайзд больше перфоманс из-за оптимизаций со стороны жвм. Вообще мб в будущих поставках таки и эти блоки можно будет использовать в виртуальных потоках. >Чем мощнее-то? Пик. Ну еще можно гибче разграничивать захват и отпуск монитора. В разных методах, например. Правда это плохая практика, вероятно. >>2845616 Каво? Он как ждал ответа от бд, так и будет ждать. Нихуя не изменилось. Единственный выигрыш тут в том, что одновременно мы можем обработать большее количество пользователей. Типа платформенные потоки не будут заняты ожиданием ответа от бд. На этом йобапреимущества ректива кончаются.
>>2845618 >Да сук, где он тормозит-то... В пизде. Заставил ты меня погонять бенчмарки. Синхронайзед быстрее в 4,25 раз, чем реентрант лок. На моём ПК оверхед на синхронизацию у synchronized был 0,05 нс, а у reentrantlock — 0,23 нс.
Однако есть небольшой подводный камень. Такие результаты достигаются только при использовании биаседлока, который вот-вот к хуям выпилят соевые дегенераты, гадящие в джаву изнутри и который включается отдельным аргументом запуска джавы. Без него синхронайзед будет медленнее где-то на 25%.
Блядь какой же кринж,борисов вместе с лысеющим додиком рассказывают про реактивный спринг на примере 1984. Ааааааааааа. Существует ли более соевый кринжовый доклад?
>>2845669 Хуйню насчитал, забыл сделать вывод в нс/оп и проебался с десятками. Оверхед на сихнронизацию для реентрантлока и сихнронайзеда 2,261 нс и 0,547 нс соответственно, соотношение то же.
>>2845760 Всё точно также. Нечестность реентрантлока и не должна была изменить ситуацию, один поток тестируется жеж (в реальных ситуациях так всегда и происходит, очень редко два потока одновременно лезут в один ресурс, задача синхронизации предотвратить ебучие плавающие баги, когда случайно влезло два потока и все данные превратились в кашу).
>>2845783 Он по дефолту нечестный. Суть в том, чтобы тестировался не ебучий инкремент, а псевдорандом. Вообще странно, что у тебя синхронайзед крайне близко к нонлоку. Такое чувство, что там нет переключения контекста даже. Ебни потоков хотя б в два раза больше чем у тебя есть реальных. Да и есть же разница. Не оч понимаю, как ты считаешь, конечно.
>>2845795 >Вообще странно, что у тебя синхронайзед крайне близко к нонлоку. Такое чувство, что там нет переключения контекста даже. Ебни потоков хотя б в два раза больше чем у тебя есть реальных. А ты это читал? >Однако есть небольшой подводный камень. Такие результаты достигаются только при использовании биаседлока, который вот-вот к хуям выпилят соевые дегенераты, гадящие в джаву изнутри и который включается отдельным аргументом запуска джавы. Без него синхронайзед будет медленнее где-то на 25%.
>Суть в том, чтобы тестировался не ебучий инкремент, а псевдорандом А какая разница? Хоть рендер изображения туда сунь, всё точно также будет. Тестируется же оверхед.
>>2845546 >Создаётся впечатление что это какая-то лютая имба которой почему то никто не пользуется
Нихуя, это только на первый взгляд имба. Асинхронщина в боевом проекте - это геморрой с кучей подводных. У нее недостатков не меньше чем достоинств: в первую очередь - геморрой в поддержке, нетрадиционные ценности в построении архитектуры и в разы больше способов ебнуть себе в ногу.
Адекватные люди асинхронщину берут в проект только тогда, когда это реально нужно и других опций вообще нет. А реально нужна она единицам (тем, у кого миллион запросов в секунду и классические нативные треды не вывозят). А с виртуальными тредами спектр применения стал еще уже.
>>2845608 >Больше скажу, с ней этого не достигнуть, ибо она лишняя прослойка.
Какой то дебильный аргумент. Ну лишняя прослойка - и что?
Весь цимес здесь в том, чтобы обрабатывать миллионы запросов в секунду и при этом не плодить для этого миллион нативных тредов. Все. Реактивные треды - один из способов решения этой задачи. Так то и нативные, и виртуальные треды - прослойка над хардварными тредами процессора один хуй, и че, они тоже своей задачи по твоему не решают?
>Вообще без понятия в чем разница между листом объектов и флакс потоками
Backpressure.
>>2845588 >Лум это кал с запретом на синхронайзеды и тяжёлый код
С чего бы это синхронайзды в луме запрещены? Везде вроде пишут лишь о том, что синхронайзды прибивают виртуальный тред к треду-носителю, и то не всегда. Такого чтоб прям "запрещены" нет нигде.
И вообще, претензия у тебя соевая какая то. Звучишь литералли как соя со свичами (>>2844529). "Ой, все, мне джава монитор на зеленых потоках не так как я ожидаю захватывает. Дилбрекер, дропаем фичу пацаны".
>>2846074 >Ну лишняя прослойка - и что? 1. Она никак не может быть быстрее того, прослойкой над чем является. В данном случае Thread API, т.е. она точно не будет быстрее ванильной жабки. 2. Прослойка тоже кушает ресурсы, а значит и сравнится она не сможет. По моему это что-то из разряда очевидного, не?
>>2846074 >Так то и нативные, и виртуальные треды Вообще я бы другую аналогию использовал. Аппаратные оптимизации и кодовые. Ты ни при каких обстоятельствах не сможешь сравниться по перфомансу с аппаратными оптимизациями. SIMD, например.
>>2846075 >Она никак не может быть быстрее того, прослойкой над чем является. В данном случае Thread API, т.е. она точно не будет быстрее ванильной жабки.
Вот по этой цитатке явно просматривается что ты даже сути постановки проблемы не выкупаешь. Причем не выкупил ты проблематику даже после предыдущего коммента:
>Весь цимес здесь в том, чтобы обрабатывать миллионы запросов в секунду и при этом не плодить для этого миллион нативных тредов
При чем тут "быстрее"? Проблема здесь вообще не в быстроте, а в том, как жыть нахуй. Классическим тредпулом-обработчиком-запросов-с-реста в 10-20 тредов миллион запросов в секунду ты ни в жизнь не обработаешь, не превратив код в колбэчную нежизнеспособную лапшу, пожирающую все мыслимые бюджеты. А тред-пул из миллиона тредов тебе никто создать не даст.
Реактивщина решают эту проблему через замену колбэков на стримы. Async-await и корутины - через покраску функций. Виртуальные треды лума - через отвязку джавовых тредов от нативных. И во всех случаях бутылочным горлышком будет твой процессор и его ядра, во всех трех случаях будут свои накладные расходы на абстракции, и два вот этих вот твоих пункта из разряда очевидного - тупо демагогия, которая вообще не в тему.
>>2846078 Вон же писал ровно тоже самое. >>2845618 > что одновременно мы можем обработать большее количество пользователей. Типа платформенные потоки не будут заняты ожиданием ответа от бд. На этом йобапреимущества ректива кончаются.
Вообще не помню, почему тут про перфоманс что-то пошло. Ты же мой тезис просто перестал считать важным. Похуй в общем-то, мне б ебаный вдс настроить...
Ебать, ты конечно респектабельный обесцениватель, мое почтение. Если твоими мерилами вещи оценивать, непонятно зачем вообще все эти лумы-хуюмы - сиди знай ебошь гуглы на голом нетти.
>Вообще не помню, почему тут про перфоманс что-то пошло
Тебя надо спросить зачем ты "быстроту" приплел. Контекст был отсюда:
> что имбового > Минус простои,использование всех доступных ресурсов приложения максимально эффективно >Ну это можно достигнуть и без реактивщины. Больше скажу, с ней этого не достигнуть, ибо она лишняя прослойка.
Ни слова про быстроту. И на самом деле реактивщина и есть про минус-простои и альтернативное распределение ресурсов. И лум - про то же.
>>2846083 >сиди знай ебошь гуглы на голом нетти. Ну да, и в чем я не прав? Еще тесты нахуй не нужны. Нужно coq-ом и им подобным инструментами доказывать. >Тебя надо спросить зачем Не, меня не надо спрашивать. Малчи.
Поясните мне пожалуйста за List<? super SomeClass> и List<? extends SomeClass>
В первый можно закинуть все объекты SomeClass и его наследников? А <? extends SomeClass> для чего нужен если с него вроде как можно только читать? Он все время пустой должен быть или что?
>>2845644 Блин няши, а как в томкате логи включить, чтобы видно было какие он профили для спринга взял? Вроде в каталина.пропертис все прописал, но нихуя... чувствую блин, что деплоится все без профилей...
>>2846745 Чел, не мысли категорией - "что туда можно закинуть", это путь в никуда. Мысли ссылками и их совместимостями.
Вот есть у тебя к примеру переменная List<? extends A>. В эту переменную ты можешь присвоить List<A>, List<наследник от A>, List<наследник наследника от A> и. т. д.
И есть у тебя переменная List<? super A>. В нее можно присвоить List<A>, List<родитель от A>, и.т.д, вплоть до List<Object>
Имея эти две переменные ответь себе на вопросы: 1. Какие обьекты можно, используя такие ссылки, добавлять, при этом не поломав инварианты в списки, на которые ссылки ссылаются 2. Какого типа обьекты можно, используя такие референсы, читать гарантированно, без прикастов.
>В первый можно закинуть все объекты SomeClass и его наследников?
В список ? super A ты можешь безопасно писать A и его наследников, потому что по ссылке гарантированно будет список, который совместим с записываемым значением (инстанс A ты миожешь записать как в List<A>, так и в List<Object>). А вот в лист ? extends A ты не можешь писать вообще ничего кроме null, потому что что бы ты в такой лист ни писал, всегда остается вероятность что по ссылке будет несовместимый список (например, лист наследника от A)
>А <? extends SomeClass> для чего нужен если с него вроде как можно только читать?
Очевидно, чтобы из него читать. Представь что у тебя функция, которая принимает список чисел и считает их сумму.
Если обьявишь функцию как int sum(List<Integer> list); ты не сможешь ее использовать для списка чисел с плавающей точкой.
int sum(List<Number> list) тоже не выход - ни List<Integer> ни List<Float> в такую функцию не передашь.
Выход - int sum(List<? extends Number> list); В нее можно будет передать и List<Integer>, и List<Float> и все что угодно, что список чисел. Итерируя по этому списку ты будешь получать инстансы Number.
>>2847082 Да в целом все дженерики нужны в первую очередь для сигнатур функций/классов. Это их цель существования - дать возможность писать обобщенный код.
Потому что в этом нет смысла. Использовать дженерики в сигнатуре имеет смысл, когда есть неопределенность в аргцументах или возвращаемом результате. А List.of максимально конкретен - принимая vararg E он всегда возвращает List<E> и ничто иное.
>>2847207 Ахуеть, спасибо за адаптацию. А теперь давай Stream/Thread Lock/Block адаптируй. Хотя вон здесь анмодифейбл. Интересно, в чем тонкая разница между иммутейбл, если внизу ImmutableCollection.
>>2847244 Такая, что ты ограничиваешь инструмент. Мол пук среньк, он не для этого создан. В котлине заменили на in/out, например. В жабе же есть ряд методов с Class<extends>. Нормальные объяснения есть?
>>2847241 Блять, я уже жалею что ссылку на ту статью вбросил. Один рандомный чел заскучал и упоролся - сотня двачеров-ебланов щас из его поделия сделают религию нахуй...
>>2847254 >Нормальные объяснения есть? >А пачиму list.of не возвращает extends?
Потому что если бы List.of имел сигнатуру вида...
static <E> List<? extends E> of(E... elements)
...то возвращаемое значение этого метода ты не смог бы использовать ни в одном месте, где ожидается обычный List<E>. Что резко множит полиморфизм на ноль и делает метод of тупо бесполезным. Можешь сам это проверить - напиши где нить в уголке своего проекта свой listOf и попробуй идеей сделать самену List.of на свой метод. Быстро заебешься.
>>2847433 Ок, это была хорошая ответка с твоей стороны. Ловко ты наебал инференс дженериков - мне аж спеку пришлось полистать, чтобы примерно понять - как.
Тем не менее - тебе просто повезло. Элементарно вынеси ты, например, тот же of(1, 2, 3) в переменную (необязательно даже List<? extends Integer> - тупо в var), и все. Твой magick тебе уже не поможет.
>>2847449 Иди нахуй, там все равно нихуя интересного пока что нет. Первую неделю щас там только шарпеи будут торговать своим ебалом, напрашиваясь под струю мочи, да пориджи будут проходить свои пять стадий от гнева до принятия от нового свитча.
>>2847450 Нет, ну если обернуть боксом... >хорошая ответка с твоей стороны Ммм, я тут скоро свою фигню закончу делать, можешь посмотреть потом, няш? :3
>>2847773 По твоему List<? extends T> мне как пользователю должен сообщить, что этот лист иммутабельный? Ты серьезно щас?
Это - полная чушь и шиза. В частности - это чушь ровно потому, что у тебя есть лазейки для обхода этого тайпчека. Или что - после прохождения сквозь твои обертки лист внезапно преобразится в мутабельный?
Я бы мог сказать что это чушь и в общем случае - потому, что вайлдкарты и границы вообще не про мутабельность, а про вариантность (или что, по твоему лямбда типа Predicate<T> мутабельна, в то время как Predicate<? extends T> - нет?). Но ты же упоролся веществами, и начнешь щас в ответ заливать мне несвязную ахинею про тьюринг полноту дженериков. Короче когда закончишь делать свою фигню, я ее чекну лишь из научного интереса, чтобы понять, какие вещества ты употребляешь. ё
>>2849605 А теперь давай мне хоть одно моё сообщение, где я говорил, что оно гарантирует, а не подсказывает. Даже интерфейс IReadOnlyList этого гарантировать не может. Хватит душнить, я устал.
>>2849133 В том то и суть, что из-за того, что коллекшн апи спроектирован не лучшим образом, маслята, впервые увидев что в extends-wildcard коллекцию писать система типов ничего не дает, пытаются сделать из говна и палок панацею.
>>2849443 Это был импостер, он те ничего не обещал.
>>2849608 Как будто слова какого-то хера из документописцев оракла определяют значение языковых конструкций джавы. extends/super это про наследование, всё. Всё остальное это лишь возможные следствия этого.
>>2852897 Автор конкретно этой секции вроде как Gilad Bracha. Ммм, математика про аксиомы - остальное следствия. Что это меняет, няш? Я правда нинаю какой тезис уже отстаиваю, можешь напомнить заодно)
>>2855007 Из всех синхронизаторов, локи, наверное самое частоиспользуемое. Т.е. обычно никто не разбирается, локу налепил, serialized получил и намана.
>>2864702 А RequestMapping учитывает то, что выше неё? Знаешь, я вообще хотел. Ну типа там на уровне пакета "api/" сделать ну и вложить ".../public/..." в ряд классов.
>>2864807 Не ну если тебе так интересно, то когда я школьником был, не было курсов по шарпу, а ещё на олимпиаде был выбор из жабы cpp и петухона. Воть и знаю неплохо жабку и плюсы немного. А ещё мило, что меня из треда не гонят)