Это копия, сохраненная 31 октября 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вики по вкатыванию в джаву🎓: https://github.com/java2ch/java-thread/wiki
Предыдущий: >>2756391 (OP)
Зачем выбрал убогую жабу, когда есть няшный шарпик?
Сервис пользователей вычитывает весь топик по фильмам. И сохраняет себе в бд табличку фильмов(табличка фильмов может состоять из одних юидов, сгенеренных сервисом фильмов). Потом по к этой табличке делаешь свою manytomany табличку к юзерам.
Ну и создал ты юзера. Потом идешь поиском по фильмам(имя через like и год) на сервис фильмов. Он возвращает тебе юид. И потом идешь на сервис юзеров и делаешь запись в таблицу user_film, туда и оценки можно добавить.
В какой-то из книжек по микропенисам были эти ваши кинопоиски.
1. Как устроен компилятор,
2. Как устроена ЖВМ?
3. Ты гей?
4. Назови 3 принципа ООП.
5. Какое девичья фамилия вашей матери.
6. Напиши на регекспах распределенный сервер.
7. Бочку сделай.
Пока так
Блять, лучше бы не выходил в отпуск...
Пасибки
Справа лес хуев, слева море говна, куда приземлишься? Ответ в виде юнит теста
не пью
жигулёвское уточняй какой пивзавод. Жигуль на каждом пивзаводе есть, и не по одному
Ну там эта, мона есть. Или как оно называется. Ну в общем кроссплатформенный он.
IBM главные пупуни индустрии
Когда идешь вверх по файлам для импорта в jsp, то фильтр по секурности не пропускает этот форвард, если не добавить пик 2.
Вопрос, какой конкретно файл-то не проходит? Я не хочу вообще все добавлять.
Мило. Но пока в какой раз надо переписывать... Делать хуйню, чтобы переписать на хуйню чуть лучше. Звучит, что ж.
Перекатчиков с плюсов берете на работу?
Сорямба, я в настройку сервлетов не лазил давно. В основном крашу кнопочки :3
Аж олдскулы свело. Когда был студентом, мой научрук писал компилятор из PL/1 в Java.
Ну ты и пупуня
Пиздишь. Весь тырппрайз сидит на Java 8 Enterprise Edition.
Только не знаю, стоит ли того, возможно и не нужно этот проект в резюме пихать, а написать что-то другое потом
А че он какую-то задачу обязательно должен решать? Крутица красиво. Думаю хватет.
Вообще у меня и другие штуки есть, прим https://github.com/anywaythanks/ExtendedSynchronizers
Но как видишь, эта штука больше внимания привлекает.
Бляяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя
Я не хочу тебя обидеть, серьезно. Нахуя тебе столько интерфейсов? Просто было было? Так вообще НИКТО не пишет.
В качестве маппингов погугли про mapstruct.
Как минимум аутентификацию/авторизацию вынести в отдельный модуль бы, но это всё хуйня, если смотреть как ты пишешь код с этими ебучими интерфейсами
>Как минимум аутентификацию/авторизацию вынести в отдельный модуль бы
В плане? Она и так на отдельном сервере авторизации keycloack. Че мне еще сделать-то?
>погугли про mapstruct.
О, пасиба. Глянем.
>Нахуя тебе столько интерфейсов?
Ну прочетал, что сервисы это интерфейс и имплементация. Разделил.
>сервисы это интерфейс и имплементация. Разделил.
Хуйня это ебанная. Антипаттерн. Имеет смысл, если у тебя будет несколько разных реализаций
Сори, хуй знает чё у тебя там с авторизацией, я читать это ебал. Для начала попробуй писать монолиты, но с нормальной архитектурой внутри проекта, хотя бы. Потом уже переключишься на микросервисы. Я бы тебе советовал почекать какие-то боевые проекты, которые писали челы с опыток, но я не ебу где такое искать в оперсурсе. Можно всякие видосики на тыртубе от всяких Eugene Suleimanov чекнуть
Че сразу шиз-то?
>>18279
>Антипаттерн
У суки, прям в доках антипатернят. Где почитать про это можно хотя бы?
>Для начала попробуй писать монолиты, но с нормальной архитектурой внутри проекта, хотя бы.
Все это разделение нужно только лишь для OAuth2. Иные способы авторизации хуевые. Да и честно говоря я не очень понимаю, что я не так сделал. Просто какие-то обвинения, то дто вложенные, то интерфейсов много...
> Я бы тебе советовал почекать какие-то боевые проекты
Ммм, я прошу скинуть хотя бы какой-то вот уже сколько времени... Ну когдаааа-нибудь скинут, да.
Доки в джаве... Вот бы ты еще до доков про многопоточность дошел. Ахуел бы что там их около 0
Ну, и тебе в доке пишут про DDD. У тебя интерфейс не зависит от реализации. Нахуя тебе его описывать? - Не понятно. Твой интерфейс - методы торчащие наружу из класса (public)
Ты рофлишь? У меня проект по многопоточке сверху скинут.
>У тебя интерфейс не зависит от реализации.
Что это вообще значит? Почему он вообще должен зависеть от имплементации, это ж контракт. Можешь скинуть что-то про это все?
>Ты рофлишь? У меня проект по многопоточке сверху скинут.
Ну а чё ты доками тычишь. В коммьюнити всем на них плевать. Это хуево, но ничего не поделаешь.
>Что это вообще значит? Почему он вообще должен зависеть от имплементации, это ж контракт. Можешь скинуть что-то про это все?
Представь что ты написал какой-то код со сторонней библиотекой. Ты знаешь что какой то методполучается оговоренные параметры и ты ожидаешь оговоренный результат. (Например, либа Math) Тебя не ебет че там чел под капотом сделал, ты ждешь результат через интерфейс, который описан. Через время чел, разраб библиотеки, меняет РЕАЛИЗАЦИЮ этого метода. Но он должен сохранить контракт. Чтобы не сломать совместимость. Типа тебе вообще похую чё под капотом, если контракт сохраняется.
Где про это читать? Ну, я не ебу. Я не читал книги по этим темам. Но, наверное, самое тупое - чистый код, чистая архитектура. Эти книги люто обсирают. Можно прочитать, но нужно быть критичным. Я лично видел как автор в чистом коде ебанул абстракций, которые 1 метод на 10 размазали.
Могу себе позволить.
>>18348
> В коммьюнити всем на них плевать.
Блин, не знал. Я неиронично думал, что доки это что-то чуть ниже спек, и фактически то, на что стоит ориентироваться. Ну лан.
>Но он должен сохранить контракт. Чтобы не сломать совместимость. Типа тебе вообще похую чё под капотом, если контракт сохраняется.
Ну вот, в чем проблема? Возможно я в будущем захочу часть сервисов под жука переписать, нинаю. Или еще что. А контракты уже будут. Я правда не понимаю доеба.
>Почему он вообще должен зависеть от имплементации
Прикинь что я тебе вместо HuiPizdaDto в новой версии буду отправлять PizdaDtoV2. Вот тут у тебя контракт зависит от реализации. Я что-то поменял и всё сломал.
>может позволить держать две разные базы данных
>не может позволить ломбок
Томкат нахуя, он и так там есть в миниатюрной версии в спринг буте
Возможно я в будущем захочу часть сервисов под жука переписать, нинаю. Или еще что. А контракты уже будут. Я правда не понимаю доеба.
У тебя код невозможно читать стороннему человеку. Банально лень во всех этих десятках интерфейсов лазить = глаз замыливается. На будущее смотрят, если строят какую-то сложную архитектуру, которая в будущем может быть еще где-то переиспользована. У тебя ебучие пара методов, которые ты можешь в любой момент переписать без проблем.
Офк, брат, это ТВОЙ КОД СТАЙЛ!!! Но тебя с ним никто не пустить писать ничего. У тебя реальные проблемы с этим. Это не такая хуйня, когда ты срешься с тимлидом из-за фигурных скобок и т.д. У тебя само понимание архитектуры слабое. Как фиксить? Я не ебу. Читай проекты + смотри видосы. Было бы заебись, если ты на стажировку устроился. Там хотя бы научат какому-то код стайлу. Тоже мб не супер, но лучше, чем сейчас
>>18370
Ебланом буду я, но прод слетит у тебя
В говнохибернейте вообще много чего нужно избегать.
> У тебя само понимание архитектуры слабое.
Ну я не особо спорю, но кроме интерфейсов-то критика есть? Как бы там к реальному коду, например? То, как персистенс контекст сохраняется, еще чего. А то доебы уровня, а вот у тебя отступ 1.25, а надо 1.5.
>Как бы там к реальному коду, например?
Архитектуру пофикси, почитаю. Пока желания в это погружаться особо нет)
>То, как персистенс контекст сохраняется, еще чего.
Ты аннотации транкакций еблански ставишь
Ну лан, пасиба еще раз. Уберу интерфейсы из сервисов и попробую маппинг через структ сделать. Возможно сервисы красивше станут...
>Ты аннотации транкакций еблански ставишь
Почти osiv. Ну поправлю думаю, как раз.
>почитаю
Приму как обещание)
запрашиваем список сущностей с зависимостями
entity1
.... entity2
.....entity2
entity1
.....entity2
.....entity2
как это вытащить через один запрос и запихать в дто?
ну приджойнил я вторую сущность, получил
entity1_1 entity2_1
entity1_1 entity2_2
entity1_1 entity2_3
entity1_2 entity2_1
entity1_2 entity2_2
как это красиво преобразовать в список entity1 с потомками?
у тебя при запросах через постман и в проде приложение по разному работает? еблан?
>Какую задачу решает этот сервис?
Вот я про тоже писал, ну видимо покрутить кейсы))) это весело)))
>1. Как устроен компилятор,
>2. Как устроена ЖВМ?
>3. Ты гей?
>4. Назови 3 принципа ООП.
>5. Какое девичья фамилия вашей матери.
>6. Напиши на регекспах распределенный сервер.
>7. Бочку сделай.
1. Каком кверху
2. Каком книзу
3. Да
4. Полиморфизм, Инкапсуляция. Наследование - для дебилов, нужно вычеркнуть.
5. Шаломова
6. Напишу в регексп треде
7. https://www.youtube.com/watch?v=jIc6dW-Tbsg
8. Скрам, Спринг, Котлин, Гредл - базворды для тупых дебилов. Только pojo, ООП и хардкор
Эм, что? В котлин проект вальгалла уже реализован? Или просто примитивы запрещены? Второе хуета же абсолютная.
Защита от нулла мб и полезна, но лучше бы скуфы из оракла сделали стандартные аннотации для этого.
Нах не нужна нам ваша защита от нулла!
Там нет примитивов совсем, твоя переменная типа Int на самом деле в котлине является объектом класса Int
Само наличие в джаве типа int и класса Integer признак легаси, в котлине отсутствие примитивов позволяет автоматически приводить "тип", это значит меньше телодвижений.
И так во многом. Допустим в джаве для класса вы прописываете геттеры сеттеры (пусть даже одним кликом в IDE), а в котлине просто пишут data class и они сами потом генерируются при компиляции
Нет, ты несёшь хуйню. Это решение создателя языка, как и отсутствие перегрузки операторов.
Удалить примитивы, просто идиотское решение, мне даже не верится, что в котлине это провернули.
В жуке я такое делал переводя вложенный список сущностей в jsonarray встроенными функциями постгри.
Кто мне заплатит за открытый код? Да делаю для себя. Просто первый ±проект на спринге. А что?
Ну и что? У меня была в мухосрани была одна вакансия на соротыгу, когда я вкатывался. И проработал там в итоге целых 2 недели, пока не нашел что-то получше на удаленке.
Да ничево няш. Я ж не жалуюсь. Вот проектик делаю, чтоб точно вкатиться.
Открыл твой проект. Ну как это можно ревьюить, если у тебя нет описания проекта? Не ясно что это, не ясно зачем.
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 отказался, но это вкусовщина.
1-2. Ну я обычно в самом конце пишу, как и тесты. В основном потому, что не умею нормально писать ни то ни другое. Постараюсь, конечно описать, но судя вот по этому https://github.com/anywaythanks/ExtendedSynchronizers не гарантирую хорошесть...
3. Таблички делал вроде, но они теряют актуальность, потому и схемы тоже потом сделаю, а пока хибер генерит.
4. Аннотация из-за конфликта бинов нужна.
А так можно? Надо глянуть тогда, вроде у меня уже есть подобное.
5. Можно и так. Я ещё попробую это убрать через мапструкт.
Не ну зря, что ли вар делали в оракл?
Жалко, что немного планы сместились и нет возможности за пк пока что сесть.
В общем пасиба, постараюсь исправить по возможности...
смотрю вторую картинку. Добавили вары, но для удобства тип прописывается через двоеточие. Вот это прорыв, вот это мощно
почему-бы не делать это сразы в языке? Удобно же, прописываешь тип и не нужны подсказки идеи
Ну не используй вар.
Ну и почему же
5. Хотя глянул я, нормально, что это такое. По сути кодогенерация аля ломбока. Надо тогда и последний тоже включить.
Но это не решает каскада вызова методов: получение сущности из бд в отдельном сервисе, перевод её в id и отправка, получение этого id через маппер, потом через репозиторий получение сущности по id(вытаскивание из контекста). Возможно, конечно, стоит убрать целых 3 вложенных друг в друга вызова в каждом сервисе и возвращать сразу сущность, но тут встаёт вопрос по тому, а persistence ли она, а может detach или transient. Хотя это merge можно решить, наверное. Раз уж это реальная сущность, то и все one-to-many коллекции будут persistence, а не lang, ну это только если детач, с трансиент будет декартово произведение потенциально. Ну и ещё встаёт вопрос существования методов getPartial.
В общем вообще не понятно как именно проектировать сервисы, нормально ли возвращать сущности, а не дто...?
Ну пока мне кажется, что да, наверное так и уберу эти цепочки вызовов.
Из слоя сервиса возвращать сущность и маппить ее в дто в контроллере - вариант нормы. Но я предпочитаю маппить в сервисе.
Отдавать на контроллерах сущность - не нормально.
Если не нравится mupstract могу предложить modelmapper. +- тоже самое, но в рантайме и без кодогенерации. Естественно медленее, но это обычно не критично.
Вообще, я про общение между сервисами. Но похоже я просто херни навертел и надо просто сущности между ними передавать. Правда как семантически отделить методы для сервисного слоя и межслойного...
Т.е. вот есть сервис для перевода монет; сначала он запросит у другого сервиса общий аккаунт, потом уже в третьем сервисе из этого общего аккаунта ему вернут счёт для кредита. Потом нужно из того же третьего получить счёт для дебита посредством какого-то номера для переводов. Ну и произвести операции над сущностями.
Во время этих запросов соответственно @Authorize проверки проводятся о которых сервис переводов знать не знает.
Сейчас же у меня возвращается дто с id, а сущность надо забрать из репозитория.
Ну кодогенерация объем кода снизит, так проще будет ревьюить.
Может чистый код почитать, а то реально глупо все это как-то.
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?
Вообще по коду невозможно догадаться что это за сервис и что он делает. Ощущения, что просто все переусложнено на пустом месте. Можешь сгенерить идеей диаграмму табличек бд?
Чистый код тебе очень мало поможет. Многие его советы вообще идиотские, некоторые противоречат магии спринга и других фреймворков с которыми мы работаем.
Ебать тут перефутболиваний, если задуматься... Попробовал, конечно через ноут поделать, нооо оперативка кончилась. В общем-то сейчас нет возможности. Ну по крайней мере есть вот это 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. Т.е. каждая сущность имеет собственное значение, там цену, стоимость и пр.
Ебать тут перефутболиваний, если задуматься... Попробовал, конечно через ноут поделать, нооо оперативка кончилась. В общем-то сейчас нет возможности. Ну по крайней мере есть вот это 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. Т.е. каждая сущность имеет собственное значение, там цену, стоимость и пр.
Библиотечный метод делает кучу всякой хуйни, которая не может не выбрасывать эксепшены. Потому что внутри этого библиотечного метода вызывается десять других методов, внутри каждого из которых вызывается ещё по десять, ну вы поняли. Ожидаю, что там будут рантайм эксепшены, с которыми мне надо будет что-то делать.
Джавадоков, разумеется, нет.
Есть ли какой-нибудь инструмент в Идее, который может заглянуть во все методы и выдать список эксепшенов, которые там выбрасываются, чтобы я знал, чего ожидать?
Инструменты тебе ничего не дадут, это зависит от реализации и в любой момент может измениться. Ожидать надо Exception.
>>отсутствие примитивов позволяет автоматически приводить "тип", это значит меньше телодвижений.
мне нужно поле boolean с дефолтным значением false, как это работает в котлин?
>>Допустим в джаве для класса вы прописываете геттеры сеттеры
>>в котлине просто пишут data class
Как и в джаве @Data. Они наверное из жабы эту фичу и взяли.
это результат ухода от CheckedException. Теперь может кидать что угодно
P.S. Планирую идти в бэк, да и вообще туда, где будут платить через год-два бабки.
>Что можно комбинировать с жабой, чтобы был интерес+выгода?
Майнкрафт плагины.
>P.S. Планирую идти в бэк, да и вообще туда, где будут платить через год-два бабки.
Джава уже мертва, а через год-два разложится окончательно.
Первый гейткипер - чек. Да-да, вот уже 20 лет умирает, да никак разложиться не может, так чего сидишь здесь?
Ну тк сиди и дрочи дальше свой cpp. Че ты сюда припёрся? За школу нихуя не изучил и сейчас решил вкатиться? НахуйВ шарп иди.
"Припёрся" я сюда, чтобы у мудро-анонов спросить про стеки, а не слушать пидорасов, как ты про "не дрочил доки с 12 лет - идёшь нахуй".
Какой тебе стек блять, если ты даже кор не знаешь? Ты бредишь что ли? Попустись, чмоньк
Что ты блять под "кором" подразумеваешь, ебанат? В своем оп-посте написал яп, которые изучал, но не дальше ООП, т.к. скакать по хуям яп люблю. Ты мне предлагаешь сейчас идти дрочить алгоритмы или читать про то, как устроен компьютер?
А т.е. ты даже не знаешь, что такое java core? Далеко пойдёшь. Ну лично для тебя няш, это околосиноним std из cpp.
Пиздюньчик, мне джава нужна кодошлепства за первый пару месяцев работы. Урчать от удовольствия я могу на питончике или держа писю в руках. Мне сейчас нужно направление, а не совет "вот прочитай пару книг, а потом уже задавай ответы".
Ну вкатывался бы в бек на питоне.
Вообще вот этот плейлист тебе даст нормальное представление о работе на жабе. 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. Всякая модная микросервисная хрень. Из обязательных только докер. Ну а там и кубер и куча микросервисных паттернов и инструментов.
Ну направление нахуй. Пиздец ты наглый, конечно. Кому ты такой ушлепок нужен только. Сиди и дрочи дальше свой питон с cpp.
Ты даже не представляешь каким количеством вопросов тебя убьют по жава кору на собесе. Ты не дойдешь до секции со спрингом и т.д. Просто попустят на базе, которую ты вообще изучать не хочешь.
Всем вот реально похуй - думай как хочешь. Просто можешь чекнуть любые записи интервью, там примерно 3-4 части. Одна из которых, обычна самая первая, про сам Java Core.
Сколько лет кодишь? Что понял за эти годы? Какие советы/гайды/книги т.д. посоветуешь мне - джуну? Хочу быстро варисти до мидла)
>В общем вообще не понятно как именно проектировать сервисы, нормально ли возвращать сущности, а не дто...?
Ну пока мне кажется, что да, наверное так и уберу эти цепочки вызовов.
Нет и еще раз нет. Ты вообще не должен уносить ПЕРСИСТЕНТУЮ сущность из СЕРВИСА. Ты просто представь что ты её кому отдал, чел с ней чета сделал и у тебя НАХУЙ ДАННЫЕ потерялись. Потому что манипуляция с сущностью = изменения данных в БД.
Это вообще плохой тон тянуть наружу такую сущность.
Делай так: Никогда не выноси из контроллера DTO в серсис, и никогда не выноси из сервиса персистентую сущность. Если тебе нужно куда-то отправить эту сущность, то сделай еще одну - бизнес сущность, которая не будет иметь НИКАКИХ МАППИНГОВ В БД. Просто отдаешь её, и всё. Да, сущностей будет больше, но тогда ты ГАРАНТИРУЕШЬ ЦЕЛОСТНОСТЬ ДАННЫХ
Блин, ну я же сказал что это не межслойное общение, а межсервисное. Мне надо от одного сервиса другому именно сущность передать. Пока я по id это делаю. Понятно, что в контроллер тащить сущность такое себе.
да
Так отдай сущность, которая содержить в себе все данные из entity, но которая не может менять ничего в бд (без маппингов). Я же тебе это и предложил.
Детачить её до ретерна что ли? И потом мерджем восстановить? По объёму это конечно от получения id не отличается...
У меня пример вот есть >>19640 мне именно, что нужна сущность, значение которой я могу изменить.
Просто разрываюсь между тем, чтобы стереть это огромное количество вызовов мапперов и репозиториев или оставить так... Правда транзакции надо пересмотреть все же.
Нет
>Что можно комбинировать с жабой, чтобы был интерес+выгода
Хз че ты подразумеваешь под этой формулировкой конечно.
Если ты - результатоориентирован и хочешь сразу понять что прикладное можно сделать по фану, и из чего, гугли awesome листы. Если ищешь работу, еби спрингбут и не еби мозги.
> Что можно комбинировать с жабой, чтобы был интерес+выгода?
Если смешать килограмм варенья и килограмм говна, получится два килограмма говна.
Пиши круд на спринге.
Калькуляторы и матрицы это для студентов младших курсов, такое никому не нужно.
Шта? Бля, ты какие-то тупые вопросы задаёшь. Ну тебе калькулятор матриц полезен? Ты матрицы считаешь? Зачем стараться для hr, если у неё задачи другие. Она не считает матрицы. Старайся делать полезное для себя. Нахуя ты стараешься для собеседования. А если ты устроишься на работу, получается ты вообще прекратишь учиться и кодить хобби проекты? Только дом-работа, дом-работа, дом-работа. И так каждый день.
>я бы мог сделать что-то реально полезное, за что HR'ы смогут дать плюсик
Олсо, если ты реально хочешь понравиться HR, юзай свою харизму. Сделай ей комплимент, расспроси как дела, поболтай о чём-нибудь. Софт-скиллы гораздо больше на баб действуют чем твои проекты. Ей это всё равно ничего не говорит.
Рычи, двигай тазом. А потом по такой же схеме и с лидом?
Мужики, я когда "Hello world" запускаю - потребление ОЗУ на машине поднимается с 2GB до пикрила. Не подскажете, что делать?
Это нормально.
Ты в сколько строчек кода смог уложиться, вкатун?
Xms убери, петросян ебаный.
Идеи для петов приходят сами собой. Если вообще приходят. Если не приходят, то нихуя не делай. Просто научись делать то, что надо кабану.
Нефтяники после работы не бурят скважины у себя на даче, а лифтеры не строят в своей квартире лифт, ну ты понел.
В пятницу зашел к бывшему однокласснику на работу. Он в госухе работает админом. Ему там при мне тетя срака тыщу рублей сунула за переустановку винды и сделала новый заказ на настройку чего-то там у нее на смартфоне.
Гошники те еще пупуньки
блядь я заебался работать
if ("v1".equals(request.getServiceVersion())) {
service1.call(request);
} else if ("v2".equals(request.getServiceVersion())) {
service2.call(request);
} else if ("v3".equals(request.getServiceVersion())) {
service3.call(request);
} else {
throw new RuntimeException("Unsupported version: " + request.getServiceVersion());
}
ahh thank you mr. durga!
И что она сделает? Сбросит в группу где сидят сеньки, которые собесят на проект:
>Ребята посмотрите кандидата, он спросил как у меня дела
?
Решение о тех. собесе не hr принимает обычно.
Гугли rpc.
В джаве отсутствует практически выбор. Это энтерпрайз язык и дорожка тут одна:
Spring, Spring Boot, Hibernate
Из spring как минимум spring data, spring web, spring security.
Это прям минимальный набор для джуна.
А в какой момент можно сказать, что вот точно возьмут на позицию жуна, если опыт работы нулевой?
Трахнешь? :3
Ни в какой. У джунов супер большая конкуренция, нужна удача. Ты как учащийся в вузике по специальности можешь попробовать залететь на стажировку к крупным компания, у них есть такие программы.
Нулевым опытом в жабе можно считать два года опыта коммерческой разработки. Это уровень джуна.
Мы вам перезвоним
Называется records style.
А я всегда переписывал гетпупуни руками...
объект.пупуня() красиво выглядит и оопшно
объект.гетПупуня() - гадость, воняет процедурными мешками с переменными, а не ООП
Субъективно.
Но я точно уверен, что геттеры стандарт и поддерживаются во многих штуках, а вот рекорд стайл... Хотя может уже переписали все, черт его знает.
Окончательно оформились в 16, но в целом ты прав - в 14 начали внедрять.
Да, поетому всем похуй, но формально было.
ПУПУНЯ блять.
Какой же ты ебанутый... Прям как я. Удачи там.
А вдруг добавят новое поле и забудут.
Они понимают что гойда учится за пару месяцев и активно гейткипят.
С джавой проще - по спрингу инфы нет и вкатиться быстро не выйдет и так.
В смысле нету инфы, не понял
>>21473
На самом деле это ответ на давнюю дискуссию: что важнее srp или инкапсуляция? Инкапсуляция предполагает, что данные и методы их обрабатывающие должны быть инкапсулированы внутри программной единицы. Исходя из этого раньше рич модель класса (имеющая данные и все методы, которые обрабатывают эти данные) считалась каноном. Но дядя Боб в своей книге и отдельно в статье https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html разгромил нахуй этот подход как противоречащий srp. После этого произошло переосмысление модели класса и астеничная модель класса, в которой мы храним состояние, а всю обработку вынесли в сервисный слой и этот подход стало нормой. Java 17 по сути закрепил этот подход внеся объекты типа record, которые по сути и являются формализованной астеничной моделью pojo/
>ООПшно это как раз get, так как не нарушает инкапсуляцию
В чем разница? Что там что в другом месте приватную пупуню вывалили наружу.
Ты пидор.
Смотри, в классе есть мембер Пупуня пупуня.
Два метода:
Пупуня пупуня() {вернуть пупуня}
Пупуня гетПупуня() {вернуть пупуня}
Ты утверждаешь, что в 1 случае инкапсуляция нарушается, а во втором — нет.
Ты шизик.
Мне вообще не понятно с какой целью в рекордах нужны ацесоры, логично бы было сделать поля публичными. private поле в рекорде это какая-то хуйня.
Не. Непонятно нахуй они так сделали, но там под капотом метод ацессор вместо публичного поля.
Пишут, не баг, а фича https://stackoverflow.com/a/66705027
Правда зачем private на final не совсем понятно. Ну возможно как гарантия того, что все не владельцы будут только по методам стучаться.
>С джавой проще - по спрингу инфы нет и вкатиться быстро не выйдет и так.
Сиранул с этого иксперта.
>Правда зачем private на fina
Угу. У меня к этому собственно вопросы. У вас же не может быть нарушения инкапсуляции по определению, зачем вам выставлять кастомный интерфейс к классу?
Под VPN доступ тоже блокируется
Скачай с сайта жетбрейнс, хотя то, что ты не можешь даже скачать пограму о многом говорит. А и пиздуй в андроид тред.
О, благодарю!
Point{
x, y;
setX(x){
return new Point(x, y);
}
}
Да че ту билдер? Это другой паттерн. Похож на конкатенацию строк и пик.
Я вот не смог дочитать, меня лид подтравливает за это.
Чел, у тебя какой-то не уловимый оверхед, как мне кажется постоянно. Но я краем глаза слежу, та к что могу пиздеть. Но от var я бы отказался, этот реверанс в сторону нетепезированных языков, который нахуй не нужен в джава.
Так это ж динамикодрисня.
Ну хуй знает насколько понятнее без них, но вары хотя бы скрывают вот эти очень нужные предупреждения. Можно, наверное аннотациями заглушить, но нужно ли
>Чел, у тебя какой-то не уловимый оверхед, как мне кажется постоянно.
Не очень понимаю где, конечно. Вот тут постарался все к одной табличке свести. Хотя если orderBy будет не по id, то, наверное будет жоин есче.
Но в идеале, наверное стоит ввести отдельный журнал, мол какие и когда кейсы крутил какой-то аккаунт. А то максимум по журналу... Впрочем черт его знает, я-т никогда в жизни не видел нагруженных сервисов.
А когнитивная сложность не сокращается. Твой код должен кто-то поддерживать и читать.
Наоборот, антипаттерн же. Вар только там, где и так все понятно и нет смысла повторять.
Если надо дать больше var'ов богу var'ов, то можно пойти и на такие жертвы
Можно возвращать this и...
var var = new var().var().var().var().var()...
А если ещё варарг из var классов ебнуть
var var = new var();
var.var(var.var(var.var(var.var(var.var(var.var(), var(.....
Ну это все алеф нуль, а как бы выйти в потенциальную бесконечность....
Неправильно. Инкапсуляция для дебилов и борьба с симптомом. Наследование и полиморфизм же абсолютнейшая базища.
Да по разному можно спрятать данные и насрать в суп тому, кто пользуется твоим кодом. Что сказать-то хотел?
var var = VarFactory.createVar().setVar(new Var())
Так это ты УРОНИЛ ПРОД,я так и знал что что-то тут не чисто,хватайте пупуню ураааааа
Помнится один кулибин лабал статью о том, что дженерики в джаве тьюринг-полны.
Но тьюринг-полный ли var?
Дык гуглится же
https://arxiv.org/pdf/1605.05274.pdf
Сразу скажу - за контент я не поясню. Сам просто порофлил с постановки вопроса и заголовков. За что купил, за то и продаю.
>Дык гуглится же
Ну как правило гуглить за кого-то себе дороже.
А по поводу статьи... Ебать я скучно живу оказывается. Надо бы запомнить.
Меня очень подбодрили твои слова,на этой позитивной волне я решил посмотреть в графану,вдруг карма на нее распространяется. И знаешь что? Ничего не поменялось. Видимо докер контейнеры изолированны от позитивной энергии
Сожалею. Правда не очень понял откуда тут докеры взялись и графаны какие-то. Так бы помог, но я не девопс.
А пока и сам вот ебался какое-то время с транзакциями, чтобы они нормально обрабатывали случай insert. А то до insert нихуя не видит, потому может создаться дубликат... Можно конечно ограничить на стороне бд, но так-то хуйня, если б я не мог на сервер стороне это сделать.
Правда чувствую, что скоро придется документировать всю эту парашу, чтобы я сам хотя бы не запутался.
А, ты не хочешь this, хз тада
Бля, ну сложно описать, что решает эта хрень. Есть две транзакции и у них есть кондишен по какому-то полю. Но если это поле еще не существует, то обе транзакции создадут свое поле и добавят в бд оба. Т.е. insert вроде как не создает конфликта.
Вот эта хрень заставляет создать что-то вне транзакции основной. Т.е. есть гарантия, что поле точно существует, и так лока по нему будет.
Я лучше к бакалавру схожу.
Злой ты...
Посоветуйте книгу годную по жабке. Помню как-то давно пытался в жаву, обосрался на спринге и дропнул от лютого жопного возгорания. Сейчас сильно тянет снова говном обмазаться.
Кстати, если кто может поделиться адекватным роадмапом, буду крайне благодарен. В целом буду рад любому совету. нет, дропать сразу не хочу
С меня как всегда.
Книг нет, все мурзилки уважают.
Нет, там наслаждаются лучшим языком всех времён и народов.
Затем, что долбоеб пиздит. Вчера в МВП треде петушарп был обоссан по фактам, в связи с чем у шарпоблядей замечено рост средней жопной температуры.
Нет, петушарп это убогий клон джавы, в котором дополнительно накидана куча бесполезного говна, от котого у программистов на нормальных языках глаза на лоб лезут, и в котором нет таких маст-хев функций, как автоматическое создание конструктора и классы-делегаты.
Хуерики. Это все хуйня, а не аргументы.
Главный реальный плюс шарпа перед жавой - шарпомухи дешевле и их легко продавить на фулстек.
>Ну впрочем всегда можно сказать нинужна.
Да, и тебе нужно будет доказывать, почему это нужно.
Ни, слишком скучно. Лучше минетик мне сделай.
>Еще и в микрометр ебаный ручной счетчик не завезли, приходится с этими ебаными атомиками ебаться
Чем тебя Counter не устроил?
То что ты описываешь, называется не сеттер, а wither. У ломбока для них свои аннотации.
Звучит как антиреклама.
О, спасибо няш.
А ты случаем еще не знаешь, как бы в гитхабе красиво схемки для дб нарисовать? А то mermaid мне не нравится...
Хотя, там вроде тоже нельзя именно поля указывать как связи. Только сущности.
Те кто рисуют себе опыт разработки, которого нету в трудовой, когда заполняют анкету при устройстве, что там пишут? И что в дальнейшем происходит так сказать
Так а все, приехали. Если тебе дают такую анкету, значит тебе уже априори не верят, и стопудово откажут.
А если такую анкету дают уже после пройденных собесов, при устройстве? Ее же везде дают, где-то после, где-то перед собеседованиями
Вроде два одинаковых сервера, но на одном всё работает, а на другом вылетает ошибка что не найден класс.
Объясни принцип как это фиксить? Где искать недостающие либы? Как их включать в проект или как понять где их нехватает в системе и как их поставить?
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
$java --version
openjdk 11.0.17 2022-10-18
OpenJDK Runtime Environment (Red_Hat-11.0.17.0.8-2.fc35) (build 11.0.17+8)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.17.0.8-2.fc35) (build 11.0.17+8, mixed mode, sharing)
# alternatives --config java
There are 3 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.17.0.8-2.fc35.x86_64/bin/java)
2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.fc35.x86_64/jre/bin/java)
3 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.5.0.8-2.fc35.x86_64/bin/java)
Вроде два одинаковых сервера, но на одном всё работает, а на другом вылетает ошибка что не найден класс.
Объясни принцип как это фиксить? Где искать недостающие либы? Как их включать в проект или как понять где их нехватает в системе и как их поставить?
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
$java --version
openjdk 11.0.17 2022-10-18
OpenJDK Runtime Environment (Red_Hat-11.0.17.0.8-2.fc35) (build 11.0.17+8)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.17.0.8-2.fc35) (build 11.0.17+8, mixed mode, sharing)
# alternatives --config java
There are 3 programs which provide 'java'.
Selection Command
-----------------------------------------------
*+ 1 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.17.0.8-2.fc35.x86_64/bin/java)
2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.fc35.x86_64/jre/bin/java)
3 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.5.0.8-2.fc35.x86_64/bin/java)
>javax.xml.ws.
в свежей жабе это вроде выпилили
искать вида "maven repo javax.xml.ws.Service"
Но придется пересобирать
1. Не быть салагой, не искать оправданий
2. Четко понимать, как работает класслодинг в джаве - как таковой, и в конкретном сервере, который ты используешь (обычно в каждом сервере могут быть свои навороты поверх стандартного класслодинга - гугли документацию)
3. Если первые два пункта - чек, просто гуглишь имя класса. Обычно этого хватает чтобы понять, откуда он. Остается только забрать джарку и подставить в класспаф
Осознаешь свой объективный уровень знаний и ищешь более эффективный способ получения оффера. Молодец,далеко пойдешь
>Мавен и в нетбинсе можно. В чем проблема?
Он скорее всего имеет ввиду проект, созданный нетбинсом для нетбинса, где вся сборка описана в нетбинсовых xmlках. Такое следовало запретить женевской конвенцией еще на заре появления IDE что для нетбинса, что для идеи.
> Мавен и в нетбинсе можно. В чем проблема?
> Я много знаю вообще-то! Не надо тут мне.
> Помню на юнити что-то делал: не понравилось.
> Ты так и не сказал, нафига там 16+1 скуфы написали
Бля, у меня такая ахуенная идея появилась. А что если разделить сервисы по типу их предназначения, как в 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);
}
Что думаете?
Аннотации чтобы как-то обозначить принадлежность. Не пустой же интерфейс по типу Serializable делоть.
>Ты только что ООП
Ну нормльно нормально, стабильно велосипеды делаю.
Подключаются либы легко, указываешь имена и версии либ в специальном файлике, мавен сам их скачает и подключит к проекту.
> Заработает быстрее
Ты имеешь в виду скорость разработки или скорость работы итогового приложения? Если второе, забудь о джаве.
Ну неплохо. Только придется убрать все Set<> оставив только @ManyToOne, в ином случае мердж через жопу работает, так как там lang, а не persistence. Чет все меньше и меньше хибера остается...
Нормально все с числами - весь матан давно уже на интринсиках.
Гуглить я и сам умею, а ты развлеки меня.
Спи иди, график собьешь.
>А по мне красиво
Такое.
Я те так скажу по своему опыту: если у тебя нет логики, которая работает с коллекциями инстансов дженерикового интерфейса обобщенно - в пизду дженериковые интерфейсы. Даже про запас - не надо. Заебешься потом. Я крайне сомневаюсь что у тебя такая логика есть.
SingletonDecoratorAdapter singletonDecoratorAdapter = new SingletonDecoratorAdapter();
AbstractFactoryFactorySingletonBuilderProxy abstractFactoryFactorySingletonBuilderProxy = new AbstractFactoryFactorySingletonBuilderProxy();
VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory visitorBeanSingletonProxyAdvisorBuilderFactoryFactory = new VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory();
IteratorListenerBean iteratorListenerBean = new IteratorListenerBean();
AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator abstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator = new AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator();
synchronized final private protected void setAdvisorFacadeObserverFactorySingletonBeanProxy(AdvisorFacadeObserverFactorySingletonBeanProxy advisorFacadeObserverFactorySingletonBeanProxy) {
this.advisorFacadeObserverFactorySingletonBeanProxy = advisorFacadeObserverFactorySingletonBeanProxy;
}
public synchronized static protected native volatile transient private void setAbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy(AbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy) {
this.abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy = abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy;
}
native public static synchronized protected private transient final void setAbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator(AbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator) {
this.abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator = abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator;
}
protected public native synchronized final void setAbstractBuilderFactoryFactory(AbstractBuilderFactoryFactory abstractBuilderFactoryFactory) {
this.abstractBuilderFactoryFactory = abstractBuilderFactoryFactory;
}
static private protected volatile transient SingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory getSingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory() {
return this.singletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory;
}
transient private final static public VisitorAdvisorFactoryAdapterProxy getVisitorAdvisorFactoryAdapterProxy() {
return this.visitorAdvisorFactoryAdapterProxy;
}
synchronized protected public final volatile private AbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener getAbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener() {
return this.abstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener;
}
public transient private AbstractListenerAdvisor getAbstractListenerAdvisor() {
return this.abstractListenerAdvisor;
}
public protected transient final synchronized volatile static native private AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter abstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter(ObserverDecoratorAdvisorAdapterBuilderSingletonFacade observerDecoratorAdvisorAdapterBuilderSingletonFacade, AbstractBeanInterceptor abstractBeanInterceptor, AdvisorFacadeSingletonDecoratorListener advisorFacadeSingletonDecoratorListener, AbstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder abstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder, AbstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver abstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver) {
decoratorProxyBean.setProxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter(this.proxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter);
return new AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter();
}
transient native private final synchronized volatile protected static DecoratorSingletonIterator decoratorSingletonIterator(ObserverSingletonListenerFactoryFactoryBuilder observerSingletonListenerFactoryFactoryBuilder, VisitorDecoratorSingletonObserverFactory visitorDecoratorSingletonObserverFactory, AbstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory abstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory, FactoryVisitorProxyDecoratorListener factoryVisitorProxyDecoratorListener) {
factoryInterceptorListenerSingletonFacadeDecoratorAdapter.setAbstractBuilderDecorator(this.abstractBuilderDecorator);
InterceptorProxyFacade interceptorProxyFacade = new InterceptorProxyFacade();
abstractAdvisorAdapterVisitorBean.setAbstractAdapterObserver(this.abstractAdapterObserver);
abstractInterceptorListenerBuilderSingletonAdapterStrategyFactoryAdvisor.setAdvisorStrategyDecorator(this.advisorStrategyDecorator);
return new DecoratorSingletonIterator();
}
synchronized volatile private final protected public static native transient AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade abstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade(ObserverListenerBeanFactoryFactoryAdvisor observerListenerBeanFactoryFactoryAdvisor, ProxyObserverVisitorFactoryBuilderDecoratorStrategy proxyObserverVisitorFactoryBuilderDecoratorStrategy, AbstractBeanInterceptorObserverAdvisor abstractBeanInterceptorObserverAdvisor) {
abstractStrategyFactoryFactoryBeanVisitorBuilderSingleton.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
AbstractListenerAdvisorSingletonObserver abstractListenerAdvisorSingletonObserver = abstractBuilderDecoratorVisitorFactoryBeanProxyFacadeSingleton.getAbstractAdapterProxyBuilderFacadeListenerAdvisorInterceptorFactory().getAbstractListenerAdvisorSingletonObserver();
return new AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade();
}
volatile static transient public native protected AbstractListenerBuilderAdvisorProxyVisitorFacade abstractListenerBuilderAdvisorProxyVisitorFacade(DecoratorSingletonAdvisorFactoryInterceptorListenerBuilder decoratorSingletonAdvisorFactoryInterceptorListenerBuilder, AbstractDecoratorBuilderBeanListenerSingletonObserver abstractDecoratorBuilderBeanListenerSingletonObserver) {
AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter abstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter = new AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter();
adapterAdvisorDecoratorFacadeProxy.setAbstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory(this.abstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory);
return new AbstractListenerBuilderAdvisorProxyVisitorFacade();
}
private final public static volatile transient synchronized protected InterceptorSingletonVisitor interceptorSingletonVisitor(AbstractDecoratorStrategyProxyObserverInterceptorBuilder abstractDecoratorStrategyProxyObserverInterceptorBuilder, AbstractVisitorAdvisorFacadeListener abstractVisitorAdvisorFacadeListener, VisitorFactoryFactoryBuilder visitorFactoryFactoryBuilder, VisitorProxyFacadeFactoryFactorySingletonAdvisorDecorator visitorProxyFacadeFactoryFactorySingletonAdvisorDecorator, AbstractAdvisorBuilderDecoratorInterceptor abstractAdvisorBuilderDecoratorInterceptor) {
AbstractProxyAdvisor abstractProxyAdvisor = abstractFactoryFactoryDecorator.getListenerInterceptorFactoryFactory().getAbstractProxyAdvisor();
AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory abstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory = new AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory();
abstractBeanAdvisorSingletonInterceptor.setAbstractFactoryFactoryAdvisorFacadeStrategy(this.abstractFactoryFactoryAdvisorFacadeStrategy);
AbstractAdvisorProxyStrategyIteratorVisitorObserver abstractAdvisorProxyStrategyIteratorVisitorObserver = new AbstractAdvisorProxyStrategyIteratorVisitorObserver();
if (abstractSingletonFacadeFactoryObserver.isInterceptorListenerFacade()) {
iteratorProxyListenerFacadeBean.setAbstractStrategyBean(this.abstractStrategyBean);
AbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor abstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor = abstractBeanInterceptorIteratorListenerFactoryFactoryStrategyProxyObserver.getAbstractObserverFacadeListenerSingletonProxyAdvisorStrategyVisitor().getAbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor();
abstractProxyBuilderVisitorSingleton.setIteratorAdvisorProxySingletonAdapter(this.iteratorAdvisorProxySingletonAdapter);
if (abstractDecoratorAdapterVisitorProxyObserverIteratorBuilderFactory.isDecoratorFactoryFactoryFacade()) {
visitorIteratorObserverProxyAdvisor.setAbstractObserverSingletonProxyAdvisorBuilderDecorator(this.abstractObserverSingletonProxyAdvisorBuilderDecorator);
singletonFacadeAdapterListenerFactory.setAbstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory(this.abstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory);
while (abstractFactoryAdapterSingletonFactoryFactory.isAbstractStrategyFactory()) {
abstractAdapterBeanStrategySingletonAdvisorBuilderListenerFactory.setAbstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver(this.abstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver);
abstractObserverAdapterFactoryFacadeDecoratorBuilderInterceptorFactoryFactory.setAdvisorIteratorFactoryProxyDecorator(this.advisorIteratorFactoryProxyDecorator);
while (abstractFacadeListenerStrategyIteratorAdvisorSingletonProxyObserver.isVisitorDecoratorInterceptorIteratorAdapter()) {
abstractProxyAdapterInterceptorObserverFactoryFactoryIterator.setSingletonFactoryFactoryProxyIteratorStrategy(this.singletonFactoryFactoryProxyIteratorStrategy);
singletonInterceptorDecorator.setAbstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade(this.abstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade);
visitorFactoryFactoryAdapterIteratorInterceptor.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
}
}
} else {
abstractListenerInterceptorStrategyVisitorBeanFactorySingletonIterator.setAbstractProxyStrategy(this.abstractProxyStrategy);
abstractProxyInterceptorSingletonFactoryFactory.setAbstractSingletonIterator(this.abstractSingletonIterator);
}
} else {
singletonListenerFactoryFactoryIteratorProxy.setAbstractObserverProxyIteratorVisitor(this.abstractObserverProxyIteratorVisitor);
}
return new InterceptorSingletonVisitor();
}
native volatile static final public AbstractSingletonObserver abstractSingletonObserver(AbstractBuilderFacade abstractBuilderFacade, ListenerBuilderVisitorFactoryStrategyAdvisorFacade listenerBuilderVisitorFactoryStrategyAdvisorFacade) {
builderObserverIterator.setAbstractProxyBuilder(this.abstractProxyBuilder);
AbstractInterceptorAdapterFactoryAdvisorStrategyProxy abstractInterceptorAdapterFactoryAdvisorStrategyProxy = abstractDecoratorInterceptor.getStrategyObserverListenerVisitorBean().getAbstractInterceptorAdapterFactoryAdvisorStrategyProxy();
AbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator abstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator = abstractFactoryIteratorStrategyVisitor.getAdvisorBuilderVisitorBeanIterator().getAbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator();
while (facadeStrategyObserver.isAbstractFactoryFactoryFactoryListenerVisitorIteratorSingletonBeanAdvisor()) {
abstractFactoryFactoryAdvisorFactoryInterceptorIteratorObserverProxyBuilder.setIteratorAdvisorBeanBuilderProxy(this.iteratorAdvisorBeanBuilderProxy);
AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter abstractIteratorFactoryFactoryFacadeObserverVisitorAdapter = new AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter();
abstractVisitorObserverBeanSingletonBuilderProxyFacadeIterator.setAbstractProxyFactoryAdapterFactoryFactoryInterceptorIterator(this.abstractProxyFactoryAdapterFactoryFactoryInterceptorIterator);
}
return new AbstractSingletonObserver();
}
transient volatile static private synchronized AbstractFactorySingletonFacadeProxyFactoryFactoryIterator abstractFactorySingletonFacadeProxyFactoryFactoryIterator(ObserverInterceptorAdapter observerInterceptorAdapter, AbstractInterceptorIteratorListenerFacadeDecoratorVisitor abstractInterceptorIteratorListenerFacadeDecoratorVisitor, FactoryDecoratorBeanAdapterProxy factoryDecoratorBeanAdapterProxy, SingletonAdvisorFacadeBuilderStrategy singletonAdvisorFacadeBuilderStrategy) {
AbstractBuilderIterator abstractBuilderIterator = new AbstractBuilderIterator();
iteratorSingletonDecoratorVisitorAdvisorFactoryFacade.setAbstractDecoratorAdapterListenerBuilderFacadeIterator(this.abstractDecoratorAdapterListenerBuilderFacadeIterator);
return new AbstractFactorySingletonFacadeProxyFactoryFactoryIterator();
}
synchronized volatile protected native private DecoratorStrategyBuilderListenerSingleton decoratorStrategyBuilderListenerSingleton(ObserverBuilderFactoryFactory observerBuilderFactoryFactory, AbstractStrategyDecoratorFacadeVisitor abstractStrategyDecoratorFacadeVisitor, AbstractAdapterIteratorListenerBuilderFactoryVisitor abstractAdapterIteratorListenerBuilderFactoryVisitor, AbstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator abstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator, AbstractStrategyFactoryFacadeVisitorListenerBean abstractStrategyFactoryFacadeVisitorListenerBean) {
advisorStrategySingleton.setAbstractSingletonObserverAdapterDecorator(this.abstractSingletonObserverAdapterDecorator);
return new DecoratorStrategyBuilderListenerSingleton();
}
}
SingletonDecoratorAdapter singletonDecoratorAdapter = new SingletonDecoratorAdapter();
AbstractFactoryFactorySingletonBuilderProxy abstractFactoryFactorySingletonBuilderProxy = new AbstractFactoryFactorySingletonBuilderProxy();
VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory visitorBeanSingletonProxyAdvisorBuilderFactoryFactory = new VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory();
IteratorListenerBean iteratorListenerBean = new IteratorListenerBean();
AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator abstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator = new AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator();
synchronized final private protected void setAdvisorFacadeObserverFactorySingletonBeanProxy(AdvisorFacadeObserverFactorySingletonBeanProxy advisorFacadeObserverFactorySingletonBeanProxy) {
this.advisorFacadeObserverFactorySingletonBeanProxy = advisorFacadeObserverFactorySingletonBeanProxy;
}
public synchronized static protected native volatile transient private void setAbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy(AbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy) {
this.abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy = abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy;
}
native public static synchronized protected private transient final void setAbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator(AbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator) {
this.abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator = abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator;
}
protected public native synchronized final void setAbstractBuilderFactoryFactory(AbstractBuilderFactoryFactory abstractBuilderFactoryFactory) {
this.abstractBuilderFactoryFactory = abstractBuilderFactoryFactory;
}
static private protected volatile transient SingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory getSingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory() {
return this.singletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory;
}
transient private final static public VisitorAdvisorFactoryAdapterProxy getVisitorAdvisorFactoryAdapterProxy() {
return this.visitorAdvisorFactoryAdapterProxy;
}
synchronized protected public final volatile private AbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener getAbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener() {
return this.abstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener;
}
public transient private AbstractListenerAdvisor getAbstractListenerAdvisor() {
return this.abstractListenerAdvisor;
}
public protected transient final synchronized volatile static native private AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter abstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter(ObserverDecoratorAdvisorAdapterBuilderSingletonFacade observerDecoratorAdvisorAdapterBuilderSingletonFacade, AbstractBeanInterceptor abstractBeanInterceptor, AdvisorFacadeSingletonDecoratorListener advisorFacadeSingletonDecoratorListener, AbstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder abstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder, AbstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver abstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver) {
decoratorProxyBean.setProxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter(this.proxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter);
return new AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter();
}
transient native private final synchronized volatile protected static DecoratorSingletonIterator decoratorSingletonIterator(ObserverSingletonListenerFactoryFactoryBuilder observerSingletonListenerFactoryFactoryBuilder, VisitorDecoratorSingletonObserverFactory visitorDecoratorSingletonObserverFactory, AbstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory abstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory, FactoryVisitorProxyDecoratorListener factoryVisitorProxyDecoratorListener) {
factoryInterceptorListenerSingletonFacadeDecoratorAdapter.setAbstractBuilderDecorator(this.abstractBuilderDecorator);
InterceptorProxyFacade interceptorProxyFacade = new InterceptorProxyFacade();
abstractAdvisorAdapterVisitorBean.setAbstractAdapterObserver(this.abstractAdapterObserver);
abstractInterceptorListenerBuilderSingletonAdapterStrategyFactoryAdvisor.setAdvisorStrategyDecorator(this.advisorStrategyDecorator);
return new DecoratorSingletonIterator();
}
synchronized volatile private final protected public static native transient AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade abstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade(ObserverListenerBeanFactoryFactoryAdvisor observerListenerBeanFactoryFactoryAdvisor, ProxyObserverVisitorFactoryBuilderDecoratorStrategy proxyObserverVisitorFactoryBuilderDecoratorStrategy, AbstractBeanInterceptorObserverAdvisor abstractBeanInterceptorObserverAdvisor) {
abstractStrategyFactoryFactoryBeanVisitorBuilderSingleton.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
AbstractListenerAdvisorSingletonObserver abstractListenerAdvisorSingletonObserver = abstractBuilderDecoratorVisitorFactoryBeanProxyFacadeSingleton.getAbstractAdapterProxyBuilderFacadeListenerAdvisorInterceptorFactory().getAbstractListenerAdvisorSingletonObserver();
return new AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade();
}
volatile static transient public native protected AbstractListenerBuilderAdvisorProxyVisitorFacade abstractListenerBuilderAdvisorProxyVisitorFacade(DecoratorSingletonAdvisorFactoryInterceptorListenerBuilder decoratorSingletonAdvisorFactoryInterceptorListenerBuilder, AbstractDecoratorBuilderBeanListenerSingletonObserver abstractDecoratorBuilderBeanListenerSingletonObserver) {
AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter abstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter = new AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter();
adapterAdvisorDecoratorFacadeProxy.setAbstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory(this.abstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory);
return new AbstractListenerBuilderAdvisorProxyVisitorFacade();
}
private final public static volatile transient synchronized protected InterceptorSingletonVisitor interceptorSingletonVisitor(AbstractDecoratorStrategyProxyObserverInterceptorBuilder abstractDecoratorStrategyProxyObserverInterceptorBuilder, AbstractVisitorAdvisorFacadeListener abstractVisitorAdvisorFacadeListener, VisitorFactoryFactoryBuilder visitorFactoryFactoryBuilder, VisitorProxyFacadeFactoryFactorySingletonAdvisorDecorator visitorProxyFacadeFactoryFactorySingletonAdvisorDecorator, AbstractAdvisorBuilderDecoratorInterceptor abstractAdvisorBuilderDecoratorInterceptor) {
AbstractProxyAdvisor abstractProxyAdvisor = abstractFactoryFactoryDecorator.getListenerInterceptorFactoryFactory().getAbstractProxyAdvisor();
AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory abstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory = new AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory();
abstractBeanAdvisorSingletonInterceptor.setAbstractFactoryFactoryAdvisorFacadeStrategy(this.abstractFactoryFactoryAdvisorFacadeStrategy);
AbstractAdvisorProxyStrategyIteratorVisitorObserver abstractAdvisorProxyStrategyIteratorVisitorObserver = new AbstractAdvisorProxyStrategyIteratorVisitorObserver();
if (abstractSingletonFacadeFactoryObserver.isInterceptorListenerFacade()) {
iteratorProxyListenerFacadeBean.setAbstractStrategyBean(this.abstractStrategyBean);
AbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor abstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor = abstractBeanInterceptorIteratorListenerFactoryFactoryStrategyProxyObserver.getAbstractObserverFacadeListenerSingletonProxyAdvisorStrategyVisitor().getAbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor();
abstractProxyBuilderVisitorSingleton.setIteratorAdvisorProxySingletonAdapter(this.iteratorAdvisorProxySingletonAdapter);
if (abstractDecoratorAdapterVisitorProxyObserverIteratorBuilderFactory.isDecoratorFactoryFactoryFacade()) {
visitorIteratorObserverProxyAdvisor.setAbstractObserverSingletonProxyAdvisorBuilderDecorator(this.abstractObserverSingletonProxyAdvisorBuilderDecorator);
singletonFacadeAdapterListenerFactory.setAbstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory(this.abstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory);
while (abstractFactoryAdapterSingletonFactoryFactory.isAbstractStrategyFactory()) {
abstractAdapterBeanStrategySingletonAdvisorBuilderListenerFactory.setAbstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver(this.abstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver);
abstractObserverAdapterFactoryFacadeDecoratorBuilderInterceptorFactoryFactory.setAdvisorIteratorFactoryProxyDecorator(this.advisorIteratorFactoryProxyDecorator);
while (abstractFacadeListenerStrategyIteratorAdvisorSingletonProxyObserver.isVisitorDecoratorInterceptorIteratorAdapter()) {
abstractProxyAdapterInterceptorObserverFactoryFactoryIterator.setSingletonFactoryFactoryProxyIteratorStrategy(this.singletonFactoryFactoryProxyIteratorStrategy);
singletonInterceptorDecorator.setAbstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade(this.abstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade);
visitorFactoryFactoryAdapterIteratorInterceptor.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
}
}
} else {
abstractListenerInterceptorStrategyVisitorBeanFactorySingletonIterator.setAbstractProxyStrategy(this.abstractProxyStrategy);
abstractProxyInterceptorSingletonFactoryFactory.setAbstractSingletonIterator(this.abstractSingletonIterator);
}
} else {
singletonListenerFactoryFactoryIteratorProxy.setAbstractObserverProxyIteratorVisitor(this.abstractObserverProxyIteratorVisitor);
}
return new InterceptorSingletonVisitor();
}
native volatile static final public AbstractSingletonObserver abstractSingletonObserver(AbstractBuilderFacade abstractBuilderFacade, ListenerBuilderVisitorFactoryStrategyAdvisorFacade listenerBuilderVisitorFactoryStrategyAdvisorFacade) {
builderObserverIterator.setAbstractProxyBuilder(this.abstractProxyBuilder);
AbstractInterceptorAdapterFactoryAdvisorStrategyProxy abstractInterceptorAdapterFactoryAdvisorStrategyProxy = abstractDecoratorInterceptor.getStrategyObserverListenerVisitorBean().getAbstractInterceptorAdapterFactoryAdvisorStrategyProxy();
AbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator abstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator = abstractFactoryIteratorStrategyVisitor.getAdvisorBuilderVisitorBeanIterator().getAbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator();
while (facadeStrategyObserver.isAbstractFactoryFactoryFactoryListenerVisitorIteratorSingletonBeanAdvisor()) {
abstractFactoryFactoryAdvisorFactoryInterceptorIteratorObserverProxyBuilder.setIteratorAdvisorBeanBuilderProxy(this.iteratorAdvisorBeanBuilderProxy);
AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter abstractIteratorFactoryFactoryFacadeObserverVisitorAdapter = new AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter();
abstractVisitorObserverBeanSingletonBuilderProxyFacadeIterator.setAbstractProxyFactoryAdapterFactoryFactoryInterceptorIterator(this.abstractProxyFactoryAdapterFactoryFactoryInterceptorIterator);
}
return new AbstractSingletonObserver();
}
transient volatile static private synchronized AbstractFactorySingletonFacadeProxyFactoryFactoryIterator abstractFactorySingletonFacadeProxyFactoryFactoryIterator(ObserverInterceptorAdapter observerInterceptorAdapter, AbstractInterceptorIteratorListenerFacadeDecoratorVisitor abstractInterceptorIteratorListenerFacadeDecoratorVisitor, FactoryDecoratorBeanAdapterProxy factoryDecoratorBeanAdapterProxy, SingletonAdvisorFacadeBuilderStrategy singletonAdvisorFacadeBuilderStrategy) {
AbstractBuilderIterator abstractBuilderIterator = new AbstractBuilderIterator();
iteratorSingletonDecoratorVisitorAdvisorFactoryFacade.setAbstractDecoratorAdapterListenerBuilderFacadeIterator(this.abstractDecoratorAdapterListenerBuilderFacadeIterator);
return new AbstractFactorySingletonFacadeProxyFactoryFactoryIterator();
}
synchronized volatile protected native private DecoratorStrategyBuilderListenerSingleton decoratorStrategyBuilderListenerSingleton(ObserverBuilderFactoryFactory observerBuilderFactoryFactory, AbstractStrategyDecoratorFacadeVisitor abstractStrategyDecoratorFacadeVisitor, AbstractAdapterIteratorListenerBuilderFactoryVisitor abstractAdapterIteratorListenerBuilderFactoryVisitor, AbstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator abstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator, AbstractStrategyFactoryFacadeVisitorListenerBean abstractStrategyFactoryFacadeVisitorListenerBean) {
advisorStrategySingleton.setAbstractSingletonObserverAdapterDecorator(this.abstractSingletonObserverAdapterDecorator);
return new DecoratorStrategyBuilderListenerSingleton();
}
}
Какое-то нагромождение из ключевых слов.
>>25308
Ну в спринге эта логика есть же. По сути я просто хотел подобное в филды пихать. Т.е. как бы переход от конкретного сервиса к отдельной функции, которую может реализовать кто угодно. Не знаю как это можно выразить не через женерики... Типа 100500 интферфейсов писать? Или просто забить и оставить только инстансы.
>>25298
А че за основная ветка?
>>25312
Стараюсь...
Да блин. А ведь такая красота могла выйти. Ну тогда инстансы оставлю. Сосредоточусь только на разделении типов сервисов.
Не, ну вы прикиньте, они реально добавили это убожество.
Че вы постоянно бухтите...
Анкету попросили заполнить в одной около госпараше после успешного собеса.
В анкете помимо персональных данных просили написать все имущество что у меня есть (недвига, авто и тп), фио и контакты всех родственников ну и тп дичь.
Оффера кстати так и не дали, якобы там начальник в отпуске и подписать прям щас не может тупая отмазка, другие "подписывали" картинкой печати и подписи или вообще хуй забивали - это не документ в РФ, а вы там пока заполните и ждите проверки сбшников.
Не стал дожидаться, через неделю я уже работал в другом месте без всяких анкет.
Подскажите, сейчас в РФ реальной найти шабашку на этом стеке или удел джависта - аналить на финтехи до пенсии?
Шабашка это фриланс что ли? Видел всякие курсы для вкатунов с почасовой ставкой. Если сенька++ то мб возьмут на парт тайм.
А так везде - фултайм. В основном надо вникать в бизнес логику, а не просто писать код.
Не отклоняйся от линии партии, с выходом 21 версии этот функционал перестал быть бесполезным синтаксическим сахаром для детишек из майкрософт и стал очередным достоинством современного языка программирования от оракла.
Так-то если почитать JEP, то будет понятно, почему они так сделали, и это уже не будет выглядеть убожеством.
Не проецируй, шарпомух.
не хочу его пробовать, думаю всякие проблемы могут вылезти в реактивном контексте, хочется именно каким-нибудь вебфлаксовским способом
В нем два указателя: 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.
Не забывай себе голову пупуньскими вопросами
А нахуя его всегда нулловым сделали?
Деструктор вызывается при уничтожении объекта. В жабе момент удаления объекта непредсказуем из-за сборки мусора, и пожтому никаких полезных действий на событие удаления объекта не повесить.
>>26118
Проектировать объекты иммутабельными. Других способов нет.
Да, никому это не нравится. Нет, с этим ничего нельзя поделать.
Короче. Какой канон? У меня есть обращение к бд которое может мне выдать ошибку. И я хотел это в монаду Result завернуть. Выглядит красиво. Но мб у вас более хорошие способы есть
Ну скуфы из оракла стараются это оптимизировать. Кстати, а давно в крестах исключения появились?
В джаве похуй на тебя-шарпея, и твои маняфантазии, а с производительснотью все нормально.
Всм? А че оно тогда сегфаулты мне кидало? И ошибки номер хуй. Или вы их в стд не юзаете?
Есть такое мнение.
Но проблемы с производительностью эксепшенов решаемы - у эксепшена можно кастрировать метод сбора стектрейса. Метода - так себе, но видел в нескольких фреймворках это чудо.
То-то вижуалстудия у меня летает на некроноуте, а идея жрёт все доступные ресурсы на мощной рабочей пекарне.
А я вот помню брайн гетц говорил, мол делать логику на эксепшенах - зло. Исключительные случаи для исключительных случаев. Кто прав?
Не ебу че у тебя там на ноуте, пидор. Скорее всего проблема в прослойке между моником и сидушкой. Или в нервном узле у тебя между ушей.
Гетц прав. Но когда кодеры не говнокодили, камон?
Сам съеби отсюда, шарпоблядь. Крестовики здесь уважаемые посетители.
Хоть и непосредственно логику на эксепшенах делать не стоит, это один из важнейших инструментов языка и замены им нет. Почти каждый метод подразумевает наличие какого-то контекста для его исполнения. Если условия не соответствуют требуемым, необходимо вывалить исключение, и это в хорошем коде происходит очень часто.
Тупую орущую школоту типо шарпоблядей никто уважать не будет. Крестовики обычно не являются таковыми, потому они и уважаемые.
Когда я уже это закончу...
Ты пупуня.
Не будет никаких проблем. @Async навесь и не парься.
Братик, а не можешь подсказать мне как стоит реализовать security для сервисов? Сделать отдельный auth-service? В каждый сервис добавить filter? Или прям в gateway сервисе реализовать?
ПС.
Я попробовал добавить spring security & jwt в оба микросервиса user-servic & movie-service но по итогу у меня почему то теперь на каждый эндпоинт статус 200 и пустой респонс.
Смотрите прямую трансляцию от sir Durga на YouTube!
Ты хочешь выгореть не начав работать?
Бля, я и половину слов разобрать не могу, но чувствую, что через час буду понимать всё.
Что за кончи в треде сидят, пиздец просто.
То они крестоблядей уважают, то какую то хуйню про jwt несут.
Тебе дали кейклок, нет хочу говно жрать и пилить собственный обоссаный iam который и сотой части функционала кейклока не высрет.
Мы через keycloak реализуем. Подробности не знаю, не я этим занался. Но знаю, что там и без spring security было и вместе с ним. Подключение к oauth2 провайдерам идет через плагины кейклока. Даже какие-то свои плагины писали.
Ебу? Я шарпом не пользовался никогда.
Просто знаю, что аддоныдля кейклока усе, депрекатед. Теперь надо напрямую через спринг секурити делать, без прослоек.
>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
А вот спринг секурити отказался от сервера авторизации, мол вот есть кейклока и другие их и используйте.
хуясе картельный сговор
>на связи студент почти 2-ого курса информатики. За этот год учёбы много чего учил: C++, ASSembler, Питоняку и прочее дерьмо. Решил вкатиться на галеры явы, но чувствую, что сейчас начинать сидеть и писать голые принты с циклами не даст ничего кроме скуки. Что можно комбинировать с жабой, чтобы был интерес+выгода?Выгода имеется ввиду, что ява+хуйня_нейм даст какой-то стек
Спринг, хуйбирнейт. Вообще я бы еще навернул говна по распределенным системам, микросервисам, то как данные в БД хранятся, транзакции, шардирование, партиции, MVCC, вот это всякое.
Я когда в бакалавриате учился, от скуки начал литкод решать сутками. В итоге дорешался до того, что попал стажером в Яндекс на питухон и го, после чего к жэбе больше не прикасался в своей жизни.
На каком языке собесился таки? На чём сейчас больше пишешь?
По делу чё нибудь высрешь?
Отсосать гетцу. Самый простой вариант.
начиная с восьмой ничего существенного не добавили, только всякий мусор.
Ну кроме свитча со строками. Чем больше мусора - тем хуже для языка
Начиная с 5 так-то. До неё не было jmm. Потом мусор один. Ну може пару полезных классов только, но если работает...
Это не наследование, которое нельзя наследовать, а enum с поддержкой per-type данных. Я каждый раз кончаю в штаны, когда пишу свитч-кейс на силед интерфейсы.
давай пример что ты там пишешь и от чего кончаешь
Покажи пример
Щитпост в жава треде будет увеличен втрое
Чё-то пока шарпобляди срали полгода тут у нас всем похуй было.
Опущенный шарпопетух даже нормально отразить не смог, лул.
Есть нужные фичи у 3.1 по сравнению с 2.7?
Вот жаба 21 выйдет через три недели. Еще через месяц думаю обновиться с 17.
А спринг бут так и не поднял. Во время выхода 3.0 я полчасика потыкал в одном сервисе - у меня сломались фейн и кафка и я забил.
Ну на самом деле да. Все фичи в артефактах spring-boot-starter-xxx версий 3.1.
Самые заметные изменения - замена spring-security-oauth2 на spring-security и spring-cloud-sleuth на micrometer-tracing. Причем некоторые фичи при этом проебались и пришлось писать их самим. Но при этом 2.7 скоро перестанут поддерживать, поэтому на 3.х переходить придется.
>spring-cloud-sleuth на micrometer-tracing
вот это у меня есть.
А полезное новое то что-то есть? Там я помню читал из нового есть новый http клиент, что-то про докеры. А вот по полезности - хз.
Не особо заметил пока. Локальным докером у нас не пользуются. Есть нативная компиляция прямо в буте, но на винде она работает через жопу, очень сыро пока.
Походу будем сидеть на 2.7 неподдерживаемом.
тут можно пиздеть про котлин потому что jwm или я пидор?
я недопонял, простите, ок
В спринге такой хуйни нет. Ты точно в тот тред зашёл?
int num1 = 100;
int num2 = 225;
int flags = num1 | num2;
Математику. Университетский курс линейной алгебры, матстата и теорвер
Это не логическое ИЛИ, а побитовое. Проходит по каждому биту первого значения и выполняет ИЛИ с соответствующим битом второго значения.
Ну я ца получаеца.
Блять, это реально троллинг или че. Може можно как-то еще этот он метход заюзать не в геттере. Но эти пидоры в изьюзах писаль, вай сложна сложна... Это есть - кушойте
Спасибо, не надо, я уже перешёл на шарп.
Ты такой молодец,самый продуктивный работник нашей команды
потому, шо throwable избыточно ждать, так как он будет либо эксепшоном, либо эрором, с которым все равно жавамашине разбираться. А возьмешь рантайм - проебешь ИОэксепшн
Да ничего ловить не надо. Один раз пишешь глобальный обраьотчик эксепшенов и ловишь там Exception. А catch в бизнес-логике - это почти всегда борьба с проверяемыми эксепшенами.
Прямо уж борьба... Например InterrputedException вполне полезное: не проебешь логику прерывания потока.
>>28706
Байткод и лобок тут не при чем. Фокус в том, что эксепшены проверяемы только на этапе компиляции. А рантайму абсолютно по хую какие эксепшоны и откуда швырять.
Ломбок просто использует один баянистый чит с прикастом эксепшенов https://github.com/projectlombok/lombok/blob/000ce6d19a3d4a7d8c88ffa51e47ffda2a3b2c79/src/core/lombok/Lombok.java#L55.
И да - лобок не трогает байткод. Вместо этого он делает абсолютно ректальный гейский нелегальный трюк: через приватные API выдирает из annotation processorа редактируемую версию AST сорцов, и правит это AST перед тем как оно будет скомпилировано в байткод.
Пупунь,тебе не стыдно?
Отвечайте
> let's discuss the semantic guarantees Kafka provides between producer and consumer
Нет конечно. Вся идея очередей это развязать продюсера и консьюмера, чтобы они друг о друге ничего не знали и не зависели.
Ну гарантии доставки-то нужны.
Че да? Ты поясни нормально. Просто вдруг к нам зашёл кто-то уровня даг ли и лучше знает как архитектуру многопоточную сделать.
А че в нормальном виде нельзя было сделать? Даже для телефонов не адаптировали - держат планку, хули
Да нет тут никакой мудрости, просто нет таких кейсов, когда interruptedException может быть нужен.
>просто нет таких кейсов, когда interruptedException может быть нужен
фор (вар хуй : жопаФактори.гетЖопаОфАнон(">>29230").гетХуйс()) {
__тру {
____хуй.ремув();
__} катч(InterruptedException e) {
____бреак;
__}
}
Не поймал исключение и у тебя застряли хуи в жопе.
Методы которые имеют разное поведение, хотя выполняют одно и тоже действие. И блокирующая операция всегда подчеркивается чекед исключением.
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html
Нихуя не понял.
Хуевый пример просто.
2025 - infa po springu was released finally after 20 years of infa deprivation.
Почему он лид-то? Это ж пиздец полнейший ничем не оправданный.
Пиздец люди иногда красивые идеи выдают.
По идее есть. На петухабре была статья про кащея, где он ебанутую валидацию на дженериках захуярил.
рандом удача
Т.е.
A{
@ManyToOne
B;
}
Хотелось бы провернуть подобное:
save(new A(new B(1));
Не создавая новую B.
По сути я хочу выполнить простой запрос insert.
Хотя надо просто optional = false ебнуть, но без insertable = false, updatable = false. Хуй знает как они сочетаются, что все в null уходит.
Понятно, ну 2 года это не много и немало. Готовься новые штуки осваивать в короткий срок, еще есть шанс спалится на какой самой простой вещи. Вполне жди мидловских задач.
Соре за тупой вопрос, но:
Может ли ключевое слово static быть применено к определению внутреннего класса?
Уверен, что да, но gpt почему-то говорит, что нет. Поясните плиз
Когда же до вас, детей имбицильных, дойдет уже...
ЧатГпт - не интеллект. ЧатГпт - просто Т9-переросток, с косяками такого же рода что и у предшественника. Он нихуя не знает и не умозаключает, он просто выдает портянку текста, которая наиболее вероятна согласно его модели. За ЧатГпт всегда нужно перепроверять. Никогда не верить на слово.
И если перепроверив ты выяснил что реальность не сходится с маняфантазиями нейронки, верх тупости копротивляться и верить в нейронку до конца блять. Поэтому нет, не "соре", пошел нахуй.
Сука.
Ну блять, а как еще? "Уверен, что да, но gpt почему-то говорит, что нет"... Пиздец блять, сингулярность наступила. Похуй что машины так и не прошли тест тьюринга, зато люди его больше не вывозят.
конкретнее с неста в спринг? и насколько хорошая/ебанутая идея туда закатываться? работы с джавой овермного в сравнении с остальным и это не кнопкоебство на реакте с 123123123 откликов.
какой стек в целом смотреть для вката?
я сам на кабана ебашу за такие се 90к, хочу как мой знакомый ебанат одноклеточный 180-200 ловить (2к баксов кек)
на шарпе писал по универу (я с мухосранска двшного) и вакансий на шарп тут хуй да нихуя.
а вот на джаву вполне можно вкатиться (при должном пиздеже и подготовке к собесам за 2-3 месяца мб даже на мидла влезу, опыт то на другой платформе есть)
+ еще имхо конечно, но вакансии в целом по палате в финтехе и тд в ру сегменте и забугорные почему-то куда чаще на джаве встречал, поэтому кажется логичным попробовать туда (+ там куча всяких скал груви и остальной котлинатории)
>Ты ж в ней нихуя не знаешь. Каким образом ты это провернешь?
дрочка дрочка и еще раз дрочка + заливы петов тестовых на которых буду дрочить задними числами))) вот те и два года опыта хыхы
>Опыт на другой платформе ну никак не ляжет на опыт жабовский.
.net + nest вполне может налезть, концепции схожие есть.
Бля, учитывая сколько я эти треды заебываю... @anywaythanks
Это импортозамещённый паттерн что ли? Я про бариновские заокеанские спрашивал
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.
Паттерны - это не архитектурные бестпрактисы, а просто единообразный код, получающийся при решении схожих задач. Можно писать дохуя кода и даже не подозревать, что реализуешь какие-то паттерны, потому что они тупо получаются сами собой, когда пытаешься обобщить схожие подходы. Вот надо тебе часто создавать один и тот же объект с одинаковыми параметрами, ты выносишь логику его создания в хелпер и только месяцы спустя узнаешь, что это ниибацца какой фабричный метод.
У меня в любом случае, сломалась сама технология методов 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;
}
}
Причем в моем предыдущем коде, все идеально - методы объявляются, вызываются, все нормально.
>сломалась сама технология методов Java
Ну классика. Это вообще известная проблема. Решается перекатом в шарпы.
Исправил опечатки. Теперь у меня лишь вываливается другая ошибка:
"java.lang.NoSuchMethodError: 'java.lang.String Yellow.forAddition(java.lang.String)'"
Как ты узнал...
Поссать ты можешь только на свое ебало, сначала матчасть изучай, jsf поматёрее и постарше будет чем этот ваш jsp.
Но если ты сейчас с jsp сидишь то ебало твое перманентно обоссано, боюсь даже представить в каком бодишопе ты работаешь.
>>String result = yellow1.forAddtion(array1);
>>public int forAddition(String input)
Ты на питоне программированию учился?
Какие есть агрегаты, атрибуты, события и т.д в домене каравашек?
Вниманиеблядь семёнит, чтобы о нём не забыли.
Пупуня,спок
Стори?
Говоря о римейках - помнится был еще кинопоиск-чел. Как интересно щас у него дела.
>>31243
Бля, мб лучше стоило их оставить, раз они так внимание привлекают...
Почему не jpql... Нет ну вообще понятно, что использовать. Мне не понятно как. Я ведь могу нахуярить и чистого sql со схемами, но... Нинаю даже
Да это не то. Речь не про ORM-ы, а про создание ин-мемори БД для запуска интеграционных тестов.
Нууу. Пример тестов можешь скинуть? Я могу конфиг сделать с такой бд, какой раз повторюсь, проблема в том, чтобы опять велосипедов не наделать...
Ты никогда не вкатишься, если не умеешь гуглить. В твои 35 годиков пора уже научиться.
Ты откуда столько насчитал-то?
А зачем тебе мапа-то? Вроде лист должен по get(int) справляться
Хотя, если тебе нужна группировка именно, то можно лист из дтоошек сделать...
Не получится.
Аннотация абсолютно точно была сделана дибильными пупунями для дибильных пупунь,использовать порядочным пупуням не рекомендуется
И так знаю... Главная причем. Ну ладно, пофиг - хоть что-то будет.
Насмехайтесь над этой пупуней
Есть код:
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:
Все у меня установлено. Более того, до недавнего времени, когда я писал такой же код - все работало. Да и сейчас есть файлы с расширением .java, которые абсолютно нормально запускаются.
Хз, когда я последний раз пробовал гпт, она мне даже банальный код написать не смогла...
Скажем есть массив произвольной глубины и надо определить зубчатый ли он.
Делаю тест на чтение/запись, запускаю одиночный тест - нормально.
Запускаю все тесты - тесты начинают нестабильно падать. Судя по логам - из сокета не читаются данные, и тест за это время успевает завершиться.
Т.е. тред теста, тред чтения, тред записи. В треде теста я ставлю Thread.sleep. Но всё-равно почему-то не всегда читаются данные. Можно как-то синхронизировать эти потоки в разных тредах? Или сказать чтобы всегда выполнялось поровну, без отдачи приоритета тому или другому треду
Тред слип нихуя не гарантирует. Вообще по словам мало что ясно. Спограмируй модель небольшую с этой проблемой.
Можно ебнуть две блокирующие очереди. Так, тред чтения это консумер, тред записи продусер. Тред теста будет как продусером для треда чтения, так консумером для треда записи.
Т.е. тред записи все что делает, так это кладет в очередь данные. Тред записи берет из своей очереди данные и пишет их. Можно сделать общими блокирующие очереди, а не стримы. И вот в тесте берешь данные из очереди чтения чета делаешь, клодешь в очередь записи.
Ну это если я правильно понял.
>>32711
https://youtu.be/m8UaCpo62Cs?si=T4MFHsd2qsn0j3lG&t=2955
Хаха, забавно. Ну типичный евангелист, че еще от него было ожидать.
Я разрабатываю свою соцсеть, у которой пока есть только какой никакой фронтенд на vuejs. Мне нужно на стеке java + spring boot сделать следующий функционал. Когда user1 лайкает пост, в базу должен записываться лайк и после этого мое рест говно должно обновить данные в браузере что user1 понравился его пост. Запись лайков в базу данных я уже сделал, теперь нужно сделать так чтобы приложение уведомляла пользователя. Что лучше для этого использовать, websocket, webhook или long polling?
1. Что быстрее
2. Что меньше ресурсов сервера растрачивает
3. Что быстрее можно реализовать
Да ебать этот варик не пойдет пчел, вот мне кажется можно попробовать использовать websocket. Он наверное куда легче нем каждый раз дрочить http запросы серверу, какими они там лонгполлингами не были
ДЕГЕНЕРАТ СУКА КАК ТЫ УЗНАЕШЬ ЧТО ТЕБЕ ТВОЙ ЛЮБОВНИК ЛАЙК ПОСТАВИЛ?! Собираешься кнопку обновления дрочить пока палец не отсохнет?
>ТЕБЕ ТВОЙ ЛЮБОВНИК ЛАЙК ПОСТАВИЛ
ДОЛБОЕБ ПИШИ ТЗ НОРМАЛЬНО
лонг поллинг
от вебсокетов у сервера писька отвалится с каждым соединение держать в час наибольшей загрузки
http2 server push
Можно утром заходить просто же. Вот в мангалиб, например, не заморачивались с этим.
>от вебсокетов у сервера писька отвалится с каждым соединение держать в час наибольшей загрузки
Схуяли отвалится чмо?
А мне вот тоже ничево не написал нормально, хотя я точно не свинка, не далабеб и вообще няша.
@АДЕКВАТНО ПРОСИШЬ СОВЕТ
@ПОК ПОК ПООК ДОЛБОЕБ ПОК ПОК
@ПРОСИШЬ АРГУМЕНТИРОВАТЬ СВОИ СЛОВА
@ПОК ПОК ПОК бисер перед свиньями не метаю
Да ладно тебе, тут все свои. Вообще смари какие классные вложенные тесты получаются.
А че плохого в блокирующем доступе?
у меня в проекте в таком случае отправляется Mono<ResponseEntity<Resource>>
Есть сервис-регист с 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)
В композе поставил их в одну сеть и сделал зависимость. Все равно еррор. Как фиксануть?
>Unresolved compilation problem
А полный эксепшон мы конечно не дадим. По полному экскепшену нас обоссут, да и шарпеем свое коронное "решается перекатом в шарп" не вставить.
Да?
Инфы мало. Очевидно, что сервис не может достучаться до хоста config-server:8088. Почему? Мадо смотреть что ты там в композе нахуевертил, и прочие настройки.
>да и шарпеем свое коронное
Я тебе секрет открою, но это не шарписты. Можно легко убедиться спросив что-то шарповское.
application.yaml (сервис-регист)
server:
port: 8761
spring:
application:
name: service-registry
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
application.yaml (сервис конфига)
server:
port: 8088
spring:
profiles:
active: native
user-service.yaml (сервис конфига)
server:
port: 8081
error:
include-message: always
eureka:
client:
serviceUrl:
defaultZone: http://service-registry:8761/eureka/
management:
tracing:
sampling:
probability: 1.0
endpoints:
web:
exposure:
include: "health,info"
spring:
datasource:
url: jdbc:postgresql://db:5432
username: postgres
password: postgres
jpa:
hibernate:
ddl-auto: validate
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
show-sql: true
application.yaml (тестовый сервис)
spring:
application:
name: test-service
config:
import: "optional:configserver:http://config-server:8088"
docker-compose.yaml:
version: '3'
services:
service_registry:
container_name: service-registry
build: ./service-registry
ports:
- "8761:8761"
networks:
- db
config_service:
container_name: config-service
build: ./config-service
ports:
- "8088:8088"
depends_on:
- service_registry
networks:
- db
db:
container_name: db
image: postgres:15
ports:
- "5432:5432"
networks:
- db
test_service:
container_name: test-service
build: ./test-service
ports:
- "8081:8081"
depends_on:
- config_service
networks:
- db
networks:
db:
driver: bridge
volumes:
db:
application.yaml (сервис-регист)
server:
port: 8761
spring:
application:
name: service-registry
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
application.yaml (сервис конфига)
server:
port: 8088
spring:
profiles:
active: native
user-service.yaml (сервис конфига)
server:
port: 8081
error:
include-message: always
eureka:
client:
serviceUrl:
defaultZone: http://service-registry:8761/eureka/
management:
tracing:
sampling:
probability: 1.0
endpoints:
web:
exposure:
include: "health,info"
spring:
datasource:
url: jdbc:postgresql://db:5432
username: postgres
password: postgres
jpa:
hibernate:
ddl-auto: validate
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
format_sql: true
show-sql: true
application.yaml (тестовый сервис)
spring:
application:
name: test-service
config:
import: "optional:configserver:http://config-server:8088"
docker-compose.yaml:
version: '3'
services:
service_registry:
container_name: service-registry
build: ./service-registry
ports:
- "8761:8761"
networks:
- db
config_service:
container_name: config-service
build: ./config-service
ports:
- "8088:8088"
depends_on:
- service_registry
networks:
- db
db:
container_name: db
image: postgres:15
ports:
- "5432:5432"
networks:
- db
test_service:
container_name: test-service
build: ./test-service
ports:
- "8081:8081"
depends_on:
- config_service
networks:
- db
networks:
db:
driver: bridge
volumes:
db:
https://youtu.be/gD8xUkZW1GU?si=AHxfVshULAMuM5vA
Пупунище...
>import: "optional:configserver:http://config-server:8088"
>config_service:
>container_name: config-service
Госпаде, ну тыб перепроверил за собой чтоле, Семен Семеныч...
Сделай import: "optional:configserver:http://config_service:8088"
Если я правильно помню, в композе container-name != хостнейму, и последний определяется именем секции в ямле.
I/O error on GET request for "http://config_service:8088/test-service/default": Connection refused
(
Переделал архитектуру на cqrs.
Немного документации добавил.
Частично тестов.
Еще мапстркут и ломбок.
Все мапы хиберовские убрал.
Наверное моя лучшая итерация ресурс сервера, тк я могу полностью контролировать то, сколько информации доставать из бд и также не иметь никаких проблем с lazy init, т.е. транзакция теперь нужна не для хибера, а для того, чего она была предназначена изначально. Но с другой стороны я все @OneToMany. Короче не знаю, такое чувство, что пошел по какому-то простому пути и скипнул всю еблю с хибером, что мне конечно не очень нравится. Пока не знаю нужно ли полностью все тестами покрывать, да и по планам много чего осталось. Возможно проскипать часть и забить.
Еще помню кто-то обещал посмотреть, когда уберу интерфейсы... Короче можете оценить....?
https://github.com/anywaythanks/Twister
Долбоёб, я просто не знаю, что еще сказать, потому что у меня такой хуйни не было никогда. Отношения переустановка JDK к переустановке шинды не имеет никакого, потому что я предположил, что он хуёвую сборку скачал или она криво установилась, что может произойти с любой программой.
ЗАЧЕМ МНЕ НУЖЕН ШАРП, У МЕНЯ НЕТ ВРЕМЕНИ, ЧТОБЫ ЕБАТЬСЯ С НИМ
void method(){
do();
do2();
do3();
}
Если в do2 будет исключение,то метод продолжится или нет?
Нет, конечно, сама суть исключений в том, чтобы прерывать выполнения методов вверх по цепочке вызовов, пока исключение не будет перехвачено. И после перехвата к этому методу программа не вернётся, она продолжит выполнять инструкции там, где исключение перехвачено.
Научись сам проверять изученное, вместо do3() напиши System.out.println("here"), если в консоль что-то выведется, значит, метод продолжил выполняться, иначе нет. В будущем вместо вывода в консоль научишься пользоваться дебаггером.
Джавапидор, нахуя ты тут спрашиваешь, будто в этом треде этот язык придумали?
хз
Ты тролишь нахуй? У тебя на скрине сука примитив, который не имеет методов. Так, для восьми примитивов свои классы обертки, для обжектов внутренний метод.
Для автобоксинга в строку при кокатенации тип 1 + "123" нужен однообразный класс, который полимрфно решит, что и как.
1 + "123" = String.valueOf(1) + "123"
Также велика вероятность, что этот метод может во время рантайма меняться.
нихуя ты умный, сам догадался?
Низачем.
Или оно через контекст работает? Тогда для корректной работы с базой может работать только одна приложуха и только через хибернейт?
Пиздос, что за долбоеб решил туда значение захардкодить, вместо пустой строки.
А что не так?
Я тебе уже сказал. По id. Мол вот если null, то это новый обжект, иначе уже существующий.
>В инструкции ничего про это не написано
Нет ну если не написано... То в шарп только остаётся идти
>2834627
Я даже через прогу посомтрел че ей надо. Ей нужен пик. Но я же не могу каждый раз либу ручками добавлять. Как быть?м
>>Пустая строка и null два разных случая.
Пустую строку или нул легко отфильтровать, а так нужно парсить строку чтоб понять что эта хуита туда "null" закинула при нуловом аргументе.
Ну спасибо хоть не NPE, блядь
>>Ты ещё NaN в ноль преврати.
Так этот и есть аналог того что ParseInt(null) возвращал бы 0 или еще какое нибудь особое число.
игьз
Мурзилка.
Тз
bump
Где здесь неявность-то бля? Тебе явно логгируют null вместо "". Причём, если к тебе пришло "null" то это не null и не пустая строка.
А вот ввести NaN и в инты пиздец нужно, конечно. Как мы живём-то без этого. Только undefined не хватает.
>>Тебе явно логгируют null вместо
Мне явно засирается какая то константа в ответ и узнать какая это константа сегодня можно только заглянув в исходники.
String.of(null) и String.of("null") не должны жавать одинаковый результат.
>>Ну делай так
вот и я о том что теперь надо костыль писать и за долбоеба который в ждк насрал
Какой же ты... Ну где тебе надо костыль писать? Даже json парсеры хуину забили. У сюка, отняшил бы ворчуна
Причем это, между прочим, доказывается простым логическим выводом. Это даже не вопрос дизайна языка, это вопрос понимания математики.
Таким, что ты сам захотел это сделать, переведя всё что угодно, в том числе строку, в строку.
По той инфе что ты дал, можно однозначно сказать только то, что твой сервис не знает, где находится его БД, так как ты ему url к БД не отдал. Может в конфиге на КС его добавить забыли - хуй знат. Инфы мало дал.
Я понимаю, что нет бд. А какая инфа ещё нужна? Есть пэкедж services, в нем конфиг-сервер, еврика-сервер, и пэкедж config->dev->фича-сервис-проперти. В этих проперти прописаны пути к бд. Конфиг-сервер, еврика-сервер крутятся, локально. Пытаюсь поднять фича-сервис падение.
Спасибо... Люблю вас, няши.
В идее открываешь проект и задаешь в переменные окружения адрес и порт твоей базы. При изменении перезапускаешь приложуху в идее. Плюс появляется возможность дебага и запуска тестов
К слову, в свинге у Area есть метод для подсчета площади. То что здесь написано - хуйня.
Очевидные Яндекс, Тинькофф, Сбер, Озон, vk, Альфа. Кто ещё?
Где ЗП выше рынка, где ниже?
Кто больше других дрочит на собесах? Тинькофф, говорят, возомнил себя Яндексом и требует алгоритмы. Что по остальным?
Хочу сразу спланировать направление, в которое буду развиваться, чтобы через годик-два херки текли от моего резюме.
Ну и можете напилить своих прохладных про работу в этих компаниях.
Такого нету прямо щас, что-ли?
Сосачую реквест.
Потому что занятие дегенеративное и занимаются им дегенераты, которые ниасиливают ничего, кроме петухона.
Я чё, ебу? Может не по статусу барину и Королю Индустрии участвовать в каких-то холопских забавах. Вот вакансии у них на жабу, тысячи их: https://team.vk.company/search/?search=Java
Контора от алишерки и король? АХахахахах, ебать. Жетбрейнс больше подходит под это звание, но они свалили.
Я не говорил, что они короли, просто они могут себя такими считать. И не в плане королей джавы, а в плане крупнейшей и фактически единственной после начала гойды сосальной сети в пидорашке.
Все перечисленные тобою конторы, окромя вк, учувствовали в жпоинтах. Крупнейший банк, крупнейший поиск и тд и тп.
>фактически единственной
В мечтах разве что.
Вот даже по твоей хуйне, это сервисы от мейла и андроид. Ну вперед, че. Только это не вк, а говнецо от мейла.
А с phyton работают ?
С ххру импорт сделай
С герыча на метадон
Хуавей. Хедхантер.
Из крупных еще МТС вроде ничего. Х5 вроде не так плохи.
В озоне джавы нет.
Но после ухода жидбрейнса, оракла, райфа и дойчебанка единственным местом с большой компетенцией по жабе остался тинек.
1)Вызов метода webClient (асинхронный)
2)Вызов метода restTemplate из метода,который помечен @Async
Тинек дрочат алгоритмы и при этом делают неустойчивую парашу. Работать у таких лицемерных выродков это позор
Нет разницы
Пиздаболы ебаные,ведомые пидорасы,в новых версиях будет RestClient. Тот же самый темплейт без изменений,но с новым названием. Омномном зато не деприкейтед это другое омномном
В pdf ?
Качаешь парсер и все. А вообще есть sqlite
Сохраняй, как угодно. Какая разница? Лишь бы java serialization не использовать.
>json, xml
Jackson - твое решение. Создаешь ObjectMapper, настраиваешь если нужно, и сохраняешь/загружаешь свои обьекты хоть в строку хоть в файл, хоть куда.
Со свечкой не стоял, но предполагаю что эта кухня плотно прижилась в питоне благодаря Jupiter Notebook. Последний обнулил порог входа до уровня экселя.
А как аннотация работает? Я думал она готовое берет, а не сама реализует. Типа как с транзакциями: проще делегировать jta.
Хуярит прокси над методом и выносит в отдельный поток,для асинк потоков есть отдельный эксекьютор сервис сингл че то там эксекьютор сервис
Назвали пупуней
Сделать поле файнал епта,еще и класс можешь тоже финальным сделать чтобы от него унаследоваться никто не мог. Плюс если ты не сделаешь сеттеры то и менять будет нечем
М, точно. Ну это вряд ли тоже самое, что и у вебклиента. Тк в последнем верояяятно нет блокирующего кода, а значит натив треды не простаивают.
С лумом на это поебать будет, конечно.
Вот я 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 пока не знаю.
Как лучше поступить, пупуни?
Хм, судя по всему надо второй подход через какие-то temp таблички делать. Ммм, ну и хуита.
Знаем, иди нахуй.
Опиши человеческо-бизнесовым языком - что делаешь? Может на самом деле тебе нужно вообще не то, что ты описываешь?
У меня есть класс самой системы сборки, класс задачи сборки, класс всех задач сборки. И пихать лог через это все нет желани
Я сейчас думаю, что наверное и не буду это делать. Буду только ошибки логгировать, а их через исключения пробрасывать
Я не врубаюсь, что значит "пихать лог". Ты руками чтоли логируешь, прям в стрим файла лога? Если так, то не еби себе мозг и возьми уже slf4j. Откроешь по логгеру в каждом классе и отлоггируешь все что нужно без гомопропихонов.
>>41013
>Буду только ошибки логгировать
Плохая идея, потом сам об этом пожалеешь. Логируй все, что может представлять интерес. Если заботит перформанс, уводи часть логов в трейсы, за проверку isTraceEnabled/isDebugEnabled, и включай/выключай трейсы конфигом.
Если я опишу вы не будете мне помогать. Знаю я вас... Уже хеем вон обзывают. Давай так, я опишу, а ты точно хоть чем-то мне поможешь, м?
Ты же не он, да?
Ну в общем поле с числом - это шанс выпадения. Для формулы сумма всегда должна быть равна 100 или 1.
Иначе говоря, есть n предметов у каждого есть свой шанс выпадения и я не хочу допускать ситуации, как в той новости, когда насчитали 146%. Я могу со стороны ресурс сервера это гарантировать, но в одной книжке писали, мол если на уровне бд нет валидации - ваши данные хуйня, тк строятся на хрупких гарантиях консинстентости.
Реальные данные на пике и поле соответственно - percentage_wining.
Бояться быть покрытым хуями - в интернеты не выходить. Что ты теряешь, кроме собственного достоинства, которое разрабам вообще не положено?
>Иначе говоря, есть n предметов у каждого есть свой шанс выпадения и я не хочу допускать ситуации, как в той новости, когда насчитали 146%
Отлично, примерно это я и предположил.
А ты возьми и храни не проценты, а веса. А вероятность получай уже постфактум, путем деления веса на их общую сумму. И ничего валидировать не придется. Не?
>Просто боюсь, что у меня тут слишком специфичная репутация и из-за нее игнорить могут.
Бля, за окном ядерный рагнарек назревает, а ты волнуешься о таких мелочах. Не похуй ли - у нас где не рейдшадоулегендс, там гейшин импакт. Бухтеть еще о каких то слотах вшивых...
>Какая-то 1/3 непредставима в BigDecimal.
А по твоему numeric в БД - это другое, чтоли? И во что ты собрался десериализовывать эти вероятности при извлечении?
Никакого пресижена ты априори не потеряешь, храня целочисленные веса. А там уж чтобы приготовить омлет, яйца однажды придется разбить во что-то.
Да не будет ниче.
Угу, другое. Я использую там только сложение, а значит не теряю точность. Деление единственная операция, при которой неясен результат, поетому туда можно запихать mc.
Проще говоря, 1/3+1/3+1/3 != 1. А в бд я не могу запихать 0.3333... три раза таким образом, чтобы они не дали суммы равной в один. Т.е. при поствычислении можно запихать бесконечные дроби, а если пихать именно шанс, то дроби всегда конечны.
Да что ты говоришь. О чем еще мне расскажешь, о машинном эпсилоне?
Открой доку по numeric у своей БД (предположим что это постгрес). Затем открой джавадоку по BigDecimal у джавы. Сравни, найди различия. Открой для себя тот факт, что оба - ни что иное как arbitrary-precision numbers. Обрати внимание что максимальный пресижен что у numeric в постгресе, что у джавы имеет конфигурируемые и предельные лимиты, и mc можно "запихать", как ты выразился, обоим.
И не рассказывай больше сказки о том что "это другое".
Блин, я правда так плохо объясняю что ли~
Ммм, на данный момент у меня нет в формулах деления, а значит и потери точности. И изначальная гарантия, по тому, чтобы сумма шансов была равна 1 или 100 с делением будет вообще недостижима, максимум в какой-то области, мол 1±mc, а это слабая гарантия.
может кто то уже с этим ебся и что то подскажет?
rtp - real time protocol, типа голос, в этом случае
dtmf - Dual-Tone Multi-Frequency, передача циферок во время звонка, тут речь идет про rfc2833
jmf - java media framework, фреймворк для всей этой хуйни
я тоже друн, брат
Ну допустим.
И че, прям долей процентов у тебя тоже вообще никогда нет? Всегда целочисленное число от 0 до сотни? Че вообще ты с ними делаешь, с этими процентами?
И как ты выражаешь в процентах случай, когда у тебя три кейса с равной вероятностью выпадения (33.3333...%)? Че пишешь в numericи эти свои (не надо здесь о том что "в бд я не могу запихать 0.3333... три раза таким образом, чтобы они не дали суммы равной в один" - если в БД у тебя unconstrained numericи, это еще не означает что они там представлены как то по особенному)?
=====
Ну и ок, если тебе не нравятся веса (я могу понять чем они могут не нравиться, без бузы. Например, тем, что при добавлении/удалении этих весов вероятности гулять будут у всех кейсов), вот что я тебе скажу в ответ на этот вот кусок твоей постановки проблемы >>41131:
>Я могу со стороны ресурс сервера это гарантировать, но в одной книжке писали, мол если на уровне бд нет валидации - ваши данные хуйня, тк строятся на хрупких гарантиях консинстентости.
В этой же книжке по совести должны были написать, что консистентность консистентности - рознь, и она бывает вообще разная, в зависимости от постановки проблемы и требований к системе. В том числе - eventual. Где есть нормализация, случается и денормализация. Консистентность очень часто сознательно ломают во имя прочих плюшек. Микросервисная архитектура вся строится литералли на на идее о разбиении монолитной схемы на bounded contextы с потоками эвентов между ними. Поэтому скорее всего нет ничего зазорного в том, чтобы заниматься валидацией таких кейсов, как у тебя, со стороны сервера. Если ты понимаешь, что делаешь и знаешь свою СУБД.
не покатит, во-первых, это sip клиентпочему я сразу это не написал..., т. е. все протоуолы уже описаны и есть оборудование, которое по этим протоколам работает, а во-вторых, рест это tcp, соответственно, задержки
>И как ты выражаешь в процентах случай
Логично, что никак. Абсолютно не мои проблемы. Я дал точность, допустим 2 знака после запятой. Вот пиши "0.33", "0.33", "0.34". Естественно я могу дать и 38 знаков после запятой. По сути те, кто проектируют шансы должны скушать вот это вот ограничение, а сильная гарантия останется.
>должны были написать
Вообще там много разного написали - пик1. А по поводу нормализации и прочего - это не моя экспертная область, вон даже пишут: спросите админа.
В общем пофиг, я уже написал темп таблички через апи Work хибера. Будет какой никакой опыт.
>с делением будет вообще недостижима, максимум в какой-то области,
И кстати, вот это вот твое "недостижима" - вопрос очень относительный. Потому что весь прикол arbitrary precision numbers именно в том, что в отличие от классических плавающих точек с фиксированной длиной, ты сам определяешь путем presicion и scale величину того самого "плюс-минус". И эта область может быть запредельно микроскопической, в ущерб скорости вычислений. Поэтому давай избавляйся от этих своих стереотипах.
Ууу, а темп таблички бьют по перфомансу? По сути ж они будут использовать раз в никогда админами сайта.
Ну по сути я хочу гарантировать без плюс и минуса. На данный момент я могу это осуществить и вроде без потерь по перфомансу, но даа пришлось в jdbc залезть.
>Логично, что никак. Абсолютно не мои проблемы. Я дал точность, допустим 2 знака после запятой. Вот пиши "0.33", "0.33", "0.34". Естественно я могу дать и 38 знаков после запятой. По сути те, кто проектируют шансы должны скушать вот это вот ограничение, а сильная гарантия останется.
Ну вот же ты сам то же самое пишешь. Так с чего ты взял, что деление для тебя неприемлемо, если на самом деле ты также делишь с точностью до N знаков как и все остальное, а дальше просто округляешь?
>В общем пофиг, я уже написал темп таблички через апи Work хибера. Будет какой никакой опыт.
Дело твое. Чужие сексуальные фетиши - не предмет для дискуссий.
>Ну по сути я хочу гарантировать без плюс и минуса.
Так я битый час до тебя и пытаюсь донести, что у тебя те же плюс-минус, только неявные. И ничего ты по сути не добился. Вот те выдержка из постгрес-доков:
https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL
>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.
Правила округления будут на уровне ресурс сервера, а не бд. Т.е. данные не однозначны. Хотяя, можно и их запихать в бд, наверное.
>не предмет для дискуссий
В плане... Как же так
Если даже из-за правил округления бд 0.33333333 ушло в 0.34, то триггер проверит, а точно ли сумма будет равна 1. Если нет, то пошлет нахуй.
По сути с таким правилом неважно какие округления были до записи, главное, что записано все однозначно и консистентно. А значит при чтении не возникнет различных интерпретаций.
А вот кстати по поводу смешения процента из-за добавления, вообще это как фича, тк на данный момент я не придумал как мне сделать PUT.
Да нихрена он не проверит! Если у тебя scale=1, твой триггер даже не увидит эту четверку в конце. А если scale>1, ты эту четверку на конце априори не получишь, и триггер будет просто вхолостую заниматься хуйней.
Блин, ну вот увидим. Ты главное подожди - вот допишу все ddl. Я ведь помню мне тут не верили, что хибер не будет мне генерить декартовых произведений.
И пасиба, к слову, няша.
Как понять, почему он мне не создает базу по конфигу, а создает рандомную херню хуйми пойми где? Консоль h2 вообще ищет базу в корне системы (C:\users\..).
Жавакор потести. Вообще у меня есть либа с тестами, но там JMH( https://github.com/openjdk/jmh ).
спасибо
Так main уже есть в каком то классе
Обращайся.
А ты откуда это взял вообще? Комментарии вон даже имеются.
В конфиге я прошу создать базу в памяти (mem), но Спринг забивает на этот конфиг, как и на type, где я прошу использовать h2 pool.
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#data.sql.datasource.connection-pool
spring.datasource.type=org.h2.jdbc.JdbcDataSource
spring.datasource.url=jdbc:h2:mem:bugtracker
Спрингу похуй и он стартует своим дефолтным Hikari. Доходит ли он до моей инструкции или нет?
КАк этот Спринг дебажить вообще, не понимаю.
>Спрингу похуй и он стартует своим дефолтным Hikari. Доходит ли он до моей инструкции или нет?
В спринге нет инструкций. В спринге - конфигурация (описываемая аннотациями и записями в конфиге).
>КАк этот Спринг дебажить вообще, не понимаю.
Я бы в код стартеров полез. Скорее всего, у тебя либо прямыми, либо транзитивными зависимостями вытащился какой нибудь конфиг с дефолтным кондишенал бином на хикари с рандомной H2 базой. Надо найти эту декларацию и прибить.
Да, вполне возможно. Спасибо за подсказку, друг!
Рахобрался, спасибо. У вас все очень просто устроено, кайф
>for each в 2033
Поток
.создать(ФабрикаМочи::моча)
.фильтр(Тепленькая.какПредикат())
.лимит(Литр.из(2))
.собрать(вВедро(Ведро::новое))
.плеснуть(форичОпущенец.лицо())
Ты пидор.
Фор быстрее стримов и во многих случаях читабельнее.
У меня задача не создать новые обжекты, а их имя запихать в контекст. Это делается так или иначе через foreach. Где ты его возьмешь: в стриме, в коллекции, через iterable - сути никак не меняет.
Мне бы посмотреть как тут транзакции работают, а вот на такие мелочи абсолютно плевать.
Дибильный
Почему неумелого-то...
На строке 35 мы отправляем в сеттер пожеванный результат из геттера, я правильно понимаю?
Строка 40 - final tempTable ()нет ничего более постоянного, чем временное)
Сравни до после. Цель была в пик 3.
Файнал, чтобы точно никто не поменял значение. Но так-то jvm ее и так считает final.
Пасибки
Можно же рефлекшеном расприватить, не? Другое дело, что если они запривачены, значит и никаких гарантий нет. Мб он делает что-то не так, раз они понадобились...
Ну так один хуй не оптимизировали до скорости обычного вызова. Всё ещё раз в 5 медленнее.
Вот так можно, но мне впадлу тут мараться с этой защитой. Думаю у тебя ее нет.
Ну тк да. Потом каждый вызов метода в приватном классе будешь оборачивать рефлекшеном.
1280x1024, 2:03
В общем потестил наконец. Вот говорил же, что все ок будет. Так что.
Угу. Ну короче поискал за тебя. https://blogs.oracle.com/javamagazine/post/java-reflection-performance
Парируй, геюш
Ты бы хотел сначала понюхать мои яйца или ты собираешься сразу начать их вылизывать?
Ну почему вы все такие буки
там типа нписали сервер который возвращает самуб популярнубю песнюб года а он тупо ошибается все время в исполнителе или альбоме
Удар по репутации - это лог4. Тут же похуй+похуй.
Вот этот прав.
Не, нихуя. Java 17 это бета-версия Java 21.
Так вальхаллы ещё очень долго не предвидится, её нигде, кроме маняфантазий нет. Да и в целом она не так нужна, как свитчи и лум.
Как раз обычные разрабы лум и не заметят. Он в кишках либ будет.
Свитчи это крайне редкий кейс. Это все ещё не лямбды. Или дженерики с jmm.
А вот то, что вальхалла не нужна вообще пиздец. Это переработка объектной модели жабы, что огромный шаг вперёд.
Один из лучших докладов так-то. Не гунди, пупунь.
>Как раз обычные разрабы лум и не заметят. Он в кишках либ будет.
А это и не нужно, в этом и задача лума.
Надеюсь тебя там обоссут.
"Скоро" это не учится. Придётся тебе отменить собес и провести год-другой в чтении спецификаций и исходников компиляторов.
Эх, вот бы год другой в объятиях кунчега провести, а не вот это вот все
String иммутабельный. А почему в иммутабельном объекте не может быть не final полей? Я не знаю как ответить на твой вопрос, потому что я не знаю какие там поля не final, но не удивляюсь тому, что они есть
Да и вообще. Я не прошу сейчас собес устраивать. Я вполне четкий вопрос задал вроде
>А почему в иммутабельном объекте не может быть не final полей?
Это один из критериев. Иначе это де факто неизменяемый.
>Я вполне четкий вопрос задал вроде
Ну вообще у тебя пробелы в терминологии. Еще как видишь, ты не знаешь внутрянку жавакор.
>но не удивляюсь тому, что они есть
Читай effective java какой-нибудь. Лазай по сорцам кора. Потом можешь по сорцам jvm. Но правда хз, зачем последнее нужно, если только не в оракл идти.
> Я вполне четкий вопрос задал вроде
Нет. В ответ на твою размытую постановку вопроса кроме JLS советовать вообще нечего.
>>А почему в иммутабельном объекте не может быть не final полей?
>Это один из критериев. Иначе это де факто неизменяемый.
Так то ты тоже не прав. Стринги в джаве иммутабельны несмотря на некоторые мутабельные нутря, и джавадок стринги, равно как и прочие официальные источники, это постулируют многократно.
Определение иммутабельности шире, нежели чем тупо "класс у которого все аттрибуты - final". Иммутабельный обьект - это обьект с неизменяемым состоянием, каким образом достугнута неизменяемость состояния - вторичный вопрос. В стринге мутабельные поля к состоянию стринги не имеют никакого отношения - это просто штуки для всяких разных оптимизаций.
Няша ты моя, а где я заявлял что это к стрингам относится? Я именно, что и спросил, почему они иммутабельные несмотря на это. Вообще в 17 этот момент хорошо так объяснили.
Ну хуй знат, ты привел пикрилы и формулировку выкатил так, будто именно это и утверждал. Сам виноват.
Блять, без малого с десяток лет уже нытье про эти сраные свитчи слышу, и вангую что когда их выкатят, все равно останется бухтежь аля "не так сделали".
Сука, вот че эти люди со своими синтаксическими амбициями в хаскель не перекатываются. Там весь спектр паттерн матчинг фич есть, и при этом максимально лаконичен. Такими темпами ща бы жили в мире, где ФП - мейнстрим и учится со школ.
Все так. 95% людей заслуживают кровавый энтерпрайз в полной мере.
Не помню уже. У меня голова болит очень... Можешь погладить немножко...?
Нет.
>Создаётся впечатление что это какая-то лютая имба
Че такого имбового?
>тсюда вопрос почему асинхронщина не стала мейнстримом в тырпрайзе?
Пришел лум, на этом усе.
у не реактивного подхода 0 минусов, они так говорят из-за job security
> что имбового
Минус простои,использование всех доступных ресурсов приложения максимально эффективно
Плюс я имел ввиду почему мы достаем из базы листы объектов,а не флакс потоки? Почему мы отдаем с контроллера пачку объектов а не поток объектов. Так-то джава же язык на котором пишут системы, которые в 90% работают под серьёзной нагрузкой,а тут парадигма предлагающая эту нагрузку распараллелить
Lock мощнее же. Или у тебя сильные просадки по перфомансу?
>>45586
Ну это можно достигнуть и без реактивщины. Больше скажу, с ней этого не достигнуть, ибо она лишняя прослойка.
>>45589
Вообще без понятия в чем разница между листом объектов и флакс потоками. Типа на последние ты можешь подписаться? Мол воот как достанете, пж верните в контроллер.
Ну обычный подход эту нагрузку ровно так же паралелит. Там проблема в другом так-то.
>Lock мощнее же. Или у тебя сильные просадки по перфомансу?
Чем мощнее-то? Дело не в просадках, а в подходе. Зачем использовать более тормозящий инструмент, если можно использовать менее тормозящий? Алсо, синхронайзед покрасивше, чем лок с траем, намного.
Да сук, где он тормозит-то... У синхронайзд больше перфоманс из-за оптимизаций со стороны жвм. Вообще мб в будущих поставках таки и эти блоки можно будет использовать в виртуальных потоках.
>Чем мощнее-то?
Пик. Ну еще можно гибче разграничивать захват и отпуск монитора. В разных методах, например. Правда это плохая практика, вероятно.
>>45616
Каво? Он как ждал ответа от бд, так и будет ждать. Нихуя не изменилось. Единственный выигрыш тут в том, что одновременно мы можем обработать большее количество пользователей. Типа платформенные потоки не будут заняты ожиданием ответа от бд. На этом йобапреимущества ректива кончаются.
>Да сук, где он тормозит-то...
В пизде. Заставил ты меня погонять бенчмарки. Синхронайзед быстрее в 4,25 раз, чем реентрант лок. На моём ПК оверхед на синхронизацию у synchronized был 0,05 нс, а у reentrantlock — 0,23 нс.
Benchmark Mode Cnt Score Error Units
LockTest.testReentrantLock thrpt 6 252364866,165 ? 1460780,585 ops/s
LockTest.testSynchronized thrpt 6 447342752,642 ? 6324130,282 ops/s
LockTest.testWithoutLock thrpt 6 589805446,040 ? 5718641,088 ops/s
Однако есть небольшой подводный камень. Такие результаты достигаются только при использовании биаседлока, который вот-вот к хуям выпилят соевые дегенераты, гадящие в джаву изнутри и который включается отдельным аргументом запуска джавы. Без него синхронайзед будет медленнее где-то на 25%.
> Заставил ты меня погонять бенчмарки.
Ужс какой. Мне теперь натурой платить тебе? Кста, пакаж бенчи. Интересно же.
Хуйню насчитал, забыл сделать вывод в нс/оп и проебался с десятками. Оверхед на сихнронизацию для реентрантлока и сихнронайзеда 2,261 нс и 0,547 нс соответственно, соотношение то же.
LockTest.testReentrantLock avgt 3 3,948 ? 0,538 ns/op
LockTest.testSynchronized avgt 3 2,234 ? 0,171 ns/op
LockTest.testWithoutLock avgt 3 1,687 ? 0,062 ns/op
>>45681
Православно спизжены от сюда: https://github.com/rbygrave/reentrant-vs-synchronized . Но я изменил количество форков с 2 на 1, чтобы быстрее было и добавил над классом вот это:
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
А борисов ещё делает отсылки на пыню и работает в израиле ааааааааааааааа какая атомная соя боже бляяяяяяя
Fucking Java
М, насколько же у меня слабый пк палучаеца. На второй пикче чуточку переписал бенч. Можешь запустить? https://pastebin.com/h62qZU5f
Всё точно также. Нечестность реентрантлока и не должна была изменить ситуацию, один поток тестируется жеж (в реальных ситуациях так всегда и происходит, очень редко два потока одновременно лезут в один ресурс, задача синхронизации предотвратить ебучие плавающие баги, когда случайно влезло два потока и все данные превратились в кашу).
Benchmark Mode Cnt Score Error Units
LockTest.testReentrantLock avgt 3 4,412 ? 0,227 ns/op
LockTest.testSynchronized avgt 3 2,652 ? 0,225 ns/op
LockTest.testWithoutLock avgt 3 2,018 ? 0,533 ns/op
Он по дефолту нечестный. Суть в том, чтобы тестировался не ебучий инкремент, а псевдорандом.
Вообще странно, что у тебя синхронайзед крайне близко к нонлоку. Такое чувство, что там нет переключения контекста даже. Ебни потоков хотя б в два раза больше чем у тебя есть реальных.
Да и есть же разница. Не оч понимаю, как ты считаешь, конечно.
>Вообще странно, что у тебя синхронайзед крайне близко к нонлоку. Такое чувство, что там нет переключения контекста даже. Ебни потоков хотя б в два раза больше чем у тебя есть реальных.
А ты это читал?
>Однако есть небольшой подводный камень. Такие результаты достигаются только при использовании биаседлока, который вот-вот к хуям выпилят соевые дегенераты, гадящие в джаву изнутри и который включается отдельным аргументом запуска джавы. Без него синхронайзед будет медленнее где-то на 25%.
>Суть в том, чтобы тестировался не ебучий инкремент, а псевдорандом
А какая разница? Хоть рендер изображения туда сунь, всё точно также будет. Тестируется же оверхед.
Бля, какие же в jmh ахуенные сорцы. Только я так и не нашел, как именно реализована аннотация Threads. Ну да неважно...
Правильно, не надо инстанциировать чёрные дыры, а то ещё землю засосёт.
>Создаётся впечатление что это какая-то лютая имба которой почему то никто не пользуется
Нихуя, это только на первый взгляд имба. Асинхронщина в боевом проекте - это геморрой с кучей подводных. У нее недостатков не меньше чем достоинств: в первую очередь - геморрой в поддержке, нетрадиционные ценности в построении архитектуры и в разы больше способов ебнуть себе в ногу.
Адекватные люди асинхронщину берут в проект только тогда, когда это реально нужно и других опций вообще нет. А реально нужна она единицам (тем, у кого миллион запросов в секунду и классические нативные треды не вывозят). А с виртуальными тредами спектр применения стал еще уже.
>Больше скажу, с ней этого не достигнуть, ибо она лишняя прослойка.
Какой то дебильный аргумент. Ну лишняя прослойка - и что?
Весь цимес здесь в том, чтобы обрабатывать миллионы запросов в секунду и при этом не плодить для этого миллион нативных тредов. Все. Реактивные треды - один из способов решения этой задачи. Так то и нативные, и виртуальные треды - прослойка над хардварными тредами процессора один хуй, и че, они тоже своей задачи по твоему не решают?
>Вообще без понятия в чем разница между листом объектов и флакс потоками
Backpressure.
>>45588
>Лум это кал с запретом на синхронайзеды и тяжёлый код
С чего бы это синхронайзды в луме запрещены? Везде вроде пишут лишь о том, что синхронайзды прибивают виртуальный тред к треду-носителю, и то не всегда. Такого чтоб прям "запрещены" нет нигде.
И вообще, претензия у тебя соевая какая то. Звучишь литералли как соя со свичами (>>44529). "Ой, все, мне джава монитор на зеленых потоках не так как я ожидаю захватывает. Дилбрекер, дропаем фичу пацаны".
>Ну лишняя прослойка - и что?
1. Она никак не может быть быстрее того, прослойкой над чем является. В данном случае Thread API, т.е. она точно не будет быстрее ванильной жабки.
2. Прослойка тоже кушает ресурсы, а значит и сравнится она не сможет.
По моему это что-то из разряда очевидного, не?
>Так то и нативные, и виртуальные треды
Вообще я бы другую аналогию использовал. Аппаратные оптимизации и кодовые. Ты ни при каких обстоятельствах не сможешь сравниться по перфомансу с аппаратными оптимизациями. SIMD, например.
>Она никак не может быть быстрее того, прослойкой над чем является. В данном случае Thread API, т.е. она точно не будет быстрее ванильной жабки.
Вот по этой цитатке явно просматривается что ты даже сути постановки проблемы не выкупаешь. Причем не выкупил ты проблематику даже после предыдущего коммента:
>Весь цимес здесь в том, чтобы обрабатывать миллионы запросов в секунду и при этом не плодить для этого миллион нативных тредов
При чем тут "быстрее"? Проблема здесь вообще не в быстроте, а в том, как жыть нахуй. Классическим тредпулом-обработчиком-запросов-с-реста в 10-20 тредов миллион запросов в секунду ты ни в жизнь не обработаешь, не превратив код в колбэчную нежизнеспособную лапшу, пожирающую все мыслимые бюджеты. А тред-пул из миллиона тредов тебе никто создать не даст.
Реактивщина решают эту проблему через замену колбэков на стримы. Async-await и корутины - через покраску функций. Виртуальные треды лума - через отвязку джавовых тредов от нативных. И во всех случаях бутылочным горлышком будет твой процессор и его ядра, во всех трех случаях будут свои накладные расходы на абстракции, и два вот этих вот твоих пункта из разряда очевидного - тупо демагогия, которая вообще не в тему.
Вон же писал ровно тоже самое.
>>45618
> что одновременно мы можем обработать большее количество пользователей. Типа платформенные потоки не будут заняты ожиданием ответа от бд. На этом йобапреимущества ректива кончаются.
Вообще не помню, почему тут про перфоманс что-то пошло. Ты же мой тезис просто перестал считать важным. Похуй в общем-то, мне б ебаный вдс настроить...
>йобапреимущества
Ебать, ты конечно респектабельный обесцениватель, мое почтение. Если твоими мерилами вещи оценивать, непонятно зачем вообще все эти лумы-хуюмы - сиди знай ебошь гуглы на голом нетти.
>Вообще не помню, почему тут про перфоманс что-то пошло
Тебя надо спросить зачем ты "быстроту" приплел. Контекст был отсюда:
> что имбового
> Минус простои,использование всех доступных ресурсов приложения максимально эффективно
>Ну это можно достигнуть и без реактивщины. Больше скажу, с ней этого не достигнуть, ибо она лишняя прослойка.
Ни слова про быстроту. И на самом деле реактивщина и есть про минус-простои и альтернативное распределение ресурсов. И лум - про то же.
>сиди знай ебошь гуглы на голом нетти.
Ну да, и в чем я не прав? Еще тесты нахуй не нужны. Нужно coq-ом и им подобным инструментами доказывать.
>Тебя надо спросить зачем
Не, меня не надо спрашивать. Малчи.
Ни. Я в конфегах пару букв напутал. Бывааает.
В первый можно закинуть все объекты SomeClass и его наследников? А <? extends SomeClass> для чего нужен если с него вроде как можно только читать? Он все время пустой должен быть или что?
Consumer/Producer же.
Вон в доках примеры есть. Хотя эти вайлдкарды с нулами ахуенно работают.
Нахуя она тебе? Собери сам, че ты как этот?
Блин няши, а как в томкате логи включить, чтобы видно было какие он профили для спринга взял? Вроде в каталина.пропертис все прописал, но нихуя... чувствую блин, что деплоится все без профилей...
Чел, не мысли категорией - "что туда можно закинуть", это путь в никуда. Мысли ссылками и их совместимостями.
Вот есть у тебя к примеру переменная 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.
Расскажешь про рекурсивные дженерики?
То есть ? extends A нужен исключительно для объявления функции как в твоем примере?
Да в целом все дженерики нужны в первую очередь для сигнатур функций/классов. Это их цель существования - дать возможность писать обобщенный код.
Лума не существует
class A {}
class B extends A {}
add(List<? super A> list, A a) { list.add(a); }
read(List<? extends A> list) { for(Shape s : list) {sout(s)}; }
Вот тебе максимально примитивная хня
Потому что в этом нет смысла. Использовать дженерики в сигнатуре имеет смысл, когда есть неопределенность в аргцументах или возвращаемом результате. А List.of максимально конкретен - принимая vararg E он всегда возвращает List<E> и ничто иное.
Иммутабельный лист.
Ахуеть, спасибо за адаптацию. А теперь давай Stream/Thread Lock/Block адаптируй.
Хотя вон здесь анмодифейбл. Интересно, в чем тонкая разница между иммутейбл, если внизу ImmutableCollection.
>Stream
поток
>Thread
поток
>List
список
>Immutable
неизменяемый
>Stream
стрим
>Thread
поток
>Lock
лок
>Block
блок
Такая, что ты ограничиваешь инструмент. Мол пук среньк, он не для этого создан. В котлине заменили на in/out, например. В жабе же есть ряд методов с Class<extends>.
Нормальные объяснения есть?
Нет! Я не шизек! Хватет уже так меня называть
Есть такое. Исправишь?
>>электрическаяНить()
>>пружинный паутинный флюс
>>многонитевое приложение
ява которую мы заслужили
Блять, я уже жалею что ссылку на ту статью вбросил. Один рандомный чел заскучал и упоролся - сотня двачеров-ебланов щас из его поделия сделают религию нахуй...
>Нормальные объяснения есть?
>А пачиму list.of не возвращает extends?
Потому что если бы List.of имел сигнатуру вида...
static <E> List<? extends E> of(E... elements)
...то возвращаемое значение этого метода ты не смог бы использовать ни в одном месте, где ожидается обычный List<E>. Что резко множит полиморфизм на ноль и делает метод of тупо бесполезным. Можешь сам это проверить - напиши где нить в уголке своего проекта свой listOf и попробуй идеей сделать самену List.of на свой метод. Быстро заебешься.
Ору блять, в голосину.
Думал систему наебал, малой? Попробуй ка присвоить эту вот свою конструкцию magick(of(1,2,3)) к переменной типа List<Integer>.
Ок, это была хорошая ответка с твоей стороны. Ловко ты наебал инференс дженериков - мне аж спеку пришлось полистать, чтобы примерно понять - как.
Тем не менее - тебе просто повезло. Элементарно вынеси ты, например, тот же of(1, 2, 3) в переменную (необязательно даже List<? extends Integer> - тупо в var), и все. Твой magick тебе уже не поможет.
Иди нахуй, там все равно нихуя интересного пока что нет. Первую неделю щас там только шарпеи будут торговать своим ебалом, напрашиваясь под струю мочи, да пориджи будут проходить свои пять стадий от гнева до принятия от нового свитча.
Проходили уже, знаем. Каждый тред - одно и то же.
Нет, ну если обернуть боксом...
>хорошая ответка с твоей стороны
Ммм, я тут скоро свою фигню закончу делать, можешь посмотреть потом, няш? :3
Ну вот ты уже две обертки придумал чтобы со своей версией of'а работать, и никакого профита относительно обычного List of не получил. Нахуя?
Какой же ты бука....
Вопрос изначально был не в этом же. Признай уже что я молодец, хватит пупунить(
Тут юзкейс как с optional: пользователь явно видит, что лист иммутабельный и если ему надо он сам снимает ограничения.
По твоему List<? extends T> мне как пользователю должен сообщить, что этот лист иммутабельный? Ты серьезно щас?
Это - полная чушь и шиза. В частности - это чушь ровно потому, что у тебя есть лазейки для обхода этого тайпчека. Или что - после прохождения сквозь твои обертки лист внезапно преобразится в мутабельный?
Я бы мог сказать что это чушь и в общем случае - потому, что вайлдкарты и границы вообще не про мутабельность, а про вариантность (или что, по твоему лямбда типа Predicate<T> мутабельна, в то время как Predicate<? extends T> - нет?). Но ты же упоролся веществами, и начнешь щас в ответ заливать мне несвязную ахинею про тьюринг полноту дженериков. Короче когда закончишь делать свою фигню, я ее чекну лишь из научного интереса, чтобы понять, какие вещества ты употребляешь.
ё
Ну нету в жабке интерфейса IReadOnlyList. Живём как можем.
Пасиба, вот в новом тредике отпишу. Я если что автор вложенных дто.
Причём здесь отсутствие этого интерфейса, ебанько? Речь идёт про то, что дженерики не про мутабельность.
А теперь давай мне хоть одно моё сообщение, где я говорил, что оно гарантирует, а не подсказывает.
Даже интерфейс IReadOnlyList этого гарантировать не может. Хватит душнить, я устал.
Как будто слова какого-то хера из документописцев оракла определяют значение языковых конструкций джавы. extends/super это про наследование, всё. Всё остальное это лишь возможные следствия этого.
Автор конкретно этой секции вроде как Gilad Bracha.
Ммм, математика про аксиомы - остальное следствия. Что это меняет, няш?
Я правда нинаю какой тезис уже отстаиваю, можешь напомнить заодно)
Спасибо за подробный и аргументированный ответ!
проиграл с blackhole
Из всех синхронизаторов, локи, наверное самое частоиспользуемое. Т.е. обычно никто не разбирается, локу налепил, serialized получил и намана.
В плане... Я там тесты вложенные делал и вообще старался. А еще в клиенте пара вложенных дто осталась.
А RequestMapping учитывает то, что выше неё? Знаешь, я вообще хотел. Ну типа там на уровне пакета "api/" сделать ну и вложить ".../public/..." в ряд классов.
Не ну если тебе так интересно, то когда я школьником был, не было курсов по шарпу, а ещё на олимпиаде был выбор из жабы cpp и петухона.
Воть и знаю неплохо жабку и плюсы немного. А ещё мило, что меня из треда не гонят)
Тихо пидорас
Это копия, сохраненная 31 октября 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.