Это копия, сохраненная 15 июня 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вики по вкатыванию в джаву: https://github.com/java2ch/java-thread/wiki
Предыдущий: >>2651134 (OP)
Недавно нужно было прочитать код с гитхаба, а там котлин. И не понял многие моменты сахара. Also, with, apply всякие.
Думаю поучить котлин. А потом можно и в один из сервисов запулить.
В чем цимес котлина на спринге? Во многих вакансиях втречаю котлин. Наверно в 20% вакух на спринге указывают кроме джавы котлин.
Но на работе никто на котлине не писал.
Он учится один день. Основная проблема с котлином в том, что ты становишься привязан к IDEA
Тимлид у нас с гошкой играется после работы. Говорит, что с жабы кроме нее на что-то переходить не имеет смысла. Но мы на спринг и жвм сильно завязаны. Гошку даже он не сможет в наши проекты затащить, хотя он умеет разводить менеджеров, что ему нужна всякая хуйня типо noSql-баз.
А котлин, если в нем есть толк можно протащить.
>>684241
Мы и так на идею завязаны, это не проблема. Проблема разве что, что ci придется менять под это дело, но оно решаемое.
Только вот хочется узнать в чем плюс котла. Ну null-safety слышал, сахар, укорачивающий код - видел. Но в чем прикол - не прочувствовал.
MUTABLESTATEFLOW
Говно это вообще хуйня от соевых даунов, которые хотят показать, как они сильно готовы лизать очко жидопассу и гуглу, что аж про наличие эксепшенов и дженериков ради барина готовы забыть.
Подрывом первым постом удовлетворен. Гимн джава треда это вой горящих пердаков шарпошколотв
>Он учится один день
Проиграл с тебя, чел. На одни корутины и понимание как это устроено под капотом и как писать идиоматичный код уйдет минимум год. И нет, ставить suspend в сигнатуры методов - это не понимать корутины. Вообще заметил, что помойные джавамухи до последнего сидят на своей гнойной жаве и отказываются учить что-то новое. А когда их палками гонят изучать Scala или хотя бы ко-котлин, то у них происходит разрыв шаблона и они срут на котле как на джаве. Даже на реддите был пост как джавадебилов посадили писать на гоулэнге и те и там успели насрать неидиоматичным кодом "как на джаве".
Деформация везде бывает. Есть в команде выпускник, бывший олимпиадник, который хотел на плюсах писать, но не смог устроиться на норм зепку и вкатился в джаву.
Есть бывший питонист.
Есть несколько бывших 1-сников.
У всех их бывший стек оставил отпечаток. И они пишут/писали на жабе, как на своих предыдущих языках.
Вспомнился спригодебил, который пару десятков тредов назад затирал, что на изучение спринга уйдут годы. Это не ты ли был? А то по уровню интеллекта похож, раз ты то, что учится за час раскуривал год.
Это будет связано с машинами и с дележом.
Если говорить о интересующих меня вакухах - более менее современный стек - жава 11/17, микрочелики, кафки, куберы, то наверно даже треть имеют упоминание котлина.
>более менее современный стек - жава 11/17, микрочелики, кафки, куберы
Это буквально 1-2% всех вакансий на помойной жабе. В основном это Java 8, монолит где насрано. Никаких тебе куберов - все деплоится руками на виртуалки. Докеров нет и разворачивают прямо в томкате или джейбоссе варки
А нужно ли образование, чтобы найти работу Java-программистом?
Да? А как сильно и каким образом?
Не выдумывай. Я сам на жаба 17 и микрочеликами работаю. И когда устраивался еще тоже половина вакух такая была.
Легаси с варками и внешним томкамом это тоже процентов 20. А жаба 8 и старше ну дай бог 40.
Бюрократия и похуизм хозяина и работников, но это и у нас есть
Лум не появился по факту. Появление - это выход в лтс + год на впиливание в нужные либы.
Лум появится для прикладного разраба в конце 24 года. Причем только для тех, кто быстро переходит на новые версии либ и жабы.
>+ год на впиливание в нужные либы
>+ год
Ну-ну, попустись! Лет 20-30 - и это ми-ни-мум. В целом, лум ничего не решает. Это попытка догнать C# с его async/await. Но время уже упущено. Помойные разработчики Java только и делают, что тащат всякий сахарок, не забыв при этом обильно полить его говном. Ведь по другому в джава-мире нельзя.
Догнать в чем? Рынок шарпов, как был 20-30% от рынка жабы 15 лет назад, так и остался.
Большие конторы сильно и плотно завязаны на жвм. У многих есть своя жвм. У очень многих если собственные хаки опенжвм.
Нахуя им на мыло с дотнетовской виртуальной машиной переходить? Ты вот за последний год как попугай про какой-то переход на шарп пишешь. А примеры то есть, кроме ооо залупец на 10 калек?
>А примеры то есть, кроме ооо залупец на 10 калек?
Проиграл с блаженного, лол. Тем временем тиньк сворачивает проекты на жабе и растит команду C#. Озон выгнал на мороз всех джавистов и скалистов и пишет онли на гоулэнге и сишарпе.
Кто блаженный-то...
Ну на гошку иногда имеет смысл поменять, гошка это другая парадигма.
А уж замена жявы на шарп это или выдумки или кодовая база на жяве была микрокопическая.
>гошка это другая парадигма.
Все так. Гоулэнг - это парадигма скорости разработки, надежности и простоты понимания кодовой базы. Парадигма жабы - это раздутый штат говнокодеров, дерьмовый код, постоянные баги, жор ресурсов и просранные сроки.
Это частично так. Но это обусловлено, что на джаве уже реализовано куча всего. Для почти любого тырпрайз проекта можно найти готовый код, собрать его вместе, сконфигурировать и написать столько бизес-логики поверху сколько тебе надо.
И куча багов известна, потому что кодом на жабе пользуются в продакшене и находят баги.
В Java есть баги???!!! :O
Тем временем тиньк сворачивает проекты на жабе и растит команду C#
пруфы? хх тинька. java - 59 вакух, scala - 15, .net - 23, golang - 14.
>Озон выгнал на мороз всех джавистов
А там было серьезное количество джавистов? В каком году?
https://habr.com/ru/companies/ozontech/articles/684422/
>Тимлид у нас с гошкой играется после работы.
А я с писькой играю после работы, но никому об этом не рассказываю же.
Что я вижу. Они распилили помойный монолит на сишарпе на микросервисы на гошечке.
https://youtu.be/eJ5RB2QFy8Q?t=187
Потом окажется, что и про сам язык и экосистему он так же врал, что шарповская орм не волшебная пилюля, а такая же залупа, как и орм в других языках.
Но в этом разбираться само собой никто не будет и ловит шизика на лжи соответственно тоже. Это реально нужно пописать на шарпах, никто на это время тратить не будет.
А мог бы на проект ее затащить.
Что за спринге? Хайповая тема?
А как смотреть, чтоб применимо?
что-то происходило ?
То есть, аннотация должна менять поведение метода. Как это сделать ?
переходить на Пайтон
3 пик нравится очень...
Нужно реализовать обработчик с помощью рефлексии.
А мне письку дрочить нравится, но я же никому об этом не говорю.
Ты ни разу не сосал, как ты можешь говорить?
1) Имеет ли для меня смысл переката в java? Постоянно мучают комплексы неполноценности будто пишу не на настоящем языке. К тому же у нас go в некоторых микропенисах, который как бы намекает что пыха не справляется
2) Возможно ли вкотиться не потеряв в зэпке, или пиздос-пиздос не возьмут перекатчика и только в джуны? Опыта работы с либами нет, разве что делал в spring'е петпроджект как-то.
3) Вы вообще на джаве довольны джавой, мыслей что надо упрыгивать нет?
1) С любого языка имеет смысл перекатываться в божественный жаба-мир.
2) Хуя манямирок. Ты бы надеялся, чтобы тебя вообще джуном после полугода дроча джавы по 12 часов в сутки взяли.
3) Нет, обожаю джаву, на все остальные языки смотрю как на легаси/кастрированное говно.
> Ты бы надеялся, чтобы тебя вообще джуном после полугода дроча джавы по 12 часов в сутки взяли
Не ну пиздец =(
> 1)
Может, тебе ближе Go?
> 2)
Сложно. Перекатиться на миддла конечно же можно, но с сохранением зепки будет сложнее, хотя тоже возможно.
> 3)
Доволен только работой на джаве. Для себя на ней вообще ничего не пишу. Поглядываю на плюсы (оч сложно перекатиться) и шарп (меньше работы).
>Может, тебе ближе Go?
Ну хуй знает, я пробовал го но мне кажется что это немного понадусеровый язык который пытается сделать революцию в мире компьютерного айти с отходом от ООП, а на деле получаются микросервисы.
Причем причина по которой на го пишут микросервисы выглядит примерно так:
1) Большие проекты на го хуйня и ебаный в рот, фреймворков нет.
2) Очень пиздатая и большая стандартная библиотека. У тебя 3.5 зависимости будет в проекте. Мэйнтенетса считай 0.
Вам в /b.
Там есть все что необходимо для написания микросервисов.
Зачем облизывать кожу другого человека ? Лол.
>Постоянно мучают комплексы неполноценности будто пишу не на настоящем языке.
Так жаба тож неполноценный язык. Единственный полноценный язык - это Си Шарп. На нём можно писать абсолютно всё. В жабе ты ограничен спринг бут бэкендом
В Java есть всё. Даже поговорка есть: что написано Javом, не перепишешь и шарпом.
Да нихуя не всё. Я постоянно допиливаю новыми классами свою копротеку с общими классами (что должно быть в стандартной либе).
Шарподаун, не влезай.
Почему у тебя <ALTERNATIVE_TYPE> и <METHOD_TYPE> перед возвращаемым типом? Что это такое?
Это типы метода. В отличии от типов объекта, определяются в момент вызова метода, а не создания объекта.
Это точно чистая Java 17? Как на английском называется такая штучка? Что-то я такое не встречал за все те 2 дня что учу джаву.
Это зависит от того, в какой момент нужно дёргать. Если у тебя Supplier, то ты определяешь, когда происходит supply. Иногда могут появляться ситуации, когда момент поставки может определяться тем, кто получает объект, а не тем, кто отдаёт его.
Спасибо
Согласен, хуйня, писал после полутора суток без сна. Вот так получше.
че за хуйня?)
Нинужна. В жаве функциональной параши ровно столько, чтобы такие деды как я могли в ней разобраться. Хотя даже в ней можно переусложнить до полной нечитаемости.
Как делать ревью на языках, где функциональны много я вообще хз.
Stream API == Струя / Струмень
Thread & Runnable == Поток
Всё верно понял?
Это не классическая функциональщина, которую с жиру лепят, кстати. Instructor это вынужденная мера, так как в императивном стиле оригинальная задача в принципе нерешаема.
Хотя эта хуйня только запутывает ещё больше и звучит смешно.
хуйню без задач написал и рад
Книга "Head First Паттерны проектирования" была выпущена в 2004 году и была обновлена в 2020 году. Хотя основные принципы проектирования остаются неизменными, новые технологии и требования рынка могут привести к изменению некоторых паттернов и подходов к проектированию.
Тем не менее, книга "Head First Паттерны проектирования" по-прежнему считается одной из лучших книг по этой теме. Она предлагает уникальный и интерактивный подход к изучению паттернов проектирования, используя практические примеры и головоломки для помощи в понимании теории.
Таким образом, книга "Head First Паттерны проектирования" по-прежнему актуальна и может быть полезной как для начинающих, так и для опытных разработчиков, желающих улучшить свои знания в области проектирования.
Адрес свой говори
Может, он как-то через Windows вызывает по какому-то своему протоколу. А почему браузер разрешает такую хуйню?
Или JUDEA какой-то сервер открывает что ли. Тогда какого хуя Windows позволяет такое делать?
я те щас страшную тайну открою но магаз плагинов идеи тож знает че у тебя зопущено...
Пиздец... Это везде так или только на Windows?
Пользуйся эклипсом, нечего всякую малварь ставить. Странно, что на IDEA не ругается антивирус.
И подсветка синтаксиса в Eclipse лучше.
это хуйло про нуллы
Перекатывайся в шарп, в нём есть string.IsNullOrEmpty().
Если ты не знаешь про хуки то тебе еще рано вкатываться в профессию. Почисть мне сапоги.
У меня нет челюсти, я круглолицый скуф.
Я почищу свои ботинки твоим ебалом.
Не петушарпер, но это контринтуитивно, так как часть логики совершенно незаметно спрятана в ||. Если заменить на | (зачем-то), то будет нулл пойнтер эксепшон.
Тебя весной в детстве выебали, что-ли, что ты с этим тыщу раз обоссаным спрингом носишься постоянно?
Объясни мне, мань, нахуя мне думать о разнице || и |, когда я хочу выяснить, является ли переменная null'ом или пустой строкой?
Ясно, гуляй.
>тупо просто и понятно
Тупо - да, все остальное хуета. Половина проектов пишет свои StringUtils из-за того, что Браен Гёц занят экспериментами с Sequenced Collections и прочей хуетой. Так блять сложно добавить пару методов в String и Collections? Весь Commons Lang существует только потому, что аффтары JDK не могут добавить пару полезным методов которые нужны в 99% проектов.
Да просто аффтары жабы пытаются сохранить прямую совместимость, т.е. чтобы код на Java 20 после минимальных правок компилировался и запускался на Java 8.
Не-а, они не просто так добавляют в каждую версию всякие приколюхи типа List.of() и stream#toList(). Их убирать максимально больно, да и писать на старой джаве, когда знаешь, что они есть, без них, тоже больно.
Вот только тянуть commons lang ради одного метода не все хотят, многие предпочитают написать сами.
В Котлине или Go инстанс метод может работать с null объектом не выкидывая NPE.
Спизданул по ебалу твоей мамки, проверяй.
Потратил год на обучение, сейчас в расстройстве от рынка вакансий
Ух бля, какогото неведомого ебаного интерфейса, нужного одному анону, нет в стандартной либе. Все - стандартная либа неполная.
Сука, рофл, в стдлибе джавы столько очевидных мест, до которых можно было бы доебаться. Анон как всегда доебался до ебанины какой то никому не нужной.
Выше в треде было. Надо, чтобы мапа очищалась сама, а не срала в кучу неубирающимися записями. И всё это с приемлемым уровнем абстракции.
Да по сути ничем, на самом деле и его можно было бы использовать до этой задачи. Просто я привык всегда решать задачи без костылей (надо сделать X — значит сделаю X), и мне в голову не пришёл WeakHashMap.
Хули тогда хулу на стдлиб джавы разводишь, если ты - сам себе злобный буратино, и открыто признаешь свою ориентацию?
Ты жопой то не крути. Выше ты уже признал что его "можно было бы использовать для этой задачи", и что тебе "в голову не пришёл WeakHashMap", что уже в сумме со всем тобой вышесказанным выдает в тебе клоуна-пустобреха. Грош цена после этого твоему мнению, дешевка.
Применение WeakHashMap для моей оригинальной задачи выглядит как пикрил.
Я сейчас подумал, WeakHashMap на самом деле бы и не подошёл тут, даже если очень сильно захотеть. Здесь важно, чтобы данные сохранялись в хешмапе ровно столько, сколько они валидны (или как можно ближе к этому), а не когда попало очищались.
Ну тыж, клоун, нормально обьяснить суть задачи то не в состоянии, способен только гнать своим языком гнилым на то, в чем сам не сведущ. Говоришь "garbage collector для Map" - тебе дали. А теперь вдруг надо другое - какой то откат игроков который к термину GC отношения имеет - ноль.
Короче - страдай, тебе полезно.
Так GC и не откатывает непосредственно. Я задачу решил через Map<Player, CircularFifoQueue<Location>>. GC тут имеет опосредованное отношение, его задача удалять вышедших игроков из этой карты, чтобы не было утечки памяти.
Все клещами надо вытаскивать блять.
>его задача удалять вышедших игроков из этой карты, чтобы не было утечки памяти.
И че тогда ты выдумываешь? Игрок выходит с карты - перехватываешь событие выхода и дропаешь его с мапы. Все. А если ты такой упертый, что хочешь делегировать чистку этого игрока джавовому GC (хз нахуя - такая постановка задачи априори - говно, но похуй), то все равно неясно хули ты доебался до WeakHashMap, потому что под кейс "удалять тех игроков, что попали под каток GC" WeakHashMap самым лучшим образом из возможных подходит.
Или ты растовый? Ждешь что за тебя все подчистят при выходе из контекста?
>Игрок выходит с карты - перехватываешь событие выхода и дропаешь его с мапы.
Недостаточно ООП-шно. Я хочу просто создать карту и чтобы она чистилась сама.
>что хочешь делегировать чистку этого игрока джавовому GC
Так это ты мне предложил использовать WeakHashMap зачем-то, потому я тебе и кинул пикчу с хлебным троллейбусом.
О, анон! Какие проекты сделал?
>Недостаточно ООП-шно. Я хочу просто создать карту и чтобы она чистилась сама.
Че у тебя за каша в бошке? При чем тут ООП? Парадигма с наличием/отсутствием GC не связана никак. То что ты рисуешь - твои локальные хотелки, не имеющие никакого отношения ни к ООП, ни к джаве, ни к ее стандартной либе.
>Так это ты мне предложил использовать WeakHashMap зачем-то
Ёб твою мать, кусок ты хлебушка... Ты сам выше (>>684784) формулировал свою цель как "Garbage collector для Map", дополнив (>>686257), что "надо чтобы мапа сама очищалась", а теперь я еще и виноват оказался. Короче - обоссал тебя. Учись нормально и связно диалог с людьми вести, клоун.
В смысле причём? Когда ты связываешь глобальный контекст событий и мапу напрямую, это нихуя не по ООП.
>ни к ее стандартной либе
Ясен хуй не имеет отношения, ведь того, что я делал, в стандартной либе нет, лол. А стандартная либа должна включать в себя абсолютно всё неспецифичное для конкретного проекта.
>Ты сам выше
Я говорил, что мне нужно присоединиться именно к тому общему GC, что объекты без ссылок удаляет? GC разные бывают.
>В смысле причём? Когда ты связываешь глобальный контекст событий и мапу напрямую, это нихуя не по ООП.
Бляяя, пиздец тебе в бошку насрали, я ебал... Хз даже с чего начать обоссывать этот стейтмент бредовый... Это даже не Бугаенко, это какие то совсем уж локальные маняфантазии.
>А стандартная либа должна включать в себя абсолютно всё неспецифичное для конкретного проекта.
А вот хуй те в рот, не должна. Не нравится - пиздуй нахуй. В джаве без тебя хватает проблем с жирностью стдлибы, когда из-за того что надо держать обратную совместимость на косяки предков, приходится держать в апи всякий бред до победного. Из-за стдлибы все-в-одном с десяток лет уже внедряют лум, хотя все могло бы окончиться за релиз, если бы джавовое конкарренси с его Object::wait/notify и прочими хуйнями не было бы частью стдлибы. И новые языки типа Котлина со старта учитывают этот косяк, вынося свои корутины в отдельную зависимость.
>GC разные бывают.
Я не ебу какие у тебя в бошке GC разные бывают. В джавовом рантайме GC работает один на процесс.
>А вот хуй те в рот, не должна.
А я хочу всё и сразу и чтобы удобно!
>Я не ебу какие у тебя в бошке GC разные бывают. В джавовом рантайме GC работает один на процесс.
Расшифруй аббревиатуру и удивись.
>А я хочу всё и сразу и чтобы удобно!
Тебя чатгпт заменит. У нее нет бредовых хотелок.
>Расшифруй аббревиатуру и удивись.
Поучи меня еще, щенок
Нет.
Раньше по молодости казалось что паттерны - маст-хэвная хрень, но с опытом пришло понимание что это просто каргокульт.
Паттерны это очень лампово.
Нет. Цитируя джавадоку:
>Like most collection classes, this class is not synchronized. A synchronized WeakHashMap may be constructed using the Collections.synchronizedMap method.
Жидбрейнзы ссучились, забей. Щас ответят ченить в духе "мы идентифицировали вас как пользователя из РФ и поэтому ничем не можем вам помочь", и закроют таску. Прецеденты были.
Жидбрейнзы ссучились, забей. Пометят как дубликат и забьют хуй. Прецеденты были.
Иди GC для мапа пиши лучше, знаток.
https://docs.oracle.com/javase/specs/jls/se8/html/jls-6.html#jls-6.6.1
Читай просвещайся
Тем что твоему костылю вполне достаточно package(или никакого) модификатора.
Только не говори что ты эту хуйню еще и в отдельный артифакт вынес потому тебе и нужен паблик доступ.
Ебтваюмать.
Да ты точно поехавший, выносящий свое говно в отдельный артифакт.
Начальник, блядь, хули вы меня с поехавшим посадили.
Пили вилкой ГЦ для мапа, сука, пили-пили-пили
В ультимейте пофиксили, а в коммунити решили оставить.
Даже если 100.01 для ждуна это норм
В ДС это МРОТ для разраба.
Нет, зато там всё жёлтое.
Service s = new Service();
Потом у s вызову метод и результат запихну в assertEquals это норм? Впадлу ебучие when писать
Для этого кстати и рекомендуется не использовать инжект через сеттер с автовайред. А инжектить в конструктор.
Потому что в тесте ты можешь подсунуть свой экземпляр в конструктор.
Например у тебя есть интерфейс Hui и имплементация HuiImpl.
Если ты делаешь конструктор
Service(Hui hui) то у себя в тесте ты можешь сделать HuiTestImpl и засунуть его в конструктор.
И никаких моков не нужно.
Делой как я.
Как только нужно создать новый метод или бин - сразу на него делой тест.
Получил задачу. Спроектировал новое дерево классов.
Создал интерфейсы бинов, описал их апи.
Сразу на интерфейс накидал тесты.
Это не совсем тдд но лично я всегда так делою.
Разные уровни и разные инструменты.
Чистый юниттест можно сделать без всяких моков на одном junit/testng
Юниттест с методами других классов - добавляем mockito.
Нужны интеграции - добавляем wiremock.
>Если ты делаешь конструктор Service(Hui hui) то у себя в тесте ты можешь сделать HuiTestImpl и засунуть его в конструктор.
>И никаких моков не нужно.
Видал я такие тесты. Такие тесты - одна из причин почему я не признаю сервисный спрингодизайн, сорян.
Типа, как оно обычно происходит? Имеем какой нибудь сервис-интерфейс, в нем обычно несколько десятков методов. И какой нибудь второй сервис-интерфейс, с имплементацией, зависящей на первый сервис. Надо протестить имплементацию. И вот теперь перед тобой два стула:
- Или сиди по чесному пиши фейковую имплементацию на первый интерфейс и все его несколько десятков методов, как будто тебе больше делать нечего. Причем честный фейк накатать (если честно учитывать важные для тестируемого класса инварианты) - не всегда тривиально и компактно по коду, а логика фейка в свою очередь тестами не покрывается (ну кто же тестит тестовые классы, что за оксюморон, да?), следовательно, является источником багов уже в тестовом коде. Как раз в этом месте у новичков и возникает идея - "а может ну ее, эту писанину? И просто вместо юнитов тестировать сразу интеграционно? Так будет даже честнее, как будто..."
- Или пиши пиздливые фейки, где воруй, убивай, забивай на инварианты, стабь методы, аргументы, лишь бы оно делало вид что работало для тест кейса. Как вариант - вместо фейков юзай моки на мокито. А потом получи на основе этого безобразия нестабильный ломучий тест, который тестит околонихуя, и лежит дополнительным бременем на команде, поддерживающей проект.
Если бы вместо спрингосервисов практиковались компактные компоненты с публичным контрактом не больше одного двух-методов, написать на такой контракт фейк было бы плевым делом. Но в спринге так не принято, в спринге что ни класс - то сервис, а сервис - тупо сборник процедур, с автоварью как аналогом сишного инклюда.
Че ты несешь, быдло? В чем проблема просто моки заинжектить и прописать перед тестами, что им делать в зависимости от ситуации
>быдло
Хуя пичот. Че подорвался то? Я оскорбил твоего Бога?
>В чем проблема просто моки заинжектить и прописать перед тестами, что им делать в зависимости от ситуации
В том, что моки - просто костыль пиздабольский. Твой сервис оригинально скаплен не на конкретные методы которые ты мочишь в тесте или тест кейсе, а на контракт другого сервиса, который ты инжектишь. И он вправе юзать этот контракт по полной. О чем ты никогда не вспомнишь тащя в тесты моки. Сегодня ты замочил один метод, а завтра импелементация поменяется и дернет другой - тест фейл. Сегодня ты заложил в мок одни ожидания, а завтра сервис на них работать перестанет - тест фейл. Итог - как в сценарии номер 2: ломучий никому не нужный ничего не тестящий парашный тест.
Че лыбишься дурачок? Тест фейл выше - 0один хер не про багу не в твоем приложении, а про багу в твоем говносьюте. Поэтому кабаны вам-дуракам и режут человекочасы на юнит тесты - хули от них толку если они баги в приложении не ищут?
интересная мысль. Т.е. вместо OrderService с 2к+ строками кода делать CreateOrderService, UpdateOrderService, ChangeOrderTimeOrderService с 1-2 методами внутри?
Сделать Order с 300 строками кода максимум.
Типа того.
Но тут мало просто побить сервисы на такие микросервисики, нужно по пути еще пересмотреть несколько догм. К примеру, первое с чем ты столкнешься на этом пути - инжектить такие компоненты спрингом станет люто неэффективно и неудобно. Гораздо проще и эффективней их просто композить друг в друга в точках входа (и в тестах), а спринг оставить лишь для того, чтобы он заведовал репозиториями и контроллерами. Для спрингокульта подобные откровения невыносимы, поэтому я не уверен что хочу обсуждать детали. Выше я просто попытался обьяснить, почему юниттестинг имеет тенденцию вырождаться в какую то дичь.
Уже все давно знают, что единственные правильные тесты, это те, в которых ты поднимаешь весь контекст вместе с базой и прикидываешь эндпоинты, остальное нахуй не нужно, только чтобы покрытием повыебываться
Ну кстати претензий к такой позиции у меня вообще ноль, без иронии. Она хотя бы честная.
Типа - "ну не умеем мы писать юнит тесты, и не видим в них смысла - и хуй с ними. Сосредоточим усилия на API или E2E тестах". Деды двадцать лет назад так делали, и все работало - хайрили отдельную QA команду, и та им мейнтейнила какой нить жирный регрессионный сьют. До сих пор много где такое практикуют.
Я вот так и делаю. Пишутся раз в 10 быстрее юнит-хуюнит-мок-тестов, но некоторые недовольны тем, что якобы такая хуйня только для детекта факта бага годна, а местоположение бага не подскажет. Как контрить?
Контри отсутствием логики в утверждении. Если юнит тест способен задетектить баг, до фейла в интеграционных тестах дело бы априори не дошло бы. А если дело дошло до интеграционных/API/E2E тестов, то это уже предполагает что юнит тесты ничего не нашли, а следовательно ничего не подскажут.
> просто композить друг в друга в точках входа
не понял.
Вот есть OrderController, получается его тоже надо делить на кучу мелких контроллеров. Ты про это?
Нет, не про это.
Контроллер - это и есть набор точек входа. Исполнение запросов начинается и заканчивается там (всякие фильтры-аспекты - не в счет). Его делить особо смысла нет, равно как нет смысла юнит-тестить его в изоляции.
>Звучит так, будто ты из какого то другого культа, раз спринг так ненавидишь.
Я хз к какому культу я принадлежу. Я просто набил много шишек и сделал для себя выводы.
>Ты объяснил почему моки - хуйня, но не объяснил почему моковая имплементация - тоже хуйня.
Моковая имплементация? Ты про что? Кинь цитату где я говорю про моковую имплементацию?
>абзац с иронией про дидов
Да не, почему? Вообще без иронии. Я ж сказал - даже по сей день практикуют отдельные QA команды с E2E-сьютом. Эта метода обкатана за десятилетия, проста, понятна всем без исключения, и результативна. Ноу оффенс к дидам.
Кто конкретно пишет - не столь уж и важно в контексте разговора.
>Поднять базу тестконтейнерами или контекст через спринг тест не сложно.
Согласен.
>Нахуй ты их приплел - не понятно.
Непонятно? Ну и хуй с ним. Проехали.
А, ты про фейки?
В самих по себе фейках нет ничего плохого. Просто одно дело когда ты фейкуешь контракт из одного-двух методов, а другое дело - когда методов десять. Чем больше кода ты по своей инициативе пишешь в тестах, тем больше твой тест-сьют будет подвержен человеческому фактору - в фейках же тоже можно лабать баги. Более того, тестовый код тестами не покрывают, это оксюморон. Ему остается только доверять
>И что ты имел ввиду тут, я тож нихуя не понял. Перефразируй, а лучше пример приведи.
Это надолго. Приведу попозже.
>интеграционные
>Мокают только взаимодействие с внешними системами
И что ты там проверять собрался?
>Для крудов полезнее интеграционные. Они и баги найдут надежнее и писать их немногим сложнее. Обратная связь такая же. Мокают только взаимодействие с внешними системами
Думаю что соглашусь. На самом деле спринг обьективно сам по себе хорош для написания крудов. Правда проблема которую я извечно среди джаванов наблюдаю, заключается в том, что у джаванов зачастую всё - круд. А что не круд, то надо подогнать под круд.
>Юнитами покрывают сложную логику, желательно отделенную от колабораторов и выделенные в чистые функции, чтоб мокать ничего не пришлось
Все верно. Но джава - не хаскель. Чистых функций в ней не существует. Максимум что есть - лямбды и стейтлесс-методы. Более того, в джаве не особо принято лабать программы методов функциональной композиции. Наверно поэтому юнит-тесты настолько ситуативны?
Да.
Старший програмист, лол.
Никаких сеньеров в ТК нету. Это все хуйня для порриджей.
Бывают ведущие, старшие и просто программисты.
Это очень удобный способ создать абстракцию. Правда, профиты от использования полиморфизма прямо пропорциональны сложности его использования для конкретного кейса.
https://medium.com/devschacht/polymorphism-207d9f9cd78
Первая ссылка в поисковике. Вполне себе годный пост.
Нет.
Да, это прописано в трудовом законодательстве
Где требуется опыт, требуют опыт. А не пет.
Сказали, что знать спринг не надо, от меня требуются хорошие знания джавы, sql и общая алгоритмическая подготовка. Если с алгосами и sql у меня все окей, то что бы вы мне посоветовали почитать/повторить по джаве и по sql? Sql юзаю постоянно, но что-то сложнее вложенных запросов и джойнов не писал.
группировки, explain analyze, оконные функции можешь посмотреть. Уже 2 раза у меня спрашивали что делает HAVING
Спасибо большое.
>Уже 2 раза у меня спрашивали
Если ты недавно пусть даже давно был на собесе, можешь ещё что-нибудь по джаве написать?
ну классическое - методы класса Object, зачем нужны equals и hashCode, зачем нужно volatile, что делает synchronized, какие коллекции существуют, какие исключения существуют и в какой иерархии, что такое дедлок, что такое куча и стек.
По гиту - чем merge отличается от rebase
Ещё раз спасибо
скрин профиля в пульсе кидай, твоя хуйня ничего не доказывает. Да и на сколько я помню в сбере зп приходит не в таком соотношении
Да, 65% 5 числа, остальное 20.
???
Кидай код, раскурим
Нам похуй. Проблема в чем?
Признавайтесь, кто писал? Я бы подумал на бугаенку, т.к. он алгоритмы не знает, но крудошлеп и паттерны не любит. А бугаенка только рад для каждого метода в классе стринг создавать декоратор
более менее правильно пишет. Очередной наевшийся говна от дяди боба
в пизде
И так и эдак делают, оба способа имеют свои достоинства-недостатки. Второй способ - сложнее в реализации, но каноничнее за счет того что гейтвей остается чистым от логики. Как по мне - в жопу такие каноны - они не всегда себя окупают.
>Второй способ - сложнее в реализации
Вот я потому и спрашиваю. Сейчас загуглил как это делается - какое-то перекидывание жвт-токена между сервисами, какие-то фильтры блять, я нихуя даже не смогу понять толком с первого раза. А если в апи-гейтвее все сделать, то все просто как в каком-нибудь монолите.
На рабочей практике какой способ преобладает?
Сука, что за говно... пост выглядит как филиал шизов с этого треда. Я ебал - какой же дегенерат бляяяя.
>Обожаю вот такой код:
>Class Animal{String type, voice(){
>if (type==dog) -> gav,
>elseif(type==cat)->myau
>else->not}
>}
Этот вот кусок - какой то особенный вид самоопозора блять. Челик слишком молод чтобы знать, что именно такой стиль кодинга диды еще в 2000х называли "индусским кодом".
В моей практике - первый. Но у меня своя кухня - в каких нить банках может быть и иначе. Поэтому я и ответил - и так и эдак делают.
Опять подорвало у путинской подстилки
После того как все методы класса выйдут из стека (завершат свою работу) ?
Jooq
Ты все неправильно сформулировал, из-за чего у тебя каша в голове.
У тебя - класс. В классе обьявлены поля (аттрибуты) ссылочного типа. У класса - конструктор. У конструктора - агрументы (переменные) ссылочного типа. Переменные и поля - две разные вещи.
Переменные сидят на стеке. Все переменные - и ссылочные, и примитивные. Соответственно, когда вызов конструктора или метода закончится, переменные дропнутся вместе со стекфреймом. Ссылочные переменные - тоже.
Поля сидят в обьектах. И дропаются вместе с обьектом, когда за ним GC придет.
Еще важно понимать, что значение ссылочной переменной/поля - не обьект. Значение ссылочной переменной/поля - ссылка на обьект. Когда ссылочная переменная дропнется, дропнется ссылка на обьект, а не сам обьект.
У GC задача простая - среди всех обьектов в памяти найти те, на которые не указывает ни одна ссылка, и дропнуть. GC насрать на конструкторы, методы и фреймы, он работает на графе обьектов, параллельно и независимо от самой программы.
>Когда сборщик мусора проведёт очистку обьектов в теле конструктора ?
Если ты понял все вышеописанное, должен понимать теперь, что в конструкторе нет никаких обьектов. Есть только ссылки на обьекты.Сами же обьекты, на которые ты ссылаешься из конструктора, дропнуться тогда же, когда и все остальные. Когда на них не останется ни одной ссылки.
ADO.NET
>Когда сборщик мусора проведёт очистку обьектов в теле конструктора ?
Тебя это ебать не должно. Если хочешь попердолиться с памятью, выбирай другой язык. Это во-первых. Во-вторых, очищается не тело конструктора, а хип(куча), где хранятся все объекты. А объект оттуда удаляется, когда на него нет ссылок при обходе графа объектов от вершины.
JOPA
KAKAK
>Программирование — это не столько про анальное крудошлёпство, сколько про стиль мышления
Это ковыряние в конфигах, статьях, туториалах и документации. Всё.
Да.
Что за убогий дизайн приложения? Напомни банк, чтобы я им никогда не пользовался
>Ваши мысли
Трахаться трахаться трахаться
Эх щас бы тяночку...
Дрочить дрочить дрочить
Весна хуле
Нет здесь иаких дедов. Они кастовали Object в нужные типы, очевидно.
в настолько далекие времена жаба была слишком хипстерской и сырой, типа го на взлёте. В те времена были делфи, плюсы, фокспро, визуал бейсик, файрберд
Я всегда тут был, ещё до появления джава-треда.
Ну я слышал от одного пердуна, что во времена появления 8 жабы он попал на легаси с 1.4. Но охуительных историй не припомню.
Я какал на джаве. Прямо в репозиторий проекта. И что ты мне сделаешь?
5 жаба всегда была стандартом. Потом еле еле переползли на 8. На 11 сейчас только самые модные молодежные сидят
Я сижу на 20 жабе. Каждую новую версию посщу отчёт в этом треде о переносе всей галеры на новую жабу.
Перевели с 11 на 17 почти год назад. После выхода 21 тоже дадут где-то через месяц все перевести.
Вот со спрингбутом 3 есть некоторые сложности.
да. Когда спрашиваешь аналитика, а он говорит что смотри в документации (неизвестно какой, какой версии и где находится). Или говорит что не отвлекайте меня
Повезло, у тебя хотя бы есть документация
Если приходится напрямую задавать вопросы кабану в обход аналитиков, рисовать блок-схемы и строчить письма с подробным описанием процессов, и всё в довесок к написанию кода, это считается?
Мне кабаныч наоборот говорит по процессам уточнять у аналитиков, тип он сам хз как правильнее в некоторых моментах с точки зрения бизнеса
Маладец
Да брось. Ну какие там плюшки? В основном какие-то локальные улучшения самой JVM, а сам синтаксис языка практически не изменился с Java 8. Большинство вакансий заманивает Java 17-20, а на деле там JVM 17-20, а синтаксис Java 8.
Многострочники, рекорды, Stream.toList().
Фич мало, но юзаю активно
Хотел еще паттерн матчинг заюзать но он в превью. На 21 заюзаю.
Че ты до челика доебался, болезный, че доказать то пытаешься? Да большинство джаванов если и стремятся переехать на джаву 17+, то только ради того, чтобы varы лабать, что уже нифига не Java 8 экспириенс
мимо
>varы лабать
А зачем? Везде где я работал/проходил собеседование прямо говорили, что эта фича (и еще несколько других) запрещены на уровне линтера/чекстайла, т.к. команда поддерживает старую версию своего говна на доисторической жаве куда регулярно льет фиксы. Либо из-за личных предпочтений эти фичи банятся в проекте.
пишу в общий чат что дескать аналитик отказывается отвечать и подскажите кто знает
Зато функционально написано! Бугаенко лайк поставит. А так вообще хватит отсутствия реактивного драйвера jdbc, чтоб вебфлакс похоронить по производительности
Думаешь, это проблема самого андроид-треда, что андроид-разрабы там не сидят? А вот хуй, в /pr/ андроид вообще никому не всрался, в каком треде ни спрашивай.
Точно не в жяватреде это спрашивать надо.
Ведропидоры давно на кокотлине, реакте или флуттере.
Жява это бекенд онли.
Ну тебе пидорасу тоже
Бля, вот че меня перманентно забавляет в бугаенко-фагах (похуй - флюродросеры, хейтеры...) - они так любят пиздеть за бугаенку, до слюней иной раз, но при этом нихуяшеньки не знают, о чем он был.
Бугаенко лайк поставит, ага. Да он хейтит все что больше 4х методов, считает флюент-апи антипаттерном. Какой в жопу вебфлакс, лол.
Каждое новое ключевое слово - риск сломать обратную совместимость. Если можно ключевое слово не вводить, его не будут вводить. Вот и все.
>Везде где я работал/проходил собеседование
>Либо из-за личных предпочтений эти фичи банятся в проекте.
Ты - банкир-амстердамец что ли? Где ты нашел такую концентрацию пердунов на квадратный метр?
Есть задача написать прогу для хранения данных, для исследовательского сервиса для краткости буду называть её просто база данных или ява. Основная цель сохранять измерения с разных приборов. Вторая задача по этим замерам можно создавать исследования, которые хранят в себе выбранные замеры и результат. Расчёт результата исследования данной бд не предусмотрен, предполагается его загрузка извне (не важно откуда, хоть из текстового файла). Есть и более специфический вид исследования, результат которого можно получить из сторонней программы написанной на питоне.
Дано несколько вариантов взаимодействия базы ява и приложения на питоне.
1. Использовать питон приложение как апи, которое вообще ничего не знает о ява базе данных, а ява часть как клиент этого апи, т.е. ява из бд собирает все необходимые данные и отправляет в питон апи, а из апи отправляется ответ, который база данных сохраняет как результат. Возможный минус - перегонка данных между базой и апи, насколько критично? Какие объемы пересылаемых данных будут тормозить систему?
2. Стороннее питон приложение получает от базы данных айди уже сформированного исследования и само лезет в бд, забирает из исследования все замеры, формирует нужный ей датасет, считает и само кладёт результат в бд. В данном случае исключается пересылка данных напрямую между ява и питон частью. Как меняется сила связанности по сравнению с первым вариантом?
3. Питон не просто забирает данные для расчетов по ид исследования из базы. А сам формирует это исследование, при этом ява уже не умеет создавать исследования и по сути умеет только загружать замеры. Как в этом случае меняется связанность?
Какой из этих трёх вариантов вы бы выбрали и почему? Какие плюсы-минусы видите в каждом из них? Выбрать нужно так чтобы можно было сделать масштабируемое приложение под разных бизнес клиентов. Важный нюанс - специфическое исследование по которому результат считает питон, для некоторых вообще может не пригодиться, а вот базовые более универсальные исследования могут быть нужны почти всем.
Есть задача написать прогу для хранения данных, для исследовательского сервиса для краткости буду называть её просто база данных или ява. Основная цель сохранять измерения с разных приборов. Вторая задача по этим замерам можно создавать исследования, которые хранят в себе выбранные замеры и результат. Расчёт результата исследования данной бд не предусмотрен, предполагается его загрузка извне (не важно откуда, хоть из текстового файла). Есть и более специфический вид исследования, результат которого можно получить из сторонней программы написанной на питоне.
Дано несколько вариантов взаимодействия базы ява и приложения на питоне.
1. Использовать питон приложение как апи, которое вообще ничего не знает о ява базе данных, а ява часть как клиент этого апи, т.е. ява из бд собирает все необходимые данные и отправляет в питон апи, а из апи отправляется ответ, который база данных сохраняет как результат. Возможный минус - перегонка данных между базой и апи, насколько критично? Какие объемы пересылаемых данных будут тормозить систему?
2. Стороннее питон приложение получает от базы данных айди уже сформированного исследования и само лезет в бд, забирает из исследования все замеры, формирует нужный ей датасет, считает и само кладёт результат в бд. В данном случае исключается пересылка данных напрямую между ява и питон частью. Как меняется сила связанности по сравнению с первым вариантом?
3. Питон не просто забирает данные для расчетов по ид исследования из базы. А сам формирует это исследование, при этом ява уже не умеет создавать исследования и по сути умеет только загружать замеры. Как в этом случае меняется связанность?
Какой из этих трёх вариантов вы бы выбрали и почему? Какие плюсы-минусы видите в каждом из них? Выбрать нужно так чтобы можно было сделать масштабируемое приложение под разных бизнес клиентов. Важный нюанс - специфическое исследование по которому результат считает питон, для некоторых вообще может не пригодиться, а вот базовые более универсальные исследования могут быть нужны почти всем.
>У НАС WEBFLUX
Проиграл в голосину с команды, где один "сеньор" нарыдал у лида и затащил в проект вебфлукс. Старательно переписывал проект на протяжении полугода. В конце даже презентовал свои жалкие потуги. Я его спросил про нагрузку и мотивацию, а тот сказал, что не тестировали производительность до и после, а сам сервис вообще не нагруженный и туда ходит полтора анонимуса.
Перечитал два раза.
И нихуя не понял причем тут жява. То что ты описал можно сделать на любом нормальном языке.
Твое жяваприложение звучит как обычное олап хранилище.
Есть стрим пишуший входные данные. Есть пайплайн берущий эти данные, обрабатывающий в стороннем приложении и пересохраняющий в ту же базу.
То есть бд может быть любой(у тебя явно не террабаты входных данных). Коннектор входящего стрима можно сделать на чем угодно(если у тебя прогружаются csv с приборов измерения). А ETL можно сделать в любом ETL инструменте.
Хоть у тебя и явно обьемы не большие, советую разделить хранилища сырых и обработанных данных.
Бля. Недописал про разделение.
Короче сырые данные хранишь в колоночной БД.
Обработанные в обычной реляционке.
Спасибо за ответ, но вопрос был другой.
Есть база данных, пишется приложение ява со своей бизнес логикой, которое изначально являлось единственным пользователем бд сохраняло в нее измерения и создавало исследования. Имеется питон приложение делающее расчёты для специфического исследования в том ява приложении. Возник вопрос на каком уровне из трёх выбранных наладить взаимодействие между явой и питоном, и почему.
Тогда по пунктам.
1. У тебя настолько большие входные данные для расчета чтоб об этом париться? Делаешь асинхронный апи у питона. Интеграцией из жявы его дергаешь.
2 и 3. Давать доступ стороннему приложению в основную бд? Ну хуй знает. Если бизопаснеги разрешают - то 3 вариант. Скинул тип расчета и параметры одним запросом и пусть оно считает.
И свой собственный сервер через сокеты, тоже прикольно
https://www.youtube.com/watch?v=ZhWOlaMqppM
Егорке нужно отдать должное. По сути это микрочелик без какого-то реального опыта, но с раздутым ЧСВ. При этом он как-то пролез в хуавей на позицию менеджера и даже смог пропихнуть свой язык программирования. Временами пишут херочки из хуавея и зовут либо пилить Apache Flink, либо разрабатывать плагин для IDE к внутреннему языку программирования.
Получается что это питон приложение оно стороннее в плане обособленности, но пишется той же командой разрабов, так что безопасники не проблема, вопрос лишь в том в какой из этих трех вариантов завиимость между явой и питоном становятся выше и насколько это хорошо или плохо.
>>689772
Да, думали переписать код с питона на яву, но по некоторым оценкам это лишний головняк, да питон как я понимаю под такие задачи лучше заточен. Ну и изначально он должен был быть как апи, но вот поступили предложения по изменению взаимодествия между ними.
Что вообще должен знать вкатун, пытаясь влезть на вакансию с опытом, чего он скорее всего не знает? Ну типа там, как происходит общение в команде, через какой мессенджер... Какие-нибудь такие вопросы. Подскажите, аноны, уже на днях буду выдумывать себе резюме.
Тебя обоссут на собесе за такое.
Лучше не пытайся наебывать.
Я например бы просто спросил - как деплоил приложение. И тут у тебя полные портки.
>как деплоил приложение
Нас было трое, я отвечал за бэк, другой чел за фронт, третий, главный типа у нас, кабан был его знакомым, он и деплоил. Как - я хз. На галере тоже не я деплоем занимался.
Такой не прокатит ответ? Если нет, в каком направлении правильно врать?
Я прошу 25к, и что-то почти месяц уже нихуя, ни разу никуда не пригласили, вакансий без опыта практически нет.
Че звал сларк?
чем знаменит
>как деплоил приложение
заходил в админку томката и загружал варник. Пойдёт? Я так и делал боевую приложуху с несколькими тысячами онлайн
я у себя знаю помойную контору, у них лимит 50к и соответственно работать к ним идут только нулевые джуны. Работа в офисе, с 9 до 6, график уборки, стулья за 1к, древние компы, мигающие люминисцентные лампы, плотная набивка в офисе. Всё по классике. Поищи, может и у тебя такое есть
Мерджил пр в дев. Всё. Эту лабуду за нас сделал девопс, подхвативалось дженкинсом само, получая нотфий что в дев что-то изменилос.
>как деплоил приложение
у меня джоба в дженкинсе для этого есть насколько я понимаю, как там все это девопсы устроили я вообще не ебу, максимум нажимаю билд с параметрами и все автоматом деплоится
Засмеялся
>без какого-то реального опыта
У него опыта то как раз поболе местных среднестатистических задротов будет. Он до того как в 2017м вылез на конфы, полмира объездил, работал и в Европе и в Штатах. Продолжительное время жил в Калифорнии, где мутил стартап по своим правилам (teamed.io).
Ага, и везде обосрался. Егорка забанен на ВСЕХ конфах, это буквально дегенерат, пока ещё наебывающий китаез, которые не поняли, кто он. Всё люди из рф хуавея, которых я собесил, и которые работали с ним - отзывались о нем как о гниде и очень слабом специалисте.
По сути, когда китайцы поймут, что наняли токсичного мошенника и турнут его - Егорка отправится по помойкам, он сейчас буквально во всех чёрных списках, что есть.
Его ещё хабрамакаки плюсуют активно.
С чем-то согласиться можно, полиморфизмом очень легко переборщить и сделать StrategyStrategy и по 30 минут искать, откуда начинать читать. Недавно пришлось дебажить бугаенковый код, я тогда знатно подохуел.
>Ага, и везде обосрался
Ну и что? Он хотя бы пробовал, что-то делал. При всех его обсерах он все равно на голову выше и уважаемее среднестатистического омежки-анальника.
>Егорка забанен на ВСЕХ конфах
Его бан на конфах не коррелирует с его техническими скиллами ни коем разом, инсайдерская инфа-сотка. На конфах его забанили из-за взглядов - потому что он открытый традиционалист и любил открыто хуесосить соевых куколдов, коими являются почти все анальники моложе 30 лет, и их уклад. Из-за чего он неизбежно стал входить в конфликт с программными комитетами.
>По сути, когда китайцы поймут, что наняли токсичного мошенника
Он давно у хуявее, несколько лет уже. И все это время - на топовых позициях.
Да не плачь ты так, крудошлёп-спрингоёб.
Ну вот это типичный бугаенкохейтер. Самое натуральное чмо. Кому Бугаенко неинтересен или противен - тот давно уже заблэклистил его и забыл. А чмо будет и дальше заниматься бесплатным раздуванием известности Бугаенко. Которому по большому счету похуй что в негативном ключе. Он смеётся над такими как ты.
https://www.youtube.com/watch?v=ouYq6Ci3Ugk
Проиграл с тебя. У меня был знакомый, который молился на Егорушку и дрочил на его книжку. На вот лучше посмотри как бедолаги питчат идею булочной
Любо-дорого наблюдать как егорка рвется от одного скромного посыла нахуй. Ты привыкай, теперь это навсегда.
Никогда я на него не молился. Его фолловить - на самом деле это как двач читать. Феномен Бугаенко крайне забавен. Казалось бы - втирает какую то дичь. И тем не менее год от года собирал полный зал народу на своих докладах. Я частый ходок на конфы от jugru - видел сей феномен своими глазами. И даже посравшись с Барухом на почве какой то семитской дискуссии (не помню какой), даже посравшись с хохлами на почве признания их проплаченной "революции достоинства", и получив из за этого бан на всех конфах, он не отчаялся и замутил свою конфу. И нормально прошла кстати, сотыгу людей собрал.
Я его не оправдываю, я бы мог назвать за ним такие огреги, за какие его наверное присадить можно было бы. Но на его фоне хейтеры - один хуй плесень блеклая. Лицемеры, анальники, дауны. Наверное я просто заебался иметь дела с этой ебаной плесенью за годы стажа, и Егор стал альтернативой. Но как же потешно наблюдать как их всех корежит от злости).
Может, в книгах по кору ещё и про спринг рассказывать? Кор на то и кор, что сторонних библиотек нет.
Ну у нас на дев контур деплоится, когда мр из фича ветки в дев ветку мерджит ответственный за сервис. Пайплайн gitlab-ci настроен.
Как происходит деплой на другие площадки не знает никто из джунов и часть мидлов тоже не знает.
Скрипты для ci даже для деплоя на дев лежат в отдельном репозитории, к которому доступ есть не у всех.
Так что джун даже если бы хотел разобраться как что деплоится, то не смог бы.
Так что тут не так и сложно спиздеть.
Это не фронт же, а какая-то затычка для отладки вроде постмана.
Чаще встречаю в связке с джавой - это Ангуляр или Реакт.
Почему в книга по сишарпу рассказывают про консольную утилиту dotnet? В книга по голангу - про утилиту go? В книга по РНР вообще рассказывают как развернуть Апач?
Так это встроенные утилиты. А мавен к жабе никакого отношения не имеет.
Тем более достаточно популярная альтернатива - грудель.
И ты на поверхностном уровне должен будешь знать оба. Потому что в литературе по спрингу и библиотекам встречается и то и другое.
Ну и видел я книги по жаве, где есть про мавен. От епама была с автором со смешной фамилией.
Ты просто необразованный еблан, который не шарит в программировании. В JDK есть javac - компилятор языка Java. Если тебе система сборки нужна, то у тебя выбор начиная с Ant, заканчивая Maven, Gradle и даже Bazel. Не говоря про какой-нибудь SBT, которым тоже можно собирать джава код. А ты обыкновенная узколобая ослица, которая кое-как осилила сишарп и зазубрила входящую в поставку утилиту для сборки проектов.
Где то видел, как через make собирали жаба код. Учебник что-ли какой или туториал из начала нулевых.
>то у тебя выбор начиная с Ant, заканчивая Maven, Gradle и даже Bazel. Не говоря про какой-нибудь SBT, которым тоже можно собирать джава код
Но если ты выбираешь что-то кроме Maven и иногда Gradle - ты конченый и общаться с тобой не стоит.
Потому что dotnet и go идут в шарпе и Go из коробки, и там это единственный способ управления проектом. А мавена, который в джаве только один из многих, из коробки нет, есть только java, javac и jar.
Пыху учат с одной только целью - по-быстрому наклепать сайт, так что там могут рассказать и про базы ланных, и про вёрстку на HTML, и про линукс.
У меня проект для портфолио - это сайт на джаве, но как может быть полноценный сайт без фронта?
Но ты сам ничего не выбираешь, а работаешь с тем, что есть.
Да, наверно в 70% это будет мавен, еще в 25% грудел, и лишь в 5% оставшихся что-то еще.
Никто портфолио не смотрит. Портфолио - миф вкатунов, работодателям похуй на ваши однотипные вкатуские проекты.
У меня реальный проект. Я его писал на РНР 10 лет назад, а сейчас переписал на джаве и осталось фронт добавить.
Тебе не нужен для портфолио полноценный сайт. Это никто не оценит.
Изучение жс у тебя займет месяц, с фреймворком - 2. В работе тебе фронт не пригодится никогда, если это не совсем помойная галера, куда нанимают жавистов и заставляют их заниматься "фулстеком".
Вариант с голой апишкой со сваггером самый верный. Он может научить тебя абстрагироваться.
Если очень хочется потрогать проект самому, то рекомендую писать просто на голом жс с fetch-api и голым же жс отрисовывать и чистить дом дерево.
> Но ты сам ничего не выбираешь
Авторам книг по кору всё равно, учишь ли ты джаву с целью продать свою жопу подороже или чтобы писать свои проекты без мавена. Поэтому рассказывают только только базу, которая одинакова для всех.
Так портфолию или реальный проект? Ты путаешься в показаниях.
Выбирай любой фреймворк. Для жабы вообне никакой разницы что на фронте. У нас был и вью и реакт и ангуляр.
Тогда последуй в JS-тред и консультируйся там. Джаве похуй, что там на фронте, хоть реакт, хоть мобилки, хоть экзешник на C++.
Ну я поддерживаю их в этом. Вот Хорстманн. Это 2к страниц инфы по джавакору. А выкинуть оттуда можно разве что swing. Да и то он там есть на самом деле, потому что на примерах с гуем многопоточка лучше всего объясняется новичку.
И там написано как собрать проект с библиотеками вручную через java jar с параметрами.
И сколько тогда нужно страниц, чтобы и основы мавена туда впихнуть? 3к?
Ну а если зайти на торренты и поглядеть видеокурсы по джавакору, то там в половине будут основы мавена.
На фронте - виндовый клиент на сишарпе.
А что если сделать фронт на Блейзоре из дотнета? Каковы шансы получить оффер?
0%
Далеко не каждая помойная галера заставляет заниматься фулстеком, но почти все галеры, которые жависту подсовывают фулстек - помойные.
Помойных галер и без фронта на тебя хватит.
>>691124
С хуя ли не может. Реальные коммерческие проекты вполне пилят на vaadin https://vaadin.com/
Блейзор реально запихивает CLR в браузер и потому получается аналог SPA-приложений, а Ваадин обрабатывает все запросы на стороне сервера, типа нажал кнопку - летит запрос на сервак, а потом в обратку обновление формы.
byte - это компактный контейнер для хранения данных (к примеру, огромный массив на 100500 мегабайт), а int для вычислений (джава всё равно все операции к нему кастит).
Че ты этим высером хотел сказать? Что одни, что другие говноделы ебаные, которые хоть какой-то вес в сфере технологий имеют из-за того, что монополисты среди поисковиков.
Зачем? Я не думаю, что на петушарпе больше тулзов для вебфронтоёбства. Он также непригоден для него, как и джава.
Он много лет тут бегает, то клон MessageFormat напишет, то очередной рейтрейсер, то эмулятор 8-битных ЭВМ, и всё время жалуется на отсутствие беззнаковых типов. Шарп не приемлет, ведь он же только для винды.
Нет, это не я. У меня новый UI в идее.
Тут разве не должны теряться данные при числах, больших максимального значения знакового byte, но меньших максимального значения знакового?
Верно.
Нет, шиз, это один и тот же человек.
Можешь собрать единый докер-образ на несколько гигов, в котором будут и джава, и СУБД, и кафка, и редис, и небо, и аллах.
Ничего не понял, чего надо то? Финальный вариант в работу запустить? Наструячь ансибловых портянок и деплой на сервер свой монолит, бд на соседнюю железку и сеть настрой. БД в докере тебе будет примерно в два с половиной раза медленнее работать.
Для тестов похуй, собирай один образ и без композов.
А вообще для тестов должна уже быть готовая тест-среда в вм, где все уже включено и развернуто (можно и композом), тебе только новую сборку надо задеплоить и включить тесты
Сейчас вообще нет нормальных языков для написания эмуляторов 8-битных ЭВМ. Хоть свой пиши.
Ещё инфой по Спрингу ни с кем не делится
Ты про кого?
Нет, ничего не теряется
Docker задеприкейтили. Теперь учи podman.
Почему в джаве нифига нет? Куда не копнёшь везде какие-то мурзилки уровне баелдунга, а подробного разбора Спринга нигде нет.
Вот и уёбывай в свои шарпы и пыхи.
На джаве ты занимаешься поддержкой легаси проектов и там уже есть внутренняя документация компании.
На шарпе/пхп пишут новые проекты и поэтому там много информации доступной публично.
Где посмотрел? На амазоне(либгене) куча книг по джаве. Куча видосов на ютубе, на торрентах куча ворованных курсов. На баелдунге и медиуме куча статей.
Тут новый проект намечается на жава 17. Вот думаю взять 2.7 последнюю или 3?
Пробовал 2 месяца назад старый сервис перевести с 2.7 на 3. Там для кафки убили обратную совместимость(выпилили апишку для асинхронного подтверждения отправки для продюсера) и с фейном старым не работало(что бы решить походу нужно было менять версию фейна во всех сервисах).
А тут новый проектик на один сервис. Интеграция будет по хттп и реббиту, но не с джава приложухами, так что всякая шляпа спрингклаудовская не нужна.
Так по русски только в 1с можно писать.
Для тестов должны быть тестконтейнеры.
> Там для кафки убили обратную совместимость(выпилили апишку для асинхронного подтверждения отправки для продюсера)
чеее?
Ну в спринг-кафке 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
Но это не суть вопроса.
ну так что listenable что completabel один хуй только методы по разному называются
Лол, реально что ли есть вкатуны, которые не умеют редактировать PATH? Прям представляю: "Так, надо мавен установить, ой, чёта сложна, почему установщика нет, в пизду его, чё там ещё кроме мавена есть".
Не может.
Так ведь по себе сужу. Мне, правда, очень повезло, что я не стал трогать тогда градл и ограничился сборкой через идею.
В 2023 взяли пока одного джуна и одного мидла в команду из 12 человек. Правда джун пришел по знакомству одного челика, что уже год работал.
А за 2022 взяли 8 человек из которых 6 - джуны.
Лол, нет конечно.
Сначала пишешь JEP, согласовываешь с комиссией, обосновываешь важность и нужность этой фичи. Потом его добавляют в какую нибудь преальфа тестовую версию и Шипилев полгода 24/7 гоняет ее на серверах с бенчмарками, а Валеев доебывается до мелчайших багов, пока пилит поддержку в идее. Потом ее добавляют в бету и дают потрогать пользователям. Если у какой-то легаси параши с векторами и хэштаблицами это будет криво работать - ее не включат.
Тагирка на каком то интервью как-то рассказывал про то как работает процесс коммита фичи через комиссию.
Там на самом деле чтобы твои коммиты и дали специальную плашку вообще рассматривали нужно долго прокачиваться среди комьюнити и за тебя другие люди с плашкам поручились.
Ему самому такую честь очень нескоро дали после того как он стал ответственным за поддержку жабы в главной жабьей иде.
А для васяна с улицы это на долгие годы растянется.
Ага, подкаст Подлодки это был. Про Java
Ну это по сути не опенцорс, а просто коллективная разработка от разных больших компаний. Если ты представитель редхата или ибма, то у этих контор в этой их коммиссии есть эксклюзивные права и они в свою очередь могут влиять на решения по изменению языка.
>опенсорсным сишарпом где васян с улицы прям на гитхабе пропозалы оставляет и команда их рассматривает
Ну ты сравнил, лол. Одно дело сишарп, который остался где-нибудь на заводах в провинции где пилят "кастомную CRM", и совсем другое джава на которой большинство банков работает, например.
Хочу к нему интеграционные тесты сделать. Чтоб было как в постмане, только автоматизировано.
Как поднять базу понятно - тестконтейнером.
А как мне замокать обращение к другим сервисам?
Просто сделать моковую импелентацию, а потом рефакторить ее каждый раз вместе с кодом?(пока склоняюсь к этому варианту)
Все микросервисы хранятся в одной репе, работают с одной базой (у каждого свои схемы, свои миграции) это не микросервисы а service based, но суть та же. Общение между сервисами через рест.
Для работы одного сервиса обычно надо сходить в 1-3 других. Поднимать все 10-15 для этого перебор. Но если не поднимать то как получить ответ? Возвращать определенные данные не очень надежно - там есть связанные сущности.
Например в одном сервисе получаем подписки с uuid пользователей, а в другой список данных пользователей по их uuid. И если это мокать - мне надо вручную это все вбивать (остальное без проблем бы нагенерил). Иначе там не будет совпадений и вернет пустой список.
Или все таки возможно как то поднять 3 сервиса и выполнить тест? Но это наверное только отдельным сервисом с отдельными скриптами билда наверное выйдет?
Мне вся эта ебень нужна, чтоб в CI засунуть, а то заебался что юниты зеленые - а из за некорректных данных в базе или ошибки кого то во внутреннем рест контроллере баги всплывают.
Автотестеры что то там вроде Е2Е намутили, но они вне CI и для меня бесполезны.
>А как мне замокать обращение к другим сервисам?
Тебе - никак. Отдай эту задачу хотя бы мидлу в вашей команде. Очевидно, что ты не тянешь, чел...
У идеи свой мавен есть, даже кочать не надо.
патамушта
>Там на самом деле чтобы твои коммиты и дали специальную плашку вообще рассматривали
10 раз перечитал, так и не понял. Что блядь?
Так это я писал. Че ты доебался? Я часто уточняю свою мысль походу и дописываю слова в середину предложения и часто потом оказывается, что в итоге я не там вписал и перепутал порядок слов. Не перечитывать же мне сообщение на дваче. Может мне еще и за пунктуацией следить? Я сюда деградировать захожу вообще то.
>Не перечитывать же мне сообщение на дваче.
Лол блядь, так нахуй идёшь тогда сразу, ведь в таком случае перечитывать приходиться тому, кто читает.
Write-only, фактически, это main-target-read-only, в программировании это machine-read-only. На борде write-only значило бы anonymous-read-only, но anonymous твою хуйню прочитать не может, поэтому у тебя не write-only, а build failure.
Если я прошел через эту ебучую лагающую капчу - значит сбилдилось. Тут максимум рантайм эксепшон.
Пошел нахуй! Под таких как ты заебешься дырки в API сверлить для каждой коллекции.
Коллекторы юзай, там все есть. Не устраивае - убейся.
Есть штуки типа API-моков. Пример - https://www.mock-server.com/. Ты описываешь как должен вести себя API в тесте, а эта штука во время прогона подымает тебе сервер. Подставляешь его вместо реального сервиса и все.
>который магическим образом поймет как надо сгенерировать тестовые данные?
На основе чего? Как ты себе это представляешь?
>Или там есть какой то инструмент который магическим образом поймет как надо сгенерировать тестовые данные?
Ты сейчас пытаешься переизобрести концепцию контрактного тестирования. Полно готовых инструментов для твоей проблемы. А ты хуйней занимаешься. Я тебе уже сказал, что ты не тянешь. Отдай задачу мидлу или сеньке в команде, а сам пиши по собственному, ослица тупоголовая.
>Подставляешь его вместо реального сервиса и все.
Это глина, чел. Можешь тогда вообще не поднимать мок HTTP API, а напрямую мокать клиент для общения с сервисом через какой-нибудь сраный мокито. Один хуй ты обращаешься к ненастоящей зависимости.
Вопрос был в том сделать мок или поднимать связку серверов.
Мне предложили мок.
А если мок то руками писать или можно нагенерировать согласованные данные.
Этот вопрос проигнорировали.
>>693006
>>Я тебе уже сказал, что ты не тянешь
Ты пукнул в лужу, я проигнорил твой ответ.
>>Отдай задачу мидлу
ты так сам никогда мидлом не станешь, чел
1.Принцип инверсии управления (IoC),
2.Принцип инверсии зависимостей (DIP).
P.S. - А паттерн внедрения зависимостей их использует.
инверсия управления - что фреймворк вызывает твой код. Инверсия зависимостей - хз, может что фреймворк предоставляет зависимости для твоего кода
2 это банальное "не ломай, блядь, обратную совместимость, а если надо чё-то изменить, сделай неизменяемые абстракции" с очень дебильным названием.
Ну явно не в ява-треде.
На хх.ру и сайтах банков.
Я робот, поэтому могу рекомендовать следующие ресурсы для поиска стажировок по Java:
1. Indeed.com
2. Glassdoor.com
3. LinkedIn.com
4. Internships.com
5. SimplyHired.com
6. CareerBuilder.com
7. Monster.com
8. Google for Jobs
9. AngelList.co
10. Dice.com
Надеюсь, эта информация будет полезной для вас!
Пошёл нахуй.
На Википедия же всё понятно написано.
Инверсия управления - это когда ты вместо того, чтобы самостоятельно дёргать методы либы и писать главный цикл просто пишешь обработчики/компоненты и вызываешь главный метод фреймворка, который сам запускает цикл и при возникновении событий дёргает нужные обработчики. Так большинство фреймворков работает.
Если к этому добавить, что фреймворк сам управляет жизненным циклом компонентов и указывает компонентам, где брать другие компоненты путём подстановки ссылок на них, получится внедрение зависимостей.
А инверсия зависимостей - просто идея, что при написании компонента (модуля/класса/метода), которому нужен другой компонент, указывать не конкретную реализацию компонента, а интерфейс или базовый класс, чтобы можно было извне поменять реализацию, не переписывая компонент, требующий зависимость.
Или лучше вынести в наследников ?
Можно.
Да, в абстрактном классе можно создавать константы. Константы в абстрактном классе могут использоваться как базовые значения, которые наследники должны использовать в своих реализациях, или как общие значения, используемые несколькими наследниками.
Если константы представляют общие значения, которые будут использоваться несколькими наследниками, то их можно определить в абстрактном классе. Это может быть полезно, если вы хотите избежать дублирования кода и сделать код более читаемым.
Если константы представляют базовые значения, которые наследники должны использовать в своих реализациях, то их также можно определить в абстрактном классе. В этом случае константы могут использоваться для обеспечения совместимости между различными реализациями наследников.
В целом, решение о том, где определять константы, зависит от контекста. Если константы представляют общие значения, то лучше определить их в абстрактном классе. Если же константы представляют базовые значения, которые будут использоваться только в одной реализации наследника, то лучше определить их в этом наследнике.
Вкатываюсь с целью работать в сфере финтеха, в перспективе - на забугорные банки. Всё правильно делаю? Образование понадобится?
Можно. И в абстрактных классах можно, и в неабстрактных... Даже в интерфейсах можно, прикинь да? А енамы - так вообще тупо сборник констант! Просто ахуй!..
...взял бы да попробовал сам, вместо того чтоб глупые вопросы задавать.
>>693038
>Проще говоря при наследовании родители не должны зависить от чайлдов.
Родители и так не зависят от чайлдов. А те всратые случаи, когда таки зависят, новичок ни в жизнь сам не распознает - ему проще внушить composition over inheritance. Эта формулировка только мозг нубам ломает.
DIP не столько про наследование, сколько про направленность зависимостей между компонентами в целом. Наследование здесь - лишь частный случай зависимости между родителем (интерфейсом/базовым классом) и потомком.
Следование DIP в общем случае всего лишь предполагает, что зависимости между компонентами всегда идут от стабильных абстракций (обычно - интерфейсов), к волатильным конкретикам (имплементациям этих интерфейсов). И смысл следования принципу DIP в том, чтобы конкретики никогда не зависели друг на друга, иначе на любой внешний запрос поменять в них что-то будет ворох побочных правок вниз по всему графу зависимостей, включая тесты. Этот негативный эффект еще известен под названием "Zone of Pain", а анализ зависимостей с целью выявления рисков - "Distance from main sequence" (последнее гуглится).
Ну некрасиво же. Хочу чтобы true и false были равноправны с визуальной точки зрения.
Бляяяяяя, он реально булеан в сфич засунул!
Перестань пожалуйста! Как с тебя орать перестать, что ты такое?!
GPT-4, как модель, не имеет встроенной способности определения истины и лжи. Он основан на статистическом анализе больших объемов текста и учится предсказывать последующие слова или фразы на основе предоставленного контекста.
Когда вы взаимодействуете с GPT-4, он пытается сгенерировать ответ на основе своего тренировочного набора данных и предшествующего контекста вашего вопроса. Он не имеет внутреннего механизма проверки правильности или точности информации, которую он генерирует.
Таким образом, ответы, предоставляемые GPT-4, могут быть логически последовательными и звучать убедительно, но не всегда гарантируются быть истинными или точными. Важно оценивать и проверять полученные ответы с помощью критического мышления и дополнительных источников информации, чтобы подтвердить или опровергнуть предоставленную информацию.
Не кажется, я доволен процедурным стилем.
Мнение о языках программирования и их подходах может быть субъективным и зависит от конкретных потребностей и предпочтений разработчика. Хотя Java является объектно-ориентированным языком программирования (ООП) и обладает мощными возможностями ООП, стиль написания кода может отличаться в зависимости от конкретной команды, проекта или предпочтений разработчиков.
В Java есть возможность использовать преимущества объектно-ориентированного программирования, такие как инкапсуляция, наследование и полиморфизм, для создания модульного и расширяемого кода. Однако некоторые проекты или команды могут предпочитать более процедурный стиль программирования или использовать аннотации для различных целей, таких как описания метаданных или добавления функциональности через аспектно-ориентированное программирование (АОП).
Важно отметить, что хороший стиль программирования зависит от многих факторов, включая контекст проекта, командные соглашения и личные предпочтения разработчиков. Если вы предпочитаете более объектно-ориентированный подход, вы можете стараться использовать основные принципы ООП при проектировании и написании своего кода, чтобы сделать его более модульным, читаемым и расширяемым.
Ку ку ?
На самом деле забавный факт в том, что виновна даже не джава и не джависты. Процедурно-сервисный подход в том виде, котором мы его знаем сегодня, начался еще во всяких коболах-алголах у предтеч. Это потом уже случился ООП, на котором предтечи кодили так, как привыкли на коболах, помножив тенм самым профит от парадигмы на ноль. Где класс, у процедурщиков - модуль с процедурами. Инжекция? Идеальный заместитель сишного инклюда!
Это не джава свернула не туда, это кодерки упорно движутся по прямой в стену, как привыкли. Но если предтечи не в чем винить (в их времена тупо альтернатив особо не было, вся индустрия еще только только собирала косяки и набивала шишки), то существование современного спрингокульта не оправдывает ничто.
>Идеальный заместитель сишного инклюда!
По моему, если проводить аналогию, то в джаве есть неявный инклюд на вообще все существующие в мире классы.
О, ок. А то я уж ненароком подумал что тест тьюринга засыпал, лол.
Ну для меня такая аналогия очевидна.
Раньше писали #include stdio.h чтобы получить доступ к процедурам из stdio, а щас пишут @Autowired UserService userService, чтобы получить доступ к процедурам из UserService.
Шизоуебище, ты когда-нибудь прекратишь нести эту хуйню? Одно и то же по кругу. Вакух нет, инфы по спрингу нет, ООП нет.
>Раньше писали #include stdio.h чтобы получить доступ к процедурам из stdio, а щас пишут @Autowired UserService userService, чтобы получить доступ к процедурам из UserService.
А ведь правда, пиздец просто. Всё то же самое, только ресурсов жрёт в 5000 раз больше.
А ты нашёл инфу по спрингу?
>Вакух нет, инфы по спрингу нет, ООП нет.
>прекратишь нести эту хуйню
Дак прекращай, все в твоих руках.
У Егорки.
Или тупо new Залупа(датасорс, данные).save(). Прикольно прокидывать датасорс в каждую ебаную сущность. Называется Active Record.
Джава мультипарадигменный язык. ООП был в 2000, когда он был на хайпе. Щас так писать - моветон.
>>обильно покрывая весь код аннотациями
У меня из аннотаций кодогенераторы в основном - ломбок/мапструкт + валидация + контролеры. Предпочитаешь вместо этого бойлерплейт как в джава5/шарпе?
>>джава свернула не туда?
Джава впитывает все лучшие и проверенные технологии. Лямбды, зеленые треды и тп.
Не увидел там ничего необычного.
Почему?
Идея видит что это поле у тебя не изменяется ни одним методом и наружу никуда не торчит, и предлагает сразу сделать его финальным, потому что чем меньше мутабельности в программе, тем лучше.
сори, прочитал как "не рекомендует"
>чем меньше мутабельности в программе, тем лучше
Стоит на каждую возможную переменную и параметр метода слово final вешать?
В методе нет смысла, в классе просто убери сеттеры.
>ООП был в 2000, когда он был на хайпе
О, здесь даже интересно послушать - а что в моде сейчас среди джаванов, если не ООП. Только не говори что функциональщина - любой хаскелит-любитель без опыта на смех подымет, и будет прав.
Идея не про это, она - не какой то крикливый анальник с хуем наголо в треде. Ей насрать на твое мировоззредние, и она не будет тебе ничего доказывать. Просто она по факту видит что поле нигде не мутируется, и предлагает зафиксировать этот факт в его обьявлении. Если вдруг где то ты поле изменишь, она тоже это увидит и перестанет показываить ворнинг, вот и все.
Всё не так плохо.
Если это мешает, то с версии Java 5 появилась аннотация
@ПодавитьВолнение(причины)
Не знаю насколько это здесь применимо.
Так. Про актив рекорды я знаю.
Если не ошибаюсь в функциональщине так же поступают: на вход функции данные и залупаРепозиторий, на выходе монада со статусом операции в бд.
А еще варианты есть? Может быть прототайп бины? Или прозрачно обмазать всё персистенсом через AOP?
Пытался писать код без залупаСервисов, но в какой-то момент всегда появляется желание ебануть синглтончик, фабрику залуп, а потом опять всё скатывается в залупаСервисы, залупаМенеджеры и залупаХэндлеры.
Просто мозг не поворачивается в другую сторону.
Конечно не поворачивается, потому что это наиболее естественный способ написания бизнес-логики. На то она и логика, что на первом месте код (процедуры), а не некие сущности реального мира (классы).
А всё остальное - удаление гланд через вагину.
>Может быть прототайп бины?
Торг как третья ступень принятия.
Функциональная парадигма тупо не пользуется концептом инжекции через контейнер, им оно тупо не нужно. Нет в ФП никаких бинов, и не будет, равно как нет в них смысла. У них правит балом функциональная композиция, которая, несмотря на то что ручная, в разы более результативна.
>Просто мозг не поворачивается в другую сторону.
Попробуй просто отвлечься и повариться в другой экосистеме некоторое время. Прочитай Learn You A Haskell For Great Good - необязательно прям перекатываться, просто ради самообразования - чтобы понять что бывает кодинг и без контейнеров и сервисов, со своими сильными-слабыми сторонами. Чтиво легкое, недушное.
>Прикольно прокидывать датасорс в каждую ебаную сущность.
Спрингокультист правда не понимает, что его спринг просто вуалирует DataSource.INSTANCE в конструкторе?
>Эта формулировка только мозг нубам ломает.
Ну сейчас то ты нихуя не сломал мозг нубам. Уверен, что они вообще нихуя не поняли из того, что ты написал.
Мне в свое время именно эта формулировка и помогла понять смысл. А не демагогия о парашных слоях и уровнях.
> Функциональная парадигма тупо не пользуется концептом инжекции через контейнер, им оно тупо не нужно.
>Нет в ФП никаких бинов, и не будет, равно как нет в них смысла.
Конечно.
Лучше хранить стейт в глобальных переменных🤣🤣🤣 (если они вообще есть в языке)
> У них правит балом функциональная композиция, которая, несмотря на то что ручная, в разы более результативна.
Результативна в задачах без стейта.
>Лучше хранить стейт в глобальных переменных🤣🤣🤣 (если они вообще есть в языке)
Имбецил проецирует свой процедурный опыт разработки на парадигму и язык, в которых не разбирается.
Мне больше всех надо чтоли? Я комментировал конкретный комментарий. Быть бесплатным евангелистом хаскелля я не подрывался - так только спрингорабы делают.
Да, стоит, на переменные объекта всегда вешать final, если это внедрённая зависимость, а не собственные данные объекта.
Не суть в чем. Просто признавая за собой процедурщину, спрингошлеп официально признается, что джава для него - просто очередной диалект кобола, а сам он - необучаем. И цитата:
>ООП был в 2000, когда он был на хайпе. Щас так писать - моветон.
...начинает звучать смешно. Как будто бы это их "щас" чем то отличается от того, как было в 60х-70х, когда фортран впервые обзавелся процедурами, а Ларри Константин написал первую в своем роде книжку про cohesion и coupling.
Проблема то в чем? Если отбросять маняярлыки про кобол, то в чем реальная конкретная проблема?
Прокидывать датасорс через всю иерархию объектов - это проблема.
Отсутствие рабочих реальных примеров с альтернативой - это проблема.
А
>мааам, ну скажи им, что они Кобол
это не проблема
Кто-то говорил про проблему? Только ещё раз долбоёбу-копротивленцу указали, кем он на самом деле и является. Никакой оценки непосредственных действий долбоёба-копротивленца не было, он сам рванул, т.к. ему стало, почему-то, неприятно от его сущности.
Например что-то меняю, или убираю какой-нибудь класс из шаблона.
Смотря что убираешь/меняешь. Есть просто особенности реализации, указанные в книгах, а есть свойства, без которых паттерн перестаёт быть паттерном.
Нормально. Паттерны - это не какая то там догма, это просто эмпирика. Нет ничего необычного в том, что какой то ситуативный кейс из этой эмпирики выпадает.
Чмондель, в отличии от тебя, мани, я перед жявкой, на эрланге за денежку год пердолил "деревья отп с акторной моделью обработки данных" (и полгода на элике потом).
И не тебе, ссанина мне расказывать про "охуеность" фп.
Хули тогда бред несешь про глобальные переменные, опердень недоделанный?
А что должно быть нового? Кроме проверки:
if (javaVersion < 17) {
throw new NotEnoughHipsterException();
}
Аж пернул с такого резкого перефорса.
String response = HttpUtils.get("https://jsonplaceholder.typicode.com/todos/1");
String response = HttpUtils.post("https://jsonplaceholder.typicode.com/todos/1", myObject);
Вот у нас есть AspectJ, значит. Со связыванием в компайл тайме. Выкидываем его нахуй и не рассматриваем.
Какие у нас остаются варианты для того чтоб дописать логику в существующие методы и классы? Ну, очевидно, Spring AOP или можно в BeanPostProcessor хуйнуть руками логику создания нового прокси.
И, по идее, там под капотом даже механизм один и тот же, для внедрения логики-то. Какой вариант предпочтительнее? Аспекты, потому что проще и нагляднее? Или рчками сделать прокси потому что... что?
Ты же просто нахуй послал десятки форматов данных с сериализацией/десериализацией, обработку респонс-кодов, обработку ошибок, авторизацию, управление соединениями и остальное. Если тебе нужно готовое решение под твой супер частный случай "ничего кроме plain text и 200 OK не существует", ты его не найдёшь.
Ломбок тоже умеет их вписывать, во время компиляции. Так что тоже вынесем за скобки.
Так лучше?
Response response = HttpRequest()
.withHeaders(Map.of(...))
...
.get("https://...")
Почему нет ни одной библиотеки, которая умеет
CRUD crud = new CRUD(Zalupa.class);
crud.deployToProduction.withCallback(wallet::get Money);
Чет не до конца понятно че ты пытаешься понять для себя. Ты аспекты лабаешь, или тебе надо просто кода навалить в скомпилированный класс? Почему берем и выкидываем AspectJ? При чем тут бинпостпроцессор?
>И, по идее, там под капотом даже механизм один и тот же, для внедрения логики-то.
Да так то если посудить - Spring AOP то тоже в этом плане ничего нового из себя не представляет. Либо использует java.lang.reflect.Proxy, либо CGLib. И в целом так делают все тулы - либо прошивают байткод в компайл-тайме/во время класслодинга (чаще всего через CGLib, иногда через Javassist), либо юзают java.lang.reflect.Proxy. Ну еще есть ломбок, который ректально патчит AST через процессоры аннотаций, но это - нелегальная хуйня, так редко кто делает.
>Аспекты, потому что проще и нагляднее? Или ручками сделать прокси потому что... что?
Опять же, ты щас просишь сравнить идею с одним из путей ее реализации. Теплое с мягким.
Окхттп. Хттп2 и асихронные запросы тоже.
Апачевский асинк-хттпклиент тоже неплох.
Просто ты не искал
Ну например есть паттерн "Строитель", я несколько методов выношу с буилдера в клиентский код.
Director dir = new Director(new ButtonExit);
Button b = dir.build();
.......
b.setPosition(100,100);
А на педалях разве вообще делают http запросы?
hr потому что.
Очередной хуй пойми откуда взявшийся термин типа бинов. По названию невозможно догадаться, что это такое.
Я не тебе это пишу, а тем, кто прочитает твой пост и побежит обмазывать легаси ресттемплейтом свои проекты.
да. Это для EJB требуется сервер приложений (JBoss, WebFly и подобное). Спринг это нескучная замена EJB, не требующая стороннего сервера приложений
obj2 это параметры которые мы передаем для вызова метода.
Что означает первый аргумент obj1 ?
Если уж проводить аналогиии, то DI в Java EE - это CDI, а не EJB. А альтертанива MVC - Jax RS. И обе этих спеки самодостаточны, а их имплементации так же спокойно используются без контейнера приложений.
Spring MVC - штука, работающая на сервлетах. Следовательно - запускается на всем, что поддерживает сервлеты.
Экземпляр, у которого будет вызываться этот метод. Для static-методов равен null.
Вызвать в конце .block()
боб тут бы сотню методов напилил и дюжину переменных класса
Эххх туда бы мапперов и валидаторов хуйнуть... обмазать все секьюрити через AoP и понаставить аннотаций...
Ты пользуешься методом .put() и видишь только конечную производительность. Проблемы какие?
А он есть...
начинаю понимать. Там просто все элементы хранятся в Node, и в нем есть поле next, где хранится следующий. Линкед лист не используется но по сути это оно
Это - Код Богов-из-джава-machina, он не для тебя писан.
Не могу вдуплить. Корзина становится деревом при переполнении корзины или при большом количестве коллизий?
Если корзина - дерево, то в нодах точно также остаются ссылки на next - на элемент с совпадающим хешем?
Я сейчас нахожусь на стадии планирования проекта. Хочу на джаве начать, потому что в разы быстрее плюсов, вот думаю над минусами
На пару секунд нет. В тяжёлых случаях до 100 мс сборка идёт.
немного начинаю понимать.
В основе хешмапы - массив.
Ключ - integer. При вставке индекс для этого массива вычисляется на основе хэша, при этом чтобы он не выходил за размеры массива. Если массив заполняется - происходит процесс увеличения массива вдвое, индексы значений пересчитываются.
Значение в этом массиве - Node, оно же называется "корзина"
Если хэш совпадает - значение записывается в поле next корзины. Если эта корзина становится слишком большой - она преобразуется в дерево. Т.е. в корзине может быть несколько значений только в случае коллизии. При нормальном распределении хэшей одна корзина - одно значение.
Эффективность доступа через get
В случае нормального распределения хэша - O(1)
В случае коллизий, при этом количество значений с коллизией меньше 8 - O(N)
В случае коллизиий, если количество значений с коллизией больше 8 - O(log N)
ммм ясно.. держи в курсе)
На пару секунд тормознуть GC может на под завязку забитых хипах в десятки гигабайт. Скорее всего у тебя столько оперативы тупо нет. На своих поделках ты никогда таких stop-the-world пауз не встретишь, забей.
И кстати я преувеличил - не факт что даже на таких объемах хипа ты чето заметишь. По умолчанию JVM выбирает сам GC в зависимости от того, какое у тебя железо и сколько хипа, и делает это довольно неплохо. Есть даже на самые терминальные случаи специально задизайненный на терабайты хипа нахуй ZGC.
Емнип в дефолтном гц - stop the world срабатывает при загрузке хипа > 99%
Это редкое событие, и если ты не суперточный софт пишешь, а какой-нибудь веб - это допустимо.
Если задержки неприемлемы - есть и другие GC.
https://www.freecodecamp.org/news/garbage-collection-in-java-what-is-gc-and-how-it-works-in-the-jvm/
https://github.com/openjdk/jdk/blob/a74ebd048ae569296619c112c23169c46b571863/src/hotspot/share/gc/shared/gcConfig.cpp#L98-L112
https://github.com/openjdk/jdk/blob/a74ebd048ae569296619c112c23169c46b571863/src/hotspot/share/runtime/os.cpp#L1681-L1726
Ок, я мягко говоря преувеличил, утверждая что выбор он делает как то мудро и обоснованно, мой косяк. Но все же кое какой выбор на основании хоста он делает.
>Хочешь г1 или шенандо - ключики пердоль
Так то G1 - дефолт с 9й джавы. Без всяких ключиков.
>ключики пердоль
ХМ-ХМ, КАК ЖЕ ТАМ +xx:-USEgC1?
@
ERROR, +XX:-uSEgC1 NOT RECOGNIZED
@
НУ КАК ТАК ТО?!
@
А ЕСЛИ -XX+:=USEgC1?
@
eRROR, -XX+:=USEgC1 NOT RECOGNIZED!
@
ДА ПОЧЕМУ?!!!!!!
>в дефолтном гц - stop the world срабатывает
STW срабатывает в любых GC кроме ZGC (еще в превью). И есть коммерческая JVM, где эту проблему уже давно решили
Да
вообще то на стековерфлоу задают вопросы по разным языкам и в других тредах его тоже используюут
Ебать ты шутканул конечно.
но ведь здесь все мои друзья. Правда же?
Имеет смысл гнаться только тогда, когда велосипед оказывается сделать сложнее, чем узнать, как работать с какой-то уже существующей технологией.
То есть само по себе изобретение велосипеда не проблема, пока удается сделать в приемлемые сроки?
Есть такая поговорка - инициатива трахает инициатора. Написав велосипед, ты берешь на себя за него ответственность - покрываешь тестами, документируешь, фиксишь в нем баги.
А так как разрабы в целом не любят брать на себя ответственность по ряду причин, велосипеды в индустрии порицаются. Каждый велосипед считаются говнокодом до тех пор, пока не доказано обратное.
То есть нагуглить полностью готовое решение > написать свое решение, я правильно понимаю? Это актуально только на этапе работы или на этапе освоения тоже?
Все вышесказанное актуально только для коммерческого кода, разумеется. На этапе освоения в велосипедостроительстве нет ничего плохого - напротив, на велосипедах неплохо прокачиваются техскиллы, набиваются шишки, приходит понимание прочитанного в книгах-интернете.
Спасибо
По сути да, но на поддержку велосипеда тратятся силы, и эти силы тоже надо учитывать. Редкий случай, когда силы потраченные на создание велосипеда и его поддержку в сумме меньше, чем силы, потраченные на поиск информации, и особенно когда есть у тебя под рукой чат гпт, который всё уже знает.
>Написав велосипед, ты берешь на себя за него ответственность - покрываешь тестами, документируешь, фиксишь в нем баги.
Это какие-то фантазии, если честно. Я разменял 10 лет в этом вашем айти. Ты не поверишь сколько велосипедов я видел в своей жизни. Начиная с совсем крохотных библиотек и заканчивая всяким мидлвейром и прочими "СУБД". За всю карьеру наберется несколько десятков огромных велосипедов и еще полторы сотни всяких библиотек и "фреймворков". При этом никто не писал документацию и тем более тесты. Разобраться в том поносе было очень тяжело, т.к. писали его обычно 1-2 человека и у них налицо были какие-то психические отклонения.
Такие персонажи входили в рейдж мод, когда им показывали отраслевые решения, которые они завелосипедили из-за своего скудного умишки
netty
В этом треде они тоже есть
И в чем фантазия? Ты сам все то же самое и сказал. Безответственные велосипедисты и их поделки вызывают лишь отторжение. Их пытаются устранять, а когда не получилось - ненавидят лютой ненавистью.
мне кажется гошка изза популярности микросервисов, может несколько % рынка откушать у монолитной жавы. (если уже не откушала)
Если что, я просто кукаретик, кто в тырпрайзе работает, поясните если не прав.
1. Распространенность jwt токенов в тырпрайзе ?
2. популярность spring webflux ?
Посижу теперь в ридонли, чтобы не спамить
1. Дохуя где распространены. Ибо просты и эффективны.
2. Популярны чуть более, чем того заслуживают. В основном, из-за придурков, сующих реактивные стримы туда, где от них нет профита, ради тэга в резюме.
Существует проблема, когда у нас есть транзитивная зависимость, но на разные версии. Какую версию возьмёт мавен?
По-умолчанию мавен берёт ту, путь к которой ближе. Например к одной версии идём через 3 шага, к другой через 2 шага. Значит мавен возьмёт зависимость до которой 2 шага.
Ещё можно вручную описать, какую версию надо брать. Это делается в помнике проекта в разделе dependencyManagement.
Pom файл, состоящий только из этого dependencyManagement принято называть bom файлом.
Подключить его можно через parent в нашем помнике, либо через импорт в нашем помнике.
Спринг публикует готовые bom файлы для своих версий. Подключаешь этот файл - и избавляешься от проблемы что какая-то сторонняя зависимость перебила спринговую транзитивную зависимость
Добавь еще тот важный нюанс, что бомник может декларировать только версии зависимостей, но не версии плагинов. Импортнутый спринг-бом не определит версию спринг-мавен-плагина в проекте.
Да никуда, просто слегка доебали душнилы, которые меряются зепкой и обсуждают какую-то хуиту.
>>популярность spring webflux ?
Вместо <List>Zalupa в проекте будет Mono<<List>Zalupa>. Даже если перепишешь на Flux, один хуй база на jdbc будет.
Но выглядит прикольно, лямбды в 2 экрана ведь лучше легасного ООП.
Есть, но не про вашу честь, товарищ реактионер.
Не варил вертекс, но бегло взглянув на API RecordParser'а предположу что pipe()/pipeTo() там как раз для того, чтобы писать куда-либо то что ты напарсил.
while
Спасибо, решил.
Починилось.
Ибо интроверт я.
Такие варианты в природе существуют?
Или только офис и общение с коллегами (не складывается у меня общение с людьми, не любят они меня)
Щас всех наоборот с удаленки тащат обратно в офис.
Даже если и дадут удаленку - скажут что вот ты пока сиди дома, но по договору напишем, что ты офисный раб и по первому сигналу должен перейти на гибрид (хотя бы 5 дней в неделю - в офисе).
Фриланс.
спасибо, Абу
Как вкатиться в вашу джаву?
Работаю программистом БД в дс, за 30, 300к на руки
Хочу перекатиться на спринг, задач по работе нет.
Начал изучать ванильную джаву, пишу легкие скрипты по работе.
Как к вам вкатиться? Вакансий вообще нема, всем нужны мидлы и выше.
понимаю, что с 300 упаду на 100.
Работа спрингоёба не намного интереснее работы базоёба. Сиди перди на своих базах. Если хочешь реальную жабу полапать, то забудь про существование копроспринга.
> Как вкатиться в вашу джаву?
Тебе нужен какой-то roadmap или что? Бесплатных материалов в сети — просто пиздец как много. Если лень самому разбираться, то можешь себе какие нибудь курсы позволить, где тебя за руку проведут.
Можно ещё под андроид писать игры.
Просто база данных? Без языков программирования?
Наоборот. Главный уходит в wait до тех пор, пока дочерний не закончится.
Курсы только нахуй могут провести.
Не нужен
Гугл выдает пример только с 1 insert'ом и условием (как я понял, оно общее для всего changeset'а):
https://stackoverflow.com/questions/61845118/insert-into-table-column-if-entry-does-not-exist
А мне нужно 2. Задача такая:
1) в таблицу permissions добавить запись с name = "Полный доступ", если такой записи нет;
2) в таблицу roles добавить запись с name = "Администратор", если такой записи нет;
3) в таблицу roles_permissions, связывающую 2 предыдущих, добавить запись, дающую роли "Администратор" доступ "Полный доступ".
Все это нужно в рамках одного changeset'а. Как написать insert'ы для первых 2 пунктов? Вдобавок нужно еще и в XML (без использования тега <sql>).
в /b/ пожалуйста пройдите
Исходные:
- 30 лвл
- Полностью профильное образование (бакалавр)
- Текущая зп 120к, сисадмин
- Опыт кодинга уровня написания скриптов на Powershell для автоматизации рутинного говна и небольших процедурок вида "спарсить N-ое количество xml-файликов, покрутить-повертеть, залить вывод в excel"
- Английский уровня B1
Осознал, что нужно куда-то расти, в админстве потолок, а идти в девопсы чет не охота, душа не лежит, один хрен учить тонну всего нового. Так почему бы не податься в кодеры, говорят у вас можно 300к/наносек зашибать, кек.
Собсно простые вопросы:
1) Как лучше обучаться? Курсы, самообучение по ютубу или найти челикса на какомнить фрилан.сру и платить ему по 4к/час за обучение раз в неделю?
2) Какая РЕАЛЬНАЯ ЗП у джуна в мск? Кто-то говорит, что 80к, кто-то говорит, что 50. Просто со 120 на 50 идти это вообще пиздец будет для меня.
3) Не слишком ли я старый? Много ли у вас коллег-джунов 30+?
4) Как быстро можно вырасти по зп хотя бы до текущих 120к?
В треде ньюфагов мне посоветовали изучать кор и попутно пилить свои пет-проекты, собсно отдельно стоит вопрос пет-проекта, что лучше пилить, чтобы и интересно ковыряться было и полезно в возможной будущей работе и на собесе показать не стыдно?
Если я сварганю чатик с шифрованием, клиентом под винду и веб-интерфейсом этого будет достаточно для изучения и собеса или нужно что-то круче? Пока абсолютно хз как это все делать, но уверен, что у Java есть все инструменты для работы с сетью, БД, шифрованием и т.д.
>статические поля инициализируются во время компиляции
Нет. Статические поля инициализируются во время статической инициализации, которая в свою очередь происходит во время класслодинга.
Да.
он еблан
найди мне работу пожалуйста
А где ты ее оставил?
>самообучение или ментор
Самообучение. Если сам не можешь обучаться, то не стоит продолжать
>реальная зп
У нас в Беларуси все джуны без опыта 500$ получают
>как бысто можно вырасти до 120к
~ от 2-х лет
>что лучше пилить для пет проекта
Чатик с шифрованием на вебсокетах норм, клиент под винду лишний, т.к. java только для веба. Кроме этого сделай простое CRUD приложение с авторизацией. Перед этим изучи java core конечно
Счастливого дебага.
Благодарю за ответы, добра тебе, друг
Стажер ты?
В идеале немного про синтаксис и сразу переход к фичам.
>но сам не пользовался никогда и минусов не знаю
Хуйли суешься тогда, раз не знаешь? Больше всех надо?
Долбоеб,я тебе нахуярю как нехуй делать. У тебя жим сколько?
Смотря насколько не ньюфаг.
Есть Хорстманн. Страниц много, но не из-за воды, а из-за описания тонкостей. Всякую хуйню типа Swing/JavaFX можно скипнуть.
Ну я вкатываюсь уже второй год, высрал три петпроекта, и все пока по нулям, даже не зовут на собесы. Походу без профильной вышки хрен влезешь.
bloch effective java
Задача двача - обоссать тебя и он ее выполнил.
Ебало в ноль, глаза в пол, чмо. Сопли еще не высохли, а уже изх себя синьора корчит. "Ебаться ему придется"... Когда тебя это ебать начнет, ты скорее всего свалишь тридцадь раз в другой проект. А взрослые люди в гробу видели сопляка с сопляческими загонами, саботирующего принятие решений.
>Ебало в ноль, глаза в пол, чмо. Сопли еще не высохли, а уже изх себя синьора корчит. "Ебаться ему придется"... Когда тебя это ебать начнет, ты скорее всего свалишь тридцадь раз в другой проект. А взрослые люди в гробу видели сопляка с сопляческими загонами, саботирующего принятие решений.
>>705285
Ну вот из-за таких чсв ебанатов как ты проекты и загибаются. Я то хотя бы слышал что-то о том, что эта практика может быть хуйней, а другие челы скорее всего и не работали с этим никогда и не слышали вообще нихуя, поэтому наслушаются сейчас про меньшее количество пулл реквестов и упрощенное ревью и испортят жизнь потом не только себе, а и последующим разрабам на проекте
Нет, сука, чсв ебанат здесь - ты, и именно из-за таких как ты проекты загибаются. Ты знаешь и явно декларируешь здесь, что у тебя нет никакой экспертизы и никаких явных причин против инициативы, но почему то решил, что вправе спорить с людьми, проявляющими эту инициативу. Ты вообще разобрался, почему они вводят монореп? Не думал о том, что для этого у них есть реальные причины? С чего ты взял, что если ты "хотя бы слышал", твое мнение весомее тех, кто эту инициативу проводит?
Если ты - новичок, сиди, молчи в тряпочку и набирайся своего опыта, набивай свои шишки. А если берешься лезть во взрослые дрязги, лезь со своей аргументацией блять, а не на двач иди за чужой. Кусок ты дерьма, ебало бы тебе в реале набил.
Ебать у тебя полыхает, целых два года уже, наверное, круды хуяришь на жабе, уже возомнил себя лучше других. Да ты хуесос тупой, с тобой ни один человек работать не захочет, потому что выебываешься и считаешься только с мнением таких же хуесосов как ты сто проц у вас там микропиздочная команда из 2 разрабов, иначе тебя бы уже давно оттуда выпизднули. Где ты, уебан, в моем тексте вообще увидел, что я хочу, чтобы мое слово в этом вопросе стало последним и хоть один намек на то, что я УЖЕ выступил против этой инициативы?
> или может все-таки нужна?
Сын ебаной портовой шлюхи.
> лезь со своей аргументацией блять
Она на чем основываться должна? Только на личном опыте? Тогда я надеюсь ты пожрал говна и попил мочи перед тем как понять, что это лучше не делать в повседневной жизни? спойлер, нихуя ты не понял Или ты думаешь, что я пойду ответные посты на дваче пересказывать другим разрабам, ахахахха, если да, то ты наитупейший долбоеб.
> ебало бы тебе в реале набил
Ты бы мне в хуй дышал, омежка ебаная, думаешь я не понимаю, откуда у тебя такое желание самоутверждаться за счет других? Ты 150 см девственник, я бы тебя даже трогать побрезговал, максимум харкнул в ебло.
А в какой тред мне задавать вопросы по нейросетям ?
Не верти жопой, кусок дерьма. Свою цитатку ты под спойлер сунул, а наружу выставил свою гнилую натуру:
>Как аргументировать, что монорепа нахуй не нужна на проекте и чтоб это выглядело убедительно?
Тебе не одним мной было сказано блять: не знаешь как аргументировать - не лезь, придурок! Не для тебя эта дилемма, и не тебе кого то переубеждать!
И не с пустого места тебя долбоеба нахуй всем тредом шлют - слава богу на дваче CoC нет. В реальной работе такой хуеплет как ты, вооружившись арсеналом хуеты из интернета, любое обсуждение инициативы легко превращает в ебаный душный фарс на недели проебаных человекочасов в митингах, где вся команда такому дурачку пытается чето разжевать лишь потому, что по историческому недоразумению послать тебя нахуй в коллективе считается дурным тоном и проебом по софт скиллам. Пользуйся случаем и мотай на ус, блять, потому что больше видимо нигде тебе в лицо правду не скажут.
А какие проблемы у серверов приложений?
Зато в джава версии 2023 у нас будет интерполяция строк вида
STR."My name is \{name}", где синтаксис обусловлен защитой от сикуэл инъекций
Правда я не понял, как именно оно защищает, но имем что имеем
кубернетис это костыль для попытки решения проблем микросервисов. Если нет микросервисов, то и кубер не нужен
нет не сидим. Зачем
wsl
Сижу. Для жабы похуй какой у тебя дистрибутив на самом деле. Везде будет все примерно одинаково.
Если приложение - обычное SE-шное, то загрузчик приложения (application class loader). Если OSGi или EE-контейнеры - всякие кастомные загрузчики.
Синтаксически куцая (нет даже такой банальной вещи, как список инициализации), лямбды говно, дженерики говно.
Откуда появился культ джавы?
Что лучше джавы для коммерческого сектора? Котлин недавно появился, если че, но уже много где на нем пишут
> Что лучше джавы для коммерческого сектора
Речь не о коммерческом секторе. Очень часто слышал хвалебные отзывы о ней, мол, очень красивый язык для души. И вот пока не могу понять, почему.
Ну нравится людям и всё. Че тут спрашивать. Кому то на гитаре нравится играть, кому то на джаве прогать
Синтаксис идеальный, не надо пиздеть. Совершенно интуитивный, семантически верный, позволяет создавать такие абстракции, что ебанёшься. Я люблю джаву за то, что она одна единственная раскрывает ООП в полной мере. Однако, непосредственно пишу именно на джаве, всё-таки, не благодаря моему порыву чистой воли, а из-за того, что на джаве написан майнкрафт. Не всё мне конечно из нее нравится, но всякие петухлины и рядом не стояли с джавой. Разве что сралу можно при желании заюзать, но это когда делать нехуй.
простой и логичный язык без 100500 синтаксического сахара или 7 значений символа * как в плюсах. Простая и продуманная стандартные классы, только в нескольких местах косякнули. Нормальная многопоточность искаропки чуть ли не с первой версии. В плюсах с этим до сих пор проблемы.
Вобщем народный инструмент как визуал бейсик или делфи в своё время
Да вам все блять говно... Душнилы ебаные.
Идеальный язык по синтаксису - это хаскель, где есть буквально всё. Хули вы его тогда не адвокатите, вместо своих шарпей ебаных?
> Хули вы его тогда не адвокатите
Неправда, любителей хаскела дохуя.
> вместо своих шарпей ебаных
Я адепт плюсов, вообще-то.
Блять, ну тогда я тебя вдвойне не понимаю. Ладно бы был шарпеем залетным - эти овощи по уровню культурного развития недалеко от спрингокульта ушли. Но ты то должен быть достаточно взрослым дядей чтобы знать ответ на такие тупые и очевидные вопросы.
Ещё чего. Ты бы ещё на паскале или делфи предложил писать.
>Джун: я пишу процедурный кал с залупасервисами
>сеньор: я применяю Transaction script business logic implementation pattern
Очень интересует вопрос: есть ли здесь джависты, работающие на Дальнем Востоке? Существуете ли вы вообще, и если да, то расскажите, какова вероятность устроиться после окончания вузика? В приоритете Хабаровск, конечно, но и насчёт других городов интересно.
Можешь и отдельный init() написать. Не обязательно же инициализировать объект сразу после загрузки класса в JVM.
Ну и пусть себе инициализируются. Чем это создает проблему?
Расскажи хоть побольше о своем кейсе. Что делаешь? Что делает сингтон? Что за поля в нем? На-голую синглтон лабаешь или спрингом? Почему?
По задачам.
Установил Tomcat.
Запускаю приложение.
http://localhost:8080/ - все ОК, тигр и надпись: "If you're seeing this, you've successfully installed Tomcat. Congratulations!"
Создал представление /helloworld, перехожу по http://localhost:8080/helloworld:
HTTP Status 404 – Не найдено
Type Status Report
Message The requested resource [/helloworld] is not available
Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
Apache Tomcat/10.1.9
И гуглил, и ChatGPT дергал - ничего не помогает.
Может вы знаете, анончики?
War? У меня Eclipse, никакого War нет (в уроке Наиля Алишева ничего про War нет)
Урок твоего протыклассника?
На отдельно установленный томкат деплоят war-ки. Можно конечно изъебнуться и деплоить туда .class-ы, в душе не ебу что там твой протыклассник придумал. Или четко следуй его инструкциям или возьми нормальный урок
Мамкин достигатор, который считает свою писанину настолько дорогой, что даже тему кода говорить не хочет "из соображений безопасности". Постоянно таких даунов вижу, приходят ко мне, спрашивают что-то по джаве, когда прошу показать код, то получаю "не)".
не смогло подняться. Смотри логи (не помню где)
не
Нахуй ты вообще это говно смотришь?
я сказал что они введены одновременно в 8 жабе и там и там есть метод map. Видимо неправильно
собеседующий дурик, дай цифры, я ему проясню по человечески
Что ответил?
Зачем такое спрашивать ? :/
Это тред про жабу, а не про джаваскрипт.
Если вопрос по спрингу - то это просто аннотация бина.
Почему так называется? Видимо идет из прошлого, еще когда контекст в виде хмл описывали и там была автозагрузка через рефлексию
У меня java version "20.0.1".
Какие версии зависимостей мне нужны, чтобы сервер запустился?
я бы не стал запускать томкат из эклипсы. Скачай его отдельно, запусти.
Потом собери .war и положи в /webapp томката, он его должен подхватить
Может, ты в 2008 отправил этот пост, и он только сейчас появился?
Если ты понял из комментариев root cause, не проще ли спросить в комментариях и solution?
Или ты как себе все представляешь? Пришел, озвучил проблему, дал НОЛЬ инфы - ни логов ни эксепшонов, выложил какие то выводы, непонятно на чем основанные, достоверность которых неизвестна - ни ссылок на курс, ни ссылок на комменты. И че треду с этим делать? Ванг тут нет.
Наиль Алишев, плез, заебал
Возможно ты не промаппил свое приложение.
Тобиж у тебя должен при компиляции кода появляться WAR файл, который надо класть в репозиторий webapps в папке с том катом.
Посмотри по
http://localhost:8080/manager/html
Та в списке приложений должен быть твой helloworld
Собираешь код
Получаешь war
кидаешь в /webapps
перезагружаешь томкат
он без перезагрузки должен подхватывать
Он просто точку между 2 и 0 пропустил.
Можно только по той же самой ссылке. Дефолтный хешкод у разных объектов разный.
не, именно в разрезе что надо хранить координаты в специальном объекте. И типа в методе hash в хэшлисте есть магия, что хэш иммутабельных классов с одинаковыми полями получается одинаковый.
Не слышал про иммутабельность в джаве
Ну даже если хеш будет одинаковым. Объекты то будут разные, ведь equals не переопределен
переопределил equals - тоже не сработало. Вобщем если возьмут, то надо будет его тыкнуть мордочкой
Как возьмут, так и выкинут.
>то можно не переопределять хэшкод и можно хранить и запрашивать такой объект в хэшмапе
Скорее не прав чем прав.
Такой обьект действительно можно хранить в хэшмапе - так как хэшкод у него не переопределен, его хэш будет считаться как 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 остается только в мапе, а у тебя на руках ее больше нет. Это как запереть замок и ключик выкинуть. В тяжелых случаях это - типичный мемори лик через мапу: когда ты льешь в мапу значения, но не имеешь возможности мапу чистить.
Так что даже в таких случаях переопределение хэшкода полезно.
>то можно не переопределять хэшкод и можно хранить и запрашивать такой объект в хэшмапе
Скорее не прав чем прав.
Такой обьект действительно можно хранить в хэшмапе - так как хэшкод у него не переопределен, его хэш будет считаться как 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 остается только в мапе, а у тебя на руках ее больше нет. Это как запереть замок и ключик выкинуть. В тяжелых случаях это - типичный мемори лик через мапу: когда ты льешь в мапу значения, но не имеешь возможности мапу чистить.
Так что даже в таких случаях переопределение хэшкода полезно.
>И типа в методе hash в хэшлисте есть магия, что хэш иммутабельных классов с одинаковыми полями получается одинаковый
Пиздит. Надо было пруф с него стрясти.
Это не совусем правда.
Для хэшмапы важны гарантии консистентности equals + hashCode, плюс гарантии неизменности их результата. Если мутабельные поля не участвуют в вычислениях equals/hashCode, такой обьект еще может быть ключом.
Правда на практике делать ключом такой обьект все равно звучит как всратая идея.
Открываю идею которая стоит на диске С и пытаюсь открыть проект по пути выше. Проект не открывается, просто на мгновение появляется окошко идеи типо сейчас открою и сразу же исчезает. Кто-нибудь с таким сталкивался? Как фиксить?
капча во
Скачать линуксовую версию идеи. Нужен WSL 2.
Ну просто как-то неудобно что если с вскодом я уже полностью считай перешёл на разработку внутри wsl, то с идеей так не получилось
Вот и уёбывай в свой вскод.
Ебанутый, зачем?
Ставь гнилукс и прогромизди в нем
А я люблю няшный шарпик :3
Все джависты - некрофилы.
Джакарта так то тоже по сей день релизится. А на груви последний раз евангелисты дрочили где то в 2015м. Его щас вообще юзают где либо, кроме билд пайплайнов на градле?
Билд пайплайны на дженкинсе. Всё.
Вокруг 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 ей не рады.
Ебать ты дед.
480x360, 0:06
>>приложения на Java работают в 1,5-2 раза медленнее приложений на C++
>>с работой GC связывают периодическое подвисание
>>на Symbian
>>Апплеты
>>десктоп-приложений
>>Nokia
Как там в 2007?
>>Sun строила грандиозные планы по захвату мира с помощью Java
Поэтому сделало ее бесплатной, отказалась продаваться микрософту и одним из условий продажи ораклу сделала бесплатность джавы?
Совсем не микрософт, который разорил нокию и скупил патенты за бесценок, чтоб жить на проценты
Для скачивания программ необходимо зарегистрироваться в Sun Developer Network (SDN).
Чтобы можно было обсуждать фильмы, выставлять им рейтинг, вступать в группы фанатов того или иного фильма, постить различные фан-арты.
Есть ли курс, который может обучить этому?
Да.
Спроси у чатгпт.
>Я постарался посмотреть на ситуацию объективно
>объективно
>Во-первых, известно, что приложения на Java работают в 1,5-2 раза медленнее приложений на C++...
И просто с первого предложения, не читая дальше, размазываю смачный харчок ботинком об ебало демагога ебаного.
Эт ты тот чел, который кинопоиск делал пару перекатов назад?
Сори, но ты не в сишарпе где все это делается легко и элегантно с поддержкой инструментария от вендора, который является самой технологичной компании современности)
фронт - GWT
Это джава кастрированный. Вот в жс можно всунуть строчку, а потом впихнуть в нее цифру и вернуть цифрой из функции. А вы, ну жертвы бюрократии.
Уже делали реакт компоненты, от классов в итоге все отказываются.
В джаве тоже можно, только безопасней.
>с работой GC связывают периодическое подвисание мобильных устройств, работающих на Symbian
Этот скуф-байтоеб и на 2011 году не шарил. Нативные симбиановские приложухи писались на плюсах, а жаба там была на уровне java me, как и в обычных телефонах.
И как раз то, что оно писалось на плюсах и привело к тому, что там был очень неудобный sdk, отвратительная обратная совместимость приложений для разных версий симбиана и встроить магазин приложений было очень сложной задачей, нокия смогли это сделать только через 2 года после выхода ios на рынок.
в 2011 были лсд мониторы 17 дюйков. ЭЛТ это примерно 2000-2005
Тебе за рекламную интеграцию хоть майки заплатили?
в шестой
>>718961
Если хочется представление сложить о том, как спринг изнутри анноташки обрабатывает, то это Борисов "Спринг-потрошитель". Но надо учитывать что анноташка анноташке рознь: если базовые Bean, Autowired, PostConstruct/PreDestroy - прероганива кор-фреймворка, с его биндефинишенами и постпроцессорами, то аспектные аннотации уже будут про кодогенерацию средствами CGLIB, а ORM'ные Entity - JPA и их референс имплементаций - каждая тема гуглится и изучается отдельно.
Если под "основами" ты имеешь ввиду "что спринг вообще умеет и как его можно варить чтоб было круто", но ничего банальнее каких нибудь книг по спрингу от маннинга/орили тебе никто не посоветует. Либо официальная документация - она довольно хорошо раскрывает пользовательский аспект.
Это пиздец.
Дока по кору и буту.
все ништяк 😎
По сути это Thread.sleep, но с тиками и разделенными методами выделения промежутка времени и непосредственно блокировки(block). Плюс там тесты лежат, тоже хотелось бы узнать, насколько я по еблански их написал.
А нахуя мне реальное время-то? Главное отличие условного, от реального, что я могу остановить его течение в любой момент.
По поводу реализации есть что сказать?
>Главное отличие условного, от реального, что я могу остановить его течение в любой момент
с такими заявлениями те к санитару нах 💉
Инкрементируя каждую секунду переменную t мы назовём эту переменную условной поскольку в любой момент можем как перестать её увеличивать, таким образом "остановив" её, или начать декрементировать повернувшись время вспять. Также может сменить время с одной секунды, до скажем 100мс, таким образом ускорив временной поток.
Чел, помимо оффтопа есть что сказать? Просто посмотри код или не еби мозги, если впадлу.
Чет дедлокнулся. Или ЧЯДНТ?
ЗЫЖ чел, тыб хоть документацию внятную написал, примеры там вбросил бы, а тож нихуя не понятно (даже по тестам).
Тихо там, в петушином углу. В кои то веки в тред зашел кто-то, кто не чмоха-шарпист и не нытик-вкатун - цени момент блять.
Ну, ты зарезервировал три тика. Три тика прошли?
Спеки я писать не умею нормально, к сожалению.
Ещё как локи, их надо освобождать через relax().
По сути, есть временная шкала, которая задаётся количеством вызовов tick(). Теперь относительно этой шкалы мы можем обозначить метод reserve(), который берет нынешнее количество вызовов и протягивает вперёд момент, до которого могут вызываться тики.
Т.е. если до этого было вызвано 30 tick(), то метод reserve(5) скажет, что значение 35 достигать не надо. Пока не будет вызван relax, который уберёт тред из учёта метода tick() или не будет вызван ещё один reserve(>0) тики будут блокироваться.
await() же просто морозит тред до достижения тиков. Не знаю понятно ли....
Ну и ещё очевидно, что я никак не могу гарантировать момент вхождения тредов в учёт.
Поэтому нужны защёлки для тестов.
Бля, непонятно пояснил.
У тебя первый тред зарезервировал 2 тика. Более он ничего не резервировал. Программа ожидает, что он или сыбет через relax(), ну или зарезервирует себе ещё квантов.
>Ну, ты зарезервировал три тика.
Тащемто пять - три в одном треду и два в другом. Или ты о чем?
>Три тика прошли?
Нет, не прошли. На втором тике и случился дедлок. Разве не видишь?
>Не знаю понятно ли....
Не очень
Давай так - если видишь что я неверно юзаю твой тикер, поправь код и пришли обратно.
Вот https://github.com/anywaythanks/ExtendedSynchronizers/blob/main/src/test/java/OrderedTest.java
Можешь вместо атомика впихнуть sout(c);
>Тащемто пять - три в одном треду и два в другом. Или ты о чем?
Они индивидуальны для каждого треда. Ну т.е. каждый тред резервирует тики под себя и tick() учитывает все это множество резерваций. В твоём случае:
Tick: |1|2|....
TP1: |..2..| sout(...);
TP2: |..3.......
.... - это ожидание
Пикрил сработал
>>720145
Он не дошел до третьего тика, он заблокировался на втором
Кароч мой вердикт такой - я вроде бы примерно понял чего ты добиваешься, но для меня все еще странным выглядит то, что я прям обязан был сделать релакс из треда. Это неочевидно, небюезопасно, неудобно и как будто бы этого можно было избежать.
Я еще покурю это твое поделие, и может еще чего добавлю к вышесказанному.
>но для меня все еще странным выглядит то, что я прям обязан был сделать релакс из треда
Воспринимай как unlock(). Ну или release() у семафора. Обычное дело, вроде. Хотя могу ошибаться
А, ок. Аналогия понятна
Нет,это невозможно,можешь даже не пытаться
Читаю CoreJava Хорстманна, он там предлагает использовать nextline braces
Хотя какой код не смотрел, да и в idea по умолчанию end of line. И стандарт у oracle вроде так. Таки кринж ли это? Как вы ставите скобки, анончики?
Это зависит от принятых в компании соглашений. Как скажут ставить, так и будешь.
Это че за язык и методы? Такого говна в стд нет.
Если за 10 секунд не можешь придумать ничего лучше — можно.
А вот объявлять переменные по классу, а не интерфейсу, когда интерфейс есть — моветон.
Ну если мне только он тогда написал... Чеб нет-то?
Можно в один compute уложиться.
В чем суть кода? В стриме есть коллектор с подсчётом, если нужно подсчитать количество букв в алфавите
mvn
mvn spring-boot:run
>>721033
ctrl + k
>>721034
https://docs.spring.io/spring-framework/reference/
Напиши свой плагин для идеи с кружочком и цыферкой. Ну или поищи в готовых - может уже нашелся такой же дегенерат.
Напиши автокоммитер по входу и выходу из иде + кд.
Але пидоры
Если статика, возвращать её правильно через Nginx. А так, вроде, были какие-то варианты с инпутстримами, чтобы не загружать данные целиком в память.
Тут определённо замешаны жиды.
Resource вроде бы.
Шансы вката около нулевые, вот все и разбежались.
Надеюсь, твоё утверждение учитывает, что private не имеет никакого отношения к инкапсуляции?
Сокрытие инфы. К примеру, инкапсуляция спринга - когда скрывают инфу по спрингу от вкатутось.
>Дали задание сделать контроллер возвращающий изображения
Вангую, что у вас нет техлида, раз вы такой хуетой занимаетесь
>Уже прикрутил минио
Лицензию чекни, прикручиватель, лол!
>В связи с этим вопрос,как возвращать пикчи из контроллера?
Никак? Неужели это так сложно понять? Ну не нужно статику раздавать из своего приложения на жабе, лол. Ну положи ты файл в свою файлопомойку, а в базе сохрани url или айди до файла. Его и возвращай. Или как уже рекомендовали, сделай хитрую проксю на nginx'е, которая будет таскать файлы из файлопомойки
Может его картинка - не статика? Может у него сервис, генерирующий изображения? Че так сразу с плеча то рубить - "никак"?
>>721629
Как то так примерно:
@RequestMapping(value = "/download", method = RequestMethod.GET)
public ResponseEntity download() throws IOException {
String filePath = "PATH_HERE";
InputStream inputStream = ... // здесь стрим с твоей картинкой
InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
HttpHeaders headers = new HttpHeaders();
headers.setContentLength(Files.size(Paths.get(filePath)));
return new ResponseEntity(inputStreamResource, headers, HttpStatus.OK);
}
Мимо
А вот и нет! Александр Шевчук как раз и говорит, что инкапсуляция - это про сокрытие информации, а не про объединения данных и кода
https://youtu.be/nFNpDqrmCug
Таймкодов ты конечно не даш, да?
Кто это вообще? Реинкарнация Бугаенко на шарпах? Почему он говорит голосом Михалкова с БесогонТВ? "Власти скрывают"?
Чет ору
Ну кароч я понял, опять какой то эксгибиционист вывалил свой ООП-срам наголо.
Можно конечно похоливарить об ООП, это весело и задорно, но выше я всего лишь хотел предупредить вкатунов (которых здесь по всей видимости - подавляющий процент), что трактование инкапсуляции как средства для сокрытия данных на собкесе может быть чревато фейлом.
Да ты заебал!
>Ведь она тратит лишний байт на символы из ASCII
В джаве - не тратит, благодаря фиче Compact Strings
А я-то думал...
К слову, а почему вместо изменения/написания сразу алгоритма хэша, который не будет выдавать ноль, оракл добавила флаг isZero? Причём столько мялась перед этим...
Да, двумя байтами UTF-4 кодируется один байт сырых данных.
всё это вкусовщина, как и все эти solid dry restful и подобное. Не угадаешь мнение собеседующего - ты в пролёте
Нет, utf-8 придумали на год позже, чем utf-16 и за 3 года до выхода первой версии джавы.
Википедию про ucs-2 поридж не дочитал?
Я ответил что не закрытые пулы потоков, кеш без задания лимитов или инвалидации, статические коллекции живут всё время жизни приложения.
Что ещё можно добавить?
Память может течь от использования джавы.
Чаще всего память течет во время сексуального возбуждения. JVM чувствует страсть и сильные эмоции, думая о сексе или объекте своего вожделения. Вместе с возбуждением, появляется и напряжение в области живота, после чего можно заметить выделения на трусиках.
Какие ещё не закрытые пулы потоков? И че, много память течёт от них? Ещё коллекции статические... Как они тебе мешают?
Я не понимаю, что значит течёт... Если ссылка есть, значит она нужна(?).
Как по мне, это использование ссылок таким образом, что они пропихиваются в old gen, и будут ожидать полной очистки гц. Типо кривого линкед листа. Ну или использование паттерна object pool.
Ещё операциями со string память может засраться.
ArrayList только расширяется. Даже если удалить все элементы, то массив под капотом по прежнему будет жрать память.
А какая вероятность, что лист снова не расширится до такого же размера? И куда, к слову, данные делись...
Я бы рекомендовал перейти на LinkedList, чтобы сборщик мусора мог спокойно работать.
не, так не задумано.
Написал ты приложуху, она через сутки работы падает с ООМ. Смотришь мониторинг - потребление памяти растёт пилообразно. Значит течёт память. Куда смотреть что проверять?
Если на твой сайт зашёл пользователь, что-то поделал и тем самым увеличил ArrayList, то через пару дней память закончится и сайт начнёт тормозить. Придётся звонить админам и просить перезагрузить сервак.
А если используешь LinkedList, то сборщик сам всё почистит и не надо сервак перезагружать.
А нахуй его хранить-то? Он пожелал в отдельном треде и благополучно тред исдох. Как и связанные данные.
ну и что ты увидишь в этом дампе? Какой-нибудь ноунейм эррей лист или стринг в 1гб. Что это и откуда это?
Ну точнее таске, а не треде. Щас бы треды заводить на каждого юзера
вот я про эту ситуацию говорил. Если в пользовательском потоке создали и запустили тред пул. Пользовательский поток благополучно сдох, а тред пул продолжает жить
И? Тредпул должен завершаться тогда, когда все завершается. Че каждый раз тредпулы создавать?
нет, тредпул это тред. Он остается жить после запуска если его руками не завершить. Даже если родительский тред помрёт
Бля, у тебя есть глобальный тредпул для обработки юзеров. Он начинается и завершается, соответственно при начале и конце работы сервера или че там.
Нахуй его трогать вообще? Прикол тредпулов как раз в том, чтобы каждый раз не создавать треды, а ты какую-то хуйню делать хочешь
получил ты свой тред для юзера. И внутри хочешь сделать параллельное долгое вычисление. Создаешь тред пул, запускаешь, отдаешь результат. Если не сделать threadpool.shutdown(), то он будет продолжать жить, даже если ссылки на него нет
>Он остается жить после запуска если его руками не завершить. Даже если родительский тред помрёт
Не всегда. Треды-демоны дохнут сами, если кроме них тредов не осталось.
Да вродь есть.
http://blog.rejeev.com/2009/04/analyzing-memory-leak-in-java.html
Повторюсь, это вообще не головная боль джуна... Нахуй об этом спрашивать?
>>723164
>Создаешь тред пул
Нет, не создаю. Параллельным долгим вычислением должен заниматься другой класс и это его проблемы, че он там освобождает, а че нет. А уж он и вовсе может использовать RecursiveTask, там не надо освобождать ниче.
>Если не сделать threadpool.shutdown()
Если один тред навечно заблокировался, то все равно "утечка" будет.
пул это не демон. Для примера вот запустил и оно продолжает висеть
Всм выебнулся? Это ты хуйню несешь.
>не закрытые пулы потоков
Формально оно конечно так, но это какой то всратый кейс - ты в лик уйдешь таким образом если совсем тупое начнешь делать, типа создания и прогрева новых тредпулов снова и снова в бесконечном цикле.
>кеш без задания лимитов или инвалидации
Слишком абстрактно. Какой конкретно кэш?
>Cтатические коллекции живут всё время жизни приложения
Ну и что? Классы тоже обычно живут все время жизни приложения - че теперь считать класслодинг мемори ликом?
Вот кейсы, встреченные мной из практики:
- Утечка памяти по хэшу: если ты используешь хэшмапу с мутабельным ключом, в тот момент как ты записал что-то в мапу и смутировал ключ, значение из мапы ты больше ни удалить ни получить не сможешь. Это наверное самый упоминаемый кейс утечки.
- Класслодер-лики: редкий случай, встречается в окружениях где есть кастомные класслодеры, типа OSGi. Если ссылка на класс, загруженный одним класслодером, просочится в класс, загруженный другим класслодером, при деаллокации первого класслодера его классы не соберутся сборщиком и останутся висеть в системе мусором. В тяжелых слуаях может дойти до того, что в одном рантайме один класс может быть загружен десятки раз, а его инстансы на instanceof <Classname> будут давать false.
Да
Нет,инкапсуляция это про сокрытие внутренней реализации и только про нее. На твоих сектантов всем сраьь
Да.
Конечно.
Это Jupyter? С этим несколько часов возиться. Лучше сам выучи синтаксис джавы по какой-нибудь мурзилке https://metanit.com/java/tutorial/ и по ходу дела спрашивай здесь о конкретных проблемах, которые у тебя возникли.
Обещают сделать из Java нормальный язык, а не хуйню для написания энтерпрайзного говна для банков.
>Обещают сделать из Java нормальный язык, а не хуйню для написания энтерпрайзного говна для банков.
Иш чаво удумали, хуй им.
А можешь джепы по скидывать, че там введут?
М-да... Ниче себе они там напланировали. Как 8 жава. Жалко, что они пока предварительны.
Мне в текущем проекте пригодился бы Pattern Matching for Switch, который в 21ой выйдет из превью. Но 21ая выйдет в конце сентября, а мне проект в середине августа сдавать.
Другой проект мы с 11 на 17 очень легко перевели.
Вот теперь думаем насчет спрингбут 3. Там все намного хуже с обратной совместимостью. И пока я не увидел нужных фичей в 3.1 по сравнению с 2.7.
>Jupyter
Это пример нейронной сети на phyton'e. Трехуровневая с тремя входами и двумя выходами. У меня не получается в конце что-то.
Веса корректируются, но в конце, после обучения, если взять получившиеся веса и подставить ко всем нейронам - сеть будет работать плохо. Хотя при обучении все веса встают нормально к разным вариантам входных данных...
Коммит делать в feature и вливать в develop. Остальное тебя ебать не должно.
Почитаю, спасибо.
Жетбрейнсы опять соснули? Вот ведь пидорская контора...
Почему лампасы из оракла решили, что
var scope = new StructuredTaskScope.ShutdownOnFailure()
лучше чем
var scope = StructuredTaskScope.shutdownOnFailure()
?
Первый вариант выглядит вообще не по джавиному.
>>думаем насчет спрингбут 3.
3.1 в ноябре вроде выходит, там этот чел обещал все починить
https://www.youtube.com/watch?v=_o7NIaOVjNM
Какбэ ShutdownOnFailure - класс, а не метод. Так что все максимально по джавовому.
Если тебя так это заботит, сделай статический импорт.
И че? Почему я должен внутренний класс создавать через new? Выглядит как шарп с их большими буквами.
Спать пойду.
Я тоже.
На реакте. С каким то кастомным юай китом, отчего регулярно получается "пук среньк, починить не можем, это баг кита, заявку отправили"
>3.1 в ноябре вроде выходит, там этот чел обещал все починить
3 недели назад вышел: https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter
Ещё какую-то жиру надо учить? Сколько можно-то? Я что должен выучить всё говно, что насоздавали за 30 лет!?
А представь каково врачам и юристам
Еще по идее со всеми плагинами и по слаку/тимсу/етк.
>Почему я должен внутренний класс создавать через new
Всмысле - "почему". Инстансы всех классов (кроме разве что енамов) создаются через нью, внутренние - не исключение.
До чего ты доебался то, я не пойму? Всю жизнь так было - классы с большой буквы, методы - с маленькой. Это класс? Класс. Все, вопрос исчерпан.
Ну вот решили почему то ораклы обьявить этот класс внутри интерфейса. Первый раз чтоли? Еще раз тебе говорю - если тебе так сильно режут глаз шарпистские вайбы, просто статически проимпорть StructuredTaskScope.*
https://www.jetbrains.com/help/idea/installation-guide.html#requirements
Запускал на минимальном железе и идея полчаса запускалась, но так и не смог дождаться когда можно будет вводить код, постоянно что-то лагает и мешает работать.
Но ведь запустилась же?)
мне походу реально нужен курс какой то платный, самому лень пиздец.
Да. Я за год прочитал двухтомник Хорстмана, посмотрел курс лекций по джава-кору на ютубе, прошел курс на степике и 60% стрека на hiperskills.
Потом еще за 8 месяцев прошел по maven+spring-core/boot+postgres+hibernate+spring data+http\rest+spring-mvc+html+js+docker+git/github по слитому отусу, баелдунгу и разным статьям на хабре. И написал три пета.
Потом 3 месяца ходил по собесам/стажировкам, залетел на курсы епама(во время перевода на стажировку они слились из рф).
Ну и в итоге имел штук 5 попусков на техсобесе. И 3 офера в галеры. Две были донные(в одну я походил на стажировку и свалил на испыталке, в другую не стал принимать оффер). Ну и была не совсем донная галера, где я полтора года уже работаю.
Ну 2 гига это надо очень аккуратно запускать и следить чтоб ничего лишнего не было запущено, но на 4гб все вполне нормально должно работать
>за год прочитал двухтомник Хорстмана
Ну не знаю... Мне кажется учить язык по книгам это жесть. Лично я предпочитаю статьи и видео.
1280x720, 1:23
Если книг читать не будешь - скоро грамоту забудешь!
Мешает очень... Два отступа между методами, один мой, а второй который я не могу убрать.
Попробуй блокнот.
Используй Эклипс
А давно жава стала системным яп?
Хуясе ты хтонь вспомнил. Я на солярке последний раз в 2012м работал.
Что забавно, у солярки времен Sun, помимо дефолтной CDE в качестве десктопа и оконного менеджера, существовала полностью функциональная альтернатива в виде Java Desktop System... которая на самом деле не была написана на Java, кек.
Узнал про Solaris на Википедии? Молодец, можешь теперь обсудить это с теми, кто тоже узнал об этой хуйне на Википедии.
Я умнее.
>статические коллекции живут всё время жизни приложения.
Почему так ? А поля статические тоже живут всё время жизни приложения ?
Статика живёт столько же, сколько сам класс. А класс живёт столько же, сколько живёт классдодер, который его загрузил. Чаще всего это время равно времени жизни процесса. Но не всегда.
Если по простому, для сортировки листа элементы этого листа должны впринципе поддерживать такое понятие, как сравнение себя с себе подобными. А super в дженерике потому, что если сравнение поддерживается для класса-родителя, для класса-потомкам оно тоже подойдёт.
Пизда.
Я вот и говорю, что надёжней делать копии папок. А этот гитхаб говно полнейшее, хоть его сейчас и во всех вакансия требуют.
Ты не отличаешь гит от гитхаба, да?
Можно написать скрипт, при запуске которого будет сохранятся папка проекта в отдельную директорию и к названию сохраненного проекта будет добавляться дата.
Зашо? Съездил в Крым в отпуск что-ли?
Собес - это не тест с правильными и неправильными вариантами ответа. Это диалог с целью оценить кандидата. И вопросы там обычно не имеют единственного правильного ответа, они скорее дискуссионные. типа двум людям задали один и тот же вопрос, и оба ответили верно, но первый смог сказать только пару предложений, а второй рассказал такое, о чём сам собеседующий не знал. Хотя когда чел несёт полную хуйню, ему обычно сразу об этом не говорят, только подводя итоги в конце собеса. Но можно понять по реакции, понравился ли им твой ответ.
Есть вот такое вот АПИ. Оно может принимать одну, либо несколько валют. Ответ соответственно тоже может содержать либо один, либо несколько объектов. Пример ответа на пикрил.
Как его правильно парсить, если не знаешь точное количество объектов в поле rates?
А это идея. Благодарю тебя, милый человек!
Мб, но я пробовал его, и там посыпалось 100500 эксепшнов, что он не может десериализовать объект.
Ну что, умеет твоя либа работать с корневыми значениями, отличными от объектов? Жсон вида "123" она распарсит?
Да, только если будешь это куда то коммитить, галочку такую поставить не забудь.
Для обратной совместимости с ucs-2
Проблема в тебе.
Нет. Даже об их существовании знать не нужно.
TreeMap/TreeSet
То есть, получается 2 класса с одинаковым состоянием и поведением ?
Да.
вобщем у тебя объявление класса внутри другого класса. Либо вынеси этот класс наружу, либо сделай статичным.
Приличным тоном считается каждый класс в отдельном файле
Дякую :3
Смотря что ты вкладываешь в понятие "перенимаем". Байткод базы в наследника копироваться не будет, если ты об этом.
Петушара, в стойло.
https://www.youtube.com/watch?v=vtPkZShrvXQ
И?
Классы и класслодеры - такие же обьекты как и все остальное. Если на них ничего не держит референс, они могут быть почищены GC.
По умолчанию в SEшном рантайме такого по факту не случается никогда - все классы грузятся тройкой стандартных bootstrap -> extension -> system класслодеров, и рантайм их не отпускает до конца выполнения приложения. Но всегда можно породить свой класслодер, и через него грузить классы по своему. Отпустив свой класслодер, отпустишь и все загруженные им классы, и они станут доступны для сборки GC при условии что на них больше никто не держит референс. Получаются какбэ зайчатки плагинной архитектуры с загрузкой/выгрузкой плагинного кода по требованию. Многие тулы и фреймворки пользуются этой фичей, например Java EE контейнеры и OSGi.
Что тебя удивляет? Индекс Магомеда растет, а он муслим - так что тоже считается.
Спрашивается, почему эту идею насильно продвигают везде? Функционал у неё явно не тянет на деньги, что за неё хотят. Да и ресурсов жрёт не мало, постоянно лагает по непонятным причинам. Есть куда более удобные и легковесные решения, а главное полностью бесплатные, но нам всучивают эту идею.
Но все сидят на ультимейт и на работе тоже заставляют пользоваться идей ультимейт.
На работу берут тех, кто уже умеет работать в ультимейт, следовательно надо как-то раздобыть себе личную версию ультимейта.
Еще раз - и Java и Git бесплатны
>>Количество незакоммиченных файлов не отображается
Сами файлы отображаются, нахуя мне их считать?
>>статус тоже нигде не виден
зеленый - новый файл, синий - незакомиченный
>>запушил ты или нет - можно только догадываться.
В чем смысл не пушить сразу после коммита?
Да и подсвечивается на самом деле в виде стрелочки в правом нижнем углу.
>>проще самому в консоли все команды писать
Раз тебе так удобнее - пиши
Там есть неудобные вещи, но ты ни одной реальной не назвал.
>>Да и ресурсов жрёт не мало, постоянно лагает по непонятным причинам.
у тебя 2гига 2 ядра? хром жрет в разы больше
>>Функционал у неё явно не тянет на деньги, что за неё хотят
тебе то откуда знать, мух?
>>идею насильно продвигают везде
жри эклипс, он бесплатный и даже поддерживается
>>Есть куда более удобные решения
нет
>>730138
>>надо как-то раздобыть себе личную версию ультимейта.
учебная, триалка, тестовая - выбирай любую и учись, если тебе действительно это нужно
>>Количество незакоммиченных файлов не отображается
Сами файлы отображаются, нахуя мне их считать?
>>статус тоже нигде не виден
зеленый - новый файл, синий - незакомиченный
>>запушил ты или нет - можно только догадываться.
В чем смысл не пушить сразу после коммита?
Да и подсвечивается на самом деле в виде стрелочки в правом нижнем углу.
>>проще самому в консоли все команды писать
Раз тебе так удобнее - пиши
Там есть неудобные вещи, но ты ни одной реальной не назвал.
>>Да и ресурсов жрёт не мало, постоянно лагает по непонятным причинам.
у тебя 2гига 2 ядра? хром жрет в разы больше
>>Функционал у неё явно не тянет на деньги, что за неё хотят
тебе то откуда знать, мух?
>>идею насильно продвигают везде
жри эклипс, он бесплатный и даже поддерживается
>>Есть куда более удобные решения
нет
>>730138
>>надо как-то раздобыть себе личную версию ультимейта.
учебная, триалка, тестовая - выбирай любую и учись, если тебе действительно это нужно
В VS Code отобржается количество незакоммиченных файлов, также на нижней панели отображается сколько файлов не запушенно. Так что вс код по удобству работы с гитом лучше идеи.
Кроме того там есть плагины для работы с джавой и даже со спрингом, а это уже превосходит функционал бесплатной идеи.
К тому же вс код прекрасно работает на 2 ядра 2 гига.
Спасибо.
Блокнот
Protected - антипаттерн, его давно пора задепрекейтить и по умолчанию выключить, а для включения сделать специальный флаг компилятора, которому надо передавать полный список файлов, где разрешено использование protected. Туда же проверяемые эксепшены.
А чейта? Это ж по сути апишка управления онли для наследников класса. Хотя её можно достигнуть и просто заприватив все конструкторы... AQS, например... Есть что почитать по этому поводу?
А нет, там протектед конструкторы. Не, реально, поясни чому это антипаттерн, который есть в стд бля
>>отображается сколько файлов не запушенно
Если тебе обязательно каждую секунду знать сколько точно файлов у тебя в пуше - то не работай в идее. Другим это не нужно. Даже плагинов на эту тему не делают, потому что похуй.
>>Так что вс код по удобству работы с гитом лучше идеи.
Лучше, но не из за счетчика файлов. Ищи дальше.
>>это уже превосходит функционал бесплатной идеи.
у меня ультимейт
Это копия, сохраненная 15 июня 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.