Программирование - это не столько про анальное крудошлёпство, сколько про стиль мышления. Высокоуровневая абстракция, поиск сходных черт, оптимизация - всё это высшие интеллектуальные способности, что образуют такой прочный симбиоз с программированием на Java.
Пусть черти ебут в жопу того, кто додумался сделать невозможным создание таблицы под названием "user", часа полтора сейчас голову грел хули не работает @Entity public class User, пока не выяснил. Ебал этого гандона все просто.
>>2630717 Можешь ещё повыёбываться не невозможность создать таблицу select. ORM таким как ты полностью атрофировало мозг, так что лучше сразу бери монгу и перекатывайся в JS.
>>2630722 Я так и сделал когда допер. Спринг в консоли не пишет в чем дело, просто кидает эксепшн что нельзя создать такую таблицу и нихуя не разжевывает. >>2630729 Select понятно, а про существование ключевого слова user не все в курсе.
У меня есть классы task и subtask, или даже только один task, и я хочу, чтобы у каждого объекта task могло быть несколько subtask'ов, при этом у каждого subtask'а тоже могли быть свои subtask'и и так несколько поколений с ограничением. Как это реализовать в spring jpa? Как вообще такие связи называются? Сколько смотрю примеров many to many, везде используются разные классы с двух сторон связи.
>>2630859 Тебе нужно SQL освоить. Там какой-то тип связи есть (Self Join вроде), который ссылается на ту же самую таблицу в качестве форейн кий использует айдишник из этой же таблицы, типа отношение владелец/хозяин.
на ЖОПЕ это наверняка реализуемо. Погугли вначале сикуль, потом поймешь что тебе нужно гуглить в жопе.
>>2630978 я не верю что это работает. Программа какая то у вас там ебанутая, с такой даже в стажеры не возьмут сейчас.
Я всё это почти прошёл по книжкам 2 года назад, потом забил на понимании того что в джуны меня не возьмут. Сейчас вот по новой осваиваю, но уже серьезно взялся.
Почему в джаве не дадут возможность самому удалять объекты? Зачем мне обязательно ждать стоп зе ворлд, если в некоторых ситуациях легче самому озаботится жизненным циклом объекта. Имхо, если бы в жабе была такая возможность, то область применения языка была бы больше.
>>2630996 Если у тебя возникают такие ситуации, ты выбрал не тот язык. Джава специально проектируется для проектов, где надёжность важнее производительности.
Серьезный вопрос, надеюсь есть понимающие в матчасти
есть ли в Идее какие-нибудь плагины навороченные с искуственным интеллектом как вижуал студио чтоб тыкал Tab и все само писалось?
Я тут на досуге почитал C# немного и попробовал студию, там буквально тыкаешь один символ, затем таб, и хуяк, у тебя уже полноценный контроллер со всеми наворотами написался.
Автодополнение там прям охуенное, начинаешь писать в стиле
МояЗалупа залупа1 = на этом этапе тыкаешь таб и он сам дописывает оставшееся. Но это и в Идее есть. Я про более серьезное
Вижуал студио прям охуенно работает, иногда предлагает целые строки кода ДО того как ты что либо тыкнул в начале. Я сейчас не про шлаблоны, а про чтение вышеизложенного кода и предложение по контексту.
>>2631011 Проблема в том, что я в мухосрани живу, в москву перекатываться ссыкотно без опыта в айти. Да и лет мне много уже, технического образования нет
По мотивам вопроса челика, который спрашивал про AI-based плагины для идеи выше.
Вы их прям часто используете? Или просто угораете от того, что ИДЕ умеет такое? Я чет даже теоретически не могу себе представить какой то весомый профит от них, достойный того, чтобы садиться под ВПН и нести кому то за это деньги. Интересно послушать как у других с этим.
Я чет смотрю на это вот все безобразие, и даже если отбросить мое патологическое недоверие к нейронкам: набора текста в моей работе по прикидкам несоразмерно меньше, чем изучения спек, возни с дебаггером и профайлером, чтения логов, вдупления того, что вообще хочет от моего кода окружающая реальность. Идейка впринципе уже неплохо справляется с джавовым кодом, я чисто по Амдалу если бы че и оптимизировал в своей рутине, то не набор кодотекста в идейке. Мне кажется, я бы больше времени потратил на чтение, сверку и причесывание того, что эта ботва мне нагенерит, нежели чем если бы написал все сам.
>>2631004 >Вижуал студио прям охуенно работает, иногда предлагает целые строки кода ДО того как ты что либо тыкнул в начале там похоже не только искусственный интеллект но и чтение мыслей через излучение монитора.
>>2631085 >Мне кажется, я бы больше времени потратил на чтение, сверку и причесывание того, что эта ботва мне нагенерит, нежели чем если бы написал все сам. совершенно верно, идея генерить код нейросетками для того чтобы его править - мертворожденная. был очень интересный проект еще лет 15 назад по генерации микросхем при помощи генетических алгоритмов. там по итогу генерировался такой пиздец, в котором почти нереально было разобраться, потому что баги системы использовались наравне с декларированными возможностями, например помехи и наводки для передачи информации, индукционный ток от группы элементов на плате и прочая магия. при этом все работало, но стоило СДВИНУТЬ (не переключить контакты а просто физически подвинуть) один элемент на плате и все переставало работать. естесственно, элементная схема, которая при этом получалась, была вообще нерабочая. но само изделие, как черный ящик, работало.
с кодом я думаю так же будет - в итоге все придет к генерации таких вот черных ящиков рожающих ожидаемый функционал и в котором разобраться будет человеку в принципе невозможно.
>>2630498 (OP) >"Элегантные Объекты - Java Edition" имеет перевод на русский язык. Однако, если без приколов, не зная парашный язык можешь смело идти нахуй, потому что никто твои классы с названиями ProveryalshikArgumentov читать не будет.
А если ПроверяльщикАргументов? Ява ж полностью отъюникожена.
>>2630996 >>Почему в джаве не дадут возможность самому удалять объекты? Средний Шипилев умнее среднего Олега и ему виднее когда объекты удалять.
>>Зачем мне обязательно ждать стоп зе ворлд Стоп зе ворлд возникает если у тебя загружено больше 99% памяти. В остальных случаях и так норм чистится через поколения.
>>в жабе была такая возможность Есть десятки всяких гц, вплоть до ручного запуска очистки памяти по таймеру (когда торги закрыты).
Обьясните как вы емейлы обрабатываете. Мне на пост эндпоинт прилетает multipart/mixed и я весь день не могу понять почему эта ошибка вылетает com.fasterxml.jackson.core.JsonParseException: Unexpected character ('-' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value. Поставил такие конфги какие в тырнете нашел, а оно всё равно падает с этой же ошибкой.
>>2631693 ДТОхи нет, это мне из Mailgun-а прилетает их тестовый "fully parsed message as an HTTP POST." Я до приложения смог это дело довести только принимая @RequestBody как String. Если отлогировать до того как мапить то получается что-то такое https://pastebin.com/cQ7gKtzY
>>2631974 Там прям в джавадоке копипастный пример написан. Про бин нихуя не понял, но в примере всё локально создается, контекст не закараптит.
Если нужны разные бины для тестов и рантайма, смотри @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{...}
>>2632108 В примере просто рест темплейт используется. А у меня есть сервис, в который инжектится рест темплейт, и мне надо этот сервис замокать. Но только этот сервис, все остальные сервисы должны использовать обычный рест темплейт.
Доброго времени суток. Работал 1.7 года бизнес-аналитиком. Общался с заказчиками, формулировал бизнес-требования и всё вот это вот. На сколько это будет плюсом среди других стажёров/джунов?
>>2633049 Лучше, чем опыт слесаря на заводе. Код ты может и не писал, зато понимаешь, как происходит разработка продукта, что для этого нужно, какие обычно возникают сложности, как их преодолеть.
Здравствуйте. Подскажите пожалуйста, стоит ли изучать Котлин? Я просто решил джаву осваивать, но вдруг закралась мысль, что бекенд я в силу умственных способностей не потяну. Мобильная разработка проще или же это только на первый взгляд?
>>2633137 Думаешь все проще? Я вообще подумал с тестирования на джаве начать, чтобы параллельно в мобильную разработку вникать. Но это опять же с точки зрения дилетанта.
>>2633049 Если ты еще там работаешь, то говоришь своему руководителю, что горишь желанием ПОДНАЖАТЬ и лучше вникнуть в процесс разработки, чтобы предупреждать сложности разработки еще на этапе общения с заказчиком, лучше формулировать требования тыры-пыры, в общем ссышь в уши, чтобы получить доступ к кодовой базе. Потом люто задротишь погромирование, так чтобы было понятно, что за хуйню твои быдлокодеры пишут. Нкличие реального кода в реальном проекте ускорит обучение в 10 раз. Потом по ситуации грамотно перекатываешься внутри компании или сьебываешь куда-нибудь.
>>2633122 А что такого страшного в беке? Что там что там есть сложные констркуции, инструмены разработки и тд. Но только ты будешь получать задачу и думать над логикой (что откуда взять, как обработать, куда положить и тд), а на фронте/мобилке ты будешь париться как кнопку сделать нужной формы, размером, чтобы она была поверх другой кнопке ну и куча куча других параметров. Вообще надо выбирать то к чему душа больше лежит, но если поровну, то в одном месте изъёбываешься с логикой, а в другом месте изъёбываешься с визуальными элементами
Почему все API для серверов Minecraft написаны на Java, а соответственно и плагины к ним? Разве без jvm нельзя обойтись? Что мне мешает набайтоёбить свой API и через него дёргать jvm?
>>2633340 Спасибо за развернутый ответ. Да, в свое время во фронте именно позиционирование больше всего раздражало. Возможно, бэк в этом плане зайдет легче.
>>2633741 > Так что пугает в беке? Если судить исходя из личного опыта, а я некогда пытался в джангу, то именно логика и пугает. Огромное количество подключаемых модулей, классов, бутстрап и базы данных. Может быть все кажется сложным лишь по началу, но с другой стороны практиковался я на относительно простых проектах. Посмотрим что из этого выйдет.
Добавил редис в петик для сохранение сессий, чтоб не выкидывало при сбоях и горизонтальном масштабировании. Эх, вот бы на работку взяли, хочется за сотыги копаться в легаси, а не вот это вот все…
>>2634172 Нет у нас в Сбере стандарта собесов, проект проекту рознь, везде принимают по-разному. На нашем проекте дрочат задачами, на других дают тестовое, на третьих присылают стажёров, на четвёртых ещё какая-то залупа.
У меня друг джавист, начинал работать фулстаком (ява + яваскрипт). От сюда вопрос. Я правильно понимаю, что если ты чисто быкарь на яве - вакансии в основном с галер, а фулстек - вакансии с проектов/компаний по проще? Какое вообще соотношение потребностей? На что, по вашим ощущениям, на рынке большая потребность?
>>2634310 Хуй знает, что ты галёрой называешь. Чем меньше компания - тем больше фуллстеков. В какой-нибудь крупной корпорации фуллстеков не просто мало, там ещё и препятствуют совмещению ролей, т.е. бэкендеру тупо не разрешат писать фронт, даже если он сам проявит желание.
>>2634323 >>2634329 В общем в идеале, мне, как вкатуну, нужно кроме ява стека, выучить ещё и js/html на уровне "написать поле с валидацией" - правильно понимаю?
>>2634364 Уметь написать простенькую страницу с парой форм лишним не будет, всякое может пригодиться, даже если пишешь только бэк. >>2634365 А ты можешь соснуть хуйца на пару со своей шлюхой-мамашей.
>>2634365 Да кто это сказал?) Типо с этого момента ява-кодеры перестали рождаться или больше никогда не появятся?)
Я сейчас в такой ситуации, что если не выучу джаву - то дальше мне лучше умереть (смешно, но и такое бывает). Так что мотивация есть, в унике профильный бакалавр есть, какое то время на вкат есть. Так что проблемы не вижу. А про 600 человек на место - у меня на этот счёт своё мнение, делиться которым не сильно хочется, чтобы было меньше конкуренции
>>2634371 >>2634371 >делиться которым не сильно хочется Поделись плиз, я просто тоже думаю вкатываться или нет. Ситуация 1 в 1 твоя, если не смогу вкатиться до конца года, то сделаю роскомнадзор.
>>2634372 Ну мой анализ мне подсказывает что вкатываться 100% стоит - вот тебе и ответ.
Хочешь выпилиться - тебя никто не спасёт, хочешь жить как мой кореш который получает 5-6к бачей - учи какой то строготипизированный бек. Всё просто.
С пониманием отношусь к твоей проблеме, но не знаю что ты хочешь услышать. Если хочешь вкатиться, то тут думать не надо. Зашёл на явараш, уверенно отдал им 30 баксов и как машина едешь по уровням XD А там война план подскажет как дальше идти
Валидация через @Valid это же херня полная? Работает для простых приложений и простых решений. В чем-нибудь более-менее сложном лучше ручками делать валидацию. Я прав или все же нет?
>>2634364 На перовой галере что я был требовался ангуляр. Надо было было разбираться на уровне нарисовать форму, добавить кнопки, привязать их к рест ендпоинтам. Это по сложности как писать круды на спринге - вроде не сложно, но с нуля месяца 3 ты на это потратишь. Чаще всего для фичи надо писать и фронт и бэк одновременно. Сейчас я пишу чисто бэк и фронтовые проблемы с ползунком или уехавшей кнопкой меня не ебут.
>>2634757 Разница в том, что проект на джэве - это всегда боль и нечеловеческие страдания. От языка несет нафталином, а инженерные практики и подходы остались где-то в 90-х. Пока команда джэва-программистов наматывает сопли на кулак и размазывает по засаленному свитеру, в попытках пофиксить очередной NPE, продираясь через килотонны императивного кода, часть из которого завернута в Optional, команда на котле уже выкатывает релиз и получает бабулесы.
>>2634794 И слава Богу. Официальный язык разработки под андроид это котел. Билд тул - градл. Все! Не нужно в 2к23 обмазываться помойной джэвой и дрочить эксемельки в мувене. Оставьте это старым пердунам, которые на старости лет начали дрочить опшиналы и заворачивать свои помойные легасные поделки пытаясь спастись от нуллпоинтерэксепшенов.
>>2634793 Че ты так горишь-то? Ну подумаешь тебя заставляют на 8 жабе обмазанной сокращениями писать и ебаться с дегенерадлом, который не хочет собирать проект по причине пидарас, но плакать то зачем?
>>2634815 Никто меня не заставляет. Я пишу на суперсовременном C# и у нас нет проблемы с NPE. Это вам все никак nullable типа не завезут и все проверки дрочите или опшионалами обмазываетесь, лол.
>>2634818 Ты неверно дурачёк и в своей жизни писал код только для компаний уровня хуй&залупа? Тебе не знакомо такое понятие что падать с ошибкой надо как можно раньше, на этапе сборки в идеале. Или ты такой ахуенный что каждый get() ты обрабатываешь так что там может прийти Nullable? Это же полная хуйня ожидать что тебе придёт ёбанное ничего и как на это реагировать? Это такое же дерьмо как динамическая типизация, когда ты хуйзнаешь что тебе пришло и как с этим работать. Может для школьных поделок и прототипирования это ещё сгодится, но для серьёзного ентерпрайза это хуета. /thread
Есть две таблицы, Person и Address, нужно выбрать имена человеков у которых больше всего адресов. Получается, я делаю select name, address from Person where Person.id = Address.id_person. Как теперь сделать условие для выборки адреса, ведь where уже занят ?
>>2635107 Ну он же на ДжАвЕ пИшЕт, а этот запрос вызывается из приложения на джаве, значит, логично нет спрашивать в этом треде! Примерно как у анонов, которые срут здесь вопросами про докер и гит.
>>2634994 хз как там в шарпах, а вот котлиновский fizz?.getBuzz() вместо Optional.ofNullable(fizz).map(x->x.getBuzz).orElse(null) немного удобнее. Но только ради сахара тащить другой язык это конечно клиника. >>Это же полная хуйня ожидать что тебе придёт ёбанное ничего и как на это реагировать? Если что то приходит от стороннего сервиса или из базы - там может быть любая хуйня с нулами в нужных полях. Это помимо того что логика на нулах - тоже не редкость в проектах.
>>2635249 Значение ID может быть намного больше количества записей, например, если городишь для PK sequence с кешами. > Зачем нули лишние хранить на диске Эти нули будут последним, что покажется лишним, когда надо будет оптимизировать размер базы данных. Что толку от экономии 4 байт в одной строке таблицы, если строка занимает несколько килобайт?
>>2635152 >>2635166 А что дешевле, проще и быстрее? переписать всё что писали миллионы человеколет или купить более мощные серваки и перенести на них очень медленный спринг?
Ответ очевиден как по мне. Блин такие паникёры) вы такими родились или двач вас такими сделал?)
>>2635257 Ну окей, что то небольшое или молодое начнут внезапно писать на чём то новом (хотя это не будет так надёжно как сринг, а для бизнеса это важно и что то новое ещё написать надо... кароче ну ты понял), но старое то никуда не денется и его надо будет развивать, разростать и так далее. кароче как будто лет 5, а скорее 10, ещё можно сидеть ровно на спрнге.
>>2635256 >>2635258 Отставить тряску, старичье. Ваш срэнг фримверк никому не нужен и он де-факто легаси и дурной тон в новом проекте. Сидите себе там тихо и не отсвечиваете. Через 10 лет пойдете на мороз таксовать или грузчиками работать в пятерочку, когда упругие зумеры будут писать проекты на Kora. Короче говоря - it's Tinkoff!
Я вот читаю эту поеботу и думаю, кто такие эти ваши тинькоф банк? Какая-то блядь шарага с детскими оборотами и исключительно локальным присутствием в одной стране. Какая нахуй разница то, чем они там блядь занимаются? Они аутисты сужают свою потенциальную кадровую массу вводя свои собственные фреймверки, а за пределами даного дженерик банка — это нахуй никому не нужно.
>>2635291 >а за пределами даного дженерик банка — это нахуй никому не нужно. зато тот хуй в очках, который подсадил весь банк на свою самописную залупу, теперь гарантированно обеспечил себя работой до конца жизни (ну или пока тинёк не сдохнет)
>>2635281 Там из зала правильный вопрос задали, а где вы будете брать разрабов на свои велосипеды? -Пук-среньк, настоящий инженер пишет на джаве без фреймворка, это база.
А по итогу найдут только студентов - получится такой же обосрамс как с яндексом. Сенькам то может и по кайфу пилить велосипед, это интересно. А вот мидлы в рот ебали использовать это нонейм говно в рабочих задачах, они просядут по скилам и пострадает их ценность как спецов (а значит меньше зепка). Если уж переучиваться - то выгоднее в го свичнуться (там как раз пилить спринг уместно).
>>2635291 >>2635303 Эх, молодые. Сеньор он на то и сеньор, что гарантирует себе рабочее место. Сделать свой велосипед = гарантировать, что кабан тебя не выкинет, как Илон Маск 80% твиттер разработчиков, потому что никто кроме него там не разберется. Чтобы не переписали быстро на молодежном языке, надо пропихнуть его побольше и поглубже, а чтоб цепные псы кабана - менеджеры, не прочухали подвоха пиарим на конференциях и докладах. Всё, дядя сеньор и его друзья обеспечили себе высокооплачиваемую и непыльную работу до пенсии.
А по поводу всякой чуши, типа чистого кода и молодежных языков, профразвития и тд - это наебалово для выжимки молоденьких, упругих но глупых по неопытности зумерков. Потому что когда они подрастут и прохавают безжалостный мир капитализма, такую лапшу на уши не повесить.
>>2635291 Это как посмотреть. В теории они могут наоборот её расширить, хайря всех подряд со знаниями на уровне java se, и чуток доучить своей поделке уже дома, вместо того чтобы искать только спрингокульт.
>>2635303 > просядут по скилам и пострадает их ценность как спецов (а значит меньше зепка).
Имхо это майндсет терпилы. Ценность спеца определяется компетенцией и уровнем задач, которые он способен решать а не стеком. Скиллы, посадка по которым действительно критична, ортогональны стэку.
>>2635344 А не легче было бы вложиться и контрибутить в spring native? Или не взять кваркус или микронафт? Зачем очень средней по мировым мерках компании лепить собственные фреймворки? Она ведь поддержку его не потянет 100%. Через 3 года использования у этого велосипеда будет уже костылей столько же сколько у спринга, а функционал будет все еще на порядок ниже.
>>2635256 >переписать всё что писали миллионы человеколет
Обычно постановка задачи звучит не так. Никому, даже отьявленным велосипедостроителям, неинтересно писать убийцу спринга снихуя. Проект пишут под конкретные цели, и эти цели обычно локальные. Писать фреймворк под эти цели не так уж и трудозатратно.
>>2635355 у них нет цели впихнуть всё или сделать нескучный конструктор для вкатышей, как у спринга. Просто какой-нибудь DI без проксей и рефлексии, чтобы не раскидывать зависимости руками
>>2635385 Но что ты будешь делать, когда у велосипеда тинька не будет нужного тебе функционала, а его не окажется с 99% вероятностью? 90% проектов хватает чистого спринга, для остальных 10 есть гора информации как спринг допиливать и оптимизировать под свои нужды.
>>2635312 Вопрос даже не в том нахуя это пишет сеньор в тиньке. Но они ж это выкинули в опенсорс и пиарят как убийцу спринга, мол давайте тащите себе в проекты это говно и вкладывайте в него тоже. Какой то анон даже возбудился (залетная шарпомуха наверняка). На что и последовала реакция.
>>профразвития и тд - это наебалово для выжимки молоденьких, упругих но глупых по неопытности зумерков. Когда ты знаешь спринг, кафку и прочие хибернейты - ты можешь устроиться куда угодно без особых проблем, можешь выбирать оферы, набивать себе цену. Когда ты разраб одного велосипеда - то никто сенькой на большие зепки не возьмет, а становится мидлом уже западло. Выбирая путь велосипеда становишься его заложником. Потом останется только бегать по тредам и отчаянно кричать что спринг бут уже легаси полгода назад вышел 3-й - а вот твой говнофреймворк - огого.
>>Сделать свой велосипед = гарантировать, что кабан тебя не выкинет А кто гарантирует кабану что его самого не выкинут? Это сбер “Too big to fail” и получит кучу денег из бюджета на свои нужды. А Тиньк не настолько крупный и важный. Сдохнет - никто даже не заметит.
>>2635345 >>Ценность спеца определяется компетенцией и уровнем задач Это работает только на уровня от сеньора и выше. Мидл без знания спрингов (что и определяет его компетенцию) нахуй не нужон. А работать на этой поделке предположительно должны именно они (джуны нихуя не умеют, сенек нанимать для погрузки жсонов дорого)
>>2635391 Даже в рамках работы с бинами - интерсепторы, скоупы и инит/дестрой методы бинов, кондишоны автоконфигураций, профили. На уровне веба - фильтры, адвайсы. Куча оберток для тестов. Это только то что сразу вспомнил.
Уверен, что через год-два не просто никто не будет использовать фреймворк за пределами тинька, но от него откажутся и в тиньке. Хотя если на тинек наложат хорошие санкции он сдохнет раньше.
>>2635214 >а вот котлиновский fizz?.getBuzz() Нинужон. Нулл допустим только тогда, когда метод явно отмечен как @Nullable и где нулл это отдельное логическое значение и должен обрабатываться совсем по другому.
Да, есть ситуации, в которых проведение нулл вверх по стеку как ошибки в ГОвне прямо так и напрашивается. Но все они являются говнокодом и при нормальной структуре проекта самоуничтожаются.
Петухлин вообще борется не с тем, с чем надо бороться. Он борется с внешними проблемами, оставляя возможность внутри написать такое говнище, что никакие сахарки его не спасут. Джава принуждает хотя-бы писать нормально, чтобы не приходилось заменять петухлиновский ? целой строкой бойлерплейта.
>>2635396 >Мидл без знания спрингов (что и определяет его компетенцию) нахуй не нужон
Так постановка вопроса то изначально была какая?
>мидлы в рот ебали использовать это нонейм говно в рабочих задачах, они просядут по скилам и пострадает их ценность >какой мне смысл как специалисту переходить на другой стек и начинать всё почти с нуля?
Хуевый тот миддл, что не мечтает стать синьором. Ты миддл, ты уже овладел спрингом, спринг для тебя пройденный этап - в чем запара поработать на чем-то еще помимо спринга? В чем запара поконтрибьютить во что-то уровнем ниже чем спринг? Не вижу ни единой причины против расширить свой кругозор за счет работодателя.
>А работать на этой поделке предположительно должны именно они
Я в джаву вообще через осги вкатывался (караф, ебанавротнахуй). Сейчас мне 10+ лет стажа, никаких проблем на своем пути не встретил, ни о чем не жалею. Спринг - не самое запарное что есть в разработке. ИМХО нужность спрингодозы для миддлов переоценена. Про джунов вообще молчу, на вкатунов сейчас без слез не взглянешь.
>>2635291 Поздравляю, открыл истину. Тинькоф это компания, которая очень хочет быть похожей на яндекс, но в которой разработчики не в состоянии правильно перемножить три числа, из-за чего клиенты наменивают миллионы рублей себе в прибыль (после чего на них подают в суд)
Я вообще не представляю, как эту контору можно воспринимать всерьёз, платят они ещё меньше яндекса, собес (карго культ с яндексового) муторный, хоть и не сложный (потому что особого потока людей в тинек нету)
>>2635405 можно смело ставить анус. даже яндекс не смог родить ничего такого, что имело бы статус общеупотребимого фреймворка/библиотеки, хотя пытался не один десяток раз. а уж про подзалупный банк с крайне хуёвой репутацией нечего даже и говорить, дропнут идею использования сразу как только дойдут то слова тиньков в описании.
>>2635432 >>Нинужон Ну вот поле может быть со значением, а может и без него. Если не пустое - нужно вывести. Для бизнеса это правильно. Что делать будешь? Идти объяснять овнеру что он и его клиенты долбоебы и надо переписать логику чтоб тебе удобно было?
>>2635445 >>яндекс не смог родить ничего такого, что имело бы статус общеупотребимого фреймворка/библиотеки Кликхаус используется многими. А до них меил тарантула высрал, которым тоже кто то пользовался. На этом пожалуй все.
Вкатуны блядь угомонитесь Нормальный специалист перекатится на новый веб фреймворк за неделю Похуй что там: кора, play, микронавт или вообще takes Если лично ТЫ не в состоянии этого сделать, то ты вкатун ебаный и перхоть
>>2635577 Мне кажется, тут скорее именно хибернейт. Он уж больно переусложнен. Как и спринг секьюрити, например. Оверинжиниринг там, где можно проще. Физз базз энтерпрайз эдишном отдает немного.
>>2635585 он основан на мертворожденной идее что можно автоматически генерировать sql запросы. Генерить то можно, но получается всякая херня. И это в самом бутылочном горлышке приложения.
Мертворожденная идея - это маппинг сущностей из реляционной алгебры на сущности в ООП. Этот маппинг невозможет без проеба каких нибудь нюансов, отсутствие которых либо ченить усложнит обратно, либо просадит перформанс.
А генерация запросов - это нормально. Их много кто генерит, вон Jooq например.
Бля, опять зовут в команду, где всего два бекендера. Только теперь там какой-то относительно новый проект на 11 жабе и 5 сринге и, по их словам, без легаси вообще. Стремаюсь я что-то идти в команду, где всего два разраба, тем более на первую работу. Че скажете вообще исходя из вводных? Дропать их и искать что-то получше или хороший опыт для начала карьеры кнопкодава?
Корень всех проблем, который ближе всего к понятию мертворождённости - общая память. Когда два инстанса с разными точками входа работают с одной и той же памятью. Вот что вызывает проблемы. Если точка входа гарантированно одна, то всегда можно шлёпнуть паттерн реставратор и даже с ORM наслаждаться истинным ООП.
Во первых - че за нахуй новый паттерн такой: "реставратор"? Его даже гугл не находит.
Во вторых - че за наброс про общую память. У тебя любой рестфул-сервис - это литералли проект с кучей точек входа, ведущих к общему стейту в лице БД.
В третьих - при чем тут ORM, особенно джавовые, у которых вся работа построена вокруг понятия "persistence context", который сам по себе литералли является общей памятью где все мэнеджед-энтити шарятся для всех учакстников транзакции
>>2635678 Ну так ты то скорее всего опытный, а я просто вкатыш, грязь из-под ногтей. Мне будет тяжко без постоянных кодревью, ну по крайней мере так мне это представляется, буду сам во всем разбираться, а если игорь1 и игорь2 решат уйти в отпуск, то меня выебут и высушат овертаймами.
>>2635675 >Во вторых - че за наброс про общую память. У тебя любой рестфул-сервис - это литералли проект с кучей точек входа, ведущих к общему стейту в лице БД. Ну вот это и является проблемой. Микросервисы - мертворождённая идея, общая память - близка к этому, но с этим можно работать, просто нужно правильно обрабатывать это, а не пытаться натянуть сову на глобус - натянуть паттерны и приёмы ООП, которое возможно только в локальном масштабе в рамках одного инстанса на целую систему, в которой даже использованных языков программирования может быть несколько, занимаясь костылеварением с помощью ORM'ов.
>В третьих - при чем тут ORM, особенно джавовые, у которых вся работа построена вокруг понятия "persistence context", который сам по себе литералли является общей памятью где все мэнеджед-энтити шарятся для всех учакстников транзакции А можно по-русски, а не на языке соевого крудошлёпа? Нихуя не понял.
>Во первых - че за нахуй новый паттерн такой: "реставратор"? Его даже гугл не находит. Локальный вызов this.save() после каждого внесения изменения в ООП-шный объект и YourDataMap, представляющая из себя обрезанный репозиторий без методов update и delete (это делает сам объект). В более общем смысле - чтение из оперативки, запись на диск.
>>2635585 >Мне кажется, тут скорее именно хибернейт. Он уж больно переусложнен. очень большой звонок был когда они задепрекейтили критериа апи и сказали юзайте функционал жпа. это сука пиздец, то что делалось в изящные 10 строк с помощью критериев превратилось в 50 строк нечитаемых макарон. причем некоторые нетривиальные вещи я так и не понял как переписать на жпа.
>>2635577 >тиньковщики тоже против ORM. Неужели я не одинок ты не можешь писать на яве и не использовать ORM. по крайней мере на практике. потому что ORM - это, если грубо говорить, перевод объектой модели в реляционную. ты можешь использовать хибернейт или что-то еще либо писать свой велосипед, но от ORM ты никуда не уйдешь.
>>2635686 > Микросервисы - мертворождённая идея, общая память - близка к этому то есть концепция РСУБД с 60-летней историей коммерческого применения это мертворожденная идея, ага.
>>2635686 >Локальный вызов this.save() после каждого внесения изменения в ООП-шный объект и YourDataMap, представляющая из себя обрезанный репозиторий без методов update и delete (это делает сам объект). В более общем смысле - чтение из оперативки, запись на диск. ебать, что это за шиза.
>>2635693 Именно. Команды из десятков тысяч крудошлёпов вышлёпывают годами то, что микро-команды или вообще соло разработчики делают за неделю. Угадаешь, как так получилось?
>>2635697 >Угадаешь, как так получилось? как у тебя всякая хуйня в манямире рождается? не угадаю и не собираюсь этого делать.
концепция реляционных баз данных это пример возможно самой успешной программной архитектуры, реализованной на практике. и, что уж несомненно, sql - это пример самого успешного dsl эвар. если для тебя это мертворожденная идея то ты либо клинический долбоеб либо человек который в принципе не знает о чем говорит.
но то что описал во фразе > Локальный вызов this.save() после каждого внесения изменения в ООП-шный объект и YourDataMap, представляющая из себя обрезанный репозиторий без методов update и delete (это делает сам объект). В более общем смысле - чтение из оперативки, запись на диск. никакого отношения к нему не имеет, это просто примитивное описание кеша, которое может работать с простыми объектами, не имеющими иерархическую структуру. если ты попробуешь применить такой подход для работы с полноценными объектами, поддерживающими циклические связи, связи многие-ко многим, списки, коллекции и т.д. то ты охуеешь, так как тебе придется, по сути, писать то, что в хибере называется кеш второго уровня.
>>2635682 >ты то скорее всего опытный, а я просто вкатыш
ИМХО тебе уже на это должно быть похую. Те оффер дали? Предполагаю что дали, раз "в команду зовут". То есть сама команда с тобой поговорила, отсобеседовала и признала достойным. Все. Нечего себя принижать за просто так.
>если игорь1 и игорь2 решат уйти в отпуск, то меня выебут и высушат овертаймами
Всех в одно время обычно не отпускают. Существует такая штука как "план отпусков". Попасть в ситуацию ты можешь если игорьки из твоего примера разом заболеют и уйдут на больничный, но даже тогда должна быть еще серьезная предрелизная нагрузка, чтобы дело до овертаймов дошло.
И хэй, сложности будут всегда и везде. И рано или поздно будет овертайм, который тебя высушит досуха, это неизбежно ни на каком проекте. Если заранее накручивать себя на такой негатив, никогда не вкатишься. Уволиться всегда успеешь.
>>2635723 Неуважение к собеседнику. Заглавные буквы придумали не просто так, а для того, чтобы читать было удобнее. Набирать текст без заглавных букв не намного легче (вообще не легче практически), а читать сложнее. Это либо явное выражение неуважения к собеседнику (смотрите, мне похуй, как ты прочитаешь, зато я 0,1 секунду сэкономлю), либо стадное поведение (долбоеб скопировал стиль письма своих протыков).
>>2635725 >Неуважение к собеседнику. соси хуй быдло, что тебя уважать если ты несешь феерическую хуйню. в реальности за эту чушь что ты тут транслируешь тебя пидорнули бы давно с любой вменяемой команды как профнепригодного.
>>2635691 >ты не можешь писать на яве и не использовать ORM. по крайней мере на практике. потому что ORM - это, если грубо говорить, перевод объектой модели в реляционную. ты можешь использовать хибернейт или что-то еще либо писать свой велосипед, но от ORM ты никуда не уйдешь.
>>2635755 А по моему, оно того стоило хотя бы ради того, чтобы дропнуть навсегда метод list(), возвращающий List без дженериков. Меня такие вещи гораздо больше триггерят, чем чучуть возросший объем кода.
Как в контроллере принять данные формы, в которых пара текстовых полей и прикрепленный файл. В гугле такие случае вообше не описываются, только отправка формы с одним лишь файлом(((
т.е. ты в самом языке определяешь dsl для работы с базой и используешь его в коде так же как ты используешь sql в консоли субд, без всяких костылей типа Session, Query, Resultset и прочих вспомогательных нагромождений. Но, увы, в яве так сделать нельзя.
>это все еще преобразование объектов в реляционную модель через генерацию SQL-запроса на основе полей/метаданных класса
Ну ты загнул. Ты эдак и JDBC можешь назвать ORMом. А хули? ResultSetы же - обьекты?
Нтак тоже умею. Смотри:
>альтернатива выглядит, например, так: >т.е. ты в самом языке определяешь dsl для работы с базой и используешь его в коде так же как ты используешь sql в консоли субд
В JOOQ есть класс, который называется литералли DSL, и которым ты литералли описываешь SQL в типобезопасной манере (в отличие от примера на кложуре, кстати, который ты привел) средствами языка Java. Выглядит это примерно вот так:
>>2635539 Какая нахуй возгонка - достаем поле вложенного объекта без риска нарваться на НПЕ. В orElse можешь "" авставить, если тебя null так тригерит.
>>2635691 > ты не можешь писать на яве и не использовать ORM. по крайней мере на практике могу. ОРМ придумали и зафорсили лет 10 назад. Как же до этого жили?
Какие проблемы решает ОРМ? Сложность? Нет, сложность увеличивается, появляется куча скрытых камней и граблей, повышается требование к квалификации бекендера, появляется требование знания кишочков хибернейта и обхода его кривых мест
Быстродействие? Нет, быстродействие ухудшается Расход памяти? Расход памяти тоже ухудшается.
Так какую проблему решает хибернейт? Я скажу какую - вкатыши боятся sql и думают что хибернейт позволит поместить это в черный ящик и как-то там сам всё сделает. Это ошибка. Теперь вкатыши вообще не умеют без хибернейта слать запросы в базу и думают что это невозможно
>>2635880 Аночоусы, у недавно вкатившегося вопрос. Так фильтровать вообще нормально? Мне приходит лист енумов, нужно сделать реквест и получить из него лист объектов. Вернуть объекты нужно только те, в описании которых находятся value енума. В описании много текста, а искать нужно только по определённому слову. Изменить то, как мне приходит ответ из реквеста я не могу.
Мне кажется я хуйню написал и можно лучше, но никак не вижу как это лучше сделать
>>2635905 А что не так с листом? Стринги я принимать не могу, значений будет много и они фиксированы.
>>2635907 1 - Понятно что как говно, потому решил спросить. 2 - А как иначе? Вижу что там фильтр в фильтре по сути, но ничего придумать не могу. Лист foosAndBars на хэшмапу? 3 - Там заранее стоит остановка работы сервиса если ничего не найдено, так что не будет нпе
>>2635911 >1 - Понятно что как говно, потому решил спросить. >2 - А как иначе? Вижу что там фильтр в фильтре по сути, но ничего придумать не могу. Лист foosAndBars на хэшмапу? >3 - Там заранее стоит остановка работы сервиса если ничего не найдено, так что не будет нпе тупоголовый блядь
>>2635924 Трабла в том, что этот филд description по которому я смотрю имеет в себе много всего, по типу "qwe foo qwe". Я пробовал сначала смотреть со стороны листа енумов, но тогда будет пусто ведь.
>>2635865 >Так какую проблему решает хибернейт? Я скажу какую - вкатыши боятся sql и думают что хибернейт позволит поместить это в черный ящик и как-то там сам всё сделает. ой вей. ты говоришь хуйню. хибернейт решает много проблем, и 1) основная - это управление сложностью, а именно упрощение и сокращение количества написанного кода. ты просто не видел систем хотя бы с парой сотен таблиц где всё общение с БД орагнизовано на голом jdbc. Там количество кода на порядок больше чем при использовании самой простой ORM. 2) кросплатформенность на уровне субд 3) КЕШ второго уровня 4) четкое разграничение уровня приложения и БД. именно благодаря инструментам типа хибера страшную ебанину вроде бизнес-логики на триггерах и хранимых процедурах сейчас можно встретить тьолько в самых дремучих легаси. именно поэтому практически в любой книге по ораклу выпущенной за последние 15 лет есть отдельная глава посвещенная критике хибернейтоподобных систем, потому как они ОЧЕНЬ сильно повлияли на популярность PL/SQL и подобных языков как языков программирования и у адептов написания логики в БД от них очень сильно подгорает. 5) множественные следствия из п.1 - упрощение тестирования, возможность наследования сущностей, типовые решения и шаблоны проектирования и т.д. и т.п.
> Сложность? Нет, сложность увеличивается, еще раз, ты просто видимо не писал приложений, по крайней мере достаточно сложных, на голом ждбц. там скрытых камней и граблей не меньше а кода в разы больше и возможностей допустить ошибки в разы больше, и особенно это усложняется тем что SQL невозможно проверить на этапе компиляции, и любой кусок кода типа такого >>2635869 представляет собой потенциальную проблему которую нужно покрывать тестами со всех сторон, потому что других способов проверить хоть какую-то корректность этого кода нет. Ну и отдельно нужно упомянуть безопасность так как любая достаточно сложная система на голом ждбц практически всегда уязвима перед sql-инъекциями, если хорошо в ней покопаться. И уж лучше прочитать книжку про хибернейт чем штудировать особенности PL/SQL, про которые написано, опять же, в разы больше.
еще раз - ты думаешь что если ты будешь писать вместо хибера голый скл то у тебя там будут всю дорогу запросы в духе update user set name='vasya' where id=1? хуй там. у тебя будет несколько сотен файлов типа пикрелейтеда неведомой ебанины которую легче каждый раз писать с нуля чем пытаться разобраться что в ней написано, а особенно фееричные запросы будут достигать размера в нескольких сотен строк.
>>2636013 у тебя на картинках аналитические запросы, которые хибернейтом ты ну никак не сделаешь. Только если выгружать данные и в жабе делать это же самое
>>2636029 а ты хочешь в своем приложении еще pure sql оставить? да ты ебанешься, просто выведи стактрейс хибера и посмотри какого размера запросы он генерирует. тебе, чтобы сохранить хоть-какую-то читабельность и вменяемость кода придётся переходить на хранимки/курсоры.
>>2636042 не понял аргумента. Я знаю что хибер высирает тонны говна и что я могу делать запросы лучше чем хибернейт. Кстати хранимка у тебя тоже не скомпилится если в ней ошибки.
То что есть большие сложные запросы - хибернейтом их никак не сделать. Их так и делают найтив сиквелем или хранимкой. Хибернейт может делать только простые круды. Но при этом непонятно какую проблему он решает.
кроссплатформенность - нахуй не нужно и сомневаюсь что хибер может её обеспечить. Кеш для бд - нахуй не нужен. Разграничение - глупость. Просто лишились возможстей хранимок/вьюх. С таким же успехом можно было запретить хранимки/вьюхи. Хибернейт и его генерацию точно также нужно тестировать. И ещё глазами смотреть что он там генерирует и насколько плохо
>>2635968 Потому что котлин, а джава ненужна. Ну шарпы просто редкий стек. Я бы если знал о предстоящем кризисе лучше бы пошел в универ и дрочил питон, го, линукс и облака вместо крудошлепства
public static Iterable<Character> iterate(String 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++); } }; } }; }
>>2636279 В смысле? У тебя вообще нет строковых полей, только аргумент. Нет никакой разницы, как ты вызываешь метод, передавай хоть статическое поле, хоть поле объекта, хоть переменную.
>>2635344 Похуй сколько стартует, главное как работает в долгую. Или вы там блядь апликейшены каждые пол часа деплоите? Так же похуй сколько жрёт памяти, если она работает быстрее. С точки зрения инфраструктуры купить больше памяти дешевле и проще чем добавить\купить больше CPU
>>2635214 Нулы это наёбка для мидлов и джунов которые блядь архитекруту не понимают и что падать надо как можно раньше. Потому что если тебе в проде придёт нул и ты его просто примешь как должное, то обосрёшься как тиньков и кого то выебут (кому-то даже понравится)
>>2636335 Чем null лучше 0 в ситуации когда событие не произошло? Темболее что это за извращённая логика когда событие ещё не началось, а его объект уже есть? Нахуй он нужен? Сделай объект Promise весь целиком, что он как бы есть, но детали его появятся когда он действительно случится.
>>2636338 >Чем null лучше 0 в ситуации когда событие не произошло?
На самом деле - оба варианта одинаково хуйня. Если поле предполагает семантику таймстампа, там должен быть таймстамп и ничего иное. Иначе что в случае с nullями, что в случае с нулями сохраняется риск, что подстановки, где ожидается этот таймстапам, сломаются.
>>2636341 Так он блядь запланирован на когда-то же, а не блядь просто в никуда? Кароче ты быдло джун. Ты чё блядь потом после создания объекта его ещё редактировать будешь меняя свой ебучий нул на какую-то реальную дату? Ты блядь про многопоточность и иммутабельность слышал?
>>2636345 Всё именно так. Оба варианта хуета хует, помимо того что нул это такая хуета шо лучше уж 0.
>>2636346 >Так он блядь запланирован на когда-то же, а не блядь просто в никуда? запланирован в одно время а стартанул в другое и как ты потом это узнаешь хуйлуша?
>>2636350 Если стартанули в другое от запланировано времени, предыдущий объект должен быть уничтожен, а не перезаписан.
>>2636351 Почитай про Promise. Ещё есть такая хуйня как имплементировать метод boolean hasDate(), и возвращать true если что-то реально было записанно, false если значение по дефолту стоит. А для getDate() метода, если поле содержит дефолт значени то выкидывать эксепшен. /thread
Да вы вообще непонятно о чем спорите. Один высосал какую то задачу из пальца про поле, которое какбэ начало эвента, но нулевое (совсем мозги уже со своими ОРМами проебали, торчки блять. Задача по совести начинается с бизнес-постановки, а у него уже ентити с нуллабл полями как аксиома и данность блять). Второй вообще непонятно че защищает - вроде нулы чихвостит, при этом предлагая всратый нуль-обжект-заменитель, и сам же признает что один хуй говно.
Где логика, где обьективность? Шли б спать, один хуй не договоритесь.
>>2636353 Не нуль-обжект-заменитель, а провославный фрейворк Promise, в который можно завернуть объект Promise<Date>. И да, у меня рабочий день, мимогуглодев в треде
>>2636352 >Ещё есть такая хуйня как имплементировать метод boolean hasDate(), и возвращать true если что-то реально было записанно, false если значение по дефолту стоит. А для getDate() метода, если поле содержит дефолт значени то выкидывать эксепшен. boolean hasDate() { return this.date != null; } Date getDate() { return this.date; } requireNonNull(object.getDate()); ахуенно придумал братан
И кстати, о каких конкретно промисах в джаве ты все время талдычишь? В джаве оные никогда не были в ходу, их роль всегда с лихвой покрывалась прочими штуками типа Future(Task) или CompletableFuture.
>>2636013 Пишу такие запросы как на пиках на jooq. И круды тоже пишу на jooq. Проблемы только с дедупликацией корневой сущности при джойне листа пока возникали. Но и они вполне решаются, конвертом приджойненого в массив джейсонов. И в чём я не прав?
>>2636366 >Такая же хуита что и коплитблфьючи. >Но куча ненужных апишек. >И его нельзя блокнуть, можно использовать только в асинхронной дрисне. Нахуй ты это говно сюда притащил, культист ебаный?
Пришел к выводу, что ты упоролся. Во первых, непонятно почему ты считаешь что в джаве нужны промисы, с учетом того что:
1) В джаве и так асинхроншины подобного уровня полно, включая CompletableFuture прямо из стандартной либы 2) Угар по промисам давно прошел, и щас в тренде зеленые потоки
Во вторых, так и осталось нераскрытым, как конкретно ты собрался промисами решать проблему нулей. Если ты ведешь тред к тому, что первый потребитель нуллабл-поля будет анально выковыривать его значение через then, то ну тебя нахуй с такими инициативами. Есть способы проще.
Короче либо ты пиздишь что из гугла, либо лычка гуглодевелопера не значит ровным счетом нихуя, и внутри гугла кодят такие же дебилы, что и снаружи.
>>2636380 Сорри, может меня недопоняли или я рил мудак. Я хотел сказать, что весь объект делать промисом, а не 1 поле, если этот объект будет как бы существовать когда-то там.
>>2636380 Угар по промисам в хайлоаде никогда не пройдёт, асинхронность лучший способ максимально утилизировать ресурсы. Зеленые треды это только если для каких-то ембедед вещей, которые на уровне железа\ос не могут в потоки, потому что никто лучше менеджить потоки чем ос\железо, не сможет.
>>2636397 >асинхронность лучший способ максимально утилизировать ресурсы.
Разве ж кто спорит? Но с трендом по промисам это не коррелирует никак. Щас роляет асинк-авайт, или разного рода *рутины. Код на промисах по сравнению с кодом на рутинах выглядит так же уныло, как код на коллбеках выглядел по сравнению с кодом на промисах или реактивных стримах.
>Зеленые треды это только если для каких-то ембедед вещей, которые на уровне железа\ос не могут в потоки >потому что никто лучше менеджить потоки чем ос\железо, не сможет.
А вот это неправда. Профит от управления потоками средой исполнения - в том, что среда исполнения может реализовывать принципиально новые, отличные от нативной, модели параллелизма, лишенные недостатков классического параллелизма через нативные потоки. Само понятие "менеджмент" для зеленых потоков - весь этот скедулинг, переключение контекста, конкарренси, зачастую не имеет ничего общего с классическими потоками.
>>2636387 Ошибка таких как вы, фанатов ОРМ, в том, что для вас запись в табличке идентична обьекту-энтити, и вы просто представить себе не можете ситуацию, где для разных кейсов существуют разные кортежи (структуры) данных, а для некоторых кортежи даже не нужны. Вас как прибили к этой модели, где есть только КРУД-репозитории и энтити, так вы с нее и слезть не можете ни вправо ни влево. А тем временем на уровне БД задача тривиальная. Всего то и надо сделать что update table set field = null where id = 42. Можно даже пойти дальше, и просверлить дырку в репозитории, ченить типа void nullifyField(int id), куда засунуть этот запрос, и не будет у тебя никаких нулей априори, равно как и не будет нуллабл поля.
О нееееет, "этож нечистый код, а как же швятой ОРМ". Мракобесы блять.
>>2636455 Еще бы этот @Nullable не был вендор-локнут на идею блять, и можно было бы его чекать на уровне сборки, фейля билд в случае чего, цены б ему не было.
>>2636779 Ты зачем так порвался? Я фанат через джуучек в базенку класть значения, нулики в том числе. А потом вынать большие объекты с большой вложенностью одним запросом с стешками и кучей джойнов.
>А если мне в базенке надо занулить ячеечку в табличке? Как без нулика то?
Ну ок, сорян, постановка вопроса звучала так, будто ты как типичный ОРМ-чел даже помыслить себе не можешь ситуацию, где есть что-то кроме ентити=таблица (и как следствие если таблица с нуллабл полями, нулей в энтите не избежать).
Что касается петпроектов. Как думаете, на чем лучше всего навыки практиковать? Ну и чтобы в дальнейшем не стыдно было показать. Я так понимаю парсеры, калькуляторы, магазины и прочие поделки с курсов идут нахуй. И что в итоге остаётся? По всей видимости на собеседованиях ожидают увидеть какую-то научную хуйню, чтобы с серьезным ебало ее презентовать.
>>2637330 Оно должно быть полезно на практике, а не синтетически высрано. Вот наберешь сто звезд на гитхабе, это уже хоть что-то. Как те долбоебы, вандалившие свои миллионные жс-либы - это взлетевшие пет-проекты.
>>2637335 >>Оно должно быть полезно на практике >>Вот наберешь сто звезд на гитхабе Энтерпрайзу похуй на звезды и гитхаб, либы берут с репозиториев, а не с рандомной помойки.
>>2637355 Не для энтерпрайза, а вообще. Т.е. это что-то, что применяется посторонними людьми для какой-то пользы, а не высрано для галочки. Чуешь разницу?
>>2637415 Есть мнение (не мое), что у мавена не очень хорошо все с распараллеливанием и инкрементальностью билда. Часть проблем, вроде как, решает поделка под названием mvnd, но я мало ее пробовал.
Еще, большущая проблема мавена в том, что помник аггрегирует в себе и билд пайплайн, и депенденси, не давая при этом внятного способа отделить и переиспользовать билдовую часть. Чтобы один билд пайплайн распространить на несколько проектов, надо нехило так изьебнуться, и собрать по пути немало граблей.
Курс по java от яндекс практикума пойдет для начала, чтоб я хоть немного смог претендовать на стажировку в самом же яндексе? Ради приличия попробовал на сайте решит самую первую задачу, тест прошла, дальше пиздец. Ну и про стажировку в яндексе, у кого какие мнения есть, если я из ебаной деревни, есть возможность таким оьразом хоть поьывать в Москве?
>>2637797 >смог претендовать на стажировку в самом же яндексе? Лол нет. Яндекс после своего же практикума на работу или стажировку не берет. Практикум - это самый минимум знания разработчика, как умение писать или читать
>>2637820 Про 1 задачу, это я имел ввиду на сайте контеста, где заявку на стажировку подаешь, но там чет алгоритмы еще нужны, т.е. вкатуну только киснуть в сбере/втб? А про сам курс яндекса есть мнение, там уверенные джуны получаются хотя бы? Спасибо
>>2637826 Нет. Почти все курсы это дно. Это даже не стажер. Плюс для многих прохождение платных курсов для дебилов это показатель, что ты сам не умеешь учиться, искать инфу и тебе нужны пендели. Если и будешь брать курс, лучше никому не говори, что его проходил.
>>2637834 Учту, я впринципе видел, что люди советуют пиздеть про опыт работы, чтоб на позицию миддла вкатиться сразу, заучивая вопросы/ответы собесов, но эт же пиздец. Как они держатся больше пары недель, или таким оьразом и нарабатывают опыт работы? :( >>2637837 Но почитывая треды, я вижу, что зп выше чем у яндекса, и не так ебут при собесах, не так ли?
Как сделать так чтобы что-то вроде <img src="http//localhost:8080/C://outsideFolder"> работало? То есть чтобы картинки в хтмл подгружались из папки вне папки проекта. Пока подргужаются только из папки static что в resources.
>>2638005 Не, мне нужно было чтобы это путь был в серверной части. То есть сервер и на нем эта директория C://outsideFolder. Нужен был даже не именно абсолютный путь, а любой способ юзать динамичные ресурсы в сторонней папке(не resources/static).
Уже проблему решил через WebMvcConfigurer и метод addResourceHandlers. Кстати, можно как-нибудь это через application.properties прописать?
Я когда джаву только учил года три назад - наткнулся на рассказ о project valgalla. И ждал ее первое время. Вальгалла сейчас заморожена? Только лум и панама кое как пилятся и то непонятно когда будут в релизе?
Не уверен что до конца понял твою дилемму, но по моему ты обьебался. Ибо дженерики стираются только в рантайме. В байткоде они все есть в полном обьеме. Поэтому через рефлексию, например, ты вполне можешь получить инфу об дженериках через методы типа Class::getGenericInterfaces/Supertypes, или Field::getGenericType.
И даже если рефлексия тебе чего то недодает, ты всегда можешь спуститься на уровень ниже, взять какой нибудь байткод-тул типа ASM или ByteBuddy, пропарсить им байткод классов и извлечь всю нужную инфу. На твоем месте, если б передо мной стояла генерить что-то в билд-тайме по классам и их аннотациям, я б сразу забил на рефлексию и шел бы этим путем.
мужички, подскажите плиз у меня в новой JDK19 джаве то ли работает то ли не работает "super" по гайду нужно вписать такое super(speed,weight) а у меня работает только с super( ). и я не понимаю оно наследуется или просто новое вводится. мне просто нужно чтоб наследовалось. нагуглить не могу . заранее спасибо за помощь.
>>2638276 В этом ошибка первый скрин-как у меня второй как надо(я так понимаю), у меня супер красным горит ,когда делаю по гайду Снизу в транспорте была простая пустышка,думал мб пофиксится
Да , я первую неделю на Джаве пишу. Так что прошу извинить меня за явные ошибки с регистром кода. Пока еще не вошло в привычку и понимание что к чему. Довольны моей письменной речью теперь, Уважаемые Пользователи анонимной площадки для постинга букв?
Походу даже на спринг бут 3.1 с 2.7 не будет смысла переходить. Там в большинстве сервисов что-то сломается, а фич новых и полезных нету так то. Или есть? Наверно в конце года/в начале следующего прыгать на джаву 21. К бут там уже будет 3.3/3.4.
Есть ли смысл использовать в своих пет-проектах логгер или это лишнее? И какая разница между объявления логгера с помощью аннотации Lombok и статического объекта интерфейса Logger?
>>2638994 В целом изучить, как настраивать логбэк или лог4ж, имеет смысл. Это пока приложуха локально задеплоена, ты можешь к ней и дебаггером подлезть, и прочими тулами, и в целом на все похер. А в боевом окружении отсутствие логов очень запросто превращает жизнь команды в ад.
>>2639067 Ну может быть не один параметр и у параметров внутри тоже могут быть нуллы, а нужно создать конкретный декоратор, где их не будет. Значит нужно либо заиметь эндпоинтов по количеству декораторов, либо как-то ифами разгребать и сохдавать нужный
Аноны, пишу кастомный плагин для Gradle, вопрос мб тупой но все же - должен ли я юзать Property (те, которые менеджатся градлом) в Extension'ах или Property только в тасках юзаются?
Т.е. берешь из расширения поля, пробрасываешь их в Gralde-managed properties?
If you have one Flux that depends on the result of another Flux, you can use the flatMap operator to chain them together.
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.
>>2639310 Что не так? Только не рекомендуется делать слишком много мап, да и вообще паблишер лишний раз создавать, а то по производительности может ударить
Пиздец блять попробовал через этот флатмап зачейнить всё. В итоге упёрлось в гугление почему реквесты выполняются два раза, оказалось что это-то непрямого сабскрайба от флатмапа. Помог в этом разобраться как не смешно чатгпт лол. Потому что гугл на жсовские и ангуляровские вопросы на стаковерфлоу меня кидал.
Не кароче я объебался и ошибка осталась. По какой-то причине она на время тогда пропала. Может потому что я попытался сделать из моно флакс и юзал concatmap хз. Как это всё выглядит: firstMono = webClient1.get
Это как то так должно выглядеть. 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>
>>2639445 Суть то я понял, пасибо анончик. Ток тупой я чет для этого пока-что. Пойду перепишу это всё с реакта, а то умру потом ещё больше функционала так писать
Я не понял, то за зоопарк apache.commons? Это же просто свалка творчества Васянов, типа питоновских библиотек или плагинов к Идее или я что-то не понял?
Пытался загрузить в Идею примеры кода из Пактовской книжки и там все нахуй обмазано импортами этого говна типа org.apache.commons.codec.binary.Base64 и в мавене это не прописано (еще и я в мавене не разбирался)
>>2639550 Читай Хорстмана, там почти нету внешних библиотек. А в том месте, где появляется он показывает какой гемор их подключать без сборщика. Заодно поймешь что мавен тебе нужен пиздец как.
>>2639637 Уныло обмазываться всеми этими фреймворками тестами, сборщиками профайлерами, персистансами, аджайлами, жирами еще до того, как начнешь писать что-то из 1-3 классов.
Изучил гит, который сейчас мне никак не помогает, теперь еще мавен, потом блять JUint какой-нибудь понадобится. Я так никогда не продвинусь =(
>>2639543 Это творчество васянов было актуально во времена Java 1.5-Java 1.6. Потом да, в Java 7-8 уже большая часть нужного появилась в стандартной библиотеке (или в Спринге)
>>2639642 Да я читаю и Хортсмана, и Эванса, и Java Precisely параллельно, потому что мало кто пишет четкие определения для терминов и приходится из нескольких источников собирать.
>>2639659 Да-да, именно такое уныние из 00-х и вызывает сайт apache Зачем-то Nick Samoylov в своей книжке 2022 года использует все это окаменелое говно. Значит, идет он нахуй со своей книгой, хотя теоретическая часть была неплохая.
>>2639674 За дифференцирующими определениями token, expression, statement я залез в книгу про компиляторы. Это было важно, чтобы понимать синтаксис (где ставить ; , {}) Static code и non-static code. Четкая структура, которая есть у class-header (<access modifiers> public/private/protected <keyword> class <class name> <extends-clause> <implements-clause>)
У Хортсмана вообще в виде аналогий ("ну вот представь, если", "это похоже на то, когда"), это немного не то, к чему я привык в инженерных дисциплинах. Но это можно преодолеть, конечно.
>>2639679 Заставляют примеры кода от издателя, в которых используются методы классов из библиотек. Неработающие импорты не дают скомпилировать файл примера.
>>2639567 Схуяли? Пусть сначала java core подтянет, поймёт что такое jar, в итоге он сам захочет мавен себе. А не зная java core даже он никогда в жизни нормально не поймёт что это такое и нахуя нужно и как работает
Да отьебитесь вы от человека, душнилы. Пусть как хочет так и учит.
Это в нормальных экосистемах можно начинать учить язык с билд-тулов, потому что тот же cabal init, например, одной командой создает компактный проект с прожиточным минимумом по дилбовой обвязке. А мавен с джавой сразу задирают порог входа в небеса, потому что могут предложить лишь стопятцот архетипов, которыми один хуй никто не польузется, где хуй пойми с какого лучше всего начать и хуй пойми что намешано.
>>2639902 С Идеей немного проще, конечно, но в этом случае она не смогла найти и скачать импорты. Я даже руками искал (через интерфейс Идеи) в мавеновском репе библиотеки, но и там ждал провал.
>>2639918 Идея, когда дело доходит до менеджмента мавен-модулей, глючная, как ебаная сука. Каждый раз плююсь на нее как первый раз.
Создаешь подмодуль - в диалоге где выбирается родитель она постоянно сует рутовый модуль. Ты ей выбираешь нужный, затем чуток правишь имя проекта, она все равно меняет на рутовый. Ненависть бляяяядь. И сука как стелсово она это делает, крыса... Недоглядеть как нефиг делать.
По ошибке вьебал не то имя у проекта? Положил не в тот парент? Удачи в правке. С первого раза сама идея никогда ничего не переименует и не переместит. Никогда! То переименует артефакт, но не папку. То папку, но не деклароацию в modules.
И ведет она так себя по ублюдочному кучу лет уже. Никто не фиксит, всем похуй.
>>2639927 Да я уже заметил, когда решил просто Maven-артефакт-application создать в Идее и она мне сделала имя GroupId с $ в начале. Без всяких запросов подтверждения ("что-то не так с именем, может передумаешь?") и возможности откатить.
>>2639902 Так ебать, если он не понимает как работает импорт и как работает classpath, и зачем ему apache commons, на кой хер ему лезть в мавен?
>>2639958 Пока что в начале обучения можешь. Потом - нет, интерфейс очень важная часть ооп. Могу порекомендовать почитать Part 1 книги touch of class B. Meyer'а. Разложишь себе по полочкам разницу между классом, объектом и интерфейсом
Двачик, выручай вкатуна Наблюдаю проблемы с печатью инфы про аккаунты из БД в сервлет. Есть метод getAccountsShortInfo() который читает инфу об аккаунтах из БД. Почему то printWriter в сервлете перестает писать любой текст после вызова этого метода (хотя возможно причина не в самом вызове метода). То есть он не пишет данные из БД вызываемые в методе, и так же не пишет обычные любые String после этого (Строка "After database reading") При этом при дебаге видно, что printWriter успешно собирает ВЕСЬ нужный текст, но сам сервлет отображает только тот текст, что идёт до вызова метода getAccountsShortInfo() Думал, что данные из буфера не полностью передаются, но методы flush() или close() нихуя картину не меняют
>>2640003 Или еще гипотеза. Ты уверен что проблема - в респонзе, а не в браузере? Может хтмль пришел весь, но браузер его криво отрендерил? Чекал вкладку networks?
>>2640060 Не помогло, всё равно только половина текста Кстати, вижу вот эти красные ошибки, может и правда чот с браузером не то? Хотя в ебучем Edge та же картина - только половина текста
>>2640065 Вообще не ебу теперь. Поместил закрытие writer в блок finally и теперь сервлет просто пропускает инфу из БД. КАК НАХУЙ ЭТО ВОЗМОЖНО? КАК ОН ПЕЧАТАЕТ StringBuilder НЕ ПОЛНОСТЬЮ?
>>2640091 Братишка, так всё логично. У тебя функция, которая лезет в бд нихуя не работает. Выбрасывает экспешн. При этом вместо обработки ты нихуя не делаешь. Посмотри в логи приложения в идее, у тебя там наверняка залупа
Кинь код на pastebin я тебе покажу как это должно быть по человечески сделано
>>2640119 Я на самом деле просил только код сервлета, чтобы показать тебе как надо было делать обработку ошибок. По хорошему ещё нужно добавить логов/выводов в консоль, это помогает очень сильно. Логгером ещё не умеешь пользоваться? Очень важно в программировании уметь определять где что не так пошло
Если я честно скажу, что при стажировке/junior позиции, буду юзать gpt и стараться разбираться в проблеме, какие подводные камни будут при собесе? Эта хуйня все равно лучше пишет стандартного junior разработчика, если адекватно описывать ТЗ
Нужно развернуть сервер на локальном хосте с базой данных и json файлом. Когда буду делать с моего приложения запрос на сервер, данные из базы данных должны будут отправится в json файл, и оттуда я их буду брать. Подскажите пожалуйста, как это реализовать ?
>>2640531 Звучит как - мне нужно вывести спутник на орбиту, подскажите как это реализовать? Откуда мы блять знаем твой уровень подготовки к запуску сервера? А про файл ты вообще бред пишешь
>>2640531 При чём тут файлы? Тебе надо получить ответ от сервера в формате json, а данные в ответ подтянуть из базы? Если так, пили на спринге rest-контроллер.
>>2639543 >Я не понял, то за зоопарк apache.commons? ядреное легаси.
>>2639668 >Зачем-то Nick Samoylov в своей книжке 2022 года использует все это окаменелое говно. ты это говно встретишь с вероятностью 95% в любом более-менее серьезном проекте. при этом сами эти апачевские либы вполне хороши, это набор простейших инструментов которые просто работают. юникс-стайл как он есть, без всякой архитектурной залупы, монтстрообразности, оверинжиниринга и мешанины всего и сразу как в гуаве или спринге. чувствуется что ее писали люди у которых мозги на чистом си работают. там где можно обойтись одним статическим методом обходятся одним статическим методом, а не городят огород из нагромождений интерфейсов для сримов и абстрактных фабрик
>>2640607 Там какие-то дикие коллекции типа 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"
>>2641388 Расскажи, пожалуйста, о своих знаниях с которыми тебя взяли на работу. + сколько времени понадобилось на ват и какие у тебя исходные данные (учишься/учился в универе или уже пытался учить языки до этого)?
>>2641394 Ага хуй тебе, так я все и рассказал. Чем меньше вкатышей будет, тем мне лучше по итогу, и так скоро будет борьба с чатжпт за сотыги. А ты лучше оставь это дело, вкат и так всё твердо и четко.
>>2641413 Так ты уже устроился, что тебе терять? С боевым опытом ты уже никуда от рекрутёров не денишься если пол года - год проработаешь. Меня никто не остановит вкатываться, просто хочу ориентировочно просчитать сколько времени у меня на это уйдёт
>>2641479 Я щас год отработаю, а ты потом себе два накрутишь по советам от инфоцыган. По итогу будем вместе бороться за лычку мидла в рога и копыта, а мне этого не надо
>>2641479 Просто берешь и подаешься во все 26 мест. Без удаленки без опыта тоже подаешься(подрочить собесы). С опытом в год тоже подаешься. Через годик вкатишься скорее всего.
>>2641681 Что ты пытаешься сделать? Папка resources для статических файлов нужна. Если извратиться и предположить, что ты запускаешь jarник, то можно в архиве пеоезаписать файл, будет у тебя в него запись. Но юзкейс такой очень сомнительный, удаление гланд через жопу. Лучше создавай файл в отдельной директории и пиши туда
Аноны, помогите, пожалуйста. AuthenticationFailureHandler, метод onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception). Хочу сделать редирект response.sendRedirect("/redirectPage"). Как мне добавить аттрибуты к редиректу? Можно как-нибудь получить RedirectAttributes?
>>2642080 >>2642105 Короче, когда конфигурируешь SecurityFilterChain, там метод failureHandler(AuthenticationFailureHandler afh), нужно передать объект класса который имплементирует этот интерфейс и оверрайдит метод onAuthenticationFailure. Там проходит обработка зафейленной аутентификации. В параметрах два сервлета и сам экспепшен фейла. Что отреагировать на фейл ауфентикации юзается метод сервлета респонса response.sendRedirect(String location). Но делается это без аттрибутов. Мне нужно разобраться, как имся два сервлета надыбать эти аттрибуты.
А че никто не пишет, что лум в 21-й джаве уже выйдет из превьюхи и будет в релизе? Доучивайте виртуальные треды теперь. На 21-ю лтс активно покатятся. Там и паттерн матчинг для свича и виртуальные треды. Напоследок порезвитесь, пока чат-гпт 4 с работы не выкинет
>>2642451 >>На 21-ю лтс активно покатятся. Почему ты думаешь что ради лума станут перепрыгивать несколько лтс версий? До 2025 дотянут, а там видно будет нужен ли этот лум вообще.
>>2641257 Может быть проблему-то они и решили, причём, в какой-то мере элегантно (без миграций и изменений API), только суть вообще не в сборке, их решение — по сути своей костыль. Корень проблемы в монорепозалупе.
>>2643125 А данные я откуда получу? Ну создал я комплитаблфьючер, напихал туда цепочку стейджей со своими говнолямбдами. Теперь у меня есть объект фьючера, который знает про то, какой код надо выполнять. А чтобы получить данные, всё равно надо вывать get() и ждать.
>>2643158 >Тебе надо написать функцию и вернуть ее, пускай с ожиданием ебется пользователь. В этом вся суть фьючеров ну кроме чейнинга нескольких функций? Ну писос, а я-то думал, что это ультимативное решение всех проблем мира.
>>2643175 Улучшается утилизация ресурсов, некоторые функции вообще могут не вызываться. Но никакой особой магии там нет. Стоит ли ради этого переебашить весь код в процедурные портянки? Зависит от нагрузки и задач.
Подскажите пожалуйста, логирование писать внутри классов которые определяют поведение с каким то функционалом или там где мы этот функционал используем ?
>>2634365 Аноны, это правда? Работаю в вебе уже несколько лет без вышки отчислился на первом курсе, но не с джавой. Пиздец как руки опускаются после такого, когда понимаешь, что все твои скиллы и знания никому не нужны без формальности в виде корочки.
>>2643384 для западного барина наша "вышка" это уровня прослушанного курса в индусском "университете". Какой-нибудь сертификат OCAJP будет весомее диплома мухгу
>>2643410 You're fucked then. Хочешь работать в ниишечке, на заводе или ещё какой муниципальной залупе - диплом нужен. Другой работы не осталось, бодишопы свалили в сербии, за оставшиеся крохи сражаются мидлы и сеньоры
>>2643384 Та же хуйня. Дропнул на 4 курсе. Никогда бы не подумал, что она может пригодится спустя много лет на вкате в гос шарагу, вкатился по итогу в местный мухосранский аналог ерата И вот я уже было забил, но тут пыня начал мобилизацию и показал хуй с айтишной отсрочкой всем, у кого нет вышки.
>>Если в хорошем вузе Таких штук 5 на страну. Да и в вузике обычно нет времени учиться, надо зачеты, лабы, курсачи сдавать.
>>2643458 Ехать на Кипр и устраиваться в геймдев какой-нибудь, где это может пригодиться.
>>2643410 На западе работает так: Нет диплома = потолок по зп в N доллларов. Если это до мидла/сеньёра Есть диплом = потолок по зп в N доллларов. Если это до мидла/сеньёра.
Все должности дальше либо заблокированы без магистратуры либо берут но там сильно урезают зп.
Кароче если ты планируешь рости выше сеньёра на западе - пойди на заочку в плохой вуз на хорошую (в плане для того чтобы вписать в резюме) специальность. И отсиди там до корочки
>>2643513 >И отсиди там до корочки Хорошее выражение. Мясо на сковороде до корочки запекается, а скубент в универе отсиживается. По итогу шо то непробиваемая хуета, шо это.
Как научиться шарить за микросервисы? Сейчас читаю всякие мурзилки и смотрю видиксы на ютубе по всяким паттернам типо circuit breaker, sidecar и тд, норм для начала? И что потом глянуть, как закончу?
>>2643843 А что в ней сложного, если ты не в топ 10 вузов учился? Я вот вообще без напряга закончил. Проебывался в общаге, пока не останется пару недель до начала сессии, потом трайхардил и снова хуй пинал. Ну мне еще с ковидом повезло правда, на удаленке закрываться было в разы проще.
нашел вакансию где предлагают выполнить тестовое задание а после бесплатная стажировка на 2 недели. к заданию прилагается судя по всему их документация апи на 200 страниц. пахнет каким-то наебаловом, словно хотят выполнить реальную работы чужими руками, а потом кинуть. мысли?
>>2644073 Если по другому никак, то это не интернал пакет, а значит все допустимо и даже поощряемо. А если интернал пакет - то ты долбоеб. Ну или у тебя упор в перформанс, а значит для тебя применяются правила не джависта, а байтоёба, и тебе тоже можно.
как принято Docker и docker-compose файлы хранить? Хочу на хостовой машине запустить эту аппликуху. Значит они должны копироваться в /target рядом с джарником? И на хост копировать джарник + Docker + docker-compose.yml ?
>И на хост копировать джарник + Docker + docker-compose.yml ?
Это - не вопрос хранения, это - вопрос дистрибуции. В простейшем случае просто заливают это все в мавен и докер репозитории, откуда их потом относительно просто скачать на хосте.
Докер композ тебе не нужен в джарнике. Что ты там с ним делать будешь - сам подумай?
В таргет докер композ положитть относительно просто - достаточно просто обьявить его мавен-ресурсом. В этом есть даже свои бенефиты - можно включить фильтеринг и подставлять в композ версии собранных имаджей и джарок. Но опять же - вопрос дистрибуции не ограничивается складыванием все в таргет.
>>2644433 может есть какой-то индустриальный стандарт, где хранить - в руте, в src/resources или в src/docker Во всяких кубернетисах эти докер файлы достаются прямо из гита?
Есть конвеншен - хранить ресурсы приложения, к которым должен быть доступ из класспафа, в src/main/resources
Есть конвеншен - складывать все, генерируемое билд-пайплайном, в таргет.
Докер композ, в зависимости от его назначения, может подпадать под разные вышеописанные категории. Например: докер композ может быть частью интегрейшн-тестов на testcontainers, и тогда его придется положить в src/test/resources, чтобы тесты потом могли его найти и стартануть. А в твоем случае этого не нужно.
Дайте идею плиз, почему maven в Idea не скачивает свой ебаный плагин из своего ебаного репозитория. Какая же это хуйня - чувствуешь себя ебаной вэб макакой, методом тыка подбирать нужные символы в ебаном XML Ни нормального описания ошибки ни логов процесса
Дело в том, что некоторые люди начали выдумывать опыт работы в вымышленных компаниях, чтобы обойти фильтры HR. Они создают компанию с названием DigitalAbu Inc. (США, 2-летний контракт) и таким образом обманывают фильтры HR!
Я сам столкнулся с этой проблемой и не хотел принимать самозванцев в свою команду. Поэтому я начал задавать вопросы, связанные с ECMA, RFC и IEEE, а также алгоритмические вопросы, которые реально сложные и покажут мне что человек реально умеет решать задачи, а не просто зубрить как очкастая студентка.
У меня также есть ситуационные вопросы, на которые может ответить только опытный человек, то есть я описываю проблему и он говорит как ее можно было бы решить, чувак с курсов на это не ответит.
ЕБУ САМОЗВАНЦЕВ КАК МОГУ Отчищаю рынок от мошенников
Сижу в чате лидов, так как я поступают очень многие. Повторяю, самозванцев стало очень много, реально много.
>>2644907 Вас таких малый процент, мне ничего не мешает придумать опыт работы, отточить его и заучить вопросы для позиции миддла 🤫 Как получаю стабильные приглашения на собесы, так и буду получать, не имея реального опыта.
>>2644907 >>RFC реально спрашивают. Ты прям так и спрашивает процитируйте мне второй пункт и рфц 228 и четвертый из рфц 1488? Не боишься что они просто загуглят на месте?
Можете посоветовать какой-нибудь задачник для тренинга всяких коллекций и прочего подобного? Чтоб вот там была условно глава по использованию set, глава по листам, глава по map? Можно с базовыми приколами от стрингов, интеджеров и т.п..
Я читал Лафоре когда-то давным давно, ща по новой вкатываюсь, но я помню что там на протяжении половины книги автор пытался переписать ArrayList в LinkedList своими усилиями. Это немного не то что я хочу. Точнее много не то.
Я помню что одно время у вас в шапке висела ссылочка на какой-то простенький сайт с простенькими вещами (не уровня leetcode/codewars), а вот там прям главы были по стрингам, коллекциям, но простенькие задчки такие. или не у вас.
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 (*).
Как правильно добавить все это доверенные пакеты? Путь должен быть прописан как приложении продюсере или приложении консюмере? Хотя я и так и так пробовал, но не заходит.
>>2645466 из всего этого только илонмаск с четвертым пунктом напрягает (первые 3 пункта это цикличная политота, цикличная политота + цикличность рынка, цикличность рынка). Но и то с оговорочками. Расписывать всё лень, но у меня есть примеры из личной жизни когда подобная автоматизация потом же откатывалась на прежние позиции. Мамка на железке работает, на позиции которую можно было автоматизовать еще лет 20 назад, и таки пытались. Но потом выросла масса побочек, в итоге решили отказаться от этой идеи (и даже вернули набор в местном ведомственном мухосранском училище на ее позицию). Поэтому смешно кажется что запросом в гпт будут писаться программки. Тот же Tabnine попробовал, вот в нем я вижу будущее - это же ведь просто сумма гугла и интеллисенса, а не индусокод, написанный бездушной программой, на которой потом вылезают баги в виде отстутсвия связей с реальностью, прежде всего ООП.
Библиотеки по парсингу json как правило читают json формат и помещают их в сущность. Что делать если я НЕ ЗНАЮ блеат какие там поля в этом жесоне ? Приходит ответ от веб-сервера на 10000 символов.
>>2645653 1. Тебе не нужна ентити, чтобы парсить json. Спроси у чатгпт про метод readTree в Джексоне. 2. Неизвестные поля можно игнорить при десериализации в ентити, початься с чатгпт как настроить джексон 3. json-ы можно параллельно сохранять в nosql базу - когда поймешь, какие там поля, тогда и напишешь энтити, а данные будут уже заботливо дожидаться тебя на диске. Это я в кабанчике прочитал, называется schema-on-read. Охуенно?
>>2645653 Если вы не знаете, какие поля будут присутствовать в JSON-ответе, вы можете использовать библиотеку, которая позволяет парсить JSON в древовидную структуру данных. В Java вы можете использовать библиотеку Jackson или Gson для этого.
Например, в библиотеке Jackson вы можете использовать класс ObjectMapper для преобразования JSON-строки в объект типа JsonNode. JsonNode представляет собой древовидную структуру данных, которая может содержать любые поля и подобъекты из JSON-строки.
Пример использования библиотеки Jackson для преобразования JSON-строки в объект JsonNode:
// теперь вы можете использовать методы 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, когда вы не знаете заранее, какие поля будут присутствовать.
В какой папке вообще должно быть тестирование? Спринг инишалайзир создает отдельный папку test, там нихуя не получается протестировать, так оно не автоварит ApplicationContext. Если пытаться с главной папке сделать, то там не работают тестовые аннотации. Как правльно все сделать?
Интересно, чтобы получить работу нужен опыт. Если не опыта - ссылку на гитхаб с проектом. При этом от блогов и парсеров все ебало воротят. Что в итоге? Неделями сидеть придумывать идею, чтобы ушлые пидоры взяли за 50 тыщ работать? Так я же в бекенд пытаюсь, нахуя мне фронт? Инди игру говорят сделай, на мобилки, хуею блять.
>>2647079 Так тут дело не в местных экспертах, а в ситуации. По итогу выясняется, что нужно быть до кучи креативным менеджером, разработчиком игр, тестировщиком, фронтэндером и маэстро минета. Чето дохуя движений ради минимального выхлопа.
Кто стажировку в яндексе проходил, расскажите какого это, пройти собесы эти ебучие, и что делали у них стажером, в итоге давали оффер? Могли не джуна дать, а повыше, хз какие у них градайии
>>2630528 Ну на счет того, что во всем лучше, я не согласен, хотя да, во многом действительно лучше.
Смысл Джавы и спринга в том, что: 1. На них дохуя всего написано (Джава раньше шарпа появилась) 2. Дохуя программистов (Прям пиздец как много, в разы больше чем шарпистов-.Netчиков) 3. Простота входа (Java проще шарпа, просто потому что меньше фичей) 4. Хорошая совместимость в Linux платформой, а значит сервера дешевле (Шарпы не так давно смогли в совместимость с Linux, с выходом .Net Core да и то пока что херовенько, а покупка винды для серваков - такая себе затея: 1. Дорого, 2. Мало специалистов => Дорого) 5. С джавы существующему проекту проще перейти на Kotlin или Scala, чем на C# 6. Открытость. В джаву правки предлагать может все сообщество, а C# это игрушка майкрософт и как они там решат, так и будет
В итоге на джаве получается дешевле писать софт, даже не смотря на то, что программисты могут стоить чуть-чуть дороже, так что все просто - джава тупо дешевле бизнесу. Но как язык, C# пизже, это да
Дали тестовое на джуна пик1. Вкратце, нужно реализовать онлайн магазин на микросервисах. Я начал с построения архитектуры, на пик2 то, что получилось. Опустил сервис организаций, тк лепить уже некуда. Есть мысли или замечания какие-то по поводу архитектуры? Кажется, будто хуйню какую-то сделал...
>>2647699 Я думаю, тут можно много допущений сделать и над кодом особо не потеть. Надо только выстроить взаимодействия и представить в голове, как это должно работать. Хотя я хз, количество микросервисов, которые у меня вышли конечно пугает, тоже кажется, что как-то дохуя всего. Значит, слать их куда подальше?
>>2647708 Ну по идее да, я правда вынес сервис, отвечающий за авторизацию и выдачу токенов, отдельно. Слышал, что зачастую это делают прям в гейтвее, но чет решил как на картинке сделать.
>>2647726 >>2647721 Там еще в конце написано «СУБД использовать PostgreSQL. Однако, API не должен быть привязан к конкретной СУБД». Так что, скорее всего, там не только свагер нужен.
>>2647839 Так и сейчас можно по-быстрому набросать простенький магазин даже без знания фреймворков. Просто использовать конструкторы какие-то, картинки, шрифты поменять и готово. Уверен, что на жс с фреймворками, это тоже достаточно быстро можно написать. Просто это не будут микросервисы.
>>2647672 >Кажется, будто хуйню какую-то сделал...
Картинка норм. Но так то ты еще нихуя не сделал, чтобы оценку давать. Такую же картинку ты бы мог откуда нить с интернета спиздить - это самая типовая дженериковая микросервисная архитектура.
>>2647853 берёшь спринг @ так, нужно прочитать 300 страничное тз и спроектировать бд и интерфейсы @ на это уходит пара тройка месяцев @ осталось всё это реализовать @ на это ещё пара лет минимум
>>2647762 >Микросервисную архитектуру придумали больные люди, канеш. ну а если серьезно, как это говно до сих пор не сдохло и кто-то всерьез еще строит приложения под эту шизоидную концепцию?
помню на каком-то древнем хайлоаде, еще в самом начале хайпа этой параши кто-то из архитекторов крупняка сказал что по суммарному опыту на микросервисаы нужно переходить если у вас в команде не меньше пятисот технарей, если меньше то просто нет смысла.
>>2647859 > еще нихуя не сделал, чтобы оценку давать А когда можно будет давать? Я ж по сути хотел для начала определиться с архитектурой, а следующим шагом уже идти и реализовывать это все.
> Такую же картинку ты бы мог откуда нить с интернета спиздить Ну я не пиздил, всю эту хуйню сам в редакторе нарисовал. Само собой, я уже видел что-то подобное в интернете, так что можно сказать, что сделал по аналогии.
>>2647888 >API должен быть написан с помощью микросервисной архитектуры дом труба шатал. Что за чурки писали Как с помощью микросервисной архитектуры можно писать api. Что вообще означает "написать api"?
>>2647884 >Я ж по сути хотел для начала определиться с архитектурой
Так нету ж нихуя. Где какие сущности? Где какие схемы данных? Где какие бизнес-функции (кто из сервисов что умеет делать)? Что, как, куда и когда по кафке гонять будешь? Как будешь обеспечивать консистентность всего этого? Вот это вот еще можно оценивать. А картинка - ну красивая, че.
>>2647900 Ну схемы, какими они должны быть, в тз же есть. Что примерно должен уметь каждый сервис - тоже. А насчет кафки, я изначально задумывал, что у меня будут ссылки в отзывах на определенный товар или в ордерах будет ссылка на юзера, который их сделал, с помощью кафки сервисы будут слушать изменения и, допустим, при удалении товара, удалять и отзывы на него. Что именно по кафке будет гоняться хз, как будто мне там и стринги хватит.
>>2645505 spring.kafka.consumer.properties.spring.json.trusted.packages=* или spring.kafka.consumer.properties.spring.json.trusted.packages=org.example в котором лежит LoginSuccess
>>2647564 >>Java проще шарпа >>просто потому что меньше фичей Нет, шарпомух, не по этому. Фич в джаве больше чем в шарпе, только они не в базовом пакете лежат, а раскиданы по либам. можно сказать что и котлин - плагин для джавы, его можно подключать и использовать в уже готовом проекте В джаве есть спринг с запуском любой магии волшебной аннотацией, а в шарпе такого нет и придется ебаться с настройкой любой ебалы самостоятельно.
>>2648094 Ну не я принимал решение о хранении, но для разработки удобнее, чем ебаться с десятком репозиториев. Да и монорепа это вроде 1 репа на все проекты/команды, у нас только наши микросервисы. У соседней команды своя репа с ее сервисами в рамках того же проекта.
> Виртуальные потоки, которые появились в Java 19, продолжают оставаться в статусе Preview API (предлагается финализировать их в Java 21). Изменений API, связанных с проектом Loom, в этом релизе нет АХАХАХАХАХАХХАХАХАХАХАЗХАХЗАХАХАХАХХАХАХАХАХАХАХАХА
Есть какая-нибудь принципиальная разница между тем как ты автоваришь, над полем класса, над конструктором, перед аргументом конструктора? Почему идея ругается когда прямиком в поле инжектишь?
>>2647672 Аноны - олдфаги, скажите, на джунов всегда такие тестовые давали? Лет 6 назад вкатун сошел на собес, ему аналогичное требовали сделать? Или это реалии современного рыночка?
>>2648476 Не понял, а что мешает написать тесты, если у тебя филд инжекшн? Есть же @mockbean или @injectmocks, можно с помощью них сделать моками филды
>>2648388 Мне на собесе кабан говорил, что там какое-то преимущество есть в конструктор инжекшн, связанное с циркулярными зависимостями. Не помню точно, че он там говорил, но вроде, если у тебя происходит инжект в конструкторе, то циркулярные зависимости недопустимы в принципе.
>>2648605 там для этого достаточно вопросик поставить. Ну и этим сахарок котлина не заканчивается, мне почему-то запомнилась возможность создания дата классов и добавление дефолтных значений для конструктора, но я очень поверхностно смотрел котлин, уверен, там еще приколы какие-то есть.
>>2648624 Ну типа. Если еще проперти поставишь, что допускаются такие зависимости, тогда через филды спринг разрулит, а через конструктор - нет. А чем плохи такие зависимости, чатгопота пишет: пикрил
>>2647672 Мне кажется можно просто сделать гейтвей, аус сервис, стор сервис, нотификейшн сервис без всяких кафок. Всё что связано с магазином, товарами, покупателями в монолит. Микросервисы соблюдены, ебалы меньше. Но задание всё равно объемное какое-то. Такое ощущение, что из-за вкатунопокалипсиса галера хочет найти джуна с навыками миддла за 30 тысяч.
У меня только что хибернейтовский CrudRepository перестал удалять. Я нихуя абсолютно не менял, чтобы это произошло. Пол часа назад все работало, и внезапно такое. Ни под каким методом ничего не удаляет из бд. БД постгрес. В чем вообще дело может быть? Я вообще ничего не понимаю лол.
>>2648653 Стоит аннотация @Transcational, так как в энтити одно поле @Lob. Но я абсолютно ничего не менял. И то, что еще недавно работало, просто не работает. Причем другие энтити, которые методы удаляния которых также помечены как транзакшионал, работают прекрасно. Даже все таблицы из бд удалил и заново заполнин, нихера.
>>2648647 >Такое ощущение, что из-за вкатунопокалипсиса галера хочет найти джуна с навыками миддла за 30 тысяч.
А таковы реалии рынка и есть. Если контора и берет к себе вкатуна, то это должен быть вкатыш-вундеркинд. 100500 откликов на вакансию позволяют им подобным образом охуевать.
>>2648653 >>2648678 >>2648652 Короче, вспомнил, что поставил у родительской энтити FetchType.Eager. И из-за этого перестало удалять. Хуй знает почему это так, но я убрал эту eager, и все норм (благо оно оказлось мне вообще не нужно).
Как вообще удалять когда этот фетчтайп стоит? Вилкой вручныю каждый раз и родительской энтити сначала убрать, только потом удалять через репо? Пиздец конечно.
>>2648830 Тут всё тестовое нахуй не нужно. Тестовое либо на максимум полчаса даётся и условие пишется нормально, либо оплачивается. Либо гарантируется трудоустройство после него. А тут скорее всего его никто даже читать не будет.
Есть два объекта. В объекте А вызываются методы объекта В. Как узнать какие методы объекта А вызываются? Причем не в рантайме, а которые просто есть в коде, декларированы. Как такое через рефлексию сделать?
Уже 30 резюме отправлено, ответили только 2 компании. Это нормально ? Или может у меня резюме неправильное ? Фио Должность Скиллы Образование О себе :/
>>2649080 айти индустрия находится в процессе клинической смерти. https://habr.com/ru/news/t/724094/ Половина вакансий фейковые, как минимум. В резюме нужно быть волчистым и рисовать себе 5 лет опыта минимум. Пиздеть как не в себя. Но в любом случае перспектив тут никаких
Через неделю выхожу на первую работу. Как подготовиться к этому моменту, чтоб потом обойтись без тупняков? Мб пока время есть, начать в чем-то разбираться, где часто поначалу спотыкаются? Или может наоборот хуй забить и наслаждаться последними днями, когда я не вынужден потеть над тасочками для кабанчика?
Если я создам ссылку типа StringBuilder например в поле класса, могу ли я несколько раз использовать ссылку в разных методах ? Или для каждого метода своя ссылка типа StringBuilder ?
>>2649447 Для чего это тебе? Предполагается, что при обращении к одной ссылке разные методы в один и тот же объект будут записывать общие данные: первый метод что-то записал в StringBuilder, второй добавил, третий ещё что-то добавил. Если надо, чтобы методы работали независимо с разными объектами, надо создавать отдельные ссылки. Если надеешься сэкономить память, создавая только одну ссылку, брось эту затею.
>>2648652 А у меня это говно перестало апдейтить, вызываешь save на существующей записи и оно создаёт новую. Это с обновлением на spring boot 3/Hibernate 6 так стало и непонятно как чинить
>>2648633 ваще циклические зависимости - это практически всегда косяк в архитектуре. они не нужны. нарушение третей нормальной формы, как сказали бы в соседнем треде.
>>2649758 >сервису заказов надо отправлять сообщения, а сервису сообщений нужен последний заказ юзера
Сначала, разбираться, почему так получилось.
В общем случае, любая цикличная зависимость разрешается одним из двух способов: 1. Либо инверсия зависимости (выделается какой то третий компонент, через который развязывается цикл) 2. Либо мердж этих двух штук в одну.
Как конкретно в этом случае поступить, надо смотреть. У меня например, первый вопрос который возникает, это "с какой стати сервису сообщений нужны заказы юзеров".
>>2649921 >"с какой стати сервису сообщений нужны заказы юзеров". требование что если у юзера есть заказ - добавлять в сообщение информацию о его статусе
>>2649926 А что вообще такое у тебя "сервис сообщений"? Какую роль он выполняет?
В моем представлении, он должен выполнять инфраструктурную роль посылки уже кем то сформированного сообщения по тем каналам связи, которые он поддерживает. Тогда и дилемма отпадает сама собой - пусть это требование выполняет тот сервис, кто формирует текст сообщения (сервис заказов).
>>2649932 Да ну нахуй. Интерфейсы коллекций - параша полная, их бы по совести с нуля переписать давно пора. Сделали бы Collection API 3.0, с явной поддержкой иммутабельности/персистентности. И не поверю что не могут из-за обратной совместимости: когда то же состоялся переход от векторов и Hashtable в сторону текущих Collection API.
>>2649944 Тут SortedSet::addFirst будут кидать эксепшен, вполне вероятно, что началась ментальная гимнастика, которая приведет к тому, что у иммутабл коллекций будет падать метод add
Кто-то из анонов было дело писал в треде, что к стандартному спринговому тестрированию лучше добавить еще одну депенденси. Как она называется, напомните, testContainers вроде?
не пынямаю. если чекед исключения - это норма, которые нужно обрабатывать и вызывать, то анчекед - это ошибки, которые не нужно обрабатывать, а нужно исправлять. тогда для чего я могу расширять класс RuntimeException, создавая свое исключение, если в этом нет смысла? и почему я так же могу вызвать например throw new IllegalArgumentException()?
>>2647672 Попытался еще поспрашивать по поводу этого тестового у эйчарки. Говорит, что прям это все надо реализовать, то есть анон, который предположил относительно простой генерации апишки свагером, не угадал. Спросил, сколько микросервисов вообще ожидают на выходе, ответ: сложно сказать. Короче мутная какая-то хуетень, скипаю нахуй. В чем я не прав?
Это очень спорное утверждение. Я, например, так не считаю. Чекед эксепшены в реалиях джавы - полная шляпа. Они становятся лютым геморроем когда дело доходит до лямбд. Еще, они имеют тенденцию просачивания в интерфейсы и засирания API бессмысленной инфой.
Забавен также тот факт, что на уровне рантайма всем похуй на тип эксепшена - они там все анчекед. Ушлые люди этим пользуются, и наебывают компилятор всякими SneakyThrows'ами из ломбока.
>>2650147 >>почему легаси? Заставляет писать код в стиле жава 7. С циклами, трайкечами и прочее поеботой из нулевых.
>>я хочу чтобы пользователь либы не забыл обработать этот эксепшен Ты просто заставляешь его писать тра-кетч, не более. Если захочет - обработает. Задокументируй лучше подробнее, чтоб пользователь понимал когда прилетает эксепшен
>>2650196 Чекен и анчекед эксепшены, хоть, по виду и очень похожи, являются фактически совершенно разными конструкциями.
Непроверяемое исключение — это ошибка в работе программы. Программа прерывает своё выполнение в этом случае и просит разработчика решить проблему.
Проверяемое исключение — это форма ветвления. Это невероятно мощный инструмент, который фактически представляет из себя множественный возврат. С помощью него создаётся точка, в которой исполнение программы расходится кардинально. Можно использовать эту штуку по-разному, но, всё же, лучше использовать в соответствии с семантическим значением конструкции — для обработки исключительных ситуаций, которые выбиваются из нормального хода программы, но, при этом, всё ещё являются нормой, при которой программа должна продолжить работу в штатном режиме.
>>2650146 >Я, например, так не считаю. также как и создатели самой жавы. это всеми признаный архитектурный проёб который к сожалению нельзя уже никак исправить.
>>2650208 >Проверяемое исключение — это форма ветвления
Хуево быть тобой, хули.
Всем еще десять лет назад было ясно, что экесепшены для контрол флоу - моветон ебаный. Не говоря уже о том, что в реалиях джавы это еще и дорого - собирать ебаный стектрейс только для того чтоб ветвиться. С этим мирятся только в веб серверах, где ради ошибки прерывать процесс тупо нельзя. Ну в тестах еще. Все.
Но даже если на это забить - в реалиях джавы чекед эксепшены все равно хуйня из за лямбд и стримов, которые превращаются либо в трай-кэтч месиво, либо сники-throws-лицемерие. И я еще не говорю про просачивание чекед эксепшенов в интерфейсы - такие концепции говнокодер типа тебя скорее всего даже и не осмыслит.
>>2650208 >Непроверяемое исключение — это ошибка в работе программы. Программа прерывает своё выполнение в этом случае и просит разработчика решить проблему. ну вот в книжке написано, что вызывать через throw new NullPointerException() не надо, потому что это ошибка, которую программист должен не допускать. т.е. как я понимаю, если я хочу обращаться к методам объекта, то мне надо сначала проверить что-то типа if (obj != null) obj.getSomething(), а не вызывать эти методы в try/catch и не отлавливать их. соответственно, исходя из этого, я не понимаю в каких случаях я должен создавать свое исключение extends RuntimeException, если я их не должен отлавливать, а должен не допускать в принципе? т.е. какой смысл вообще наследоваться от RuntimeException мне?
в той же книжке даже пример приводят на основе Exception. книга если что java полное руководство шилдт 12 издание
>>2650220 >к сожалению нельзя уже никак исправить.
ИМХО конкретно этот проеб исправить относительно просто. Как поломается обратная совместимость, если просто перестать их чекать? В рантайме они и так все анчекед.
>>2650235 по сути разницы нет, кидаешь ты стандартный RuntimeException или наследованный от него. Но с особым MySpecialRuntimeException появляется возможность отловить только его, что в общем может понадобиться
>>2650247 да не в этом вопрос... бля, я что не понятно объясняю? КАК Я ПОНЯЛ Я ВООБЩЕ НЕ ДОЛЖЕН ВЫПУСКАТЬ RUNTIME ЭКСЕПШЕНЫ, ПОТОМУ ЧТО Я ИХ ДОЛЖЕН НЕ ДОПУСКАТЬ В ПРИНЦИПЕ
если это действительно так, то для чего есть эта возможность, как и наследоваться от RuntimeException?
>>2650236 ну основной тезис, как я понимаю, в том, что потребуется смена парадигмы программирования, пусть и в локальном масштабе. то есть сейчас эксепшены, как сказано выше, используются как механизм ветвления. эдакий ifelse только через жопу. когда эти эксепшены только внедрялись там под них пиздец какая идеология подводилась в противовес сишным кодам ошибок. типа сделаем удобнее, быстрее, лучше, блаблабла.
по итогу оказалось что сишный способ возвращать код ошибок как результат процедуры проще и удобнее в разы чем этот эксепшный оверинжиниринг. но выкинуть его просто так нельзя, так как эта хуйня - часть идеологии языка
>>2650235 Наследование непроверяемых исключений нужно только для семантики. Чтобы залезть в консоль и увидеть, что ты долбоеб и ввёл неправильный токен от АПИ, а не мистический RuntimeException по любому поводу.
>>2650276 могу! но нахуя, если мне шилдт говорит, что я должен предотвращать появление runtime эксепшинов, а не выкидывать их и обрабатывать? написал код, куда уж нагляднее? глядя на этот пик приходит мысль зачем вообще наследоваться и создавать свои runtime эксепшены, если их надо попросту НЕ ДОПУСКАТЬ В ПРОГРАММЕ?
>>2650294 что за бред. Программа должна работать корректно. Если это невозможно - кидаешь эксепшен. Возвращать некорректный результат только из-за нежелания кидать эксепшен - это неправлиьно
>>2650289 >эдакий ifelse только через жопу. Не через жопу, во многих случаях это правильнее, а иногда без них вообще никак. If/else в контексте небезопасного инпута это префиксная обработка, а исключение — постфиксная.
>>2650294 ну так и есть, писать код вообще без самописных эксепшенов - вполне себе хорошая практика. относись к эксепшенам как к неудачному эксперименту при разработке языка и старайся их использование свести к минимуму
>>2650294 ну кстати твой пик вполне показателен. у тебя блоки кода нихуя не равнозначны, и это одна из основных преензий к эксепшенам. если во втором случае ты впоне конкретно обрабываешь ситуацию деления на ноль то в первом случае ты обрабатываешь неведомую хуйню, то есть он у тебя может упасть и когда ты на ноль поделишь, а может упасть когда ты код на хитромудром процессоре с необычной архитектурой запустишь и у него там регистров не хватит для вычисления твоего деления. и если вдуматься то это пиздец. в жаве так то мало мест где можно стрелять себе в ногу - и это одно из них.
ну вот написано тоже самое... я запутался бля... вот взять пример практический, пришли в контроллер параметры запроса, как мне их проверять? выкидывать и обрабатывать исключения и отсылать ответ этого исключения? или вообще без исключений напрямую как-то обрабатывать и отсылать ответ?
>>2650289 >эксепшены, как сказано выше, используются как механизм ветвления. эдакий ifelse только через жопу.
Ну вот я не понимаю, откуда нахуй взялась вот эта вот всратая идея, что делать контрол флоу эксекпшенами, это чем то лучше и чище, чем делать контрол флоу с помощью goto?
>по итогу оказалось что сишный способ возвращать код ошибок как результат процедуры
Мы ж не в 90х щас вроде живем. Есть способы и подескриптивней. Верни опшенал. Или затащи из ФП какой нить аналог Either/Maybe.
>>2650331 причем это изначально подавалось как ахуеть какой плюс, типа безопасный код, даже если регистров не хватит мы все равно ошибку поймаем. но на практике это вылилось в мегабайты непонятных стактрейсов ведущих в никуда и рождению принципа fail fast, который абсолютная противоположность тому подходу, который декларируется концепцией эксепшнов
>>2650294 >но нахуя, если мне шилдт говорит, что я должен предотвращать появление runtime эксепшинов, а не выкидывать их и обрабатывать
Относись к этому так: рантайм эксекпшен - это косяк по вине твоей, как разработчика. В этом смысле ты действительно должен избегать их появления в рантайме. Но это не значит что ты не можешь обьявить и использовать парочку рантайм эксепшенов для самопроверки.
>>2650338 >>пришли в контроллер параметры запроса, как мне их проверять? ValidationApi >>пвыкидывать и обрабатывать исключения и отсылать ответ этого исключения? Они сами все выкинут, но если хочешь свое сообщение написать - перехватываешь в своем эксепшен хендлере валидейшЭксепшн и выдаешь свой текст.
>>2650345 >Мы ж не в 90х щас вроде живем. ты то может и не живешь, но ноги этой концепции прям оттуда и ты пожинаешь ее плоды. просто в свое время была охуеть какая дискуссия на тему того что обработка ошибок в сишке говно и как нам ее решить, и эксепшены родились (точнее массово распространились) как раз в результате этой дискуссии.
>>2650359 >если валидация не прошла - выкидываешь свой чекед BusinessException, ловишь его в контроллере, в случае реста выдаешь на выходе что-то типа > вот вот, о чем и речь, то же самое сишное возвращение кода ошибки, только через жопу
ну вот я так писал на спринге. он сам перехватывал этот эксепшн и отправлял клиенту. в этой ситуации разве это ошибка программиста? сомневаюсь, это наоборот обработка ошибок пользователей, но ведь это runtime эксепшн все равно
>>2650368 >А у тебя часом не осталось хвостов на эту дискуссию? Я б почитал. в ранних книгах по яве это было обязательной главой, так как там был именно запрос на перевод программистов с си на яву и эти темы (чем ява лучше си и с++) полно освещались. они по сути и писались как учебник для тех кто решил сменить си/плюсы на яву. можешь поискать что-нибудь из книг года выпуска эдак 1996-1998.
>>2650375 Спринг, это как правило веб-сервер. А стопать процесс вебсервера из-за эксепшена == получить стопяцот недовольных хомяков, которые не смогли провести свои транзакции и точат вилы чтобы ими тебя выебать. Там тупо выхода другого нет.
Поэтому вместо этого спринг отдает код 500, который на НТТП-языке означает литералли то же самое - "реквест провалился из-за того, что Васян на сервер-сайде - долбоеб".
>>2650387 Это уже нюансы. В спринге ты добавляешь эксепшн хендлеры и в них сам решаешь, как маппить эксепшены на транспорт. И это кстати еще одна причина почему обьявлять рантайм эксепшены может понадобиться: спринг их различает по типу.
Или ты можешь пересесть полностью на чекед эксепшены. Но тогда тебе еще придется по всему стеку вызовов прокидывать руками бессмысленные throws-декларации, или как местный шиз рекомендует - контрол флоуить. А спрингу один хер похер - какие эксепшены маппить.
>>2650381 Валидация это 400, хуйня не найдена - 404, ошибка по бизнес хуйне 417. А 500 - да, либо вася долбоеб и НПЕ не учел или все наебнулося по какой то причине.
ДВУХСОТКА-ДОДИК ЗАКАЗАЛ СЕБЕ ДОДОПИЦЦУ @ ПИЦЦУ ПРИНЕСЛИ, НА КОРОБКЕ ФИРМЕННАЯ НАКЛЕЙКА "Я ПРОВЕРИЛ, ВСЁ ХОРОШО" @ ДВУХСОТКАДОДИК ОТКРЫЛ КОРОБКУ, А ТАМ ГОВНО @ В ГОВНЕ ТОРЧИТ ЗАПИСОЧКА "409 MESYA4NII BALANS NE SWEDEN" @ ОХУЕВШИЙ ЗВОНИТ В ПОДДЕРЖКУ @ НУ ВЫ ЖЕ ПОНИМАЕТЕ, ЧТО НАКЛЕЙКА ОТНОСИТСЯ ТОЛЬКО К ВНЕШНЕМУ ВИДУ КОРОБКИ @ МЫ ЖЕ НЕ МОЖЕМ СМЕШИВАТЬ КУЛИНАРНЫЙ, УПАКОВОЧНЫЙ И ДОСТАВОЧНЫЙ ПРОТОКОЛЫ @ ГОВНО В КОРОБКЕ ЗАКЕШИРОВАЛОСЬ @ ТЕПЕРЬ ДАЖЕ ПРИ ОТДАЧЕ ПИЦЦЫ В ПИЦЦЕРИИ ДВУХСОТКА-ДОДИКУ БУДЕТ ПРИЕЗЖАТЬ ГОВНО В КОРОБКЕ БЛИЖАЙШИЕ 4 ЧАСА
>>2650359 >>2650387 Вы что пидорасы человеку советуете? Чекед экспепшоны писать, 200 при ошибке, охуеть
Значит выдаю базу - Чекед эксепшены нахуй не надо использовать, по факту рудимент. Unchecked используются в 99 процентах случаев, особенно для бизнес логики. - После того как ты создал свой unchecked exception ты пишешь для него обработчик отдельный, в случае спринга это controller advice. - 200 возвращается при успешном выполении запроса. НИКОГДА сука нельзя отвечать 200 и в теле писать текст ошибки. Http status codes для кого придумали?
>>2650122 Не слушай быдло выше, он наверное пару месяцев отработал на говногалере и уже возомнил себя крудошлепом. Еще хорошей практикой является обработка эксепшенов, которые ероры. Только их очень сложно отловить, поэтому лучше по возможности все методы оборачивать в трайкеч и там уже что-то с ними делать, допустим выводить инфу об ероре в систем аут.
>>2651246 Посмотри любой паблик апи, тот же самый github api. Они в зависимости от сценария могут и 200 отдать, могут 204, могут 304, 201, 422, дохуя. В прицнипе я соглашусь, что так много может быть и не нужно (смотря как в команде договоритесь), но остальные ваши советы это пиздец, даже джуны уже знают лучше
>>2651263 знать и я знаю, ещё я знаю что это очередные идеологи опять поднасрали и высрали свою шизу, которую зафорсили на всяких хабрах. Если у тебя что-то сложнее http странички, то поверх накладывается свой бизнес-протокол со своими собственными ошибками. С http кодами они ну никак не бьются.
Скажи мне учоный в говне моченый, если мониторинг детектит 500 ответ, надо ли слать алерт и поднимать админа?
>>2651274 Не смешивай сущности. Ребята выше обсуждали rest over http который предполагает использование http status codes. Если вы городите свои велосипеды или rpc то пожалуйста, но не надо новичкам рассказывать, что в ресте нормально возвращать ошибку в 200ке, это вредно
По поводу 500ок, ну тут зависит опять же от кейса, но у нас вот настроен мониторинг на % 5xx
В если в imageFile поставить MockMultipartFile, то он не переделывается в жсон, и следовательно нельзя добавить через content(String body). Как решить это?
>>2651284 рест это и есть форс. Недостижимый идеал, который даже теоретически недостижим и непонятен. Исходит из ложной идеи что все это объект, и у объекта может быть только 4 действия (круд). Для веб-странички это применимо. Для ресурса типа картинки - тоже. Если что-то сложнее, какой-нибудь там бюджет, то у бюджета гораздо больше возможных действий. HTTP изначально и создавался ради веб-страничек и картинок, для этого он хорошо подходит. Это уже потом где-то в десятых появился форс что http надо натягивать вместо бизнес-протокола. До сих пор страдаем
Предположим в коде случился рандомный RuntimeException, спринг это смаппил на http 500. Это аварийная ситуация? Ты бы хотел чтобы тебя в ночи будили из-за попытки тёти вали поделить на ноль?
>>2651300 >и у объекта может быть только 4 действия (круд). Я тебе щас страшную вещь скажу, но все, что сложнее этих 4 операций - это отдельная сущность.
>>2651300 >у объекта может быть только 4 действия (круд).
Кстати говоря, это нихуя не так. Если пройтись по определениям и гайдам по REST, ни в одном из них не будет ни слова про круд. Из 6 констрейнов, которые приписывают рестам, нет ни одного, сводящего API к этим 4 операциям:
>>2651613 >REST и CRUD - две абсолютно не зависящие друг от друга вещи. REST не обязан быть CRUDом так же, как CRUD - RESTом. Обязан, так как >>2651655.
Кто-нибудь использовал спринговский mail sender? Хули так долго? Одно письмо в две строчки отправляется секунд 10,а если их сотню надо отправить,это же ебануться можно
>>2651813 Это ебанутые протоколы. Это больше задержка, чем непосредственно время, потраченное на отправку. Отправляй каждое новое письмо новым потоком просто.
>>2652085 Когда вы используете MockMVC для тестирования контроллера, вы можете использовать метод multipart для отправки запроса multipart/form-data. Это позволит вам отправить файл вместе с другими полями формы.
В вашем случае, чтобы отправить объект articleDTO через MockMVC, вы можете использовать следующий код:
mockMvc.perform(builder) .andExpect(status().isOk()); В этом коде мы создали объект MockMultipartFile для тестирования отправки файла. Затем мы создали объект ArticleDTO с заголовком, контентом и файлом. Затем мы использовали MockMvcRequestBuilders.multipart() для создания запроса multipart/form-data. Мы добавили заголовки запроса и параметры для объекта ArticleDTO. Наконец, мы использовали mockMvc.perform() для выполнения запроса и проверки статуса ответа.
Обратите внимание, что это пример и может потребоваться настройка в зависимости от вашего API.
>>2652107 Спасибо большое, но не совсем то. У меня метод контроллера принимает (@RequestBody ArticleDTO), а в том что описано это метод с тремя @RequestParam, один из которых файл, два строки.
Эх, походу придется переделывать апи под реквест парамы... Обидно, когда не можешь справиться с задачей как нужно, и приходится подгонять задачу под ответ.
Ку анчоусы, вопросец есть. Использую спринг секьюрити, написал фильтр для токенов и класс, который генерит эти jwt токены. Могу ли я как-то сразу подсунуть этот токен в хедер при успешном вводе кредов юзером? Ну то есть в саксес хандлере допустим взять и вставить новый хедер в реквест, чтобы потом сразу выдать юзеру страничку запрашиваемую.
Хочу из аннотейшн процессора на этапе компиляции вызвать рефлексию для обработки компайл-тайм аннотаций. Там вроде отдельный рантайм поднимается. javax.annotation.processing апишка очень многословная, неприятная и кривая, хуже рефлексии. Попробовал рефлексией читать содержимое классов, параметры аннотаций, и сигнатуры методов. С рефлексией код попроще, но компилируется медленнее. Еще почему то в AnnotationValue.getValue() параметр с типом String[] не кастится String[], идея в дебагере пишет, что там под капотом com.sun.tools.javac.util.List<String> вместо массива и пока не нашел как его скастить или сконвертировать. Какие подводные вызывать рефлексию из аннотейшн процессора? Ну кроме скорости компиляции.
>>2653039 Пчел, не позорься, не смешно. Ну а если ты не пытаешься в троллинг, то сразу становится видно, что нихуя кода ты в своей жизни не писал, потому что знал бы, что стандарты и best practices важная часть работы
>>2653239 Это де-факт индустриальный стандарт. От того что лично тебе это не нравится ситуация не изменится. Очевидно ты неадекватно оцениваешь современное положение дел. Тут вижу два варианта, либо ты ебать шутник, либо ты нихуя не знаешь
Новички, которые будут это читать, не будьте как этот васян, работать с такими челиками это пиздец