Это копия, сохраненная 7 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Что такое Java?
Java - язык программирования с классами (aka объектно ориентированный), где нужно явно указывать тип объявляемых переменных (aka со строгой типизацией).
Заебись. А что ещё делает Java лучшим языком программирования?
- На Java написано столько всего, что любая твоя невообразимая идея уже существует в виде библиотеки, которую можно скочать и юзать
- Java - мультипарадигменный язык, тут можно писать в любом стиле, который тебе вздумается, даже к памяти можно получить доступ через Unsafe, но, при этом спроектирован язык для того, чтобы на нём писали в ОО-стиле.
- От прошлого пункта плавно перешли к отличной проработке языка - язык с самого начала задумывался как язык для ООП и многопоточности, благодаря чему писать чистокод на Java легче лёгкого!
- Java - относительно молодой язык, который до сих пор активно развивается жидами из Oracle, при этом почти неполживо опенсорсно.
- Java следует принципу write once во всём. Java никогда не ломает обратную совместимость - твой код, написанный на Java 1.2 будет работать на Java 18 - и не зависит от платформы, являя из себя единственный полностью кроссплатформенный язык с кроссплатформенной экосистемой (если не считать языков-паразитов на JVM).
Тред по жабе на гитхабе: https://github.com/java2ch/java-thread
Вики по вкатыванию в джаву: https://github.com/java2ch/java-thread/wiki
Предыдущий: >>2426003 (OP)
>>2443267
Спасибо, Абу админ /pr/! Увы, политоту в наши дни приходится вилкой вычищать. Так на чем мы остановились?
localhost:1521
Так это же копейки уж совсем. Если 50 рублей много, можно и за 12 рублей найти.
Я лид, я сам пересяду.
200 OK
В шапке есть вопросы, нужно свободно отвечать минимум на ~85% из них, уметь в срок решать желто-красные задачи на литкоде и иметь пару проектов на разных технологиях.
Пройди простой тест, прибавляй 1 балл за каждый ответ "да"
1) ты инвалид колясочник
2) у тебя из одежды только футболка Ария с пятном от фапчи
3) тебе отрезало ноги трамваем
4) при слове спринг у тебя только одна ассоциация: как прошлой весной тебя выебал бомж возле кфс
5) у тебя кринжовая тату на лице типа linkedList()="мам я долбаеб" или using System; namespace MyNamespace
Если набрал 1 балл и более, то ты не готов идти на собес
>ты инвалид колясочник
Если ему сказать катись нахуй это инклюзивность?
ЗЫ ваще тут постил один колясочник, кодил на коболе на американского барина за много тысяч баксов.
Java ≪ C# ≪ Go < Rust
Двачаю, перелез на раст теперь не представляю как на go можно писать, тут по сути тоже что и go, только компилятор бьёт по рукам когда ты криворукий долбоеб и более строгое отношение к лайфтаймам и владением, плюс иммутабельность по умолчанию и охуенные дженерики. Ну а если надо что-то быстро нагоанякать, то беру ноду, на js всё есть и давно его знаю. Короче инструменты по задачам
Ничего, сборщик мусора почистит
Какой смысл дрочить жабу в Z0ZZ году? Поддерживать протухший легаси?
Алсо ясен хер, жаба никому не нужна ванильная, все перешли на скалу, котлин, кложу
>Поддерживать протухший легаси
Да. Сейчас с работой туго очень. Так что я решил идти в жабу, устроюсь куда-нибудь с трехсотой попытки в подрядчик банка, буду на 6-8 джаве писать и хмл конфиги править.
Один хуй работы нормальной почти что нет для вкатунов, а ту, что есть моментально разбирают челы из топовых вузов.
Если у тебя двухзначный айкью, левел за 35 и нет интереса к программированию то джава лучший вариант (после фронтенда)
Любой успешный продукт очень быстро становится легаси, на твоем говне просто ничего вменяемого в таком количестве еще не написали
>Если у тебя двухзначный айкью, левел за 35 и нет интереса к программированию то
петухон - для тебя.
Нахуя перекатили? 8 тредов на доске висят. Еще и перекат уебищный, один микропост в прошлом треде с одной единственной ссылкой без болда на перекат, который хуй заметишь.
Это один новошиз пришёл из петухона и решил стать опхуем, остальных не спрашивая.
>получить массив строк
Пишешь native query, тебе прилетает ResultSet, маппишь его в массив строк.
>>44489
>написать на Джаве что-то вроде SQL-клиента с использованием Спринга (но вообще я бы не парился и все бы на чистом JDBC захерачил, но там требуют, чтобы Спринг был)
А как без JDBC? Через репозиторий ведь не получится просто взять и достать рандомные данные через скуль запрос. Да ты и репозиторий создать не сможешь, так как нет привязки к сущностям.
Или оставайся.
код хендлера, контроллера, адвайса в пастебин.
>Поддерживать протухший легаси
Да.
> жаба никому не нужна ванильная, все перешли на скалу, котлин, кложу
Ванильная жаба как раз очень востребована для того, чтобы никогда не иметь дел с ЧСВшниками-недоФПвкатунами вроде скалистов.
Сам спросил, сам ответил. Просто сделал native query из EntityManager'а. В итоге он возвращает список с массивами объектов (List<Object[]>). Как-то это всрато, но таково задание.
POST /cities - создаем город
GET /cities - все города
GET /cities/{id} - город по айдишнику
POST /cities/{id} - изменить город
И вроде можно сделать специальный параметр в последнем методе, например boolean delete или даже Enum, но это как-то не комильфо, наверно? Или правильней будет сделать отдельный метод DELETE? Хотя мне учили только на GET и POST все писать.
А можно на твоем localhost? Только ночью комп не выключай, днем я в пятерочке работаю, а ночью как раз пет-проект пилю.
Используй put и patch вместо post для обновления, delete для удаления
Смысл GET ты понял правильно
Для удаления DELETE /cities/{id}
Для частичного апдейта PATCH
Для создания или полной перезаписи сущности PUT
А POST обычно для выполнения действий, которые в идею реста и круда не вписываются, чтобы вызвать метод с логикой на сервере.
Ты тупой.
Для хибернейта есть @Entity(dynamicUpdate = true) и для спрингдаты @DynamicUpdate
А нормальные люди пишут билдер запроса, который генерирует список полей в UPDATE и скармливают их NamedParameterJdbcTemplate.
Jooq или другой квери билдер.
Ngrok
неосилятор плиз
Есть инфа от знающего человека, что в жаве скоро ожидаются реальные изменения. После того, как стабилизируют вальгаллу, уничтожат повсеместные блокировки (плохо влияют на перфоманс). Тогда везде и сформируют новую лтс. Зарплаты поднимут и будут держать, шарписты ничего не смогут сделать. Сейчас главное не бухтеть.
От нас требуется сидеть тихо. После того, как все сделают, все будет у нас хорошо. Всем устроят довольствие, как скалистам - каждый будет кататься в масле. Главное сейчас сидеть тихо и не суетиться. Никаких котлинов, никаких жетбрейнсов. Просто переждать и всё будет хорошо, там все схвачено.
Просто надо перетерпеть смуту и все наладится, братка. Не надо кричать и говорить, что жава - говно. Отсиди свой срок в интернете или просто расслабся, отдохни, накати пивка, бабу выеби в конце концов. Бесконечный сахар также является говном, говном более тщательно замаскированным, ну в сущности не дарующий хорошего кода.
Ребята, не кипишуйте! Сидите тихо, сейчас такой момент, нужно переждать!
Просто завяжите узелком свои хотелки, не время предъявлять претензии ораклу. Поверьте, там все знают лучше вас, там люди, управляющие жавой уже давно, а не вчерашние школьники. Они понимают, что делают. Стираются женерики - значит должны стираться, начали внезапно пилить вальгаллу - значит так нужно. Сейчас очень напряженный момент, некоторые много ходовые операции в критически важной стадии! Враги и конкуренты все это уже поняли, и сейчас может рвануть в любом месте, в любой момент.
Необходимо сплотиться и не реагировать на провокации! За вас все сделают те, кто сверху, не беспокойтесь! И вы не узнаете жаву, все зацветет!
Главное - потерпеть!
Репорт.
Заявку в ДРУГ сделал? Непосредственный руководитель согласовал?
Логика должна быть в сервисе, а не контроллере
get() без проверки отсутствующего города
Невозможно убить всех жителей города
Когда у тебя появится больше полей в модели ты заебешься их обновлять по одному.
Вот я и говорю, что ORM не решают проблемы, для решения которых они создавались. Какая-то вещь в себе, ORM ради ORM.
Для прототипирования крудов спринг дата с хибером - топово.
Ну как минимум доставать сущности со ссылками на кучу других сущностей удобно, не нужно писать километровые джойны руками.
Да и вообще результаты запросов хибера сами маппятся в нужные сущности.
Если JDBC использовать, то придется самому писать мапперы ResultSet -> Entity.
Да нормально хибер использовать если нет каких-то жестких требований к производительности и сам хибер не впадает в жесткий ступор.
Сейчас почему-то стало модно хейтить хибер, но в действительности на нем люди пишут и пока что лучших альтернатив не видно.
Согласен. Но чистый JDBC - довольно древний и геморройный в использовании стандарт. Лучше юзать его в связке с JooQ, либо на крайняк через spring data JDBC.
ИМХО стоит. Со стажем за плечами в будущем не будут смотреть как на говно без опыта. Кроме того, чекни --- может эти челы сами не шибко довольны сложившейся у них ситуацией, и планируют перекат на обновленный стек?
Смотря что за контора. На таком говне могут кроме тебя сидеть 2 петровича, ни в жабе, ни в вообще современной индустрии не шарящих. Там может не быть процессов - нет тестов, системы управления тасками и даже гита.
У меня так было, когда позвали на спринг + жава 8, а там был просто зоопарк из жава-ее библиотек и спринг чисто для di.
Я бы на твоем месте сам пооценивал уже имеющихся прогреров на проекте. И если понимаешь, что сторожилы много в чем не шарят - не иди туда. Ты у них ничему не научишься.
И пятая, и восьмая жабы - легаси, окда?
2. Запускаешь jshell
3. Вводишь /edit
4. Вставляешь:
Files.lines(Path.of("file.tsv"))
.map(s -> s.split("\t"))
.filter(arr->arr.length==3)
.sorted(Comparator.comparingInt(a->Integer.parseInt(a[2])).reversed())
.map(arr-> String.join("\t", arr))
.forEach(System.out::println);
5. Error: array required, but java.lang.Object found
6. Убираешь .reversed()
7. Всё работает.
Какого хуя?
>Когда у тебя появится больше полей в модели ты заебешься их обновлять по одному.
Как обновить только те, которые есть во входящем JSON-е?
ПЕРЕКАТ >>2428654 (OP)
ПЕРЕКАТ >>2428654 (OP)
ПЕРЕКАТ >>2428654 (OP)
>Логика должна быть в сервисе, а не контроллере
Все остальные методы в одну строчку. Мне из-за этого сервис создавать? Это тупо тестовое задание, надо чтобы работало, ну и чтобы правила REST были соблюдены.
Вот поэтому питонисты и долбоебы.
----
Посоны, а чё сейчас в жабе, 95% бекенда это всё ещё спринг? На котлине всё ещё только мобилки делают?
Я иногда лениво думаю перекатиться, но у меня аллергия на жирные фреймворки, поэтому что гибернейт, что спринг очень отталкивают.
те же c#вые аналоги очень изящнее выглядят и не создают ощущения бессмысленного нагромождения кода.
>Посоны, а чё сейчас в жабе, 95% бекенда это всё ещё спринг?
Истинно так, и в 95% тестовых заданий нужно просто написать круды для REST-сервиса.
Бля, тестовые - это что такое вообще? Я обычно наоборот прошу рекрутеров сделать мне какое-нибудь задание, иначе на собес к ним не приду.
???
localhost
Цена чтоб не в баксах была. Да и просто интеренсо какие есть хорошие отечественные пльтернативы.
На амазоне меня забанили за то что неоплатил вовремя.
Без VPN не пускает на буржуйские. А он, как известно, ворует данные пользователя и вообще может канплукстерн взорвать.
> аллергия на жирные фреймворки
Тогда жаба не для тебя, как и шарп, у них вместо спринга такой же жирный аспнет с килотоннами старья, причём их старьё работает только на винде, а жабовское легаси хотя бы кроссплатформенное.
А микрофреймворки есть везде, но они нахуй никому не всрались, т.к. для их задач хватит петухонов-жопаскриптов.
Есть и вакансии без спринга. Всякие высоконагруженные сервисы на Reactor, vert.x и др. Но туда берут только сеньоров с 10-летним опытом работы.
Можно, наверно, китайские поискать.
Да.
>SQL
>PathVariable
>RequestParam
Делаешь пару джоинов и веб-сервер ехидно отдает 414. Алсо, задача выглядит как зделой нам свой пыхыпымуадмин, с блекджеком и уязвимостями.
Орм вообще зло, толку от них только когда надо шлёпать примитивные круды, если чего-то сложнее, то все пиздец начинаешь под эти орм писать всякую хуйню вместо того чтобы заебенить запрос
Прочитал одну фразу и сразу порвался? А теперь прочти весь пост.
В древнем проприетарном дотнет фреймворке, про который я и говорю, есть дохуя компонентов, отсутствующих в современном кроссплатформенном дотнете. Тот же WCF, к примеру. Майки выпилили старьё из платформы и тем самым усугубили ситуацию с легаси, переход теперь плавно не произвести, только с нуля переписывать, либо юзать сторонние реализации старья от васянов.
Этот еблан путает старый ASP.NET, который был такой же устаревший легаси монстр с практиками из нулевых, как спринг, с новым ASP.NET core
Почему я ненавижу большую часть коллег, потому что вот подобные дегенераты работают без кругозора в своей же сфере
>старый ASP.NET, который был такой же устаревший легаси монстр с практиками из нулевых, как спринг, с новым ASP.NET core
А в чем принципиальная разница?
Спринг так-то тоже не стоит на месте, и 6 версия будет отличаться от третьей и перфомансом, и фичами, и удобством.
>Есть и вакансии без спринга
Есть, но там обычно поомйное легасное говно, где просто сервлеты + jdbc, и ничего более. В прицнипе код понятным и прозрачным получается, но увы далеко не уедешь на таком тулинге.
Судя по описанию, 6 спринг и 3 бут нихуя не будут отличаться, лол.
лучше вала не ебать а заняться делом
Может сначала ты хотя бы откроешь документацию? Маппинг разбирается в самом начале
ERROR: ОШИБКА: нулевое значение в столбце "id" нарушает ограничение NOT NULL
Хотя если я предварительно создам таблицу запросом, все работает нормально, и через Hibernate, и через запросы. Как можно в явном виде указать, чтобы у поля ID был тип SERIAL?
Сцуко. Они что, не предусмотрели, что кто-то через INSERT что-то захочет вставить?
Вот кстати да, у них же была историческая возможность продемонстрировать, что джава не говно и нужна не только, чтобы индусы фабрики на спринге создавали.
И что в итоге? IDEA тормозит ну просто безбожно, хуже только eclipse вот ведь какая ирония
Я искал и ничего не нашёл. Там как со спрингом инфы ни где нет. Приходится методом тыка разбираться.
>Там как со спрингом инфы ни где нет
По Спрингу-то инфу нашли уже, а вот что там с бесплатными хостингами баз данных?
1) Ты уверен, что ты всё делаешь правильно? Такие задачи встречаются, но что у тебя "время пинга до БД в несколько тысяч раз медленнее необходимой реакции" это звучит ну очень сомнительно. За сколько тебе нужно ответить, за наносекунду? Что ты там пишешь, обработчик для ядерного реактора? mmorpg? Если это веб, то у тебя ~100 мс может просто запрос от клиента до тебя лететь, со всеми этими хендшейками, https и прочей фигнёй.
2) Кэш это более чем нормально на самом деле, правда обычно применяется в ситуациях, когда данные скажем нормализованы и тебе неохота постоянно их собирать и мб высчитывать что-то, когда у тебя оно уже посчитано. Главное имей ввиду, что с кешами тоже бывают головняки, они устаревают, разбухают и можно словить рассинхрон между кешами, если у тебя больше одной ноды в приложении.
3) Микросервисы это тупо способ представить одно приложение, как набор из нескольких десятков приложений поменьше. Сами они ничего не ускоряют и даже наоборот, замедляют работу системы, потому что раньше компоненты приложения общались друг с другом в рамках одного системного процесса, а с микросервисами им приходится это делать через сеть. И уж тем более они никак тебе не помогут в случае, если тебе нужно быстро что-то отдать. Максимум, конкретную ручку, к ооторой такие особые требования, можно в отдельный деплоймент вынести, чтобы удобнее было за потреблением ресурсов следить, но микросервисами оно от этого не станет.
>можно словить рассинхрон между кешами, если у тебя больше одной ноды в приложении.
Вот в этом то и прикол. Раньше у меня была одна нода, и всё я держал в прокаченной хешмапе и постепенно сбрасывал на диск все изменения. Но потом нагрузка выросла, и мне потребовалось горизонтальное масштабирование, я решил добавить ещё пару нод, а связать их с помощью общей БД. Но реакция становится гораздо медленнее, а с кэшами рассинхрон или экспоненциальная сложность разработки чего-то из-за необходимости всё синхронизировать.
А imdg по типу хазелкаста медленные для твоего случая?
Ибо пока что похоже на хеш мапу с шардированием
Да это просто тупая жаба со своими фреймворками, которые даже сами создатели не до конца понимают, когда жаба уже умрет, а спринг выпустит свой собственный язык
Написал запрос с джойнами через хибернейт и нифига не работает. Запустил SQL-клиент и попробовал тот же самый запрос и мне всё четко выдало. Так что этот хибернейт не только бесполезный, но ещё и вредный, так как даже простые запросы не может выполнить.
Вот многие пишут, что дескать в JDBC надо писать много стереотипного кода. А в хибере не надо что ли!? Его там на порядок больше. Ты просто все сущности должен обмазать аннотациями и по 100 раз прописать тупому хиберу что и с чем связано, а потом также как в JDBC делать запросы через тонны связок с сессиями, подключениями, транзакциями и прочей фигнёй.
Полностью согласен с тобой, большинство нормальных людей ни хибер, ни спринг дату вообще не используют, в основном только ждбс и то сейчас пошла тенденция хранить все данные в статической хэшмапе отдельного класса, говорят за этим будущее
Ну тут есть варианты. Первым на ум приходит редис, как правильно заметил >>45858. Хотя если у тебя такие ниибаццо строгие критерии, то пинг до редиса может тебе не подойти.
Рассинхрон кешей на самом деле вполне решается. Они у тебя ленивые или как? Если тебе их заранее не нужно прогревать, то можешь просто более или менее короткий экспирейшен кеша выставить и считать, что (иногда) рассинхоны это норма.
В противном случае можно попробовать как-то синхронизировать твои ноды. К примеру, все данные могут лежать в базе, а все ноды или раз в несколько секунд делают select * from caches where updated_at > {last_updated_at_from_service}. либо вообще listen/notify, если бд позволяет. Тогда как только кеш обновится в базе, остальные сервисы в течение короткого времени сами заметят изменения и подтянут его. Рассинхрон тут всё равно возможен, да, но что поделать. Просто по CAP теореме, у тебя будет или рассинхрон, или простои системы, потому что это же сеть, тут обрывы связи - это обычное дело.
Ну кстати или синхронизировать это говно какой-нибудь очередью, или кафкой/кроликом/тп, или просто wal читать от базы.
Хуй тебе, не справишься.
Хз, хазелькаст выглядит оверкиллом а ещё они корпопидоры
И делают скорее всего примерно то же самое, что тебе описали выше, просто лаве берут за это
Есть бесплатный хазель. Ну и если почему-то не подходит, то есть еще Infinispan, Ignite
Ну вот кстати частый вопрос, который задают на собесах: основные способы реализации внедрения зависимостей и самый предпочтительный из них.
Best Practices - через конструкторы, тут конечно можно холивар развернуть (но это один из тех вопросов, на который все знают ответ, а почему забыли). Я за последние пару лет @Autowired встречал один раз всего, он нужен был для self-injection, что в свою очередь говорит, что где-то проеб с архитектурой.
hazelcast не нужен. Все решается обычным редисом.
Тестировать проще. Ты можешь запросто написать юнит-тест и передать все необходимые замоканные зависимости в виде аргументов конструктора.
19*
Может тебе еще и спрнг-натив с граалем и быстрым стартом и реактивный вебшлюкс? Больше ничего не хочешь?
Скачай и пользуйся дурак
А незамоканные бины в твоих тестах никогда не нужны?
А зачем тебе секурити в кафке?
Интересно, работаю с кафкой некоторое время, но секурити пока не требовалось. Может тоже что-то почитал бы по этой теме.
по кафке я читал первые 7 глав "kafka definitive guide 2nd edition", мне хватило для начала. По спринг-кафке только видосы от конфлюенса: https://developer.confluent.io/learn-kafka/spring/spring-boot-with-apache-kafka-hands-on/ , дока и статьи в блоге конфлюентса https://www.confluent.io/blog/tag/spring/
Это очень мало. Т.е. это буквально "изучил API клиентской библиотеки и какие аннотации развешивать". На слабенького джуна пойдет.
Обрати внимание именно на 4-е издание. Да, мы в курсе, что есть шестое. Да, мы в курсе, что перевод на русский есть только на третье издание. Но в шестом издании нет подробного описания подкапотного устройства и выкинута настройка с помощью XML.
Что тут подразумевается под подробным описанием подкапотного устройства?
Как спринг трогает кишки jvm и прочая непотребщина.
Бин пост процессоры, ридеры, бин фактори, эвенты, наверное вот это все и так далее
Так я и есть джун. А какие ты думаешь требования на мидла+ по знаниям кафки? Думаю прочесть вот эти книжки.
В самой доке кафки кстати очень мало инфы, надо кипы читать и комменты к ним.
Спасибо анон, а на годные видосы на ютубе не натыкался?У меня легче идет, когда я миксую источники инфы, а не только книгу пялю весь день
Смотрел штук 5 видосов на русском(английский на слух у меня плох, смог только видосы по спринг-кафке от гамова посмотреть) для нулей, не один не могу посоветовать. Если нужен хоть какой-то, то вот https://www.youtube.com/watch?v=ZfbQfUAPVWY&t
Вот примерно очерчены популярные подводные камни, которые в будущем встретятся. https://www.youtube.com/watch?v=A_yUaPARv8U https://www.youtube.com/watch?v=MG_a6MT1DQg После книжки заходит.
Вот неплохой ликбез по обработке ошибок, правда апиха спринг-кафки немного устарела. https://www.youtube.com/watch?v=OnZ7JArSoiU
Благодарю.
>>46036
> правда апиха спринг-кафки немного устарела
Можешь пожалуйста пояснить, что такое вообще "спринг кафка" и причем вообще тут спринг?
Поясню свою мысль.
Кафка это же внешний сервис, со своим клиентом, который ты просто подключаешь в свой код каким угодно образом и используешь. При чём тут вообще фрейморк? Зачем вам какой-то особый мост между спрингом и кафкой?
Казалось бы, буквально в нужном сервисе в коде инжектишь kafkaClient или там interface publisherClient и просто начинаешь писать туда сообщения или читать их.
Это более высокоуровневая апишка над кафка-клиентом. Например консюмер выглядит не просто как бесконечный цикл, а все обернуто в метод с аннотацией. Есть json-serializer/deserializer для сериализации pojo-dto. Посмотри первый видос.
Причем это не самая высокоуровневая апишка. Есть еще spring-integration-kafka поверх spring-kafka.
Такие как ты ему отвечают вместо игнора, вот он и не съёбывает.
Во многих книгах есть упражнения, а на гитхабе автора можешь глянуть правильные решения.
Рефку поспрашивай на гиперскилл. 3 месяца + по месяцу за выполненный проект и пройденную ступень. Итого 5. Если не ебланить, нормально получится.
Если у тебя хоть какая то нода не защищена, у тебя не защищено ничего. Секурити должен быть везде и тотальный.
>Потому что потому
Ну мааам. Кафка же во внутреннем контуре, во внешний интернет не торчит. Это же не рест-апиха, которую мы отдаем на машины пользователей.
Я понимаю, что бывает, когда торчит публичный топик для внешних пользвателей, но это отдельный кейс.
Пиздец, у меня мозг сломался, когда я увидел в map действие какое-то. Нахуй так делать?
1) первый на noSql webflux
2) обычный синхронный CRUD на Sql, который стучится в первый сервис и берет из его джейсонины некоторые кей валью, но не все.
Это будет работать?
Спасибо, не знал что там есть рефералки с таким щедрым подгоном. Жаль только придется прокликивать все пройденные темы если продолжать с новым аккаунтом.
Мб отправка в консоль асинхронная? А вообще не представляю, как такое может быть.
Для начала у letscode есть 2-3 неплохих видео по докеру. Дальше гуглишь пример spring boot + postgres в docker compose, разворачиваешь это дело, проверяешь что все работает как надо.
Ну и еще бы желательно про networking в докере почитать: bridge, host, вот это все. Тут лучше документацию читать.
Спасибо
>Почему я не могу так отсортировать примитивы
Потому что Comparator.comparingInt принимает на вход ToIntFunction. У тебя же лямбда boolean возвращает.
Но если бы это был стрим объектов .boxed, то все бы работало (только надо было бы Comparator.comparing()), а потом mapInt. А я не хочу заниматься автоупаковкой и автораспоковкой, какое решение?
>нужно боксить
Нинужна!11 Я тогда лучше классическим православным циклом for сделаю, чем буду пидорским стримом примитивы в обертки засовывать, а потом высовывать.
Просто меня немного подзаебало, что вот есть контроллеры. Вот есть сервисы. Я хуйнул Either<TResult, TError>, переопределил приведение.
Сейчас контроллеры выглядят примерно так:
public IActionResult GetList() => _service.GetList();
В случае если все ок - вернется лист, если не ок - ошибка вида:
{
Error:Code,
Message: ErrorMessage
}
Но чет я думаю - и со стороны ж не очивидно. Типа да, коджа стало меньше, он чище. Но теперь кому-то еще - нужно лезть в реализацию сервиса, чтобы понять, чому ему возвращается что-то там. А потом - разбираться как оно работает.
Короче. У вас такое делают?
Бамп
Что ты имеешь ввиду под реальными навыками? Ну вот у меня будет реальный навык написания говнокруда за 10 минут на 5 эндпоинтов этого достаточно чи шо?
Вы ебанутые? С первого дня создания стримов они были ленивыми, вот вам последствия. Вся цепочка стрима не вызывается, пока не будет вызвана какая-то терминирующая стрим операция.
Тфв когда жабу ругают за отсталость, но на деле фича типа генераторов есть испокон веков но разрабы заросли мхом
set.getLong("property"); // и вот тут поток умирает нахуй (зависает), чому? У меня склайт.
>хуже только eclipse
хз у меня древний эклипс с майнкрафтом на древнем ноуте наоборот хорошо работает даже с 4гб оперативки
а вот идеякал всю оперативку сжирала еще и тема уебищная и хотсвопать на отдельные кнопки нужно
да и в целом неудобный редактор неказистый какой то
хотя хз за шесть лет может улучшили
Разобрался! Оказывается хибернейт сам заполняет сущности теневыми запросами. Ни в одной книге этот момент не объясняется. Про мурзилки ваши вообще молчу, там всякий бред только пишут, далёкий от реальных проблем.
Нет, нужно уметь решать медиумы на литкоде, хорошо разбираться в тонкостях многопоточной синхронизации, уметь пояснить за коллекции в деталях.
Ну и да, уметь написать круд с регистрацией, авторизацией (spring core, data jpa, security), поднять в докере, уметь написать юнит тесты + желательно знать основы микросервисных хуевин.
Это уровень такого слабенького стажера на самом деле в 2х22 году. Вот с такого уровня уже можно вкатываться в работу.
>поднять в докере
Что это значит? Загрузить туда программу и запустить? Разве это не работа сис. админа? Как изменяется код от того, что он запускается в докере?
>Загрузить туда программу и запустить
Да.
>Разве это не работа сис. админа?
В теории его, но на практике все везде крутится в докере. Не умея работать с докером ты просто не сможешь удостовериться в том, что твой код вообще работает, а не просто тесты проходит.
А зачем это всё?
Захочу сделать сериализацию в нужном месте - ну просто внутри коллбека вызову руками нужный сериализатор и всё.
Зачем мне комбайн, который что-то там делает под капотом волшебное, когда я могу руками из библиотек собрать ровно то, что мне нужно?
>>46715
Справедливости ради, идея всё же лучшее, что есть на рынке IDE сейчас. Все эти visual studio code и рядом не стояли по возможностям.
>А зачем это всё?
Затем, зачем и всегда нужны фреймворки, уменьшить бойлерплейт код. Да и хз, что у тебя там в питоне, интерфейсы какие-то. Нативный джавовский клиент не так устроен, может там тоже какие-то дополнительные функции.
Над продюсером и админ апи там очень маленькие прослойки.
А над консьюмером там большой комбайн с конфигурацией еррор-хендлеров(с конфигурацией ретраев/пересылки в длт), конкурентного чтения, пакетной обработки, десятком видов фиксации оффсета, мониторингом, транзакциями, остановкой/паузой консьюмера, поддержкой евентов на каждую стадию обработки сообщения, валидацией дтошек, оберткой, чтобы клиенты кафки работали в с семантике запроса/ответа, дополнительными конверторами, делегатами десериализаторов.
>Захочу сделать сериализацию в нужном месте - ну просто внутри коллбека вызову руками нужный сериализатор и всё.
>Зачем мне комбайн, который что-то там делает под капотом волшебное, когда я могу руками из библиотек собрать ровно то, что мне нужно?
Чтобы не тратить время. Spring-kafka это неплохой компромисс между простотой и низкоуровневым апи, стандартная спринговая либа, все гибко настраивается. А вот все остальное, что там наворотили это лютый пиздец. Кафка слишком сложная вещь, куча мест, где все может сломаться и абстракции потекут. Новичкам возможно действительно лучше начинать с простого кафка клиента, и делать все вручную, понимания будет больше. А то в spring-kafka аннотацию над методом поставил, пару пропертей прописал и все, кажется, что все будет работать (нихуя).
Как ты сделол такое если анончики говорят что джава в 2022 используется только для майнкрафт модов???
>Нахуй он тогда нужен?
Ну потому что
>Minecraft: Bedrock Edition does not support mods officially or unofficially due to the universal codebase upon which it's built. However, players on the most modern version of Minecraft can still change things up with the Minecraft Marketplace, an officially supported, community-built storefront filled with new maps, texture packs, character skins, adventure maps, and behavior / resource packs with free and premium options.
)
У меня на вебмках как раз LWJGL. Точнее велосипедный фреймворк общающийся с OpenGL через API LWJGL.
Ты ведь про инвесторов c pay to earn что-то говорил, если я не путаю? И про найм других людей. Как с этим дела?
Пока что на этапе написания диздока, вайтпеппера, ванпейджера, сайта, вот этого всего, созвонов бесконечных. Диздок, кстати, дописал. Большие фонды пока не привлекали.
Вот рил, не понимаю. Джаву компилишь раз, запускаешь эвривеа.
А нахуя? Кто этим пользуется?
Типа в мобильной разаботке на Java/Kotlin пишут только на андроид, могли бы и в бинарник компилить как эпл делает.
Бэкенд? Но ведь сервера все и так со всякими докерами и виртуализациями рабротают, намного выгоднее просто компилить все идеально под энваермент.
Ты не будешь же бинарник переносить и запускать где-то еще.
Единственный плюс это ебаный JavaFX?
Типа либы ты не как сурс код подключаешь.
Линуксовые права не спасут тебя, если начнёшь писать в массив мимо выделенной памяти или переполнишь стек.
А, ты про эту безопасность. Хартблиды всякие.
Но во многих компилируемых языках типа го/раста/свифта этих же проблем нет? Звучит как C/C++-ная хуйня
> Типа в мобильной разаботке
> Бэкенд? Но ведь сервера все и так со всякими докерами и виртуализациями рабротают
Бля чел, но джава появилась не одновременно с докером блядь, и не одновременно с ведроидом. Она появилась когда мне был годик или около того, а ещё через 7 лет появился ты.
И на момент появления этот функционал вообще мозг людям взрывал.
>Ты не будешь же бинарник переносить и запускать где-то еще.
Именно так это и работает. Подключаешь .jar файл в любой проект на любой архитектуре процессора - и вперед.
Ну это в теории. На практике ты либо пишешь серверсайд хуйню где тебе похуй, либо мобилки где оно под айфоном не запустится.
Дескторные кроссплатформенные приложения на джаве редкость, как и на чем угодно. Оказалось проще на дажваскрипте
СЕРВЕРА ПРИЛОЖЕНИЙ
На десктопе кстати тоже заебись, как плагины к какой-нибудь хуйне.
>Оказалось проще на дажваскрипте
Eclipse, Intellij IDEA + сотни производных. Оказалось что на жабаскрипте как-то не проще.
Android - arm7, armv8a, x86, x86_64.
linux - любой сервер, Мб небольшое embedded уст-во. Подошел уверенно и запустил.
J2ME. Какая у них там вообще архитектура?
SIM карты - тоже жаба VM.
iOS - чисто политика Apple. Теоретически что мешает там запустить JVM
Хочу поделиться программой с "неайтишником". Да так, чтобы ему jre и jdk не пришлось устанавливать (буду ему скидывать папку со скачанным jdk и свой jar-ник запулю в jdk/bin, а корне создам bat. У друга Винда).
Что делаю я: пишу mvn package. Он мне давай делать jar без dependencies. Гуглю. Пишут, мол, напиши, maven shadow plugin. Ну ок. Опять пишу mvn package. Он мне создает 2 jar файла: один без dependencies, а второй с dependencies. Тот, что без dependencies имеет манифест с прописанным Main. Тот, что с dependenies имеет лес файлов (jar-ники dependencies), но манифеста не имеет.
Фокус с запихиванием манифеста и Main класса в jar-ник с dependencies не работает.
Значит я должен написать в bat файле, как запустить эти два jar файла одновременно.
Помогите, пожалуйста, разрабы.
Не силен в мавене, но в нрадле при генерации jar создается bat файл для запуска с зависимостями. Можешь его вручную сделать, просто в bat файле пропиши --classpath и все зависимости и main класс
Идти нахуй?
google - maven assembly executable jar
В градле сам по себе этот jar с dependencies и батник создаются или нужно таску писать? Если нужно таску писать, то наприши, пожалуйста, приблизительный текст из build.gradle
>J2ME. Какая у них там вообще архитектура?
Java 2.0 for Mobile Environment. Хочешь игры от Gameloft для кнопочных нокий и сони-эриксонов поредактировать? Я такой jar-ник раскрыл. Прикольно было. Одни if-ы. :)
Программирование - это же одни if-ы и есть
Если ты про паттерны проектирования, ты понял их суть. Паттерны не придумывают, их обнаруживают в коде, просто замечают, что один и тот же подход используется в самых разных местах.
Кастомных тасок не надо. В градл файле подключаешь плагин application. И дальше в конфигурации прописывает что то типо application { mainClassName ""}.
А вот как задача называется которая запускает это сборку - уже не припомню. Вроде как distZip
P.s. вот дока https://docs.gradle.org/current/userguide/application_plugin.html
Почему до сих пор существуют другие языки, кроме жабы? Она же блять буквально для всего подходит, сука.
Это у вас на курсах что ли не объясняют про escape sequences, но уже впаривают JS?
я думаю нет
а с хуяли
тем более что ввели вместе с попыткой в функциональщину
где и мутабельность и персистент дата
то есть на любой пук пересобираются деревья списки объекты
да и жаба всегда на производительность хуй клала
Шилдт. Не надо читать от корки до корки. Но как только возникнет какой-то вопрос - сразу же открываешь книгу и читаешь статью о вопросе целиком.
Чтобы появились вопросы нужна задача, тут уже сам придумывай, я посоветую плагины для майнкрафта писать.
Нах тебе "интерактивный" курс, лень текстовый редактор и окошко с консолькой запустить?
https://learnxinyminutes.com/docs/java/
https://metanit.com/java/tutorial/
Как научиться правильно выбирать уровень изоляции транзакции? Ну так, чтобы не наломать дров.
Стыдно. Но не из-за возраста, а из-за того что джуном. Вкатывайся мидлом.
Просто так.
Самый высокий = транзакции выполняются последовательно = толку от нескольких ядер 0, всё равно СУБД будет работать в несколько раз сильнее, чем могла бы.
Спроси у nginx-программистов.
Скорее всего mockMvc автоматически следует редиректам. Постман именно так по дефолту и делает.
Мобилки (Андроид) ещё и на Джаве продолжают делать те люди, что не начинали учить Котлин.
Не разбираюсь, то если дословно перевести с английского, то reversed обозначает "перевернутый".
Это и так понятно. У него же проблема, что при сортировке от А до Я всё работает, а при сортировки от Я до А жаба пишет "ты пидор".
Называй всё своими именами. Не """пайтон""", а петухон.
Сокеты.
Ты проксируешь запросы, пришедшие на внешний интерфейс на этот же интерфейс. Сомневаюсь, что у тебя порт приложения вообще на нем доступен. Завязывай сочинять конфиги под веществами и скопируй готовый конфиг с первой страницв гугла, короче.
Попробуй инвалидировать кеши в идеи - https://www.jetbrains.com/help/idea/invalidate-caches.html. Если не поможет, то заведи багрепорт.
Нашёл мурзилку, где четко написано как найти сумму всех ячеек в таблице:
Long sumOfAllAges = (Long) session.createQuery("SELECT sum(age) from Student").getSingleResult();
Делаю всё также, а мне выдаёт эксепшен:
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Student is not mapped [SELECT sum(age) from Student]
С JDBC такой ерунды не было
Конечно. Я даже туда данные загонял и сохранял в таблице, а посчитать сумму не могу.
Я вообще все забывал сразу после сдачи предмета. Сейчас максимум какие-нибудь простейшие производные и интегралы смогу взять, ну и формулу для сочетаний и перестановок вспомню, не более. То есть по сути то, что и школьники умеют, лол. Вузовский материал как-то вообще быстро выветрился.
>А нахуя Джаве виртуалка?
В 90-х это было модно. Тогда все еще существовало много других осей и архитектур. Никто не был уверен, что все сведется к тому, что через 30 лет жаба будет только в докере на линухе крутиться исключительно как бекендовый язык.
>>49018
А чего вы ждали? С самого начала вката вокруг вас знакомые носились со стереотипом, что все программисты используют вышмат в работе, и вы сами в это уверовали? Не обязательно опускаться до уровня сантехника, чтобы не использовать математику в работе, она нужна единичным наукоёмким профессиям, к коим программирование как таковое, очевидно, не относится. Врачи - это тоже сантехники, да?
Да мне как-то все равно, я не математик-PhD, который каким-нибудь ресерчем в машобе занимается или обработкой сигналов, я обычная макака.
Понадобится математика, ну открою матпрофи, какие-нибудь материалы и лекции для тупых студней и буду заново вспоминать или вообще с нуля учить, дальше-то? Но мне кажется таких задач у меня никогда не будет. А то, что не используешь, то быстро забывается.
Ну и конечно же спустя час когда у меня поплавился мозг в ход пошли задачки из литкода, у меня уже бошка совсем не варила и я минут 10 тупил на задачной про поиск квадратного корня бинарным поиском и задачкой про валидацию скобок [[[]]] )(.
Очевидно отрицательный фидбек, вопрос, как мне теперь с этим жить? Есть какой-то норм гайдец по вопросам конкаренси чтобы не тупить?
А то я по сути никогда многопоточного не писал, у меня все пет проекты это какой-либо crud на спринг+хибернейт +тест в cicleci чтобы показать что я шарю за это..
Ну и конечно поиск работы в Украине чичас это жепа - на одну вакансию по 200 откликов за день, в половине случаев рекрутеры даже не чекают, на собес попасть это тот еще квест, за месяц 2 раза сосебился успешно выполняя тестовые.
пасиб, просто я не совсем пойму на реддите в джава сабе читал что они (америкосы?) джунов не подпускают к многопоточке мол это слишком сложно и надо пару лет опыта чтобы шарить что к чему, а у нас это будто мастхев. Видимо не врут на ебаном.айти что у нас в Украине аутсорс\аутстаф компании продают 0.5г джуна как 3-4г мидла.
А она не устареет после выхода Loom осенью?
Это не мастхев. Многие мидлы на спринге не особо шарят в канкурренси.
Это это не просто так, спринг-конфигураторы сами почти не пишут многопоточный код и достаточно редко ковыряются в библиотечной многопоточке.
Просто интервьюер такой задроченный попался. Этот вот любит по многопоточке угарать, другой по полной иерархии io тебя бы вздрючил или еще по чему-небудь.
Оффтоп - чё там на украине с рынком айти?
Насколько реально приехать из рф, не щемят? По идее не должны, учитывая кто выгодоприобретатель в ситуации, когда спец перестаёт платить налоги в стране, с которой у тебя война и начинает платить их твоей стране - но мало ли на свете дегенератов.
>Есть какой-то норм гайдец по вопросам конкаренси чтобы не тупить?
Нет, каких-то нормальных коротких гайдов по конкаренси я не видел.
Но конкаренси изучить можно, правда для этого придется потратить довольно много сил и времени.
Примерный список действий:
1. Изучаешь книгу с поездами, Java Concurrency in Practice. Особых тонкостей нет, CompletableFuture, ForkJoinPool там не описаны (так как книга вышла намного раньше), но какие-то основы написания многопоточки на джаве ты получишь.
2. Смотришь лекции и семинары Романа Липовского (наверное чуть ли не единственный знающий препод по многопотоку в русскоязычном пространстве, чьи лекции есть в открытом доступе). Наверное это самая важная ступень в изучении конкаренси.
Лекции:
https://www.youtube.com/playlist?list=PL4_hYwCyhAva37lNnoMuBcKRELso5nvBm
Семинары:
https://www.youtube.com/playlist?list=PL4_hYwCyhAvYTxm55RBm_HA5Bq5W1Nv-R
Также нужно обязательно прорешать все домашние задания. Они тоже есть в открытом доступе на гитлабе, при этом тесты там тоже есть.
https://gitlab.com/Lipovsky/concurrency-course
3. Параллельно (или после) курса Липовского нужно читать многопоточные талмуды. А именно:
- Is Parallel Programming Hard, And, If So, What Can You Do About It?, прекрасная книжка, написана хорошо, есть в открытом доступе по ссылке ниже, либо легко загуглить по запросу perfbook, начни с нее.
https://cdn.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html
- Concurrent and Distributed Computing in Java, неплохая книжка
- The art of multiprocessor programming, наиболее важный многопоточный талмуд из всех, что были когда-либо написаны (ну разве что perfbook сравнится с этой книгой)
Если хотя бы осилишь первые 2 пункта, то будешь знать уже гораздо больше многих других джавистов, сможешь разъебывать чуть ли не любой собес. Если осилишь вообще все, то можешь считать, что ты более-менее что-то понял про конкаренси).
>Есть какой-то норм гайдец по вопросам конкаренси чтобы не тупить?
Нет, каких-то нормальных коротких гайдов по конкаренси я не видел.
Но конкаренси изучить можно, правда для этого придется потратить довольно много сил и времени.
Примерный список действий:
1. Изучаешь книгу с поездами, Java Concurrency in Practice. Особых тонкостей нет, CompletableFuture, ForkJoinPool там не описаны (так как книга вышла намного раньше), но какие-то основы написания многопоточки на джаве ты получишь.
2. Смотришь лекции и семинары Романа Липовского (наверное чуть ли не единственный знающий препод по многопотоку в русскоязычном пространстве, чьи лекции есть в открытом доступе). Наверное это самая важная ступень в изучении конкаренси.
Лекции:
https://www.youtube.com/playlist?list=PL4_hYwCyhAva37lNnoMuBcKRELso5nvBm
Семинары:
https://www.youtube.com/playlist?list=PL4_hYwCyhAvYTxm55RBm_HA5Bq5W1Nv-R
Также нужно обязательно прорешать все домашние задания. Они тоже есть в открытом доступе на гитлабе, при этом тесты там тоже есть.
https://gitlab.com/Lipovsky/concurrency-course
3. Параллельно (или после) курса Липовского нужно читать многопоточные талмуды. А именно:
- Is Parallel Programming Hard, And, If So, What Can You Do About It?, прекрасная книжка, написана хорошо, есть в открытом доступе по ссылке ниже, либо легко загуглить по запросу perfbook, начни с нее.
https://cdn.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.html
- Concurrent and Distributed Computing in Java, неплохая книжка
- The art of multiprocessor programming, наиболее важный многопоточный талмуд из всех, что были когда-либо написаны (ну разве что perfbook сравнится с этой книгой)
Если хотя бы осилишь первые 2 пункта, то будешь знать уже гораздо больше многих других джавистов, сможешь разъебывать чуть ли не любой собес. Если осилишь вообще все, то можешь считать, что ты более-менее что-то понял про конкаренси).
я писал многопоточку и latency оптимизации в финтехе, со spring/hibernate почти не работал, в результате постоянно валю вопросы по spring/hibernate потому что эти темы мне не интересны лол
ты рофлишь? ебало обоссут, инфа 146%, а потом домой еще не пустят с родителями чай попить. Ты не то время выбрал для переезда вна украину
Нахуя это все вкатышу? Он может самые распространённые классы/интерфейсы загуглить и получить короткий ответ в кратком руководстве. Про комплитбл фьюче уж точно инфу найти не проблема, про всякие тредпулы и блокировщики пулов, скедулары инфу на страничку самой базы с небольшим примером найти не составляет труда
Хочешь сказать, что хохлы всё-таки суицидальные дегенераты, и предпочтут, чтобы я спонсировал ракеты им на голову?
>Нахуя это все вкатышу
Очевидно, чтобы вкатиться в конкаренси. Прочитать про то, что такое CompletableFuture можно из всяких мурзилок, но вот когда дело дойдет до всяких корутин в котлине или виртуальных тредов в будущем, то неплохо уже будет знать, что под капотом происходит. Вангую после выхода в прод Лума на собеседованиях начнут гонять по кишкам шедулера вирутальных тредов, как это сейчас у гошников на собесах происходит.
Ну и как минимум всякие способы общения потоков через те же очереди сообщений (в простейшем случае - блокирующие очереди) это база, это каждый вкатун должен знать.
На джаве писали? Это ж какое извращение должно быть. Обычно весь HFT/low latency финтех на плюсах пишется.
И да, вкатун (джун/стажер) должен иметь представление о моделях памяти, JMM в случае жабы, понимать зачем оно вообще было придумано и какие проблемы решает. Это может и не везде спрашивают, но для уровня выше джуна мастхев.
>JMM
В этом можно увязнуть на год минимум. Там столько тонкостей и не очевидных моментов, которые нужно просто запомнить, т.к. логически до них не додуматься. Т.е. ты как стихотворение должен запомнить несколько десятков крайних случаев как работает модель памяти.
они оч эмоциональный и недальновидный народ, сначала стреляют потом целятся. говорю по своему опыту общения и работы с ними. С ними связываться - ошибка, лол.
> не пустят с родителями чай попить
это если что про наших, помню когда работал за бугром в епаме, те россияне, кто ездили в коммандировки к харьковской команде, потом попадали на разговор с фсб, сейчас возможно проблем будет больше, поэтому нах надо
критичные куски на плюсах, околобизнесовая логика на джаве.
Да, извращение пиздец, проприетарная VM и GC (zing), кодогенерация, и много сомнительных хаков. Уволился и очень рад
мне они не нравятся, с придурью своенравные люди.
винить их во всех бедах человечества при этом не стану
и чем тебя удивляет интерес спецслужб к тем кто ездит на территорию враждебного государства? это логично и правильно.
> не пустят с родителями чай попить
Можно ж в белоруссии или армении собраться попить чаю.
С другой стороны, если ехать в армению, то нах нужна украха.
Сво и сосанкции очень хорошо пролило свет на "уезжаторов". Готовы в любую порашу съебать, лишь бы съебать. Эти люди не хотят лучшей жизни на самом деле, они просто психопаты и патологически ненавидят нас с вами, остальных россиянцев.
Вообще нихуя подобного, прямо по всем пунктам промах.
>Готовы в любую порашу съебать, лишь бы съебать
"Готов" и "хочу" - разные вещи. Я-то как раз не хочу, но в моей стране решили, что я больше не нужен.
>Эти люди не хотят лучшей жизни на самом деле
Лучшая жизнь - это понятие расплывчатое, я хочу больше денег, занимаясь любимым делом.
>ненавидят нас с вами, остальных россиянцев
За что мне тебя ненавидеть? Убеждай себя в этом, если хочешь, но это неправда.
двачую вопрос лум же делает реактивные фреймворки ненужными как я понял
Делаю мок-тесты на duplicate update (через стандартный save метод), ошибка должна бросаться из БД. Но приходит дефолтный ответ будто всё успешно обновилось, и если затем вызвать любой метод у репозитория, то выбросится ошибка которая должа была быть при обновлении до него: DataIntegrityViolationException: could not execute batch; SQL [update users ... ] nested exception is org.hibernate.exception.ConstraintViolationException: could not execute batch
Специально учить не обязательно. Там все просто, примерно как в стримАпи, за полгода втянешься.
>>лум
Это джава 23 что ли? На нее еще не скоро перейдут.
На 17 только через год потихоньку начнут перекатываться, да и то не факт - новостей от спринга чет нет нихуя, хотя до релиза казалось бы пару месяцев осталось.
Стоит, но дело видимо не в нём. Походу надо разбираться с сессиями хибернейта.
Поставил над тестом @Transactional(propagation = Propagation.NEVER)
Всё заработало как надо.
Обычное желание после кода на джаве
Перешел месяц назад на 17. Ничего интересного. Рекорды для дтошек и многострочки для квери методов в спринг-дате.
В ноябре 6-ой спринг. В декабре перейду. Там вроде тоже ничего не будет, кроме изменения пакетов валидаторов.
По-моему там просто поменяли пакеты javaee на jakartaee и заменили несколько енумов классами. Хуйня какая-то, нахуя ради этого цифру поднимать?
Бля вот никогда не понимал, какая разница, что на последних версиях жабы нового, если 80% сидят на <=11
>новостей от спринга чет нет нихуя
На спринг уже забили хуй я щитаю. Раньше они в spring native пытались-пытались, но идея нативной жабы скорее всего сдохла попросту.
Радикальная мера, чтобы заставить всех вылезти из уютненького легаси-болотца "зачем что-то менять, если и так всё работает". В реальности получится как со вторым и третьим питоном, все будут 100500 лет сидеть на пятом спринге.
Нахуй нужен весь этот пиздец, когда можно написать try/catch в нужном месте?
Нахуй нужен спринг, если можно и на голом томкате написать?
Там по-русски написано, чтобы двумя-тремя строчками кофигов настроить ретраи и посылку в длт, не засоряя код. А ошибку десериализации ты через try/catch вообще не отловишь. А еррор-хендлер обработает ошибку от десериализатора-делегата. И есть понятное разделение на ретрибл/неретраибл эксепшоны.
Ты хоть представляешь сколько кода тебе придется руками написать, чтобы паттерн с пика руками с try/catch писать? Мейн, два ретрай-топика и длт? Там будут тысячи строк кода-лапши.
https://docs.spring.io/spring-kafka/reference/html/#retry-topic
А тут все решается в сотню строчек конфигов и методов с аннотациями.
Хорошо, беру Try-recover монаду из vavr и делаю то же самое.
>>49763
>чтобы двумя-тремя строчками кофигов настроить ретраи и посылку в длт, не засоряя код
Нет. там написано:
>Вот у нас есть такая штука для обработки ошибок
>И еще такая
>Но они обе устарели, так что используйте третью
>Третья была заменена четвертой
>Если хотите, настройте четвертую штуку в одном файле, а сам листенер в другом, чтобы человек, который будет читать ваш код нихуя не понял
>И конечно вместо примеров вам ХУЙ
Нахуй мне ретраи, если у меня ошибка - значит все, ошибка, нехуй вола ебать дальше. Выкинь это сообщение из батча и ебашь дальше.
Так если тебе нинужна то просто иди нахуй не пользуйся, пользуйся try/catch.
Если тебе нужен пример, то я выше по треду уже скидывал: https://www.youtube.com/watch?v=OnZ7JArSoiU
Да, они поменяли апишку еррор хендлеров и написали об этом в доке. В чем твоя проблема?
Почему я тоже недавно в этой библиотеке разбирался и все понял?
>Почему я тоже недавно в этой библиотеке разбирался и все понял?
Ну не знаю, может потому что ты тупой?
Смотрел Борисова. А хибер он и нахуй не нужен. Я даже sql уже забыл, вот настолько он мне не нужен на работе.
Ну мы хибером тоже не пользуемся. Но что за спринг вакуха, где sql не нужен? У нас несколько nosql, но большая часть баз все равно в реляционках. Это ж не нода какая, где многим не зазорно все в монге хранить.
Я хз какие наркоманы делают обратный прокси с внешнего интерфейса на тот же открытый внешний интерфейс, в этом смысла ноль - ты можешь снаружи те же запросы слать на порт приложухи мимо прокси. А общедоступный томкат - мечта кулхацкеров, через пару дней просканируют порт, пошлют какой-нибудь log4shell запрос и добро пожаловать в ботнет.
Обычно проксируют с внешнего интерфейса на локалхост или где там приложение, недоступное по-дефолту снаружи, поднято. Т.е. в твоем случае нужно в конфиге спринга указать 127.0.0.1 как адрес сервера, и на него же изменить прокси_пасс в конфиге ногинска.
Ну или поднимать в докере, там явно указывается какие порты контейнерам разрешено слушать.
Это не очень хорошо говорит о твоей компании.
Вот тебе рефералочка https://vdsina.ru/?partner=p6m9pcnd68 можно и в россии и в недерландах захоститься и всё за рубли
>>Рекорды
Вот лучше б вообще ничего не делали, чем добавление такого говна. Ломбок все равно в тысячу раз удобнее, так зачем было такие кривые рекорды делать спустя 20лет.
>>49698
>>Радикальная мера, чтобы заставить всех вылезти из уютненького легаси-болотца
Так если ничего нового - тем более зачем переходить на новую версию и чинить новые баги? Те же рекорды ломают жука например. А какие-нибудь специфичные легаси либы вообще могут не завестись на новой жабе. Переписывать код ради чего? Чтоб циферку в версии поднять?
Компилятор говорит что у вас в проекте есть какой то Record, и он не понимает это рекорд джавы или рекорд жука(из импорта) и не хочет компилировать, пока не перепишешь. Натолкнулся на такое, когда пытался свой проект на жава11 сбилдить 17-м.
Райт ванс ран евривере, но только на той же версии и желательно на той же системе.
Воооот , спасибо за развернутый ответ. Я в управлении серваками ноль полный.
А я не знал этого, возьму на вооружение для интервью.
Ну потому что все должно быть настраиваемым? В порте по умолчанию 8 - это бин, потому что похоже на кофейное зерно, а 0 - это контекст, потому что он как бы окружает все бины. Почему не 80? Для http как раз будет 80. Для https будет 8080.
Шарпоблядь плиз.
Порт нельзя менять, иначе это уже не спринг будет, а какой-то велосипедный веб-фреймворк, например, Spring Framework 8081.
ethernet::ipv4::tcp::http://ftp.localhost:80, идиотище
>>Что там надо переписать?
надо переписать, чтоб не использовался класс Record<T>. Использовать рекорд2 и еще 18 вариаций или мапить сходу во что то еще. Или писать везде org.jooq.Record.
В принципе реально, но не очень удобно. Спасибо в общем жабе за бесполезный класс создающий сложности на ровном месте.
Есть Record и Record. Первый - из java.lang, второй из импорта org.jooq.Record. Пока первого не было - проблем не было. Когда появился - возник конфликт, компилятор больше не понимает какой из них использовать когда видит в коде Record record;
Ты че ебанутый? Импорты для кого придумали?
>Использовать рекорд2-18
У меня они всегда и использовались. Правда вообще похуй вроде. Перегенерил их и похуй. Или ты руками жуковские классы пишешь?
Хотя я последние 2 месяца в основном nosql пишу.
Жук - это билдер запросов, чтобы при проёбе получить ошибку компиляции. Хибернейт со своим HQL высрется только в рантайме.
Просто альтернативная технология, если ORM по каким-то причинам нельзя использовать.
Патамушта интерпрайз. А вообще хз, язык как язык. Со своими недостатками и достоинствами === ой ой ой блять что мы придумали потому что == занято дебилушкой который за один день наговнокодил нечто
Спасибо котлину за import as
> === ой ой ой блять что мы придумали потому что == занято дебилушкой который за один день наговнокодил нечто
В те времена в вебе считалось, что лучше уж тихо сломаться и продолжить так работать в сломанном состоянии чем громко упасть с ошибкой, та же хуйня и в пхп. Веб ставил подстраивание под браузер выше надёжности.
Как научиться готовить микросервисы, если нет 100 баксов в час на услуги самого ДимСоула?
Из этого вытекает вопрос - как сделать файл-разницу, применение которого к оригиналу даст измененный файл, а к измененному файлу - даст оригинал? Такие файлы будут мало весить и позволят в любой момент вернуть всё к исходному виду.
Похоже, что они есть и в гите и могут применяться вне репозитория. Буду разбираться.
Criteria API --- не хуже и не лучше: это просто другое. Это кусок JPA спеки, который дает что-то наподобие SQL диалекта, но не для СУБД с ее базами и таблицами, а для ORMа с его персистенс юнитами и энтитями. Без JPA и ORMа Criteria API неприменим, в то время как JooQ и QueryDSL вполне себе самодостаточны. Близкий аналог Criteria API, с которым можно проводить сравнения --- HQL из хибернейта.
В целом --- да. Разворачивают обычно либо оригинальную БД средствами testcontainters (долго-дорого, но близко к прод-окружению), либо используют in-memory H2.
Чем кстати квериДсл хуже жука? Вроде квери дсл имеет интерацию со спринг-датой. А жук - нет. Но жук популярнее.
upd Ковыряю git diff.
Как сделать так, чтобы в своей работе он не опирался на переносы строк?
Он очень неэффективен, если этих переносов нет.
Например, если в качестве оригиналов взять два одинаковых текстовых файла с той лишь разницей, что во втором все переносы строк заменены на пробелы, а изменениями для этих файлов будет удаление первых и последних 50 символов, то для файла без переносов патч будет весить в сотни раз больше, чем для того, который с переносами. То есть во втором случае патч будет содержать в себе исходную строку полностью, а то и в двойном экземпляре (если не добавить параметр --word-diff).
Это не локальные мемы, это один долбоеб самофорсит.
Пиздуй читать книги, сука.
Почему в Java нет async/await как в С#?
Пилят виртуальные треды, чтобы не надо было ебаться с async/await, умный планировщик всё сделает сам.
Может ли флоу апи, реактивные стримы, комплитэбл фьюче заменить хотя бы 1/100 того, что предлагает C#?
Но ведь это не так - https://devblogs.microsoft.com/dotnet/performance_improvements_in_net_7/
Там ничего не сказано про виртуальные треды - их в шарпе нет
Не нашёл по ссылке сравнений производительности с Java 19+Loom.
>говорим про возможности языка
>петушарпер начинает чё то кукарекать про перформанс, про который речь не шла, поняв, что он обосрался с возможностями
.
.
.
>и тут обсирается, пушо жаба выходит быстрее петушарпа
Джава расширяется за счёт библиотек, а не за счёт конструкций языка. Сишарп постепенно замусоривается этими конструкциями и превращается в непонятное нагромождение значков.
Где ты нашёл инфу по спрингу?
У кого сейчас больше будущего? У котлина или шарпа и главное почему (ваше мнение)?
Что не так?
котлин это больше про андроид, шарп это геймдев и декстоп.
есть еще немного бэкенда, но там жаба сидит и ее не выгнать.
Обе хуйни какие то нишевые в которые так просто сходу не вкатишься на сотыги, но у шарпа все же чуть больше шансов - там хоть за счет легаси можно протянуть.
Мурзилки не скучные.
Между прочим факт, но жаба тоже замусоривается. На самом деле, все возможности жабы после 8 можно заменить какой-нибудь собственной библиотекой.
Ну замени.
> все возможности жабы после 8 можно заменить какой-нибудь собственной библиотекой.
С ассемблером тоже так можно. Но это не значит, что нужно.
жаба кор, спринг кор
классический секс, куннилингус, минет в презервативе, непрофессиональный массаж, расслабляющий массаж, стриптиз, эротический массаж;
страпон: анальная стимуляция, анальный фистинг вам, перемена ролей;
с/м игры: бандаж, легкая доминация, порка, трамплинг, услуги Госпожи, фетиш;
необычное: глубокий минет, групповой секс, золотой дождь выдача, минет без презерватива, окончание на грудь, ролевые игры, семейная пара, услуги семейной паре;
профессиональный массаж: урологический;
По меньшей мере половина технологий, упоминаемых в вакансиях на жаба-бэкендера. Жаба, спринг и SQL само собой, хотя бы один сервер приложений, основы фронта, линукса, девопса и других смежных областей.
кафка, спринг клауд, спринг секюрити, хибернейт, касандра, кубернетис (на базовом уровне), умение и понимание многопоточности и асинхронности, базовые навыки архитектуры (построение микросервисной архитектуры)
>>52399
>>Жаба, спринг и SQL само собой, хотя бы один сервер приложений
это набор джуна
EJBEnterprise JavaBeans — спецификация технологии серверных компонентов, содержащих бизнес-логику2.13.03.13.23.2
JPAJava Persistence API — управление постоянством и объектно-реляционное отображениеНет1.02.02.12.2
ServletОбслуживание запросов веб-клиентов2.42.53.03.14.0
JSPJavaServer Pages — динамическая генерация веб-страниц на стороне сервера2.02.12.22.32.3
JSTLJavaServer Pages Standard Tag LibraryНет1.21.21.21.2
JSFJavaServer Faces — компонентный серверный фреймворк для разработки веб-приложений на технологии JavaНет1.22.02.22.3
JAX-WSJava API for XML Web Services — создание веб-сервисов1.01.21.22.22.2
JAX-RSJava API for RESTful Web Services — создание RESTful веб-сервисовНетНет1.12.02.1
WebSocketJava API for WebSocketНетНетНет1.01.1
JSON-PJava API for JSON Processing — разбор и генерация JSONНетНетНет1.01.1
JSON-BJava API for JSON Binding — преобразование Java объектов в/из JSONНетНетНетНет1.0
JNDIJava Naming and Directory Interface — служба каталогов1.21.21.21.21.2
JMSJava Message Service — обмен сообщениями1.11.11.12.02.0
JTAJava Transaction API — управление транзакциями1.0.1B1.11.11.21.2
JAASJava Authentication and Authorization Service — Java-реализация PAM1.01.01.0
JavaMailПолучение и отправка электронной почты1.21.41.41.51.6
JACCJava Authorization Contract for Containers1.01.11.11.41.5
JCAJ2EE Connector Architecture1.51.51.61.61.7
JAFJavaBeans Activation Framework1.01.11.11.11.1
StAXStreaming API for XMLНет1.01.01.01.0
CDIContext and Dependency InjectionНетНет1.01.12.0
ValidationBean ValidationНетНет1.01.12.0
SecurityJava EE Security API
Вот вам наглядный пример истинной сущности жидбрейнсов!
Да все знают, что жидбрейны не намного лучше оракла и IBM, но лучше идеи ничего нет, даже при всей её тормознутости и прожорливости.
Log4j забыл
Тоже бугуртнул с этого. Пользовался ради подсказок в application.yaml. Хорошо, что для этого есть аналогичный плагин.
А зачем нужна кассандра(про устройство немного)? Это olap база? У меня на проекте clickhouse есть. Понятно, что это другое семейство nosql, но применение похоже или нет?
Ну и спринг клауд, вот я open feign чуть трогал, ну клиент, теоретически можно наверно config и schema registry затянуть. А остальные части спринг клауда вообще не очень понимаю зачем. Можете пояснить за самые попсовые куски спринг клауда и зачем они нужны?
Пару глупых вопросов от вкатуна
- В продакшене ОРМ используют или запросы напрямую? а то в го например все без ОРМ пишут, мбы так везде
- Видел некоторые вакансии где пишут что прод пишется не на самых новых версиях жабы, почему все просто не обновляются? Я такое только в плюсах видел, где челы до сих пор на с++11 сидят или
Там дело не столько в долбоёбстве, сколько в женериках (точнее их отсутствии). Ормки на го содержат в себе кучу магии из-за этого.
Если бы го был полноценным языком, то орм бы там использовали не меньше чем в жаве.
У джавы.
Пушо долбоебы. Надо юзать паттерн sql-speaking objects.
Ты поди глобальные переменные юзал, лол.
Я просто под гнетом обстоятельств решил сферу деятельности поменять, ну и спустя месяц мытарств пришел к выводу, что наиболее реальный вариант сейчас это 1с. Но мне до ужаса не хочется туда лезть, ибо бухгалтерия не мое. Хочу в мобильную разработку или что-то подобное. Но в нынешних условиях необходимую базу я смогу только к предпенсионному возрасту освоить. Поэтому сейчас в раздумьях. Или может что-то близкое к интересующему профилю выбрать? Но без особых требований, дабы хоть какой-то релевантный опыт наработать на момент обучения.
>были ли на вашей практике примеры, когда человек без опыта и в возрасте подходящем к 30 начал карьеру джава разработчика?
Да
>Но мне до ужаса не хочется туда лезть, ибо бухгалтерия не мое.
Где связь? Ты собираешься бухгалтером стать?
>Или может что-то близкое к интересующему профилю выбрать?
В смысле? Например?
В 30 вкатился с эконом вышкой в спринг.
Но кроме меня все джуны-джависты - зумерки.
В конторе есть и 1сники - там вкатунцов 30-летних еще больше, питонисты - там все молодые, тимлид младше меня, ну и фронт - там примерно, как у нас.
Мобилка, насколько я знаю тоже модно-молодежная.
Но в принципе, если возьмут - эйджизма не так чтобы вообще много было(по моему опыту и еще 2 знакомых вкатунцов).
В принципе в бек/фронт/мобилки можно вполне до 40 лет вскочить, было бы желание. Ну и после начала спецоперации конкуренция за места для вкатунцов усилилась раза в 2 точно, может больше.
Насчёт Docker и не только.
К примеру у нас есть Спринг приложение, которое крутится на одной машине. Затем мы подключаем ещё одну машинку, разворачиваем на ней тот же Спринг. Каким образом синхронизировать данные между разными машинами? Как это делается в принципе. По простому говоря, как масштабируется инфраструктура, когда мы имеем дело с реальными, не облачными железками.
Ну и в заключении, где в этой конструкции помогает Докер?
Сорри, если пишу глупости.
Если кто-то объяснит, будет очень круто.
У меня похожий жук откис на балконе недавно. Жаль его. Красивый был, красиво жил.
С помощью докера ты можешь на одной машине развернуть несколько сервисов, например 10.
А с помощью кубера ты можешь на нескольких машинах, скажем на 5 развернуть несколько сервисов, например 10, у которых могут быть несколько инстансов, например от 1 до 3.
Данные никак не синхронизировать, приложения должны быть стейтлесс(именно поэтому можно делать несколько инстансов). Все состояние на фронте или в базах. У каждого сервиса своя база.
Общаются сервисы между собой чаще всего по ресту, через брокеры сообщений или grpc. Есть еще десяток менее популярных способов.
Я сам джун, поправляйте меня давайте, если я в чем-то не прав.
Какой ты джун, судя по тому, что написал, ты даже не стажер
Кто-нибудь сможет пояснить зачем избавляться от null?
Все предлагаемые "недорешения" требуют все тех же проверок, самое шикарное с рантаймэксепшеном которое наверн надо ловить и обрабатывать?, эти решения лишены смысла и требуют ебейшего оверхеда.
Зачем тогда нести всю эту хуйню, если они скорее всего юзают либы, юзающие налы, даже в стандартной библиотеке они есть
Избавляться не нужно, нужно ставить аннотацию @Nullable в случае, если метод может в принципе вернуть null. Либо @NotNull, если метод гарантированно при любых обстоятельствах вернёт не нулл. Сразу же всем дегенератам, что высрутся аля "по ко-ко-контракту @Nullable ставится только тогда, когда предсказать нельзя" ссу в рот, в таком случае смысл аннотации теряется.
мимо лид
Если вкратце - джава не любит нулл и падает если он внезапно всплывает в рантайме. Чтоб не писать проверки if (op != null && op.hui != null) для каждого аргумента - делают нул сейф апи, придумывают опшиналы и прочее говно. Полностью это проблему все равно не решит, но боли немного уменьшит.
>>даже в стандартной библиотеке они есть
Это ж легаси. 20 лет назад считалось нормальным модифицировать входящие данные, делать кучу войд методов, возвращать нулл. Сейчас стараются не использовать эти методы.
>но боли немного уменьшит.
Нихуя оно не уменьшает. Только добавляет и производительность херит.
Какая еще производительность? Один запрос в базу длится вечность по сравнению с этими опшиналами, стримами и прочими монофлаксами с десятком проксей.
Это реального процессорного времени не тратит, поток просто ждёт. А эксепшены и создание объектов напрямую обрабатывается процессором, вытесняя другие задачи.
То ли дело NPE, они же бесплатно из воздуха спавнятся, не тратя перформанс, да.
if (concha == null) {
return null;
}
А где нибудь наверху
if (govno == null) {
user.error(Error.of(ErrorTemplate.INCORRECT_INSERT));
[
>Он же написал про 1с перед этим
И где связь? На 1с доля бухгалтерских проектов такая же, как на любом тырпрайз языке, проще говоря - вероятность в 1с попасть на бухгалтерию такая же, как в джаве.
Во всех современных JVM NPE отдельно заоптимизировано,
например к нему не цепляется стек.
Можно кидать NPE хоть с частотой в 10 килогерц без потери производительности
оптимизация кода через NPE driven development
Ну и чем это отличается от return Optional.empty? Учитывая, что под капотом пустой опшионал не создается, это статик синглтон.
Ну я даже посмотрел
Да, я согласен, что если есть возможность вернуть дефолтное значение- возвращай (типа пустую строку вместо null), если это не противоречит логике
Если метод возвращает контейнер с элементами - то если элементов нет пусть возвращает пустой контейнер но не плодить контейнеры ради контейнеров, как сделали с Optional
Да логику кодировать nullом плохо- есть enum
Пункты выше как бы и любители null выполняли и выполняют, это не фичи null-free дегенератов
Не надо сравнивать на null- шизоидная хуйня, какая разница кроме потери производительности буду ли я сравнивать на null, проверять присутствует ли Optional, или вообще ловить RuntimeException тут уже скорее assertы должны стоять, если null- нарушение логики , и мест где надо делать эти проверки не уменьшится
Возвращать незаполненный объект это тоже шиза, super slow fail какой-то
Крч как по мне этот чел тоже не понимает что несет, просто ссылается на больших авторитетов как и другие статьи про null-free
В чем я не прав?
он говорит возвращать нецелый объект, обмазаться Optional, кидать эксепшены даже для бизнес логики и никогда не юзать null,а еще он настолько неграмотен, что не понимает что null это отсутствие объекта и что он привязан к реальному миру типа пошел в магаз за молоком, молока нету, принес домой null молока
> В смысле? Например?
Тестирование, техподдержка, что-то где хоть немного знание языка можно применить.
>>53135
Спасибо за развернутый ответ, анон. А вообще в целом много времени ушло на обучение и поиск первой работы?
>>53303
Не знаю как много ее в реальной работе, но в гайде рекомендовали как минимум прочитать книгу по бухгалтерскому учёту. Вот поэтому и решил.
>>Да логику кодировать nullом плохо- есть enum
Часто для каких то простых вещей тру/фолс/нул подходит больше, чем хуй пойми какой стринг. Писать енум тут - оверхед. Просто этот вышиванец любит какие то совсем дикие примеры приводить из своего прошлого в помойных галерах нулевых.
>>плодить контейнеры ради контейнеров, как сделали с Optional
>>как по мне этот чел тоже не понимает что несет, просто ссылается на больших авторитетов
var op = repo.get(id).orElseThrow(new UserException())
var op = Optional.ofNullable(repo.get(id)).orElseThrow(new UserException())
var op = repo.get(id)
if (op == null) {
throw new UserException()
}
в первом случае тебя компилятор заставит это написать, иначе хуй че получишь, а во 2 и 3 ты можешь забыть о проверке и словишь НПЕ (может через полгода, когда это выстрелит)
Он говорит возвращать не нецелый объект, а дефолтный - это раз. В ООП оперируют объектами и объекта null не существует - это два. Когда ты приходишь домой без молока, ты приходишь с коллекцией покупок, среди которых нет молока, а если в коллекции нет вообще ничего, то ты приходишь, что называется, "с пустыми руками" - это три.
Этот уебок на питоне втихую пишет штоле сука
>много времени ушло на обучение и поиск первой работы?
До первой - полтора года на чиле, мне было спешить некуда и я больше боялся, что мне обучение наскучит, чем не вкатиться.
Но там была совсем мелкая помойка, где я должен был быть 4ым прогером, я меньше месяца там отсидел и еще через два месяца поисков вкатился в текущую маленькую галеру(джавистов - около 10 человек, из которых половина джуны, нанятые вместе со мной).
>дефолтный
покажи пример который абсолютно безвреден, что такое дефолтный объект, у него поля заполнены, если да, то чем nullами?
>Когда ты приходишь домой без молока, ты приходишь с коллекцией покупок, среди которых нет молока, а если в коллекции нет вообще ничего, то ты приходишь, что называется, "с пустыми руками"
но он говорит нести пустой пакет, вместо ничего, причем пакет предназначеный только для хранения молока (Optional)
>В ООП оперируют объектами и объекта null не существует
если объекта не существует- это null, я так понимаю в джаве неправильный ооп, покажите мне правильный в котором нет null
>>53566
ну хз, если метод должен вернуть либо null либо 1 объект, то уж лучше optional, так хотя бы понятно, что человек всего лишь null проверить не может, а не гадать схера тут коллекция
>покажи пример который абсолютно безвреден, что такое дефолтный объект, у него поля заполнены, если да, то чем nullами?
Заполнены дефолтными значениями, которые явно показывают, что это объект-пустышка. Можно еще эксепшоны в методах вываливать.
>но он говорит нести пустой пакет, вместо ничего, причем пакет предназначеный только для хранения молока (Optional)
Ну неси, в чем проблема?
>если объекта не существует- это null, я так понимаю в джаве неправильный ооп, покажите мне правильный в котором нет null
Если объекта не существует, то его нет. Если я попрошу у тебя яблоко, а у тебя его нет, то ты дашь мне ничего, а не null яблоко.
>ну хз, если метод должен вернуть либо null либо 1 объект, то уж лучше optional, так хотя бы понятно, что человек всего лишь null проверить не может, а не гадать схера тут коллекция
Optional требует соответствующего отношения с проверками и так далее, в то время как с коллекцией никаких проверок не нужно. Да, возвращаемый тип может смутить, но это с непривычки.
Вот я посмотрел вакансии, и типа не то чтобы прям крупняк, но я слышал эти названия. Вакансии без упоминания 8 - сбер, почтабанк, россгосстрах, киви.
С 8-17 - мтс, тинькофф, совкомбанк.
Ну и еще пара сотен вакансий от нонеймов.
это тебе в ньюфаг-тред - им делать нехуй, они любят литкод дрочить
Да почти в любом крупном месте, где джаву используют.
>Если я попрошу у тебя яблоко, а у тебя его нет, то ты дашь мне ничего, а не null яблоко
Ничего это null и есть
>а не null яблоко
А нул-яблоко это как раз "дефолтный объект"
Двачую вопрос, в идеале бы еще ссылку на репозиторий, чтоб можно было со своим говнокрудом сравнить и оценить насколько парашный код я сейчас пишу
Ничего - это ничего, а null - это null. У них есть сходство, но они не тождественны.
Клон данбуры сделал (спринг + таймлиф).
На гитхубе он лежал, пару раз интервьюеры даже смотрели его. Вроде как им было интересно видеть что то отличное от очередной тудушки с говнокурсов.
Я его писал в первую очередь, чтоб руку набить на крудах, а не для показа. Так то наверное надо было в докер запаковать, тестовые данные накидать или на хероку поднять.
>>анимешная борда для девочек
>>не знает данбуры
ты тут недавно?
https://danbooru.donmai.us/
Естественно я не объяснял откуда идею и дизайн дернул, просто галерея для картинок.
А для мальчиков можно что-нибудь сделать?
И что тебе говорили, когда ты показывал людям галерею с девчачьями мультиками? Какие эмоции были на лицах?
Что они, порнуху никогда не видели что ли
Я ж туда обычные картинки закидывал с обычными тегами, про аниме ни слова. На уровне кода - обычный круд (кроме отсылки в названии проекта, но ее поймет только тот кто в теме)
То есть с виду это обычная галерея для картинок.
Какое понятие в джаве тордественно понятию "ничего"? Как вернуть из метода ничего?
Ну кстати есть же Void. Его нельзя инстанцировать, только разве что нуллом, лол.
Вот можно возвращать ссылку на нулл типа Void.
Вы чем занимаетесь?
1. Мне понравились языки со статической типизацией больше чем, с динамической.
2. Меня заинтересовал бекенд намного сильнее, чем фронтенд.
3. У джава-спринг было много вакансий и хороший коэффициент вакансии/резюме на хх.ру.
>но он может этот объект не найти или не смочь создать
Ну то есть тут есть две опции: либо объект есть, либо нет. Хуй знает даже. Вот бы был в джаве тип для опциональных объектов.
Тем, что это лишняя сущность. Это контринтуитивно и добавляет бойлерплейт код.
Майнкрафт
Добавлю, что нулл тоже не особо интуитивен, самое правильное решение - эксепшен. Однако, эксепшены, хоть и максимально интутивны, имеют следующие недостатки:
- Непозволительно руинят перформанс
- Добавляют бойлерплейт код
- Делают код некрасивым лапшеподобным
- Усложняют процесс создания декларативных API (null легче спрятать за декларативщиной и забыть о его существовании)
Как аналог эксепшенов назову паттерн матчинг вместе с силед интерфейсами из жабы 19. Производительность херится уже меньше, но зато точно также 100%-но интуитивно и расширяемо, больше располагает к декларации кода.
>>самое правильное решение - эксепшен
Запрашиваешь сущность - получаешь эксепшен. Теперь вместо разворачивания опшионала надо трай-кетч писать на каждый пук.
Я же говорю, проблема этого в бойлерплейте.
Реактивщина нужна только там, где реально много блокирующего IO. Обычно хватает создать пул тредов побольше (опционально поднять несколько инстансов приложухи), каждый запрос будет выполняться в отдельном треде, а при блокировке треда системный планировщик тупо переключит контекст на другой тред, пока у заблокированного не отработает IO, чтобы ядро не простаивало. Тот же асинк, но средствами ОС, разве что системные треды более прожорливые и при нагрузках требуют пристально следить за их количеством.
Звучит как васянский костыльный пиздец. В любом приличном сервисе, где возможны тыщу запросов в момент времени на взять сохранить нужна асинхронщина. Но зачем делать каждый метод, обрабатывающий запрос, асинкнутым, если есть реактивщина? Нахуй эти костыли хуячить я так и не понял, если уже все готово, цивильно, по-европейски.
Каков вообще процент реактивщины в новых проектах в тырпрайзе?
>лишняя сущность
>контринтуитивно
>добавляет бойлерплейт код
Все три пункта - вкусовщина. Еще про таяние ледников от лишних тактов пожалуйся.
Сразу инб4 вангую записывание всех несогласных в опшианальники. Юзайте нуллы на здоровье, только не надо тут выдумывать всякую чушь, прикрытую модными словами, чтобы изобразить какое-то преимущество у святыни твоей секты там, где его нет.
Любовь с 1 взгляда.
В вакансии на мою текущую позицию тоже вебфлакс не упоминался. Уже на собесе мне предложили на выбор 2 стула - реактивщина с вефлаксом или бигдата с хадупом.
> if (value instanceof String valueAsString) { ... }
Что это за уебищный сахар для инстансофа, нельзя было незаметно создать внутри компилятора объявление переменной, а в коде если идёт обращение внутри блока где точно знаем что это стринг просто считать что это стринг, ведь это и так понятно, как в случае с еффектив файнал, компилятору же хватает мозгов?
Анончики, а ещё, я тут недавно только про Java 11 слышал, а тут теперь уже 17! Они решили каждый день новую версию выкатывать?
Что-то прям попахивает каким-то си плюс плюсом, где наваливают всего и как попало в язык.
> Что это за уебищный сахар для инстансофа, нельзя было незаметно создать внутри компилятора объявление переменной, а в коде если идёт обращение внутри блока где точно знаем что это стринг просто считать что это стринг, ведь это и так понятно, как в случае с еффектив файнал, компилятору же хватает мозгов?
Можно было, просто не запилили. Вот в котлине подобное есть, может и в жабу лет через 10 завезут, хотя вряд ли.
> Анончики, а ещё, я тут недавно только про Java 11 слышал, а тут теперь уже 17! Они решили каждый день новую версию выкатывать?
> Что-то прям попахивает каким-то си плюс плюсом, где наваливают всего и как попало в язык.
Версии поднимают быстро, но фич добавляют мало. Много фич касается не синтаксиса, а кишок JVM.
Сам-то как думаешь, почему сделали именно так, а не как в котлине?
нет еблан
>>про Java 11 слышал, а тут теперь уже 17!
Погнались за модой с релизом новой версии каждые полгода. Но за полгода нихуя не успеешь, поэтому вместо больших фич стали выкатывать сахарные микрофичи.
За 6 версий нихуя не изменилось. Лум хорошо если в 23 выйдет, вальхала вообще хуй знает когда.
похую
в цикле
Встроенной нет, надо писать фильтр, пишется несложно.
> Вообще на работе в реальных проектах используют какой способ аутентификации?
Используют ВСЕ способы, от JWT до негуглящихся проприетарных IBM-овских решений.
Спасибо. Реализаций много находил, но они почти все через WebSecurityConfigurerAdapter, а он вроде как deprecated. Попробую переделать без него. Просто вот тут https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter в комментариях один хуеплет написал, что есть built in JWT в spring security аж с 2017 года. А я в документации ничего найти не могу. По JWT находит только OAuth2 JWT. Может это он про него?
Какого хуя методы toString Equals Clone HashCode находятся в Object, а не в интерфейсах?
Нет, я скуфидон обыкновенный.
А про wait() / notifyAll() тоже скажешь что это естественное свойство любого объекта?
toString Equals Clone HashCode оказались в объекте в том числе потому, что это свойства объекта. Про wait() / notifyAll() не могу дать однозначного ответа.
Это вопрос идеологии.
Как миниумум про hashCode() можно сказать что это не свойство объекта, а свойство контейнера которому этот хэш зачем-то нужен.
Удалите пост, анулируйте
>За 6 версий нихуя не изменилось
95% разрабов джавы надо просто уволить нахуй за андерперформ и заменить нормальными кодерами. Тогда лум за недельку сделают.
Правильно, но вот СтрингКонвертейбл не нужен, пусть оно будет как магия, чтобы сохранять возможность делать sout("debug value = "+object);
Нужна дефолтная реализация. Интерфейсы в то время так не умели.
Потому, что если они в Object, то это лучше, чем интерфейсы.
Это значит, что любой объект их реализует, без каких либо исключений.
Вдумайся в это как следует.
а зачем их всем реализовывать?
зачем мне нужен метод Equals который сравнивает с обьектом, вместо того чтобы сравнивать со своим типом
Ну вот например есть у тебя тип Квадрат и тип Прямоугольник. Иногда прямоугольник и квадрат могут быть равны а иногда нет.
Если я захочу сравнивать их, то скорее всего за этим будет другая логика и логично будет вынести это в отдельны метод, ане в Equals
Либо реализовывать Equalable<Self> Equalable<Square>
Ну так делай по-своему, выноси и т.п., тебе никто не запрещает.
Правда, не совсем понятно, зачем в отдельный метод, и почему бы потом не вызывать этот отдельный метод из equals(). Или тебе просто слово equals() не нравится?
Кстати, помни, что такие вещи должны быть хоть как-то оправданы, и не должны быть похожи на изобретение велосипеда.
Также, полезно помнить equals() и hashCode() используются в HashMap и т.п. объектах и методах стандартной библиотеки, и должны реализовываться всеми объектами. И это, кстати, может дать нехилый профит и для твоих кастомных объектов, для которых ты, скорее всего, будешь использовать стандартные структуры данных.
В общем, я же сказал - вдумайся в это как следует.
toStringable
Ты удивишься, но StringConvertable и Serializable - это таки немножко разные вещи.
StringConvertable - это в свифте у эплоблядей, погугли.
Принципы - нет. Твой детектор нарушения этих принципов - да.
Куча людей использует эти "лишние сущности" и ничего, как-то живут, код работает. А значит, либо принцип бесполезный, либо ты его пытаешься натянуть на глобус, где от него нет толка. И что-то мне подсказывает, что с принципом все ок.
Падажжи, если кто-то назвал неправильно где-то там, то я должен это смиренно принять и называть так же? А как же тот факт, что я личность нахуй и я так считаю верным?
Ну и отдельный хохотач, конечно, тот факт, что узнав про эти принципы, ты их начал применять не к каким-то сущностям из бизнес-модели, а к сраному опшионалу из стандартной либы.
Тут ещё полезно понимать, что сериализация - она не всегда в строку.
Хотя, миллениалам в это может быть трудно поверить, лол.
> если кто-то назвал неправильно где-то там, то я должен это смиренно принять и называть так же?
Да.
> А как же тот факт, что я личность нахуй
Ты не личность, а винтик в системе. Чтобы стать личностью, ты должен как минимум создать свой язык программирования, причём не в стол, а успешный.
Я знаю, но в джаве таких кейсов нет. В джаве сериализация - всегда в строку. У кого не в строку, тот пускай и дрочится с названиями.
Не угадал, я уже личность, а вот ты нет, потому что ты по своим же критериям не прошёл а мне по твоим проходить не нужно.
ObjectOutputStream
Не надо так крепко держать меня в курсе касательно прохождения твоих манякритериев.
А когда речь шла про выбор языка?
Не слушай долбоебов, защищающих этот пиздец. Это чето сродни сонибойству. Вроде бы давно все сошлись на том, что делать эту троицу частью контракта самого базового класса было ошибкой, что не для всех классов констрейны equalsа применимы, из-за чего словить мемори лик в хешмапе из-за неправильного типа ключа --- плевое дело, что хешы и логика равенства для одного и того же объекта могут считаться по разному взависимости от контекста употребления (привет, ОРМы). В языках поновее такой хуйни уже давно не практикуется. Но все равно находятся упоротые личности, защищающие это.
Правильный ответ здесь только один --- так вышло. Когда то давным давно они были частью контракта. А сейчас их не выпилить не сломав всем обратную совместимость. А жаль. Было бы клево их дропнуть.
2. Устраиваюсь за копейки тестировать хуйню
3. Параллельно изучаю джаву
4. Пытаюсь применить знания на практике и ищу работу/стажировку по джаве
Как вам план? Изначально была мысль сократить все до трех пунктов, но боюсь, что на обычной работе я буду очень медленно продвигаться.
Посмотри сколько вакансий тестировщиков и сколько спринг-конфигураторов. Тестировщики при сокращениях идут на мороз первыми.
Это понятно, просто тестирование как трамплин рассматриваю и более или менее релевантный опыт. Неизвестно сколько времени у меня уйдет на прямое и целенаправленное вкатывание.
Если это совсем говно-тестер-ручник, для вката в которого не нужно вообще ничего, то с чего бы там был какой то релевантный опыт для джависта?
А так был знакомый тестер-автоматизатор с большим опытом из большой галеры. Ну и вот вкат в спринг у него совсем немало времени занял.
> тестирование как трамплин рассматриваю
Нет, тестирование - это путь в один конец. Примерно как 1С.
>Примерно как 1С
Если под конечной точкой подразумевается любой язык на планете, то да, это путь в один конец
мимо гофер год стажа в 1с
Хуйня. Из всех экс-тестировщиков, даже мануальных, на моей памяти 10летнего стажа выходили весьма годные девелоперы. С их тестерским опытом они лажали статистически реже прочих. "Путь в один конец" --- скорее всего стереотип каких нибудь снобов-анальников.
>мимо гофер год стажа в 1с
Теперь я понял, кто это в го-треде не стерпел, лол.
Кстати, ты в 1С после го пошёл или до?
Сейчас могу сделать рест на спринг буте, прикрутить ликвибэйз, раздать пермишены, но пока еще не разбирался с jwt и oauth2, могу залить все это в докер самым дефолтным способом
Да то же, что и до февраля требовали в вакансиях, но шансов меньше, соответственно, дрочить всё надо тщательнее. Больше не побрезговать позициями с легаси или требованием знать фронтенд, а также таки придётся выучить алгоритмы/структуры данных. Сейчас примерно как в начале 10-х годов, когда ещё не все пизданулись с вкатом в айти.
Сбер большой, у всех команд разные требования, единого стандарта нет. В большинстве случаев хватит спринга/sql ну и мочь объяснить, почему у пузырьковой сортировки O(n^2).
Нет, ну ты же сам пишешь, что шансов сейчас меньше, значит, чтобы выравнять их - нужно выглядеть более сильным кандидатом на фоне других вкатышей. Вот мне и интересно, с каким стеком технологий/умений у меня бы точно не возникло никаких проблем
Ну я и говорю, что стек тот же, но знать его надо лучше. Ты и так выглядишь более сильным кандидатом, судя по упоминанию liquibase и jwt, большинство вкатышей слыхом не слыхали про миграции и авторизацию не через традиционные сессии.
Это хорошо.
А кроме 1С у тебя какой-то опыт разработки был?
Не обязательно за деньги, возможно, что-то для себя?
>Сейчас примерно как в начале 10-х годов, когда ещё не все пизданулись с вкатом в айти.
С чем это связано, по твоему?
Кризис на российском рынке IT, вызванный всем известными событиями. Напрямую российского энтерпрайза это не коснулось, т.к. это не аутсорс, а собственные проекты, но из-за ухода иностранных вендоров и вынужденного закрытия побочных проектов не связанных с основным бизнесом, многим пришлось сильно урезать бюджеты, как следствие, закрыть много вакансий и снизить планы по денежной мотивации работников. Хз, это одна из причин, я не дохуя аналитик рынка, вот в МВП-треде, наверное, уже обсосали все возможные варианты. Впрочем, в других отраслях всё ещё хуже, так что вкатыши в айти пока не сильно задумываются о том, чтобы выбрать что-то ещё, и, действительно, это не совсем 10-е годы, ситуация несколько иная.
Я вот этого не понимаю, все же ноют про отсутствие айтишников, были новости, что хотят со школьного возраста начинать вкатывать, ввести льготы на обучение. Сейчас уже успели сделать ипотеку и отсрочку как минимум из того, что я знаю. И вроде бы все говорит о том, что с вакансиями все должно быть более чем в порядке, но нихуя. Конечно можно сказать, что требуются именно ВЫСОКОКВАЛИФИЦИРОВАННЫЕ спецы, но они не появятся из ниоткуда, возьмите хороших вкатышей и через год-два они как раз станут такими спецами, неужели это не очевидно.
>требуются именно ВЫСОКОКВАЛИФИЦИРОВАННЫЕ спецы, но они не появятся из ниоткуда, возьмите хороших вкатышей и через год-два они как раз станут такими спецами
не станут
Сейчас переизбыток программистов на рынке. Зачем учить каких-то вкатышей, когда в очередь стоят спецы с 3 годами опыта?
Так зачем тогда они ноют про дефицит? Пускают пыль в глаза обычных челов, которые еще не определились и при этом только усложняют жизнь тем, кто уже почти вкатился из-за обилия резюме выпускников всяких курснейм, на которые сейчас спрос поднялся из-за кукареканий гос сми про дефицит.
Станут сто проц, не хорошими кадрами в общем, а именно неплохими разрабами конкретно на том проекте, в котором они весь год варились.
Да и не пизди, никто с 3 годами опыта не сидит в очереди, разве что они все три года сидели на каком-то суперуебищном проекте, параллельно ничего не изучая.
Ты пишешь про каких-то ебырей-программистов, которые могут практически на любой стек залететь и сходу делать чет полезное, а я говорю про конкретный стек и конкретный проект, который за год вполне можно освоить и приносить немалую пользу.
Ноют же эксперты и менеджерки. Им ныть выгодно. Потому что им выгоден найм нового кодерского мяса, потому что они с этого получают комиссию/откат. Про госсубсидии и курсы говорить вообще смешно. Там цель только бабок на бюджете и лохах наварить.
И айтишка это еще хуита. Ноют и про отсутствие инженеров и врачей. Типа нужны еба-констукторы для роскосмоса с зп молодого спеца - 20 тыр.
Зачем конторы сидят на старой жаве, если можно сидеть на новой?
Не работает на новой, а кабану это не нравится.
Новая заточена под облачное применение.
Вне этого она просто не имеет смысла, изменения в языке незначительны.
И это часть процесса выдавливания кастомеров в облака, в том числе оракловские.
А вот хуй им - говорим мы, ветераны in-house джава-девелопмента.
Пускай сами свои облака сосут с проглотом.
Где такие вещества достал?
>сидели на каком-то суперуебищном проекте, параллельно ничего не изучая
Это и есть типичный проект в энтерпрайзе. Найти что-то хорошее стоит большого труда.
>>56544
>конкретный стек и конкретный проект
А зачем такие нужны? Проекты энтерпрайза больше напоминают гигантский распил бабла. Проект живет несколько лет, потом его хоронят и начинают новый. Вкатунов тогда на улицу придется выбросить.
>>56520
>требуются именно ВЫСОКОКВАЛИФИЦИРОВАННЫЕ спецы
Здесь имеется в виду, что нужны ломовые лошади с большим опытом, которые за бесплатно будут работать по 16 часов в сутках.
>>56534
>зачем тогда они ноют про дефицит
Это просто реклама айти курсов, забей.
Меня интересует вопрос: почему wasm используется, а java-апплеты ушли из поддержки браузерами?
Где-то читал, что java-апплеты опасны тем, что это какая-то левая программа, которая работает на компьютере, однако такое можно сказать и про js, и про wasm
>>более или менее релевантный опыт
Из тестера(ручника) ты скорее аналитиком станешь, чем программистом. Автотестер тоже очень далек, он пишет на уровне стажера на специфических фреймворках.
Если тебе похуй куда лишь бы в айти - можешь попробовать, если хочешь джавистом стать - не трать время.
Разработка?
нахуй
Wasm в браузерах из коробки и не умеет нихуя, кроме вычислений, даже доступа к DOM нет. А апплеты требуют ставить левый плагин и имеют кучу доступов к ресурсам.
Благодарю за ответ.
>кроме вычислений, даже доступа к DOM нет
Если нет такого доступа, то как вывести результат вычисления?
Есть ли хоть какая-либо толковая документация по данному вопросу?
Через прослойку на JS, её вызывать можно. Работает медленнее, чем вызывать напрямую из JS.
https://developer.mozilla.org/en-US/docs/WebAssembly
>ближайшее направление к джаве какое будет
Разработка бекенда на Kotlin/Scala/C#/Go/C++/Node.js
Нет.
И второй вопрос, который очень мучает - какова вероятность на реальных проектах встретиться с шаблонизаторами типа таймлифа и пр? Нужно ли их дрочить, знать?
> Не сохраняются ведь корзины каждый раз в бд
Чому нет?
Вот например рестартанул ты сервер, у всех корзина должна обнулиться что ли?
Ну бля, это же очень дорого, нет? Допустим, у моего сервиса дохуллион пользователей, допустим, я сделал какой-нибудь алиэкспресс на спринге. И че, мне миллион корзин каждый момент времени сохранять? Это же пиздец, каждую секунду запросы к БД и дохуилион сохранений? В реальный проектах так делают?)
Ну хер знает как там делают алиэкспресс,
но мне кажется навар с одного успешно проданного дилдака
с лихвой покрывает расходы на сто других дилдаков которые
просто добавились в корзину и лежат в базе.
Напиши сначала сервис, который может обработать лям запросов в секунду. В процессе все тупые вопросы отпадут.
Чтобы ты мог использовать примитивы и коробочные значения в обычных арифметических и булевых выражениях вперемешку, а также присваивать значения этих выражений как в коробочную переменную, так и в примитивную
Это костыль без которого в яве нельзя например в ArrayList складывать int. String можно а int нельзя. Только c конвертацией в Integer.
Такое ясен хуй бывает, но никто не гарантирует,что это будет твой случай. Если ты не тупой, есть время, желание и жопа у тебя резиновая, то вкатишся. Но как минимум вопрос у тебя уже тупой
Да ты сука, ясен хуй, что такой не напишу, это была метафора, душнила. Тем не менее вопрос о сохранении корзины в БД не раскрыт
Боксинг чтобы бить ебла, про анбоксинг ничего не слышал.
Так куки - это дело фронта, реакта или кого там, у меня рестфул хуита, меня че там на стороне клиента ебать не должно
Что такое коробочные значения?
Предположу, что это костыль со стародавних времен, дабы иметь баланс между производительностью арифметики и консистентностью языка. С одной стороны, все объектные типы в джаве --- ссылочные и наследники от java.util.Object, что на самом деле удобно для разработчика, и все джавовое ООП сосредоточено вокруг этого факта. С другой стороны, все примитивные типы --- не-ссылочные и не-объекты, что удобно для арифметики, но несовместимо со всем остальным. И чтобы как то работать с примитивами как с объектами там где это нужно (в коллекциях, например), есть неявное приведение примитивов к объектам (боксинг) и обратно (анбоксинг): int оборачивается в java.lang.Integer с помощью вызова статического метода valueOf в том месте, где нужен обьект (вызов добавляет компилятор, его можно увидеть прямо в байткоде, если чекнуть через javap), и наоборот.
На самом деле это все канеш костыль и говно ебаное, которое ненавидят как джава-хейтеры, так и сами джависты, но так сложилось. Языки поновее (типа котлина) не делают таких явных для разраба различий между примитивами и не-примитивами.
Чем тебе редис под корзину не устраивает? Его и персистить можно, конечно персистится он хуевато, но большая часть данных после ребута сервиса и ребута редиса будут на месте. И реплицируется хорошо и ttl нормально работает.
И как в новых языках работают примитивы? Они тоже наследуются от корневого объекта? А лишняя для примитивов мишура, типа методов и ссылок?
В новых языках нет объектов.
В новых языках как правило более чоткая и более отвязанная от рантайма модель типов. В них нет нужды девелоперу различать примитивы от не-примитивов, там даже понятия такого явно не выделяется --- "примитив". Просто есть разные типы данных и сабтайпинг-отношения между ними, все. За девелопера все что нужно соптимизирует компилятор.
И в чем отличие? Ну не обджект корневой, а эни.
>>типа таймлифа и пр? Нужно ли их дрочить, знать?
Их для почты только используют, фронт на реакте/ангуляре. Учить отдельно не надо, если что на проекте изучишь в рамках задачи.
>>какова вероятность на реальных проектах встретиться с шаблонизаторами
Но вообще бывают помойные легаси с JSP/JSTL - не рекомендую такие вакансии, там шаблонизатор меньшее что тебя будет беспокоить.
>бывают помойные легаси с JSP/JSTL - не рекомендую такие вакансии, там шаблонизатор меньшее что тебя будет беспокоить
Буквально недавно каким-то чудом удалось вкатиться джуном на помойную галеру с таким проектом. Посадили на легаси проект с 3 спрингом, xml конфигами и jsp, сказали смотреть логи и править баги.
Какие подводные? Через сколько нужно сваливать с этого давно затонвушего корабля? К слову, на хх.ру по запросу jsp всего около 50 вакух на всю москву выдается. Я думал такого говна побольше будет.
Да, на жабе пишут дохуя новых проектов, но это энтерпрайз, никаких интернет-магазинов и личных кабинетов.
Возможно, это тупой вопрос, но можешь объяснить, что конкретно ты подразумеваешь под тырпрайзом? Почему личного кабинета не может относиться к тырпрайзу и к какой категории тогда интернет-магазины относятся?
Пока что 0, работаю с конца прошлой недели. На поддержке этого говна всего 2 человека, один какой-то скуфоидный дед, не особо общительный, но вроде шарящий что происходит, а другой собственно я. Пока что даже проект не смог запустить у себя)))
>>57929
Личных кабинетов нет в энтерпрайзе? Что тогда вместо них?
>>57924
Ну вот конкретно мое легаси где-то из 2012-2014 года. Все как полагается для тех времен, монолит, варники, xml конфиги, фронтенд на жабе с jsp. Наверное если поискать, то и более старые проекты можно найти, на каком-нибудь java ee 6 без спринга с аппликейшен сервером по типу вебсферы или glassfish java 2010 edition
А так наверняка где-то и новые проекты есть, просто в энтерпрайзе нельзя просто взять и выбросить то, во что вложили охулиарды бабла 10-15 лет назад, приходится поддерживать что дали и умолять руководство разрешить и выделить бабло начать переход на современный спринг и микросервисы.
>современный спринг и микросервисы.
С чего ты взял, что микросервисы это всегда хорошо?
Это серьёзное усложнение, и оно должно оправдано.
И вот именно в энтерпрайзе (внутренние информационные системы компаний) это как раз оправданно меньше всего.
> И вот именно в энтерпрайзе (внутренние информационные системы компаний) это как раз оправданно меньше всего.
Аргументы?
Не знаю, я вкатун вчерашний.
Но по идее должно быть легче поддерживать отдельный микросервис, чем лапшу в монолите. Хотя хороший монолит наверное гораздо лучше среднестатистического микросервиса будет. Микросервисам нужно общаться между собой, что усложняет понимание всего происходящего.
Отдельный микросервис может и легче, а вот спланировать архитектуру микросервисную, да так, чтоб не жидчайше не дать в штаны - несколько сложнее
Как уже правильно заметил анон (>>57954) - нет требований по масштабированию. Количество пользователей относительно невелико, и мало меняется со временем.
При этом логика работы может быть очень сложной.
А микросервисы - это именно про масштабирование.
И про облачный деплоймент.
Пример - Озон-Амазон и прочее подобное.
А почему в монолите обязательно "лапша"?
Чего ради?
Монолит - это, прежде всего, одна БД, с которой работают разные части системы. И простота координации, соответственно. Откат транзакции - это просто откат транзакции, а не сага с хореографией, лол.
Микросервисы - это серьёзный оверхед при управлении транзакциями (пиздец просто). И вообще оверхед, связанный с координацией отдельных сервисов.
Если читаешь по-английски - почитай хорошую книжку про микросервисы, их есть - на scanlibs.com
Например Building Microservices, 2-е издание.
Или Microservices Patterns (examples in Java).
Или что-нибудь ещё.
Только имей в виду, что это не очень лёгкое чтение.
Слово "энтерпрайз" - означает "предприятие".
Я под этим словом понимаю (прежде всего) внутренние информационные системы предприятий и что-то подобное.
Если кто-то понимает под "энтерпрайзом" всё, что не игры-социалки-итд - это не ко мне.
Самое ёмкое определения энтерпрайза: энтерпрайз - это когда пользователи называются сотрудниками. То есть любой софт, которой пишут для внутреннего использования в предприятии. Самый понятый пример - 1С, энтерпрайз в чистом виде, кому как не сотрудникам работать с документооборотом и бухгалтерией. Просто в жабашарпах решения более масштабные, где 1С по возможностям и нагрузкам не хватает. Во всяких амазонах кроме основных магазинов, безусловно, есть и внутренний софт для сотрудников, это тоже энтерпрайз, но к самим магазинам это не относится, это просто фронтальная система для внутренних энтерпрайзных сервисов.
>Самое ёмкое определения энтерпрайза: энтерпрайз - это когда пользователи называются сотрудниками.
Это ты взял из этого же треда, или вообще сам придумал.
>Озон-Амазон
По-твоему это не тырпрайз? Именно для сотрудников у них весьма и весьма нагруженные и замасштабированные решения пишутся.
> Это ты взял из этого же треда, или вообще сам придумал.
Это я и писал то сообщение.
> >Озон-Амазон
> По-твоему это не тырпрайз? Именно для сотрудников у них весьма и весьма нагруженные и замасштабированные решения пишутся.
Тырпрайз, конечно.
> мвп тред
Клоака жирничей и шизиков, ни одного адекватного анона, филиал /b/. Я его скрыл нахуй ещё тогда, когда он не был закреплённым.
>По-твоему это не тырпрайз?
Ты надоел уже, клоун.
Это e-commerce.
А есть ещё финтех.
И много чего другого.
И всё это очень разные вещи.
И везде java.
>замасштабированные
Это по-каковски?
Ты точно понимаешь, что значит слово "масштабирование"?
И в каком смысле это относится к микросервисам?
И в чём разница с "высоконагруженным"?
Кстати, белые люди говорят не "высоконагруженное" а "высокопроизводительное" (high performance).
Т.е. highload - это псевдо-английская калька с русского, используемая только в русскоязычном пространстве.
Можешь на досуге подумать, почему так, и в чём разница.
>И всё это очень разные вещи.
И все это тырпрайз.
>Кстати, белые люди говорят не "высоконагруженное" а "высокопроизводительное" (high performance).
Т.е. highload - это псевдо-английская калька с русского, используемая только в русскоязычном пространстве.
Можешь на досуге подумать, почему так, и в чём разница.
Ебать ты чушь высрал, петушара.
> Т.е. highload - это псевдо-английская калька с русского, используемая только в русскоязычном пространстве.
Двачую, несколько раз попадались блоги на инглише, и по использованию слова highload сразу становится понятно, что писали русские.
Ну например. Если корзину хранить на сервере ты можешь рассылать напоминалки тем кто положил что-то в корзину неделю назад но еще не купил. Или показывать предупреждение что такого цвета труселей осталось 3 штуки и 2 уже у кого-то в корзине.
В самых простых случаях если продаешь например подписку на порн может и на куках прокатит.
>>58092
Ну мы вот пишем типичный тырпрайз на микросервисах и 11/17 жабе. Как раз переписываем уже имеющийся сервис на 1с, потому что 1с негибкий и медленный. Причем в старую версию никто не смотрит, работаем по тз.
Основной смысл, для нас-разрабов во всяком случае - в раздельном деплое. Изначально вообще две галеры разрабатывали разные микросервисы отдельно друг от друга, но с общей инфраструктурой.
Уже намолотили 15 микросервисов. И еще 2 новых вырисовываются в течении пары месяцев. Сообщения между микросервисами - эвент в кафку и потом консьюмер забирает нужные ему данные по ресту.
До распределенных транзакций мы еще не дошли правда. Тут даже внутри моего сервиса еще не везде, где нужны транзакции есть транзакции из-за особенности nosql-базы, где есть acid, но реализовано это криво.
Но тут до релиза в прод - хз сколько, но по моим ощущениям - явно не меньше года.
> Кстати, белые люди говорят не "высоконагруженное" а "высокопроизводительное" (high performance).
> Т.е. highload - это псевдо-английская калька с русского, используемая только в русскоязычном пространстве.
> Можешь на досуге подумать, почему так, и в чём разница.
На досуге подумаю над причинами, почему меня это должно ебать
Раздельный деплой можно и на монолите делать, при желании.
Если смысл именно в этом, и ни в чём другом.
А можешь тезисно объяснить как раздельно деплоить монолит? Я до этого работал на легасном монолите и там с деплоем были большие траблы. Даже запустить локально было непросто.
От сервера приложений зависит и от самого монолита.
Если сервер может перекомпилировать и перезагружать классы на лету, то вот так и делать - просто грузить нужные классы.
Но, это всё нестандартно, естественно.
Если не надо налету, а можно рестартовать (а иногда это обязательно) - то надо мутить свой способ деплоймента, чтобы всё не было в 1 war, например. Короче - никакой магии, просто это очень зависит от системы.
Именно.
Ну тогда и бд сойдёт.
Для гугла обязательно создавать надо облако и регаться с забугорной картой, я так понял.
Спроси у датасаентистов в треде про нейронки, там по-любому кому-то надо было для NLP.
А разве хедер у каждого запроса не свой? Мне подставлять токен туда постоянно? Чет не до конца догоняю, как можно хранить что-то в хедере
Хоть куки, хоть Authorization, хоть кастомный хедер, хоть вообще в теле в зависимости от задачи. Везде лепят как хотят.
>>58547
Крч положил я значит свой токен в куки, тк в интернетике пишут, что это самое лучшее решение, но оказалось, что если я хочу дергать его из хедера, то надо писать какой-то js скрипт что я конечно же делать не умею, который будет доставать токен из куков и класть в хедер. Теперь вот думаю, как мне сделать так, чтобы этот скрипт при любом запросе срабатывал
Russia начинается с буквы R.
Например есть строка:
Creating local person user 'test' with details ('','','test','test','test@local')
Как мне одним выражением вытащить всё кроме того что в кавычках и скобках?
То есть должно получиться:
Creating local person user with details
Дожили блядь, ямайка у него лучшая страна.
Jordan
Уже полгода наверное.
Пиши в новый тред.
Иногда удобнее через консоль собрать, но это редко нужно. Поставь, пусть будет, что ты теряешь то?
Через консоль ещё быстрее билдить.
Добавь идеевский мавен в path и все.
Ок, сяб.
Зависит от дроча твоего лично или лида на все это. Можешь вообще обмазать все это лобком и не ебать мозги.
Олсо, хули ты делаешь в мертвом треде?
>>Если напрямую напишешь object.field, это же косяк?
Да, гет/сет корпоративный стандарт. Как и ломбок.
тогда в энтерпрайз тебе путь закрыт, пиши дальше моды на майнкрафт
Вот написать я RestController. Там есть PostMapping-метод, который принимает Json. Отвечает "ок" если все норм
Как на него написать юнит тесты с помощью Mockito & Junit5?
Я чет концепцию нихуя не понимаю что мне надо мокать..
Есть представление ток что я ответ как-то должен проверить ассертом "ок" он или нет.
Мб какой-то подробный гайд есть для тупых?
>>RestController
>>Как на него написать юнит тесты
через MockMvc или WebClient пишешь рест запрос, читаешь статус код, сверяешь тело с тем что должно быть
>>что мне надо мокать..
сервисы которые вызываются в контролере, а сам рест запрос за тебя уже сымитирует MockMvc
>>Мб какой-то подробный гайд есть
https://reflectoring.io/spring-boot-web-controller-test/
>>для тупых?
https://www.baeldung.com/spring-boot-testing
пункт 8
Во-первых, спасибо тебе за ответ, Анон!
Гайды посмотрю и вернусь с тупыми дополнительными вопросами
Заинжектил MockMvc
пытаюсь вызвать у mvc.perform(get
а он "get" не распознает.
Мне что-то испортить еще надо отдельно?
Да, наверное он. В примерах очень любят забыть упомянуть про статик импорты, а потом гадай откуда этот метод.
>а потом гадай откуда этот метод.
Во-во.. для кого они эти гайды пишут? Для гениев, которые и так все понимают? А бестолочи вроде меня ноют и страдают потом
Накатал я тест по образцу, запустил тест, а он мне высыпал:
"java.lang.illegalstateexception failed to load applicationcontext"
Перекатывайся из бестолочей в гении значит.
Обычно к гайдам прилагаются сорцы на гитлабе, если совсем сложно - ищи в них. Ну или просто загляни в сигнатуру метода, что он там ожидает параметром.
Чел, я конечно рад помочь советом, но дебажить мне влом тем более без кода и стектрейса только методом телепатии.
Какую-то волшебную аннотацию надо поставить наверное.
Если ставишь @SpringBootTest он контекст поднимает, возможно с ним что то не так.
Могу только послать тебя в гугл читать что то вроде
https://www.jvt.me/posts/2022/03/10/spring-failed-applicationcontext/
https://www.youtube.com/watch?v=7mZqJShu_3c
Спасибо, буду изучать
Вопрос такой: чтобы мне протестировать какой-то метод контроллера.. мне нужно приложение запускать сначала, а потом врубать тест?
Или я просто тест врубаю и он эндпоинт дергает.. я крч концептуально не понимаю тут
Это копия, сохраненная 7 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.