Вы видите копию треда, сохраненную 23 мая 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вики по вкатыванию в джаву: https://github.com/java2ch/java-thread/wiki
Предыдущий: >>2614255 (OP)
Шарп во всем лучше джавы
ASP.NET CORE во всем лучше спринга
Тогда в чем смысл существования джава стека?
Пусть черти ебут в жопу того, кто додумался сделать невозможным создание таблицы под названием "user", часа полтора сейчас голову грел хули не работает @Entity public class User, пока не выяснил. Ебал этого гандона все просто.
есть же аннотации которые изменяют название хранимой таблицы (даже я вкатун по второму разу это знаю
Можешь ещё повыёбываться не невозможность создать таблицу select. ORM таким как ты полностью атрофировало мозг, так что лучше сразу бери монгу и перекатывайся в JS.
spring.datasource.url=jdbc:postgresql://localhost:5432/
Где мне на компе теперь искать эту бд?
в конфиге установленного постгреса вроде есть точный адрес к самой базе
А тут других и не бывает!
распиарено
Как это реализовать в spring jpa? Как вообще такие связи называются? Сколько смотрю примеров many to many, везде используются разные классы с двух сторон связи.
Тебе нужно SQL освоить. Там какой-то тип связи есть (Self Join вроде), который ссылается на ту же самую таблицу в качестве форейн кий использует айдишник из этой же таблицы, типа отношение владелец/хозяин.
на ЖОПЕ это наверняка реализуемо. Погугли вначале сикуль, потом поймешь что тебе нужно гуглить в жопе.
жопа наверняка через n+1 сделает стековерфлоу. Так во всем - что-то сложнее примитивного круда - и жопа сосёт
на диске ц поищи
да ну не, вряд ли, self join это база сикуля, простецкая база, кажетсо логичным что в жопе это реализовано из коробки.
в хибернейте union не реализован когда я смотрел
https://www.viralpatel.net/hibernate-self-join-annotations-one-to-many-mapping/
нашел, тут конечно не жопа, но хибернейт, но суть та же
читай это.
Нахуя петушарп в шапке?
Репорт.
сливай бесплатно на треккер, платить за это я не буду.
я не верю что это работает. Программа какая то у вас там ебанутая, с такой даже в стажеры не возьмут сейчас.
Я всё это почти прошёл по книжкам 2 года назад, потом забил на понимании того что в джуны меня не возьмут. Сейчас вот по новой осваиваю, но уже серьезно взялся.
Если у тебя возникают такие ситуации, ты выбрал не тот язык.
Джава специально проектируется для проектов, где надёжность важнее производительности.
есть ли в Идее какие-нибудь плагины навороченные с искуственным интеллектом как вижуал студио чтоб тыкал Tab и все само писалось?
Я тут на досуге почитал C# немного и попробовал студию, там буквально тыкаешь один символ, затем таб, и хуяк, у тебя уже полноценный контроллер со всеми наворотами написался.
Автодополнение там прям охуенное, начинаешь писать в стиле
МояЗалупа залупа1 = на этом этапе тыкаешь таб и он сам дописывает оставшееся. Но это и в Идее есть. Я про более серьезное
Вижуал студио прям охуенно работает, иногда предлагает целые строки кода ДО того как ты что либо тыкнул в начале. Я сейчас не про шлаблоны, а про чтение вышеизложенного кода и предложение по контексту.
Есть ли такие плагины в идее?
ебать, охуенно.
1. А какой из них лучше?
2. И еще там вроде какие-то триалы. Это влияет на то что через какое-то время мне залупу на воротник повесят и предложат оплатить?
Студия вроде как бесплатно все предлагает из коробки даже в бесплатной версии.
Или я могу просто установить плагин и все, сидеть пердеть на триал версии?
Проблема в том, что я в мухосрани живу, в москву перекатываться ссыкотно без опыта в айти.
Да и лет мне много уже, технического образования нет
я вот выше Tabnine попробовал, вроде охуенно, но там какая-то триал версия.
Платить жмотно.
Странно, на сайте Tabnine ниче не сказано по количеству запросов.
Там вроде только продвинутая версия платная
Как и ты идёшь в загон гитоёбов.
Вы их прям часто используете? Или просто угораете от того, что ИДЕ умеет такое? Я чет даже теоретически не могу себе представить какой то весомый профит от них, достойный того, чтобы садиться под ВПН и нести кому то за это деньги. Интересно послушать как у других с этим.
Я чет смотрю на это вот все безобразие, и даже если отбросить мое патологическое недоверие к нейронкам: набора текста в моей работе по прикидкам несоразмерно меньше, чем изучения спек, возни с дебаггером и профайлером, чтения логов, вдупления того, что вообще хочет от моего кода окружающая реальность. Идейка впринципе уже неплохо справляется с джавовым кодом, я чисто по Амдалу если бы че и оптимизировал в своей рутине, то не набор кодотекста в идейке. Мне кажется, я бы больше времени потратил на чтение, сверку и причесывание того, что эта ботва мне нагенерит, нежели чем если бы написал все сам.
не ебу, я ж не додик чтобы свой код бесплатно отдавать корпорациям которые будут следить через эти плагины
>Вижуал студио прям охуенно работает, иногда предлагает целые строки кода ДО того как ты что либо тыкнул в начале
там похоже не только искусственный интеллект но и чтение мыслей через излучение монитора.
>Мне кажется, я бы больше времени потратил на чтение, сверку и причесывание того, что эта ботва мне нагенерит, нежели чем если бы написал все сам.
совершенно верно, идея генерить код нейросетками для того чтобы его править - мертворожденная. был очень интересный проект еще лет 15 назад по генерации микросхем при помощи генетических алгоритмов. там по итогу генерировался такой пиздец, в котором почти нереально было разобраться, потому что баги системы использовались наравне с декларированными возможностями, например помехи и наводки для передачи информации, индукционный ток от группы элементов на плате и прочая магия. при этом все работало, но стоило СДВИНУТЬ (не переключить контакты а просто физически подвинуть) один элемент на плате и все переставало работать. естесственно, элементная схема, которая при этом получалась, была вообще нерабочая. но само изделие, как черный ящик, работало.
с кодом я думаю так же будет - в итоге все придет к генерации таких вот черных ящиков рожающих ожидаемый функционал и в котором разобраться будет человеку в принципе невозможно.
<Ctrl> + <`>
Сука, сингулярнлсть через нейронки блять. Более унизительной судьбы для человечества сложно представить.
Я.
>"Элегантные Объекты - Java Edition" имеет перевод на русский язык. Однако, если без приколов, не зная парашный язык можешь смело идти нахуй, потому что никто твои классы с названиями ProveryalshikArgumentov читать не будет.
А если ПроверяльщикАргументов? Ява ж полностью отъюникожена.
Сэр, я вижу перед собой синьора.
>>Почему в джаве не дадут возможность самому удалять объекты?
Средний Шипилев умнее среднего Олега и ему виднее когда объекты удалять.
>>Зачем мне обязательно ждать стоп зе ворлд
Стоп зе ворлд возникает если у тебя загружено больше 99% памяти. В остальных случаях и так норм чистится через поколения.
>>в жабе была такая возможность
Есть десятки всяких гц, вплоть до ручного запуска очистки памяти по таймеру (когда торги закрыты).
com.fasterxml.jackson.core.JsonParseException: Unexpected character ('-' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value.
Поставил такие конфги какие в тырнете нашел, а оно всё равно падает с этой же ошибкой.
Торг, как третья фаза на пути к Принятию.
ДТОхи нет, это мне из Mailgun-а прилетает их тестовый
"fully parsed message as an HTTP POST."
Я до приложения смог это дело довести только принимая @RequestBody как String.
Если отлогировать до того как мапить то получается что-то такое
https://pastebin.com/cQ7gKtzY
>Я до приложения смог это дело довести только принимая @RequestBody как String.
Ну, обжект маппер такое парсить не умеет, он больше - по джсонам.
Честно говоря, я вообще хз чем ее парсить. Попробуй вот так: https://medium.com/@basakabhijoy/parsing-multipart-mixed-response-in-spring-webclient-81b15d2dc4cd - там описано решение с вебфлаксом, но по логике должно сработать и с обычными контроллерами.
Ну сейчас буду посмотреть, спасибо и на этом.
мне в мыло спамят, при том что я не открываю резюме. Видимо из старого линкедина или из базы херочек
никак ты че ебнутый
@InjectMocks
Там прям в джавадоке копипастный пример написан. Про бин нихуя не понял, но в примере всё локально создается, контекст не закараптит.
Если нужны разные бины для тестов и рантайма, смотри @Profile и @Conditional (чего-то одного достаточно, не надо сразу оба юзать).
Еще есть кенты (ну я и че), у которых @Service и @Component на проекте забанены линтером, контекст создается при помощи @Configuration и @Import. Так вот у таких кентов конфиг контекста лежит там же рядом с тестами, можно только то, что нужно тянуть.
@Configuration
class SomeFuckingBullshitTestConfiguration {
@Bean
public SomeFuckingBullshit someFuckingBullshit() {... mock ...}
}
@Import({
SomeFuckingBullshitTestConfiguration.class,
})
public class UsesBullshitTest {...}
А в продуктовом коде вот так:
@Configuration
class SomeFuckingBullshitProductionConfiguration {
@Bean
public SomeFuckingBullshit someFuckingBullshit() {... prod ...}
}
@Import({
SomeFuckingBullshitProductionConfiguration.class,
})
public class UsesBullshitController{...}
Там прям в джавадоке копипастный пример написан. Про бин нихуя не понял, но в примере всё локально создается, контекст не закараптит.
Если нужны разные бины для тестов и рантайма, смотри @Profile и @Conditional (чего-то одного достаточно, не надо сразу оба юзать).
Еще есть кенты (ну я и че), у которых @Service и @Component на проекте забанены линтером, контекст создается при помощи @Configuration и @Import. Так вот у таких кентов конфиг контекста лежит там же рядом с тестами, можно только то, что нужно тянуть.
@Configuration
class SomeFuckingBullshitTestConfiguration {
@Bean
public SomeFuckingBullshit someFuckingBullshit() {... mock ...}
}
@Import({
SomeFuckingBullshitTestConfiguration.class,
})
public class UsesBullshitTest {...}
А в продуктовом коде вот так:
@Configuration
class SomeFuckingBullshitProductionConfiguration {
@Bean
public SomeFuckingBullshit someFuckingBullshit() {... prod ...}
}
@Import({
SomeFuckingBullshitProductionConfiguration.class,
})
public class UsesBullshitController{...}
Это норма что большинство вкатунов даже не отправляют резюме, тупо ждут что им перезвонят... ?
Скорее всего он подумает, что это кидалово, и не ответ. Сам таким был
Скорее всего он подумает, что это кидалово, и не ответ. Сам таким был
Как им перезвонят? Не понял
В примере просто рест темплейт используется. А у меня есть сервис, в который инжектится рест темплейт, и мне надо этот сервис замокать. Но только этот сервис, все остальные сервисы должны использовать обычный рест темплейт.
Очень интересное утверждение...
Как быстро время летит.
640x360, 0:48
Иллюстрация
помести всё на nvme
Выучи все методы класса Object.
Успехов брат! Чтоб всё получилось
ты машина
Лучше, чем опыт слесаря на заводе. Код ты может и не писал, зато понимаешь, как происходит разработка продукта, что для этого нужно, какие обычно возникают сложности, как их преодолеть.
ясно нихуя не знаете блядь окатыши
Думаешь все проще? Я вообще подумал с тестирования на джаве начать, чтобы параллельно в мобильную разработку вникать. Но это опять же с точки зрения дилетанта.
Я не могу найти этот двухтомник по фамилии. Какое полное название?
Если ты еще там работаешь, то говоришь своему руководителю, что горишь желанием ПОДНАЖАТЬ и лучше вникнуть в процесс разработки, чтобы предупреждать сложности разработки еще на этапе общения с заказчиком, лучше формулировать требования тыры-пыры, в общем ссышь в уши, чтобы получить доступ к кодовой базе.
Потом люто задротишь погромирование, так чтобы было понятно, что за хуйню твои быдлокодеры пишут. Нкличие реального кода в реальном проекте ускорит обучение в 10 раз.
Потом по ситуации грамотно перекатываешься внутри компании или сьебываешь куда-нибудь.
Хортсман core java
А что такого страшного в беке? Что там что там есть сложные констркуции, инструмены разработки и тд. Но только ты будешь получать задачу и думать над логикой (что откуда взять, как обработать, куда положить и тд), а на фронте/мобилке ты будешь париться как кнопку сделать нужной формы, размером, чтобы она была поверх другой кнопке ну и куча куча других параметров.
Вообще надо выбирать то к чему душа больше лежит, но если поровну, то в одном месте изъёбываешься с логикой, а в другом месте изъёбываешься с визуальными элементами
Ничего, альтернативно одарённые личности наделали уже 100500 UltimateScriptEngine'ов.
>>33492
>>33458
https://github.com/feather-rs/feather
нашёл примерно то, что хотел сделать, там баг на баге конечно....
Долбоеб, твоя тошнотворная джава нужна только если ты бэкендер в банке с джавой. Писать на ней мод убивает все удовольствие от процесса
Можете назвать самый частый юз кейз? Какие-нибудь мапперы?
Обосрался с растабоя. Джава лучший язык для всего.
Спасибо за развернутый ответ. Да, в свое время во фронте именно позиционирование больше всего раздражало. Возможно, бэк в этом плане зайдет легче.
Так что пугает в беке?
Тут все намного более ясно, чем на фронте. По большинству вопросов есть паттерны и бестпрактисы.
А какая там работа? Наёбщик вульгарис?ё
> Так что пугает в беке?
Если судить исходя из личного опыта, а я некогда пытался в джангу, то именно логика и пугает. Огромное количество подключаемых модулей, классов, бутстрап и базы данных. Может быть все кажется сложным лишь по началу, но с другой стороны практиковался я на относительно простых проектах. Посмотрим что из этого выйдет.
Да
Django-bootstrap. Только хуй знает, при чём тут бэкенд и логика.
Нет у нас в Сбере стандарта собесов, проект проекту рознь, везде принимают по-разному. На нашем проекте дрочат задачами, на других дают тестовое, на третьих присылают стажёров, на четвёртых ещё какая-то залупа.
так я на это и рассчитывал, когда шел к ним на собес, а тут на те
Т.е. две сотыги дают всем вкатунам, кроме тебя.
Какое вообще соотношение потребностей? На что, по вашим ощущениям, на рынке большая потребность?
Фулстек это обычно аутстаф на европейской галере или еще какое-нибудь нищее легаси.
Хуй знает, что ты галёрой называешь.
Чем меньше компания - тем больше фуллстеков. В какой-нибудь крупной корпорации фуллстеков не просто мало, там ещё и препятствуют совмещению ролей, т.е. бэкендеру тупо не разрешат писать фронт, даже если он сам проявит желание.
Вкат всё. Можешь не тратить время, если у тебя нет профильного образования и глубокого знания компьютер сайнс
Да кто это сказал?) Типо с этого момента ява-кодеры перестали рождаться или больше никогда не появятся?)
Я сейчас в такой ситуации, что если не выучу джаву - то дальше мне лучше умереть (смешно, но и такое бывает). Так что мотивация есть, в унике профильный бакалавр есть, какое то время на вкат есть. Так что проблемы не вижу. А про 600 человек на место - у меня на этот счёт своё мнение, делиться которым не сильно хочется, чтобы было меньше конкуренции
>>34366
Спасибо, друг. Инфа полезная для меня
Ну мой анализ мне подсказывает что вкатываться 100% стоит - вот тебе и ответ.
Хочешь выпилиться - тебя никто не спасёт, хочешь жить как мой кореш который получает 5-6к бачей - учи какой то строготипизированный бек. Всё просто.
С пониманием отношусь к твоей проблеме, но не знаю что ты хочешь услышать. Если хочешь вкатиться, то тут думать не надо. Зашёл на явараш, уверенно отдал им 30 баксов и как машина едешь по уровням XD А там война план подскажет как дальше идти
нахуй мне тот шарп, я тебе про Java говорю, ёбанарот
ты хуйло
На перовой галере что я был требовался ангуляр. Надо было было разбираться на уровне нарисовать форму, добавить кнопки, привязать их к рест ендпоинтам. Это по сложности как писать круды на спринге - вроде не сложно, но с нуля месяца 3 ты на это потратишь. Чаще всего для фичи надо писать и фронт и бэк одновременно.
Сейчас я пишу чисто бэк и фронтовые проблемы с ползунком или уехавшей кнопкой меня не ебут.
>>лучше ручками делать валидацию
Тебе @Valid / @Validated дали, пользуйся. Нет, хочу жрать говно и писать кастомную валидацию на каждый пук.
Котлин это знак для сойбоев, как треугольник пальцами у масонов.
Разница в том, что проект на джэве - это всегда боль и нечеловеческие страдания. От языка несет нафталином, а инженерные практики и подходы остались где-то в 90-х. Пока команда джэва-программистов наматывает сопли на кулак и размазывает по засаленному свитеру, в попытках пофиксить очередной NPE, продираясь через килотонны императивного кода, часть из которого завернута в Optional, команда на котле уже выкатывает релиз и получает бабулесы.
начинать проект на джэве - моветон.
Кроме этого гугл андроидовские тулзы пишет только под котлин, jetpack compose не работает с джавой
И слава Богу. Официальный язык разработки под андроид это котел. Билд тул - градл. Все! Не нужно в 2к23 обмазываться помойной джэвой и дрочить эксемельки в мувене. Оставьте это старым пердунам, которые на старости лет начали дрочить опшиналы и заворачивать свои помойные легасные поделки пытаясь спастись от нуллпоинтерэксепшенов.
Че ты так горишь-то? Ну подумаешь тебя заставляют на 8 жабе обмазанной сокращениями писать и ебаться с дегенерадлом, который не хочет собирать проект по причине пидарас, но плакать то зачем?
Никто меня не заставляет. Я пишу на суперсовременном C# и у нас нет проблемы с NPE. Это вам все никак nullable типа не завезут и все проверки дрочите или опшионалами обмазываетесь, лол.
Если тебе так охуенно пишется на петушарпе, то почему ты каждый божий день приходишь к нам и ноешь?
Аж сквозит через сообщение тряской и разочарованием. Ты давай, там, зашивайся.
уничтожил)
Ты неверно дурачёк и в своей жизни писал код только для компаний уровня хуй&залупа? Тебе не знакомо такое понятие что падать с ошибкой надо как можно раньше, на этапе сборки в идеале. Или ты такой ахуенный что каждый get() ты обрабатываешь так что там может прийти Nullable? Это же полная хуйня ожидать что тебе придёт ёбанное ничего и как на это реагировать? Это такое же дерьмо как динамическая типизация, когда ты хуйзнаешь что тебе пришло и как с этим работать. Может для школьных поделок и прототипирования это ещё сгодится, но для серьёзного ентерпрайза это хуета.
/thread
select name, address from Person
where Person.id = Address.id_person. Как теперь сделать условие для выборки адреса, ведь where уже занят ?
Что значит "больше всех" адресов? Можно вывести 10 людей с отсортированных по числу адресов или всех отсортированных так же.
Ну он же на ДжАвЕ пИшЕт, а этот запрос вызывается из приложения на джаве, значит, логично нет спрашивать в этом треде! Примерно как у анонов, которые срут здесь вопросами про докер и гит.
Как то так.
SELECT P.name, P.adress, COUNT(A.id)
FROM Person as P
JOIN Adress as A
ON P.id = A.id_person
GROUP BY P.name;
я че ебанутый
ну по уебанству фреймворк "mocha" еще никто не перепрыгнул, но у ребят есть задатки.
хуй пососи шарпоблядь
хз как там в шарпах, а вот котлиновский fizz?.getBuzz() вместо Optional.ofNullable(fizz).map(x->x.getBuzz).orElse(null) немного удобнее. Но только ради сахара тащить другой язык это конечно клиника.
>>Это же полная хуйня ожидать что тебе придёт ёбанное ничего и как на это реагировать?
Если что то приходит от стороннего сервиса или из базы - там может быть любая хуйня с нулами в нужных полях. Это помимо того что логика на нулах - тоже не редкость в проектах.
>Для конфигурации kora framework использует библиотеку typesafe config, которая умеет читать конфигурации в формате HOCON.
ну ебнутые просто
А если у меня Arch Linux? Там нет реестра Windows. Я кстати использую Arch Linux на ThinkPad от IBM
Так установи Windows.
А в Windows есть.
Значение ID может быть намного больше количества записей, например, если городишь для PK sequence с кешами.
> Зачем нули лишние хранить на диске
Эти нули будут последним, что покажется лишним, когда надо будет оптимизировать размер базы данных. Что толку от экономии 4 байт в одной строке таблицы, если строка занимает несколько килобайт?
Как будто проекты могут быть только легаси.
Медленное старьё на спринге изживёт себя, а новые проекты на Kora.
Ну окей, что то небольшое или молодое начнут внезапно писать на чём то новом (хотя это не будет так надёжно как сринг, а для бизнеса это важно и что то новое ещё написать надо... кароче ну ты понял), но старое то никуда не денется и его надо будет развивать, разростать и так далее.
кароче как будто лет 5, а скорее 10, ещё можно сидеть ровно на спрнге.
>>35258
Отставить тряску, старичье. Ваш срэнг фримверк никому не нужен и он де-факто легаси и дурной тон в новом проекте. Сидите себе там тихо и не отсвечиваете. Через 10 лет пойдете на мороз таксовать или грузчиками работать в пятерочку, когда упругие зумеры будут писать проекты на Kora. Короче говоря - it's Tinkoff!
С тобой нет
>а за пределами даного дженерик банка — это нахуй никому не нужно.
зато тот хуй в очках, который подсадил весь банк на свою самописную залупу, теперь гарантированно обеспечил себя работой до конца жизни (ну или пока тинёк не сдохнет)
>с детскими оборотами и исключительно локальным присутствием в одной стране
Можно PROOFS пожалуйста?
Я что, зря дрочил лягушонку линку??
Там из зала правильный вопрос задали, а где вы будете брать разрабов на свои велосипеды?
-Пук-среньк, настоящий инженер пишет на джаве без фреймворка, это база.
А по итогу найдут только студентов - получится такой же обосрамс как с яндексом.
Сенькам то может и по кайфу пилить велосипед, это интересно.
А вот мидлы в рот ебали использовать это нонейм говно в рабочих задачах, они просядут по скилам и пострадает их ценность как спецов (а значит меньше зепка).
Если уж переучиваться - то выгоднее в го свичнуться (там как раз пилить спринг уместно).
1280x576, 1:57
В быту корой обычно называется легко отделяющаяся наружная омертвевшая часть корней и стеблей древесных растений.
Он даже в топ 10 не входит.
>>35303
Эх, молодые. Сеньор он на то и сеньор, что гарантирует себе рабочее место. Сделать свой велосипед = гарантировать, что кабан тебя не выкинет, как Илон Маск 80% твиттер разработчиков, потому что никто кроме него там не разберется. Чтобы не переписали быстро на молодежном языке, надо пропихнуть его побольше и поглубже, а чтоб цепные псы кабана - менеджеры, не прочухали подвоха пиарим на конференциях и докладах. Всё, дядя сеньор и его друзья обеспечили себе высокооплачиваемую и непыльную работу до пенсии.
А по поводу всякой чуши, типа чистого кода и молодежных языков, профразвития и тд - это наебалово для выжимки молоденьких, упругих но глупых по неопытности зумерков. Потому что когда они подрастут и прохавают безжалостный мир капитализма, такую лапшу на уши не повесить.
Это как посмотреть. В теории они могут наоборот её расширить, хайря всех подряд со знаниями на уровне java se, и чуток доучить своей поделке уже дома, вместо того чтобы искать только спрингокульт.
прослушал половину. В принципе правильно говорит. Меня тоже очень бесит вся спринговая магия и что оно жрёт минимум 500Мб и долго стартует
> просядут по скилам и пострадает их ценность как спецов (а значит меньше зепка).
Имхо это майндсет терпилы. Ценность спеца определяется компетенцией и уровнем задач, которые он способен решать а не стеком. Скиллы, посадка по которым действительно критична, ортогональны стэку.
какой мне смысл как специалисту переходить на другой стек и начинать всё почти с нуля?
А не легче было бы вложиться и контрибутить в spring native? Или не взять кваркус или микронафт?
Зачем очень средней по мировым мерках компании лепить собственные фреймворки?
Она ведь поддержку его не потянет 100%. Через 3 года использования у этого велосипеда будет уже костылей столько же сколько у спринга, а функционал будет все еще на порядок ниже.
>переписать всё что писали миллионы человеколет
Обычно постановка задачи звучит не так. Никому, даже отьявленным велосипедостроителям, неинтересно писать убийцу спринга снихуя. Проект пишут под конкретные цели, и эти цели обычно локальные. Писать фреймворк под эти цели не так уж и трудозатратно.
Без обид.
Если для тебя переход на новый стек означает "учить все с нуля", ты не специалист, вот и все.
Компашка масштаба тинькова потянет, почему нет?
Контрибутить в спринг натив означает зависеть от прихотей остальных стейкхолдеров и майлстоунов проекта. Иногда это может быть неприемлемо.
у них нет цели впихнуть всё или сделать нескучный конструктор для вкатышей, как у спринга.
Просто какой-нибудь DI без проксей и рефлексии, чтобы не раскидывать зависимости руками
окей. Ты не в яндексе случайно работаешь? Где ещё любят скакать по языкам и стекам
Ну то есть этот велосипед не предназначен для выхода из загона тинька?
И нахуя его вообще тогда слушать?
вообще не связанные вещи. Мне тоже не нужна магия и нескучный конструктор спринг-бута, если страдает память и производительность
Но что ты будешь делать, когда у велосипеда тинька не будет нужного тебе функционала, а его не окажется с 99% вероятностью?
90% проектов хватает чистого спринга, для остальных 10 есть гора информации как спринг допиливать и оптимизировать под свои нужды.
а что за магический функционал есть у спринга? Это только DI и готовые конфиги для распространенных либ
my condolences
Вопрос даже не в том нахуя это пишет сеньор в тиньке. Но они ж это выкинули в опенсорс и пиарят как убийцу спринга, мол давайте тащите себе в проекты это говно и вкладывайте в него тоже. Какой то анон даже возбудился (залетная шарпомуха наверняка). На что и последовала реакция.
>>профразвития и тд - это наебалово для выжимки молоденьких, упругих но глупых по неопытности зумерков.
Когда ты знаешь спринг, кафку и прочие хибернейты - ты можешь устроиться куда угодно без особых проблем, можешь выбирать оферы, набивать себе цену.
Когда ты разраб одного велосипеда - то никто сенькой на большие зепки не возьмет, а становится мидлом уже западло. Выбирая путь велосипеда становишься его заложником. Потом останется только бегать по тредам и отчаянно кричать что спринг бут уже легаси полгода назад вышел 3-й - а вот твой говнофреймворк - огого.
>>Сделать свой велосипед = гарантировать, что кабан тебя не выкинет
А кто гарантирует кабану что его самого не выкинут? Это сбер “Too big to fail” и получит кучу денег из бюджета на свои нужды. А Тиньк не настолько крупный и важный. Сдохнет - никто даже не заметит.
>>35345
>>Ценность спеца определяется компетенцией и уровнем задач
Это работает только на уровня от сеньора и выше. Мидл без знания спрингов (что и определяет его компетенцию) нахуй не нужон. А работать на этой поделке предположительно должны именно они (джуны нихуя не умеют, сенек нанимать для погрузки жсонов дорого)
Даже в рамках работы с бинами - интерсепторы, скоупы и инит/дестрой методы бинов, кондишоны автоконфигураций, профили.
На уровне веба - фильтры, адвайсы.
Куча оберток для тестов.
Это только то что сразу вспомнил.
Хотя если на тинек наложат хорошие санкции он сдохнет раньше.
>а вот котлиновский fizz?.getBuzz()
Нинужон. Нулл допустим только тогда, когда метод явно отмечен как @Nullable и где нулл это отдельное логическое значение и должен обрабатываться совсем по другому.
Да, есть ситуации, в которых проведение нулл вверх по стеку как ошибки в ГОвне прямо так и напрашивается. Но все они являются говнокодом и при нормальной структуре проекта самоуничтожаются.
>Мидл без знания спрингов (что и определяет его компетенцию) нахуй не нужон
Так постановка вопроса то изначально была какая?
>мидлы в рот ебали использовать это нонейм говно в рабочих задачах, они просядут по скилам и пострадает их ценность
>какой мне смысл как специалисту переходить на другой стек и начинать всё почти с нуля?
Хуевый тот миддл, что не мечтает стать синьором. Ты миддл, ты уже овладел спрингом, спринг для тебя пройденный этап - в чем запара поработать на чем-то еще помимо спринга? В чем запара поконтрибьютить во что-то уровнем ниже чем спринг? Не вижу ни единой причины против расширить свой кругозор за счет работодателя.
>А работать на этой поделке предположительно должны именно они
Я в джаву вообще через осги вкатывался (караф, ебанавротнахуй). Сейчас мне 10+ лет стажа, никаких проблем на своем пути не встретил, ни о чем не жалею. Спринг - не самое запарное что есть в разработке. ИМХО нужность спрингодозы для миддлов переоценена. Про джунов вообще молчу, на вкатунов сейчас без слез не взглянешь.
Поздравляю, открыл истину. Тинькоф это компания, которая очень хочет быть похожей на яндекс, но в которой разработчики не в состоянии правильно перемножить три числа, из-за чего клиенты наменивают миллионы рублей себе в прибыль (после чего на них подают в суд)
Я вообще не представляю, как эту контору можно воспринимать всерьёз, платят они ещё меньше яндекса, собес (карго культ с яндексового) муторный, хоть и не сложный (потому что особого потока людей в тинек нету)
Харчок в ебало любому ублюдку-интервьюеру, ловящему кандидатов на знании кишочек. Еще б блять джава-паззлеры додумались спросить, ебланы.
можно смело ставить анус. даже яндекс не смог родить ничего такого, что имело бы статус общеупотребимого фреймворка/библиотеки, хотя пытался не один десяток раз. а уж про подзалупный банк с крайне хуёвой репутацией нечего даже и говорить, дропнут идею использования сразу как только дойдут то слова тиньков в описании.
>>Нинужон
Ну вот поле может быть со значением, а может и без него. Если не пустое - нужно вывести. Для бизнеса это правильно. Что делать будешь? Идти объяснять овнеру что он и его клиенты долбоебы и надо переписать логику чтоб тебе удобно было?
Если без приколов, то хуй его знает. Багу жыдам завести.
Жать F2 для перемещения по ошибкам/предупреждениям а не быть дегродом, сросшимся с мышью
>>яндекс не смог родить ничего такого, что имело бы статус общеупотребимого фреймворка/библиотеки
Кликхаус используется многими. А до них меил тарантула высрал, которым тоже кто то пользовался. На этом пожалуй все.
Вот этот опшионал это считай и есть его особая обработка. Только таких мест в коде может быть довольно много.
чел выше писал что опшионал нинужон, потому что нулов нет или почти нет.
Нормальный специалист перекатится на новый веб фреймворк за неделю
Похуй что там: кора, play, микронавт или вообще takes
Если лично ТЫ не в состоянии этого сделать, то ты вкатун ебаный и перхоть
Ты даун? Это поднятие нулла вверх по стеку. Ничего общего с особой обработкой он не имеет.
Нахуя мне захламлять мозг бесполезной инфой о дохуиллиарде сочетаний клавиш, если есть мышь?
Мне кажется, тут скорее именно хибернейт. Он уж больно переусложнен. Как и спринг секьюрити, например. Оверинжиниринг там, где можно проще. Физз базз энтерпрайз эдишном отдает немного.
он основан на мертворожденной идее что можно автоматически генерировать sql запросы. Генерить то можно, но получается всякая херня. И это в самом бутылочном горлышке приложения.
Еще можно жать Ctrl + Enter, чтобы Идея сама поставила за тебя точку-с-запятой.
Это очень полезная инфа, если ты пользуешься Идеей
Мертворожденная идея звучит не так.
Мертворожденная идея - это маппинг сущностей из реляционной алгебры на сущности в ООП. Этот маппинг невозможет без проеба каких нибудь нюансов, отсутствие которых либо ченить усложнит обратно, либо просадит перформанс.
А генерация запросов - это нормально. Их много кто генерит, вон Jooq например.
Нет. Это не мертворождённая идея.
Корень всех проблем, который ближе всего к понятию мертворождённости - общая память. Когда два инстанса с разными точками входа работают с одной и той же памятью. Вот что вызывает проблемы. Если точка входа гарантированно одна, то всегда можно шлёпнуть паттерн реставратор и даже с ORM наслаждаться истинным ООП.
Я бы тебе ответил, только ты не задал вопроса.
Нихуя не понял.
Во первых - че за нахуй новый паттерн такой: "реставратор"? Его даже гугл не находит.
Во вторых - че за наброс про общую память. У тебя любой рестфул-сервис - это литералли проект с кучей точек входа, ведущих к общему стейту в лице БД.
В третьих - при чем тут ORM, особенно джавовые, у которых вся работа построена вокруг понятия "persistence context", который сам по себе литералли является общей памятью где все мэнеджед-энтити шарятся для всех учакстников транзакции
Разьясни подробней свой пойнт, будь добр?
На вкус и цвет. Мне наоборот нравится когда в проекте мало людей. Идеально - когда я литералли один.
>на мертворожденной идее что можно автоматически генерировать sql запросы
охуеть, а пацаны то не в курсе
Ну так ты то скорее всего опытный, а я просто вкатыш, грязь из-под ногтей. Мне будет тяжко без постоянных кодревью, ну по крайней мере так мне это представляется, буду сам во всем разбираться, а если игорь1 и игорь2 решат уйти в отпуск, то меня выебут и высушат овертаймами.
>Во вторых - че за наброс про общую память. У тебя любой рестфул-сервис - это литералли проект с кучей точек входа, ведущих к общему стейту в лице БД.
Ну вот это и является проблемой. Микросервисы - мертворождённая идея, общая память - близка к этому, но с этим можно работать, просто нужно правильно обрабатывать это, а не пытаться натянуть сову на глобус - натянуть паттерны и приёмы ООП, которое возможно только в локальном масштабе в рамках одного инстанса на целую систему, в которой даже использованных языков программирования может быть несколько, занимаясь костылеварением с помощью ORM'ов.
>В третьих - при чем тут ORM, особенно джавовые, у которых вся работа построена вокруг понятия "persistence context", который сам по себе литералли является общей памятью где все мэнеджед-энтити шарятся для всех учакстников транзакции
А можно по-русски, а не на языке соевого крудошлёпа? Нихуя не понял.
>Во первых - че за нахуй новый паттерн такой: "реставратор"? Его даже гугл не находит.
Локальный вызов this.save() после каждого внесения изменения в ООП-шный объект и YourDataMap, представляющая из себя обрезанный репозиторий без методов update и delete (это делает сам объект). В более общем смысле - чтение из оперативки, запись на диск.
>Мне кажется, тут скорее именно хибернейт. Он уж больно переусложнен.
очень большой звонок был когда они задепрекейтили критериа апи и сказали юзайте функционал жпа. это сука пиздец, то что делалось в изящные 10 строк с помощью критериев превратилось в 50 строк нечитаемых макарон. причем некоторые нетривиальные вещи я так и не понял как переписать на жпа.
>>35577
>тиньковщики тоже против ORM. Неужели я не одинок
ты не можешь писать на яве и не использовать ORM. по крайней мере на практике. потому что ORM - это, если грубо говорить, перевод объектой модели в реляционную. ты можешь использовать хибернейт или что-то еще либо писать свой велосипед, но от ORM ты никуда не уйдешь.
> Микросервисы - мертворождённая идея, общая память - близка к этому
то есть концепция РСУБД с 60-летней историей коммерческого применения это мертворожденная идея, ага.
>Локальный вызов this.save() после каждого внесения изменения в ООП-шный объект и YourDataMap, представляющая из себя обрезанный репозиторий без методов update и delete (это делает сам объект). В более общем смысле - чтение из оперативки, запись на диск.
ебать, что это за шиза.
Именно. Команды из десятков тысяч крудошлёпов вышлёпывают годами то, что микро-команды или вообще соло разработчики делают за неделю. Угадаешь, как так получилось?
Трясёшься, анальничек, с разрыва манямирка?
>Угадаешь, как так получилось?
как у тебя всякая хуйня в манямире рождается? не угадаю и не собираюсь этого делать.
концепция реляционных баз данных это пример возможно самой успешной программной архитектуры, реализованной на практике. и, что уж несомненно, sql - это пример самого успешного dsl эвар. если для тебя это мертворожденная идея то ты либо клинический долбоеб либо человек который в принципе не знает о чем говорит.
>Во первых - че за нахуй новый паттерн такой: "реставратор"?
ну скорее всего он вот это имел в виду
https://en.wikipedia.org/wiki/Memento_pattern
но то что описал во фразе
> Локальный вызов this.save() после каждого внесения изменения в ООП-шный объект и YourDataMap, представляющая из себя обрезанный репозиторий без методов update и delete (это делает сам объект). В более общем смысле - чтение из оперативки, запись на диск.
никакого отношения к нему не имеет, это просто примитивное описание кеша, которое может работать с простыми объектами, не имеющими иерархическую структуру. если ты попробуешь применить такой подход для работы с полноценными объектами, поддерживающими циклические связи, связи многие-ко многим, списки, коллекции и т.д. то ты охуеешь, так как тебе придется, по сути, писать то, что в хибере называется кеш второго уровня.
>ты то скорее всего опытный, а я просто вкатыш
ИМХО тебе уже на это должно быть похую. Те оффер дали? Предполагаю что дали, раз "в команду зовут". То есть сама команда с тобой поговорила, отсобеседовала и признала достойным. Все. Нечего себя принижать за просто так.
>если игорь1 и игорь2 решат уйти в отпуск, то меня выебут и высушат овертаймами
Всех в одно время обычно не отпускают. Существует такая штука как "план отпусков". Попасть в ситуацию ты можешь если игорьки из твоего примера разом заболеют и уйдут на больничный, но даже тогда должна быть еще серьезная предрелизная нагрузка, чтобы дело до овертаймов дошло.
И хэй, сложности будут всегда и везде. И рано или поздно будет овертайм, который тебя высушит досуха, это неизбежно ни на каком проекте. Если заранее накручивать себя на такой негатив, никогда не вкатишься. Уволиться всегда успеешь.
Неуважение к собеседнику. Заглавные буквы придумали не просто так, а для того, чтобы читать было удобнее. Набирать текст без заглавных букв не намного легче (вообще не легче практически), а читать сложнее. Это либо явное выражение неуважения к собеседнику (смотрите, мне похуй, как ты прочитаешь, зато я 0,1 секунду сэкономлю), либо стадное поведение (долбоеб скопировал стиль письма своих протыков).
Двачую, мелкобуквенное быдло идёт нахуй из треда джавагоспод прямиком в /vg/dota2/.
>Неуважение к собеседнику.
соси хуй быдло, что тебя уважать если ты несешь феерическую хуйню. в реальности за эту чушь что ты тут транслируешь тебя пидорнули бы давно с любой вменяемой команды как профнепригодного.
Пиздец, обосрался и спалился, что я семёнил. Тем не менее, не отменяет того, что я тебя скрываю.
>ты не можешь писать на яве и не использовать ORM. по крайней мере на практике. потому что ORM - это, если грубо говорить, перевод объектой модели в реляционную. ты можешь использовать хибернейт или что-то еще либо писать свой велосипед, но от ORM ты никуда не уйдешь.
Уже ушел в сторону JOOQ.
там другие критерии
было:
Criteria q = s.createCriteria(Author.class);
q.createCriteria("books").add(Restrictions.like("title", "%Hibernate%"));
List authors = q.list();
стало:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Author> cq = cb.createQuery(Author.class);
Root<Author> root = cq.from(Author.class);
SetJoin<Author, Book> books = root.join(Author_.books);
ParameterExpression<String> paramTitle = cb.parameter(String.class);
cq.where(cb.like(books.get(Book_.title), paramTitle));
TypedQuery<Author> q = em.createQuery(cq);
q.setParameter(paramTitle, "%Hibernate%");
List<Author> authors = q.getResultList();
ебануться же, ну. как этой хуйней нормально вообще пользоваться можно?
А по моему, оно того стоило хотя бы ради того, чтобы дропнуть навсегда метод list(), возвращающий List без дженериков. Меня такие вещи гораздо больше триггерят, чем чучуть возросший объем кода.
https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Criteria.html#list()
>Уже ушел в сторону JOOQ.
это тоже ORM. функционал, который дает JOOQ по сути от хибернатовских критериев концептуально ничем не отличается.
это все еще преобразование объектов в реляционную модель через генерацию SQL-запроса на основе полей/метаданных класса
в жаве альтернатив ORM по сути нет, в силу ее природы.
альтернатива выглядит, например, так:
(insert-into :person
(set= :sex "male"
:age 25
:name "Eitaro Fukamachi")
(on-conflict-do-update '(:name)
(set= :age (:+ :age 1))
(where (:< :age 99))))
т.е. ты в самом языке определяешь dsl для работы с базой и используешь его в коде так же как ты используешь sql в консоли субд, без всяких костылей типа Session, Query, Resultset и прочих вспомогательных нагромождений. Но, увы, в яве так сделать нельзя.
>это все еще преобразование объектов в реляционную модель через генерацию SQL-запроса на основе полей/метаданных класса
Ну ты загнул. Ты эдак и JDBC можешь назвать ORMом. А хули? ResultSetы же - обьекты?
Нтак тоже умею. Смотри:
>альтернатива выглядит, например, так:
>т.е. ты в самом языке определяешь dsl для работы с базой и используешь его в коде так же как ты используешь sql в консоли субд
В JOOQ есть класс, который называется литералли DSL, и которым ты литералли описываешь SQL в типобезопасной манере (в отличие от примера на кложуре, кстати, который ты привел) средствами языка Java. Выглядит это примерно вот так:
DSL.<Record>select(
RULE_LISTS_VIEW.ID,
RULE_LISTS_VIEW.RULELIST
).from(
RULE_LISTS_VIEW
)
И что? Чем тебе не паритет к твоему примеру? Или ты начнешь щас жопой вилять и говорить что это - не dsl, а dslи можно только в кложуре писать?
А это что?? Всё в гугле описывается. Выкатывайся из джавы и не возвращайся
Какая нахуй возгонка - достаем поле вложенного объекта без риска нарваться на НПЕ. В orElse можешь "" авставить, если тебя null так тригерит.
> ты не можешь писать на яве и не использовать ORM. по крайней мере на практике
могу. ОРМ придумали и зафорсили лет 10 назад. Как же до этого жили?
Какие проблемы решает ОРМ?
Сложность? Нет, сложность увеличивается, появляется куча скрытых камней и граблей, повышается требование к квалификации бекендера, появляется требование знания кишочков хибернейта и обхода его кривых мест
Быстродействие? Нет, быстродействие ухудшается
Расход памяти? Расход памяти тоже ухудшается.
Так какую проблему решает хибернейт? Я скажу какую - вкатыши боятся sql и думают что хибернейт позволит поместить это в черный ящик и как-то там сам всё сделает. Это ошибка. Теперь вкатыши вообще не умеют без хибернейта слать запросы в базу и думают что это невозможно
>альтернатива выглядит, например, так:
руками написал sql запрос и небо не обрушилось. Можно прямо копировать и вставлять в консольку
На тот пост я ответил.
Аночоусы, у недавно вкатившегося вопрос.
Так фильтровать вообще нормально?
Мне приходит лист енумов, нужно сделать реквест и получить из него лист объектов. Вернуть объекты нужно только те, в описании которых находятся value енума. В описании много текста, а искать нужно только по определённому слову. Изменить то, как мне приходит ответ из реквеста я не могу.
Мне кажется я хуйню написал и можно лучше, но никак не вижу как это лучше сделать
Реплай прилип случайно
1. фор в стримах выглядит как говно
2. сложность пиздец (замени на хэшмап)
3. нулпоинт поджидает в 53 строке (разверни сравнение)
А что не так с листом? Стринги я принимать не могу, значений будет много и они фиксированы.
>>35907
1 - Понятно что как говно, потому решил спросить.
2 - А как иначе? Вижу что там фильтр в фильтре по сути, но ничего придумать не могу. Лист foosAndBars на хэшмапу?
3 - Там заранее стоит остановка работы сервиса если ничего не найдено, так что не будет нпе
>1 - Понятно что как говно, потому решил спросить.
>2 - А как иначе? Вижу что там фильтр в фильтре по сути, но ничего придумать не могу. Лист foosAndBars на хэшмапу?
>3 - Там заранее стоит остановка работы сервиса если ничего не найдено, так что не будет нпе
тупоголовый блядь
Ты тоже в темпе съёб в петушарп-тред реализовал.
Я не мелкобуквил на самом деле мне сначала показалось, что ты нюфаню шлёшь нахуй, поэтому и направил тебя в петушарп тред.
Дед, последний раз это было запощено в треде этак 115.
Съёб в петушарп оформил, быстро, резко.
Трабла в том, что этот филд description по которому я смотрю имеет в себе много всего, по типу "qwe foo qwe". Я пробовал сначала смотреть со стороны листа енумов, но тогда будет пусто ведь.
умник такой
Сугак, подонок, мерзавец!
Аж позеленел с такого перефорса. Это ведь петушарперы пидорасы.
>Так какую проблему решает хибернейт? Я скажу какую - вкатыши боятся sql и думают что хибернейт позволит поместить это в черный ящик и как-то там сам всё сделает.
ой вей. ты говоришь хуйню. хибернейт решает много проблем, и
1) основная - это управление сложностью, а именно упрощение и сокращение количества написанного кода. ты просто не видел систем хотя бы с парой сотен таблиц где всё общение с БД орагнизовано на голом jdbc. Там количество кода на порядок больше чем при использовании самой простой ORM.
2) кросплатформенность на уровне субд
3) КЕШ второго уровня
4) четкое разграничение уровня приложения и БД. именно благодаря инструментам типа хибера страшную ебанину вроде бизнес-логики на триггерах и хранимых процедурах сейчас можно встретить тьолько в самых дремучих легаси. именно поэтому практически в любой книге по ораклу выпущенной за последние 15 лет есть отдельная глава посвещенная критике хибернейтоподобных систем, потому как они ОЧЕНЬ сильно повлияли на популярность PL/SQL и подобных языков как языков программирования и у адептов написания логики в БД от них очень сильно подгорает.
5) множественные следствия из п.1 - упрощение тестирования, возможность наследования сущностей, типовые решения и шаблоны проектирования и т.д. и т.п.
> Сложность? Нет, сложность увеличивается,
еще раз, ты просто видимо не писал приложений, по крайней мере достаточно сложных, на голом ждбц. там скрытых камней и граблей не меньше а кода в разы больше и возможностей допустить ошибки в разы больше, и особенно это усложняется тем что SQL невозможно проверить на этапе компиляции, и любой кусок кода типа такого >>35869 представляет собой потенциальную проблему которую нужно покрывать тестами со всех сторон, потому что других способов проверить хоть какую-то корректность этого кода нет. Ну и отдельно нужно упомянуть безопасность так как любая достаточно сложная система на голом ждбц практически всегда уязвима перед sql-инъекциями, если хорошо в ней покопаться. И уж лучше прочитать книжку про хибернейт чем штудировать особенности PL/SQL, про которые написано, опять же, в разы больше.
еще раз - ты думаешь что если ты будешь писать вместо хибера голый скл то у тебя там будут всю дорогу запросы в духе update user set name='vasya' where id=1? хуй там. у тебя будет несколько сотен файлов типа пикрелейтеда неведомой ебанины которую легче каждый раз писать с нуля чем пытаться разобраться что в ней написано, а особенно фееричные запросы будут достигать размера в нескольких сотен строк.
>Так какую проблему решает хибернейт? Я скажу какую - вкатыши боятся sql и думают что хибернейт позволит поместить это в черный ящик и как-то там сам всё сделает.
ой вей. ты говоришь хуйню. хибернейт решает много проблем, и
1) основная - это управление сложностью, а именно упрощение и сокращение количества написанного кода. ты просто не видел систем хотя бы с парой сотен таблиц где всё общение с БД орагнизовано на голом jdbc. Там количество кода на порядок больше чем при использовании самой простой ORM.
2) кросплатформенность на уровне субд
3) КЕШ второго уровня
4) четкое разграничение уровня приложения и БД. именно благодаря инструментам типа хибера страшную ебанину вроде бизнес-логики на триггерах и хранимых процедурах сейчас можно встретить тьолько в самых дремучих легаси. именно поэтому практически в любой книге по ораклу выпущенной за последние 15 лет есть отдельная глава посвещенная критике хибернейтоподобных систем, потому как они ОЧЕНЬ сильно повлияли на популярность PL/SQL и подобных языков как языков программирования и у адептов написания логики в БД от них очень сильно подгорает.
5) множественные следствия из п.1 - упрощение тестирования, возможность наследования сущностей, типовые решения и шаблоны проектирования и т.д. и т.п.
> Сложность? Нет, сложность увеличивается,
еще раз, ты просто видимо не писал приложений, по крайней мере достаточно сложных, на голом ждбц. там скрытых камней и граблей не меньше а кода в разы больше и возможностей допустить ошибки в разы больше, и особенно это усложняется тем что SQL невозможно проверить на этапе компиляции, и любой кусок кода типа такого >>35869 представляет собой потенциальную проблему которую нужно покрывать тестами со всех сторон, потому что других способов проверить хоть какую-то корректность этого кода нет. Ну и отдельно нужно упомянуть безопасность так как любая достаточно сложная система на голом ждбц практически всегда уязвима перед sql-инъекциями, если хорошо в ней покопаться. И уж лучше прочитать книжку про хибернейт чем штудировать особенности PL/SQL, про которые написано, опять же, в разы больше.
еще раз - ты думаешь что если ты будешь писать вместо хибера голый скл то у тебя там будут всю дорогу запросы в духе update user set name='vasya' where id=1? хуй там. у тебя будет несколько сотен файлов типа пикрелейтеда неведомой ебанины которую легче каждый раз писать с нуля чем пытаться разобраться что в ней написано, а особенно фееричные запросы будут достигать размера в нескольких сотен строк.
у тебя на картинках аналитические запросы, которые хибернейтом ты ну никак не сделаешь. Только если выгружать данные и в жабе делать это же самое
а ты хочешь в своем приложении еще pure sql оставить? да ты ебанешься, просто выведи стактрейс хибера и посмотри какого размера запросы он генерирует. тебе, чтобы сохранить хоть-какую-то читабельность и вменяемость кода придётся переходить на хранимки/курсоры.
не понял аргумента. Я знаю что хибер высирает тонны говна и что я могу делать запросы лучше чем хибернейт.
Кстати хранимка у тебя тоже не скомпилится если в ней ошибки.
То что есть большие сложные запросы - хибернейтом их никак не сделать. Их так и делают найтив сиквелем или хранимкой.
Хибернейт может делать только простые круды. Но при этом непонятно какую проблему он решает.
кроссплатформенность - нахуй не нужно и сомневаюсь что хибер может её обеспечить. Кеш для бд - нахуй не нужен. Разграничение - глупость. Просто лишились возможстей хранимок/вьюх. С таким же успехом можно было запретить хранимки/вьюхи.
Хибернейт и его генерацию точно также нужно тестировать. И ещё глазами смотреть что он там генерирует и насколько плохо
Потому что котлин, а джава ненужна. Ну шарпы просто редкий стек. Я бы если знал о предстоящем кризисе лучше бы пошел в универ и дрочил питон, го, линукс и облака вместо крудошлепства
Репорт.
if (string == null) {
throw new IllegalArgumentException("String must be not null");
}
return new Iterable<Character>() {
@Override
public Iterator<Character> iterator() {
return new Iterator<Character>() {
int pos = 0;
@Override
public boolean hasNext() {
return pos < string.length();
}
@Override
public Character next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return string.charAt(pos++);
}
};
}
};
}
Тут string статический член или нет?
if (string == null) {
throw new IllegalArgumentException("String must be not null");
}
return new Iterable<Character>() {
@Override
public Iterator<Character> iterator() {
return new Iterator<Character>() {
int pos = 0;
@Override
public boolean hasNext() {
return pos < string.length();
}
@Override
public Character next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return string.charAt(pos++);
}
};
}
};
}
Тут string статический член или нет?
член у меня в штанах
В смысле? У тебя вообще нет строковых полей, только аргумент. Нет никакой разницы, как ты вызываешь метод, передавай хоть статическое поле, хоть поле объекта, хоть переменную.
Похуй сколько стартует, главное как работает в долгую. Или вы там блядь апликейшены каждые пол часа деплоите?
Так же похуй сколько жрёт памяти, если она работает быстрее. С точки зрения инфраструктуры купить больше памяти дешевле и проще чем добавить\купить больше CPU
два чая этому господину
Нулы это наёбка для мидлов и джунов которые блядь архитекруту не понимают и что падать надо как можно раньше. Потому что если тебе в проде придёт нул и ты его просто примешь как должное, то обосрёшься как тиньков и кого то выебут (кому-то даже понравится)
Я в гугл батрачу, у гугла ВСЁ своё. Все фрейворки чисто свои, они себе могут позволить.
ну и как умник хуев ты будешь моделировать дату начала некоего события если оно еще не произошло?
Бля, ебать ты евангелист. Сколько те за эту лыжу заплатили? Хуй да маленько?
Чем null лучше 0 в ситуации когда событие не произошло?
Темболее что это за извращённая логика когда событие ещё не началось, а его объект уже есть? Нахуй он нужен? Сделай объект Promise весь целиком, что он как бы есть, но детали его появятся когда он действительно случится.
Date startDate = 0; // мам я еблан
>Нахуй он нужен
ну например он ЗАПЛАНИРОВАН но не НАЧАЛСЯ
короче ты безработный БОМЖ сразу видно
>Чем null лучше 0 в ситуации когда событие не произошло?
На самом деле - оба варианта одинаково хуйня. Если поле предполагает семантику таймстампа, там должен быть таймстамп и ничего иное. Иначе что в случае с nullями, что в случае с нулями сохраняется риск, что подстановки, где ожидается этот таймстапам, сломаются.
Мимокрок
Так он блядь запланирован на когда-то же, а не блядь просто в никуда?
Кароче ты быдло джун.
Ты чё блядь потом после создания объекта его ещё редактировать будешь меняя свой ебучий нул на какую-то реальную дату? Ты блядь про многопоточность и иммутабельность слышал?
>>36345
Всё именно так. Оба варианта хуета хует, помимо того что нул это такая хуета шо лучше уж 0.
>Так он блядь запланирован на когда-то же, а не блядь просто в никуда?
запланирован в одно время а стартанул в другое и как ты потом это узнаешь хуйлуша?
я те блядь еще больше скажу у него есть еще и ВРЕМЯ ЗАВЕРШЕНИЯ вот ты щас охуеешь да?
Если стартанули в другое от запланировано времени, предыдущий объект должен быть уничтожен, а не перезаписан.
>>36351
Почитай про Promise. Ещё есть такая хуйня как имплементировать метод boolean hasDate(), и возвращать true если что-то реально было записанно, false если значение по дефолту стоит. А для getDate() метода, если поле содержит дефолт значени то выкидывать эксепшен.
/thread
>>36351
Да вы вообще непонятно о чем спорите. Один высосал какую то задачу из пальца про поле, которое какбэ начало эвента, но нулевое (совсем мозги уже со своими ОРМами проебали, торчки блять. Задача по совести начинается с бизнес-постановки, а у него уже ентити с нуллабл полями как аксиома и данность блять). Второй вообще непонятно че защищает - вроде нулы чихвостит, при этом предлагая всратый нуль-обжект-заменитель, и сам же признает что один хуй говно.
Где логика, где обьективность? Шли б спать, один хуй не договоритесь.
Не нуль-обжект-заменитель, а провославный фрейворк Promise, в который можно завернуть объект Promise<Date>.
И да, у меня рабочий день, мимогуглодев в треде
>Ещё есть такая хуйня как имплементировать метод boolean hasDate(), и возвращать true если что-то реально было записанно, false если значение по дефолту стоит. А для getDate() метода, если поле содержит дефолт значени то выкидывать эксепшен.
boolean hasDate() { return this.date != null; }
Date getDate() { return this.date; }
requireNonNull(object.getDate());
ахуенно придумал братан
Ну значит работать, в твоем случае.
И кстати, о каких конкретно промисах в джаве ты все время талдычишь? В джаве оные никогда не были в ходу, их роль всегда с лихвой покрывалась прочими штуками типа Future(Task) или CompletableFuture.
Да чел, мне похуй - что шарпоблять, что гуглодев. Один хуй - двачер.
Блядь, сорямба, думал опенсорс уже.
Получается чисто гугловая либа асинхронная. Думаю что-то подобное в опенсорсе должно быть.
Пишу такие запросы как на пиках на jooq.
И круды тоже пишу на jooq. Проблемы только с дедупликацией корневой сущности при джойне листа пока возникали. Но и они вполне решаются, конвертом приджойненого в массив джейсонов.
И в чём я не прав?
>Такая же хуита что и коплитблфьючи.
>Но куча ненужных апишек.
>И его нельзя блокнуть, можно использовать только в асинхронной дрисне.
Нахуй ты это говно сюда притащил, культист ебаный?
Просто выёбываюсь что могу жрать говно и смаковать
Прочитал.
Пришел к выводу, что ты упоролся. Во первых, непонятно почему ты считаешь что в джаве нужны промисы, с учетом того что:
1) В джаве и так асинхроншины подобного уровня полно, включая CompletableFuture прямо из стандартной либы
2) Угар по промисам давно прошел, и щас в тренде зеленые потоки
Во вторых, так и осталось нераскрытым, как конкретно ты собрался промисами решать проблему нулей. Если ты ведешь тред к тому, что первый потребитель нуллабл-поля будет анально выковыривать его значение через then, то ну тебя нахуй с такими инициативами. Есть способы проще.
Короче либо ты пиздишь что из гугла, либо лычка гуглодевелопера не значит ровным счетом нихуя, и внутри гугла кодят такие же дебилы, что и снаружи.
Сорри, может меня недопоняли или я рил мудак. Я хотел сказать, что весь объект делать промисом, а не 1 поле, если этот объект будет как бы существовать когда-то там.
Так. А если динамически надо ячеечку заполнить, а в довольно случае занулить? Значит можно и создавать переменную, равную null.
Используй Optional. Нул нужно избегать всеми возможными способами.
Угар по промисам в хайлоаде никогда не пройдёт, асинхронность лучший способ максимально утилизировать ресурсы.
Зеленые треды это только если для каких-то ембедед вещей, которые на уровне железа\ос не могут в потоки, потому что никто лучше менеджить потоки чем ос\железо, не сможет.
>весь объект делать промисом, а не 1 поле, если этот объект будет как бы существовать когда-то там.
сохранил промис в базу
@
мам я еблан
>асинхронность лучший способ максимально утилизировать ресурсы.
Разве ж кто спорит? Но с трендом по промисам это не коррелирует никак. Щас роляет асинк-авайт, или разного рода *рутины. Код на промисах по сравнению с кодом на рутинах выглядит так же уныло, как код на коллбеках выглядел по сравнению с кодом на промисах или реактивных стримах.
>Зеленые треды это только если для каких-то ембедед вещей, которые на уровне железа\ос не могут в потоки
>потому что никто лучше менеджить потоки чем ос\железо, не сможет.
А вот это неправда. Профит от управления потоками средой исполнения - в том, что среда исполнения может реализовывать принципиально новые, отличные от нативной, модели параллелизма, лишенные недостатков классического параллелизма через нативные потоки. Само понятие "менеджмент" для зеленых потоков - весь этот скедулинг, переключение контекста, конкарренси, зачастую не имеет ничего общего с классическими потоками.
Ошибка таких как вы, фанатов ОРМ, в том, что для вас запись в табличке идентична обьекту-энтити, и вы просто представить себе не можете ситуацию, где для разных кейсов существуют разные кортежи (структуры) данных, а для некоторых кортежи даже не нужны. Вас как прибили к этой модели, где есть только КРУД-репозитории и энтити, так вы с нее и слезть не можете ни вправо ни влево. А тем временем на уровне БД задача тривиальная. Всего то и надо сделать что update table set field = null where id = 42. Можно даже пойти дальше, и просверлить дырку в репозитории, ченить типа void nullifyField(int id), куда засунуть этот запрос, и не будет у тебя никаких нулей априори, равно как и не будет нуллабл поля.
О нееееет, "этож нечистый код, а как же швятой ОРМ". Мракобесы блять.
Еще бы этот @Nullable не был вендор-локнут на идею блять, и можно было бы его чекать на уровне сборки, фейля билд в случае чего, цены б ему не было.
Ты зачем так порвался?
Я фанат через джуучек в базенку класть значения, нулики в том числе.
А потом вынать большие объекты с большой вложенностью одним запросом с стешками и кучей джойнов.
>А если мне в базенке надо занулить ячеечку в табличке? Как без нулика то?
Ну ок, сорян, постановка вопроса звучала так, будто ты как типичный ОРМ-чел даже помыслить себе не можешь ситуацию, где есть что-то кроме ентити=таблица (и как следствие если таблица с нуллабл полями, нулей в энтите не избежать).
>ентити=таблица
Это очень удобно на самом деле даже без орм.
Но даже в жпа можно писать через дтохи(через jpql), а забирать через проекции.
Оно должно быть полезно на практике, а не синтетически высрано.
Вот наберешь сто звезд на гитхабе, это уже хоть что-то.
Как те долбоебы, вандалившие свои миллионные жс-либы - это взлетевшие пет-проекты.
>>263733000
Кому ты свои петы собрался показывать? Работодателю?)))00)
>>Оно должно быть полезно на практике
>>Вот наберешь сто звезд на гитхабе
Энтерпрайзу похуй на звезды и гитхаб, либы берут с репозиториев, а не с рандомной помойки.
Не для энтерпрайза, а вообще.
Т.е. это что-то, что применяется посторонними людьми для какой-то пользы, а не высрано для галочки. Чуешь разницу?
>Как думаете, на чем лучше всего навыки практиковать
Напиши свой нетфликс или сбер. На крайняк банк Санкт Петербург. Мельче проектов на джаве не бывает.
i8 i16 i32 i64 f32 f64 сразу хуле
Зачем людям использовать джаву не для энтерпрайза? Они что ебанутые?
Очередную убийце джавы выдумываешь? Остров с подходящим названием то выбрал уже?
SuckCockOf
На собесах мы смотрели только один раз пет, когда челика брали по рекомендации и он переписал свой пет под наш стек.
Скучно слишком, когда десятилетиями всё работает и ничего не меняется.
ты додич
СИМЛИВ СИМЛИБ, хуй поймешь
1:13:13
https://youtu.be/xReBrinErYU?t=4393
Thymeleaf
Так вот откуда вкатуны взяли моду на шаблонизаторы, они оказывается петучинского все посмотрели.
Просто таймлиф самый популярный и при этом простой шаблонизаор. А Скуфчинский раньше стракты всякие советовал.
Есть мнение (не мое), что у мавена не очень хорошо все с распараллеливанием и инкрементальностью билда. Часть проблем, вроде как, решает поделка под названием mvnd, но я мало ее пробовал.
Еще, большущая проблема мавена в том, что помник аггрегирует в себе и билд пайплайн, и депенденси, не давая при этом внятного способа отделить и переиспользовать билдовую часть. Чтобы один билд пайплайн распространить на несколько проектов, надо нехило так изьебнуться, и собрать по пути немало граблей.
В остальном - мавен все еще топчик.
Ясно. Инфантил.
>смог претендовать на стажировку в самом же яндексе?
Лол нет. Яндекс после своего же практикума на работу или стажировку не берет. Практикум - это самый минимум знания разработчика, как умение писать или читать
Про 1 задачу, это я имел ввиду на сайте контеста, где заявку на стажировку подаешь, но там чет алгоритмы еще нужны, т.е. вкатуну только киснуть в сбере/втб?
А про сам курс яндекса есть мнение, там уверенные джуны получаются хотя бы? Спасибо
Нет. Почти все курсы это дно. Это даже не стажер. Плюс для многих прохождение платных курсов для дебилов это показатель, что ты сам не умеешь учиться, искать инфу и тебе нужны пендели. Если и будешь брать курс, лучше никому не говори, что его проходил.
>вкатуну только киснуть в сбере/втб?
Вкатуна туда не возьмут. Набора джунов нет ни в сбер, ни в втб.
Учту, я впринципе видел, что люди советуют пиздеть про опыт работы, чтоб на позицию миддла вкатиться сразу, заучивая вопросы/ответы собесов, но эт же пиздец. Как они держатся больше пары недель, или таким оьразом и нарабатывают опыт работы? :(
>>37837
Но почитывая треды, я вижу, что зп выше чем у яндекса, и не так ебут при собесах, не так ли?
Оставайся. И никогда не возвращайся
Да, см пик 3 в шапке.
Забыл добавить, картинку добавляются/удаляются динамически во время рантайма.
Ты же понимаешь, что это специально сделано, чтобы злоумышленник не мог поставить путь к любому файлу и спиздить его?
Не, мне нужно было чтобы это путь был в серверной части. То есть сервер и на нем эта директория C://outsideFolder. Нужен был даже не именно абсолютный путь, а любой способ юзать динамичные ресурсы в сторонней папке(не resources/static).
Уже проблему решил через WebMvcConfigurer и метод addResourceHandlers. Кстати, можно как-нибудь это через application.properties прописать?
Вальгалла сейчас заморожена? Только лум и панама кое как пилятся и то непонятно когда будут в релизе?
Я жду только project generiki v rantaijme
Не уверен что до конца понял твою дилемму, но по моему ты обьебался. Ибо дженерики стираются только в рантайме. В байткоде они все есть в полном обьеме. Поэтому через рефлексию, например, ты вполне можешь получить инфу об дженериках через методы типа Class::getGenericInterfaces/Supertypes, или Field::getGenericType.
И даже если рефлексия тебе чего то недодает, ты всегда можешь спуститься на уровень ниже, взять какой нибудь байткод-тул типа ASM или ByteBuddy, пропарсить им байткод классов и извлечь всю нужную инфу. На твоем месте, если б передо мной стояла генерить что-то в билд-тайме по классам и их аннотациям, я б сразу забил на рефлексию и шел бы этим путем.
единственная нормальная тема
ебал твои принципы в принципе
В этом ошибка
первый скрин-как у меня
второй как надо(я так понимаю), у меня супер красным горит ,когда делаю по гайду
Снизу в транспорте была простая пустышка,думал мб пофиксится
наведи мышкой на красное. Выскочит табличка с описанием. Подозреваю из-за второго transport
я недолюблюваю высокобукв
Он же специально так пишет, чтобы у тебя жёппа сгорела.
jshell> class TTTT { public List<String> list; }
| created class TTTT
jshell> TTTT.class.getField("list").getGenericType()
$21 ==> java.util.List<java.lang.String>
Я другой анон, но я не представляю себе, как с таким отношением к синтаксису и конвенциям возможно будет писать продакшен код.
Довольны моей письменной речью теперь, Уважаемые Пользователи анонимной площадки для постинга букв?
А на русском какую неделю пишешь?
пашол нахуй
Да.
Нахуй иди,долбоеб, мы с ним твою мамашу уважали
Или есть?
Наверно в конце года/в начале следующего прыгать на джаву 21. К бут там уже будет 3.3/3.4.
UI во вкатунском проекте бэкендера вообще нахуй не всрался, сваггера хватит.
а как без логгера? В систем аут?
Хочешь - используй, не хочешь - не используй. Ты у нас спрашиваешь, что лишнее в твоём проекте, который ты пишешь для себя?
В целом изучить, как настраивать логбэк или лог4ж, имеет смысл. Это пока приложуха локально задеплоена, ты можешь к ней и дебаггером подлезть, и прочими тулами, и в целом на все похер. А в боевом окружении отсутствие логов очень запросто превращает жизнь команды в ад.
Ну а как понять, какой декоратор мне нужен в конкретный момент? Ну хорошо, пусть будет 100 методов в контроллере
Но в контроллере и так по методу на эндпойнт. Или про какой "конкретный момент" речь?
Ну может быть не один параметр и у параметров внутри тоже могут быть нуллы, а нужно создать конкретный декоратор, где их не будет. Значит нужно либо заиметь эндпоинтов по количеству декораторов, либо как-то ифами разгребать и сохдавать нужный
Т.е. берешь из расширения поля, пробрасываешь их в Gralde-managed properties?
У тебя весь рот в гредле, молчал бы
You can chain as many Flux or Mono instances together as needed using flatMap(), and each new Flux or Mono can depend on the result of the previous one. By chaining them together in this way, you can ensure that each Flux or Mono is executed in the correct order, and that the result of one is available to the next.
Это вообще нормальная практика?
Что не так? Только не рекомендуется делать слишком много мап, да и вообще паблишер лишний раз создавать, а то по производительности может ударить
Я сам не знаю вот и спрашиваю, показалось просто странным флатмап для этого юзать
https://www.baeldung.com/spring-6-http-interface
Мне вот эта штука понравилась, можно выкинуть вонючий feign. Больше вроде ниче и нет.
Не кароче я объебался и ошибка осталась. По какой-то причине она на время тогда пропала. Может потому что я попытался сделать из моно флакс и юзал concatmap хз.
Как это всё выглядит:
firstMono = webClient1.get
secondMono= firstMono.flatMap(
firstMono.dostuff
webClient2.get )
secondMono.subscribe
В таком виде это лишено смысла.
Это как то так должно выглядеть. 2 параллельных запроса.
Mono<T> firstMono = webClient1.get().map(x-> x.dostuff).subscribe()
Mono<T> secondMono= webClient2.get().subscribe()
Если хочешь чейнинг то так
Mono<T> result = webClient1.get()
.map(firstResult -> {
firstResult.dostuff ты похоже пытался вызывать метод у моно, а не у содержимого
return webClient2.get()
});
result либо возвращаешь в виде моно, либо дальше чейнишь. Ну или сабскрайб, если надо просто выполнить (вернуть void)
flatmap работает как и в стрим апи. M<M<T>> -> M<T>
>>Mono<T>
>>.subscribe()
Тут проебался - субскрайб лишний, с ним будет не моно, а диспосабл. Но надеюсь суть ты понял.
Суть то я понял, пасибо анончик. Ток тупой я чет для этого пока-что. Пойду перепишу это всё с реакта, а то умру потом ещё больше функционала так писать
Ну как бы да, ты не путай git-репу и проект на GitHub. Твой код останется у тебя и ты сможешь заново запушить его
Это же просто свалка творчества Васянов, типа питоновских библиотек или плагинов к Идее или я что-то не понял?
Пытался загрузить в Идею примеры кода из Пактовской книжки и там все нахуй обмазано импортами этого говна типа org.apache.commons.codec.binary.Base64 и в мавене это не прописано (еще и я в мавене не разбирался)
Я пытаюсь Java core выучить
Уныло, пиздец.
Читай Хорстмана, там почти нету внешних библиотек. А в том месте, где появляется он показывает какой гемор их подключать без сборщика. Заодно поймешь что мавен тебе нужен пиздец как.
Уныло обмазываться всеми этими фреймворками тестами, сборщиками профайлерами, персистансами, аджайлами, жирами еще до того, как начнешь писать что-то из 1-3 классов.
Изучил гит, который сейчас мне никак не помогает, теперь еще мавен, потом блять JUint какой-нибудь понадобится. Я так никогда не продвинусь =(
Это творчество васянов было актуально во времена Java 1.5-Java 1.6. Потом да, в Java 7-8 уже большая часть нужного появилась в стандартной библиотеке (или в Спринге)
Да я читаю и Хортсмана, и Эванса, и Java Precisely параллельно, потому что мало кто пишет четкие определения для терминов и приходится из нескольких источников собирать.
Да-да, именно такое уныние из 00-х и вызывает сайт apache
Зачем-то Nick Samoylov в своей книжке 2022 года использует все это окаменелое говно.
Значит, идет он нахуй со своей книгой, хотя теоретическая часть была неплохая.
По джава кору написаны тысячи книг. И по закону больших чисел большая их часть - говно.
Нормальных утилит для работы с коллекциями в джаве до сих пор нет, а спринг сильно ограничен.
За дифференцирующими определениями token, expression, statement я залез в книгу про компиляторы. Это было важно, чтобы понимать синтаксис (где ставить ; , {})
Static code и non-static code. Четкая структура, которая есть у class-header
(<access modifiers> public/private/protected <keyword> class <class name> <extends-clause> <implements-clause>)
У Хортсмана вообще в виде аналогий ("ну вот представь, если", "это похоже на то, когда"), это немного не то, к чему я привык в инженерных дисциплинах. Но это можно преодолеть, конечно.
>>39679 (Del)
Заставляют примеры кода от издателя, в которых используются методы классов из библиотек. Неработающие импорты не дают скомпилировать файл примера.
>>39674
>>39676
Спасибо а поддержку, добрые люди!
Java Precisely пока что мне нравится больше всего
>>39721 (Del)
Чтобы выебываться на собеседованиях конечно же
Схуяли? Пусть сначала java core подтянет, поймёт что такое jar, в итоге он сам захочет мавен себе. А не зная java core даже он никогда в жизни нормально не поймёт что это такое и нахуя нужно и как работает
>>39870
>>39872 (Del)
Да отьебитесь вы от человека, душнилы. Пусть как хочет так и учит.
Это в нормальных экосистемах можно начинать учить язык с билд-тулов, потому что тот же cabal init, например, одной командой создает компактный проект с прожиточным минимумом по дилбовой обвязке. А мавен с джавой сразу задирают порог входа в небеса, потому что могут предложить лишь стопятцот архетипов, которыми один хуй никто не польузется, где хуй пойми с какого лучше всего начать и хуй пойми что намешано.
>>39395
Semen, pls
Еще б понимал чего, болезный, позоришься только своим пылающим пердаком
>>39872 (Del)
Эх, пошёл вникать в maven и XML
пиздец, вкатился в бэк через простыни угловых скобочек
С Идеей немного проще, конечно, но в этом случае она не смогла найти и скачать импорты.
Я даже руками искал (через интерфейс Идеи) в мавеновском репе библиотеки, но и там ждал провал.
Что там задирать в мавене? Генеришь дефолтный проект и забываешь про него. Потом копипастишь зависимость - и ты уже продакшен-реди-джун.
Идея, когда дело доходит до менеджмента мавен-модулей, глючная, как ебаная сука. Каждый раз плююсь на нее как первый раз.
Создаешь подмодуль - в диалоге где выбирается родитель она постоянно сует рутовый модуль. Ты ей выбираешь нужный, затем чуток правишь имя проекта, она все равно меняет на рутовый. Ненависть бляяяядь. И сука как стелсово она это делает, крыса... Недоглядеть как нефиг делать.
По ошибке вьебал не то имя у проекта? Положил не в тот парент? Удачи в правке. С первого раза сама идея никогда ничего не переименует и не переместит. Никогда! То переименует артефакт, но не папку. То папку, но не деклароацию в modules.
И ведет она так себя по ублюдочному кучу лет уже. Никто не фиксит, всем похуй.
Да я уже заметил, когда решил просто Maven-артефакт-application создать в Идее и она мне сделала имя GroupId с $ в начале. Без всяких запросов подтверждения ("что-то не так с именем, может передумаешь?") и возможности откатить.
Забить можно, но на собеседованиях тебя спросят про интерфейс и класс в первую очередь
>чем интерфейс лучше класса
Они - не лучше и не хуже, они просто другие, и существуют для других задач.
>можно ли вообще забить на него и использовать классы
Можно. Но тогда ты лишаешь себя бенефитов от использования полиморфизма и инверсии контроля, что рано или поздно стрельнет тебе в ногу.
Так ебать, если он не понимает как работает импорт и как работает classpath, и зачем ему apache commons, на кой хер ему лезть в мавен?
>>39958
Пока что в начале обучения можешь. Потом - нет, интерфейс очень важная часть ооп. Могу порекомендовать почитать Part 1 книги touch of class B. Meyer'а. Разложишь себе по полочкам разницу между классом, объектом и интерфейсом
Наблюдаю проблемы с печатью инфы про аккаунты из БД в сервлет. Есть метод getAccountsShortInfo() который читает инфу об аккаунтах из БД.
Почему то printWriter в сервлете перестает писать любой текст после вызова этого метода (хотя возможно причина не в самом вызове метода). То есть он не пишет данные из БД вызываемые в методе, и так же не пишет обычные любые String после этого (Строка "After database reading")
При этом при дебаге видно, что printWriter успешно собирает ВЕСЬ нужный текст, но сам сервлет отображает только тот текст, что идёт до вызова метода getAccountsShortInfo()
Думал, что данные из буфера не полностью передаются, но методы flush() или close() нихуя картину не меняют
Или еще гипотеза. Ты уверен что проблема - в респонзе, а не в браузере? Может хтмль пришел весь, но браузер его криво отрендерил? Чекал вкладку networks?
Вангую, что если ты строку будешь собирать StringBuilderом и делать только один
>append(StringBuilder.toString()).flush().close()
То всё заработает
Не помогло, всё равно только половина текста
Кстати, вижу вот эти красные ошибки, может и правда чот с браузером не то? Хотя в ебучем Edge та же картина - только половина текста
Вообще не ебу теперь. Поместил закрытие writer в блок finally и теперь сервлет просто пропускает инфу из БД.
КАК НАХУЙ ЭТО ВОЗМОЖНО? КАК ОН ПЕЧАТАЕТ StringBuilder НЕ ПОЛНОСТЬЮ?
в пизду программирование, буду проституткой
Братишка, так всё логично. У тебя функция, которая лезет в бд нихуя не работает. Выбрасывает экспешн. При этом вместо обработки ты нихуя не делаешь. Посмотри в логи приложения в идее, у тебя там наверняка залупа
Кинь код на pastebin я тебе покажу как это должно быть по человечески сделано
Там дохуллиард классов и методов, но вот, основые методы я выделил по классам
Спасибо, анон!
https://pastebin.com/RUazYim3
Я на самом деле просил только код сервлета, чтобы показать тебе как надо было делать обработку ошибок. По хорошему ещё нужно добавить логов/выводов в консоль, это помогает очень сильно. Логгером ещё не умеешь пользоваться? Очень важно в программировании уметь определять где что не так пошло
Смотри комментарии, я не запускал, но примерно оно так должно выглядеть
https://pastebin.com/2vfwhhFH
Так это уже другой косяк. Чето с базой данных у тебя случилось.
Тредом ошибся.
Размер очка вкатунов при каждой версии))
Я надеюсь,все параметры передаются в конструктор?
Мнение? Без опыта все равно меня даже не рассмотрят до собесов
Звучит как - мне нужно вывести спутник на орбиту, подскажите как это реализовать?
Откуда мы блять знаем твой уровень подготовки к запуску сервера? А про файл ты вообще бред пишешь
При чём тут файлы? Тебе надо получить ответ от сервера в формате json, а данные в ответ подтянуть из базы? Если так, пили на спринге rest-контроллер.
>Я не понял, то за зоопарк apache.commons?
ядреное легаси.
>>39668
>Зачем-то Nick Samoylov в своей книжке 2022 года использует все это окаменелое говно.
ты это говно встретишь с вероятностью 95% в любом более-менее серьезном проекте.
при этом сами эти апачевские либы вполне хороши, это набор простейших инструментов которые просто работают. юникс-стайл как он есть, без всякой архитектурной залупы, монтстрообразности, оверинжиниринга и мешанины всего и сразу как в гуаве или спринге. чувствуется что ее писали люди у которых мозги на чистом си работают. там где можно обойтись одним статическим методом обходятся одним статическим методом, а не городят огород из нагромождений интерфейсов для сримов и абстрактных фабрик
Там какие-то дикие коллекции типа Bag interface.
Разве этого всего (улучшенного) нет в JDK начиная с 1.8?
>>"The Java Collections Framework was a major addition in JDK 1.2. It added many powerful data structures that accelerate development of most significant Java applications. Since that time it has become the recognised standard for collection handling in Java"
ну.. такое. Ради этого этого мне импорты делать?
Это, конечно, подходит под описание
>>набор простейших инструментов которые просто работают
Да
Да, просто сделать http-запрос через любую библиотеку.
По айпи адресу машины, на которой сервер. При этом он должен быть reachable
Вот и не вкатывайся.
Город не уточнён = Москва.
Типо вот так http://localhost:8080/file.txt.
В какую папку файл положить ?
Сделать котроллер, который будет дергать логику получения файла и выставить наружу эндпоинт
Уже дошло, нужно было просто положить файл в папку static.
Типо, класс с помощью которого можно отправить запросы на сервер с get и post.
а вменяемое объяснение такого нежелания выйдет погулять?
Расскажи, пожалуйста, о своих знаниях с которыми тебя взяли на работу. + сколько времени понадобилось на ват и какие у тебя исходные данные (учишься/учился в универе или уже пытался учить языки до этого)?
твой тред в /hry/
Ага хуй тебе, так я все и рассказал. Чем меньше вкатышей будет, тем мне лучше по итогу, и так скоро будет борьба с чатжпт за сотыги. А ты лучше оставь это дело, вкат и так всё твердо и четко.
Блять, братишка, ты лучший
Огромное тебе спасибо, благодаря тебе я обнаружил в чём косяк. Мира тебе и твоему дому, друг
Так ты уже устроился, что тебе терять? С боевым опытом ты уже никуда от рекрутёров не денишься если пол года - год проработаешь.
Меня никто не остановит вкатываться, просто хочу ориентировочно просчитать сколько времени у меня на это уйдёт
Я щас год отработаю, а ты потом себе два накрутишь по советам от инфоцыган. По итогу будем вместе бороться за лычку мидла в рога и копыта, а мне этого не надо
Просто берешь и подаешься во все 26 мест. Без удаленки без опыта тоже подаешься(подрочить собесы). С опытом в год тоже подаешься. Через годик вкатишься скорее всего.
Без проблем, чмоки в носик
>>41681
Что ты пытаешься сделать? Папка resources для статических файлов нужна. Если извратиться и предположить, что ты запускаешь jarник, то можно в архиве пеоезаписать файл, будет у тебя в него запись. Но юзкейс такой очень сомнительный, удаление гланд через жопу. Лучше создавай файл в отдельной директории и пиши туда
Я в универе на старших курсах всякое пробовал, жаба больше всех понравилась. Про то, что на ней много работы уже потом узнал
Я пробовал кроме жабы плюсы, пхп, питухон, жс, голанг. Жаба мне понравилась больше всего.
О, гляди ка - не врет. Сразу видно что вкатился. Уже проявляются первые симптомы анальника.
>>42105
Короче, когда конфигурируешь SecurityFilterChain, там метод failureHandler(AuthenticationFailureHandler afh), нужно передать объект класса который имплементирует этот интерфейс и оверрайдит метод onAuthenticationFailure. Там проходит обработка зафейленной аутентификации. В параметрах два сервлета и сам экспепшен фейла. Что отреагировать на фейл ауфентикации юзается метод сервлета респонса response.sendRedirect(String location). Но делается это без аттрибутов. Мне нужно разобраться, как имся два сервлета надыбать эти аттрибуты.
прокидывать туда, где это может быть обработано. Либо выкидывать чтобы приложуха упала если это невозможно обработать
чел, мы на восьмой жабе. Продвинутые на 11
кидать рантаймы, обрабатывать централизованно в одном месте
>>На 21-ю лтс активно покатятся.
Почему ты думаешь что ради лума станут перепрыгивать несколько лтс версий? До 2025 дотянут, а там видно будет нужен ли этот лум вообще.
Документацию пишут для вообще всего.
Может быть проблему-то они и решили, причём, в какой-то мере элегантно (без миграций и изменений API), только суть вообще не в сборке, их решение — по сути своей костыль. Корень проблемы в монорепозалупе.
Эта хуйня еще актуальна?
Актуально ли выучить за минуту пять аннотаций, полностью аналогичных спринговым?
А данные я откуда получу? Ну создал я комплитаблфьючер, напихал туда цепочку стейджей со своими говнолямбдами. Теперь у меня есть объект фьючера, который знает про то, какой код надо выполнять. А чтобы получить данные, всё равно надо вывать get() и ждать.
Тебе надо написать функцию и вернуть ее, пускай с ожиданием ебется пользователь.
Не знаю че там в фьючерсах, но должен быть какой то .map в котором ты пишешь дальше че там тебе надо.
В webflux это выглядит примерно так
public Mono<Yoba> getYoba() {
return getAsyncHyitka()
.map(ozhidaemoeDto -> ozhidaemoeDto.getYoba())
}
>Тебе надо написать функцию и вернуть ее, пускай с ожиданием ебется пользователь.
В этом вся суть фьючеров ну кроме чейнинга нескольких функций? Ну писос, а я-то думал, что это ультимативное решение всех проблем мира.
Улучшается утилизация ресурсов, некоторые функции вообще могут не вызываться. Но никакой особой магии там нет.
Стоит ли ради этого переебашить весь код в процедурные портянки? Зависит от нагрузки и задач.
Аноны, это правда? Работаю в вебе уже несколько лет без вышки отчислился на первом курсе, но не с джавой. Пиздец как руки опускаются после такого, когда понимаешь, что все твои скиллы и знания никому не нужны без формальности в виде корочки.
для западного барина наша "вышка" это уровня прослушанного курса в индусском "университете".
Какой-нибудь сертификат OCAJP будет весомее диплома мухгу
А тебе сколько лет?
You're fucked then. Хочешь работать в ниишечке, на заводе или ещё какой муниципальной залупе - диплом нужен. Другой работы не осталось, бодишопы свалили в сербии, за оставшиеся крохи сражаются мидлы и сеньоры
оптимистично...
Если в хорошем вузе реально изучаешь то, что тебе преподают, то никакой обосранный опыт веб макаки даже близко не встанет.
ну изучит он матанализ и всякие численные методы. И что с этим делать, если у него нормального формального западного образования нет?
А если как 80% выпускников вузов ничего не изучаю и пинаю хуи?
да
Та же хуйня. Дропнул на 4 курсе. Никогда бы не подумал, что она может пригодится спустя много лет на вкате в гос шарагу, вкатился по итогу в местный мухосранский аналог ерата
И вот я уже было забил, но тут пыня начал мобилизацию и показал хуй с айтишной отсрочкой всем, у кого нет вышки.
>>Если в хорошем вузе
Таких штук 5 на страну. Да и в вузике обычно нет времени учиться, надо зачеты, лабы, курсачи сдавать.
>>43458
Ехать на Кипр и устраиваться в геймдев какой-нибудь, где это может пригодиться.
На западе работает так:
Нет диплома = потолок по зп в N доллларов. Если это до мидла/сеньёра
Есть диплом = потолок по зп в N доллларов. Если это до мидла/сеньёра.
Все должности дальше либо заблокированы без магистратуры либо берут но там сильно урезают зп.
Кароче если ты планируешь рости выше сеньёра на западе - пойди на заочку в плохой вуз на хорошую (в плане для того чтобы вписать в резюме) специальность. И отсиди там до корочки
хз
Это дюк?
>И отсиди там до корочки
Хорошее выражение. Мясо на сковороде до корочки запекается, а скубент в универе отсиживается. По итогу шо то непробиваемая хуета, шо это.
В смысле блять создать? Ты с помощью хибера создаёшь таблицу на старте приложения? Ебать ты конченый.
Любители ORM все ебанутые нахуй, про миграции никогда не слышали.
Двачую этого:
Те, кто понял жизнь, хуярят на Groovy.
Видос не смотрел, но есть же Micronaut, Quarkus, хули им этого не хватило.
Бля пацаны, вот реально, JOOQ поприятнее будет.
Его одновременно с хибером можно использовать. Более читаемо.
А что в ней сложного, если ты не в топ 10 вузов учился? Я вот вообще без напряга закончил. Проебывался в общаге, пока не останется пару недель до начала сессии, потом трайхардил и снова хуй пинал. Ну мне еще с ковидом повезло правда, на удаленке закрываться было в разы проще.
Мне 30...
интегрироваться с хуйней
Кадровикам похуй что у тебя в трудовой, главное пройти отбор рекрютера и собесы, изи
Интеграция с одной из государственных систем с погружением в замечательный мир ЭЦП через Криптопро, SOAP и корпоративные шлюзы безопасности.
подпись заявления не прошла из-за пропавшего сообщения в кафке. Есть только обфусцированные логи с прода по этому инциденту
так и есть, скипай
Ну если в твоём случае реально никак, то окей. Так-то конечно иммутабельные объекты это получше, но твой кейс мы не знаем
Если по другому никак, то это не интернал пакет, а значит все допустимо и даже поощряемо. А если интернал пакет - то ты долбоеб. Ну или у тебя упор в перформанс, а значит для тебя применяются правила не джависта, а байтоёба, и тебе тоже можно.
я тя вздрючу
ты жыд?
>И на хост копировать джарник + Docker + docker-compose.yml ?
Это - не вопрос хранения, это - вопрос дистрибуции. В простейшем случае просто заливают это все в мавен и докер репозитории, откуда их потом относительно просто скачать на хосте.
>>44400
Докер композ тебе не нужен в джарнике. Что ты там с ним делать будешь - сам подумай?
В таргет докер композ положитть относительно просто - достаточно просто обьявить его мавен-ресурсом. В этом есть даже свои бенефиты - можно включить фильтеринг и подставлять в композ версии собранных имаджей и джарок. Но опять же - вопрос дистрибуции не ограничивается складыванием все в таргет.
может есть какой-то индустриальный стандарт, где хранить - в руте, в src/resources или в src/docker
Во всяких кубернетисах эти докер файлы достаются прямо из гита?
Стандарты есть, но не на то, на что ты ищешь.
Есть конвеншен - хранить ресурсы приложения, к которым должен быть доступ из класспафа, в src/main/resources
Есть конвеншен - складывать все, генерируемое билд-пайплайном, в таргет.
Докер композ, в зависимости от его назначения, может подпадать под разные вышеописанные категории. Например: докер композ может быть частью интегрейшн-тестов на testcontainers, и тогда его придется положить в src/test/resources, чтобы тесты потом могли его найти и стартануть. А в твоем случае этого не нужно.
вобщем так помогло
но я мидол
Какая же это хуйня - чувствуешь себя ебаной вэб макакой, методом тыка подбирать нужные символы в ебаном XML
Ни нормального описания ошибки ни логов процесса
Спасибо, бро! В логах Идеи не совсем то, что нужно.
Вобщем, оно билдится без ошибок, но в pom'нике все равно выбрасывает ошибку, что этот плагин не найден.
Имя артифакта ему не нравится? Я тупой
попробуй посмотри в самом репозитории по этому урл, есть ли там джарник. Бывает что помник есть, а джарника нет
Дело в том, что некоторые люди начали выдумывать опыт работы в вымышленных компаниях, чтобы обойти фильтры HR. Они создают компанию с названием DigitalAbu Inc. (США, 2-летний контракт) и таким образом обманывают фильтры HR!
Но конечно перед этим заучив все вопросы или записав себе шпаргалки : https://itvdn.com/ru/blog/article/300-devops
Я сам столкнулся с этой проблемой и не хотел принимать самозванцев в свою команду. Поэтому я начал задавать вопросы, связанные с ECMA, RFC и IEEE, а также алгоритмические вопросы, которые реально сложные и покажут мне что человек реально умеет решать задачи, а не просто зубрить как очкастая студентка.
У меня также есть ситуационные вопросы, на которые может ответить только опытный человек, то есть я описываю проблему и он говорит как ее можно было бы решить, чувак с курсов на это не ответит.
ЕБУ САМОЗВАНЦЕВ КАК МОГУ
Отчищаю рынок от мошенников
Сижу в чате лидов, так как я поступают очень многие.
Повторяю, самозванцев стало очень много, реально много.
Вас таких малый процент, мне ничего не мешает придумать опыт работы, отточить его и заучить вопросы для позиции миддла 🤫
Как получаю стабильные приглашения на собесы, так и буду получать, не имея реального опыта.
Зачем тебе тогда фильтры HR или почему ты не перепишешь фильтры HR? Ты точно лид?
Еще студенточки с плохим зрением ни за что пострадали
2 пиздабола в лице hr и меня всегда находят друг-друга
И че, много кого захайрил?
>>RFC реально спрашивают.
Ты прям так и спрашивает процитируйте мне второй пункт и рфц 228 и четвертый из рфц 1488? Не боишься что они просто загуглят на месте?
Как договоритесь с фронтом. На бэке это делается в одну строку, на фронте - не всегда с их дегенеративными фреймворками.
Чтоб вот там была условно глава по использованию set, глава по листам, глава по map? Можно с базовыми приколами от стрингов, интеджеров и т.п..
Я читал Лафоре когда-то давным давно, ща по новой вкатываюсь, но я помню что там на протяжении половины книги автор пытался переписать ArrayList в LinkedList своими усилиями. Это немного не то что я хочу. Точнее много не то.
Я помню что одно время у вас в шапке висела ссылочка на какой-то простенький сайт с простенькими вещами (не уровня leetcode/codewars), а вот там прям главы были по стрингам, коллекциям, но простенькие задчки такие. или не у вас.
чел, ты новости давно читал?
1) Уход 10000 компаний из рф
2) Сокращения в топ компаниях и средних
3) 100000 вкатунов
4) ЧАТГПТ
typeMapper.addTrustedPackages("ru.project.eventTypes");
Map<String, Class<?>> mappings = new HashMap<>();
mappings.put("loginSuccess", LoginSuccess.class);
mappings.put("loginFailure", LoginFailure.class);
Кидает эксепшен:
Caused by: java.lang.IllegalArgumentException: The class 'loginSuccess' is not in the trusted packages: [java.util, java.lang]. If you believe this class is safe to deserialize, please provide its name. If the serialization is only done by a trusted source, you can also enable trust all (*).
Как правильно добавить все это доверенные пакеты? Путь должен быть прописан как приложении продюсере или приложении консюмере? Хотя я и так и так пробовал, но не заходит.
дякую, это оно
>>45466
из всего этого только илонмаск с четвертым пунктом напрягает (первые 3 пункта это цикличная политота, цикличная политота + цикличность рынка, цикличность рынка). Но и то с оговорочками. Расписывать всё лень, но у меня есть примеры из личной жизни когда подобная автоматизация потом же откатывалась на прежние позиции. Мамка на железке работает, на позиции которую можно было автоматизовать еще лет 20 назад, и таки пытались. Но потом выросла масса побочек, в итоге решили отказаться от этой идеи (и даже вернули набор в местном ведомственном мухосранском училище на ее позицию).
Поэтому смешно кажется что запросом в гпт будут писаться программки. Тот же Tabnine попробовал, вот в нем я вижу будущее - это же ведь просто сумма гугла и интеллисенса, а не индусокод, написанный бездушной программой, на которой потом вылезают баги в виде отстутсвия связей с реальностью, прежде всего ООП.
Чатгпт разве что тебя на двощах заменит. Будет за тебя говнопасты на двощах генерить.
Это язык клиента, кретин
Не ебись с десериализаторами, через MessageConverter это проще делается.
https://docs.spring.io/spring-kafka/docs/latest-ga/api/org/springframework/kafka/support/converter/JsonMessageConverter.html
Так я и так через него делаю. Все варианты пути испробовал танцуя с бубном, нихера не работает.
Читай в мапу.
1. Тебе не нужна ентити, чтобы парсить json. Спроси у чатгпт про метод readTree в Джексоне.
2. Неизвестные поля можно игнорить при десериализации в ентити, початься с чатгпт как настроить джексон
3. json-ы можно параллельно сохранять в nosql базу - когда поймешь, какие там поля, тогда и напишешь энтити, а данные будут уже заботливо дожидаться тебя на диске. Это я в кабанчике прочитал, называется schema-on-read. Охуенно?
ебланище? маппинг это всегда отдельный этап
Классно, да.
Совсем не знаешь? Сохраняй в текст. Знаешь хотябы названия полей? Сделай поля Object
Если вы не знаете, какие поля будут присутствовать в JSON-ответе, вы можете использовать библиотеку, которая позволяет парсить JSON в древовидную структуру данных. В Java вы можете использовать библиотеку Jackson или Gson для этого.
Например, в библиотеке Jackson вы можете использовать класс ObjectMapper для преобразования JSON-строки в объект типа JsonNode. JsonNode представляет собой древовидную структуру данных, которая может содержать любые поля и подобъекты из JSON-строки.
Пример использования библиотеки Jackson для преобразования JSON-строки в объект JsonNode:
java
Copy code
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
// ...
String json = "{...}"; // JSON-строка
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(json);
// теперь вы можете использовать методы JsonNode для получения доступа к полям и подобъектам JSON-структуры
Вы можете использовать методы JsonNode, такие как get(), path(), elements(), fields(), чтобы получить доступ к различным элементам JSON-структуры. Например, get("field1") вернет значение поля "field1" в JSON-структуре, path("field1.field2") вернет значение поля "field2", которое находится внутри поля "field1".
Также обратите внимание, что если JSON-строка содержит массивы или объекты, вы можете использовать методы JsonNode для получения доступа к элементам массивов или подобъектов. Например, get(0) вернет первый элемент массива, а get("subobject") вернет подобъект с именем "subobject".
Надеюсь, это поможет вам разобраться с парсингом JSON-ответов в Java, когда вы не знаете заранее, какие поля будут присутствовать.
Ты пидор, а твоя мама шлюха.
Подскажи как правильно. Как тогда заместо десериализатора использовать? Как его нахрен отключить из пропертиз? Напиши, плиз, как правильно.
Чел, тебя троллят.
читай мурзилки направление я тебе дал
я тя вздрючу
Написать для этого логику
А зачем в реальном проекте нужен таймстемп? Чем он лучше человекочитаемого формата?
Стоит пет для портфолио делать реактивным?
Нет.
Реактивный пет клиник? Пожалей собачек
Хотя бы тем, что можно форматировать в различные временные зоны, в зависимости от ситуации.
Не Date, а OfsetDateTime.
Нет, даже если выглядит как говно.
Можно. Но только никому не показывай.
Так тут дело не в местных экспертах, а в ситуации. По итогу выясняется, что нужно быть до кучи креативным менеджером, разработчиком игр, тестировщиком, фронтэндером и маэстро минета. Чето дохуя движений ради минимального выхлопа.
скрой лишние
Скоро на собесах оператор ChatGPT будет проверять, за сколько вопросов можно сгенерить твой пет. Если меньше 10 - ты пойдёшь нахуй
Ну на счет того, что во всем лучше, я не согласен, хотя да, во многом действительно лучше.
Смысл Джавы и спринга в том, что:
1. На них дохуя всего написано (Джава раньше шарпа появилась)
2. Дохуя программистов (Прям пиздец как много, в разы больше чем шарпистов-.Netчиков)
3. Простота входа (Java проще шарпа, просто потому что меньше фичей)
4. Хорошая совместимость в Linux платформой, а значит сервера дешевле (Шарпы не так давно смогли в совместимость с Linux, с выходом .Net Core да и то пока что херовенько, а покупка винды для серваков - такая себе затея: 1. Дорого, 2. Мало специалистов => Дорого)
5. С джавы существующему проекту проще перейти на Kotlin или Scala, чем на C#
6. Открытость. В джаву правки предлагать может все сообщество, а C# это игрушка майкрософт и как они там решат, так и будет
В итоге на джаве получается дешевле писать софт, даже не смотря на то, что программисты могут стоить чуть-чуть дороже, так что все просто - джава тупо дешевле бизнесу. Но как язык, C# пизже, это да
>>30528
Да на это задание еще и дедлайн 4 дня, хз даже, успею ли. Монолит сделать конечно было б в разы проще.
Я думаю, тут можно много допущений сделать и над кодом особо не потеть. Надо только выстроить взаимодействия и представить в голове, как это должно работать. Хотя я хз, количество микросервисов, которые у меня вышли конечно пугает, тоже кажется, что как-то дохуя всего. Значит, слать их куда подальше?
"напишите api". Видимо это только пустые контроллеры со сваггером.
Но тут слишком много и слишком много непонятного. Я бы забил. И от микросервисов меня воротит
Ну по идее да, я правда вынес сервис, отвечающий за авторизацию и выдачу токенов, отдельно. Слышал, что зачастую это делают прям в гейтвее, но чет решил как на картинке сделать.
Ну в таком случае секьюрити конфигурить все равно же нужно будет?
Это что ли свой инстанс постгреса на каждый микросервис разворачивать?
Микросервисную архитектуру придумали больные люди, канеш.
у меня компутер по ресурсам не выдержит 6 постгресов и 6 жаб
Ну походу, насколько я слышал, делать расшеренный инстанс между несколькими сервисами - хуйня идея.
>напишите API простого магазина
А шизоуебище побежало за 4 дня поднимать стартап с 6 постресами.
Нахуя там постгрес, если только контроллеры со свагером нужны, шиз ебаный?
вот до чего прогресс дошел. а еще каких-то 15 лет назад на фриланс.ру на создание онлайн-магазина под ключ давали 10 дней и 300 баксов.
берёшь cms интернет-магазина
@
настраиваешь
@
получаешь свои 300 баксов
Одинэсники тоже не с нуля каждое предприятие делают
Так и сейчас можно по-быстрому набросать простенький магазин даже без знания фреймворков. Просто использовать конструкторы какие-то, картинки, шрифты поменять и готово. Уверен, что на жс с фреймворками, это тоже достаточно быстро можно написать. Просто это не будут микросервисы.
>Кажется, будто хуйню какую-то сделал...
Картинка норм. Но так то ты еще нихуя не сделал, чтобы оценку давать. Такую же картинку ты бы мог откуда нить с интернета спиздить - это самая типовая дженериковая микросервисная архитектура.
берёшь спринг
@
так, нужно прочитать 300 страничное тз и спроектировать бд и интерфейсы
@
на это уходит пара тройка месяцев
@
осталось всё это реализовать
@
на это ещё пара лет минимум
ну это уже тестировщики виноваты, не оттестировали вовремя хорошо. ну и на железо как всегда бабла зажали
>Микросервисную архитектуру придумали больные люди, канеш.
ну а если серьезно, как это говно до сих пор не сдохло и кто-то всерьез еще строит приложения под эту шизоидную концепцию?
помню на каком-то древнем хайлоаде, еще в самом начале хайпа этой параши кто-то из архитекторов крупняка сказал что по суммарному опыту на микросервисаы нужно переходить если у вас в команде не меньше пятисот технарей, если меньше то просто нет смысла.
>Это что ли свой инстанс постгреса на каждый микросервис разворачивать?
Это какой шиз придумал?
>Микросервисную архитектуру придумали больные люди, канеш.
Не. Больные люди ее распространили.
Программисты - они как крысы. Во имя галочки в резюме распространят любую болезнь.
> еще нихуя не сделал, чтобы оценку давать
А когда можно будет давать? Я ж по сути хотел для начала определиться с архитектурой, а следующим шагом уже идти и реализовывать это все.
> Такую же картинку ты бы мог откуда нить с интернета спиздить
Ну я не пиздил, всю эту хуйню сам в редакторе нарисовал. Само собой, я уже видел что-то подобное в интернете, так что можно сказать, что сделал по аналогии.
Просто фулл тестовое не уместилось на скрине, но я же об этом упомянул в первом сообщении.
На пикрил то, что не уместилось.
>API должен быть написан с помощью микросервисной архитектуры
дом труба шатал. Что за чурки писали
Как с помощью микросервисной архитектуры можно писать api. Что вообще означает "написать api"?
>Я ж по сути хотел для начала определиться с архитектурой
Так нету ж нихуя. Где какие сущности? Где какие схемы данных? Где какие бизнес-функции (кто из сервисов что умеет делать)? Что, как, куда и когда по кафке гонять будешь? Как будешь обеспечивать консистентность всего этого? Вот это вот еще можно оценивать. А картинка - ну красивая, че.
Ну схемы, какими они должны быть, в тз же есть. Что примерно должен уметь каждый сервис - тоже. А насчет кафки, я изначально задумывал, что у меня будут ссылки в отзывах на определенный товар или в ордерах будет ссылка на юзера, который их сделал, с помощью кафки сервисы будут слушать изменения и, допустим, при удалении товара, удалять и отзывы на него. Что именно по кафке будет гоняться хз, как будто мне там и стринги хватит.
Рыночек порешал. Тут наверное подразумевается, что надо с помощью чатжпт сделать. Тогда мб за 4 дня можно и успеть.
Ты охуел? Какие нахуй 4 дня сука? Насколько нужно быть опущенным хуесосом, чтобы выполнять тестовые длиннее 30 минут?
spring.kafka.consumer.properties.spring.json.trusted.packages=*
или
spring.kafka.consumer.properties.spring.json.trusted.packages=org.example в котором лежит LoginSuccess
Хуесос, ты так и не ответил, зачем там постгрес нужен?
>>Java проще шарпа
>>просто потому что меньше фичей
Нет, шарпомух, не по этому.
Фич в джаве больше чем в шарпе, только они не в базовом пакете лежат, а раскиданы по либам. можно сказать что и котлин - плагин для джавы, его можно подключать и использовать в уже готовом проекте
В джаве есть спринг с запуском любой магии волшебной аннотацией, а в шарпе такого нет и придется ебаться с настройкой любой ебалы самостоятельно.
>А вместо кубера юзается вебсфера.
Так это просто две разные реализации JavaEE сервера приложений.
Ну не я принимал решение о хранении, но для разработки удобнее, чем ебаться с десятком репозиториев.
Да и монорепа это вроде 1 репа на все проекты/команды, у нас только наши микросервисы. У соседней команды своя репа с ее сервисами в рамках того же проекта.
Как это выглядит с отдельными репами на каждый микросервис? Делаешь по 5 МР на каждую таску?
> Виртуальные потоки, которые появились в Java 19, продолжают оставаться в статусе Preview API (предлагается финализировать их в Java 21). Изменений API, связанных с проектом Loom, в этом релизе нет
АХАХАХАХАХАХХАХАХАХАХАЗХАХЗАХАХАХАХХАХАХАХАХАХАХАХА
Да, и?
Аноны - олдфаги, скажите, на джунов всегда такие тестовые давали? Лет 6 назад вкатун сошел на собес, ему аналогичное требовали сделать? Или это реалии современного рыночка?
Да.
А где именно оверинженеринг? Что поменять?
Я еще тесты не проходил, лол. Скоро закончу пет, и начну изучать как его тестировать.
Не понял, а что мешает написать тесты, если у тебя филд инжекшн? Есть же @mockbean или @injectmocks, можно с помощью них сделать моками филды
Тесты не нужны. Хороший код тестирования и комментариев не требует.
мохито через рефлексию умеет подставлять моки в приватные поля
Мне на собесе кабан говорил, что там какое-то преимущество есть в конструктор инжекшн, связанное с циркулярными зависимостями. Не помню точно, че он там говорил, но вроде, если у тебя происходит инжект в конструкторе, то циркулярные зависимости недопустимы в принципе.
Да, хочешь циклические зависимости - ебашь автоваир в поле, по другому - никак.
>если у тебя происходит инжект в конструкторе, то циркулярные зависимости недопустимы в принципе
Что не сработало?
там для этого достаточно вопросик поставить. Ну и этим сахарок котлина не заканчивается, мне почему-то запомнилась возможность создания дата классов и добавление дефолтных значений для конструктора, но я очень поверхностно смотрел котлин, уверен, там еще приколы какие-то есть.
типа если будет через поля, то спринг разрулит циркулярные зависимости и это плохо?
Ну типа. Если еще проперти поставишь, что допускаются такие зависимости, тогда через филды спринг разрулит, а через конструктор - нет. А чем плохи такие зависимости, чатгопота пишет: пикрил
Мне кажется можно просто сделать гейтвей, аус сервис, стор сервис, нотификейшн сервис без всяких кафок. Всё что связано с магазином, товарами, покупателями в монолит. Микросервисы соблюдены, ебалы меньше. Но задание всё равно объемное какое-то. Такое ощущение, что из-за вкатунопокалипсиса галера хочет найти джуна с навыками миддла за 30 тысяч.
сделал транзакцию ридонли может. Или начало что-то падать в транзакции и транзакция откатывается
>Мне кажется можно просто сделать гейтвей, аус сервис, стор сервис, нотификейшн сервис без всяких кафок.
Да ладно, нихуя себе
На вторые сутки до тебя дошло, чел.
Стоит аннотация @Transcational, так как в энтити одно поле @Lob. Но я абсолютно ничего не менял. И то, что еще недавно работало, просто не работает. Причем другие энтити, которые методы удаляния которых также помечены как транзакшионал, работают прекрасно. Даже все таблицы из бд удалил и заново заполнин, нихера.
Более того, скорее всего там только гейтвей и нужен.
>Такое ощущение, что из-за вкатунопокалипсиса галера хочет найти джуна с навыками миддла за 30 тысяч.
А таковы реалии рынка и есть. Если контора и берет к себе вкатуна, то это должен быть вкатыш-вундеркинд. 100500 откликов на вакансию позволяют им подобным образом охуевать.
А почему тест с @injectmocks не юнит тест?
Лог в консоль есть. Видны все sql кроме делетов из этой таблицы.
>>48678
>>48652
Короче, вспомнил, что поставил у родительской энтити FetchType.Eager. И из-за этого перестало удалять. Хуй знает почему это так, но я убрал эту eager, и все норм (благо оно оказлось мне вообще не нужно).
Как вообще удалять когда этот фетчтайп стоит? Вилкой вручныю каждый раз и родительской энтити сначала убрать, только потом удалять через репо? Пиздец конечно.
Тут всё тестовое нахуй не нужно. Тестовое либо на максимум полчаса даётся и условие пишется нормально, либо оплачивается. Либо гарантируется трудоустройство после него. А тут скорее всего его никто даже читать не будет.
Как узнать какие методы объекта А вызываются? Причем не в рантайме, а которые просто есть в коде, декларированы.
Как такое через рефлексию сделать?
Обращайся.
Фио
Должность
Скиллы
Образование
О себе
:/
айти индустрия находится в процессе клинической смерти.
https://habr.com/ru/news/t/724094/
Половина вакансий фейковые, как минимум. В резюме нужно быть волчистым и рисовать себе 5 лет опыта минимум. Пиздеть как не в себя. Но в любом случае перспектив тут никаких
Может у тебя опыт неинтересный или с гэпами? Или ты там каждый год прыгал по вакансиям?
Да, читай мурзилки, там про это есть.
Побрей хуй и яйцы и сделай ональную клизму.
7 вообще-то
Вау, спасибо.
Или для каждого метода своя ссылка типа StringBuilder ?
Кому как нравится.
А как же выделение памяти, например я вызову несколько методов этого класса которые использую эту переменную ?
Для чего это тебе?
Предполагается, что при обращении к одной ссылке разные методы в один и тот же объект будут записывать общие данные: первый метод что-то записал в StringBuilder, второй добавил, третий ещё что-то добавил. Если надо, чтобы методы работали независимо с разными объектами, надо создавать отдельные ссылки. Если надеешься сэкономить память, создавая только одну ссылку, брось эту затею.
А у меня это говно перестало апдейтить, вызываешь save на существующей записи и оно создаёт новую. Это с обновлением на spring boot 3/Hibernate 6 так стало и непонятно как чинить
ваще циклические зависимости - это практически всегда косяк в архитектуре. они не нужны. нарушение третей нормальной формы, как сказали бы в соседнем треде.
сервису заказов надо отправлять сообщения, а сервису сообщений нужен последний заказ юзера. Что делать?
Хахаха повелся,я тебя затролила ахаххкхкхах
>сервису заказов надо отправлять сообщения, а сервису сообщений нужен последний заказ юзера
Сначала, разбираться, почему так получилось.
В общем случае, любая цикличная зависимость разрешается одним из двух способов:
1. Либо инверсия зависимости (выделается какой то третий компонент, через который развязывается цикл)
2. Либо мердж этих двух штук в одну.
Как конкретно в этом случае поступить, надо смотреть. У меня например, первый вопрос который возникает, это "с какой стати сервису сообщений нужны заказы юзеров".
>"с какой стати сервису сообщений нужны заказы юзеров".
требование что если у юзера есть заказ - добавлять в сообщение информацию о его статусе
А что вообще такое у тебя "сервис сообщений"? Какую роль он выполняет?
В моем представлении, он должен выполнять инфраструктурную роль посылки уже кем то сформированного сообщения по тем каналам связи, которые он поддерживает. Тогда и дилемма отпадает сама собой - пусть это требование выполняет тот сервис, кто формирует текст сообщения (сервис заказов).
Ну можно наверное сделать какой-нибудь мессадж постпроцессор, который потом настроит дефолт сообщение в соответствии с требованиями
Да ну нахуй. Интерфейсы коллекций - параша полная, их бы по совести с нуля переписать давно пора. Сделали бы Collection API 3.0, с явной поддержкой иммутабельности/персистентности. И не поверю что не могут из-за обратной совместимости: когда то же состоялся переход от векторов и Hashtable в сторону текущих Collection API.
Тут SortedSet::addFirst будут кидать эксепшен, вполне вероятно, что началась ментальная гимнастика, которая приведет к тому, что у иммутабл коллекций будет падать метод add
Так он и так падает щас. Не суть. Суть в том, что у иммутабельных коллекций в интерфейсе вообще не должно быть метода add.
Попытался еще поспрашивать по поводу этого тестового у эйчарки. Говорит, что прям это все надо реализовать, то есть анон, который предположил относительно простой генерации апишки свагером, не угадал. Спросил, сколько микросервисов вообще ожидают на выходе, ответ: сложно сказать. Короче мутная какая-то хуетень, скипаю нахуй. В чем я не прав?
прав
>чекед исключения - это норма
Это очень спорное утверждение. Я, например, так не считаю. Чекед эксепшены в реалиях джавы - полная шляпа. Они становятся лютым геморроем когда дело доходит до лямбд. Еще, они имеют тенденцию просачивания в интерфейсы и засирания API бессмысленной инфой.
Забавен также тот факт, что на уровне рантайма всем похуй на тип эксепшена - они там все анчекед. Ушлые люди этим пользуются, и наебывают компилятор всякими SneakyThrows'ами из ломбока.
почему легаси?
Я знаю что очень вероятно будет генерироваться эксепшен, и я хочу чтобы пользователь либы не забыл обработать этот эксепшен
И пользователь из-за выработанной годами привычки поймает его, обернёт в RuntimeException и кинет дальше.
>>почему легаси?
Заставляет писать код в стиле жава 7. С циклами, трайкечами и прочее поеботой из нулевых.
>>я хочу чтобы пользователь либы не забыл обработать этот эксепшен
Ты просто заставляешь его писать тра-кетч, не более. Если захочет - обработает. Задокументируй лучше подробнее, чтоб пользователь понимал когда прилетает эксепшен
> Задокументируй лучше подробнее
А потом забываешь один из 500 постулатов документации и встречаешь дебаг в 3 часа ночи.
Пустой кетч — моветон. Исключение в любом случае надо обрабатывать, либо утвердить, что оно не должно вылетать, повесив @SneakyThrows.
Чекен и анчекед эксепшены, хоть, по виду и очень похожи, являются фактически совершенно разными конструкциями.
Непроверяемое исключение — это ошибка в работе программы. Программа прерывает своё выполнение в этом случае и просит разработчика решить проблему.
Проверяемое исключение — это форма ветвления. Это невероятно мощный инструмент, который фактически представляет из себя множественный возврат. С помощью него создаётся точка, в которой исполнение программы расходится кардинально. Можно использовать эту штуку по-разному, но, всё же, лучше использовать в соответствии с семантическим значением конструкции — для обработки исключительных ситуаций, которые выбиваются из нормального хода программы, но, при этом, всё ещё являются нормой, при которой программа должна продолжить работу в штатном режиме.
>АХУЕТЬ
добавление пары никому ненужных коллекций к существуующему зоопарку стоит таких эмоций?
>Я, например, так не считаю.
также как и создатели самой жавы. это всеми признаный архитектурный проёб который к сожалению нельзя уже никак исправить.
>Проверяемое исключение — это форма ветвления
Хуево быть тобой, хули.
Всем еще десять лет назад было ясно, что экесепшены для контрол флоу - моветон ебаный. Не говоря уже о том, что в реалиях джавы это еще и дорого - собирать ебаный стектрейс только для того чтоб ветвиться. С этим мирятся только в веб серверах, где ради ошибки прерывать процесс тупо нельзя. Ну в тестах еще. Все.
Но даже если на это забить - в реалиях джавы чекед эксепшены все равно хуйня из за лямбд и стримов, которые превращаются либо в трай-кэтч месиво, либо сники-throws-лицемерие. И я еще не говорю про просачивание чекед эксепшенов в интерфейсы - такие концепции говнокодер типа тебя скорее всего даже и не осмыслит.
>Чекен и анчекед эксепшены, хоть, по виду и очень похожи, являются фактически совершенно разными конструкциями.
срыв покровов итт
>Непроверяемое исключение — это ошибка в работе программы. Программа прерывает своё выполнение в этом случае и просит разработчика решить проблему.
ну вот в книжке написано, что вызывать через throw new NullPointerException() не надо, потому что это ошибка, которую программист должен не допускать. т.е. как я понимаю, если я хочу обращаться к методам объекта, то мне надо сначала проверить что-то типа if (obj != null) obj.getSomething(), а не вызывать эти методы в try/catch и не отлавливать их. соответственно, исходя из этого, я не понимаю в каких случаях я должен создавать свое исключение extends RuntimeException, если я их не должен отлавливать, а должен не допускать в принципе? т.е. какой смысл вообще наследоваться от RuntimeException мне?
в той же книжке даже пример приводят на основе Exception. книга если что java полное руководство шилдт 12 издание
>к сожалению нельзя уже никак исправить.
ИМХО конкретно этот проеб исправить относительно просто. Как поломается обратная совместимость, если просто перестать их чекать? В рантайме они и так все анчекед.
по сути разницы нет, кидаешь ты стандартный RuntimeException или наследованный от него. Но с особым MySpecialRuntimeException появляется возможность отловить только его, что в общем может понадобиться
да не в этом вопрос... бля, я что не понятно объясняю? КАК Я ПОНЯЛ Я ВООБЩЕ НЕ ДОЛЖЕН ВЫПУСКАТЬ RUNTIME ЭКСЕПШЕНЫ, ПОТОМУ ЧТО Я ИХ ДОЛЖЕН НЕ ДОПУСКАТЬ В ПРИНЦИПЕ
если это действительно так, то для чего есть эта возможность, как и наследоваться от RuntimeException?
Моветон, потому что в умной книжке от Анальника Аналыча так сказано?
Стрелочка от анальника, ведь ни на что другое он не способен.
если ты его поймал - значит приложуха не упала и способна отвечать и работать дальше, значит 200
ну основной тезис, как я понимаю, в том, что потребуется смена парадигмы программирования, пусть и в локальном масштабе. то есть сейчас эксепшены, как сказано выше, используются как механизм ветвления. эдакий ifelse только через жопу. когда эти эксепшены только внедрялись там под них пиздец какая идеология подводилась в противовес сишным кодам ошибок. типа сделаем удобнее, быстрее, лучше, блаблабла.
по итогу оказалось что сишный способ возвращать код ошибок как результат процедуры проще и удобнее в разы чем этот эксепшный оверинжиниринг. но выкинуть его просто так нельзя, так как эта хуйня - часть идеологии языка
Наследование непроверяемых исключений нужно только для семантики. Чтобы залезть в консоль и увидеть, что ты долбоеб и ввёл неправильный токен от АПИ, а не мистический RuntimeException по любому поводу.
могу! но нахуя, если мне шилдт говорит, что я должен предотвращать появление runtime эксепшинов, а не выкидывать их и обрабатывать? написал код, куда уж нагляднее? глядя на этот пик приходит мысль зачем вообще наследоваться и создавать свои runtime эксепшены, если их надо попросту НЕ ДОПУСКАТЬ В ПРОГРАММЕ?
что за бред. Программа должна работать корректно. Если это невозможно - кидаешь эксепшен.
Возвращать некорректный результат только из-за нежелания кидать эксепшен - это неправлиьно
>эдакий ifelse только через жопу.
Не через жопу, во многих случаях это правильнее, а иногда без них вообще никак. If/else в контексте небезопасного инпута это префиксная обработка, а исключение — постфиксная.
Ой блядь, не 10, а переменная "а".
ну так и есть, писать код вообще без самописных эксепшенов - вполне себе хорошая практика. относись к эксепшенам как к неудачному эксперименту при разработке языка и старайся их использование свести к минимуму
>Не через жопу, во многих случаях это правильнее, а иногда без них вообще никак.
как же сишка без эксепшенов работает, магия наверно.
как сишка
ну кстати твой пик вполне показателен.
у тебя блоки кода нихуя не равнозначны, и это одна из основных преензий к эксепшенам. если во втором случае ты впоне конкретно обрабываешь ситуацию деления на ноль то в первом случае ты обрабатываешь неведомую хуйню, то есть он у тебя может упасть и когда ты на ноль поделишь, а может упасть когда ты код на хитромудром процессоре с необычной архитектурой запустишь и у него там регистров не хватит для вычисления твоего деления. и если вдуматься то это пиздец. в жаве так то мало мест где можно стрелять себе в ногу - и это одно из них.
ну вот написано тоже самое... я запутался бля... вот взять пример практический, пришли в контроллер параметры запроса, как мне их проверять? выкидывать и обрабатывать исключения и отсылать ответ этого исключения? или вообще без исключений напрямую как-то обрабатывать и отсылать ответ?
>эксепшены, как сказано выше, используются как механизм ветвления. эдакий ifelse только через жопу.
Ну вот я не понимаю, откуда нахуй взялась вот эта вот всратая идея, что делать контрол флоу эксекпшенами, это чем то лучше и чище, чем делать контрол флоу с помощью goto?
>по итогу оказалось что сишный способ возвращать код ошибок как результат процедуры
Мы ж не в 90х щас вроде живем. Есть способы и подескриптивней. Верни опшенал. Или затащи из ФП какой нить аналог Either/Maybe.
причем это изначально подавалось как ахуеть какой плюс, типа безопасный код, даже если регистров не хватит мы все равно ошибку поймаем. но на практике это вылилось в мегабайты непонятных стактрейсов ведущих в никуда и рождению принципа fail fast, который абсолютная противоположность тому подходу, который декларируется концепцией эксепшнов
>но нахуя, если мне шилдт говорит, что я должен предотвращать появление runtime эксепшинов, а не выкидывать их и обрабатывать
Относись к этому так: рантайм эксекпшен - это косяк по вине твоей, как разработчика. В этом смысле ты действительно должен избегать их появления в рантайме. Но это не значит что ты не можешь обьявить и использовать парочку рантайм эксепшенов для самопроверки.
>>пришли в контроллер параметры запроса, как мне их проверять?
ValidationApi
>>пвыкидывать и обрабатывать исключения и отсылать ответ этого исключения?
Они сами все выкинут, но если хочешь свое сообщение написать - перехватываешь в своем эксепшен хендлере валидейшЭксепшн и выдаешь свой текст.
если валидация не прошла - выкидываешь свой чекед BusinessException, ловишь его в контроллере, в случае реста выдаешь на выходе что-то типа
200
{
code: BusinessException
message: Budget ne sweden
}
>Мы ж не в 90х щас вроде живем.
ты то может и не живешь, но ноги этой концепции прям оттуда и ты пожинаешь ее плоды. просто в свое время была охуеть какая дискуссия на тему того что обработка ошибок в сишке говно и как нам ее решить, и эксепшены родились (точнее массово распространились) как раз в результате этой дискуссии.
>если валидация не прошла - выкидываешь свой чекед BusinessException, ловишь его в контроллере, в случае реста выдаешь на выходе что-то типа
>
вот вот, о чем и речь, то же самое сишное возвращение кода ошибки, только через жопу
ну так у тебя чекед эксепшн же, ну будешь не код ошибки прокидывать а декларацию throws в описании метода, какая разница
>А у тебя часом не осталось хвостов на эту дискуссию? Я б почитал.
в ранних книгах по яве это было обязательной главой, так как там был именно запрос на перевод программистов с си на яву и эти темы (чем ява лучше си и с++) полно освещались. они по сути и писались как учебник для тех кто решил сменить си/плюсы на яву. можешь поискать что-нибудь из книг года выпуска эдак 1996-1998.
Спринг, это как правило веб-сервер. А стопать процесс вебсервера из-за эксепшена == получить стопяцот недовольных хомяков, которые не смогли провести свои транзакции и точат вилы чтобы ими тебя выебать. Там тупо выхода другого нет.
Поэтому вместо этого спринг отдает код 500, который на НТТП-языке означает литералли то же самое - "реквест провалился из-за того, что Васян на сервер-сайде - долбоеб".
500 должно означать что сервер помер. Ошибка валидации это явно нормальная работа и сервер не помер. Значит 200
вот показательный текст 1989 года.
http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/tech_reports/SRC-RR-40.pdf
тут на первых трех страницах приводятся доводы который потом можно было прочесть в любой книжке по яве
Это уже нюансы. В спринге ты добавляешь эксепшн хендлеры и в них сам решаешь, как маппить эксепшены на транспорт. И это кстати еще одна причина почему обьявлять рантайм эксепшены может понадобиться: спринг их различает по типу.
Или ты можешь пересесть полностью на чекед эксепшены. Но тогда тебе еще придется по всему стеку вызовов прокидывать руками бессмысленные throws-декларации, или как местный шиз рекомендует - контрол флоуить. А спрингу один хер похер - какие эксепшены маппить.
Валидация это 400, хуйня не найдена - 404, ошибка по бизнес хуйне 417.
А 500 - да, либо вася долбоеб и НПЕ не учел или все наебнулося по какой то причине.
Дежурно напоминаю
ДВУХСОТКА-ДОДИК ЗАКАЗАЛ СЕБЕ ДОДОПИЦЦУ
@
ПИЦЦУ ПРИНЕСЛИ, НА КОРОБКЕ ФИРМЕННАЯ НАКЛЕЙКА "Я ПРОВЕРИЛ, ВСЁ ХОРОШО"
@
ДВУХСОТКАДОДИК ОТКРЫЛ КОРОБКУ, А ТАМ ГОВНО
@
В ГОВНЕ ТОРЧИТ ЗАПИСОЧКА "409 MESYA4NII BALANS NE SWEDEN"
@
ОХУЕВШИЙ ЗВОНИТ В ПОДДЕРЖКУ
@
НУ ВЫ ЖЕ ПОНИМАЕТЕ, ЧТО НАКЛЕЙКА ОТНОСИТСЯ ТОЛЬКО К ВНЕШНЕМУ ВИДУ КОРОБКИ
@
МЫ ЖЕ НЕ МОЖЕМ СМЕШИВАТЬ КУЛИНАРНЫЙ, УПАКОВОЧНЫЙ И ДОСТАВОЧНЫЙ ПРОТОКОЛЫ
@
ГОВНО В КОРОБКЕ ЗАКЕШИРОВАЛОСЬ
@
ТЕПЕРЬ ДАЖЕ ПРИ ОТДАЧЕ ПИЦЦЫ В ПИЦЦЕРИИ ДВУХСОТКА-ДОДИКУ БУДЕТ ПРИЕЗЖАТЬ ГОВНО В КОРОБКЕ БЛИЖАЙШИЕ 4 ЧАСА
аааа дошло...
Как-бы есть.
Да.
Тесты не нужны вообще. Если ты хороший программист, то сразу пишешь хороший и понятный код.
Лучше логгером, можно всё таки разделять levelы, фильтровать, может пригодится
Щас бы в 2к23 не знать про no code
java.util.logging
Нет, нужны. Никто не пишет сразу без багов.
ни то ни то, нахуй в тестах вообще какие-то логи
в Assertions есть параметр message - тебе туда
тесты и комментарии нужны только если у тебя говнокод. У тебя говнокод? Тогда пиши тесты и комментарии
https://www.baeldung.com/spring-boot-testing
mvc.perform(get("/api/employees")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(1)))
.andExpect(jsonPath("$[0].name", is(alex.getName())));
Вот этим статик методы get, status, jsonpath, они вообще откуда? Что импортировать нужно что заработало?
Спасибо, очень полезно, пригодится не только в этой ситуации, я думаю.
Сам не гамаешь - другим не мешай.
>>50387
Вы что пидорасы человеку советуете? Чекед экспепшоны писать, 200 при ошибке, охуеть
Значит выдаю базу
- Чекед эксепшены нахуй не надо использовать, по факту рудимент. Unchecked используются в 99 процентах случаев, особенно для бизнес логики.
- После того как ты создал свой unchecked exception ты пишешь для него обработчик отдельный, в случае спринга это controller advice.
- 200 возвращается при успешном выполении запроса. НИКОГДА сука нельзя отвечать 200 и в теле писать текст ошибки. Http status codes для кого придумали?
>Http status codes для кого придумали?
явно не для ручного задавания и попыток выразить ими бизнес-логику
Не слушай быдло выше, он наверное пару месяцев отработал на говногалере и уже возомнил себя крудошлепом. Еще хорошей практикой является обработка эксепшенов, которые ероры. Только их очень сложно отловить, поэтому лучше по возможности все методы оборачивать в трайкеч и там уже что-то с ними делать, допустим выводить инфу об ероре в систем аут.
Посмотри любой паблик апи, тот же самый github api. Они в зависимости от сценария могут и 200 отдать, могут 204, могут 304, 201, 422, дохуя. В прицнипе я соглашусь, что так много может быть и не нужно (смотря как в команде договоритесь), но остальные ваши советы это пиздец, даже джуны уже знают лучше
знать и я знаю, ещё я знаю что это очередные идеологи опять поднасрали и высрали свою шизу, которую зафорсили на всяких хабрах.
Если у тебя что-то сложнее http странички, то поверх накладывается свой бизнес-протокол со своими собственными ошибками. С http кодами они ну никак не бьются.
Скажи мне учоный в говне моченый, если мониторинг детектит 500 ответ, надо ли слать алерт и поднимать админа?
Не смешивай сущности. Ребята выше обсуждали rest over http который предполагает использование http status codes. Если вы городите свои велосипеды или rpc то пожалуйста, но не надо новичкам рассказывать, что в ресте нормально возвращать ошибку в 200ке, это вредно
По поводу 500ок, ну тут зависит опять же от кейса, но у нас вот настроен мониторинг на % 5xx
class articleDTO {
private String headline;
private String content;
private MultipartFile imageFile;
}
В если в imageFile поставить MockMultipartFile, то он не переделывается в жсон, и следовательно нельзя добавить через content(String body). Как решить это?
рест это и есть форс. Недостижимый идеал, который даже теоретически недостижим и непонятен. Исходит из ложной идеи что все это объект, и у объекта может быть только 4 действия (круд).
Для веб-странички это применимо. Для ресурса типа картинки - тоже. Если что-то сложнее, какой-нибудь там бюджет, то у бюджета гораздо больше возможных действий.
HTTP изначально и создавался ради веб-страничек и картинок, для этого он хорошо подходит. Это уже потом где-то в десятых появился форс что http надо натягивать вместо бизнес-протокола. До сих пор страдаем
Предположим в коде случился рандомный RuntimeException, спринг это смаппил на http 500. Это аварийная ситуация? Ты бы хотел чтобы тебя в ночи будили из-за попытки тёти вали поделить на ноль?
>и у объекта может быть только 4 действия (круд).
Я тебе щас страшную вещь скажу, но все, что сложнее этих 4 операций - это отдельная сущность.
а вот и попытка натянуть сову на глобус. Попытка всё сделать объектами с 4 операциями
ооп не существует. В программировании глаголы (методы, функции), а не объекты с 4 действиями
"Распечатать отчёт" как ты через рест будешь делать?
"Распечатка отчета, создать"?
Вопрос не снят.
GET /cgi-bin/reports.fcgi?action=printreport&reporttype=kassovaya_kniga&knigaid=44736
perfect
>у объекта может быть только 4 действия (круд).
Кстати говоря, это нихуя не так. Если пройтись по определениям и гайдам по REST, ни в одном из них не будет ни слова про круд. Из 6 констрейнов, которые приписывают рестам, нет ни одного, сводящего API к этим 4 операциям:
https://restfulapi.net/rest-architectural-constraints/
REST и CRUD - две абсолютно не зависящие друг от друга вещи. REST не обязан быть CRUDом так же, как CRUD - RESTом.
ООП не существует только в твой скудной голове, аналиэ.
если есть существительное, с которым можно только
PUT create
GET read
POST update
DELETE delete
где ещё взять операций?
Пидорас,я тебе ебальник то проломлю
Это ебанутые протоколы. Это больше задержка, чем непосредственно время, потраченное на отправку. Отправляй каждое новое письмо новым потоком просто.
new Thread(() -> this.sendEmail("
Покеж свои конфигурацию
Ты не поверишь...
Нахуя? Кому мешало?
Когда вы используете MockMVC для тестирования контроллера, вы можете использовать метод multipart для отправки запроса multipart/form-data. Это позволит вам отправить файл вместе с другими полями формы.
В вашем случае, чтобы отправить объект articleDTO через MockMVC, вы можете использовать следующий код:
java
Copy code
MockMultipartFile mockFile = new MockMultipartFile("imageFile", "filename.jpg", "image/jpeg", "some image data".getBytes());
ArticleDTO articleDTO = new ArticleDTO();
articleDTO.setHeadline("Article headline");
articleDTO.setContent("Article content");
articleDTO.setImageFile(mockFile);
MockMultipartHttpServletRequestBuilder builder = MockMvcRequestBuilders.multipart("/your-api-endpoint");
builder.with(request -> {
request.setMethod("POST");
return request;
});
builder.with(request -> {
request.setContentType("multipart/form-data");
return request;
});
builder.file(mockFile);
builder.param("headline", articleDTO.getHeadline());
builder.param("content", articleDTO.getContent());
mockMvc.perform(builder)
.andExpect(status().isOk());
В этом коде мы создали объект MockMultipartFile для тестирования отправки файла. Затем мы создали объект ArticleDTO с заголовком, контентом и файлом. Затем мы использовали MockMvcRequestBuilders.multipart() для создания запроса multipart/form-data. Мы добавили заголовки запроса и параметры для объекта ArticleDTO. Наконец, мы использовали mockMvc.perform() для выполнения запроса и проверки статуса ответа.
Обратите внимание, что это пример и может потребоваться настройка в зависимости от вашего API.
Когда вы используете MockMVC для тестирования контроллера, вы можете использовать метод multipart для отправки запроса multipart/form-data. Это позволит вам отправить файл вместе с другими полями формы.
В вашем случае, чтобы отправить объект articleDTO через MockMVC, вы можете использовать следующий код:
java
Copy code
MockMultipartFile mockFile = new MockMultipartFile("imageFile", "filename.jpg", "image/jpeg", "some image data".getBytes());
ArticleDTO articleDTO = new ArticleDTO();
articleDTO.setHeadline("Article headline");
articleDTO.setContent("Article content");
articleDTO.setImageFile(mockFile);
MockMultipartHttpServletRequestBuilder builder = MockMvcRequestBuilders.multipart("/your-api-endpoint");
builder.with(request -> {
request.setMethod("POST");
return request;
});
builder.with(request -> {
request.setContentType("multipart/form-data");
return request;
});
builder.file(mockFile);
builder.param("headline", articleDTO.getHeadline());
builder.param("content", articleDTO.getContent());
mockMvc.perform(builder)
.andExpect(status().isOk());
В этом коде мы создали объект MockMultipartFile для тестирования отправки файла. Затем мы создали объект ArticleDTO с заголовком, контентом и файлом. Затем мы использовали MockMvcRequestBuilders.multipart() для создания запроса multipart/form-data. Мы добавили заголовки запроса и параметры для объекта ArticleDTO. Наконец, мы использовали mockMvc.perform() для выполнения запроса и проверки статуса ответа.
Обратите внимание, что это пример и может потребоваться настройка в зависимости от вашего API.
Спасибо большое, но не совсем то. У меня метод контроллера принимает (@RequestBody ArticleDTO), а в том что описано это метод с тремя @RequestParam, один из которых файл, два строки.
Эх, походу придется переделывать апи под реквест парамы... Обидно, когда не можешь справиться с задачей как нужно, и приходится подгонять задачу под ответ.
Я нихуя не понял что нужно, закинь проект на гит, придумаем всем двачом
пруф
Не воспроизводится.
Там вроде отдельный рантайм поднимается.
javax.annotation.processing апишка очень многословная, неприятная и кривая, хуже рефлексии.
Попробовал рефлексией читать содержимое классов, параметры аннотаций, и сигнатуры методов. С рефлексией код попроще, но компилируется медленнее.
Еще почему то в AnnotationValue.getValue() параметр с типом String[] не кастится String[], идея в дебагере пишет, что там под капотом com.sun.tools.javac.util.List<String> вместо массива и пока не нашел как его скастить или сконвертировать.
Какие подводные вызывать рефлексию из аннотейшн процессора? Ну кроме скорости компиляции.
Пчел, не позорься, не смешно. Ну а если ты не пытаешься в троллинг, то сразу становится видно, что нихуя кода ты в своей жизни не писал, потому что знал бы, что стандарты и best practices важная часть работы
Как ты хочешь вызывать рефлексию для нескомпилированных классов?
натужный форс это твоя жизнь
Это де-факт индустриальный стандарт. От того что лично тебе это не нравится ситуация не изменится. Очевидно ты неадекватно оцениваешь современное положение дел. Тут вижу два варианта, либо ты ебать шутник, либо ты нихуя не знаешь
Новички, которые будут это читать, не будьте как этот васян, работать с такими челиками это пиздец
чтобы быть стандартом оно должно иметь четкое описание и требования. Рестфул это просто набор слабо привязанных к реальности рекомендаций
рекомендаций, которые каждый понимает по-своему
Все 4 года, что работаю.
почти каждая таска
Вы видите копию треда, сохраненную 23 мая 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.