💥🚀 Приведите свой код к уровню ВАУ с Java 22 - это просто обязательно!
🆕 Новые фичи: — Супер-код: пишите код до super(); и this();. 💻 — Стрим-вечеринка: добавляйте свои собственные промежуточные операции, например, batch(). 🎊 — Запускайте Java как питона - в одну команду, без компиляции, даже если файлов море! 🐍
🔄 Обновления: — Документация врубает короткую входную точку (void main() {}), заменяя неназванные классы на неявные - и это официально! 📄 — Встроенный кастрированный ASM, который ускорил сборщик мусора и освободил Java от зависимости от этой библиотеки. 🛠️ — Форейн функшен вылетает из превью, а Вальхалла уже вполне скоро будет на виду. 🌋
🔍 Изменения существующего: — Обновлены шаблоны строк, переменные в лямбдах через _, структурированная многопоточность/скопед значения и вектор API - они прокачались, но остаются в превью/инкубаторе. 🎈
>>3115562 (OP) >Java 22 Уже 5 по счету компания пишет жава 22, а на собесе выясняется, что там JVM 22, а синтаксис до сих пор используется java 8 или максимум java 11, лул
Уже, наверное, больше года применяю паттерн реставратор для организации работы с базами данных. Если понадобится сделать распределённую систему (пока что не понадобилось, одни копролиты пишу), просто налажу мессаджинг и постепенное обновление данных (в 99.9% случаев обновление с запаздыванием приемлемо).
До сих пор этот подход работает. В чём я не прав? Почему это сломается как только понадобиться сделать микросервисы? Нахуя нужны монго дб, спринг даты и прочий т.н. энтерпрайз кал если такой примитивный подход работает в т.ч. в энтерпрайз задачах и даже обеспечивает нихуёвый перформанс?
>>3116144 У меня тоже B2B калопровод на 0.00005 RPS, сижу судорожно изучаю кафку и изоляции транзакций, но не понимаю кому это может при-го-дит-ся, где...
>>3116144 >>применяю паттерн реставратор для организации работы с базами данных Это когда из бэкапов что то выковыриваешь что ли? Никогда не слышал о таком.
Ссссссука, как же опшионал хорош. Бля, надо запретить нуллы нахуй, когда есть опшионал. Даже похуй на оверхед в перформансе, да, можно было бы и без него, но даже так это того стоит.
Так там ещё и оверхеда нет. Взял бенчмарк от растомана, что пару лет назад кукарекал про оверхед и написал статью, в которой призывал отменить злую медленную джаву за отсутствие зеро кост абстракций, и получилось что опшионал равен нуллу. Может он тупо в наглую результаты подредактировал, что возможно, может это развитие от 17 до 21 джавы, может грааль вм такой умный.
>>3117080 >>3117083 А, я перепутал оверлоадинг и думал про оверрайд. Ну да, забавный пранк. Только опшионал не для того, чтобы его в параметры методы ставить, он для ретурнов.
>>3117087 >Только опшионал не для того, чтобы его в параметры методы ставить, он для ретурнов. Он для чего угодно, не ставить его в параметры - это просто какой-то чел сказанул на SO и это возвели в ранг правила, якобы потому что это архитектурно плохой шаг, т.к. Optional сам может быть нул. То что он так же может быть нул на ретурне почему-то никто не вспоминает
>>3117162 Если смотреть на опшеналы как на средство для null-free кодинга на говне и палках, ставить опшеналы в сигнатуры - оверкилл. Ты идеологически уже кодишь без нулей - ну так и дизайнь код блять без нулей. Пусть в сигнатуре твоих методов будут только нужные методу аргументы, а ненужные туда не суй даже как опшеналы. Всегда полагай, что аргументы твоих методов ненулевые. Если у метода есть опциональный аргумент, скорее всего его всегда можно разбить на два метода с аргументами обязательными.
А вот ретерн - это другое. Ситуации, когда метод может легально ничего не вернуть, встречаются сплошь и рядом, при этом разбить такой метод уже не всегда получится. А тем временем самые хуевые nullы возникают именно тогда, когда их возвращают из метода, нежели когда передают аргументами. Потому что в месте где такой null стрельнет, инфа из стектрейса уже не будет содержать место, где этот нуль возник.
>>3117178 >Пусть в сигнатуре твоих методов будут только нужные методу аргументы, а ненужные туда не суй даже как опшеналы. Ну это было бы просто идеально, но к сожалению не всегда получается
>>3117193 Идея кстати при генерации заглушек реализаций методов возвращающих строку ставит автоматом возврат "" (и ещё для некоторых особых типов типо числа или опшионала свои значения, и нулл для всех остальных), вместо того чтобы выкидывать NotImplementedException() или вообще писать preventcompile;. Можно ли как-то эту хуйню отключить?
>>3117193 Для стринги, допустим, отбрехался. А для всех остальных мыслимых типов, включая бизнесовые сущности, сможешь придумать такой же null-заменитель?
>>3117265 >Кстати Бугаенко то как раз топил за обьекты нуль-заменители А чем нуль-заменители отличаются от опшионал эмпти? Тем что там отдельный объект на каждый тип?
>>3115562 (OP) Лид на проекте обезумел. Заставил всю команду писать тесты по классической (Детроитской) школе тестирования. Теперь воссоздаем весь граф объектов в тестах и пишем тесты. Старые тесты на моках все удалили, т.к. лид посчитал их хрупкими.. А как вы пишите тесты?
>>3118244 Не знаю, насколько это хорошо для самой задачи тестирования, но, безусловно, очень хорошо для самоконтроля для предотвращения ООП-копролитизации, когда ни одну функцию нельзя вызвать в глобальном контексте без передачи ей всего приложения в качестве параметров.
>>3118274 >функцию Бля... куда ты лезешь, лол? Типичное приложение на джаве - это спринг круд из матрешки вида контроллер - сервис - репозиторий. Сервис при этом может вызывать дохуя других сервисов. Теперь дрочим new MyServiceImpl по 10 раз на тест.. Сама классическая школа тестирования утопия и говно. Работает онли на простых примерах из двух классов. В реальных энтерпрайз приложениях у тебя взаимодействие десятков классов на изи
>>3118281 Успокойся, дебил. Вся команда страдает из-за таких как ты. Вместо понятно мокирования, теперь нужно дрочить весь граф зависимостей и все равно втыкать говностабы. Фу, блядь..
>>3118295 Найс тупой анальник бахнул от того, что пришёл на сосач за поддержкой против злой мамклида, а его не поддержали, да так бахнул, что до сих пор ничего вразумительного не выдавил.
>>3118296 Спок, кретин.. Я не собираюсь писать тесты по чикагски и воссоздавать весь граф объектов, лол. Ты никогда не работал на крупных энтепрайз проектах. Я просто как истинный лондонец замокирую зависимости и быстро все протещу
>>3118244 >>Старые тесты на моках все удалили, т.к. лид посчитал их хрупкими. А классика типа не хрупкая? Точно такое же говно вид сбоку. Либо уж в ДДД упарываться как Хориков советовал, либо сразу интеграционные пишите.
Бля, недавно случайно наткнулся на Eclipse Collections либу. Оказывается можно иметь стримы без .stream, вместо .map.collect писать сразу .collect, можно иметь getFirst/getLast раньше 21й джавы!, можно иметь коллекции примитивов, просто более компактные коллекции, иммутабельность на уровне интерфейса. Странно что я раньше нигде не видел эту либу в проектах.
>>3118244 Никак нахуй, пишу код, меняю ветку в дженкинсе на свою, поднимаю свой под в аргосд, тесчу быстро пробегаюсь по своему говну, кидай юайщику делать и он там баги находит. Фичи горят, инвесторы недовольны, времени нет
>>3118362 Двачую лида, надо либо писать компонентные/интеграционные, либо вообще не писать. Моки хуеки показывают что все збс - на тестовом конутре все к хуям валится при первом же вызове. Оказывается в моки подсунули данные только для хэппи паса. Забыли что там бывают нулы и некорректные данные. А потом прилетает изменение фичи - и все тесты ломаются, половина времени уходит на их переписывание.
Тупой спор. Тесты всего сразу помогают найти факт бага, юнит-тесты гораздо больше багов пропускают, но зато чётко показывают место и время фикса бага снижается до пары минут.
А ещё если у вас тесты ломаются часто, значит у вас по клавиатуре тыкают макаки, что не умеют сохранять обратную совместимость. Безусловно, иногда её ломать есть смысл, но тогда явно поломка тестов будет меньшей из проблем, и даже наоборот, она послужит хорошим индикатором того, что что-то сломалось.
map без stream череват, тем что он создает копию коллекции, и если у тебя серия map/filter/map/filter то у тебя будет ебовейший расход памяти на больших коллекциях
>>3118520 Это всё полумера. Надо иметь поддержку экстеншен методов со стороны языка чтобы их так же легко было испортировать как просто класс, чтобы прям в идею был табкомплит этих экстеншен методов и предложение табкомплита. Вот это решение.
>>3118657 > map без stream череват Это тоже полумера, необходимо иметь поддержку implicit calls со стороны языка, чтобы list.map(mapperFunction) неявно разворачивалось чётко заданным в List (в т.ч. экстеншен методами) образом в list.stream().map(mapperFunction).toList().
>>3118657 >Ты только что Котлин. Не везде ты можешь притащить Котлин. У меня контора решила унифицироваться на джаве. >Это всё полумера. Надо иметь поддержку экстеншен методов со стороны языка С учетом того, что экстеншн методов не предвидится в джаве, я пожалуй возьму такую полумеру!
Что если написать язык Java++, который будет надмножеством джавы (джава-код будет компилироваться его компилятором без проблем), но не будет иметь всех наболевших проблем jvm-копроязыков типо уродливого синтаксиса в петухлине, динамикодрисни как в груви и так далее? У кого-нибудь есть желание этим заняться?
>>3118715 Сама архитектура Java давно устарела. Виртуальная машина со сборкой мусора должна быть проще и не основываться на архитектуре фон Неймана, не должна подражать языкам C и C++, придуманным для низкоуровневого программирования.
>>3118516 >А классика типа не хрупкая? Нет, т.к. классика не использует моки и стабы, а только реальные классы приложения. Минусы такого подхода - нужно вручную инициализировать весь граф зависимостей. В типичном спринг приложении у тебя при попытке протестировать сервисный класс, нужно будет инициализировать 3-4 зависимости от которых зависит твой сервисный класс, а потом у каждого из этих классов может быть еще по 3-5 зависимостей, а у них еще по 3-5 зависимостей... А лондонская школа ничего не тестирует и тесты суперхрупкие, т.к. ты просто затыкаешь все моками, которые потом будут падать при первом же рефакторинге
>>3118657 >у тебя будет ебовейший расход памяти на больших коллекциях Почитай обоснование методов в библиотеке коллекций котла и почему там так решили сделать. В 99.9999% случаев ты оперируешь небольшими коллекциями и дрочь со стримами ничего не дает. В котле есть сиквенсы сиречь стримы из джавы. Ну и то, что ты где-то у себя в джава коде обрабатываешь большие коллекции уже говорит о том, что ты пишешь лютый говнокод. Т.е. либо у тебя изначально стримы, либо ты написал говно и все тащишь в память
>>3118596 >она послужит хорошим индикатором того, что что-то сломалось. Нет, не послужит. Это лишь индикатор того, что ты используешь типичную лондонскую школу тестирования и обмазываешься каким-нибудь мокито. Это не проблема конкретной библиотеки, а проблема подхода. Там нельзя иначе. Ты подсовываешь мок и обрубаешь граф объектов, а потом дрочишь when thenreturn и т.д. При малейшем рефакторинге у тебя все посыпется как карточный домик. Ну и вишенка на торте (это ключевой момент, кста) - тесты твои говно-говна, т.к. тестируют внутреннее поведение, а не контракт. Т.е. ты литерально описываешь свою реализацию метода только в тесте и там видно, что твой код вызывает определенные методы зависимостей и т.д.
>>3118591 Речь не про это. Если у тебя хэллоуворлд на три класса, то это кэл, чел.. Тут суровый энтерпрайз на спринге, где граф зависимостей какого-нибудь сервисного класса может содержать в себе по 15-20 других классов изи. Если писать по классике, то нельзя юзать моки - онли собственные классы
>>3118535 >Двачую лида, надо либо писать компонентные/интеграционные, либо вообще не писать. Работает на легких приложениях или микросервисах. Да и то, время не сравнимо если сравнивать с юнит тестами. Никто не будет ждать часы пока все тесты пробегут
>Моки хуеки Это легаси и от него отказываются. Моки сейчас дурной тон и от библиотек типа мокито отказываются, т.к. они плодят хрупкие тесты. Кроме того ты буквально тестируешь внутренне поведение, а не контракт, когда описываешь для мока какого-нибудь репозитория кейс, а потом этот мок дергает твой сервисный класс
>>3118586 Нет, не так. Дело не в количестве тестов, а в их качестве. Тесты на моках - хрупкие. Тесты написанные по классике - устойчивые к рефакторингу. Но их писать значительно дольше
>>3118362 >Надо фичи писать, а не тестовый кал У меня на проекте все точно так же. Катим фитчи без тестов, потом ручники месяц собирают баги, мы их кое как фиксим и выкатываем на бой. Затем уже клиенты начинают рвать анус от количества багов и мы их фиксим по ночам и в выходные
>>3118794 То есть вы один раз сэкономили месяц на предварительном написании тестов, и теперь каждый раз с каждой новой фичей ваши клиенты рвут жопу. Ясн.
>>3118793 >Мокито можно легко использовать и в классической школе Нет, нельзя. В мокито ты описываешь конкретные вызовы методов и конкретные возвращаемые значения. В классике ты передаешь реальный объект класса со всей внутренней хурмой. В этом и отличие
>>3118797 > и конкретные возвращаемые значения Олигофрен, ты никогда не задумывался над тем, что значение может возвращаться в поля объекта, а сам метод может быть void?
>>3118796 >на предварительном написании тестов Не работает, если ты пишешь код по лондонской школе с моками. Тесты хрупкие и не учитывают реального поведения зависимости
>>3118798 Ты хуйню пишешь. Очевидно, что ты никогда не писал тесты на моках. Спокуху оформи, долбаеб. Значение у него в поле объекта возвращается, лол. Даун, у тебя классический кейс, это замокать метод, который возвращает значение
>>3118798 >значение может возвращаться в поля объекта, а сам метод может быть void
это типичный пример говнокода, который никогда не пройдет ревью. Ты хотя бы думал перед тем как это написать? Сейчас бы строить все приложение на подобных методах с сайдэффектами, лал
>>3118803 Ну и плюс докинь, петушок, каким образом то что это в твоём манямирке говнокод опровергает что-то по теме и доказывает, что метод всегда и только возвращает значение.
>>3118805 Это ничего не меняет. Мокая даже воид методы, ты все равно пишешь по лондону и в конце это все равно приводит к хрупким тестам, которые нужно переписывать после каждого рефакторинга или добавления новой фитчи
>>3118812 >ничего хрупкого не получилось Ты никогда не писал реальные приложения. Неужели так сложно понять, что когда ты мокаешь методы зависимостей, то у тебя протекают абстракции и детали реализации тестируемого метода класса? Т.е. ты буквально повторно описываешь логику метода, но уже в тестах через моки. Тогда как в классической школе, ты подсовываешь реальный объект зависимости и просто тестируешь нужный метод. Т.е. ты не видишь, какие методы он вызывает у зависимостей, а только проверяешь конечный результат - возвращаемое значение. В случае сайд эффектов ты можешь подсмотреть в зависимость т.к. она реальная, а не мок. В этом плюс классческой школы тестирования. А моками ты просто пишешь хрупкое говно и у тебя в тестах все разваливается. Смотри, для тупых -
Dependency dep = new Dependency(); ClassUnderTest cut = new ClassUnderTest(dep);
var result = cut.method();
// assert
или в дроченном мок стиле лондона -
Dependency dep = mock(Dependency.class); ClassUnderTest cut = new ClassUnderTest(dep);
when(dep.someMethod(any())).thenReturn(...);
var result = cut.method();
//assert
Первый выдержит рефакторинг, если поменяется внутренняя реализация ClassUnderTest и контракт методов Dependecy. Второй - нет
>>3118817 Дегенерат высрал портянку теста, но по заветам лондонской школы просто повторил уже написанное. Кто заставляет внутреннюю логику метода повторять, олень?
> В случае сайд эффектов ты можешь подсмотреть в зависимость т.к. она реальная, а не мок. Так и в мок тоже можно подсмотреть, ёпта. Никогда не задумывался над тем почему any() не сделан по-дефолту? Потому что правильный юз-кейс это проверять, что было передано туда.
>>3118817 > Dependency dep = new Dependency(); > ClassUnderTest cut = new ClassUnderTest(dep);
> var result = cut.method();
> Dependency dep = mock(Dependency.class); > ClassUnderTest cut = new ClassUnderTest(dep);
> when(dep.someMethod(any())).thenReturn(...);
> var result = cut.method(); Ты похоже вообще не понимаешь задачу мокито. Если так просто инстанциировать Dependency бы было, никто бы не мокал. Мок нужен тогда когда для создания Dependency ты создаёшь ещё миллиард других объектов (в том числе тот случай когда ты вообще не можешь создать это из-за взаимодействия с копролит-апи на статиках).
Мок требует от тестируемого кода, только то что он тербует. Это по сути контракт. А в первом случае, без моков, ты от тестируемого кода требуешь подчиняться багам в зависимостях, потому что в случае фейла непонятно на ком ответственность лежит и что нужно править. Это не модульное тестирование. Тогда говори, что не пишешь юниты, а пишешь e2e по спекам от кабана. мимо
>>3118818 >Кто заставляет внутреннюю логику метода повторять Тесты на моках это и делают. Ты должен замокать методы зависимостей, которые дергает твой тестируемый класс. Иначе это не будет работать. А в классической школе ты не должен мокать и вытаскивать внутрянку зависимостей в тесты. Либо ты просто тупой, чел.. сорян..
>>3118822 > Если так просто инстанциировать Боже... какой же ты тупой, блядь... Ну ясен-красен, что это просто пример. У твоего dependency может быть 100500 зависимостей. Сути дела не меняет - ты в тесте описываешь моки методов, которые дергает твой тестируемый класс и это приводит к протекающим абстракциям
>>3118833 Бля, ты реально тупой? На моках ты по другому не можешь сделать, даун. У тебя тестируемый класс дергает определенные методы зависимости. Ты должен эти методы явно замокать в твоем тесте, чтобы тест прошел. Это подход лондона. В классике ты не используешь моки и просто передаешь зависимость как есть.
>>3118787 Хуита. Во-первых, твой граф зависимостей в итоге упрётся в БД. Специальную тестовую БД делать для каждого теста? А ведь её ещё надо предзаполнить. В итоге это уже интеграционный тест получается, если не функциональный. Во-вторых, при рефакторинге эти тесты тоже поломаются, граф зависимостей же изменится. В-третьих, тесты с моками ломаются не так часто, если а) замокано общее поведение, а не специфичное и б) код сам по себе нормально написан. У тестирования методов есть одна серьёзная проблема - не тестируются места на стыке методов. Если у тебя результат работы метода А передаётся в метод Б, то как ты их сам не затестируй, если А выдаёт данные в одном формате, а Б принимает в другом, то ты это никак не поймаешь. Это частично лечится только более жёстким ограничением типа возврата/параметра. Например, вместо инта передавать уинт, вместо строки enum или распарсивать в какой-то объект и.т.д., в каждом конкретном случае своё.
>>3118836 У тебя в тесте явно описаны замоканые методы и их поведение, которые дергает твой тестируемый класс. В классике ты не мокаешь, а передаешь реальную зависимость и тестируешь онли вовзращаемое значение. Т.е. ты можешь поменять методы и их реализацию в зависимости, а тест не придется рефакторить, т.к. ты ничего не мокал и даже после смены контракта зависимостей все будет работать. В лондоне же ты мокаешь вызовы методов и при изменении контракта у тебя все в жопу летит
>>3118838 >Специальную тестовую БД делать для каждого теста? Для этого есть фейки и стабы. Фейк - это легковесная реализация какой-нибудь зависимости. Тем более не забывай, что БД это внешняя изменяемая зависимость, а она даже в классике заменяется на фейк или стаб
>>3118838 > Если у тебя результат работы метода А передаётся в метод Б, то как ты их сам не затестируй, если А выдаёт данные в одном формате, а Б принимает в другом, то ты это никак не поймаешь. Для этого надо тестировать те методы, что вызывают более низкие методы, и так до самого верха. Постепенно при подходе от юнит тестов будет движение в сторону интеграционных тестов, и это нормально.
>>3118535 >Двачую лида, надо либо писать компонентные/интеграционные, либо вообще не писать Ты не понял, чел. НИКАКИЕ тесты. Писать надо только ФИЧАКОД.
>>3118849 Поддержу лида - зачем тесты? Чем больше багов, тем больше оплачиваемой работы. Писать тесты с фичей - это неоплачиваемая работа и претензии на перформанс ревью.
>>3118852 Платят тебе за фичу, а не за тесты фичи и ждут, что ты сделаешь две фичи за отрезок времени, а не одну фичу и тесты. Васек, который рядом только пилит фичи, получит 5 за перформанс и премию х2 к твоей, а потом все баги закроет отдельными тасками и получит персональную премию от кабанчика. База коммерческой разработки.
>>3118855 >кабанчик-долбоёб спонсирует багодел Опять же это вопрос не к тому полезно ли для разработки тесты писать, а к тупости кабанчика. Это немного разные вещи. Первый технический, второй в мвп или в б.
>>3118858 Анальник, который выучил апи мокито (который в процедурном стиле на флюент инглише, чтобы даже макака разобралась) считает, что он то умный, а кабан дурак. Классика.
>>3118859 Сразу на проде редактировать, компилировать, чо как маленький? Если коллега одновременно с тобой отредактировал тот же файл, надо написать на него жалобу, что он твою недельную работу похерил.
>>3118879 Если ты беспокоишься об эффективности - пиши вручную запрос на аннотациях и отображай во проекции. Хибер достаточно криво делает запросы через иерархию, с кучей под запросов.
> Потом никакой cache и materialized view с индексами не поможет. С сотней many-to-many и еще полсотней many-to-one намапленных на SQL-ные селекты вместо JPAQL+ включен по умолчанию open session in view и ни одного @Transactional
>>3118667 >Это тоже полумера, необходимо иметь поддержку implicit calls со стороны языка, чтобы list.map(mapperFunction) неявно разворачивалось чётко заданным в List (в т.ч. экстеншен методами) образом в list.stream().map(mapperFunction).toList(). В скале были имплицитные параметры, наелись и сильно ограничили.
>>3118788 >Ну и то, что ты где-то у себя в джава коде обрабатываешь большие коллекции уже говорит о том, что ты пишешь лютый говнокод. Т.е. либо у тебя изначально стримы, либо ты написал говно и все тащишь в память Вас посетил Марти Фаулер, чистота кода удвоилась.
>>3118794 Если у вас так много багов то это либо ебать какая сложная система, либо у вас волчья стая с годом опыта на всех вместо разрабов. >>ручники месяц собирают баги Ну и процессы говно, они должны их сразу отдавать а не копить под релиз.
>>3118791 >>время не сравнимо если сравнивать с юнит тестами Интеграционнные писать долго, но они редко меняются - для этого должна произойти смена контракта. Юниты пишутся быстро, но меняются каждый раз при каждом изменении. Даже если просто сигнатуру метода где то сменили - надо и про тесты не забыть. Для утилитных методов - они ок, для калопроводов - не подходят.
>>3118855 >>Васек, который рядом только пилит фичи, получит 5 за перформанс и премию х2 к твоей Это уже от процессов зависит. Будь у меня помойка с КПИ я б тоже наверное забил бы на качество в угоду скорости... Но у меня фикс зп и похуй как долго я делаю фичу, если я смогу обосновать что ТАК НАДО.
>>3118943 >>анти-хибернейт >>так и не выдвинули ни одного нормального аргумента или альтернативы для "2к24" >>3100236 → >>3100590 → >>3101720 → Там была целая ветка про жук, ты все пропустил
Сам его используй, но я хибером мало пользовался не могу однозначно сказать что удобнее.
>>3119284 >для калопроводов - не подходят Кто же виноват, что ты пишешь говнокод, который невозможно протестировать кроме как интеграционными тестами, которые можно часами гонять, лол
>Читай пикрелейтед. Там типичная шарпомуха-говноежка, которая угорает по классической школе, но дрыщет в штаны показать пример где фигурирует больше 2 классов.
>>3118791 > Работает на легких приложениях или микросервисах. Ты долбоёб? Интеграционные тесты наоборот легче писать и они гораздо более лояльны к говнокоду.
>>3118979 Видимо то, что при таком раскладе хибернейт на каждом взаимодействии с иерархией энтити будет проворачивать огромное количество подзапросов, чтобы подтянуть все разветвления этой иерархии. И это просадит перформанс.
>>3121603 10 это уже дохуя. Теперь го еще более не нужен станет. Правда, ЦПУ на старте еще больше будет жрать. Да просто древнющие ишы запилили. Еще одна с 2008 года сделана наконец.
>>3121606 >Теперь го еще более не нужен станет Если писать как на го, то он и совсем не нужен будет. public static void main и вперед. Большинство различий в сравнении этих языков в подходах к написанию программ, а не в самих языках.
>>3120858 >>А делать придется тебе, потому что ты его нанял)) Ну надо так надо, только количество тасок в день не изменится, мне ж за переработки не платят. >>двойную работу делаешь ты. А в чем сложность? ну будет 4 фичи в очереди, а не 2 - будут сделаны за 4 недели а не за 2.
>>3121606 >>10 это уже дохуя. Теперь го еще более не нужен станет Если тебе надо поднимать за 0,3 секунды как в го - просто используй спринг натив с комплиляцией.
>>3121606 >10 это уже дохуя Типичное приложение на спринге стартует +- за минуту-полторы. Твоя пердолька с "параллельной" инициализацией сэкономит ну максимум пару секунд. Именно поэтому все новые проекты пишутся исключительно на гоулэнге где сервис от момента старта до момента, когда он готов обрабатывать запросы тратит не больше 1 секунды
>>3121639 Разве нативность не должна ускорить разве что запуск жвм, что и так практически мгновенный? А если тут идея в том, чтобы житу не приходилось прогревать, то какой смысл в ускорении запуска за счёт жита, если скорость запуска важна только разработчику и ему всё равну ту же компиляцию придётся выполнять, просто не при запуске, а, при, собственно, компиляции.
Идея была - подобрать такой обьект, который по семантике как бы пустой, нулевой, но при этом это полноценный обьект с полноценным контрактом - ты можешь его передавать куда хочешь и не бояться NPE. А реальность такова, что не для каждого кейса такой нуль подобрать вообще возможно, не сломав семантику. А для каких то кейсов таких "нулевых" обьектов может быть вообще больше одного.
>>3121633 >Ну надо так надо, только количество тасок в день не изменится, мне ж за переработки не платят. >А в чем сложность? ну будет 4 фичи в очереди, а не 2 - будут сделаны за 4 недели а не за 2.
Сейчас ты берешь таску и делаешь ее, переходишь к другой. Все очевидно и просто. Получаешь свои деньги.
В твоем примере будет 4 задачи вместо 2, но тебе придется ебаться, ползать по коду, устраивать созвоны, включать думалку, спрашивать, напрягать людей, анализировать логи, анализировать историю и постоянно ебаться на ровном месте и искать причины несостыковок, рыться в быдло-коде. За это тебе никто не доплатит.
Если ты такое любишь, то к тебе тогда вообще вопросов нет. Есть много людей которые работают просто ради денег и будут делать любую грязную работу в it, лишь бы платили.
>>3120858 Какой смысл волку идти на нищие 50к? Наоборот, явный красный флаг, когда специалист с годом+ опыта просится на 100к в третьесортную компанию. Волк, по определению, мимикрирует под успешный успех, а опыт рисуют, поэтому ему не нужно на галеру "за опытом", ему нужно на галеру за деньгами.
>>3121873 >Наоборот, явный красный флаг, когда специалист с годом+ опыта просится на 100к в третьесортную компанию Это нормальная зарплата для человека с годом опыта. Я начинал с 15к в далеком 2012 году. Только год назад вышел на баснословные 200к
>>3121912 Я бы сказал, что это минимально возможная зарплата для человека с годом опыта (и надеюсь, мы говорим о 100к, а не о 50). И тогда никаких шансов, что человек будет идти на те же 100к, а забрать готового специалиста с рынка можно за 150-200, за 100к работает человек, которого вырастили и то, уже начинает смотреть по сторонам, с улицы на такие деньги никто не пойдет, кроме проблемных. Ну и жавист с опытом 8 лет, по определению, не может зарабатывать 200к, эту планку успешные берут уже в первый год, даже без волчизма, отсталые пересекают на 3.
>>3121695 >>Типичное приложение на спринге стартует +- за минуту-полторы. Зависитт от размера. Средний сервис у меня секунд 30. Но даже если там 10 минут, какая разница сервис обновит версию в 15-20 или в 15-30. Бизнесу похуй. Можно просто кнопку мержа раньше/позже нажать.
>>Именно поэтому все новые проекты пишутся исключительно на гоулэнге где сервис от момента старта до момента, когда он готов обрабатывать запросы тратит не больше 1 секунды Таких сервисов, которые надо внезапно поднимать и потом опять тушить на дни/недели/месяцы - не так много. Это характерно для облачной структуры с наносервисами. Типичные сервисы работают всегда. Да и то для этого есть нейтив. Запускается за секунды, но компилируется долго.
>>3121935 >Но даже если там 10 минут, какая разница сервис обновит версию в 15-20 или в 15-30. Бизнесу похуй. Можно просто кнопку мержа раньше/позже нажать. Нет, не похуй. Не знаю как у вас в жаве, но у нас сервисы крутятся в кубере и гибко масштабируются. Когда у тебя уходит всего 1 секунда от старта до приема первого запроса клиента, то скэйлинг сервисов проходит по щелчку пальцев. Появилась нагрузка - кубер автоматически запустил сервисы. Нагрузка спала - потушили сервисы.
>>3121920 >>Ну и жавист с опытом 8 лет, по определению, не может зарабатывать 200к, эту планку успешные берут уже в первый год, даже без волчизма, отсталые пересекают на 3. Коллега с 5 годами пока только приблизился к 200к, я с 3 тоже скорее всего не перепрыгну ее в этом году. Но выходить из зоны комфорта тоже не хочется - удобные процессы, много свободы действий (выбираешь таки и технологии), ненапряженные условия, удаленка без какого-то контроля. А я еще и не самый молодой и шутливый. Попал прям в ловушку скуфидона.
>>3121920 >Ну и жавист с опытом 8 лет, по определению, не может зарабатывать 200к, эту планку успешные берут уже в первый год, даже без волчизма, отсталые пересекают на 3. Зачем ты лжешь? Все зарплатные вилки открыты на то же гетмутче. 200к это зарплата сеньки. Даже я пропахав 10 лет в жаве-хуяве получал максимум 200к. Сейчас свичнулся в гоулэнг с понижением грейда и зарплаты до 150к. Время сытых зарплат прошло, а пороги того же мяскота оббивают вчерашние таксисты и курьеры
>>3121945 >>скэйлинг сервисов проходит по щелчку пальцев Если нагрузка прям мгновенно и непредсказуемо появляется - ну ок, ебашь на спринг нейтив. Код даже переписывать не придется. Зачем искать пхпшников/гоферов и учить их писать бизнес логику ради этого?
>>3121955 Мы тут и обсуждает российский рынок в рублях. Зарубежка в рублях это про всякие какарачастаны - там и условиях жизни очень специфичные, обычно хуже. А зарубежка в доларах/евро - другой мир с которым нет смысла сравнивать.
>>3121946 Я вот хз, в моей галере, несмотря на ученический договор, где тебе платят хлебными крошками со стола кабанчика, через год минимум зарплаты - 130, через два - 180, но люди либо уходят на 200+, либо перспективным сама контора вытягивает вилку. Если раньше это можно было списать на региональные коэффициенты, то сейчас нет никаких проблем попердывать в диван в Мухосранске и работать на ДС. >>3121949 >>200к - сытая зарплата Охуеть, при курсе бакса по 100р - это копейки, чтобы хватило чуть продержать до следующей подачки.
>>3121966 >Охуеть, при курсе бакса по 100р - это копейки, чтобы хватило чуть продержать до следующей подачки. Таковы реалии рынка. 300к и выше получают тимлиды и рукли отделов
>>3121976 В моем манямирке - 300 вполне реально достижим на 3-5 годах опыта, ну а там уже можно и трактор заводить. Да и возвращаясь к базовому комменту - волк не будет идти на 50, да и на 100 он тоже не пойдет, если уж накручивать, то накручивать, чтобы опыт выглядел солидно, а красивое резюме требует такой же красивой зарплаты в требованиях.
>>3122544 На время запуска, когда оно меньше нескольких часов, не похуй только тогда, когда это время разработчика во время интенсивного цикла исправления и перезапуска. В таком случае комплируется и запускается примерно одинаковое количество раз.
>>3122578 Чел, выше уже описали для чего это конпеляция нужна - мгновенно скалировать сервисы в облаках, где за нагрузку надо платить или запускать что то редкое. Там лишние 10 секунд запуска на каждом из тысячи сервисов - это счета на многие тысячи/миллионы долларов.
Если у тебя не гугл с хайлоадом - говно без задач.
>>3122612 >каждом из тысячи сервисов вопрос только нужна ли тебе тысяча сервисов или там опять микросервисное безумие так-то и миллион сервисов можно поднять, бешеной собаке семь верст - не крюк
>>3122778 >What Is a Unicorn? >The term unicorn refers to a privately held startup company with a value of over $1 billion. It is commonly used in the venture capital industry. The term was first popularized by venture capitalist Aileen Lee. Unicorns are very rare and require innovation. Скуф
Есть итт аноны, кто работал или работает на каких-то больших энтерпрайзах? Интересно как вы используете, и используете ли вообще аннотацию @Transactional.
>>3123065 Зависит, нужно смотреть конкретно твой код где ты считаешь эти числа. Но стандартные приёмы - это конечно использование примитивных типов (float/double вместо Float/Double) и уменьшения использования указателей - то есть раскладывание твоил чисел (скорее всего) в массив, чтобы побольше влезло в кэш процессора. Еще можно попробовать итерацию по этим массивам через индексированный цикл for (int i =0; ...; i++), иногда помогает, но нужно смотреть на твоём случае
>>3123065 >>3123224 Так же если ты в процессе вычисления очень часто вызываешь какие-то функции (скажем больше 100 раз за вычисление) - попробуй сделать их статическими, может помочь
>>3123090 Баланс соблюдаю, кодю иногда, но просто потому что нравится. Книги не читаю, потому что по моему опыту абстрактное знание без конкретной цели применения 1) тяжело понимается 2) быстро забывается. Если что-то понадобится для конкретной цели - могу книгу почитать.
>>3123237 В основном все теоретические раскладки сводились к тому, что они либо все черезмерно усложняют на практике, либо вообще убивают производительность по единственной причине "так надо делать, умные люди сказали"
>>3123065 >>3123224 Кстати еще добавлю про раскладку в масивы - ОДНОМЕРНЫЕ массивы - это прям идеально (но не всегда удобно). Но это уже совсем хардкор, сначала попробуй попроще оптимизации
>>3123065 Ещё конечно нужно использовать минимум аллокаций памяти. А это значит: - если ты часто создаёшь какие-то объекты в процессе вычисления - старайся их создавать меньше и переиспользовать - если работаешь с коллекциями - старайся резервировать их объем с запасом, чтобы лн гарантированно вмещал все ожидаемые данные и не расширялся по пути. Как пример для arraylist - ты ожидаешь 1000 значений - создаёшь new ArrayList(2000) на всякий случай. Для других можно что -то похожее. Для массива это просто new double [2000] (массивы быстрее очевидно)
Блджад, помогите разобраться с Tomcat-ом. Поставил Eclipse, решил туториал по REST-API пройти, и там нужен Tomcat. Добавил его в Eclipse - написало, что Tomcat не установлен. Ок, скачал Tomcat с сайта, установил и тогда всё норм заработало. Чего я не понимаю, так это почему, когда у меня Tomcat в Eclipse запущен, то Tomcat9w не распознаёт этого, и показывает статус "Stopped"? Это два разных Tomcat-а? Я правда запутался.
>>3125379 Брачо,совет,забудь про ручную установку варника на томкат,спринг бут с встроенным томкатом бвл создан как раз для того чтобы ты не страдал,а мог сосредоточиться на написании своего супер сервиса,не противься прогрессу братка,пис,джа
>>3125430 Знать как все работает под капотом это всегда полезно,но я боюсь что ты на отладку и фикс подобных приколов потратишь столько же сколько на изучение сервлетов. Работать чисто с томкатом ты не будешь никогда
>>3115562 (OP) А в вашей жабе есть нормальный клиент для редиса? Коллега посоветовал реддисон, но там забагованное говно написанное Никиткой Cockшаковым, который у себя на гитхабе плюется желчью и брызжет слюной, когда его в очередной раз макают в его говнокод и показывают, что он не работает. Проиграл с этого озлобленного уродца, который закрывает ишьюсы со словами "все работает!", лал!
>>3125832 Проиграл с этого озлобленного уродца, который своими кривыми сальными ручонками не смог выполнить элементарнейшее действие — запустить реддисон, от чего побежал плакать разработчику и из-за чего был закономерно послан нахуй.
Есть тут динозавры, которые работали с Java Stored Procedures в базах оракла?
Насколько безопасно в них делать статические поля? Хочется вынести часть хуйни в методы и сократить говно мамонта раз в 10, вот только проблема в том, что основной метод статический, и все остальное придется тоже статикой делать.
%еще могу извратиться и передавать параметры из массива, а дублирующийся код в цикле крутить, но это смешно%
>>3126558 Не знаю как сейчас, но в 10 на каждую сессию создавался свой инстанс JVM. Если ты не будешь дергать процедуру из каких нибудь parallel query, то должно быть потоко-безопасно.
Но вообще, такой подход это говнокод, конечно же. Если статическая функция не имеет состояния, то и писать в статические поля она не должна. Всё должно передаваться в другие методы явно. Если параметров много: создай DTO или вынеси логику в отдельный класс и создавай новый инстанс на каждый запрос.
Няши, такой вопрос. Нашел в спеке 9( https://gee.cs.oswego.edu/dl/html/j9mm.html ) жабы такое определение тотального порядка: In a (strict) total order each event is ordered with respect to every other event, resulting in a linear (sequential) chain of events. Потом, смотрю на определение so: A synchronization order is a total order over all of the synchronization actions of an execution.
Правильно ли я понимаю, что это про одно и тоже? И SO линейна и точка?
В джаву надо добавить suspendable функции, но не для того, чтобы реализовать многопоточность в рамках одного запуска приложения, для этого совершенно хватает существующих методов, а для того, чтобы более удобно выполнять задачи, длящиеся несколько месяцев, имеющие стейт и прерываемые, например, каждую ночь на перезагрузку сервера. В чём я не прав?
>>3127186 Каким образом? Я пока что вижу только убогое распиливание на миллион подфункций, сохранение стейта ручками после завершения каждой и восстановление при запуске.
>>3127239 >И чем это поможет? Просто обертка. >что хотелось бы видеть в джаве. Вообще суспенд это про вытеснительную многопоточку, в жабе кооператинвая. С последним выпиливанием суспенда из треда, мне кажется нихуя не будет сделано в этом направлении.
Сука и проигнорил мой вопрос. Ладно, в жопу этот тред.
>>3127158 >В чём я не прав? В том, что пишешь говнокод.
Если у тебя есть долго работающая таска, то её надо писать так, чтобы она периодически сохраняла состояние и умела продолжать с точки последнего сохранения. От сбоев железа никто не застрахован и спускать в унитаз весь прогресс из-за отказа плашки памяти признак херовой архитектуры.
>>3127239 >И чем это поможет? Не нужно распиливать функции обновляешь постепенно стейт в таске, когда приходит прерывание - сохраняешь стейт, потом восстанавливаешь.
>>3127566 Ты долбоёб? Я именно про это и говорил. Сейчас это решается нагромождением кучи ручных говносохранений, что, очевидно, ложат перформанс в сраку, а если бы была поддержка от языка этого, это было бы гораздо легче и быстрее
>>3128426 >нагружен вычислением результата свич кейса Хуйню несешь. >И получишь кучу функций Пиши прям в кейсе. И я не понимаю, в чем проблема множества методов, если существует инлайн?
>>3128434 Ты нарушение маняпаттернов и бойлерплейт не путай. Совершенно разные вещи. Бойлерплейт это когда ты пишешь объявление метода, потом в каждый метод хуяришь логику сохранения, потом при запуске выбираешь, какой метод запускать в зависимости от того, что насохранялось, и только потом пишешь свою логику.
>>3128438 >Бойлерплейт это когда ты пишешь объявление метода, потом в каждый метод хуяришь логику сохранения Дурачек, тебе уже сказали про интерапт. Можно не ебать себе мозг логикой сохранения, а просто наверх все отпускать, а там уже разберутся. >потом при запуске выбираешь, какой метод запускать в зависимости от того, что насохранялось Еще раз, это можно также выбирать в общем методе, который свитчкейсами. На самом деле я просто описал то, как в котлине это работает, не более. Хотя вот хз есть ли там прерываниия, но кейсы точно есть.
>>3128444 > Дурачек, тебе уже сказали про интерапт. Можно не ебать себе мозг логикой сохранения, а просто наверх все отпускать, а там уже разберутся. И тебе уже ответили что получается ровно то же количество бойлерплейта, но ещё и нагрузка на обработку исключений.
> свитчкейсами. Именно так это и работает прямо щас...
>>3128409 >Я именно про это и говорил. Сейчас это решается нагромождением кучи ручных говносохранений, что, очевидно, ложат перформанс в сраку, а если бы была поддержка от языка этого, это было бы гораздо легче и быстрее. Спокойно, мы уже поняли что ты дебил, не усукабляй.
В общем случае, контекст функции это весь рантайм и ОС, а не пара переменных на стеке. У тебя может быть переменная А, которая ссылается на Б, а Б зависит от некоторых статических переменных и при следующем запуске там могут быть другие значения. А ещё есть метод который закрыт локом и он сейчас захвачен неким тредом, и при следующем запуске тред будет другой. А ещё есть ресурсы Ос, типа открытых файлов, сокетов, сессий БД. А ещё есть всякие токены которые норовят протухнуть. И всё это должен решать язык. Раз плюнуть.
И это, мы ещё не говорим про баги в коде, которые решаются рестартом процесса.
>>3128628 И кто-то что-то говорил про необходимость это всё сохранять? Речь прямо шла про создание инструмента для автоматического преобразования компилятором функции в то, что можно легко приостановить и сохранить. Пускай все остальное как и раньше лежит на программисте.
>>3128500 > но жидбрейсовое говно настолько баганое что лучше бы пользоваться последней версией. Очень, скачал с рутрекера какую-то 2022 версию - она рандомно примеры с книги запускает, то не запускает. В эклипсе/vs code все работает без проблем.
>>3128736 примеры Хорстмана с его сайте 10 и 11 издание. Житбрейнс брал с ру-трекера.
Там первые главы - примеры без указания package. Вот на них оно спотыкается, как минимум. С эклипсом все без проблем работало.
> а не поделие жидбрейнсов.
Эта хуета игнорировала в системе java 21 настроенные переменные PATH и качала openjdk самостоятельно. Может инструмент и неплохой, может и лучший, но по началу разбираться что к чему мне не хотелось. Опять же нормальной справки по иделии, как дока vs code я в принципе не видел. Может хуево смотрел.
Это какой-то массовый псиоп нищих дидов с эклипсами? Ни разу за 3 года не испытал серьёзных багов, которые не решались бы простой перезагрузкой. И то бывало крайне редко
>>3128760 >Там первые главы - примеры без указания package. Вот на них оно спотыкается, как минимум. Ну т.е. фиксируем. Это ты запихнул некорректный код, а теперь руагешь иде, что она сама все не решила? >Эта хуета игнорировала в системе java 21 настроенные переменные PATH и качала openjdk самостоятельно. Ну я хз куда ты там тыкал, у меня все норм детектит. Рукожоп мб. >как дока vs code У мелкомягких очень хуевые доки. Типа ну там есть 100500 примеров для каких-то ситуаций, а в общем ничего не описано. Условно, там даже не написано, а где блять кнопка ран. А в примерах все через терминал. Нахуй мне тогда этот редактор собственно.
>>3128774 > Это ты запихнул некорректный код, а теперь руагешь иде, что она сама все не решила? Во прикол челику который видит первый раз java-код разбираться что-там и как в специализированном редакторе, а не изучать программирование.
> А в примерах все через терминал Если честно - я ненавижу микрософт и это по сути главная причина почему я начал изучать java а не c# Но ты сейчас врёшь и не краснеешь: https://code.visualstudio.com/docs/java/java-debugging#_configure > У мелкомягких очень хуевые доки. Буквально лучшая дока, что я видел за последние лет десять. И в редакторе и на этом сайте. >>3128770 >>3128817 ПроцессорAMD Ryzen 5 5600H with Radeon Graphics, 3301 МГц, ядер: 6, логических процессоров: 12 16 гигов оперативы И эта срань умудряется на этом лагать. Спасибо, но я лучше и дальше на эклипсе и vs code поеду.
>>3128889 Какие у тебя задачи, что ты выбрал джаву? Судя по коду на скрине тебе шарпы подойдут больше. Ты говоришь про ненависть к майкрософту, но 1) Сидишь на их игровой прошивке вместо ОС 2) Собрался писать код в их редакторе кода
>>3128889 >ПроцессорAMD Ryzen 5 5600H with Radeon Graphics, 3301 МГц, ядер: 6, логических процессоров: 12 >16 гигов оперативы >И эта срань умудряется на этом лагать. >Спасибо, но я лучше и дальше на эклипсе и vs code поеду Чел, у меня проц 10летний и на нем не лагает (3570k)
>>3129092 Ну в любом случае не знать как работает та или иная конструкция в языке это наверное ОК, главное уметь быстро разобраться что к чему. Если эти варарги нигде не используются в проекте, то в памяти такие знания могут быстро забыться.
>>3129092 3 года на одном проекте = человек, который достиг своего потолка как по зарплате, так и по знаниям. Сразу вангую, что платят ему меньше 200к.
>>3128770 > Это какой-то массовый псиоп нищих дидов на линуксе? Ни разу за 3 года не испытал серьёзных багов, которые не решались бы простой переустановкой шинды. И то бывало крайне редко
>>3129106 Синтактический сахарок для отправки ArgumentType[] muhArgs методам. Учитывая, что так и так переменное количество переменных остаётся массивом, то вообще насрать. И если коллеги этого "мидла" не могут разобраться, что он имеет ввиду, посылая методу массивы, то мои соболезнования, они не лучше. мимо безработный, штудирую книжку из шапки
>>3129000 > Какие у тебя задачи, что ты выбрал джаву? Бабок заработать. > Судя по коду на скрине Это не мой код, а Хорстмана. > 1) Сидишь на их игровой прошивке вместо ОС Линакс на десктопе потешная вещь: 1. Постоянная ебля с wi-fi. Все дрова что там есть - кривые. 2. Ебля с вайландом/гномом/ксоргом. Вечные проблемы с хибернейтом. 3. Ебля с wine. 4. Из десятка поддерживаемых fs - нормальной нет. Рассыпаются все. 5. Дистрибутивов нормальных нет.
>>3129397 > 4. zfs. Мусор для которого надо 4 гб оперативы и сторонний nongpl модуль ядра. А в линаксе апи в ядре такое штабильное ммм. > 5. арчик Прыщи выведи сначала, а потом эту хуетенюшку советуй, лолец малой.
>>3129430 > Бабки сейчас в голанге >сертифицирован 3 .net >java 1.5 - 1.8 >микрософт машет хуем разрывает контракты на ms sql, закрывает azura, блочит комунити студию к загрузке. >автокад блочит и перадки. > голанг В озоне если только. А другие врядли туда покатятся с такими то условиями.
Я лично жду когда венду заблочат удалённо на всех компах этой страны. Вот тогда можно будет бабок нарубить.
>>3129637 Это просто мода разгоняемая бигтехами. Под их нужды этот язык нужен, поэтому надо чтоб на него переходили и все остальные, чтоб не выращивать кадры самим из пхпшников.
>>3129682 >которые ругают джаву за бойлерлейт Ругают за лишние абстракции + многослойную тяжелую машинерию в виде спринга и хубирнейта.
>>3129719 ИМХО уровень в условном яндексе/вк/озоне/авито будет повыше чем например в тинькоффе или сбере. Не говоря уже про остальные банки. Джава это нынче исключительно банки, финтех и энтерпрайз. Ну то есть бабки зарабатывать можно, но интересных инфра проектов, на которых можно хорошо качать технические скиллы, практически нет, это как раз на гоуленге делают нынче.
>>3129797 >что и зачем качать Что качать? - concurrency - сетевой стек, сетевые протоколы - общая инфра, кишочки докера, кубернетиса - кишочки работы движков СУБД
Вот как минимум 4 направления для бекенд разраба.
>>3129797 >Качаешь скиллы, чтобы зарабатывать бабки, если успешно уже это делаешь, то зачем идти в гоуленг
Дело не в гоуленге, а в том, что нужно искать себе хороший проект, где можно будет вырасти в знаниях по части инфраструктуры, а не просто стать очередным экспертом в бизнес-процессах очередного предприятия (с таким успехом можно в 1С вкатываться, так как область применения очень похожая). И так уж случилось, что более технические инфра задачи решают на гоуленге, а автоматизация бизнес процессов ,электронный документ, финтех, системы всякого учета - это скорее жаба.
>>3129682 Именно так, я этому переобуванию в прыжке каждый раз удивляюсь. Go буквально обрезанная джава 1.4, но это круто, потому что не джава, хотя на джаве можно писать так же как на Го. Или например когда это кто-нибудь гордился что в джаве нет какой-то стандартной фишки? А Гоферы только выигрывают что в Го нет эксепшенов, нет банальных дженериков! и гоферы ноют что нужно копипастить все по 50 раз, но Го все равно круто, джава отстой. Это пиздец как это все в голове умещается.
>>3129874 И там что GC - это прошлый век и слабая производительность. Но только не Го, потому что в Го тоже GC, но в Го GC - это удобство, скорость и безопасность.
>>3129776 >Ругают за лишние абстракции + многослойную тяжелую машинерию в виде спринга и хубирнейта. Под Го уже написали свой спринг, всё жду когда окажется что это - другое
>>3129875 Ну а как не использовать, если оно чуть ли не в каждом проекте есть, куда не приди? Сейчас я как раз работаю там, где этого всего говна нет - используем guice + jdbc, никаких хубирнейтов и спрингов, но в целом это исключение для индустрии (ну или для российских проектов во всяком случае).
>>3129878 Причем у говнянга гц выкручен в частые сборки, из за чего пропускная способность ниже, чем у жабы. Но зачем рассказывать об этом снг-гоям? До них только сейчас дошел хайп говнянга (хотя прямо сейчас на западе говнянг помирает), лет через пять узнают, что из наебывали, будут переписывать на раст/etc
>Ну а как не использовать, если оно чуть ли не в каждом проекте сть, куда не приди? Ну так это вопрос к программистам, а не к языку. Видишь, и на Го спринг пишут
>>3129682 Это мне тут недавно один затирал, что джава нравится консерваторам, что нет дефолтных значений для параметров и приходится кучу перегрузок писать, а джавистам и похуй, они не замечают. Когда я спросил а где в Го дефолтные значения, неужели Гоферам тоже похуй и они не замечают - он ушел в ступор.
>>3129893 >>джава нравится консерваторам, что нет дефолтных значений для параметров и приходится кучу перегрузок писать У меня очень мало перегрузок поэтому и вправду не особо напрягает. Это просто решается через дата-обжекты вместо 5+ параметров. Да и большое количество дефолтов считается скорее говнодизайном.
>>3129888 Это не спринг, ну точнее это просто DI контейнеры с чего спринг и начинался когда-то в нулевые. Под спрингом понимают веб-фреймворк где у тебя все из коробки для перекладывания жсонов (Как asp.net core в c#, laravel в php, django в python). В го ничего такого нет, это не go way.
>>3129776 >Ругают за лишние абстракции + многослойную тяжелую машинерию в виде спринга и хубирнейта. Можно подумать Гёц лично приходит и наворачивает абстрации и заставляет использовать Спринг. Я работал в проектах без Спринга и Хибера и не могу сказать, что есть какая-то разительная разница. Больше зависит от подхода к разработке, если писать хорошо то код на спринге будет и читаться хорошо и работать быстро.
>>3130073 Дебильное название. requireNonNull - выбрасывает исключение requireNonNullElse - уже нет. Надо было назвать nonNullElse, nonNullOrDefault или defaultIfNull
>>3129976 >Это не спринг, ну точнее это просто DI контейнеры с чего спринг и начинался Спринг Кор - это до сих пор DI и бин менеджмент >В го ничего такого нет, это не go way. Тоже самое говорили и про DI. Превращение в джаву неизбежно
>>3129824 >кишочки работы движков СУБД Как в этом начать разбираться? Есть книги какие-то и т.д? Вроде хочешь начать разбираться, а потом такой, да запрос вроде шустро выглядит, 1+N нет, ай да и похуй
>>3131611 >даже лсп нельзя другое подключить ох уж эти зумеры, вычившие буквы лсп) поддержка языков в идее делается плагинами, то что нет возможности подключить лсп - не значит что другие языки не поддерживаются
>>3131882 К чему это? Функция доступна только в ультимейт, доступна. Ты же придумал за меня тезис, который я не утверждал, сам развил, сам разоблачил и сам же поржал. Хорош. На уровень мидла идешь, а то и сеньки.
>>3132026 Еще один гений. Я где-то утверждал обратное? Я говорю про то, что я не могу подключить это например https://docs.oracle.com/en/graalvm/jdk/21/docs/tools/lsp/ То, что разработали оракл, а не жидбрейнс. Не могу сам навернуть любой яп, а довольствуюсь тем, что разрешили жидбрейнсы. Сложный тезис, понимаю. Старость не радость все таки.
Сегодня на собесе собеседующий попросил рассказать, чем я занимался на последнем проекте. Ну я рассказал концептуально какие задачи были. Но ему что-то не понравилось, говорит больше подробностей надо. А чё рассказывать, если большинство задач сводится к тому, что надо достать данные, что-то с ними сделать и обратно положить? Что он блять ждал услышать от мидла?
>>3132288 Я б начал все детали рассказывать вплоть до названий классов. Если ему интересно слушать описание в полчаса как эта поебень работает - мне не трудно.
>>3132299 Я ему так и сказал, типа "Мне рассказывать, как я создал репозиторий и сервис и т.д?", а он навёл аналогию про туалет и мытьё рук. Короче хз, чёт вроде он и прав, а чёт вроде и доебался по хуйни.
На самом деле бойлерплейт интерфейсы это чистейший бойлерплейт. Если бы каждый класс имел неявно созданный интерфейс по методам, то ничего писать не надо было бы. Ну или если бы нужно было для этого просто как-то обозначить что это надо создававать, например interclass место class писать.
>>3132448 >На самом деле бойлерплейт интерфейсы это чистейший бойлерплейт. Писал не перечитывая, тут, очевидно, имелся в виду интерфейс у которого одна реализация.
>>3132439 >>писать "ны вырост" Апфронт дизайн - это антипаттерн. Надо делать расширяемую архитектуру, а не городить классы на все случаи жизни. Все равно не угадаешь как оно пойдет.
>>Сегодня одна, а через три месяца срочно потребовалось ещё две Когда понадобится, тогда и создавай. Интерфейс выделяется секунд за 10 в идее.
>>3132503 Вот ещё по этой теме докину, одно из моих самых последних открытий в программировании — всё не предусмотришь. Как конкретный тезис я это вывел спустя 3 года программирования. Раньше задачу этого выполняло "нет времени щас этим заниматься", что подразумевало, что было бы время и что это, якобы, возможно.
>>3132449 Такой дилеммы впринципе не должно возникать.
Если встает постановка вопроса - "надо ли писать интерфейс, если заведомо известно что имплементация - одна", вы уже проиграли, спринг вас ебет в жопу, а дизайн приложения - говно.
Юзаю интерфейсы всегда, чтобы всегда можно было тыкнуть на зеленый кругляшок и понять контракт окружающего его модуля (пакета). Без интерфейсов все иконки сливаются в кашу.
>>3132503 Расширяемость - это значит можно что то допилить без особых переделок. Например в бд пол сохранять в varchar, а не boolean. А апфронт - это нахуячить отдельную таблицу на 50 видов гендеров с возможностью добаления своего, когда в тз про них ни слова не было потом еще и извиняться придется.
>>3132582 Курс сторипоинта обвалился, теперь в спринт влезает вдвое больше.
>>3129682 Сейчас бы в 2к24 сидеть на одном проекте со джаваскуфидонами, которые кое-как осилили свой спринг бут и хубирнейт, а в проекте все обмазано публик клусс МайСервисИмпл имплементс Майсервис на 3к строк без тестов..
купил я, значит, курс на джавараше, и все пока устраивает, но Хочу писать код не только внутри их модуля, а в отдельном "своем" приложении. Как сейчас с этим дела обстоят? Обязательно ли качать Линукс, и что вообще делать?
>>3132403 >Название должно отражать чем каждая реализация отличается Чел... Контроллер - Сервис - Репозиторий. Все! Говорит тебе Кабан добавить юзеров в систему. Ты создаешь ЮзерКонтроллер. Затем ЮзерСервисИмл. Затем ЮзерРепозитори. Все!
>>3132772 >понять контракт окружающего его модуля (пакета) Чего? Это и на классах прекрасно работает. А любителей с нихуя насрать интерфейсами и лепить Impl мы гоним с проекта на хуй
И ещё вопрос - обилие фигурных скобок в if-else. Все пытаюсь понять, но не особо выходит. Или пока забить, и с практикой придет? Я пока делаю без них, так как не было нужды
>>3132885 Нет конечно, и ты привел хороший пример почему нельзя. Если ты пишешь без фигурных скобок, то только следующее выражение считается принадлежащим к if блоку. Во-первых без скобок с else это вообще не скомпилится, а если бы не было else, то без скобок выражение System.out.println(i*2); будет выполняться вне блока, то есть безусловно.
>>3132884 Если одна строка после ифа или елса то можешь не ставить,в твоем примере в блоке елс будет выполнена только первая строка по условию а вторая будет воспринята компилятором как будто находится за блоком елс
>>3133097 Утютю. Сонар не допустит. Как же тебя трясет, лол. >>3133098 Хз, я факты сказал. Сколько дней назад вопрос задал, хоть один человек ответил? Нет. >>3126939 Похоже до 17 главы спеки никто и не доходил, лол.
>>3133109 Что именно уметь? Круды писать? Это не сложно. А так, у меня нет опыта написания всякой энтерпрайз хуйни, поэтому в этом плане особо не напираю. Но честно, так не хочется, понимая что придется общаться со всякими тупыми дебилами душнилами, которые будут ебать по всему чему угодно, лишь бы самоутвердится.
Парни, три года я проработал на проекте условно среднего уровня. Там ничего сложного не было: обычные круды, прикрутить какой-то сторонний сервис типа смс оповещений, и т.д.
У меня вопрос: что пишут настоящие кодеры? Потому что у меня стойкое ощущение, что я нихуя не умею практически проработав 3 года.
>>3133127 Что я неприятного сделал? Сказал факт, что я лучше знаю кор жабы, чем будущие коллеги? Или то, что в личном коде ты можешь придерживаться любого кодстайла, писать любую хуйню и никто тебя не в праве ограничивать? Ууу крамола, как можно)
>>3133234 Пиши как хочешь в своих проектах. Я эту хуйню писал, какому-то студику на форуме, с целью чтобы если он кому-то ее сдал, то тоочно не повирили, что автор это он. Считай медвежья услуга)
>>3133324 Так а какой код пишут настоящие синьоры хардкорные, кто из тетрадей и книжек по компьютерным наукам не вылазит? Какой сложности задачи? Я хочу понимать, в какую сторону развиваться.
Пытался в пикрил, но чувствую, что ещё рано мне. Интересные вещи пишет, но всё же много информации про всякие оптимизаторы кверей, которые работают под капотом у баз данных, и это трудновато осознать и тем более применять эти знания на практике. Решил Java Persistence API и Hibernate почитать сначала, и потом возможно вернуться.
>>3133377 >шипилеша Бля...чел... Это, кстати, отличный пример, почему канкаренси в жвм и жабе сделано через такую задницу, что люди годами пишут книги, выдрачивают статьи и заучивают как стихи все хитровыебанные хуитки и прочее неочевидное поведение жмм. Позабудешь какое-нибудь правило жмм и в лучшем случае, твой понос на жабе встанет колом
>>3133553 эм, тебе не надо заучивать повеленре, т.е. следствие. тебе всего лишь надо понять модель в общем, чтобы ты сам мог говорить, когда и какое поведение будет. Да и чем тебе шипилев не нравится? Правильные вещи говорит и опыт у него уникальный.
>>3133710 Именно, лалка ебучая. И эта хуйня в 90% проектов. То, что руками больше не надо конфигурировать SessionFactory через persistence.xml не означает, что хуйбернет куда-то делся.
>>3132084 А я наоборот думал, что абстрактные фабрики и имплы это полный хайп в 2024. А как грамотно писать тогда, чтобы в джава-треде уважали? Есть может статьи какие-то, или примеры конкретные с применением современных подходов, не 2010 года?
>>3134896 Это очень императивный код, который только в путь использует побочные эффекты, мутабельность и прочее прочее.
И еще жаба менее выразительна в плане применения операторов. Были б у меня возможности с пика, я б такоооое написал, эх. А еще оптимизация хвостовой рекурсии, функции первых порядков, тайпклассы с параметризацией по контейнеру...