Программирование — это не столько про анальное крудошлёпство, сколько про стиль мышления. Высокоуровневая абстракция, поиск сходных черт, оптимизация — всё это высшие интеллектуальные способности, что образуют такой прочный симбиоз с программированием на Java.
Кто-то пишет на котлине на спринге? Недавно нужно было прочитать код с гитхаба, а там котлин. И не понял многие моменты сахара. Also, with, apply всякие. Думаю поучить котлин. А потом можно и в один из сервисов запулить. В чем цимес котлина на спринге? Во многих вакансиях втречаю котлин. Наверно в 20% вакух на спринге указывают кроме джавы котлин. Но на работе никто на котлине не писал.
>>2684237 Тимлид у нас с гошкой играется после работы. Говорит, что с жабы кроме нее на что-то переходить не имеет смысла. Но мы на спринг и жвм сильно завязаны. Гошку даже он не сможет в наши проекты затащить, хотя он умеет разводить менеджеров, что ему нужна всякая хуйня типо noSql-баз. А котлин, если в нем есть толк можно протащить. >>2684241 Мы и так на идею завязаны, это не проблема. Проблема разве что, что ci придется менять под это дело, но оно решаемое. Только вот хочется узнать в чем плюс котла. Ну null-safety слышал, сахар, укорачивающий код - видел. Но в чем прикол - не прочувствовал.
>>2684242 Говно это вообще хуйня от соевых даунов, которые хотят показать, как они сильно готовы лизать очко жидопассу и гуглу, что аж про наличие эксепшенов и дженериков ради барина готовы забыть.
>>2684241 >Он учится один день Проиграл с тебя, чел. На одни корутины и понимание как это устроено под капотом и как писать идиоматичный код уйдет минимум год. И нет, ставить suspend в сигнатуры методов - это не понимать корутины. Вообще заметил, что помойные джавамухи до последнего сидят на своей гнойной жаве и отказываются учить что-то новое. А когда их палками гонят изучать Scala или хотя бы ко-котлин, то у них происходит разрыв шаблона и они срут на котле как на джаве. Даже на реддите был пост как джавадебилов посадили писать на гоулэнге и те и там успели насрать неидиоматичным кодом "как на джаве".
>>2684302 Деформация везде бывает. Есть в команде выпускник, бывший олимпиадник, который хотел на плюсах писать, но не смог устроиться на норм зепку и вкатился в джаву. Есть бывший питонист. Есть несколько бывших 1-сников. У всех их бывший стек оставил отпечаток. И они пишут/писали на жабе, как на своих предыдущих языках.
>>2684302 Вспомнился спригодебил, который пару десятков тредов назад затирал, что на изучение спринга уйдут годы. Это не ты ли был? А то по уровню интеллекта похож, раз ты то, что учится за час раскуривал год.
>>2684342 Если говорить о интересующих меня вакухах - более менее современный стек - жава 11/17, микрочелики, кафки, куберы, то наверно даже треть имеют упоминание котлина.
>>2684352 >более менее современный стек - жава 11/17, микрочелики, кафки, куберы Это буквально 1-2% всех вакансий на помойной жабе. В основном это Java 8, монолит где насрано. Никаких тебе куберов - все деплоится руками на виртуалки. Докеров нет и разворачивают прямо в томкате или джейбоссе варки
>>2684378 Не выдумывай. Я сам на жаба 17 и микрочеликами работаю. И когда устраивался еще тоже половина вакух такая была. Легаси с варками и внешним томкамом это тоже процентов 20. А жаба 8 и старше ну дай бог 40.
>>2684418 Лум не появился по факту. Появление - это выход в лтс + год на впиливание в нужные либы. Лум появится для прикладного разраба в конце 24 года. Причем только для тех, кто быстро переходит на новые версии либ и жабы.
>>2684423 >+ год на впиливание в нужные либы >+ год Ну-ну, попустись! Лет 20-30 - и это ми-ни-мум. В целом, лум ничего не решает. Это попытка догнать C# с его async/await. Но время уже упущено. Помойные разработчики Java только и делают, что тащат всякий сахарок, не забыв при этом обильно полить его говном. Ведь по другому в джава-мире нельзя.
>>2684427 Догнать в чем? Рынок шарпов, как был 20-30% от рынка жабы 15 лет назад, так и остался. Большие конторы сильно и плотно завязаны на жвм. У многих есть своя жвм. У очень многих если собственные хаки опенжвм. Нахуя им на мыло с дотнетовской виртуальной машиной переходить? Ты вот за последний год как попугай про какой-то переход на шарп пишешь. А примеры то есть, кроме ооо залупец на 10 калек?
>>2684429 >А примеры то есть, кроме ооо залупец на 10 калек? Проиграл с блаженного, лол. Тем временем тиньк сворачивает проекты на жабе и растит команду C#. Озон выгнал на мороз всех джавистов и скалистов и пишет онли на гоулэнге и сишарпе.
>>2684436 Ну на гошку иногда имеет смысл поменять, гошка это другая парадигма. А уж замена жявы на шарп это или выдумки или кодовая база на жяве была микрокопическая.
>>2684444 >гошка это другая парадигма. Все так. Гоулэнг - это парадигма скорости разработки, надежности и простоты понимания кодовой базы. Парадигма жабы - это раздутый штат говнокодеров, дерьмовый код, постоянные баги, жор ресурсов и просранные сроки.
>>2684452 Это частично так. Но это обусловлено, что на джаве уже реализовано куча всего. Для почти любого тырпрайз проекта можно найти готовый код, собрать его вместе, сконфигурировать и написать столько бизес-логики поверху сколько тебе надо. И куча багов известна, потому что кодом на жабе пользуются в продакшене и находят баги.
>>2684436 Тем временем тиньк сворачивает проекты на жабе и растит команду C# пруфы? хх тинька. java - 59 вакух, scala - 15, .net - 23, golang - 14. >Озон выгнал на мороз всех джавистов А там было серьезное количество джавистов? В каком году?
Оказывается шарпер-евангелист еще и откровенный пиздобол. Ожидаемо. Потом окажется, что и про сам язык и экосистему он так же врал, что шарповская орм не волшебная пилюля, а такая же залупа, как и орм в других языках. Но в этом разбираться само собой никто не будет и ловит шизика на лжи соответственно тоже. Это реально нужно пописать на шарпах, никто на это время тратить не будет.
Ребятки, везде хвалят шарп, а джава говорят всё. Я вот думаю свичаться в модный молодежный язык, чтоб коболом не провоняться. Шарп и правда выглядит получше, на нем можно писать всё: игры, бэкенд, фронтэнд, десктоп, машин лёрнинг и искусственный интеллект. Прям чудо-язык, от самой продвинутой корпорации в мире. Плюс еще очень быстрый. А джава прям вообще застыла в прошлом.
Как сделать так, что бы при использовании аннотации для метода что-то происходило ? То есть, аннотация должна менять поведение метода. Как это сделать ?
Сап, двач. Мимо PHP макака, работаю в фитнехе и получаю 220к в наномесяц. У меня следующие вопросы:
1) Имеет ли для меня смысл переката в java? Постоянно мучают комплексы неполноценности будто пишу не на настоящем языке. К тому же у нас go в некоторых микропенисах, который как бы намекает что пыха не справляется
2) Возможно ли вкотиться не потеряв в зэпке, или пиздос-пиздос не возьмут перекатчика и только в джуны? Опыта работы с либами нет, разве что делал в spring'е петпроджект как-то.
3) Вы вообще на джаве довольны джавой, мыслей что надо упрыгивать нет?
>>2684599 > 1) Может, тебе ближе Go? > 2) Сложно. Перекатиться на миддла конечно же можно, но с сохранением зепки будет сложнее, хотя тоже возможно. > 3) Доволен только работой на джаве. Для себя на ней вообще ничего не пишу. Поглядываю на плюсы (оч сложно перекатиться) и шарп (меньше работы).
Ну хуй знает, я пробовал го но мне кажется что это немного понадусеровый язык который пытается сделать революцию в мире компьютерного айти с отходом от ООП, а на деле получаются микросервисы.
Причем причина по которой на го пишут микросервисы выглядит примерно так:
1) Большие проекты на го хуйня и ебаный в рот, фреймворков нет.
2) Очень пиздатая и большая стандартная библиотека. У тебя 3.5 зависимости будет в проекте. Мэйнтенетса считай 0.
>>2684599 >Постоянно мучают комплексы неполноценности будто пишу не на настоящем языке.
Так жаба тож неполноценный язык. Единственный полноценный язык - это Си Шарп. На нём можно писать абсолютно всё. В жабе ты ограничен спринг бут бэкендом
>>2684777 Это зависит от того, в какой момент нужно дёргать. Если у тебя Supplier, то ты определяешь, когда происходит supply. Иногда могут появляться ситуации, когда момент поставки может определяться тем, кто получает объект, а не тем, кто отдаёт его.
>>2684779 >>2684780 Блять, наоборот, определяться не тем, кто получает объект (Supplier и вызов .get() в методе, получившем этот Supplier), а тем, кто отдаёт объект.
>>2684769 Нинужна. В жаве функциональной параши ровно столько, чтобы такие деды как я могли в ней разобраться. Хотя даже в ней можно переусложнить до полной нечитаемости. Как делать ревью на языках, где функциональны много я вообще хз.
>>2684939 Это не классическая функциональщина, которую с жиру лепят, кстати. Instructor это вынужденная мера, так как в императивном стиле оригинальная задача в принципе нерешаема.
>>2685322 Книга "Head First Паттерны проектирования" была выпущена в 2004 году и была обновлена в 2020 году. Хотя основные принципы проектирования остаются неизменными, новые технологии и требования рынка могут привести к изменению некоторых паттернов и подходов к проектированию.
Тем не менее, книга "Head First Паттерны проектирования" по-прежнему считается одной из лучших книг по этой теме. Она предлагает уникальный и интерактивный подход к изучению паттернов проектирования, используя практические примеры и головоломки для помощи в понимании теории.
Таким образом, книга "Head First Паттерны проектирования" по-прежнему актуальна и может быть полезной как для начинающих, так и для опытных разработчиков, желающих улучшить свои знания в области проектирования.
>>2685997 Не петушарпер, но это контринтуитивно, так как часть логики совершенно незаметно спрятана в ||. Если заменить на | (зачем-то), то будет нулл пойнтер эксепшон.
>>2685997 >тупо просто и понятно Тупо - да, все остальное хуета. Половина проектов пишет свои StringUtils из-за того, что Браен Гёц занят экспериментами с Sequenced Collections и прочей хуетой. Так блять сложно добавить пару методов в String и Collections? Весь Commons Lang существует только потому, что аффтары JDK не могут добавить пару полезным методов которые нужны в 99% проектов.
>>2686019 Да просто аффтары жабы пытаются сохранить прямую совместимость, т.е. чтобы код на Java 20 после минимальных правок компилировался и запускался на Java 8.
>>2686023 Не-а, они не просто так добавляют в каждую версию всякие приколюхи типа List.of() и stream#toList(). Их убирать максимально больно, да и писать на старой джаве, когда знаешь, что они есть, без них, тоже больно.
>>2686020 Вот только тянуть commons lang ради одного метода не все хотят, многие предпочитают написать сами. В Котлине или Go инстанс метод может работать с null объектом не выкидывая NPE.
Аноны, правильно понимаю, что сейчас без опыта уже не вкатишься? Есть шанс попасть на стажировку в какой-нибудь Яндекс, если ты выпыскник/учащийся тех. вуза, но если нет тебя хуй куда возьмут? Единственный шанс, это нарисовать себе годик опыта и все усилия направить на то чтобы закосить по уже работавшего, правильно ведь? Я прав ведь, аноны, или нет?
Потратил год на обучение, сейчас в расстройстве от рынка вакансий
>>2686245 Да по сути ничем, на самом деле и его можно было бы использовать до этой задачи. Просто я привык всегда решать задачи без костылей (надо сделать X — значит сделаю X), и мне в голову не пришёл WeakHashMap.
>>2686267 Ты жопой то не крути. Выше ты уже признал что его "можно было бы использовать для этой задачи", и что тебе "в голову не пришёл WeakHashMap", что уже в сумме со всем тобой вышесказанным выдает в тебе клоуна-пустобреха. Грош цена после этого твоему мнению, дешевка.
>>2686278 Я сейчас подумал, WeakHashMap на самом деле бы и не подошёл тут, даже если очень сильно захотеть. Здесь важно, чтобы данные сохранялись в хешмапе ровно столько, сколько они валидны (или как можно ближе к этому), а не когда попало очищались.
>>2686279 Ну тыж, клоун, нормально обьяснить суть задачи то не в состоянии, способен только гнать своим языком гнилым на то, в чем сам не сведущ. Говоришь "garbage collector для Map" - тебе дали. А теперь вдруг надо другое - какой то откат игроков который к термину GC отношения имеет - ноль.
>>2686284 Так GC и не откатывает непосредственно. Я задачу решил через Map<Player, CircularFifoQueue<Location>>. GC тут имеет опосредованное отношение, его задача удалять вышедших игроков из этой карты, чтобы не было утечки памяти.
>его задача удалять вышедших игроков из этой карты, чтобы не было утечки памяти.
И че тогда ты выдумываешь? Игрок выходит с карты - перехватываешь событие выхода и дропаешь его с мапы. Все. А если ты такой упертый, что хочешь делегировать чистку этого игрока джавовому GC (хз нахуя - такая постановка задачи априори - говно, но похуй), то все равно неясно хули ты доебался до WeakHashMap, потому что под кейс "удалять тех игроков, что попали под каток GC" WeakHashMap самым лучшим образом из возможных подходит.
Или ты растовый? Ждешь что за тебя все подчистят при выходе из контекста?
>>2686286 >Игрок выходит с карты - перехватываешь событие выхода и дропаешь его с мапы. Недостаточно ООП-шно. Я хочу просто создать карту и чтобы она чистилась сама. >что хочешь делегировать чистку этого игрока джавовому GC Так это ты мне предложил использовать WeakHashMap зачем-то, потому я тебе и кинул пикчу с хлебным троллейбусом.
В прекрасном светлом мире будущего будет две или три конкурирующих среды разработки, все полные функционала, а не платное говно из жопы с багами против notepad++++.
>>2686292 >Недостаточно ООП-шно. Я хочу просто создать карту и чтобы она чистилась сама.
Че у тебя за каша в бошке? При чем тут ООП? Парадигма с наличием/отсутствием GC не связана никак. То что ты рисуешь - твои локальные хотелки, не имеющие никакого отношения ни к ООП, ни к джаве, ни к ее стандартной либе.
>Так это ты мне предложил использовать WeakHashMap зачем-то
Ёб твою мать, кусок ты хлебушка... Ты сам выше (>>2684784) формулировал свою цель как "Garbage collector для Map", дополнив (>>2686257), что "надо чтобы мапа сама очищалась", а теперь я еще и виноват оказался. Короче - обоссал тебя. Учись нормально и связно диалог с людьми вести, клоун.
>>2686305 В смысле причём? Когда ты связываешь глобальный контекст событий и мапу напрямую, это нихуя не по ООП.
>ни к ее стандартной либе Ясен хуй не имеет отношения, ведь того, что я делал, в стандартной либе нет, лол. А стандартная либа должна включать в себя абсолютно всё неспецифичное для конкретного проекта.
>Ты сам выше Я говорил, что мне нужно присоединиться именно к тому общему GC, что объекты без ссылок удаляет? GC разные бывают.
>>2686309 >В смысле причём? Когда ты связываешь глобальный контекст событий и мапу напрямую, это нихуя не по ООП.
Бляяя, пиздец тебе в бошку насрали, я ебал... Хз даже с чего начать обоссывать этот стейтмент бредовый... Это даже не Бугаенко, это какие то совсем уж локальные маняфантазии.
>А стандартная либа должна включать в себя абсолютно всё неспецифичное для конкретного проекта.
А вот хуй те в рот, не должна. Не нравится - пиздуй нахуй. В джаве без тебя хватает проблем с жирностью стдлибы, когда из-за того что надо держать обратную совместимость на косяки предков, приходится держать в апи всякий бред до победного. Из-за стдлибы все-в-одном с десяток лет уже внедряют лум, хотя все могло бы окончиться за релиз, если бы джавовое конкарренси с его Object::wait/notify и прочими хуйнями не было бы частью стдлибы. И новые языки типа Котлина со старта учитывают этот косяк, вынося свои корутины в отдельную зависимость.
>GC разные бывают.
Я не ебу какие у тебя в бошке GC разные бывают. В джавовом рантайме GC работает один на процесс.
>Like most collection classes, this class is not synchronized. A synchronized WeakHashMap may be constructed using the Collections.synchronizedMap method.
>>2686398 Жидбрейнзы ссучились, забей. Щас ответят ченить в духе "мы идентифицировали вас как пользователя из РФ и поэтому ничем не можем вам помочь", и закроют таску. Прецеденты были.
Залетел на первую работу в конце прошлого года и какой же кайф, нихуя не делаю, таски на уровне поменять поля в дтохе, сижу двачик листаю почти весь день, завидуйте, рабы.
В догонку. Для этого кстати и рекомендуется не использовать инжект через сеттер с автовайред. А инжектить в конструктор.
Потому что в тесте ты можешь подсунуть свой экземпляр в конструктор.
Например у тебя есть интерфейс Hui и имплементация HuiImpl. Если ты делаешь конструктор Service(Hui hui) то у себя в тесте ты можешь сделать HuiTestImpl и засунуть его в конструктор. И никаких моков не нужно.
>>2686939 Делой как я. Как только нужно создать новый метод или бин - сразу на него делой тест. Получил задачу. Спроектировал новое дерево классов. Создал интерфейсы бинов, описал их апи. Сразу на интерфейс накидал тесты.
>>2686945 Разные уровни и разные инструменты. Чистый юниттест можно сделать без всяких моков на одном junit/testng Юниттест с методами других классов - добавляем mockito. Нужны интеграции - добавляем wiremock.
>Если ты делаешь конструктор Service(Hui hui) то у себя в тесте ты можешь сделать HuiTestImpl и засунуть его в конструктор. >И никаких моков не нужно.
Видал я такие тесты. Такие тесты - одна из причин почему я не признаю сервисный спрингодизайн, сорян.
Типа, как оно обычно происходит? Имеем какой нибудь сервис-интерфейс, в нем обычно несколько десятков методов. И какой нибудь второй сервис-интерфейс, с имплементацией, зависящей на первый сервис. Надо протестить имплементацию. И вот теперь перед тобой два стула:
- Или сиди по чесному пиши фейковую имплементацию на первый интерфейс и все его несколько десятков методов, как будто тебе больше делать нечего. Причем честный фейк накатать (если честно учитывать важные для тестируемого класса инварианты) - не всегда тривиально и компактно по коду, а логика фейка в свою очередь тестами не покрывается (ну кто же тестит тестовые классы, что за оксюморон, да?), следовательно, является источником багов уже в тестовом коде. Как раз в этом месте у новичков и возникает идея - "а может ну ее, эту писанину? И просто вместо юнитов тестировать сразу интеграционно? Так будет даже честнее, как будто..."
- Или пиши пиздливые фейки, где воруй, убивай, забивай на инварианты, стабь методы, аргументы, лишь бы оно делало вид что работало для тест кейса. Как вариант - вместо фейков юзай моки на мокито. А потом получи на основе этого безобразия нестабильный ломучий тест, который тестит околонихуя, и лежит дополнительным бременем на команде, поддерживающей проект.
Если бы вместо спрингосервисов практиковались компактные компоненты с публичным контрактом не больше одного двух-методов, написать на такой контракт фейк было бы плевым делом. Но в спринге так не принято, в спринге что ни класс - то сервис, а сервис - тупо сборник процедур, с автоварью как аналогом сишного инклюда.
>быдло Хуя пичот. Че подорвался то? Я оскорбил твоего Бога?
>В чем проблема просто моки заинжектить и прописать перед тестами, что им делать в зависимости от ситуации
В том, что моки - просто костыль пиздабольский. Твой сервис оригинально скаплен не на конкретные методы которые ты мочишь в тесте или тест кейсе, а на контракт другого сервиса, который ты инжектишь. И он вправе юзать этот контракт по полной. О чем ты никогда не вспомнишь тащя в тесты моки. Сегодня ты замочил один метод, а завтра импелементация поменяется и дернет другой - тест фейл. Сегодня ты заложил в мок одни ожидания, а завтра сервис на них работать перестанет - тест фейл. Итог - как в сценарии номер 2: ломучий никому не нужный ничего не тестящий парашный тест.
>>2687132 Че лыбишься дурачок? Тест фейл выше - 0один хер не про багу не в твоем приложении, а про багу в твоем говносьюте. Поэтому кабаны вам-дуракам и режут человекочасы на юнит тесты - хули от них толку если они баги в приложении не ищут?
>>2687104 интересная мысль. Т.е. вместо OrderService с 2к+ строками кода делать CreateOrderService, UpdateOrderService, ChangeOrderTimeOrderService с 1-2 методами внутри?
Но тут мало просто побить сервисы на такие микросервисики, нужно по пути еще пересмотреть несколько догм. К примеру, первое с чем ты столкнешься на этом пути - инжектить такие компоненты спрингом станет люто неэффективно и неудобно. Гораздо проще и эффективней их просто композить друг в друга в точках входа (и в тестах), а спринг оставить лишь для того, чтобы он заведовал репозиториями и контроллерами. Для спрингокульта подобные откровения невыносимы, поэтому я не уверен что хочу обсуждать детали. Выше я просто попытался обьяснить, почему юниттестинг имеет тенденцию вырождаться в какую то дичь.
>>2687179 Уже все давно знают, что единственные правильные тесты, это те, в которых ты поднимаешь весь контекст вместе с базой и прикидываешь эндпоинты, остальное нахуй не нужно, только чтобы покрытием повыебываться
>>2687187 Ну кстати претензий к такой позиции у меня вообще ноль, без иронии. Она хотя бы честная.
Типа - "ну не умеем мы писать юнит тесты, и не видим в них смысла - и хуй с ними. Сосредоточим усилия на API или E2E тестах". Деды двадцать лет назад так делали, и все работало - хайрили отдельную QA команду, и та им мейнтейнила какой нить жирный регрессионный сьют. До сих пор много где такое практикуют.
>>2687187 Я вот так и делаю. Пишутся раз в 10 быстрее юнит-хуюнит-мок-тестов, но некоторые недовольны тем, что якобы такая хуйня только для детекта факта бага годна, а местоположение бага не подскажет. Как контрить?
>>2687200 Контри отсутствием логики в утверждении. Если юнит тест способен задетектить баг, до фейла в интеграционных тестах дело бы априори не дошло бы. А если дело дошло до интеграционных/API/E2E тестов, то это уже предполагает что юнит тесты ничего не нашли, а следовательно ничего не подскажут.
>>2687179 > просто композить друг в друга в точках входа не понял. Вот есть OrderController, получается его тоже надо делить на кучу мелких контроллеров. Ты про это?
Контроллер - это и есть набор точек входа. Исполнение запросов начинается и заканчивается там (всякие фильтры-аспекты - не в счет). Его делить особо смысла нет, равно как нет смысла юнит-тестить его в изоляции.
>>2687230 >Звучит так, будто ты из какого то другого культа, раз спринг так ненавидишь.
Я хз к какому культу я принадлежу. Я просто набил много шишек и сделал для себя выводы.
>Ты объяснил почему моки - хуйня, но не объяснил почему моковая имплементация - тоже хуйня.
Моковая имплементация? Ты про что? Кинь цитату где я говорю про моковую имплементацию?
>абзац с иронией про дидов Да не, почему? Вообще без иронии. Я ж сказал - даже по сей день практикуют отдельные QA команды с E2E-сьютом. Эта метода обкатана за десятилетия, проста, понятна всем без исключения, и результативна. Ноу оффенс к дидам.
В самих по себе фейках нет ничего плохого. Просто одно дело когда ты фейкуешь контракт из одного-двух методов, а другое дело - когда методов десять. Чем больше кода ты по своей инициативе пишешь в тестах, тем больше твой тест-сьют будет подвержен человеческому фактору - в фейках же тоже можно лабать баги. Более того, тестовый код тестами не покрывают, это оксюморон. Ему остается только доверять
>И что ты имел ввиду тут, я тож нихуя не понял. Перефразируй, а лучше пример приведи.
>>2687275 >Для крудов полезнее интеграционные. Они и баги найдут надежнее и писать их немногим сложнее. Обратная связь такая же. Мокают только взаимодействие с внешними системами
Думаю что соглашусь. На самом деле спринг обьективно сам по себе хорош для написания крудов. Правда проблема которую я извечно среди джаванов наблюдаю, заключается в том, что у джаванов зачастую всё - круд. А что не круд, то надо подогнать под круд.
>Юнитами покрывают сложную логику, желательно отделенную от колабораторов и выделенные в чистые функции, чтоб мокать ничего не пришлось
Все верно. Но джава - не хаскель. Чистых функций в ней не существует. Максимум что есть - лямбды и стейтлесс-методы. Более того, в джаве не особо принято лабать программы методов функциональной композиции. Наверно поэтому юнит-тесты настолько ситуативны?
>>2687541 Это очень удобный способ создать абстракцию. Правда, профиты от использования полиморфизма прямо пропорциональны сложности его использования для конкретного кейса.
Аноны, когда претендуешь на вакансию, где требуется опыт, какой-нибудь пет-проект нужно показывать если код над которым работал нет возможности показать?
Через 4 дня иду на собеседование на позицию java джуна. В данный момент работаю около года на питоне немного мл, немного бэка. Сказали, что знать спринг не надо, от меня требуются хорошие знания джавы, sql и общая алгоритмическая подготовка. Если с алгосами и sql у меня все окей, то что бы вы мне посоветовали почитать/повторить по джаве и по sql? Sql юзаю постоянно, но что-то сложнее вложенных запросов и джойнов не писал.
>>2688148 ну классическое - методы класса Object, зачем нужны equals и hashCode, зачем нужно volatile, что делает synchronized, какие коллекции существуют, какие исключения существуют и в какой иерархии, что такое дедлок, что такое куча и стек.
Есть класс который хранит Supplier<T> и поле типа T. Есть список так классов, но с wildcard, потому что надо хранить разные типы. Мне надо в какой то момент взять эту пару и присвоить в поле get от Supplier. Но Java ругается, что я присваиваю ? в ?
https://habr.com/ru/articles/733400/ Признавайтесь, кто писал? Я бы подумал на бугаенку, т.к. он алгоритмы не знает, но крудошлеп и паттерны не любит. А бугаенка только рад для каждого метода в классе стринг создавать декоратор
>>2688908 И так и эдак делают, оба способа имеют свои достоинства-недостатки. Второй способ - сложнее в реализации, но каноничнее за счет того что гейтвей остается чистым от логики. Как по мне - в жопу такие каноны - они не всегда себя окупают.
>>2688924 >Второй способ - сложнее в реализации Вот я потому и спрашиваю. Сейчас загуглил как это делается - какое-то перекидывание жвт-токена между сервисами, какие-то фильтры блять, я нихуя даже не смогу понять толком с первого раза. А если в апи-гейтвее все сделать, то все просто как в каком-нибудь монолите.
>>2688818 Сука, что за говно... пост выглядит как филиал шизов с этого треда. Я ебал - какой же дегенерат бляяяя.
>Обожаю вот такой код: >Class Animal{String type, voice(){ >if (type==dog) -> gav, >elseif(type==cat)->myau >else->not} >}
Этот вот кусок - какой то особенный вид самоопозора блять. Челик слишком молод чтобы знать, что именно такой стиль кодинга диды еще в 2000х называли "индусским кодом".
Подскажите пожалуйста, у меня в поле обьявлены ссылоченые переменные, инициализируются они в теле конструктора. Когда сборщик мусора проведёт очистку обьектов в теле конструктора ? После того как все методы класса выйдут из стека (завершат свою работу) ?
>>2689154 Ты все неправильно сформулировал, из-за чего у тебя каша в голове.
У тебя - класс. В классе обьявлены поля (аттрибуты) ссылочного типа. У класса - конструктор. У конструктора - агрументы (переменные) ссылочного типа. Переменные и поля - две разные вещи.
Переменные сидят на стеке. Все переменные - и ссылочные, и примитивные. Соответственно, когда вызов конструктора или метода закончится, переменные дропнутся вместе со стекфреймом. Ссылочные переменные - тоже.
Поля сидят в обьектах. И дропаются вместе с обьектом, когда за ним GC придет.
Еще важно понимать, что значение ссылочной переменной/поля - не обьект. Значение ссылочной переменной/поля - ссылка на обьект. Когда ссылочная переменная дропнется, дропнется ссылка на обьект, а не сам обьект.
У GC задача простая - среди всех обьектов в памяти найти те, на которые не указывает ни одна ссылка, и дропнуть. GC насрать на конструкторы, методы и фреймы, он работает на графе обьектов, параллельно и независимо от самой программы.
>Когда сборщик мусора проведёт очистку обьектов в теле конструктора ?
Если ты понял все вышеописанное, должен понимать теперь, что в конструкторе нет никаких обьектов. Есть только ссылки на обьекты.Сами же обьекты, на которые ты ссылаешься из конструктора, дропнуться тогда же, когда и все остальные. Когда на них не останется ни одной ссылки.
Тебя это ебать не должно. Если хочешь попердолиться с памятью, выбирай другой язык. Это во-первых. Во-вторых, очищается не тело конструктора, а хип(куча), где хранятся все объекты. А объект оттуда удаляется, когда на него нет ссылок при обходе графа объектов от вершины.
>>2684226 (OP) >Программирование — это не столько про анальное крудошлёпство, сколько про стиль мышления Это ковыряние в конфигах, статьях, туториалах и документации. Всё.
>>2689254 в настолько далекие времена жаба была слишком хипстерской и сырой, типа го на взлёте. В те времена были делфи, плюсы, фокспро, визуал бейсик, файрберд
>>2689339 Перевели с 11 на 17 почти год назад. После выхода 21 тоже дадут где-то через месяц все перевести. Вот со спрингбутом 3 есть некоторые сложности.
>>2689388 да. Когда спрашиваешь аналитика, а он говорит что смотри в документации (неизвестно какой, какой версии и где находится). Или говорит что не отвлекайте меня
>>2689388 Если приходится напрямую задавать вопросы кабану в обход аналитиков, рисовать блок-схемы и строчить письма с подробным описанием процессов, и всё в довесок к написанию кода, это считается?
JAVA 20 @ КОД ПРОЕКТА НА JAVA 8 @ НИКАКИХ НОВЫХ ФИЧ ЯЗЫКА @ ТЕБЕ ЧТО-ТО НЕ НРАВИТСЯ, СЫЧЕВ? @ ВОН ЖЕ ДВАДЦАТАЯ ЖАВА! @ И ЧТО, ЧТО ТОЛЬКО ВЕРСИЯ JVM ИЗМЕНИЛАСЬ?
>>2689440 Да брось. Ну какие там плюшки? В основном какие-то локальные улучшения самой JVM, а сам синтаксис языка практически не изменился с Java 8. Большинство вакансий заманивает Java 17-20, а на деле там JVM 17-20, а синтаксис Java 8.
>>2689443 Че ты до челика доебался, болезный, че доказать то пытаешься? Да большинство джаванов если и стремятся переехать на джаву 17+, то только ради того, чтобы varы лабать, что уже нифига не Java 8 экспириенс
>>2689448 >varы лабать А зачем? Везде где я работал/проходил собеседование прямо говорили, что эта фича (и еще несколько других) запрещены на уровне линтера/чекстайла, т.к. команда поддерживает старую версию своего говна на доисторической жаве куда регулярно льет фиксы. Либо из-за личных предпочтений эти фичи банятся в проекте.
>>2689485 Зато функционально написано! Бугаенко лайк поставит. А так вообще хватит отсутствия реактивного драйвера jdbc, чтоб вебфлакс похоронить по производительности
>>2689523 Думаешь, это проблема самого андроид-треда, что андроид-разрабы там не сидят? А вот хуй, в /pr/ андроид вообще никому не всрался, в каком треде ни спрашивай.
>>2689507 Бля, вот че меня перманентно забавляет в бугаенко-фагах (похуй - флюродросеры, хейтеры...) - они так любят пиздеть за бугаенку, до слюней иной раз, но при этом нихуяшеньки не знают, о чем он был.
Бугаенко лайк поставит, ага. Да он хейтит все что больше 4х методов, считает флюент-апи антипаттерном. Какой в жопу вебфлакс, лол.
Вопрос опытным джавистам, желательно тем, кто понимает в архитектуре и принимает решения по ней для новых проектов. Возник спор и нужно объективное мнение незаинтересованных в споре лиц.
Есть задача написать прогу для хранения данных, для исследовательского сервиса для краткости буду называть её просто база данных или ява. Основная цель сохранять измерения с разных приборов. Вторая задача по этим замерам можно создавать исследования, которые хранят в себе выбранные замеры и результат. Расчёт результата исследования данной бд не предусмотрен, предполагается его загрузка извне (не важно откуда, хоть из текстового файла). Есть и более специфический вид исследования, результат которого можно получить из сторонней программы написанной на питоне.
Дано несколько вариантов взаимодействия базы ява и приложения на питоне.
1. Использовать питон приложение как апи, которое вообще ничего не знает о ява базе данных, а ява часть как клиент этого апи, т.е. ява из бд собирает все необходимые данные и отправляет в питон апи, а из апи отправляется ответ, который база данных сохраняет как результат. Возможный минус - перегонка данных между базой и апи, насколько критично? Какие объемы пересылаемых данных будут тормозить систему?
2. Стороннее питон приложение получает от базы данных айди уже сформированного исследования и само лезет в бд, забирает из исследования все замеры, формирует нужный ей датасет, считает и само кладёт результат в бд. В данном случае исключается пересылка данных напрямую между ява и питон частью. Как меняется сила связанности по сравнению с первым вариантом?
3. Питон не просто забирает данные для расчетов по ид исследования из базы. А сам формирует это исследование, при этом ява уже не умеет создавать исследования и по сути умеет только загружать замеры. Как в этом случае меняется связанность?
Какой из этих трёх вариантов вы бы выбрали и почему? Какие плюсы-минусы видите в каждом из них? Выбрать нужно так чтобы можно было сделать масштабируемое приложение под разных бизнес клиентов. Важный нюанс - специфическое исследование по которому результат считает питон, для некоторых вообще может не пригодиться, а вот базовые более универсальные исследования могут быть нужны почти всем.
>>2689485 >У НАС WEBFLUX Проиграл в голосину с команды, где один "сеньор" нарыдал у лида и затащил в проект вебфлукс. Старательно переписывал проект на протяжении полугода. В конце даже презентовал свои жалкие потуги. Я его спросил про нагрузку и мотивацию, а тот сказал, что не тестировали производительность до и после, а сам сервис вообще не нагруженный и туда ходит полтора анонимуса.
>>2689712 Перечитал два раза. И нихуя не понял причем тут жява. То что ты описал можно сделать на любом нормальном языке.
Твое жяваприложение звучит как обычное олап хранилище.
Есть стрим пишуший входные данные. Есть пайплайн берущий эти данные, обрабатывающий в стороннем приложении и пересохраняющий в ту же базу.
То есть бд может быть любой(у тебя явно не террабаты входных данных). Коннектор входящего стрима можно сделать на чем угодно(если у тебя прогружаются csv с приборов измерения). А ETL можно сделать в любом ETL инструменте.
Хоть у тебя и явно обьемы не большие, советую разделить хранилища сырых и обработанных данных.
Есть база данных, пишется приложение ява со своей бизнес логикой, которое изначально являлось единственным пользователем бд сохраняло в нее измерения и создавало исследования. Имеется питон приложение делающее расчёты для специфического исследования в том ява приложении. Возник вопрос на каком уровне из трёх выбранных наладить взаимодействие между явой и питоном, и почему.
>>2689741 Тогда по пунктам. 1. У тебя настолько большие входные данные для расчета чтоб об этом париться? Делаешь асинхронный апи у питона. Интеграцией из жявы его дергаешь. 2 и 3. Давать доступ стороннему приложению в основную бд? Ну хуй знает. Если бизопаснеги разрешают - то 3 вариант. Скинул тип расчета и параметры одним запросом и пусть оно считает.
помню делал чтение бинарных данных в жабе. ОЧЕ напрягает что нет беззнаковых типов, приходилось брать следующий тип. И свой собственный сервер через сокеты, тоже прикольно
Егорке нужно отдать должное. По сути это микрочелик без какого-то реального опыта, но с раздутым ЧСВ. При этом он как-то пролез в хуавей на позицию менеджера и даже смог пропихнуть свой язык программирования. Временами пишут херочки из хуавея и зовут либо пилить Apache Flink, либо разрабатывать плагин для IDE к внутреннему языку программирования.
>>2689766 Получается что это питон приложение оно стороннее в плане обособленности, но пишется той же командой разрабов, так что безопасники не проблема, вопрос лишь в том в какой из этих трех вариантов завиимость между явой и питоном становятся выше и насколько это хорошо или плохо.
>>2689772 Да, думали переписать код с питона на яву, но по некоторым оценкам это лишний головняк, да питон как я понимаю под такие задачи лучше заточен. Ну и изначально он должен был быть как апи, но вот поступили предложения по изменению взаимодествия между ними.
Аноны, как правильно напиздеть, что у тебя уже был года опыта для вката на джунскую вакансию? Я думаю сказать, что делал интернет-магазы для пары-тройки местных кабанов не вкатит, так как нет микросервисов и всяких кафок. Сказать что работал на галере? Они будут проверять существование несуществующей галеры? Создать телегу тим-лида и дать ее в случае чего и с нее если что давать себе рекомендации?
Что вообще должен знать вкатун, пытаясь влезть на вакансию с опытом, чего он скорее всего не знает? Ну типа там, как происходит общение в команде, через какой мессенджер... Какие-нибудь такие вопросы. Подскажите, аноны, уже на днях буду выдумывать себе резюме.
>>2689906 >как деплоил приложение Нас было трое, я отвечал за бэк, другой чел за фронт, третий, главный типа у нас, кабан был его знакомым, он и деплоил. Как - я хз. На галере тоже не я деплоем занимался.
Такой не прокатит ответ? Если нет, в каком направлении правильно врать?
>>2689934 я у себя знаю помойную контору, у них лимит 50к и соответственно работать к ним идут только нулевые джуны. Работа в офисе, с 9 до 6, график уборки, стулья за 1к, древние компы, мигающие люминисцентные лампы, плотная набивка в офисе. Всё по классике. Поищи, может и у тебя такое есть
>>2689906 >как деплоил приложение у меня джоба в дженкинсе для этого есть насколько я понимаю, как там все это девопсы устроили я вообще не ебу, максимум нажимаю билд с параметрами и все автоматом деплоится
У него опыта то как раз поболе местных среднестатистических задротов будет. Он до того как в 2017м вылез на конфы, полмира объездил, работал и в Европе и в Штатах. Продолжительное время жил в Калифорнии, где мутил стартап по своим правилам (teamed.io).
>>2690308 Ага, и везде обосрался. Егорка забанен на ВСЕХ конфах, это буквально дегенерат, пока ещё наебывающий китаез, которые не поняли, кто он. Всё люди из рф хуавея, которых я собесил, и которые работали с ним - отзывались о нем как о гниде и очень слабом специалисте.
По сути, когда китайцы поймут, что наняли токсичного мошенника и турнут его - Егорка отправится по помойкам, он сейчас буквально во всех чёрных списках, что есть.
>>2688818 С чем-то согласиться можно, полиморфизмом очень легко переборщить и сделать StrategyStrategy и по 30 минут искать, откуда начинать читать. Недавно пришлось дебажить бугаенковый код, я тогда знатно подохуел.
>Ага, и везде обосрался Ну и что? Он хотя бы пробовал, что-то делал. При всех его обсерах он все равно на голову выше и уважаемее среднестатистического омежки-анальника.
>Егорка забанен на ВСЕХ конфах
Его бан на конфах не коррелирует с его техническими скиллами ни коем разом, инсайдерская инфа-сотка. На конфах его забанили из-за взглядов - потому что он открытый традиционалист и любил открыто хуесосить соевых куколдов, коими являются почти все анальники моложе 30 лет, и их уклад. Из-за чего он неизбежно стал входить в конфликт с программными комитетами.
>По сути, когда китайцы поймут, что наняли токсичного мошенника
Он давно у хуявее, несколько лет уже. И все это время - на топовых позициях.
>>2690551 Ну вот это типичный бугаенкохейтер. Самое натуральное чмо. Кому Бугаенко неинтересен или противен - тот давно уже заблэклистил его и забыл. А чмо будет и дальше заниматься бесплатным раздуванием известности Бугаенко. Которому по большому счету похуй что в негативном ключе. Он смеётся над такими как ты.
Поясните что такое API GATEWAY? Это микросервис, у которого контроллер с урлами, на которые обращается клиент, а он уже с другими микрачами коммуникацирует и решает задачи?
Никогда я на него не молился. Его фолловить - на самом деле это как двач читать. Феномен Бугаенко крайне забавен. Казалось бы - втирает какую то дичь. И тем не менее год от года собирал полный зал народу на своих докладах. Я частый ходок на конфы от jugru - видел сей феномен своими глазами. И даже посравшись с Барухом на почве какой то семитской дискуссии (не помню какой), даже посравшись с хохлами на почве признания их проплаченной "революции достоинства", и получив из за этого бан на всех конфах, он не отчаялся и замутил свою конфу. И нормально прошла кстати, сотыгу людей собрал.
Я его не оправдываю, я бы мог назвать за ним такие огреги, за какие его наверное присадить можно было бы. Но на его фоне хейтеры - один хуй плесень блеклая. Лицемеры, анальники, дауны. Наверное я просто заебался иметь дела с этой ебаной плесенью за годы стажа, и Егор стал альтернативой. Но как же потешно наблюдать как их всех корежит от злости).
>>2689906 Ну у нас на дев контур деплоится, когда мр из фича ветки в дев ветку мерджит ответственный за сервис. Пайплайн gitlab-ci настроен. Как происходит деплой на другие площадки не знает никто из джунов и часть мидлов тоже не знает. Скрипты для ci даже для деплоя на дев лежат в отдельном репозитории, к которому доступ есть не у всех. Так что джун даже если бы хотел разобраться как что деплоится, то не смог бы. Так что тут не так и сложно спиздеть.
>>2691024 Почему в книга по сишарпу рассказывают про консольную утилиту dotnet? В книга по голангу - про утилиту go? В книга по РНР вообще рассказывают как развернуть Апач?
>>2691047 Так это встроенные утилиты. А мавен к жабе никакого отношения не имеет. Тем более достаточно популярная альтернатива - грудель. И ты на поверхностном уровне должен будешь знать оба. Потому что в литературе по спрингу и библиотекам встречается и то и другое. Ну и видел я книги по жаве, где есть про мавен. От епама была с автором со смешной фамилией.
>>2691047 Ты просто необразованный еблан, который не шарит в программировании. В JDK есть javac - компилятор языка Java. Если тебе система сборки нужна, то у тебя выбор начиная с Ant, заканчивая Maven, Gradle и даже Bazel. Не говоря про какой-нибудь SBT, которым тоже можно собирать джава код. А ты обыкновенная узколобая ослица, которая кое-как осилила сишарп и зазубрила входящую в поставку утилиту для сборки проектов.
>>2691061 >то у тебя выбор начиная с Ant, заканчивая Maven, Gradle и даже Bazel. Не говоря про какой-нибудь SBT, которым тоже можно собирать джава код Но если ты выбираешь что-то кроме Maven и иногда Gradle - ты конченый и общаться с тобой не стоит.
>>2691047 Потому что dotnet и go идут в шарпе и Go из коробки, и там это единственный способ управления проектом. А мавена, который в джаве только один из многих, из коробки нет, есть только java, javac и jar. Пыху учат с одной только целью - по-быстрому наклепать сайт, так что там могут рассказать и про базы ланных, и про вёрстку на HTML, и про линукс.
>>2691067 Но ты сам ничего не выбираешь, а работаешь с тем, что есть. Да, наверно в 70% это будет мавен, еще в 25% грудел, и лишь в 5% оставшихся что-то еще.
>>2691072 Тебе не нужен для портфолио полноценный сайт. Это никто не оценит. Изучение жс у тебя займет месяц, с фреймворком - 2. В работе тебе фронт не пригодится никогда, если это не совсем помойная галера, куда нанимают жавистов и заставляют их заниматься "фулстеком". Вариант с голой апишкой со сваггером самый верный. Он может научить тебя абстрагироваться. Если очень хочется потрогать проект самому, то рекомендую писать просто на голом жс с fetch-api и голым же жс отрисовывать и чистить дом дерево.
>>2691076 > Но ты сам ничего не выбираешь Авторам книг по кору всё равно, учишь ли ты джаву с целью продать свою жопу подороже или чтобы писать свои проекты без мавена. Поэтому рассказывают только только базу, которая одинакова для всех.
>>2691082 Так портфолию или реальный проект? Ты путаешься в показаниях. Выбирай любой фреймворк. Для жабы вообне никакой разницы что на фронте. У нас был и вью и реакт и ангуляр.
>>2691085 Ну я поддерживаю их в этом. Вот Хорстманн. Это 2к страниц инфы по джавакору. А выкинуть оттуда можно разве что swing. Да и то он там есть на самом деле, потому что на примерах с гуем многопоточка лучше всего объясняется новичку. И там написано как собрать проект с библиотеками вручную через java jar с параметрами. И сколько тогда нужно страниц, чтобы и основы мавена туда впихнуть? 3к? Ну а если зайти на торренты и поглядеть видеокурсы по джавакору, то там в половине будут основы мавена.
>>2691136 Далеко не каждая помойная галера заставляет заниматься фулстеком, но почти все галеры, которые жависту подсовывают фулстек - помойные. Помойных галер и без фронта на тебя хватит.
>>2691146 Блейзор реально запихивает CLR в браузер и потому получается аналог SPA-приложений, а Ваадин обрабатывает все запросы на стороне сервера, типа нажал кнопку - летит запрос на сервак, а потом в обратку обновление формы.
>>2691174 byte - это компактный контейнер для хранения данных (к примеру, огромный массив на 100500 мегабайт), а int для вычислений (джава всё равно все операции к нему кастит).
>>2691151 Че ты этим высером хотел сказать? Что одни, что другие говноделы ебаные, которые хоть какой-то вес в сфере технологий имеют из-за того, что монополисты среди поисковиков.
>>2691554 Он много лет тут бегает, то клон MessageFormat напишет, то очередной рейтрейсер, то эмулятор 8-битных ЭВМ, и всё время жалуется на отсутствие беззнаковых типов. Шарп не приемлет, ведь он же только для винды.
Есть у меня монолитный проект на Spring Boot с подключением к БД (MySQL). Верно ли я понимаю, что просто Dokerfile не подойдет, а необходимо делать ещё Docker Compose, т.к. БД это отдельный сервис?
>>2691578 Ничего не понял, чего надо то? Финальный вариант в работу запустить? Наструячь ансибловых портянок и деплой на сервер свой монолит, бд на соседнюю железку и сеть настрой. БД в докере тебе будет примерно в два с половиной раза медленнее работать.
Для тестов похуй, собирай один образ и без композов.
>>2691588 А вообще для тестов должна уже быть готовая тест-среда в вм, где все уже включено и развернуто (можно и композом), тебе только новую сборку надо задеплоить и включить тесты
Ебать в треде надменное токсичное чмо сидит. Небось в каком-нибудь говнояндексе за половину от рыночной зп пашет и выплескивает ненависть за то, что его развели как лоха, на окружающих.
Ради интереса посмотрел сишарп и РНР и там по фреймворкам просто море информации: книги, курсы, всё разжевано по полочкам. Почему в джаве нифига нет? Куда не копнёшь везде какие-то мурзилки уровне баелдунга, а подробного разбора Спринга нигде нет.
>>2692255 На джаве ты занимаешься поддержкой легаси проектов и там уже есть внутренняя документация компании. На шарпе/пхп пишут новые проекты и поэтому там много информации доступной публично.
>>2692255 Где посмотрел? На амазоне(либгене) куча книг по джаве. Куча видосов на ютубе, на торрентах куча ворованных курсов. На баелдунге и медиуме куча статей.
Есть кто шарашит уже на спринг буте 3? Тут новый проект намечается на жава 17. Вот думаю взять 2.7 последнюю или 3? Пробовал 2 месяца назад старый сервис перевести с 2.7 на 3. Там для кафки убили обратную совместимость(выпилили апишку для асинхронного подтверждения отправки для продюсера) и с фейном старым не работало(что бы решить походу нужно было менять версию фейна во всех сервисах).
А тут новый проектик на один сервис. Интеграция будет по хттп и реббиту, но не с джава приложухами, так что всякая шляпа спрингклаудовская не нужна.
>>2692459 Ну в спринг-кафке 3 поменяли : >In version 3.0, the methods that previously returned ListenableFuture have been changed to return CompletableFuture А я в своих сервисах завязывался на : >future.addCallback Через него я логгировал, как сообщение доставилось в кафку. Можно конечно руками выбрать версию спринг-кафки 2.9, но я предпочитаю все таки по максимуму держать все версии, определенные в spring-boot-starter-parent Но это не суть вопроса.
Для тестов при уже собранных контейнерах как раз проще композ слабать, чем какой то еще один отдельный тестоый образ все-в-одном... Тем более когда тестконтейнерзами композ поддерживается в полной мере.
А ещё те долбоёбы, которые не высрали установщик мавена для винды, из-за чего школота из-за своей тупости поголовно скачивает дегенерадл из-за неумения редактировать path.
>>2692678 Лол, реально что ли есть вкатуны, которые не умеют редактировать PATH? Прям представляю: "Так, надо мавен установить, ой, чёта сложна, почему установщика нет, в пизду его, чё там ещё кроме мавена есть".
ПОЧЕМУ НАХУЙ В STREAM НЕТ МЕТОДА TOSET???!?!?!???????????????!!!!!!!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!!!!!!!!!!!!!!!!!!?!!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!?!?!?!!?!?!???!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!?!?????????!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!??????!!!!!!?!?!??????????????!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!!?!?!??????!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!?????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!?!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!!??!!?!?!?!!?!!!!!?!?!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!!?!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!?????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!?!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!?!?!??!!?!?!?!!?!!!!!!!!!?!!!?!!?!?!?!!?!!!!!!?!?!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!!?!???????????????!!!!!!!!!!!!!!!!!!!!!!!?!?!?!??!!?!?!?!!?!!!!!!!!!?!!!!!!!?!!!!!!!!?!!!
Если я сделаю коммит в JDK с добавлением в Stream метода to(Collection<T> streamRepresentation), который можно будет использовать как stream#to(HashSet::new), то его примут?
>>2692834 В 2023 взяли пока одного джуна и одного мидла в команду из 12 человек. Правда джун пришел по знакомству одного челика, что уже год работал. А за 2022 взяли 8 человек из которых 6 - джуны.
Сначала пишешь JEP, согласовываешь с комиссией, обосновываешь важность и нужность этой фичи. Потом его добавляют в какую нибудь преальфа тестовую версию и Шипилев полгода 24/7 гоняет ее на серверах с бенчмарками, а Валеев доебывается до мелчайших багов, пока пилит поддержку в идее. Потом ее добавляют в бету и дают потрогать пользователям. Если у какой-то легаси параши с векторами и хэштаблицами это будет криво работать - ее не включат.
>>2692858 Тагирка на каком то интервью как-то рассказывал про то как работает процесс коммита фичи через комиссию. Там на самом деле чтобы твои коммиты и дали специальную плашку вообще рассматривали нужно долго прокачиваться среди комьюнити и за тебя другие люди с плашкам поручились. Ему самому такую честь очень нескоро дали после того как он стал ответственным за поддержку жабы в главной жабьей иде. А для васяна с улицы это на долгие годы растянется.
>>2692858 >>2692886 Пиздец, не сравнить с опенсорсным сишарпом где васян с улицы прям на гитхабе пропозалы оставляет и команда их рассматривает. Еще одна ложь от оракла о джаве
>>2692897 Ну это по сути не опенцорс, а просто коллективная разработка от разных больших компаний. Если ты представитель редхата или ибма, то у этих контор в этой их коммиссии есть эксклюзивные права и они в свою очередь могут влиять на решения по изменению языка.
>>2692897 >опенсорсным сишарпом где васян с улицы прям на гитхабе пропозалы оставляет и команда их рассматривает Ну ты сравнил, лол. Одно дело сишарп, который остался где-нибудь на заводах в провинции где пилят "кастомную CRM", и совсем другое джава на которой большинство банков работает, например.
Есть у меня микросервис. Хочу к нему интеграционные тесты сделать. Чтоб было как в постмане, только автоматизировано. Как поднять базу понятно - тестконтейнером. А как мне замокать обращение к другим сервисам? Просто сделать моковую импелентацию, а потом рефакторить ее каждый раз вместе с кодом?(пока склоняюсь к этому варианту)
Все микросервисы хранятся в одной репе, работают с одной базой (у каждого свои схемы, свои миграции) это не микросервисы а service based, но суть та же. Общение между сервисами через рест.
Для работы одного сервиса обычно надо сходить в 1-3 других. Поднимать все 10-15 для этого перебор. Но если не поднимать то как получить ответ? Возвращать определенные данные не очень надежно - там есть связанные сущности. Например в одном сервисе получаем подписки с uuid пользователей, а в другой список данных пользователей по их uuid. И если это мокать - мне надо вручную это все вбивать (остальное без проблем бы нагенерил). Иначе там не будет совпадений и вернет пустой список.
Или все таки возможно как то поднять 3 сервиса и выполнить тест? Но это наверное только отдельным сервисом с отдельными скриптами билда наверное выйдет?
Мне вся эта ебень нужна, чтоб в CI засунуть, а то заебался что юниты зеленые - а из за некорректных данных в базе или ошибки кого то во внутреннем рест контроллере баги всплывают. Автотестеры что то там вроде Е2Е намутили, но они вне CI и для меня бесполезны.
>>2692901 >А как мне замокать обращение к другим сервисам? Тебе - никак. Отдай эту задачу хотя бы мидлу в вашей команде. Очевидно, что ты не тянешь, чел...
>>2692944 Так это я писал. Че ты доебался? Я часто уточняю свою мысль походу и дописываю слова в середину предложения и часто потом оказывается, что в итоге я не там вписал и перепутал порядок слов. Не перечитывать же мне сообщение на дваче. Может мне еще и за пунктуацией следить? Я сюда деградировать захожу вообще то.
>>2692951 >Не перечитывать же мне сообщение на дваче. Лол блядь, так нахуй идёшь тогда сразу, ведь в таком случае перечитывать приходиться тому, кто читает.
>>2692954 Write-only, фактически, это main-target-read-only, в программировании это machine-read-only. На борде write-only значило бы anonymous-read-only, но anonymous твою хуйню прочитать не может, поэтому у тебя не write-only, а build failure.
>>2692901 Есть штуки типа API-моков. Пример - https://www.mock-server.com/. Ты описываешь как должен вести себя API в тесте, а эта штука во время прогона подымает тебе сервер. Подставляешь его вместо реального сервиса и все.
>>2692917 >>2692981 >>Ты описываешь как должен вести себя API в тесте То есть моки придется все рвано самому писать? Или там есть какой то инструмент который магическим образом поймет как надо сгенерировать тестовые данные?
>>2692992 >Или там есть какой то инструмент который магическим образом поймет как надо сгенерировать тестовые данные? Ты сейчас пытаешься переизобрести концепцию контрактного тестирования. Полно готовых инструментов для твоей проблемы. А ты хуйней занимаешься. Я тебе уже сказал, что ты не тянешь. Отдай задачу мидлу или сеньке в команде, а сам пиши по собственному, ослица тупоголовая.
>>2692981 >Подставляешь его вместо реального сервиса и все. Это глина, чел. Можешь тогда вообще не поднимать мок HTTP API, а напрямую мокать клиент для общения с сервисом через какой-нибудь сраный мокито. Один хуй ты обращаешься к ненастоящей зависимости.
>>2693004 Вопрос был в том сделать мок или поднимать связку серверов. Мне предложили мок.
А если мок то руками писать или можно нагенерировать согласованные данные. Этот вопрос проигнорировали.
>>2693006 >>Я тебе уже сказал, что ты не тянешь Ты пукнул в лужу, я проигнорил твой ответ. >>Отдай задачу мидлу ты так сам никогда мидлом не станешь, чел
>>2693038 инверсия управления - что фреймворк вызывает твой код. Инверсия зависимостей - хз, может что фреймворк предоставляет зависимости для твоего кода
>>2693038 2 это банальное "не ломай, блядь, обратную совместимость, а если надо чё-то изменить, сделай неизменяемые абстракции" с очень дебильным названием.
>>2693038 На Википедия же всё понятно написано. Инверсия управления - это когда ты вместо того, чтобы самостоятельно дёргать методы либы и писать главный цикл просто пишешь обработчики/компоненты и вызываешь главный метод фреймворка, который сам запускает цикл и при возникновении событий дёргает нужные обработчики. Так большинство фреймворков работает. Если к этому добавить, что фреймворк сам управляет жизненным циклом компонентов и указывает компонентам, где брать другие компоненты путём подстановки ссылок на них, получится внедрение зависимостей. А инверсия зависимостей - просто идея, что при написании компонента (модуля/класса/метода), которому нужен другой компонент, указывать не конкретную реализацию компонента, а интерфейс или базовый класс, чтобы можно было извне поменять реализацию, не переписывая компонент, требующий зависимость.
>>2693524 Да, в абстрактном классе можно создавать константы. Константы в абстрактном классе могут использоваться как базовые значения, которые наследники должны использовать в своих реализациях, или как общие значения, используемые несколькими наследниками.
Если константы представляют общие значения, которые будут использоваться несколькими наследниками, то их можно определить в абстрактном классе. Это может быть полезно, если вы хотите избежать дублирования кода и сделать код более читаемым.
Если константы представляют базовые значения, которые наследники должны использовать в своих реализациях, то их также можно определить в абстрактном классе. В этом случае константы могут использоваться для обеспечения совместимости между различными реализациями наследников.
В целом, решение о том, где определять константы, зависит от контекста. Если константы представляют общие значения, то лучше определить их в абстрактном классе. Если же константы представляют базовые значения, которые будут использоваться только в одной реализации наследника, то лучше определить их в этом наследнике.
>>2693038 >>2693048 Инверсия зависимостей это D в SOLID. Компоненты верхних уровней не должны зависить от компонентов нижних уровней. Все компоненты должны зависить от абстракций. Проще говоря при наследовании родители не должны зависить от чайлдов.
>>2693524 Можно. И в абстрактных классах можно, и в неабстрактных... Даже в интерфейсах можно, прикинь да? А енамы - так вообще тупо сборник констант! Просто ахуй!..
...взял бы да попробовал сам, вместо того чтоб глупые вопросы задавать.
>>2693626 >>2693038 >Проще говоря при наследовании родители не должны зависить от чайлдов.
Родители и так не зависят от чайлдов. А те всратые случаи, когда таки зависят, новичок ни в жизнь сам не распознает - ему проще внушить composition over inheritance. Эта формулировка только мозг нубам ломает.
DIP не столько про наследование, сколько про направленность зависимостей между компонентами в целом. Наследование здесь - лишь частный случай зависимости между родителем (интерфейсом/базовым классом) и потомком.
Следование DIP в общем случае всего лишь предполагает, что зависимости между компонентами всегда идут от стабильных абстракций (обычно - интерфейсов), к волатильным конкретикам (имплементациям этих интерфейсов). И смысл следования принципу DIP в том, чтобы конкретики никогда не зависели друг на друга, иначе на любой внешний запрос поменять в них что-то будет ворох побочных правок вниз по всему графу зависимостей, включая тесты. Этот негативный эффект еще известен под названием "Zone of Pain", а анализ зависимостей с целью выявления рисков - "Distance from main sequence" (последнее гуглится).
>>2694275 GPT-4, как модель, не имеет встроенной способности определения истины и лжи. Он основан на статистическом анализе больших объемов текста и учится предсказывать последующие слова или фразы на основе предоставленного контекста.
Когда вы взаимодействуете с GPT-4, он пытается сгенерировать ответ на основе своего тренировочного набора данных и предшествующего контекста вашего вопроса. Он не имеет внутреннего механизма проверки правильности или точности информации, которую он генерирует.
Таким образом, ответы, предоставляемые GPT-4, могут быть логически последовательными и звучать убедительно, но не всегда гарантируются быть истинными или точными. Важно оценивать и проверять полученные ответы с помощью критического мышления и дополнительных источников информации, чтобы подтвердить или опровергнуть предоставленную информацию.
Джава один из самых классных ООП языков, но на деле приходится писать всё в процедурном стиле, обильно покрывая весь код аннотациями. Не кажется ли вам, что где-то джава свернула не туда?
>>2694332 Мнение о языках программирования и их подходах может быть субъективным и зависит от конкретных потребностей и предпочтений разработчика. Хотя Java является объектно-ориентированным языком программирования (ООП) и обладает мощными возможностями ООП, стиль написания кода может отличаться в зависимости от конкретной команды, проекта или предпочтений разработчиков.
В Java есть возможность использовать преимущества объектно-ориентированного программирования, такие как инкапсуляция, наследование и полиморфизм, для создания модульного и расширяемого кода. Однако некоторые проекты или команды могут предпочитать более процедурный стиль программирования или использовать аннотации для различных целей, таких как описания метаданных или добавления функциональности через аспектно-ориентированное программирование (АОП).
Важно отметить, что хороший стиль программирования зависит от многих факторов, включая контекст проекта, командные соглашения и личные предпочтения разработчиков. Если вы предпочитаете более объектно-ориентированный подход, вы можете стараться использовать основные принципы ООП при проектировании и написании своего кода, чтобы сделать его более модульным, читаемым и расширяемым.
>>2694349 На самом деле забавный факт в том, что виновна даже не джава и не джависты. Процедурно-сервисный подход в том виде, котором мы его знаем сегодня, начался еще во всяких коболах-алголах у предтеч. Это потом уже случился ООП, на котором предтечи кодили так, как привыкли на коболах, помножив тенм самым профит от парадигмы на ноль. Где класс, у процедурщиков - модуль с процедурами. Инжекция? Идеальный заместитель сишного инклюда!
Это не джава свернула не туда, это кодерки упорно движутся по прямой в стену, как привыкли. Но если предтечи не в чем винить (в их времена тупо альтернатив особо не было, вся индустрия еще только только собирала косяки и набивала шишки), то существование современного спрингокульта не оправдывает ничто.
>>2694377 >Идеальный заместитель сишного инклюда! По моему, если проводить аналогию, то в джаве есть неявный инклюд на вообще все существующие в мире классы.
Раньше писали #include stdio.h чтобы получить доступ к процедурам из stdio, а щас пишут @Autowired UserService userService, чтобы получить доступ к процедурам из UserService.
>>2694424 >Раньше писали #include stdio.h чтобы получить доступ к процедурам из stdio, а щас пишут @Autowired UserService userService, чтобы получить доступ к процедурам из UserService. А ведь правда, пиздец просто. Всё то же самое, только ресурсов жрёт в 5000 раз больше.
>>2694332 Джава мультипарадигменный язык. ООП был в 2000, когда он был на хайпе. Щас так писать - моветон.
>>обильно покрывая весь код аннотациями У меня из аннотаций кодогенераторы в основном - ломбок/мапструкт + валидация + контролеры. Предпочитаешь вместо этого бойлерплейт как в джава5/шарпе?
>>джава свернула не туда? Джава впитывает все лучшие и проверенные технологии. Лямбды, зеленые треды и тп.
>>2694574 Идея видит что это поле у тебя не изменяется ни одним методом и наружу никуда не торчит, и предлагает сразу сделать его финальным, потому что чем меньше мутабельности в программе, тем лучше.
О, здесь даже интересно послушать - а что в моде сейчас среди джаванов, если не ООП. Только не говори что функциональщина - любой хаскелит-любитель без опыта на смех подымет, и будет прав.
>>2694597 Идея не про это, она - не какой то крикливый анальник с хуем наголо в треде. Ей насрать на твое мировоззредние, и она не будет тебе ничего доказывать. Просто она по факту видит что поле нигде не мутируется, и предлагает зафиксировать этот факт в его обьявлении. Если вдруг где то ты поле изменишь, она тоже это увидит и перестанет показываить ворнинг, вот и все.
>>2694551 Так. Про актив рекорды я знаю. Если не ошибаюсь в функциональщине так же поступают: на вход функции данные и залупаРепозиторий, на выходе монада со статусом операции в бд. А еще варианты есть? Может быть прототайп бины? Или прозрачно обмазать всё персистенсом через AOP? Пытался писать код без залупаСервисов, но в какой-то момент всегда появляется желание ебануть синглтончик, фабрику залуп, а потом опять всё скатывается в залупаСервисы, залупаМенеджеры и залупаХэндлеры. Просто мозг не поворачивается в другую сторону.
>>2694614 Конечно не поворачивается, потому что это наиболее естественный способ написания бизнес-логики. На то она и логика, что на первом месте код (процедуры), а не некие сущности реального мира (классы). А всё остальное - удаление гланд через вагину.
Функциональная парадигма тупо не пользуется концептом инжекции через контейнер, им оно тупо не нужно. Нет в ФП никаких бинов, и не будет, равно как нет в них смысла. У них правит балом функциональная композиция, которая, несмотря на то что ручная, в разы более результативна.
>Просто мозг не поворачивается в другую сторону.
Попробуй просто отвлечься и повариться в другой экосистеме некоторое время. Прочитай Learn You A Haskell For Great Good - необязательно прям перекатываться, просто ради самообразования - чтобы понять что бывает кодинг и без контейнеров и сервисов, со своими сильными-слабыми сторонами. Чтиво легкое, недушное.
>>2694551 >Прикольно прокидывать датасорс в каждую ебаную сущность. Спрингокультист правда не понимает, что его спринг просто вуалирует DataSource.INSTANCE в конструкторе?
>>2693638 >Эта формулировка только мозг нубам ломает. Ну сейчас то ты нихуя не сломал мозг нубам. Уверен, что они вообще нихуя не поняли из того, что ты написал.
> Функциональная парадигма тупо не пользуется концептом инжекции через контейнер, им оно тупо не нужно. >Нет в ФП никаких бинов, и не будет, равно как нет в них смысла.
Конечно. Лучше хранить стейт в глобальных переменных🤣🤣🤣 (если они вообще есть в языке)
> У них правит балом функциональная композиция, которая, несмотря на то что ручная, в разы более результативна.
>>2695087 Мне больше всех надо чтоли? Я комментировал конкретный комментарий. Быть бесплатным евангелистом хаскелля я не подрывался - так только спрингорабы делают.
>>2695130 Не суть в чем. Просто признавая за собой процедурщину, спрингошлеп официально признается, что джава для него - просто очередной диалект кобола, а сам он - необучаем. И цитата:
>ООП был в 2000, когда он был на хайпе. Щас так писать - моветон.
...начинает звучать смешно. Как будто бы это их "щас" чем то отличается от того, как было в 60х-70х, когда фортран впервые обзавелся процедурами, а Ларри Константин написал первую в своем роде книжку про cohesion и coupling.
>>2695163 Проблема то в чем? Если отбросять маняярлыки про кобол, то в чем реальная конкретная проблема? Прокидывать датасорс через всю иерархию объектов - это проблема. Отсутствие рабочих реальных примеров с альтернативой - это проблема. А >мааам, ну скажи им, что они Кобол это не проблема
>>2695181 Кто-то говорил про проблему? Только ещё раз долбоёбу-копротивленцу указали, кем он на самом деле и является. Никакой оценки непосредственных действий долбоёба-копротивленца не было, он сам рванул, т.к. ему стало, почему-то, неприятно от его сущности.
Подскажите пожалуйста, это нормально когда я реализую какой-нибудь паттерн не так как это показано в книгах ? Например что-то меняю, или убираю какой-нибудь класс из шаблона.
>>2695232 Смотря что убираешь/меняешь. Есть просто особенности реализации, указанные в книгах, а есть свойства, без которых паттерн перестаёт быть паттерном.
Нормально. Паттерны - это не какая то там догма, это просто эмпирика. Нет ничего необычного в том, что какой то ситуативный кейс из этой эмпирики выпадает.
>>2695181 Впринципе этот все за меня сказал: >>2695221. Я б наверное так уж прямолинейно на личности не переходил, но похуй. Еще здесь >>2694756 тебе следовало понять что мне неинтересно было тебя в чем то переубеждать. Хз зачем ты в залупу полез.
>>2695068 Чмондель, в отличии от тебя, мани, я перед жявкой, на эрланге за денежку год пердолил "деревья отп с акторной моделью обработки данных" (и полгода на элике потом). И не тебе, ссанина мне расказывать про "охуеность" фп.
Вот у нас есть AspectJ, значит. Со связыванием в компайл тайме. Выкидываем его нахуй и не рассматриваем.
Какие у нас остаются варианты для того чтоб дописать логику в существующие методы и классы? Ну, очевидно, Spring AOP или можно в BeanPostProcessor хуйнуть руками логику создания нового прокси.
И, по идее, там под капотом даже механизм один и тот же, для внедрения логики-то. Какой вариант предпочтительнее? Аспекты, потому что проще и нагляднее? Или рчками сделать прокси потому что... что?
>>2695730 Ты же просто нахуй послал десятки форматов данных с сериализацией/десериализацией, обработку респонс-кодов, обработку ошибок, авторизацию, управление соединениями и остальное. Если тебе нужно готовое решение под твой супер частный случай "ничего кроме plain text и 200 OK не существует", ты его не найдёшь.
>>2695736 Чет не до конца понятно че ты пытаешься понять для себя. Ты аспекты лабаешь, или тебе надо просто кода навалить в скомпилированный класс? Почему берем и выкидываем AspectJ? При чем тут бинпостпроцессор?
>И, по идее, там под капотом даже механизм один и тот же, для внедрения логики-то.
Да так то если посудить - Spring AOP то тоже в этом плане ничего нового из себя не представляет. Либо использует java.lang.reflect.Proxy, либо CGLib. И в целом так делают все тулы - либо прошивают байткод в компайл-тайме/во время класслодинга (чаще всего через CGLib, иногда через Javassist), либо юзают java.lang.reflect.Proxy. Ну еще есть ломбок, который ректально патчит AST через процессоры аннотаций, но это - нелегальная хуйня, так редко кто делает.
>Аспекты, потому что проще и нагляднее? Или ручками сделать прокси потому что... что?
Опять же, ты щас просишь сравнить идею с одним из путей ее реализации. Теплое с мягким.
Блядь, почему когда рассказывают про вильдкарды и PECS постоянно лезут в залупу, только больше запутывая всё в мозгах вкатуна, вместо того чтобы просто показать ему метод Collections.max()?
>>2697130 да. Это для EJB требуется сервер приложений (JBoss, WebFly и подобное). Спринг это нескучная замена EJB, не требующая стороннего сервера приложений
>>2697147 Если уж проводить аналогиии, то DI в Java EE - это CDI, а не EJB. А альтертанива MVC - Jax RS. И обе этих спеки самодостаточны, а их имплементации так же спокойно используются без контейнера приложений.
>>2697517 начинаю понимать. Там просто все элементы хранятся в Node, и в нем есть поле next, где хранится следующий. Линкед лист не используется но по сути это оно
>>2697566 немного начинаю понимать. В основе хешмапы - массив. Ключ - integer. При вставке индекс для этого массива вычисляется на основе хэша, при этом чтобы он не выходил за размеры массива. Если массив заполняется - происходит процесс увеличения массива вдвое, индексы значений пересчитываются. Значение в этом массиве - Node, оно же называется "корзина"
Если хэш совпадает - значение записывается в поле next корзины. Если эта корзина становится слишком большой - она преобразуется в дерево. Т.е. в корзине может быть несколько значений только в случае коллизии. При нормальном распределении хэшей одна корзина - одно значение.
Эффективность доступа через get В случае нормального распределения хэша - O(1) В случае коллизий, при этом количество значений с коллизией меньше 8 - O(N) В случае коллизиий, если количество значений с коллизией больше 8 - O(log N)
>>2697563 На пару секунд тормознуть GC может на под завязку забитых хипах в десятки гигабайт. Скорее всего у тебя столько оперативы тупо нет. На своих поделках ты никогда таких stop-the-world пауз не встретишь, забей.
>>2697831 И кстати я преувеличил - не факт что даже на таких объемах хипа ты чето заметишь. По умолчанию JVM выбирает сам GC в зависимости от того, какое у тебя железо и сколько хипа, и делает это довольно неплохо. Есть даже на самые терминальные случаи специально задизайненный на терабайты хипа нахуй ZGC.
>>2697563 Емнип в дефолтном гц - stop the world срабатывает при загрузке хипа > 99% Это редкое событие, и если ты не суперточный софт пишешь, а какой-нибудь веб - это допустимо. Если задержки неприемлемы - есть и другие GC.
Ок, я мягко говоря преувеличил, утверждая что выбор он делает как то мудро и обоснованно, мой косяк. Но все же кое какой выбор на основании хоста он делает.
>Хочешь г1 или шенандо - ключики пердоль
Так то G1 - дефолт с 9й джавы. Без всяких ключиков.
>>2697854 >ключики пердоль ХМ-ХМ, КАК ЖЕ ТАМ +xx:-USEgC1? @ ERROR, +XX:-uSEgC1 NOT RECOGNIZED @ НУ КАК ТАК ТО?! @ А ЕСЛИ -XX+:=USEgC1? @ eRROR, -XX+:=USEgC1 NOT RECOGNIZED! @ ДА ПОЧЕМУ?!!!!!!
>>2697846 >в дефолтном гц - stop the world срабатывает STW срабатывает в любых GC кроме ZGC (еще в превью). И есть коммерческая JVM, где эту проблему уже давно решили
Решаю задачки на кодварсе и каждый раз охуеваю с того, что решенная мной задачка оказывается решалась в 10 раз проще каким-то одним из десятков методов используемого класса, о котором я даже не подозревал. Вы всегда все реализуете идеально, используете все возможности языка или забиваете и делаете, как быстрее или как понятнее лично вам? Имеет смысл вообще гнаться за этой аккуратностью? На сколько вы вообще досканально знаете язык, фреймворки?
>>2698556 Имеет смысл гнаться только тогда, когда велосипед оказывается сделать сложнее, чем узнать, как работать с какой-то уже существующей технологией.
>>2698568 Есть такая поговорка - инициатива трахает инициатора. Написав велосипед, ты берешь на себя за него ответственность - покрываешь тестами, документируешь, фиксишь в нем баги.
А так как разрабы в целом не любят брать на себя ответственность по ряду причин, велосипеды в индустрии порицаются. Каждый велосипед считаются говнокодом до тех пор, пока не доказано обратное.
>>2698672 То есть нагуглить полностью готовое решение > написать свое решение, я правильно понимаю? Это актуально только на этапе работы или на этапе освоения тоже?
Все вышесказанное актуально только для коммерческого кода, разумеется. На этапе освоения в велосипедостроительстве нет ничего плохого - напротив, на велосипедах неплохо прокачиваются техскиллы, набиваются шишки, приходит понимание прочитанного в книгах-интернете.
>>2698568 По сути да, но на поддержку велосипеда тратятся силы, и эти силы тоже надо учитывать. Редкий случай, когда силы потраченные на создание велосипеда и его поддержку в сумме меньше, чем силы, потраченные на поиск информации, и особенно когда есть у тебя под рукой чат гпт, который всё уже знает.
>>2698672 >Написав велосипед, ты берешь на себя за него ответственность - покрываешь тестами, документируешь, фиксишь в нем баги. Это какие-то фантазии, если честно. Я разменял 10 лет в этом вашем айти. Ты не поверишь сколько велосипедов я видел в своей жизни. Начиная с совсем крохотных библиотек и заканчивая всяким мидлвейром и прочими "СУБД". За всю карьеру наберется несколько десятков огромных велосипедов и еще полторы сотни всяких библиотек и "фреймворков". При этом никто не писал документацию и тем более тесты. Разобраться в том поносе было очень тяжело, т.к. писали его обычно 1-2 человека и у них налицо были какие-то психические отклонения. Такие персонажи входили в рейдж мод, когда им показывали отраслевые решения, которые они завелосипедили из-за своего скудного умишки
И в чем фантазия? Ты сам все то же самое и сказал. Безответственные велосипедисты и их поделки вызывают лишь отторжение. Их пытаются устранять, а когда не получилось - ненавидят лютой ненавистью.
>>2684242 мне кажется гошка изза популярности микросервисов, может несколько % рынка откушать у монолитной жавы. (если уже не откушала) Если что, я просто кукаретик, кто в тырпрайзе работает, поясните если не прав.
Существует проблема, когда у нас есть транзитивная зависимость, но на разные версии. Какую версию возьмёт мавен? По-умолчанию мавен берёт ту, путь к которой ближе. Например к одной версии идём через 3 шага, к другой через 2 шага. Значит мавен возьмёт зависимость до которой 2 шага.
Ещё можно вручную описать, какую версию надо брать. Это делается в помнике проекта в разделе dependencyManagement. Pom файл, состоящий только из этого dependencyManagement принято называть bom файлом. Подключить его можно через parent в нашем помнике, либо через импорт в нашем помнике.
Спринг публикует готовые bom файлы для своих версий. Подключаешь этот файл - и избавляешься от проблемы что какая-то сторонняя зависимость перебила спринговую транзитивную зависимость
>>2699398 Добавь еще тот важный нюанс, что бомник может декларировать только версии зависимостей, но не версии плагинов. Импортнутый спринг-бом не определит версию спринг-мавен-плагина в проекте.
>>2699233 >>популярность spring webflux ? Вместо <List>Zalupa в проекте будет Mono<<List>Zalupa>. Даже если перепишешь на Flux, один хуй база на jdbc будет.
Но выглядит прикольно, лямбды в 2 экрана ведь лучше легасного ООП.
Вопрос по Vert.x Мне надо, чтобы прога бесконечно просила пользователя ввести слово определенное до тех пор, пока он его не введет. Для разделения по словам использую recprdParser. Но он не умеет писать в сокет. А передавать в функцию езе и сокет кажется плохой идеей
Вопрос по Vert.x Мне надо, чтобы прога бесконечно просила пользователя ввести слово определенное до тех пор, пока он его не введет. Для разделения по словам использую recprdParser. Но он не умеет писать в сокет. А передавать в функцию езе и сокет кажется плохой идеей
>>2699913 Не варил вертекс, но бегло взглянув на API RecordParser'а предположу что pipe()/pipeTo() там как раз для того, чтобы писать куда-либо то что ты напарсил.
Внезапно пример Vert.x echo server просто перестал работать. Ничего не менял. Он не начинает слушать даже. Ничего не пишет консоль. Я не понимаю где оштбка
Хочу выучить Spring и вкатиться на удаленку, чтобы с людьми поменьше пересекаться (желательно вообще в ТГ общаться). Ибо интроверт я. Такие варианты в природе существуют? Или только офис и общение с коллегами (не складывается у меня общение с людьми, не любят они меня)
>>2700285 Щас всех наоборот с удаленки тащат обратно в офис. Даже если и дадут удаленку - скажут что вот ты пока сиди дома, но по договору напишем, что ты офисный раб и по первому сигналу должен перейти на гибрид (хотя бы 5 дней в неделю - в офисе).
>>2702326 Работа спрингоёба не намного интереснее работы базоёба. Сиди перди на своих базах. Если хочешь реальную жабу полапать, то забудь про существование копроспринга.
>>2702326 > Как вкатиться в вашу джаву? Тебе нужен какой-то roadmap или что? Бесплатных материалов в сети — просто пиздец как много. Если лень самому разбираться, то можешь себе какие нибудь курсы позволить, где тебя за руку проведут.
У меня есть два потока, основной и дочерний. Когда я вызову метод join для дочернего потока что происходит в этот момент ? Дочерний поток ждёт пока главный закончит свою работу ? Но ведь главный поток всегда работает :/ Ваши мысли...
А мне нужно 2. Задача такая: 1) в таблицу permissions добавить запись с name = "Полный доступ", если такой записи нет; 2) в таблицу roles добавить запись с name = "Администратор", если такой записи нет; 3) в таблицу roles_permissions, связывающую 2 предыдущих, добавить запись, дающую роли "Администратор" доступ "Полный доступ". Все это нужно в рамках одного changeset'а. Как написать insert'ы для первых 2 пунктов? Вдобавок нужно еще и в XML (без использования тега <sql>).
Подскажите пожалуйста, статические поля инициализируются во время компиляции, но, если полю присвоено значение в теле статического блока инициализации, значит оно будет проинициализировано во время выполнения ?
Хочу вкатиться в бэкэнд на Java. Исходные: - 30 лвл - Полностью профильное образование (бакалавр) - Текущая зп 120к, сисадмин - Опыт кодинга уровня написания скриптов на Powershell для автоматизации рутинного говна и небольших процедурок вида "спарсить N-ое количество xml-файликов, покрутить-повертеть, залить вывод в excel" - Английский уровня B1
Осознал, что нужно куда-то расти, в админстве потолок, а идти в девопсы чет не охота, душа не лежит, один хрен учить тонну всего нового. Так почему бы не податься в кодеры, говорят у вас можно 300к/наносек зашибать, кек.
Собсно простые вопросы: 1) Как лучше обучаться? Курсы, самообучение по ютубу или найти челикса на какомнить фрилан.сру и платить ему по 4к/час за обучение раз в неделю? 2) Какая РЕАЛЬНАЯ ЗП у джуна в мск? Кто-то говорит, что 80к, кто-то говорит, что 50. Просто со 120 на 50 идти это вообще пиздец будет для меня. 3) Не слишком ли я старый? Много ли у вас коллег-джунов 30+? 4) Как быстро можно вырасти по зп хотя бы до текущих 120к?
В треде ньюфагов мне посоветовали изучать кор и попутно пилить свои пет-проекты, собсно отдельно стоит вопрос пет-проекта, что лучше пилить, чтобы и интересно ковыряться было и полезно в возможной будущей работе и на собесе показать не стыдно?
Если я сварганю чатик с шифрованием, клиентом под винду и веб-интерфейсом этого будет достаточно для изучения и собеса или нужно что-то круче? Пока абсолютно хз как это все делать, но уверен, что у Java есть все инструменты для работы с сетью, БД, шифрованием и т.д.
>>2703153 >самообучение или ментор Самообучение. Если сам не можешь обучаться, то не стоит продолжать >реальная зп У нас в Беларуси все джуны без опыта 500$ получают >как бысто можно вырасти до 120к ~ от 2-х лет >что лучше пилить для пет проекта Чатик с шифрованием на вебсокетах норм, клиент под винду лишний, т.к. java только для веба. Кроме этого сделай простое CRUD приложение с авторизацией. Перед этим изучи java core конечно
Хотят затащить монорепу на проект. Я знаю, что идея хуйня скорее всего, потому что монорепы здесь вызывают полыхание жопы, но сам не пользовался никогда и минусов не знаю. Как аргументировать, что монорепа нахуй не нужна на проекте и чтоб это выглядело убедительно? или может все-таки нужна? проект на данный момент маленький
>>2704746 Смотря насколько не ньюфаг. Есть Хорстманн. Страниц много, но не из-за воды, а из-за описания тонкостей. Всякую хуйню типа Swing/JavaFX можно скипнуть.
>>2686212 Ну я вкатываюсь уже второй год, высрал три петпроекта, и все пока по нулям, даже не зовут на собесы. Походу без профильной вышки хрен влезешь.
>>2705252 Ебало в ноль, глаза в пол, чмо. Сопли еще не высохли, а уже изх себя синьора корчит. "Ебаться ему придется"... Когда тебя это ебать начнет, ты скорее всего свалишь тридцадь раз в другой проект. А взрослые люди в гробу видели сопляка с сопляческими загонами, саботирующего принятие решений.
>>2705285 >Ебало в ноль, глаза в пол, чмо. Сопли еще не высохли, а уже изх себя синьора корчит. "Ебаться ему придется"... Когда тебя это ебать начнет, ты скорее всего свалишь тридцадь раз в другой проект. А взрослые люди в гробу видели сопляка с сопляческими загонами, саботирующего принятие решений.
>>2705285 >>2705285 Ну вот из-за таких чсв ебанатов как ты проекты и загибаются. Я то хотя бы слышал что-то о том, что эта практика может быть хуйней, а другие челы скорее всего и не работали с этим никогда и не слышали вообще нихуя, поэтому наслушаются сейчас про меньшее количество пулл реквестов и упрощенное ревью и испортят жизнь потом не только себе, а и последующим разрабам на проекте
>>2705422 Нет, сука, чсв ебанат здесь - ты, и именно из-за таких как ты проекты загибаются. Ты знаешь и явно декларируешь здесь, что у тебя нет никакой экспертизы и никаких явных причин против инициативы, но почему то решил, что вправе спорить с людьми, проявляющими эту инициативу. Ты вообще разобрался, почему они вводят монореп? Не думал о том, что для этого у них есть реальные причины? С чего ты взял, что если ты "хотя бы слышал", твое мнение весомее тех, кто эту инициативу проводит?
Если ты - новичок, сиди, молчи в тряпочку и набирайся своего опыта, набивай свои шишки. А если берешься лезть во взрослые дрязги, лезь со своей аргументацией блять, а не на двач иди за чужой. Кусок ты дерьма, ебало бы тебе в реале набил.
>>2705475 Ебать у тебя полыхает, целых два года уже, наверное, круды хуяришь на жабе, уже возомнил себя лучше других. Да ты хуесос тупой, с тобой ни один человек работать не захочет, потому что выебываешься и считаешься только с мнением таких же хуесосов как ты сто проц у вас там микропиздочная команда из 2 разрабов, иначе тебя бы уже давно оттуда выпизднули. Где ты, уебан, в моем тексте вообще увидел, что я хочу, чтобы мое слово в этом вопросе стало последним и хоть один намек на то, что я УЖЕ выступил против этой инициативы? > или может все-таки нужна? Сын ебаной портовой шлюхи.
> лезь со своей аргументацией блять Она на чем основываться должна? Только на личном опыте? Тогда я надеюсь ты пожрал говна и попил мочи перед тем как понять, что это лучше не делать в повседневной жизни? спойлер, нихуя ты не понял Или ты думаешь, что я пойду ответные посты на дваче пересказывать другим разрабам, ахахахха, если да, то ты наитупейший долбоеб.
> ебало бы тебе в реале набил Ты бы мне в хуй дышал, омежка ебаная, думаешь я не понимаю, откуда у тебя такое желание самоутверждаться за счет других? Ты 150 см девственник, я бы тебя даже трогать побрезговал, максимум харкнул в ебло.
>>2705560 Не верти жопой, кусок дерьма. Свою цитатку ты под спойлер сунул, а наружу выставил свою гнилую натуру:
>Как аргументировать, что монорепа нахуй не нужна на проекте и чтоб это выглядело убедительно?
Тебе не одним мной было сказано блять: не знаешь как аргументировать - не лезь, придурок! Не для тебя эта дилемма, и не тебе кого то переубеждать!
И не с пустого места тебя долбоеба нахуй всем тредом шлют - слава богу на дваче CoC нет. В реальной работе такой хуеплет как ты, вооружившись арсеналом хуеты из интернета, любое обсуждение инициативы легко превращает в ебаный душный фарс на недели проебаных человекочасов в митингах, где вся команда такому дурачку пытается чето разжевать лишь потому, что по историческому недоразумению послать тебя нахуй в коллективе считается дурным тоном и проебом по софт скиллам. Пользуйся случаем и мотай на ус, блять, потому что больше видимо нигде тебе в лицо правду не скажут.
>>2706092 Зато в джава версии 2023 у нас будет интерполяция строк вида STR."My name is \{name}", где синтаксис обусловлен защитой от сикуэл инъекций Правда я не понял, как именно оно защищает, но имем что имеем
>>2706520 Если приложение - обычное SE-шное, то загрузчик приложения (application class loader). Если OSGi или EE-контейнеры - всякие кастомные загрузчики.
>>2707142 > Что лучше джавы для коммерческого сектора Речь не о коммерческом секторе. Очень часто слышал хвалебные отзывы о ней, мол, очень красивый язык для души. И вот пока не могу понять, почему.
>>2707139 Синтаксис идеальный, не надо пиздеть. Совершенно интуитивный, семантически верный, позволяет создавать такие абстракции, что ебанёшься. Я люблю джаву за то, что она одна единственная раскрывает ООП в полной мере. Однако, непосредственно пишу именно на джаве, всё-таки, не благодаря моему порыву чистой воли, а из-за того, что на джаве написан майнкрафт. Не всё мне конечно из нее нравится, но всякие петухлины и рядом не стояли с джавой. Разве что сралу можно при желании заюзать, но это когда делать нехуй.
>>2707139 простой и логичный язык без 100500 синтаксического сахара или 7 значений символа * как в плюсах. Простая и продуманная стандартные классы, только в нескольких местах косякнули. Нормальная многопоточность искаропки чуть ли не с первой версии. В плюсах с этим до сих пор проблемы. Вобщем народный инструмент как визуал бейсик или делфи в своё время
>>2707237 Блять, ну тогда я тебя вдвойне не понимаю. Ладно бы был шарпеем залетным - эти овощи по уровню культурного развития недалеко от спрингокульта ушли. Но ты то должен быть достаточно взрослым дядей чтобы знать ответ на такие тупые и очевидные вопросы.
Очень интересует вопрос: есть ли здесь джависты, работающие на Дальнем Востоке? Существуете ли вы вообще, и если да, то расскажите, какова вероятность устроиться после окончания вузика? В приоритете Хабаровск, конечно, но и насчёт других городов интересно.
Хочу реализовать паттерн "Singleton", но у меня много полей, которые инициализируются в теле конструктора, вынести в методы в которых используются эти поля не получается. Сделать какой-нибудь метод init(); и вынести туда инициализацию ?
>>2709873 Урок твоего протыклассника? На отдельно установленный томкат деплоят war-ки. Можно конечно изъебнуться и деплоить туда .class-ы, в душе не ебу что там твой протыклассник придумал. Или четко следуй его инструкциям или возьми нормальный урок
>>2709726 Мамкин достигатор, который считает свою писанину настолько дорогой, что даже тему кода говорить не хочет "из соображений безопасности". Постоянно таких даунов вижу, приходят ко мне, спрашивают что-то по джаве, когда прошу показать код, то получаю "не)".
>>2710618 Если вопрос по спрингу - то это просто аннотация бина. Почему так называется? Видимо идет из прошлого, еще когда контекст в виде хмл описывали и там была автозагрузка через рефлексию
Не могу запустить в Eclipse сервер Tomcat - как понял из комментариев под уроком Наиля Алишева, должны совпадать версии спринга, timeleaf, jdk. У меня java version "20.0.1". Какие версии зависимостей мне нужны, чтобы сервер запустился?
>>2711068 я бы не стал запускать томкат из эклипсы. Скачай его отдельно, запусти. Потом собери .war и положи в /webapp томката, он его должен подхватить
>>2711068 Если ты понял из комментариев root cause, не проще ли спросить в комментариях и solution?
Или ты как себе все представляешь? Пришел, озвучил проблему, дал НОЛЬ инфы - ни логов ни эксепшонов, выложил какие то выводы, непонятно на чем основанные, достоверность которых неизвестна - ни ссылок на курс, ни ссылок на комменты. И че треду с этим делать? Ванг тут нет.
>>2709859 Возможно ты не промаппил свое приложение. Тобиж у тебя должен при компиляции кода появляться WAR файл, который надо класть в репозиторий webapps в папке с том катом. Посмотри по http://localhost:8080/manager/html Та в списке приложений должен быть твой helloworld
Собираешь код Получаешь war кидаешь в /webapps перезагружаешь томкат
мне щас на собесе лид говорил что если сделать объёкт иммутабельным, то можно не переопределять хэшкод и можно хранить и запрашивать такой объект в хэшмапе. Чот не работает. Я что-то не так понял или он не прав?
>>2712579 не, именно в разрезе что надо хранить координаты в специальном объекте. И типа в методе hash в хэшлисте есть магия, что хэш иммутабельных классов с одинаковыми полями получается одинаковый.
>>2712560 >то можно не переопределять хэшкод и можно хранить и запрашивать такой объект в хэшмапе
Скорее не прав чем прав.
Такой обьект действительно можно хранить в хэшмапе - так как хэшкод у него не переопределен, его хэш будет считаться как System.identityHashCode(). Хэшкод можно не переопределять (с одной оговоркой о которой ниже), но тогда стоит пынимать, что ключом в такой мапе будет конкретный инстанс объекта. На твоем примере, если сделать...
Coord a = new Coord(1, 2); map.put(a, 1);
...то...
map.get(a);
...вернет единицу. Но...
map.get(new Coord(1, 2));
...вернет null.
Теперь об оговорке. Рассмотрим твой код, где ты делаешь:
map.put(new Coord(2, 3), 1);
Вот эту вот единичку из мапы ты больше никогда не сможешь ни достать, не дропнуть по ключу (разве что через clear()). Ссылка на new Coord остается только в мапе, а у тебя на руках ее больше нет. Это как запереть замок и ключик выкинуть. В тяжелых случаях это - типичный мемори лик через мапу: когда ты льешь в мапу значения, но не имеешь возможности мапу чистить.
Так что даже в таких случаях переопределение хэшкода полезно.
Для хэшмапы важны гарантии консистентности equals + hashCode, плюс гарантии неизменности их результата. Если мутабельные поля не участвуют в вычислениях equals/hashCode, такой обьект еще может быть ключом.
Правда на практике делать ключом такой обьект все равно звучит как всратая идея.
Имеется wsl и путь /home/<user>/projects/<project-name>
Открываю идею которая стоит на диске С и пытаюсь открыть проект по пути выше. Проект не открывается, просто на мгновение появляется окошко идеи типо сейчас открою и сразу же исчезает. Кто-нибудь с таким сталкивался? Как фиксить?
>>2715808 Джакарта так то тоже по сей день релизится. А на груви последний раз евангелисты дрочили где то в 2015м. Его щас вообще юзают где либо, кроме билд пайплайнов на градле?
>>2716929 Вокруг Java ситуация неоднозначная. Со слов одних разработчиков, Java — это наше все. Другие удивляются, что Java еще жива. Я постарался посмотреть на ситуацию объективно и увидел следующее. Во-первых, известно, что приложения на Java работают в 1,5-2 раза медленнее приложений на C++. Вы согласны, чтобы ваш компьютер работал в 2 раза медленнее ради удобства программистов? Я — нет. Во-вторых, выяснилось, что хваленный Garbage Collector не только решает проблемы, но и создает новые. В частности, с работой GC связывают периодическое подвисание мобильных устройств, работающих на Symbian и Android. Также Java не лишена проблемы с нестандартными контролами.
Когда-то Sun (будучи тогда еще автономной компанией) строила грандиозные планы по захвату мира с помощью Java. Дескать все устройства от телевизионных пультов и микроволновок до DVD-плееров и мобильных телефонов будут иметь ПО, написанное на Java, а также взаимодействовать между собой с помощью одного протокола. Дескать Java-апплеты будут чуть ли не популярнее формата GIF.
Что получилось на практике? Апплеты оказались никому ненужными (за всю жизнь я на них натыкался от силы раза три). Среди десктоп-приложений Джаву сильно потеснил C#. Главным образом, за счет того, что технология .NET идет в комплекте с Windows, в то время, как Java еще нужно скачивать и устанавливать. Была надежда, что Java приживется на мобильных устройствах, но она умерла вместе с отказом Nokia от дальнейшего использования Symbian в пользу Windows Phone. Фактически, Java более-менее активно используется только на Android (и то, под него можно писать на C++) да под UNIX (куда, благодаря проекту Mono, активно проникает C#).
Дополнение: Недавно Java была исключена из Linux Standard Base. Выходит, даже в мире UNIX ей не рады.
>>2716945 >>приложения на Java работают в 1,5-2 раза медленнее приложений на C++ >>с работой GC связывают периодическое подвисание >>на Symbian >>Апплеты >>десктоп-приложений >>Nokia Как там в 2007?
>>Sun строила грандиозные планы по захвату мира с помощью Java Поэтому сделало ее бесплатной, отказалась продаваться микрософту и одним из условий продажи ораклу сделала бесплатность джавы? Совсем не микрософт, который разорил нокию и скупил патенты за бесценок, чтоб жить на проценты
Компания Sun Microsystems объявила о возможности бесплатного использования полнофункциональных версий сред разработки Sun Java Studio Creator 2004Q2 и Sun Java Studio Enterprise 8.
Для скачивания программ необходимо зарегистрироваться в Sun Developer Network (SDN).
Хочу сделать на Java Spring приложение - социальную сеть для любителей фильмов. Чтобы можно было обсуждать фильмы, выставлять им рейтинг, вступать в группы фанатов того или иного фильма, постить различные фан-арты.
>>2717273 Сори, но ты не в сишарпе где все это делается легко и элегантно с поддержкой инструментария от вендора, который является самой технологичной компании современности)
>>2684600 Это джава кастрированный. Вот в жс можно всунуть строчку, а потом впихнуть в нее цифру и вернуть цифрой из функции. А вы, ну жертвы бюрократии.
>>2716945 >с работой GC связывают периодическое подвисание мобильных устройств, работающих на Symbian Этот скуф-байтоеб и на 2011 году не шарил. Нативные симбиановские приложухи писались на плюсах, а жаба там была на уровне java me, как и в обычных телефонах. И как раз то, что оно писалось на плюсах и привело к тому, что там был очень неудобный sdk, отвратительная обратная совместимость приложений для разных версий симбиана и встроить магазин приложений было очень сложной задачей, нокия смогли это сделать только через 2 года после выхода ios на рынок.
Посоветуйте книгу по спринг буту. Я с ним постоянно работатаю, какие-то хуйни делаю, но иногда понимаю, что брям базу в нём не всю знаю, так что хочу книгу, которая мне прям с основ всё объяснит.
>>2718949 >>2718961 Если хочется представление сложить о том, как спринг изнутри анноташки обрабатывает, то это Борисов "Спринг-потрошитель". Но надо учитывать что анноташка анноташке рознь: если базовые Bean, Autowired, PostConstruct/PreDestroy - прероганива кор-фреймворка, с его биндефинишенами и постпроцессорами, то аспектные аннотации уже будут про кодогенерацию средствами CGLIB, а ORM'ные Entity - JPA и их референс имплементаций - каждая тема гуглится и изучается отдельно.
Если под "основами" ты имеешь ввиду "что спринг вообще умеет и как его можно варить чтоб было круто", но ничего банальнее каких нибудь книг по спрингу от маннинга/орили тебе никто не посоветует. Либо официальная документация - она довольно хорошо раскрывает пользовательский аспект.
По сути это Thread.sleep, но с тиками и разделенными методами выделения промежутка времени и непосредственно блокировки(block). Плюс там тесты лежат, тоже хотелось бы узнать, насколько я по еблански их написал.
>>2720045 А нахуя мне реальное время-то? Главное отличие условного, от реального, что я могу остановить его течение в любой момент. По поводу реализации есть что сказать?
>>2720058 Инкрементируя каждую секунду переменную t мы назовём эту переменную условной поскольку в любой момент можем как перестать её увеличивать, таким образом "остановив" её, или начать декрементировать повернувшись время вспять. Также может сменить время с одной секунды, до скажем 100мс, таким образом ускорив временной поток. Чел, помимо оффтопа есть что сказать? Просто посмотри код или не еби мозги, если впадлу.
>>2720097 Ну, ты зарезервировал три тика. Три тика прошли? Спеки я писать не умею нормально, к сожалению. Ещё как локи, их надо освобождать через relax().
По сути, есть временная шкала, которая задаётся количеством вызовов tick(). Теперь относительно этой шкалы мы можем обозначить метод reserve(), который берет нынешнее количество вызовов и протягивает вперёд момент, до которого могут вызываться тики. Т.е. если до этого было вызвано 30 tick(), то метод reserve(5) скажет, что значение 35 достигать не надо. Пока не будет вызван relax, который уберёт тред из учёта метода tick() или не будет вызван ещё один reserve(>0) тики будут блокироваться. await() же просто морозит тред до достижения тиков. Не знаю понятно ли....
>>2720097 Бля, непонятно пояснил. У тебя первый тред зарезервировал 2 тика. Более он ничего не резервировал. Программа ожидает, что он или сыбет через relax(), ну или зарезервирует себе ещё квантов.
>>2720120 >Тащемто пять - три в одном треду и два в другом. Или ты о чем? Они индивидуальны для каждого треда. Ну т.е. каждый тред резервирует тики под себя и tick() учитывает все это множество резерваций. В твоём случае: Tick: |1|2|.... TP1: |..2..| sout(...); TP2: |..3.......
>>2720145 Он не дошел до третьего тика, он заблокировался на втором
Кароч мой вердикт такой - я вроде бы примерно понял чего ты добиваешься, но для меня все еще странным выглядит то, что я прям обязан был сделать релакс из треда. Это неочевидно, небюезопасно, неудобно и как будто бы этого можно было избежать.
Я еще покурю это твое поделие, и может еще чего добавлю к вышесказанному.
>>2720154 >но для меня все еще странным выглядит то, что я прям обязан был сделать релакс из треда Воспринимай как unlock(). Ну или release() у семафора. Обычное дело, вроде. Хотя могу ошибаться
Время тупых вопросов вкатуна Читаю CoreJava Хорстманна, он там предлагает использовать nextline braces Хотя какой код не смотрел, да и в idea по умолчанию end of line. И стандарт у oracle вроде так. Таки кринж ли это? Как вы ставите скобки, анончики?
Почему не сделали нормальных консольных команд, чтобы управлять проектом целиком? К примеру, для сборки и запуска достаточно было бы набрать: dotjdk run
Ну, джавач, пришло время строить график постов в день за последние 5 (пять) тредов. Выводов, однако, делать не буду, слишком уж всё неоднозначно, Моё дело построить график.
Дали задание сделать контроллер возвращающий изображения. Уже прикрутил минио,все загружается пиздато. Проблема в том что возвращаю я byte[] а это вообще прочитать нереально,тупо огромная строка. В связи с этим вопрос,как возвращать пикчи из контроллера?
>>2721629 Если статика, возвращать её правильно через Nginx. А так, вроде, были какие-то варианты с инпутстримами, чтобы не загружать данные целиком в память.
>В связи с этим вопрос,как возвращать пикчи из контроллера? Никак? Неужели это так сложно понять? Ну не нужно статику раздавать из своего приложения на жабе, лол. Ну положи ты файл в свою файлопомойку, а в базе сохрани url или айди до файла. Его и возвращай. Или как уже рекомендовали, сделай хитрую проксю на nginx'е, которая будет таскать файлы из файлопомойки
Аккуратнее. Инкапсуляция - вобще не про сокрытие данных, это довольно распространенное заблуждение. Если ляпнуть такое на собесе какому нибудь душниле, можно и отьехать ненароком.
>>2722029 А вот и нет! Александр Шевчук как раз и говорит, что инкапсуляция - это про сокрытие информации, а не про объединения данных и кода https://youtu.be/nFNpDqrmCug
>>2722235 Ну кароч я понял, опять какой то эксгибиционист вывалил свой ООП-срам наголо.
Можно конечно похоливарить об ООП, это весело и задорно, но выше я всего лишь хотел предупредить вкатунов (которых здесь по всей видимости - подавляющий процент), что трактование инкапсуляции как средства для сокрытия данных на собкесе может быть чревато фейлом.
Почему для строк используется UTF-16? Ведь она тратит лишний байт на символы из ASCII, а они встречаются чаще остальных. С другой стороны UTF-16 недостаточно, чтобы хранить вообще любой символ юникода, т.к. уже надо 4 байта для этого. Не проще было бы использовать UTF-8 как в нормальных языках типа Go?
>>2722354 А я-то думал... К слову, а почему вместо изменения/написания сразу алгоритма хэша, который не будет выдавать ноль, оракл добавила флаг isZero? Причём столько мялась перед этим...
Я ответил что не закрытые пулы потоков, кеш без задания лимитов или инвалидации, статические коллекции живут всё время жизни приложения. Что ещё можно добавить?
>>2723046 Чаще всего память течет во время сексуального возбуждения. JVM чувствует страсть и сильные эмоции, думая о сексе или объекте своего вожделения. Вместе с возбуждением, появляется и напряжение в области живота, после чего можно заметить выделения на трусиках.
>>2723046 Какие ещё не закрытые пулы потоков? И че, много память течёт от них? Ещё коллекции статические... Как они тебе мешают? Я не понимаю, что значит течёт... Если ссылка есть, значит она нужна(?). Как по мне, это использование ссылок таким образом, что они пропихиваются в old gen, и будут ожидать полной очистки гц. Типо кривого линкед листа. Ну или использование паттерна object pool. Ещё операциями со string память может засраться.
>>2723104 Он жрёт больше памяти раза эдак в три. >>2723102 Ну значит так и задумано, не? Или это вопрос про то, что вроде ссылки есть но использовать мы их не будем?
>>2723110 не, так не задумано. Написал ты приложуху, она через сутки работы падает с ООМ. Смотришь мониторинг - потребление памяти растёт пилообразно. Значит течёт память. Куда смотреть что проверять?
>>2723110 Если на твой сайт зашёл пользователь, что-то поделал и тем самым увеличил ArrayList, то через пару дней память закончится и сайт начнёт тормозить. Придётся звонить админам и просить перезагрузить сервак. А если используешь LinkedList, то сборщик сам всё почистит и не надо сервак перезагружать.
>>2723131 вот я про эту ситуацию говорил. Если в пользовательском потоке создали и запустили тред пул. Пользовательский поток благополучно сдох, а тред пул продолжает жить
>>2723150 Бля, у тебя есть глобальный тредпул для обработки юзеров. Он начинается и завершается, соответственно при начале и конце работы сервера или че там. Нахуй его трогать вообще? Прикол тредпулов как раз в том, чтобы каждый раз не создавать треды, а ты какую-то хуйню делать хочешь
>>2723155 получил ты свой тред для юзера. И внутри хочешь сделать параллельное долгое вычисление. Создаешь тред пул, запускаешь, отдаешь результат. Если не сделать threadpool.shutdown(), то он будет продолжать жить, даже если ссылки на него нет
>>2723161 Да вродь есть. http://blog.rejeev.com/2009/04/analyzing-memory-leak-in-java.html Повторюсь, это вообще не головная боль джуна... Нахуй об этом спрашивать? >>2723164 >Создаешь тред пул Нет, не создаю. Параллельным долгим вычислением должен заниматься другой класс и это его проблемы, че он там освобождает, а че нет. А уж он и вовсе может использовать RecursiveTask, там не надо освобождать ниче. >Если не сделать threadpool.shutdown() Если один тред навечно заблокировался, то все равно "утечка" будет.
>>2723046 >не закрытые пулы потоков Формально оно конечно так, но это какой то всратый кейс - ты в лик уйдешь таким образом если совсем тупое начнешь делать, типа создания и прогрева новых тредпулов снова и снова в бесконечном цикле.
>кеш без задания лимитов или инвалидации Слишком абстрактно. Какой конкретно кэш?
>Cтатические коллекции живут всё время жизни приложения Ну и что? Классы тоже обычно живут все время жизни приложения - че теперь считать класслодинг мемори ликом?
Вот кейсы, встреченные мной из практики:
- Утечка памяти по хэшу: если ты используешь хэшмапу с мутабельным ключом, в тот момент как ты записал что-то в мапу и смутировал ключ, значение из мапы ты больше ни удалить ни получить не сможешь. Это наверное самый упоминаемый кейс утечки.
- Класслодер-лики: редкий случай, встречается в окружениях где есть кастомные класслодеры, типа OSGi. Если ссылка на класс, загруженный одним класслодером, просочится в класс, загруженный другим класслодером, при деаллокации первого класслодера его классы не соберутся сборщиком и останутся висеть в системе мусором. В тяжелых слуаях может дойти до того, что в одном рантайме один класс может быть загружен десятки раз, а его инстансы на instanceof <Classname> будут давать false.
>>2723969 Это Jupyter? С этим несколько часов возиться. Лучше сам выучи синтаксис джавы по какой-нибудь мурзилке https://metanit.com/java/tutorial/ и по ходу дела спрашивай здесь о конкретных проблемах, которые у тебя возникли.
Джавапетуханы, там скоро выходит новая версия нашего любимого джавапетухатника. Обещают сделать из Java нормальный язык, а не хуйню для написания энтерпрайзного говна для банков.
>>2724071 >Обещают сделать из Java нормальный язык, а не хуйню для написания энтерпрайзного говна для банков. Иш чаво удумали, хуй им. А можешь джепы по скидывать, че там введут?
>>2724071 Мне в текущем проекте пригодился бы Pattern Matching for Switch, который в 21ой выйдет из превью. Но 21ая выйдет в конце сентября, а мне проект в середине августа сдавать. Другой проект мы с 11 на 17 очень легко перевели.
Вот теперь думаем насчет спрингбут 3. Там все намного хуже с обратной совместимостью. И пока я не увидел нужных фичей в 3.1 по сравнению с 2.7.
>>2724038 >Jupyter Это пример нейронной сети на phyton'e. Трехуровневая с тремя входами и двумя выходами. У меня не получается в конце что-то. Веса корректируются, но в конце, после обучения, если взять получившиеся веса и подставить ко всем нейронам - сеть будет работать плохо. Хотя при обучении все веса встают нормально к разным вариантам входных данных...
>>2724595 >>2724601 >>2724757 GitHub начал по дефолту создавать главную ветку с названием main, в то время как IntellijIdea делает коммит в ветку master.
>>2724079 Почему лампасы из оракла решили, что var scope = new StructuredTaskScope.ShutdownOnFailure() лучше чем var scope = StructuredTaskScope.shutdownOnFailure() ? Первый вариант выглядит вообще не по джавиному.
>>2725329 >Почему я должен внутренний класс создавать через new
Всмысле - "почему". Инстансы всех классов (кроме разве что енамов) создаются через нью, внутренние - не исключение.
До чего ты доебался то, я не пойму? Всю жизнь так было - классы с большой буквы, методы - с маленькой. Это класс? Класс. Все, вопрос исчерпан.
Ну вот решили почему то ораклы обьявить этот класс внутри интерфейса. Первый раз чтоли? Еще раз тебе говорю - если тебе так сильно режут глаз шарпистские вайбы, просто статически проимпорть StructuredTaskScope.*
>>2725703 Да. Я за год прочитал двухтомник Хорстмана, посмотрел курс лекций по джава-кору на ютубе, прошел курс на степике и 60% стрека на hiperskills. Потом еще за 8 месяцев прошел по maven+spring-core/boot+postgres+hibernate+spring data+http\rest+spring-mvc+html+js+docker+git/github по слитому отусу, баелдунгу и разным статьям на хабре. И написал три пета. Потом 3 месяца ходил по собесам/стажировкам, залетел на курсы епама(во время перевода на стажировку они слились из рф). Ну и в итоге имел штук 5 попусков на техсобесе. И 3 офера в галеры. Две были донные(в одну я походил на стажировку и свалил на испыталке, в другую не стал принимать оффер). Ну и была не совсем донная галера, где я полтора года уже работаю.
>>2726343 Хуясе ты хтонь вспомнил. Я на солярке последний раз в 2012м работал.
Что забавно, у солярки времен Sun, помимо дефолтной CDE в качестве десктопа и оконного менеджера, существовала полностью функциональная альтернатива в виде Java Desktop System... которая на самом деле не была написана на Java, кек.
Дженерик тип List<> - это класс, который реализует интерфейс Comparable, а Comparable должен иметь дженерик тип класса, который является супер классом класса, который реализует Comparable ?
>>2727082 Статика живёт столько же, сколько сам класс. А класс живёт столько же, сколько живёт классдодер, который его загрузил. Чаще всего это время равно времени жизни процесса. Но не всегда.
>>2727124 Если по простому, для сортировки листа элементы этого листа должны впринципе поддерживать такое понятие, как сравнение себя с себе подобными. А super в дженерике потому, что если сравнение поддерживается для класса-родителя, для класса-потомкам оно тоже подойдёт.
>>2727535 Можно написать скрипт, при запуске которого будет сохранятся папка проекта в отдельную директорию и к названию сохраненного проекта будет добавляться дата.
Во время собеседования, после того как вы ответите на вопрос интервьюера, говорит ли интервьюер, правильно вы ответили или нет ? Или вам просто задают следующий вопрос ?
>>2727575 Собес - это не тест с правильными и неправильными вариантами ответа. Это диалог с целью оценить кандидата. И вопросы там обычно не имеют единственного правильного ответа, они скорее дискуссионные. типа двум людям задали один и тот же вопрос, и оба ответили верно, но первый смог сказать только пару предложений, а второй рассказал такое, о чём сам собеседующий не знал. Хотя когда чел несёт полную хуйню, ему обычно сразу об этом не говорят, только подводя итоги в конце собеса. Но можно понять по реакции, понравился ли им твой ответ.
Есть вот такое вот АПИ. Оно может принимать одну, либо несколько валют. Ответ соответственно тоже может содержать либо один, либо несколько объектов. Пример ответа на пикрил.
Как его правильно парсить, если не знаешь точное количество объектов в поле rates?
Подскажите пожалуйста, когда мы наследуемся от другого класса и не переопределяем ничего, мы просто перенимаем состояние и поведение супер класса себе, или просто имеем доступ к ним ? То есть, получается 2 класса с одинаковым состоянием и поведением ?
>>2729667 вобщем у тебя объявление класса внутри другого класса. Либо вынеси этот класс наружу, либо сделай статичным. Приличным тоном считается каждый класс в отдельном файле
>>2728365 Классы и класслодеры - такие же обьекты как и все остальное. Если на них ничего не держит референс, они могут быть почищены GC.
По умолчанию в SEшном рантайме такого по факту не случается никогда - все классы грузятся тройкой стандартных bootstrap -> extension -> system класслодеров, и рантайм их не отпускает до конца выполнения приложения. Но всегда можно породить свой класслодер, и через него грузить классы по своему. Отпустив свой класслодер, отпустишь и все загруженные им классы, и они станут доступны для сборки GC при условии что на них больше никто не держит референс. Получаются какбэ зайчатки плагинной архитектуры с загрузкой/выгрузкой плагинного кода по требованию. Многие тулы и фреймворки пользуются этой фичей, например Java EE контейнеры и OSGi.
Почему нахваливают систему работы с гитом в идее? Нифига же неудобно! Количество незакоммиченных файлов не отображается, статус тоже нигде не виден, запушил ты или нет - можно только догадываться. Вообще работа с удаленным репозиторием минимальна, проще самому в консоли все команды писать, чем пользоваться этой подделкой. Спрашивается, почему эту идею насильно продвигают везде? Функционал у неё явно не тянет на деньги, что за неё хотят. Да и ресурсов жрёт не мало, постоянно лагает по непонятным причинам. Есть куда более удобные и легковесные решения, а главное полностью бесплатные, но нам всучивают эту идею.
>>2730058 >>Количество незакоммиченных файлов не отображается Сами файлы отображаются, нахуя мне их считать?
>>статус тоже нигде не виден зеленый - новый файл, синий - незакомиченный
>>запушил ты или нет - можно только догадываться. В чем смысл не пушить сразу после коммита? Да и подсвечивается на самом деле в виде стрелочки в правом нижнем углу.
>>проще самому в консоли все команды писать Раз тебе так удобнее - пиши
Там есть неудобные вещи, но ты ни одной реальной не назвал.
>>Да и ресурсов жрёт не мало, постоянно лагает по непонятным причинам. у тебя 2гига 2 ядра? хром жрет в разы больше
>>Функционал у неё явно не тянет на деньги, что за неё хотят тебе то откуда знать, мух?
>>идею насильно продвигают везде жри эклипс, он бесплатный и даже поддерживается
>>Есть куда более удобные решения нет
>>2730138 >>надо как-то раздобыть себе личную версию ультимейта. учебная, триалка, тестовая - выбирай любую и учись, если тебе действительно это нужно
>>2730288 В VS Code отобржается количество незакоммиченных файлов, также на нижней панели отображается сколько файлов не запушенно. Так что вс код по удобству работы с гитом лучше идеи. Кроме того там есть плагины для работы с джавой и даже со спрингом, а это уже превосходит функционал бесплатной идеи. К тому же вс код прекрасно работает на 2 ядра 2 гига.
Почему protected даёт доступ внутри пакета? Получается уже ни какой не защищенный, а виден дофига кому. Логичней было бы сделать только доступ для наследников, а всяким пакетам - фиг.
>>2730315 Protected - антипаттерн, его давно пора задепрекейтить и по умолчанию выключить, а для включения сделать специальный флаг компилятора, которому надо передавать полный список файлов, где разрешено использование protected. Туда же проверяемые эксепшены.
>>2730593 А чейта? Это ж по сути апишка управления онли для наследников класса. Хотя её можно достигнуть и просто заприватив все конструкторы... AQS, например... Есть что почитать по этому поводу?
>>2730302 >>отображается сколько файлов не запушенно Если тебе обязательно каждую секунду знать сколько точно файлов у тебя в пуше - то не работай в идее. Другим это не нужно. Даже плагинов на эту тему не делают, потому что похуй.
>>Так что вс код по удобству работы с гитом лучше идеи. Лучше, но не из за счетчика файлов. Ищи дальше.
>>это уже превосходит функционал бесплатной идеи. у меня ультимейт