Программирование - это не столько про анальное крудошлёпство, сколько про стиль мышления. Высокоуровневая абстракция, поиск сходных черт, оптимизация - всё это высшие интеллектуальные способности, что образуют такой прочный симбиоз с программированием на Java.
>>2651165 Придётся писать свою систему контроля версий как Яндекс сделал, тк гит хуево работает с огромными репами когда проектов становится много: хуилион комитетов веток и тд, приходится все эту хуйню клонировать на локальную машину чтоб что-то разрабатывать, нельзя разграничить права доступа на разные сервисы…. Пиздец короче. Но плюсы тоже есть, думаю ты их знаешь, главное чтоб монотонна не разрасталась до абсурда
Мне нужно сделать рест-эндпоинт по которому можно скачать CSV выгрузку из БД. Как я понимаю есть два варианта: 1) сделать запрос в БД целиком, сконвертировать данные в CSV, отдать 2) вычитывать данные из БД построчно, построчно преобразовывать в CSV-строки и потоком отдавать
Как добиться второго варианта используя Spring/webflux, чтобы не держать огромные данные в оперативной памяти?
Если я объявляю возвращаемое значение эндпоинта как org.springframework.http.ResponseEntity<org.springframework.core.io.Resource> то это какой подход будет 1й или 2й?
>>2651533 >Loom Лет через 50 подтянутся библиотеки и фримверки и можно будет переползать. Но джэва проиграла войну и сейчас просто неумело тащит в себя всякие конструкции из других языков. Только делает это абы как и с характерной для джэвы многословностью и нелогичностью
Как можно хостить петы в облаке, если любой даун после собеса зайдет и закинет тебе порнухи или фанфики про еблю с собаками. И все. Потом абуза и ты уезжаешь на парашу
>>2652132 >Как можно хостить петы в облаке Ты имеешь ввиду гитхаб, или что-то типа дропбокс ? :/ У меня все репозитории private, а когда начинается сезон собесов, я делаю их публичными.
>>2651177 >приходится все эту хуйню клонировать на локальную машину Монорепа обычно монтируется как внешний диск со специальной файловой системой, которая сама подгружает файлы в момент обращения. Никто не выкачивает гигабайты сорцов ради одного пука.
>>2651165 Проще управлять версиями, когда например у тебя есть набор самописных библиотек-велосипедов, которые чуть ли не в каждом сервисе используются. Вот тогда с монорепой жить проще. А так особых преимуществ имхо нет.
Хочу из аннотейшн процессора на этапе компиляции вызвать рефлексию для обработки компайл-тайм аннотаций. Там вроде отдельный рантайм поднимается. javax.annotation.processing апишка очень многословная, неприятная и кривая, хуже рефлексии. Попробовал рефлексией читать содержимое классов, параметры аннотаций, и сигнатуры методов. С рефлексией код попроще, но компилируется медленнее. Еще почему то в AnnotationValue.getValue() параметр с типом String[] не кастится String[], идея в дебагере пишет, что там под капотом com.sun.tools.javac.util.List<String> вместо массива и пока не нашел как его скастить или сконвертировать. Какие подводные вызывать рефлексию из аннотейшн процессора? Ну кроме скорости компиляции.
>>2653021 Ты говоришь >Хочу из аннотейшн процессора на этапе компиляции вызвать рефлексию для обработки компайл-тайм аннотаций. А я слышу >Вжж ж вжж-вжж вжж-жж-ж жж жж вж-вж-жж вж-вж-вж жжж вжжжж вжжж-вжжж вжжжжжжж. Обезумевшие джавамухи, зачем вы обмазываетесь подобными вещами? Разве вам самим не противно этим заниматься? Посмотрите как в нормальных языках программирования решены эти проблемы.
>>2653042 И как? Ну и я не сказал какая у меня проблема. Ну кроме вот этих штук с массивами в кривой апишке. Но я думаю я просто пока плохо знаю апиху процессоров. Кстати при выдергивании значения типа Сlass там бросался эксепшон всегда и надо было его ловить, но значение потом из эксепшона можно вытащить.
>>2652454 >Проще управлять версиями, когда например у тебя есть набор самописных библиотек-велосипедов, которые чуть ли не в каждом сервисе используются. Вот тогда с монорепой жить проще Сколько ты будешь ждать билда, если монорепа подразумевает зависимость по исходникам, а не по артифактам?
Объясните в чем прикол. Пишу тесты для спринга. называю их test1, test2... Все норм вплоть до test10. Когда он запускается, то обнуляются вся поля тестового класса, и тест фейлится. Переимениоываю в test11 - та же херня. Переименовываю в testA - все работает как надо, поля не обнуляются. Переименовываю в testA1 - снова пизда рулю. Это че за механика блять? Уже второй раз с подобной херней сталкиваюсь, когда метод под определенным именем не хочет работать.
>>2651211 Пожалуйста объясните мне если возвращаемый тип ResponseEntity<Flux<String>> и в хедерах указыается контент-тайп "text/csv" будет ли все flux построчно отдаваться или сначала соберется полностью в оперативке а затем выплюнется наружу?
>>2651134 (OP) Сап, джаваны. Что можно дать почитать по жабе ребенку тян 12-13 лет? Относительно современное, при этом хорошо структурированное для самостоятельного изучения. В английский умеет, базовый пистон тоже. Нет, не либертарианец педофил - просто поддерживаю благие начинания младшей сестры.
>>2653567 Для написания калькулятора подойдёт Swing. На этом этапе надо осознать, что джава не предназначена для написания десктопных приложений, и забыть об этом говне.
>>2653537 КАК ЖЕ ЗАЕБАЛ ЭТО Т ПУССИПАСС НАХУЙ БЛЯДЬ!!!!!!!!!!!!!!!!!!!!!! СУКА!!!! МНЕНИКТО НИХУЯ В 12 ЛЕТ НЕ ОБЪЯСГЯЛ Я ВСЁ САМ ИУХАЧАЛ БЛЯДЬ И НЕ В 12 ЛЕТ А УЖЕ В СКУФ ЛЕТ МЕНЯДАЖЕ НА ФОРУМАХ НАХУЙ СЛАЛИ БЛЯДЬ ТОЛЬКО ОДИН — ОДИН РАЗ БЛЯДЬ — ПОМОГЛИ С КОНФИГАМИ ВС!Ё!!!!!!!!!!!!!! А БЛЯДЬ ПИЗДЕ ТУПОЙ СУКА С ДЕТВТВА ОБЪЯСНЯЮТ ВС!Ё ПОМОГАЮТ ЧТОБЫ ОНА СУКА НИХВ НЕ АПРЯГЛАСЬ И ПОШЛА РУБИТЬ БЛЯДЬ СОТЫГИ НАХУй СКОЛДЬКО Я БЛЯДЬ ГЕМОРРОИЛ БЛЯДЬ НАХУЙ И ВСЕ РАВНО БЛЯДЬ ЛЮБАЯ ПИЗДА С РОЖЖДЕНИЯ НАХУЙ ИМЕЕТ ВСЁ БЛЯДЬ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! А НЕ ОХУИЛЕ ЛИ ОНА БЛЯДЬ!!!!!!!!!!!!!!!!
Вот говорили котлин для джависта это просто. А мне нужно было пример на котлине на джаву переписать и я нихуя не понял. Вообще не понял, как переписать with, also, apply на джаву. Читаю что эти выражения значат, а как переписать на джаву не понимаю.
>>2653990 Карты и ГИС интересная тема. Только вот автокомплит во время поиска названия города, улицы, дома тупит очень сильно. Я бы это еще пофиксил раз у тебя пет развернут и ты его готов в живом формате показывать.
Плюс я бы еще каких-нибудь фичей накидал, например выводить информацию про найденный объект на фронт, а не просто на карте показывать.
>>2653582 На JavaFX вполне себе неплохо пишется, сложновато, конечно, но интересно и работает нормально. По сравнению с tkinter на питоне так вообще сказка (PySide не пробовал)
Аноны, дайте идей для пет-проекта на кафке. Чтобы кабанам на собесах показывать, типа смотрите, я могу в кафку. У самого с фантазией все плохо, на вас вся надежда, выручайте.
>>2654589 Если проект осмысленно месседж брокер использует, то это уже бизнес идея. Кто тебе бизнес идею просто так отдаст? А так никто тебе не мешает кафку в тудулисте исользовать. Сделай тудулист в виде микросервисов. 1. Фронтенд 2. Апиха для фронтенда 3. Интеграция для телеграмма. Между апихой и телеграммом может быть кафка.
>>2651134 (OP) Как же я проиграл с гадких джавамух, лол. Вы зачем пишите свои помойные интерфейсы, а потом создаете один класс с окончанием импл? Вы идиоты? Зачем вы раздуваете кодовую базу? Какой-то нездоровый дроч на Ункла Бэба и его гнойный СОЛИД, лал. Вы прекращайте херней заниматься, лол. А ваша анемичная модель? Еще в начале 00-х было показано как надо делать. Как же я проорал с ваших гадких контроллер-сервис-репозиторий, ахахахахахахах! А модель - обычный класс с полями, чтобы было что на табличку в базе мапить! Поганые джавамухи! Фу!
Че такое camunda и нахуя ее используют? В гугле вообще не понятно написано, я так и не понял, почему без нее нельзя обойтись и какие конкретные задачи решает
>>2654791 Мне на одном собесе один чел посоветовал подтянуть эту херню, тк везде нужна. Я чет тогда кекнул прям. Ну в целом вроде вещь полезная, хотя и не очень интересная.
С чего начать структурированный вкат в джаву? Только не надо советовать всякие справочники и документации, где все написано для знающих и понимающих, что им нужно. Мне бы что-то с полного нуля.
>>2655091 Все что написано в шапке > Где брать информацию по Java?\nГугл и книги. >>2655125 Так если я совсем нулевой, то откуда мне знать что откуда брать?
>>2655070 Если знаешь ангельский, то hyperskill, поглощаешь все что там есть по джаве, далее строишь свои пет проекты, по-ходу восполняя проблемы в знаниях, что не дал гиперскилл.
>>2655125 Если ты самостоятельно начнешь двигаться с нуля, то с высокой вероятностью ебанешься, сгоришь и пошлешь все нахуй. Нужна какая-нибудь база, где тебе скормят с ложечки основы. Даже если это какой-нибудь джава-раш.
>>2655168 мне например понравилось программировать на турбопаскале в путяге. Пошел в библиотеку взял книгу по турбопаскалю. Потом ковырялся с модным php/js/css. Потом прочитал книгу по плюсам. Ужаснулся. Потом ради интереса решил прочитать про модную жабу - очень зашло своей простотой и дуракоустойчивостью по сравнению с плюсами. Потом была проблема вкатиться, кое-как сделал тестовое задание. Так и вкатился. Щас такое наверно не прокатит
>>2655168 ты в любом случае все дропнешь нахуй маня 3 (три) месяца регулярного(!!!) изучения макакинга или иностранного языка или занятия спортом и т.д и т.п это АБСОЛЮТНЫЙ МИНИМУМ чтобы говорить о том, что ты что-то там выучишь или куда-то там вкатишься и что-то тебе серьезно советовать три месяца
>>2654940 Два основных паттерна простого использования кафки без стримов это уведомления и репликация. Сервис А реплицирует половину таблиц своей базы в сервис Б через достаточно большой объект, около мегабайта. Это первый топик Сервис А и Б отправляют уведомления о изменении в их сущностях в сервис В в виде коротких уведомлений. Это второй топик.
>>2655166 Двачую гиперскил. Инфа для очень нулевых, тысячи простых задачек и очень простой инлиш, написанный русскими. Там еще есть бесплатные триалы? Года два назад проходил полгода бесплатного триала и прошел 2/3 трека по жабе. В целом понраилось. А сейчас мне дали лычку мидла уже.
>>2655544 Спасибо. Звучит как именно то, что надо.
Короче, сервис А - хранилище кулинарных рецептов, с апи для юзера. Сервис Б - резервное хранилище, туда иногда отправляется таблицы из сервиса А. Все они шлют уведомления на сервис С - это админский сервис, где админ мониторит в логах консоли обо всем произошедшем. Норм же? Или что добавить/поправить можно? Завтра приступаю.
>>2655548 Есть бесплатные триалы по рефералке где-то на 3.5 месяца, без нее меньше. Я несколько аккаунтов сменил лол. Прошел вообще все курсы что есть по джаве, где-то 40 проектов их сделал в сумме. Доволен как слон и вообще не жалею. Читается легко и приятно, проекты под разные аспекты языка и спринга.
>>2655554 Ну второй сервис это какой то мусор. Нужны два настоящих сервиса, чтобы ты понял зачем нужна репликация. Они используют частично одинаковые данные, но у них разный функционал и разные апи. И тебе должно хотеться соеденить их синхронно по ресту. Типа когда приходит запрос на один сервис он обращается во второй за частью данных. Но так плохо, это распределенный монолит. Если первый упадет - второй тоже не будет работать. А тебе нужно чтобы функционал был тот же, но без хождения по ресу, а репликации нужной части. Ну типа есть сервис рецептов и сервис ингредиентов. В сервисе ингредиентов там есть подробная инфа о продукте. Его кбжу, нутриеты, лактоза, глютен, клетчатка, страна производства и еще что-то. На сервису рецептов нужно только айдишник, наименование и калорийность. И ты три эти колонки реплицируешь кафкой в сервис с рецептов.
>>2655554 >>2655557 А уведомление это типа такой нормализованный эвент 1. Тип сущности (строчка) - рецепт/ингредиент 2. Айдишник сущности (лонг/юид) 3. Наименование сущности(опциональный, но для наглядности) - (строчка) - лазанья/морковка 4. Енум из действий. - добавлен/удален/изменен/итд.
>>2655572 >А тебе нужно чтобы функционал был тот же, но без хождения по ресу, а репликации нужной части. >Ну типа есть сервис рецептов и сервис ингредиентов. В сервисе ингредиентов там есть подробная инфа о продукте. Его кбжу, нутриеты, лактоза, глютен, клетчатка, страна производства и еще что-то. На сервису рецептов нужно только айдишник, наименование и калорийность. И ты три эти колонки реплицируешь кафкой в сервис с рецептов.
Не понял как сделать, чтобы не было распределенным монолитом. Если на сервисе рецепты три колонки, а всё мясо на сервисе ингридиентов, то если один упадет, то вся приложуха перестанет работать. Или на сервисе ингридиентов должно быть все вместе? Гугл на "kafka replication" выдает про фактор репликации, разжуй, плиз.
Я чет запутался. В кафка консьюмере есть метод poll чтобы считать сообщения. Но также я видел что люди делают метод consume,вешают на него аннотацию кафка листенер и также читают данные. Что когда использовать?
>>2655621 То есть метод полл читает вручную когда я его вызову,а листенер нон стопом сам чекает топик на наличие новых сообщений? Посоветуйте че почитать по кафке в связке с бутом
Каким образом в Java выводится в консоль кроссплатформенно цветной текст? Например, как это делает Maven? В Linux/Mac есть ANSI-коды (через ESCAPE), но как оно работает под Windows?
>>2656861 Исходники Мавена открыты же, можешь сам посмотреть. Мавен использует библиотеку Jansi, которая смотрит, в какой среде запускается JVM, для юниксовых терминалов выводит ANSI-коды, для виндовой командной строки дёргает WinAPI, в остальных случаях ничего не раскрашивает.
>>2656132 >эксепшенов Те самые эксешпоны, которые из лямбды не прокинуть и нужно либо тупо проглотить в трай кетче, либо лепить свои умные интерфейсы которые кидают эксепшоны)))))))))))))))))))))))))))))))))))))))))))))
Это нормально на спринге, что при включенном csrf, на локалхосте, когда пытаешься ауфентицироваться, он возвращает 403? Когда на сайт задеплоишь, работать будет или нужно что-то подшаманить?
>>2656893 Нет, те самые эксепшены, которые из лямбд кидаются без трай/кетча и своих умных интерфейсов. Благо, что легаси чекед эксепшены остались в нулевых.
>>2656948 >Благо, что легаси чекед эксепшены остались в нулевых. Аннотации в спринге настроил? контроллер, сервис, репозиторий - анемичная модель. Сервис уже написал на несколько тысяч строк? Все хорошо? Все хорошенько?!
Есть тут хуесосы из джетбрейна? А то хочу смачно харкнуть каждому из вас в лицо. Какого хуя вы все еще там работаете? Вам больше нравится хуй во рту или в жопе? Имейте хоть какое-то уважение к себе, а если не к себе, так к другим разрабам
>>2656778 Ну джава как яп общего назначения использовалась буквально пару лет в 90ые/нулевые, упор в экосистеме идет на энтерпрайз. Естественно для питона пизже либы будут, там и комьюнити больше всех остальных языков вместе
>>2656963 Для тех кто не понял, джетбрейнс больше ничего не продает в Россию, но русские разрабы у них все еще работают, а значит поддерживают джетбрейнс, а значит работают против других русских разрабов, у которых доступа к продуктам нет. А отдельный пинок по почкам получают те кто пилит непосредственно Intellij Idea
>>2657036 И че? Jetbrains - монополисты в области разработки IDE. Майки пыжились со своей сраной студией, но та даже не умеет текст анализировать и строить деревья
public class Main { public static void main(String[] args) throws InterruptedException {
Scanner sc = new Scanner(System.in); //int b = sc.nextInt(); String a = "/"; boolean c = true; System.out.println(a); while (true) { if (c) { for (int i = 0; i < 13; i++) { a = " " + a; System.out.println(a); Thread.sleep(30); } c = false; } else { for (int i = 1; i < (2 + 12); i++) { //13 - 14 a = a.substring(1); System.out.println(a); Thread.sleep(30); } c = true; } } } }
>>2657036 >>джетбрейнс больше ничего не продает в Россию С подключением. С начала войны не продают. Для них мировой рынок важнее РФ.
>>русские разрабы у них все еще работают Полтреда мечтают свалить в асашай или европку на сотыгу (долларов в год).
>>работают против других русских разрабов, у которых доступа к продуктам нет. Я до войны лицензию купил, все работает. Похуй на модные свистелки и перделки в свежих версиях.
Ананасы жабоёбы: на входе строка, там может лежать дата + время в разных видах: yyyy-MM-dd'T'HH:mm:ss yyyy-MM-dd'T'HH:mm:ss.SSS yy-MM-dd'T'HH:mm:ss dd-MM-yy'T'HH:mm:ss и т.д., вопрос в следующем: Как элегантно, без квадриллиона форматтеров/trycatch привести/спарсить из стринги в UNIX или обработать все возможные варианты для того чтобы положить в Date/Tiestamp?
>>2657637 >>2657661 Ох пиздец сука бля, получается надо ебать внешку, чтобы прежде чем закидывать ручками дату меняли, либо маппинг динамический делать, ох пиздец
>>2657669 ну это и есть по сути динамический маппинг, тогда проще чтобы они сами указали формат, а я его уже применил, но пока не первостепенно, буду внешкам мозг ебать, пусть сами там хренью страдают с csv-шкой
>>2656965 Ты хоть знаешь, что такое csrf и зачем он нужен? Все у тебя должно работать, если ты в браузере дергаешь эндпоинты, а если в постмане или через курл, то не удивительно
>>2657036 Че ты глотку то рвешь - первый год живешь чтоли?
Все кто хоть чето из себя представлял - свалили вместе с галерами. Нету больше айтишников, одни вкатуны остались. Те немногие, кто пробовал хайрить к себе людей в 2022м, не дадут соврать.
>>2657456 Хули теперь бряцать мудями - "нацпредатели-нацптеродактили". У тебя теперь под носом целый анклав с вполне обоснованным общественности казусом-белли наголо, желающий помножить все твои патриотические устремления на ноль; вдобавок к обществу, для которого ты - не более чем пушечное мясо, которое если надо пойдет под нож в государственных интересах; и правительству, которое тебе параноидально не доверяет, но само сделать не в состоянии ничего. О каком патриотизме здесь может идти речь? Тем более, для состоявшегося разраба.
>>2657870 Знаю, и что такое цсрф и что такое постман, и что нужно отключать первое когда тестишь через второе. Когда в браузере тыкаю на ссылки требующе ауфа, он выдает 403 со включенной защитой.
>>2657939 А с выключенной не выдает? Попробуй посмотреть в браузере, есть ли у тебя в форме цсрф атрибут. Ты его как-то донастраивал сам или просто в конфиге сделал энейбл? Мб дело не в нем все-таки?
>>2657983 С выключенной csrf.disable() все работает. В формах ничего связанного с цсрф не доделывал, дополнительно сейчас посмотрел - там ничего и нет к хтмл-коде выданной страницы. То есть просто включенное цсрф четыристатрёшит попытки аутефентикацироваться на локалхосте. Звучит как полный булщит.
Spotbugs дико орет от дженерик проекта с хибернетом. Поля, в которые никто не пишет. Раскрытие деталей имплементации через коллекции. И так далее и так далее. Вывод: хибернет — вредное говно.
>>2657996 А ты фронт с помощью шаблонизатора делаешь? У тебя там обязательно в форме должен быть атрибут _csrf, таймлиф сам его подставляет, если ты без него делаешь, то должен сам скорее всего прописать
Хули у меня месячный триал идеи закончился, а я все равно могу ей пользоваться как и пользовался. Так и должно быть? Что вообще окончание триала подрезает?
>>2658142 Так бывает. Накидали кода из других проектов, чтоб побыстрее стартовать, потом постепенно допиливается под проект. ну или оставляется как есть по принципу "работает - не трожь"
Скажите, почему есть те, кто до сих пор использует maven ? Я просто сука не понимаю, это такая ёботь с XML, пишешь одно и тоже каждый раз. Создал новый модуль, так тебе надо его сначала в главный pom написать, потом ещё создать pom этого модуля и там прописать от кого он наследуется. В градле же создать новый модуль это одна строчка в settings.gradle.kts. И таких моментов просто дохрена, поэтому я искренне не понимаю, нафига вы юзаете мавен
>>2658776 >В градле же создать новый модуль это одна строчка в settings.gradle.kts и еще один build.gradle.kts где хуй пойми какие плагину и зависимости наследуются ага) плавали знаем больше к хуядлу ни ногой
>>2658799 Как же вы надоели. Ни одного нормального аргумента не приводите. Слишком сложно, ага, нормально разобраться, нафига, можно же просто говном полить и всё
>>2658852 Я просто реально не могу понять, что в этом сложного api это точнейшая копия compile из maven, implementation же просто не подключает зависимости автоматом, если кто то использует модуль. Те implementation юзаем, когда мы не хотим палить реализацию, например мы сделали модуль для парсинга XML, а тот кто этот модуль будет юзать, ему впринципе поебать какая либа там юзается Api же надо юзать, когда твой код отдаёт или использует классы из либы, и эту либу надо толкнуть выше
Всё довольно просто. Но опять же, если мозгов понять не хватает, достаточно просто юзать api и всё
>>2658848 Не вижу никакой проблемы ни в дублировании, ни в громоздких хмлях. А грудл 4 раза ломал обратную совместимость и куча советов на стеке просто не актуальна. Для меня, как для человека, который даже мавен не знает особо это важно, хотя у меня опыта больше 2 лет. Мавен просто работает, как автомат калашникова. Когда рыщешь по гитхабу за примерами какой-нибудь хуйни и попадаешься на код с грудлем без врапперов - то просто выяснить скомпилить проект будет дольше, чем разобраться в нужной тебе фиче.
Не разговаривайте с градлодебилом, это местный шизик-петушарпер под прикрытием, который регулярно притворяется то петухлинщиком, то говношером, то градлодебилом.
>>2658480 >очень вредная книга Это чуть ли не единственная книга с которой носятся джавамухи. Еще они любят потрясывать томиком JCIP, хотя сами всю карьеру аннотации спринга раскидывали
>>2659028 Так джавамухи со своим бобом как раз таки спринг не любят. Не тру ооп, не по клинкоду. Особо упоротые и на ломбок бочку катят. Хотят наверное писать абстрактные фабрики, интерфейсы для единственной реализации и простыни текста, как в шарпе.
>>2659033 Джавамухи буквально обмазываются книжкой Ункл Бэба, чел... Они дрочат на СОЛИД и создают интерфейсы под каждый сервисный класс в своих помойных приложениях на спринге. Прямо обмазываются этими МайСервис, а затем лепят единственную имплементацию МайСервисИмпл. И это вершина айсберга, т.к. догматичные правила Ункл Бэба приправляются отборной шизофренией джавамух и выходит эдакий монстр Франкенштейна...
>>2659044 Иронично что в шарпе таких мух еще больше. Если в джаве уже можно встретить сервисы без имплементаций, фабрик и прочего олдфажного говна, то в шарпе это считают чуть ли не золотым стандартом и продолжают называть переменные _peremennaya, а интерфейсы IService.
Анон подскажи пожалуйста как настроить правильно блядский хибер. Есть 2 класса на скринах. Хочу получать appeal по id user с пагинацией. Так то он выдает то что я хочу, но при просмотре логов я вижу что хибер зачемто еще и вытягивает самого user, по факту делает лишние запросы. Еще возникает пробоема при парсинге json в виде бесконечной рекурсии. Понятно что можно поставить @JsonIgnore , но мне кажется что это неправльное решение и я просто тут наговнокодил.
>>2659249 >Я в интерфейс выношу большую часть аннотаций. А в единственной имплементации - логика Это ерунда и не работает в спринге. Руками пиши контроллеры и обвешивай их аннотациями
>>2659273 Не дает. Но по сути он ожидает как бы класс userEntity на вход , но он возьмет из него только айди по факту. Это видно из запросов которые он генерит.
>>2659285 Дак да , я знаю. Просто мне кажется что в задании от меня требуют знание конфигурирования это говна. Я уверен что можно его настроить правльно. В конце концов задача не пиздец какая сложная, полюбому можно.
>>2659272 Спасибо анон за подсказку. Проблема доп запросов решена. Осталось решить проблему бесконечной рекурсии json и сделать так что бы он не грузил не нужные поля.
>>2659396 Тут такое дело, чел... Как-бы тебе сказать.... Хубирнейт, чуть ли не единственный орм где возникают такие проблемы. Там буквально с самых простых кейсов все переусложнено. Про текущие абстракции я вообще молчу. Если есть возможность не использовать хубирнейт, то ей нужно воспользоваться.
Класс, с @ControllerAdvice, в котором кастомная обработка всяких эксепшенов отовсюду, его куда следует помещать, в папку model, или лучше создать отдельную папку exceptions на верхнем уровне и туда его вместе со всем другим связанным с исключениями? Или еще как-нибудь?
>>2659425 Согласен. Я сейчас за 3 часа уже вовсем разобрался. С графами этими, fetch join и пагинациями. Это же пиздец. Почему он изначально делает так много всего о чем его не просят , и что бы заставить этого его НЕ делать нужно дописать дохуя аннотаций и надстроек. Проблема 1 + N это вообще прикол какой-то. Зачем сделали так что , если все зависимые сущности по дефолту выгружаются то надо 2 селекта ебашить.
>>2659443 Почему ? Видел на каком из семинаров что через него обрабатывали ошибки , что бы выдавать инфу об ошибке юзеру и при этом не плодить логику в основных контроллерах.
>>2659439 На верхнем уровне так и называешь сontroller_advice. Там не только эксепшоны можно перехватывать, но и сделать общую обертку для всех ответов например.
>>2659442 >Почему он изначально делает так много всего о чем его не просят , и что бы заставить этого его НЕ делать нужно дописать дохуя аннотаций и надстроек
Ну это как раз и есть особенности нацоинального маппинга реляционки на ООП. Без этого - никак. Или так, или твой ORM превращается в очередной диалект SQL на синтаксисе языка. Второе даже - не худший исход. Просто берешь честно учишь SQL и лабаешь на честном JOOQ, и получаешь ровно то, что от них ждешь. А не эти вот все n+1.
>>2658776 А нахуя мне использовать градл? Я мавен знаю в совершенстве, умею лабать на нем пайплайны любой сложности, умею писать для него плагины. Назови мне хоть одну причину обнулять свой опыт и аки вкатун вкатываться в градл? Что там есть такого?
XMLя нет? Ненависть к XMLю отдает инфантилизмом. А в случае с мавеновыми помниками, которые идея литералли за тебя пишет, хейтеры - вообще конченые сопляки.
Дублирование? Не знаю ничего ни о каком дублировании - в моих помниках его нет и не было. Гони пример.
Тирада про паренты - бред сивой кобылы: >В градле же создать новый модуль это одна строчка в settings.gradle.kts
Так то и в мавене новый модуль - литералли одна строчка в modules корневого помника. А вот будет ли он наследником кого то или нет, решается уже тегом parent в самом модуле. Иногда полезно модуль намеренно не наследовать ни от кого, либо наследовать от не-корневого модуля. То есть, тэг parent - это нихуя не то же самое что запись в modules. Учил бы матчасть перед тем как набрасывать.
>>2659670 Добавлю. Мавен тащемто есть за что критиковать. Взрослый человек подверг бы критике отсутствие миксинов, из-за чего распространять мавен-профили по нескольким проектам может быть затруднительно. Критиковал бы кривую и местами неочевидную активацию плагинов. Критиковал бы то, что функциональность flatten-плагина не исполняется мавеном по дефолту, и нихуя не очевидно людям понять, что этот плагин зачастую маст-хэвный в работе с мавеном и устраняет кучу ошибок и недетерминированных ситуаций.
Обмазываться солидом != понимать солид. Тем временем единственная имплементация на интерфейс - прямое противоречие солиду.
Единичная имплементация - это не совсем джавистское, это скорее культура спрингокульта эпохи разгулья autowired'ов. Сложилась она из-за того, что спринг очень сильно смотрит на декларацию точек инжекций бина - их тип, имя, аннотации... Даже если ты объявишь интерфейс над сервисом, профита этот интерфейс тупо не даст. Если спринг найдет более одного бина-имплементации этого интерфейса на одну точку инжекции, он пошлет спрингосектанта нахуй до тех пор, пока тот не заменит тип точки инжекции на конкретный тип (литералли приколотит один бин к другому) или не обмажет ее уточняющими аннотациями (приколотит один бин к другому на полшишечки). В итоге выходит, что иметь больше одной имплементации на интерфейс для спрингосектанта зачастую тупо не выгодно, и культура инверсии зависимостей тупо срослась со спрингом и извратилась в их мозгах. Культисты конечно могут оправдывать себя, что это все делается для тестируемости, но это все детский лепет и нелепые оправдания.
В теории, сейчас, когда в спринге появились отделенные от бинов Java-конфигурации, эта культура имеет шанс потихоньку отмереть.
>>2659708 >Обмазываться солидом != понимать солид. чел, там два боба договориться между собой не могут. Какой тут понимание у рядового гребца. Понимать чью версию?
>>2659708 >>Тем временем единственная имплементация на интерфейс - прямое противоречие солиду. В джаве это только для юнит тестов и делается. Тесты такие все равно хуйня, но не все еще до этой мысли дошли.
>>нелепые оправдания. Как ты при классическом подходе стаб со своей реализацией сделаешь без интерфейса? Но когда делают интерфейсы, а используют моки - выглядит тупо, это да.
>>2659741 >Как ты при классическом подходе стаб со своей реализацией сделаешь без интерфейса?
Так всмысле? Претензии то не к интерфейсам. Разве я сказал что они не нужны?
Просто одно дело когда у тебя - обычный слабосвязанный класс с полями-интерфейсами, и ты в тесте просто собираешь его с фейками от этих интерфейсов. А другое - когда у тебя спринго-бин с аннотированными по самые гланды автоварями, и тебе уже нужно для тестирования собирать ебаный тестовый контекст через спринг-тест. И какбэ ок - с интерфейсами будет проще чем без них, но блять, это сука меньшая из проблем.
>>2659746 Бин можно по разному обьявить. Например раньше было принято класс сервисов аннотировать каким нибудь стереотипом типа @Service, а поля - аннотировать автоварями. Ключевое отличие в том, что в случае с джава-конфигурацией вся инфа о том, что-куда инжектить, находится отдельно от класса-бина, а в случае с автоварями на бине - внутри класса.
>>2659749 >>Разве я сказал что они не нужны? Тогда я тебя не понял нужны они или нет.
Единственный смысл их существования - можно писать дегенеративные юнит тесты. Но если ты не дегенерат, то и интерфейсы выходит не требуются. Выпиливаю их отовсюду.
И кстати да, ты прав говоря что: >это только для юнит тестов и делается
Но в этом то вся хуйня и заключается. Если на интерфейсы смотреть лишь как на заглушки для подстановки фейков, то какбэ похую что имплементация одна. Но интерфейсы - больше чем просто заглушки. Интерфейсы - это каноничный способ инверсии зависимостей в джаве. А спектр применения инверсии зависимостей в разы шире, чем просто для тестируемости.
>>2659770 >Единственный смысл их существования - можно писать дегенеративные юнит тесты. Но если ты не дегенерат, то и интерфейсы выходит не требуются. Выпиливаю их отовсюду.
Ок, а тесты тогда как пишешь? Забиваешь на юниты и сразу тестируешь интеграциями?
>>2659779 Круды - интеграциями. Сложную логику - отделяю от зависимостей и покрываю юнитами. В идеале надо такую логику в чистые функции превратить без сайд эффектов и зависимостей, чтоб по сигнатуре было понятно что получает, что возвращает. Тогда это легко тестируется без моков. Т.е. "тупой" сервис тянет данные от коллабораторов (база, другие сервисы), вызывает такие "умные" функции передавая им данные. Получается DDD, гексагональная архитектура - вот это вот все.
В общем случае, если нет желания/возможности менять архитектуру и есть только сервисы в которых вперемешку логика и взаимодействие с коллабораторами - то лучше вообще не писать юниты, чем ебаться с их рефакторингом при малейшей правке. Они очень хрупкие и только вредят, замедляя разработку.
>>2659814 А как метод сервиса с кучей зависимостей от других репозиториев и других сервисов с походом во базы, внешние сервисы, кеши, мидлвари, очереди, интерсепторы и прочее говно превратить в чистые функиции, которым не нужны моки?
>>2659814 >Т.е. "тупой" сервис тянет данные от коллабораторов (база, другие сервисы), вызывает такие "умные" функции передавая им данные.
Отлично, глаголишь базу. Но вот скажи, разве у тебя не возникает нужды для своих чистых функций лабать функциональные интерфейсы, например? Для нужд функциональной композиции этих чистых функций? Или у тебя пока что всегда логика адекватно убиралась в тушку сервиса?
>>2659814 >Круды - интеграциями. Не работает в случае монолитов. У тебя только контекст всего приложения будет несколько минут подниматься. Учти, что у тебя есть стейт в приложении и базе и его нужно как-то "сбрасывать".
>>2660605 там 400+ страниц в книге но инфа часто повторяется + много картинок, словно для дебилов написана. по ощущениям можно ужать до 150-200 страниц надо было походу лучше spring in action читать
>>2660580 Плохая, негодная книга. Она растянута на 400+ страниц, но там из главы в главу кочуют одни и те же картинки и примеры кода. Пересилил себя и дочитал ее до конца. Жалко потраченного времени, т.к. ничего нового для себя не узнал. В целом автор графоман сраный. У него еще есть книга по спринг секьюрити - там тоже самое говно и народ на амазоне плюется от airport english.
>>2660755 Я, имея за спиной почти 10 лет гребли, читал эту книжку сквозь слезы, т.к. купил ее на сайте издательства. Теперь данный автор у меня в черном списке.
>>2661102 Я прорабатываю и читаю книги от корки до корки. На жестком лежит более 10 гб разных книг, которые нужно прочесть и составить по ним конспекты
>>2661163 Там на сайте издательства есть содержания. И по нему ясно, что это книжка для совсем нулевых. Даже слабее pro spring и spring in action. И опытному разработчику эти книги нафиг не нужны. Ему дока лучше подойдёт.
Аноны, поясните за тестирования в реальный проектах, когда разраб тесты пишет, там должен быть каждый пук протестирован или не обязательно? Это же пиздец полотно нужно прописать чтобы каждый возможный шаг проверить.
>>2661556 Я только интеграционные пишу от апишки до тестконтнйнера. Реже интеграционные от сервиса, там обычно не база, а кафка или ещё что-то. Классические юниты пишу только на кастомные валидаторы.
>>2661584 Мой лид запретил писать какие-либо тесты кроме юнит. Он дрочит команду по ТДД и заставляет прямо выдрачивать каждый класс. Мотивирует это тем, что у нас очень сложная логика (беттинг) и ее можно протестировать либо руками, либо писать 100500 юнит-тестов, которые разваливаются при малейшем рефакторинге.
Что вообще отправляться должно в виде респонса? Берется, например, ModelAndView, в нее кладется вью, и добавляется в виде аттрибута жсон. А далее фронтендер уже во вьюхе прописывает куда он сует этот жсон и что с ним делает? Или по-другому?
>>2661779 ModelAndView - это хуйня для вкатышей, специально созданная для того, чтобы поиграться с шаблонизаторами HTML и никогда в проде не использовать. Возвращаться должно DTO с данными, Jackson его конвертирует в JSON, фронтендер берёи этот JSON и делает с ним то, что ему захочется. Никаких "вьюх" у фронтендера нет, у него SPA-приложение на реакте.
>>2661808 Я во фронтенд нихуя не шарю, поэтому извиняюсь заранее если вопрос тупой, но разве если ты отправишь в теле ответа JSON, наример, через ResponseEntity<ObjectDTO> или @ResponseBody/@RestController, то на фронт придет просто несколько строчек этого самого жсона. Ни хтмла, ни жаваскрипта там не будет. Как фронт-эндер это обработает то?
>>2661819 >Как фронт-эндер это обработает то? Не переживай. У фронтендщиков уже как тыщу лет есть все средства и для обработки этого джсона, и для отрисовки странички на основе этого джсона.
>>2661819 Хтмл и жс будут загружены не через твои рестконтроллеры, а из статики, которая, возможно, вообще раздаётся через nginx. А тебе остаётся только отдавать жсоны, клиент их сам загрузит и обработает через AJAX (или его аналог).
>>2661602 Но проблема юнитов не только в хрупкости. Вот есть у тебя некая апишка. И она задевает 15 методов в 10 классах. Ты их все анально отюниттестил. И как юниты тебе гарантируют, что вся апишка работает правильно? Все 15 слоев юнитов могут быть зелёными, а апишка делает хуй знает что. И юниты ещё и мокать надо дохуя.
>>2661833 >>2661834 >>2661837 Понял. Последний вопрос, за редиректы фронт или бэк отвечает? Допустим при удачном логине редирект на главную, при неудачном заново на страницу логина. Это бэк должен делать, или бэк просто шлет обратно жсончик, а фронт-макака уже сама но основании него решает что куда редиректить?
>>2661846 >И юниты ещё и мокать надо дохуя. Что мы активно и делаем. Мокается все - репозитории, всякие клиенты для других сервисов и т.д и т.п. Прямо задрачиваешь до потери пульса эти моки, а потом их настраиваешь в каждом тесте. Один такой класс может иметь по 7-10 зависимостей, которые нужно замокать.
>>2661851 В SPA есть собственный роутинг, там страница по урлу сама решает, что на ней будет отображаться. Формально не редиректы, но смысл тот же. Соответственно, редиректы для авторизации делаются через эот механизм.
>>2661947 > не люблю хибернейт JdbcTemplate > не люблю микросервисы Java EE 6 > не люблю дядю боба и его охуительные идеи Mr. Nagoor Babu > не люблю рест SOAP
И даже не потому, что оно обьективно - говно. А потому что это выдает в тебе токсичного еблана - не то качество которое имеет смысл выпячивать на собесах. Плюс - если ты ляпнешь что что-то не любишь, гарантированным вопросом вдогонку будет вопрос "почему", и в этот момент ты для интервьюеров станешь как открытая книга, они тебя прочитают вдоль и поперек, протыкают во все телесные щели. И скорее всего ты засыпешься, потому что бряцать мудями на двощах - не то же самое что обосновывать свою позицию на интервью.
>>2662189 >И даже не потому, что оно обьективно - говно. А потому что это выдает в тебе токсичного еблана - не то качество которое имеет смысл выпячивать на собесах. Ницше писал о таких как ты. Это процесс причащения к нечистой совести ценностей низших иерархий. Ведь на деле это ты низшее из существ, пытающееся навязать анону свою мораль, а также своим грубым фарсом выставить честную позицию как токсичное мнение. Нечестивейшее из существ попирающее право сильных, обличил я твой яд и уличил в искусности речи твои. Да не будет анон обманут ложью твоей и не разделит морали твоей, ибо пустыня растёт - горе тем кто несёт в себе пустыню!
>пытающееся навязать анону свою мораль Где я навязывал? Анон вопрос спросил - я ответ ответил, а ты чет взял и на залупу залез. По сути - я даже против токсичных ебланов ничего не сказал. Сказал лишь что вываливать это качество на собесах - тактически неразумно.
>честную позицию На собесах не позицию оценивают, а компетентность и способность пояснить за базар. Если местные балаболки на это способны - ради бога. Только на практике обычно все складывается так, что такой вот мамкин хейтер обычно сильно плывет в предмете хейта, и способен только тупость свою обличить. Собесили, знаем. Да и че далеко ходить - достаточно посмотреть на уровень аргументации местных шизов в этом треде.
Хибернейт - непонятно какую проблему решает, при этом добавляет множество других проблем. Создаёт иллюзию ненужности sql, но это ложная эллюзия. Постоянно требуется проверять что он там генерирует и как это исправить.
Микросервисы - из плюсов - в теории позволяет масштабироваться там, где монолит уже никак не вывозит. Удобно делить разработку по командам. Минусы: транзакции, сетевое взаимодействие вместо стека/шины, получение огромного количества внешних интерфейсов, по которым теперь надо поддерживать огромную совместимость. Необходимость оркестрации, логирования, мониторинга всех этих десятков микросервисов. Девопсу теперь нужно знать внутреннюю реализацию систему. Если они написаны на разных языках - вообще анал карнавал, теперь надо держать девелоперов для каждого языка. И я ещё не видел ни одной системы, где микросервисы были бы не распределённым монолитом, и где типа при падении одного система продолжает работать.
Дядя боб - в общих словах пишет правильно, как показывает примеры и код - там пиздец. Вместо чистых функций предлагает использовать члены класса. Для меня это зло как глобальные переменные и нарушение инкапсуляции. 100% покрытие тестами - ничего не дает, зато очень дорогое и очень ломучее и затрудняет рефакторинг.
Рест - соап лучше, логичнее и красивее. Рест это для вкатунов, не осиливших соап
>>2662404 >Они по сути и не нужны больше никому кроме этого координатора. Очевидно только в контроллере и должно оно лежать (если не рассматривать тот факт, что контроллеры — антипаттерн).
>>2662395 >Вот смотрю все хейтят статик методы я не хейчю. Статик функция без обращения к внешним переменным - это идеал. А вот бобу они почему-то не нравятся
>>2662257 >Хибернейт Несмотря на то, что я с тобой согласен, и тоже считаю ОРМы плохой идеей, в этом месте я б задал тебе парочку вопросов в духе "что такое персистенс-контекст" и "4 аггрегатных состояния сущности в нем". Так, знаешь, чисто чтоб проверить что ты осознанный противник концепции и свой пуд соли сожрал на этом говне. А не промытка, начитавшийся чужих виршей.
>Микросервисы Здесь ты уже приспособился и перестроился. Не хейтишь втупую, а расписываешь достоинства-недостатки. Это приемлемо. Хотя в этом месте я б попросил тебя раскрыть значение термина "распределенный монолит" и рассказать побольше о том, как его избежать в ситуациях, где микросервисы таки нужны (во имя масштабируемости и других их бенефитов).
>Дядя боб Дядя боб - много лет уже как публичная персона, и виршей понаписал - будь здоров. Без ссылок на материалы, которые ты хейтишь, я вообще не ебу что конкретно у него ты хейтишь, и о чем с тобой тут говорить. Где предлагает, кого предлагает... Хейти тогда уж "чистый код" такой-то редакции, приводи выдержки его кринжа, я не знаю...
>Рест - соап лучше, логичнее и красивее. Рест это для вкатунов, не осиливших соап Во, вот эта твоя вирша про рест уже звучит как тот самый кринжовый хейт на собесах. Здесь бы я копнул поглубже на предмет того, что ты вкладываешь в слова "лучше", "логичнее" и "красивее". Дополнительно чекнул бы твою эрудицию на предмет того, знаешь ли ты вообще хоть чето кроме REST и SOAP + чекнул, какие вообще API ты лабал на прошлых местах работы.
>>2662429 Хейт к статик-функциям имел смысл до джавы-восьмерки, потому что до восьмерки не существовало простого способа использовать эти т.н. "чистые" статические методы как first-class citizenы, из-за чего был высок соблазн тупо коллить их одну из другой и тем самым их каплить друг на друга. First-class citizenом в джаве исторически был и остается обьект.
Сейчас, с лямбдами и функциональными интерейсами, стало чуток получше. Теперь хотя бы можно относительно немногословно оформить функцию как обьект.
>>2662517 Кто-то вспомнит graphQL, кто-то - gRPC. Некоторые даже RSocket помянут. Неважно. Это вопрос на эрудицию. А то камон - SOAP в 2023м все же отдает нафталином.
Сегодня проходил алгоритмическое собеседование. У меня мозг отключился с нулевой секунды, из-за волнения. В итоге, ожидаемо, я обосрался. Видимо, нужно просто заучивать все эти задачки. Тяжело…
Сап, явач. Есть задача написать несложное гуёвое приложение на котлине или яве и собрать его в виде исполняемых файлов под винду, линукс и макось. Подскажи плз 1) какой фреймворк лучше взять для рисования гуя? 2) как компилировать приложение под разные ос? Желательно чтобы это была таска гредла. Нужен не jar, а именно exe под винду и тп
>>2663203 Спасибо. У меня просто логика на котлине под андроид, и теперь надо ту же логику сделать под десктопы. Переписать её на js и потом поддерживать две параллельные ветки - так себе идея.
>>2663489 >>2663501 Любителям делать контрол флоу через эксепшоны посвящается. Заметил тут паттерн.
Всем нормальным разрабам давно известно, что контрол флоу эксепшенами - антипаттерн и оверхед из-за сбора стектрейсов, которые из-за флоу-контрола один хуй никто никогда не увидит. Но некоторые находчивые индивиды придумали занятный костыль: делают наследника класса эксепшена, и стаббят в них метод fillInStackTrace. Заметил такую штуку в нескольких опенсорцных проектах. Как пример - класс Signal в Netty:
написал сам примерно за 15 минут вот такой связный список. если бы я такое написал на собеседовании, меня бы похвалили или угандошили? https://pastebin.com/jiq5RzXZ мысли?
>>2663580 >побэнчмаркать а как? я бы додумался только время замерить на миллионах иттерациях добавления/удаления и тоже самое для уже реализованного в java линкед листе для сравнения
>ускорить зная длину списка при каждом удалении (length / 2) и индекс, определять с какой стороны быстрее начать пробегать список (head / tail). еще проверку в самом начале добавить, если индекс выходит за границы, то сразу выходить из метода
Почему бы и нет. Плюсом было бы, если б ты это делал каким нить бенчмарк-тулом типа JMH, а не тупо разницей System.currentTimeMillies. Ну и какбэ - мало и необьективно сравнивать только с линкед листом. Есть еще несколько тред-сейф листов из java.util.concurrent
>ускорить Цимес в другом. Тупо навешенный на методы синхронайз - это крайний случай. Потокобезопасности ты может и добьешься, но throughput скорее всего будет днище.
Но это все слова. На деле - надо смотреть код и бенчи. Здесь начинается интересное приключение, где ты ищешь косяки с конкарренси, анализируешь и оптимизируешь свое решение, проверяя его эффективность бенчмарками. Интересная задумка на тестовое задание, лол.
>>2663606 такое правда на джуна могут на собесе спрашивать? я смотрю на ютубе всякие "типа собесы", и там вопросы уровня вкатывальщика /b. это наеб все получается?
На джуна вообще вакансий в джаве нет. Я в совершенстве знаю алгоритмы, но не могу даже найти собес. Хоть в мерзкую пыху перекатывайся, там по какой-то причине вакансий гораздо больше
>>2663625 ну так одно дело реализовать базовую коллекцию, другое дело прикручивать к ней йоба навороты до посинения. и на тех собесах, мне частенько попадалось где просили написать линкед лист или хеш мапу. даже пару раз дерево было обычное бинарное, но это считай тоже самое что и линкед лист я не против разобраться и потыкать всю эту хуйню, наверняка на практике все равно бы столкнулся рано или поздно, особенно когда уже был бы бэграунд за плечами коммерческой разработки, но только на непосредственно реальных примерах реальных проектов, а не на голом линкед листе
>>2663701 В джаве не актуальна тема кодстайлов, есть единый стандарт от Sun/Oracle, которому все следуют. Вот в крестах о кодстайлах можно сраться вечно.
В идее можно включить автоформатирование перед коммитом. Эта настройка сохраняется в настройках проекта в .idea? Можно ли ее закоммитить в гит, чтобы у всех в команде автоформатирование включилось автоматически?
>>2663701 С какого эта хрень зовется хаскель-стайлом? Нихуя не похоже.
Хаскель(или питон-)стайл был на прошлом моем проекте. Там была странная мода делать выравнивание списка аргументов метода (даже если они идут в несколько строк) по уровню открывающей скобки, из-за чего любая цепочка вызовов уезжала пиздецки далеко вправо.
>>2663707 Ну об этом я сразу подумал, когда только начал писать, надо ли его универсальным делать, решил что разницы нет, реализация все равно будет та же. На собесах же важнее показать, что ты алгоритм понимаешь? В крайнем случае можно с интервьювером обговорить этот момент, я думаю
>>2663826 Мееех, алгоритм-шмалгоритм... Я конечно хз в какой фаанг ты собрался устраиваться джуниором, и всяк анон собесит по своему, но говоря за себя, скажу что на работе листы ты все равно сам писать не будешь, поэтому мне, как интервьюеру, было бы на алгоритм поебать, если честно. Вот другое дело - дженерики. Дженерики пригождаются на практике часто.
И как бы тебе сказать в ответ на "разницы нет". Это на первый взгляд кажется что нет. Простой заменой int на <T> ты бы не отделался.
>>2663835 лист это как пример структуры данных, я сейчас его переписываю иногда, чтобы лучше закрепить алгоритм в голове. тоже самое и с другими базовыми алгоритмами буду делать. цель - дойти до красно-черных деревьев и написать их самому. а что касается дженериков, почему не обошелся бы простой заменой? какие там приколы еще?
У меня 2 пета. В первом при ошибке валидации формы, cпринг выбрасывает BindException, при валидации рестовых объектов - MethodArguementNotValidEcxeption. Во втором пете в обоих случаях кидает MethodArguementNotValidEcxeption. Все абсолютно идентично в двух проектах. Почему спринг ведет себя по-разному? Объясните, пожалуйтса, аноны, очень важно, обработка ошибок валидации зависит от того какая ошибка выбрасывается.
>>2664099 С 21-й джавы будут виртуальные треды, которые крутятся на форкджойнпуле. Это будет базой многопоточки в джаве. Поэтому знать надо. Но т.к. ты скорее всего вкатунец, лучше не трать время. Вакансий на джаву нет для джунов. Вообще.
>>2664114 Врядли форкджойнпулы будут строгой необходимостью для зеленых ниток в джаве. Те же комплитабл фьючи, хоть и используют FJP по умолчанию, вполне себе можно запустить и заставить работать на обычных пулах.
>>2664114 Кому не похуй на 21 жабу, много кто с 8 слезть до сих пор не может. да и знать, как под капотом работают виртуальные треды тоже нахуй не надо, как и не надо знать, что под капотом у хэшмапы, чтоб ей пользоваться
>>2664123 То, что ты написал, это база. Я имел ввиду скорее хуйню типо, что хэшмапа базируется на массиве, в котором линкед листы для разрешения коллизий, которые преобразуются в красночерные деревья и прочую поебень, которую знать не обязательно, чтобы пользоваться этой самой хэшмапой.
На прошлом проекте коллега рассказывал - пробовал с помощью FJP разогнать один очень долгий биоинф-релейтед алгоритм. Говорил - еще медленнее стало, в итоге дропнул.
>>2664724 >«Какая трагедия. Я помню код Боба, который генерирует определённые числа. Код Боба написан на Java, но в нём используются умные методы поиска с возвратом для достижения наилучшей производительности среди многих решений на всех языках» Немного за другое убили.
>>2665024 Очень долго. Я через embedded-kafka тестю. В тестконтейнере постгрес. А так в тестконтейнер еще и минио и кейклок если кидать, то полный набор интеграционных тестов для небольшого сервиса в 30к строк будет идти от 20 минут.
Чо вы делаете если хотите низкоуровнево вывести картинку на экран? Уровня SDL. В тырнете везде примеры на swing, а биндинг к sdl сдох и старница скачивания ошибку выдает. Хочу лисапедный шутер типа бродилка в лабиринте, с лисапедным трейсингом лучей.
Как с хибером делать upsert в один вызов к бд? Вот приходит мне лист с entity, рандомное кол-во будет уже существующими в бд записями, а другое новыми. Как я понимаю .merge нужно делать на существующие entity, которые в detached, я не могу делать это одновременно на все entity потому что главный айдишник ведь null и получатся будет всегда insert, который потом в ошибку выпадет ибо бизнес id UNIQUE. Я не хочу каждый entity грузить из базы заранее и смотреть существует или нет, ибо это доп реквест в базу и не имеет смысла для новых записей.
>>2665055 >Или там есть какая-то зависимость как в спринг тестах с эмбедед h2 Да, инмемори эмуляция кафки. Как h2 эмуляция хуже, чем тестконтейнер. Но я в простых тестах на консьюмер/продюсер не заметил разницы c тестконтейнером. Но поднимается быстрее на порядки.
>>2665307 Что тебе мешает сделать merge на все entity из коллекции? При вызове merge хибернейт сам решит нужно ему делать запись или обновить существующую
>>2665523 Если положить хуй на производительность, никакие абстракции течь не будут. Авторов спецификации ведь не беспокоили несуществующие проблемы типа нагрузок, им хотелось побыстрее высрать API для клепания крудов макаками.
Как вообще правильно кафку тестить? Ведь по идее результат работы находится вообще где-то на другом сервисе. Создать тут-же на месте консьюмер/продюсер для тестирования и проверять, что приходит именно то, что отправилось? Это же херь полная. Как-то со смыслом это можно сделать?
>>2665841 Протестируй что во время пука в кафку данные всегда корректно маппятся в кишечные газы и пук работает. От неправильного пука жопа целиком не должна рвануть. Протестируй что делает жопа если некому занюхнуть пук в течение 30 секунд. Протестируй что ты можешь пукнуть и сразу же занюхать свой пук через противогаз (read-your-write) поведение. Если это нужно.
>>2651134 (OP) Работаю уже год джава работягой, в проекте есть кафка, раббит, постгря и монга. Немного загоняюсь что проект не высоконагруженный и нет saas, так как планирую съебать, а за бугром как я понял все в облаках. Собственно пришел спросить, на работе есть вариант писать сервисы на котле или иногда ковырять реакт/тайп скрипт, выбрать можно только одно, что перспективней для эмиграции? Я посмотрел вакансии на монстре и индид и у меня какое-то двоякое ощущение, иногда от бэкендера требуется джава, шарп, плюсы и все это сразу, есть и вакансии фуллстеков, непонятно что востребование.
>>2665848 Ну по идее, можно просто бин прописать в своей либе без кондишена и тогда в случае, если кто-то тот же бин продекларирует, то приложение просто свалится. Хотя эту хуйню легко обойти, если просто имя бина изменить
>>2665381 Как что? Я же написал. Primary id у entity нет и потому жопа считает это новым обьектом. Следовательно хибер генерит insert и пытается засунуть, после чего падает с ошибкой. Я пытался через @NativeId но чет залупа какая-то
Какое же дерьмо этот ваш петухаскель, пиздец просто. Только в Java возможно настоящее функциональное программирование. Да и в принципе только Java — язык программирования, всё остальное это пародия на язык.
MacOS-аноны, есть в треде? Поясните, на айос норм работать джависту?
Я 5 лет работал на убунте и был доволен как слон, потом пришёл в другую компании и тут работаю уже почти 2 года на ебучем виндовсе из-за корпоративной политики. Как же сука он меня бесит. Компания может дать мне мак, вот только я абсолютно ничего про него не знаю. У меня из эпла только айфон и айпад - там всё анально ограничено. В маках так же? Какие вообще подводные? Какие у вас впечатления? У меня много коллег джавистов вроде юзают и им норм.
Шалом, анон. Объясни как кластеризировать сервак? Должна быть какая-та балансировка запросов, кеш общий для синхронизации Это как проворачивается? Спринг-кластер что-то типо того Или это уровень выше - докеры, кубы? + редис для кеша? ehcache в кластере может работать. Это как происходит? Тыкал кто в это?
>>2667698 Впринципе норм. Есть два подводных: - будешь по первости путаться с раскладкой (cmd вместо ctrl) - рискуешь переучиться и стать собачкой Apple
>>2667698 Я бы на твоём месте оформил срыгос из компании, если бы меня заставляли сидеть на неприятной мне операционке. Для задрота операционка это как ноги.
Я в работе понял, что у меня в знаниях есть большие пробелы по ряду тем, реквестую какие-нибудь книги на этим темы: spring boot(вот прям основы), сертификаты(иногда какие-то манипуляции провожу с jks файлами, но сам толком нихуя не понимаю, просто гуглю и копирую комманды для опенссл и кейстора, а хотелось бы самому начать разбираться), ну и чот для самой жавы, учитывая, что я неуверенный мидл - хочется хотябы уверенным стать и начать двигаться к уровную помидора.
>>2668314 1. рекурсивной сте получаешь колонки jsonpath и значения c юидами через jsonb_path_match(jsonb, like_regex) 2. удаляешь по jsonpath нужные элементы через #- или строишь новый
>>2668314 Ну и упоминание постгреса и версии значит, что ты хочешь это сделать на уровне постгреса, что к java треду не имеет отношения. В жаве через jsonpath библиотеки это сделать проще. Но придется туда-сюда гонять большие джейсоны.
>>2651134 (OP) Приветствую донов джавы. Вопрос от неофита: если еще какие-то адекватные способы получить IntelliJ IDEA Ultimate бесплатно не создавая каждый раз новый аккаунт?
>>2668707 Легче всего сделать два запроса. Одним сформировать список jsonpath для удаления, вторым сформатировать запрос на удаление: сконвертить jsonpath в формат, который потребляет #- оператор и сделать множественный #-. Может и в один можно оптимизировать. Почитай про функции для jsonb https://www.postgresql.org/docs/12/functions-json.html
40к символов джейсонка для жаба хипа это посильная задача. А вот туда-сюда в базу несколько раз кидать столько данных это такое себе.
Есть AtomicBoolean, который используется в разных частях программы. можно ли сделать атомарные if statement, тело которых будет выполняться одним потоком(тот, кто в данный момент контролирует переменную) в один момент времени? (если какой-то поток залез в if statement блок, который связан с этой переменной, другие потоки в if statmentы этой переменной не лезут и ждут)
>>2669007 >другие потоки в if statmentы этой переменной не лезут и ждут) Это задача не для атомик булена. Ты описываешь типичную критическую секцию. Просто заворачиваешь в синхронайзд и все.
>>2669007 >>2669074 >Есть AtomicBoolean, который используется в разных частях программы
Можешь даже в качестве монитора этот атомик булеан заюзать (если я ничего не забыл).
Еще есть всякие getAndUpdate, но с ними надо аккуратней, передаваемая в них лямбда может исполняться больше одного раза за вызов, поэтому если лямбда не стейтлесс, получишь конфуз.
>>2669087 Таки объебался - updateAndGet есть в AtomicReference.
>>2669117 Во первых - нет. Есть кейсы, когда обьект лямбды создастся единожды, а не на каждый вызов (в случае, если лямбда не делает никаких замыканий на переменные).
Во вторых - для конкарренси это не имеет ключевого значения. Ключевое значение имеет обьект-монитор, а он в свою очередь вовсе не обязан быть обьектом this. В случае с лямбдами по умолчанию вообще не предусмотрено никаких синхронизаций, ибо дорого и оверкильно. Более того, блокировок нет даже в вышеупомянутом getAndUpdate - оный просто лабает лямбду в цикле до тех пор, пока не опубликуется обновленное значение. Так что непонятно, к чему ты об этом заговорил.
>Я так и не понял, при чем тут какие-то спецификации :) Ждал, что будет что-то связанное с OpenApi (как проверить реализацию по специализации, да еще и сгенерить это как-то из ямл-схемы)
>Доклад в целом про "модульное" тестирование с разбиением по слоям - делаю всегда так же. Мой типичный шаблон микросервиса - с десяток модулей (rest, service-api, service-impl, data-api, data-impl), и каждый тестируется на моках низлежащего на все тонкие кейсы вдоль и поперек (база - @ДатаДжэПэАТест, веб - на @ВебЭмВисиТест), и сверху интеграционные тесты с простейшими условиями чтобы проверить что всё от контроллера до базы пробегает насквозь
>Но в целом доклад полезный :)
В голосину проиграл с помойных джавамух. Что вы там тестируете на моках, джавамухи? Сначала рест-контроллеры свои помойные на моках дрочите (что вы там тестируете, лол?). Затем базу данных на моках "тестируете". Вы совсем там обезумели, джавамухи? Прямо эталонное вжжжжжжж, лол!
>>2670130 Я и сам частенько в голосину фрустрирую с повадок спрингокульта. Но вот мне интересно - ты сам то свое видение на данный счет поведаешь? Или ссыкло?
>>2670670 Для меня никакой разницы. Видел проекты на жаве на всех трех. Для общего развития я бы выбрал рякт, как раз потому, что он максимально непохож на спринг, попробовал бы другой подход. Если для работы - желательно беку вообще не лезть во фронт. Современный фронт это не так уж просто, особенно по затратам времени. Вместо этого лучше потратить время на изучения жабы, бд, кафки, микрочеликов, спринга и кучи других библиотек, технологий и паттернов для чистого джависта. Почти все работы с фулстеком на жабе это плохие проекты и компании.
>>2670475 Пишу impl всех слоев трехслойки. В контроллере удобно разделить кучу аннотаций между реализацией и интерфейсом. Обычные сервисы и репошки иногда мокаю в тестах(но тесты с моками пишу очень редко). Прочие компоненты, типа хендлеров, раннеров разных имеют часто несколько реализаций. Сервисы иногда тоже. Контролеры тоже видел пару раз.
55 сайтов с инфой о спринге йо-хо-хо Я открыл один там нет инфы на русском... 54 сайта с инфой о спринге йо-хо-хо Я открыл один там нет инфы на русском... ... 1 сайт с инфой о спринге йо-хо-хо Я открыл один там нет инфы на русском... ... Нет инфы о спринге...
>>2670813 >нет инфы на русском... >Нет инфы о спринге... Зачем ты пошел в программирование, если даже такие базовые вещи не тянешь? Ты понимаешь, что программирования просто не твое? Пошел бы таксовать или грузаном работать в пятерочке - пользы бы от тебя было кратно больше
>>2670813 У Яндекса есть встроенная функция перевода выделенных слов (иногда косячит), позже я скачал firefox и плагин для того же, но более удобно. Я так очень хорошо вкатился в базовые английские понятия во время чтения docs.oracle , если было туго то смотрел курсы или статьи.
>>2670867 Сейчас для бэкенда его используют буквально всегда. Даже если на проде приложение не контейнеризируется, для тестов тестконтейнеры сейчас индустриальный стандарт.
>>2671000 В чем шепот, дедуля? Берешь делаешь докеркомпос с постргей+кафкой+зукипером+кейклоком+минио. Кое какие конфиги рядом складываешь. И локальное окружение поднимается одной кнопкой за минуту. А не надо сидеть все руками устанавливать по списку из 40 пунктов. Удаленное тестовое окружение это еще хуже. Во первых ты там ограничен, не один ты на нем работаешь. Во вторых тебе надо прописывать всякие хосты у себя на машине, чтобы это говно работало. Ну и тестконтейнеры это вообще топ. С ним можно не писать идиотские юниты и покрывать все подробно интеграционками.
>>2671307 >зукипером+кейклоком+минио Прямо буллшит бинго собрал, лол!
>Ну и тестконтейнеры это вообще топ. С ним можно не писать идиотские юниты и покрывать все подробно интеграционками. А вот и любители интеграционных тестов пожаловали. На каждый покак в базку ты контейнер будешь поднимать, лол? Юнит тесты - это база. Если ты не можешь написать юнит тест на свой код, значит код - говно. Ну и тесты ты свои будешь гонять в лучшем случае полчаса-час, если проект средний по размерам. Когда юнит тесты пробегут за секунды.
>>2671312 Что тестирует юнит тест в жабе? Класс он тестирует. Абстрактно в вакууме. А поведение он не тестирует. Особенно когда у тебя куча логики под капотом у спринга, хибера, жука, любых других библиотек и фреймворков. И твой собственный код одного сценария использования разнесен по 10-15 слоям бинов.
Юнит-тесты в таком случае тестируют непонятно что. Какую-то маленькую часть логики. Можно для одного единственного эндпоинта на все 10 слоев написать 50 зеленых тестов, а реальное использование ручки они тестировать не будут. Потому что слоев дохуя и еще раз напоминаю, что кучу логики под капотом у спринга. То есть, чтобы юнит тесты не были профанацией, ради покрытия - ты должен в голове у себя держать связь между кучей бинов и досконально знать как с твоим кодом взаимодействует спринг.
А можно написать 5 интеграционных с поднятием контекста и мокать только то что явно мешает. И ты увидишь как работают твои 2 успешных и 3 кейса с ошибкой почти в том же виде, как сервис будет работать на проде.
>>2671466 >ты должен в голове у себя держать связь между кучей бинов и досконально знать как с твоим кодом взаимодействует спринг. Просто нормальные юнит тесты пиши. Для таких как ты даже воркшопы сделали - >>2670130 Просто нужно качественно все мокать. А твои "интеграционные" тесты, когда ты все перемокал - нахуй никому не нужны. Хохочу в голосину с таких мокальщиков, которые тащат какой-нибудь моксервер и начинают мокать ответы хуитки, которую они не контролируют и не владеют.
>>2671517 Тест с таймада в видосе >>2670130 - интеграционный. Слайсовые тесты спринга, типа @DataJdbcTest - это интеграционные тесты. Как и @SpringBootTest В них поднимается контекст/часть контекста спринга. Поднимается контекст - уже интеграционный. А в @DataJdbcTest еще и датасурс к бд. Юнит тест это @ExtendWith(MockitoExtension.class)
Почему в джаве так сложно писать прокси для класса? Какая-то ебала через рефлексию с кучей интерфейсов, простыня кода для такой простой вещи. Как по-простому написать прокладку, которая будет запоминать значения произвольного метода и вызывать его только в случае, если вызова с такими параметрами нет в кэше? Я не хочу тащить фреймворк или библиотеку для этого
типа Object proxyCall(Class clazz, Method method, List<?> parameters);
For example, class String from Java is a good example of a bad design. It has more than 20 utility methods that should have been provided as decorators instead: trim(), toUpperCase(), substring(), split(), and many others, for example. When I want to trim my string, uppercase it, and then split it into pieces, here is what my code will look like:
final String txt = "hello, world!"; final String[] parts = txt.trim().toUpperCase().split(" ");
This is imperative and procedural programming. Composable decorators, on the other hand, would make this code object-oriented and declarative. Something like this would be great to have in Java instead (pseudo-code):
final String[] parts = new String.Split( new String.UpperCased( new String.Trimmed("hello, world!") ) ); To conclude, I recommend you think twice every time you add a new utility method to the interface/class. Try to avoid utility methods as much as possible, and use decorators instead
То что описывает Егорыч, называется функциональной композицией. В функциональных языках оно устроено ровно так, как он описывает - есть тип String, и есть отдельный набор никак друг с другом не связанных (в один класс) функций, которые можно композировать друг на друга и применять получившуюся композицию на стрингу.
Упускает он лишь один момент - в то время как на каком нить хаскеле декларативная натура хаскеля проходит пучок оптимизаций на пути к преобразованию в императивный машинный код, на джаве это будет тупо лишняя аллокация декораторов. На уровне банальной стринги оверхед будет довольно заметен.
есть Handler, в нем Runnable вызывается каждые 5 секунд. в методе run нужно узнать, вызывался ли хоть раз кое-какой каллбек. Была идея AtomicBoolean поставить true в начале каллбека, а в run потом проверить. но чисто технически, проверка в run может попасть в промежуток после вызова калбекка и до присвоения true в самом калбеке. как быть?
>>2671747 Если тебе надо, чтоб колбэк отработал полностью, то ставишь в конце атомик свой. Если просто, что пошел вызов, то можешь в начале. Промежуток там будет это загрузка аргументов метода на стэк в жвм. Это наносекунды буквально. Можешь просто ебануть синхронайзд или лок. Производительность упадет, но паранойи не будет.
>>2671609 >Лучше вообще тесты не писать, чем такие - больше времени на переписывание тестов уйдет, чем на дебаг. Моя позиция такова, что работа на проекте должна быть выстрадана. Должно быть физически неприятно работать с кодом проекта. И я не говорю про какой-нибудь легкий дискомфорт или шероховатости. Здесь речь про невыносимые страдания и истерики, когда ты от бессильной злобы сжимаешь до скрипа зубы. А когда фляга начинает конкретно так свистеть, ты вскакиваешь из-за стола и начинаешь орать во все горло, при этом колотишь со всей дури кулаком в стену
Выстраданным должно было быть образование анальника. Кабану ни в хуй не вперлись пиздострадания красноглазых.
А так как айти-образования не существует впринципе как категории (равно как и в целом нормального образования), вы, жертвы ЕГЭ и айтишных курсов, и мечетесь от одной крайности в другую - одни забивают и пинают хуи, а другие выдумывают всякую софт-скилльную ахинею: "терпеть и жрать кактус".
>>2672026 Как раз в таком смысле, что ты, напрочь игнорируя и даже не пытаясь искать и понять причины неэффективности практики тестирования в проектах, пытаешься расписывать какую то терпильную софт-скилл-бэйзд ментальность - и кабанам и кодерам.
Последовательность решения любой проблемы, начиная от айтишной баги, продолжая этими пиздострадамиями вокруг тестирования, и заканчивая государственными проблемами, всегда начинается с поиска root cause'а. Поэтому у тебя последовательности нет.
Если че - я мимокрокодил, и комментил конкретный коммент >>2671771, так что если я заблуждаюсь - гони ссылки для последовательного разьеба.
>>2672039 >всегда начинается с поиска root cause'а А Кабану похуй на твой рут коз. Лиду поебать, что ты там не можешь или не хочешь. Есть таска, есть срок - вперед из песней. Улучшениями практик и рефакторингами будешь заниматься у себя в пет-проектах.
>>2672044 Разумеется похуй, кто бы спорил. На этот счет к вышесказанному мне добавить нехуй. Им похуй ровно по той же причине, по которой похуй тебе: они непоследовательные, необразованные, подменившие рационализм софт-скиллами ебланы, которые за деревьями леса видеть не хотят. Результат налицо - эффективные менеджеры не видят смысла тратить дорогой человекоресурс на написание автотестов и оптимизируют расходы. А айтишнички промываются ТДД-евангелистами и придумывают терпильные карго культы.
Эта цитатка - детектор идиота с архиважным мнением. Обычно если такое говорит, например, спикер на конференции, можно сразу дропать доклад, потому что он гарантированно будет дерьмом, проверено неоднократно.
>>2653537 Я бы дал наверное Программирование на Java для детей, родителей, дедушек и бабушек, сам читал, неплохие задания для начала, но там 1 часть про аплеты, хз сейчас скипать можно, но я поигрался, и эклипс рекомендуют)
>>2673234 Да не плачь, анальник-крудошлёп. Подумаешь, есть люди, которые занимаются программированием, а не вечными миграциями с одной базы данных на другую.
>>2673195 Как хочешь ты трудись; Но приобресть не льстись Ни благодарности, ни славы, Коль нет в твоих трудах ни пользы, ни забавы.
Крестьянин на заре с сохой Над полосой своей трудился; Трудился так крестьянин мой, Что градом пот с него катился: Мужик работник был прямой. Зато, кто мимо ни проходит, От всех ему: спасибо, исполать! Мартышку это в зависть вводит. Хвалы приманчивы, — как их не пожелать! Мартышка вздумала трудиться: Нашла чурбан, и ну над ним возиться! Хлопот Мартышке полон рот: Чурбан она то понесет, То так, то сяк его обхватит, То поволочет, то покатит; Рекой с бедняжки льется пот; И наконец она, пыхтя, насилу дышит: А всё ни от кого похвал себе не слышит. И не диковинка, мой свет! Трудишься много ты, да пользы в этом нет.
Подскажите пожалуйста, есть 2 метода, один может воспроизводить музыку, а второй звук. Их вынести в один общий класс "AudioPlayer" или создать два класса "SoundPlayer" и "MusicPlayer" ?
>>2673371 В майнкрафте разница в том, что звук проигрывается в конкретной локации, а музыка транслируется прямо в голову игроку. Но это должно быть два класса реализующих интерфейс Sound/Audio, а не эта хуйня с двумя плеерами, что он там напридумывал.
>>2673273 Потому что ими не умеют пользоваться. Проблема не в геттерах, это следствие. Надо чётко разделять внутренние пакеты и логику. Для первых геттеры это норма (хотя я предпочитаю record-style), как и сеттеры в исключительных случаях, для вторых моветон.
>>2674155 Java 8/11 микросервисы Spring Java Core паттерны Git Docker Kubernetes kotlin maven PostgreSQL Jenkins Agile (Scrum) Messaging Gradle RabbitMQ REST SOAP XSD WSDL XSLT JSON Protobuf Hibernate Flyway Kafka OpenAPI 3 Linux Spring Cloud Scala SQL Алгоритмы и структуры данных ООП Cassandra Elastic Search Redis Junit Mockito Многопоточка Spring Batch ELK Spring Data Spring Security Spring MVC Spring Boot Bat/sh Postman Spring Core SOLID JMS SOA JPA Stream API Collections API Testcontainers Kafka Streams Prometheus Grafana gRPC ClickHouse PL/PgSQL Spring Web Flux Netty Groovy Spring 5 TDD DDD Selenium NoSQL ActiveMQ nginx UML Java EE системный дизайн Liquibase MongoDB Tomcat Jboss Jackson облачные технологии
На двочах есть - нюфаг тред, есть хрюшетред, можно в конце концов открыть стажерскую вакансию и почитать че там требуют. Какой смысл задавать его здесь? Или что, вкатуны сегодня настолько остекломоенные, что реально ожидают, будто один анон щас им распишет за всех? Как в ваших куриных мозгах это работает?
Аноны, как сохранять файлы внутрь докеровского контейнера? Multiparftile.transferTo бросает FileNotFoundException, хоть вне докера все отлично работает. Подскажите, плиз, в чем проблема может быть.
>>2675130 Ну тебе всё равно как-то систему маунтить придется, если ты хочешь читать файл на винде или где-то еще.
Можно без вольюма, тогда тебе придется сначала залить на сервер файл через апи, потом сохранить его внутрь контейнера, потом сможешь его раздать. Но после перезапуска контейнера, его содержимое сохранено не будет и надо будет по новой.
Как юнит-тестировать методы из jspf-ок? Ну то есть есть lib.jspf которая инклюдится в другие странички. И в ней есть методы на жяве. Как на них написать тесты?
>>2675952 Раз уж ты раскопал древнее и никому не нужное говно мамонта, о нормальных тестах можешь забыть. Максимум можно взять встраиваемую реализацию JSP, рендерить страницы в строку и сравнивать с эталоном. А вообще там не должно быть сложной логики,, которую надо тестировать. Всё это должно быть написано нормальными классами и тупо вызываться из вьюх.
>>2675974 Ну от меня требуется добавить санитайзинг и валидацию входных параметров через ESAPI либу. Ну и нужно обернуть все request.getParameter("name") в мои библиотечные методы. Но хочется тестики.
Аноны, какое у вкатуна должно быть соотношение отказов к приглашениям на собесу? Или соотношение разосланных резюме к приглосам. Я раз 60 в сумме тыкнул, меня 7 раз отказали, остальные не отреагировали. Понимаю, что это херня по сути, и нужно дальше тыкать на вакансии на хх, но все же хотелось бы знать как оно должно быть в норме, чтобы если что в будущем задумать, может я что-то делаю не так.
>>2676502 Здесь иногда бегает менеджер по продажам из этой шараги, его посты трут в течение дня. Я по фану зашёл на их сайт, увидел пикрил и охуел, это ж насколько надо отчаяться, чтобы подписаться на такое. Куча книг и курсов лежит в открытом доступе, с нуля за полгода можно вкатиться, если есть интерес, и никому платить не надо.
Как происходит вкат если нет друзей программуль? Вот осваиваю курс по какому либо языку, и ведь по идее нужно хоть что-то склепать самостоятельно, приложение игру и тд?
В книге "Head first" описано, как реализовать паттерн builder. На данном веб-сайте https://refactoring.guru/ru/design-patterns/java, совсем по другому описана реализация данного паттерна. Так какую же реализацию мне использовать ?
>>2677103 Потому что есть дальние знакомые которых по связям просто после курсов взяли в компанию джуном. Очевидно если таких связей нет после курсов то нужно что-то сделать.
Мне нужно каждые 20 секунд дергать рест пока я не получу что надо, при этом программа не должна заниматься только этим процессом, какой вариант лучше всего для этой задачи?
>>2677514 Проблема в том, что результат дерганья должен быть обработан и если не получено что надо дергаться с интервалом дальше, имеет место быть рекурсия. Кроме того, тот кто вызвал этот метод он не может все время ждать и держать соединение, т.е. типа по апи пришел вызов, создался отдельный поток который его выполняет и если я из этого потока созда другой, то это хуйня идея, основной завершится по таймауту. Отправлять запрос по расписанию тоже не вариант, запрос содержит параметры поступающие из основного потока и при получении нудной иинфы должен завершится.
>>2677528 > Отправлять запрос по расписанию тоже не вариант, запрос содержит параметры поступающие из основного потока и при получении нудной иинфы должен завершится. А в чём проблема? В основном потоке кладёшь параметры в общее хранилище, например, в БД, причём указываешь статус "ожидает обработки", а из потока, который крутится по расписанию, запрашиваешь эти параметры из хранилища с таким же статусом, дёргаешь REST, если успех, обновляешь статус на "обработано" (либо без статусов просто удаляешь параметры), если не успех, статус не трогаешь.
>>2677546 >а из потока, который крутится по расписанию, запрашиваешь эти параметры из хранилища с таким же статусом, дёргаешь REST Да, как вариант, я ограничен по кол-ву потоков, но я могу из БД получить все записи в ожидающем статусе и отправить их рестом. Спасибо, наверное это самое оптимальное, а то я уже начал думать как нагородить какую-то очередь
>>2677496 >какой вариант лучше всего для этой задачи? Перестать заниматься программированием. Очевидно, что это просто не твое, если у тебя настолько простые задачи вызывают проблемы. Устройся грузаном или начни таксовать. Иными словами - найди занятие, которое соответствует твоему уровню интеллекта
>>2677546 Очередь на бд есть смысл делать только если задача обсчитывается самой бд. Например хранимка делающая закрытие опердени или еще что. Иначе лучше хранить стейт инмемори в приложении(дистрибутед инмемори кеш если кластер с раундробином на балансере)
>>2677711 Если и инмемори, надо ещё обязательно проверить, что сообщение сразу сохранилось на диск при создании задачи, а не где-нибудь потом через 10 минут.
Когда я делаю построение проекта и запускаю его с консоли, по отладке видно, что jvm не заходит в блок try catch который определён в конструкторе, почему так ?
>>2678385 Сейчас бы в 2к23 не прорабатывать книги и документацию, лол. Если ты просто читаешь, то ты так ничему не научишься и не запомнишь. Нужно составлять интерактивные конспекты и карточки в Anki, а затем это все повторять с разной периодичностью.
>>2678209 Иди доку почитай,ты что совсем дегенерат? У меня создаётся впечатление что залетухи используют этот тред вместо гугла,скоро будут спрашивать как переменную объявить
Добрый день всем. Недавно начал изучать жабу, поэтому сильно не кидайтесь калом. Пишу проект (что-то вроде приложения, где ученики делают задания, которые выдает преподаватель). Реализовал все как хотел. Но теперь у меня появилось желание добавить фичу, которая есть например на литкоде и кодварсе, то есть автоматическая проверка кода, который отправляет ученик преподу. Как это реализовать? Помоги, анонче
>>2678660 Есть такая хуйня как JUnit или что. Или assert метод. То есть ученик скидывает тебе залупу на воротник. А ты такой сравниваешь его залупу с эталонной залупой. Если заебись, то заебись. Ну а нет, так пидора ответ. Можешь через (otvet == input) делать или как. Типа главное чтобы что? Чтобы эта хуйня компилировалась. То есть он шлёт тебе код, а ты компилируешь у себя на компе. Затем ты... что там... А, ну да. Затем ты обращаешься к его методам с помощью тестов как раз. И если тесты пройдены, то заебись, ну да. Понятно? Он присылает, ты проверяешь. Ничего сложного.
Есть линкус на флешке, при запуске приложения на swing которое использует несколько дочерних потоков для отображения интерфейса, оно начинает тупить. Хотя на windows всё нормально работает. Это из-за слабой флешки ?
>>2657060 >но та даже не умеет текст анализировать и строить деревья Чё ебанулся, долбаеб? В студии просто на голову выше автокомплит в виде интелисенса, который за тебя бойлерплейты пишет из коробки
У меня есть сущность, в которой есть уникальное поле (не айди) и еще одна сущность. Как в хибере связать эти сущности не через айди, а именно через этот уникальный филд?
>>2678917 Ух как ты заебал со своим хибернейтом, раз у тебя так много вопросов по нему, прочитай талмуд на 1000 страниц вместо того, чтобы срать вопросами.
>>2679293 Статическмх методов вообще не должно быть, потому что они не вписываются в ООП, и хуй знает, как их наследовать и переопределять. Вместо них должны быть функции.
>>2679335 >потому что они не вписываются в ООП придумали ООП с наследованием и объектами и теперь пытаются впихнуть в каждую дырку, даже если не впихивается
>>2679552 Запилили язык в те времена, когда ООП было на вершине хайпа, считалось, что это серебряная пуля и единственная парадигма, которая останется в будущем. Хорошо ещё, что не все языки на это повелись.
>>2679564 Нахуя ты лепишь @PrimaryKeyJoinColumn в этой ситуации Ты вообще задумываешься над своими действиями или просто пробуешь все аннотации подряд?
>>2679602 Потому что мне нужно, чтобы айди у аплоадинг был равен вторичному филду у персона, я дохуя всего перепробовал, в доку залез - там нихуя, гопота не понимает или не знает, че от нее хотят
>>2679591 Ебанат безмозглый,никто не будет тебе объяснять элементарные вещи,ты настолько никчёмный что даже загуглить не в состоянии,ни то что книгу прочитать. Возвращайся на кассу в кб где тебе самое место
Подскажите пожалуйста, паттерн прокси заключается в том, что-бы использовать промежуточный класс, внутри которого результат работы функций смежного класса заносится в кеш ?
>>2680231 >>2680312 Ты так не налегай на фастфуд и так жирная свинья, скоро по кнопкам уже попадать не сможешь, чтоб очередной круд за две недели состряпать
Вопрос с собеса. Есть класс А, который содержит метод addBlock(String value), класс В вызывает метод addBlock и нужно положить туда значение. Я хочу вынести значение в константу, где обьявить константу, в классе А или В ? Ваши мысли ?
>>2680480 Что такое A, что такое B, что за значение? Что делает метод addBlock(), что за блоки? Где ещё может понадобиться эта константа? Нихуя не понятно. С такой постановкой задач я бы им сам не перезвонил.
Есть список залуп в одном микросервисе и характеристики залуп в другом. Как сортировать залупы по характеристикам для передачи на фронт? Делать эндпоинт на гейтвее, в котором ходить сначала за залупами, потом за их характеристиками, объединять вместе и отдавать?
>>2680608 При такой постановке задачи адекватно отсортировать можно только на фронтенде. На худой конец - как ты описал, на гейтвее, но перегружать гейтвей логикой - хуевое решение.
Один хуй проблема архитектурная - микросервисы скорее всего раздроблены там, где не надо было. Почему характеристики залуп отделены от самих залуп?
Еще такая дилемма возникает тогда, когда люди впадают в крайность типа "микросервисы не должны дублировать никакие данные". Типа, что если характеристики залуп есть в одном сервисе, они ни в коем случае не должны дублироваться в другом. Это - хуевая ментальность. Дублирование данных между микросервисами - это обыденность и неизбежность. Избегать ее любой ценой == попадать вот в такие вот ситуации, когда логически нужно сделать джойн, а нет ни данных ни SQLя. Одни зашоренные ресты.
Аноны, как вкатуну попасть на онлайн собес вообще? Не устроиться, а хотя бы начать попадать на собесы? Я уже много времени каждое утро прокликиваю новые вакансии на хх, ни разу не позвали. 32 года, неоконченное гуманитарное высшее, не работал в технической сфере ни разу, живу в сибирском полумиллионнике, работы для джависта здесь нет. В резюме стоит, что готов к переезду. Что мне можно наврать, чтобы приглашать стали, может выдумать техническую вышку, выдумать что работал всякими сис. админами или инженегром? Поставить что живу в Москве? Занизить возраст? Или это все не имеет значения? Пока задача только ходить на собесы, чтобы знать что там и как и набить скилл по их прохождению. Посоветуйте, поделитесь опытом, плиз.
>>2651134 (OP) >Just stop wasting time with Java and any of its many derivatives. Leave it where it belongs: poorly educating students in uni with terrible OOP practices that’ll take 5-10 years to unwind. >sbt, gradle has left me with bad memories, working on jvm is a stain on my life
>>2681549 >32 года, неоконченное гуманитарное высшее, не работал в технической сфере ни разу, живу в сибирском полумиллионнике, работы для джависта здесь нет
Техлид. Написал ~150к строк кода. 2 года опыта. Только сейчас узнал о ReadWriteLock (слышал и раньше, но не вдавался в подробности, что это такое). Почему этой базище не рассказывают при скачивании JDK?
>>2681552 Коллега, это вы hacker news читаете? Последние годы там аудитория резко сменилась на соевых реддиторов, так что мнение комментаторов имеет низкую ценность. Хотя тут конечно сыглы с челом
>>2681694 Нет, в то время говорили: >Нахуй нам эта ваша неизвестная джава без экосистемы если есть делфи, плюсы и бэйсик? Через пару лет хайп спадет и разработчиков не найдем Это как сейчас скуфы твердят о ненужности котлина, голанга и шарпа, а эти языки всего за пару лет откусили огромный кусок от рынка джавы
>>2681603 Сейчас большинство так называемых сеньоров и миддлов - самозванцы, которые занимают рабочие места. Наверное, таких 90%. В то время как по-настоящему умные люди, которые в совершенстве знают алгоритмы, многопоточку, математику, архитектуру, как я, не могут устроиться на работу. Единственная надежда, что всех этих так называемых сеньоров мобилизуют на фронт и их места займут достойные
>>2681936 >В моем случае он тоже рискнул Да, я уже заметил. "Техлид" с двумя годами опыта что-то там наговнокодил на полторы тысячи строк говнокода и узнал про ReadWriteLock, лол. Зачем ты туда полез, чудо?
>>2682019 В чем смысл конспекта по книге если: а) ты не читал эту книгу б) конспект написан не тобой А вообще ты не залетный гуманитарий случайно? Конспекты по программированию это какой то рофл
>>2682039 А в чём смысл книг? А в чём смысл лекций? А в чём смысл энциклопедий? А в чём смысл баз знаний? А зачем читать, на опыте нельзя что ли всё понять, всё смастерить?
На самом деле все это пишут уже на сишарпе или переводят проекты с джавы на сишарп. Кабаны поняли, что держать ораву настройщиков аннотаций в спринг фримверке попросту невыгодно - те могут годами ссать в уши как у них все сложно и как они трудятся не покладая рук. Но разработка на C# быстрее минимум на порядок, не требует раздутого штата отдела разработки, а конечные сервисы и продукты работают в несколько раз быстрее, надежнее и потребляют значительно меньше ресурсов.
>>2681909 Бери выше. Все айти было обречено с самого начала.
Айти-образования не существует как класса. Инженерные скиллы развиваются лишь отдельными индивидами на чистом энтузиазме, и таких индивидов год от года все меньше и меньше. А в массе своей все айти - это сборище терпильных гибких софт-скилльных лицемерных пидарасов, обученных быть рабами. Все их скиллы и навыки заточены лишь на то, как бы продать свою жопу подороже. Разумеется, в такой экосистеме термины "миддл" и "синьор" не могли не потерять свой изначальный смысл - сейчас это просто лычки, которые пидарасы повыше в иерархии раздают пидарасам пониже, чтобы купировать в последних желание искать, куда подороже пристроить свое очко.
>>2681706 Ну шарп действительно как заменитель джавы не нужен. Хуй на хуй менять - только время терять. Если уж менять мейнстрим, то в сторону развития (Rust, Scala, Haskell, возможно - F#), а не в сторону застоя.
>>2682593 >Айти-образования не существует как класса >Инженерные скиллы развиваются лишь отдельными индивидами на чистом энтузиазме Какая связь между клепанием крудов на спринг фримверке и инженерией? С чего ты вообще решил, что можешь называть себя инженером? Ты не проектируешь мосты и не запускаешь ракеты в космос. А расставлять аннотации и грузить жысоны, как выяснилось, может и курсовой вкатыш
>>2682630 >Kotlin За пределами экосистемы Android он нигде не прижился. На сервере доминируют Java (уже идет на спад, т.к. все переписывают на C#) и C# (новые проекты стартуют именно на этом языке)
Один из создателей прямо сказал, что разрабатывали Котлин, чтобы продать побольше лицензий на Intellij IDEA:
Круды - миф. За 10+ лет в джаве не встречал ни одного чистого тривиального круда, везде была своя специфика.
>С чего ты вообще решил, что можешь называть себя инженером?
О себе я не говорил ни слова. Не приписывай мне того, что я не говорил.
>расставлять аннотации и грузить жысоны, как выяснилось, может и курсовой вкатыш
Как это противоречит с вышесказанным? Расставлять аннотации и грузить джсоны - это по канону и есть уровень джуна (делать небизнесовые мелкие манипуляции с кодом).
Ни одной книжки не прочитал Изучал все на практике с встроенной докой в идее Сотыжку имею Все равно информацию выше джуновского уровня в свободных источниках не найти
>>2682635 >Расставлять аннотации и грузить джсоны - это по канону и есть уровень джуна (делать небизнесовые мелкие манипуляции с кодом)
Курьезный расклад, если подумать. Честные вкатуны не могут вкатиться, потому что вакансии на джунов - всё. А под вакансии синьоров по факту набирают ровно тех же джунов-кнопкокрасов-крудошлепов, у которых единственное отличие от вкатунов зачастую лишь в том, что они успели набить своим очком стажа на синьорную лычку.
>>2682776 >Меньше ресурсов жрет Не просто меньше, а на порядок меньше. Где джава будет отжирать гигабайты и десятки гигабайт памяти, поднимая по несколько минут контекст спринга, гоулэнг умудряется выдавать кратный прирост в производительности и потребляет десятки или в худшем случае сотни мегабайт. Пока помойная джава с гнойным спрингом начинает кряхтеть на нескольких сотен запросов в секунду, гоулэнг даже не поморщившись обрабатывает десятки тысяч запросов в секунду. При этом тебя не надо нанимать Шипилева для тюнинга JVM и не нужны супердорогие сеньоры, которые наизусть выучили доклады Борисова
ПРИШЛО ВРЕМЯ ОПТИМИЗИРОВАТЬ АЛГОРИТМЫ КОД САМ НЕ ОПТИМИЗИРУЕТСЯ ДОБАВЬ ХЕШМАПУ, ДОБАВЬ КЕШИ ЗАЧЕМ МНЕ НУЖЕН SRPING, У МЕНЯ НЕТ КОМПЬЮТА ЧТОБЫ ЕБАТЬСЯ С НИМ ЛУЧШЕ ЕЩЕ РАЗ ПООПТИМИЗИРУЮ КОД Я ОПТИМИЗИРУЮ КОЛИЧЕСТВО БАЙТКОД ИНСТРУКЦИЙ ПО 3 РАЗА В ДЕНЬ КАЖДАЯ ОПТИМИЗАЦИЯ ЗАНИМАЕТ ДВАДЦАДЬ МИНУТ Я ЖИВУ АКТИВНОЙ И ПОЛНОЦЕННОЙ ЖИЗНЬЮ Я УСПЕШЕН И ПОЭТОМУ ЦЕЛЫЙ ДЕНЬ ИГРАЮ В ИГРЫ А ПОСЛЕ ЭТОГО ОПТИМИЗИРУЮ КОД УДАЛЯЯ СТРИМЫ ТУПЫЕ СПРИНГОДЕБИЛЫ ОДЕРЖИМЫ ЗАПУСКОМ JVM А Я СВОБОДНЫЙ ОТ ЗАДРОТСТВО ЧЕЛОВЕК СКОЧАТЬ БЕЗПЛАТНО И БЕЗ РЕГИСТРАЦИИ МОКРЫЕ ПИСЕЧКИ КРЯК УЛЬТИМАТ КЕЙГЕН РАЗБЛОКИРУЙ IDEA ЛУЧШЕ Я ПООПТИМИЗИРУЮ ЕЩЕ РАЗ ПОТОКИ И СЛОМАЮ ИХ НАХУЙ ЛУМОМ, СТАБИЛЬНОСТЬ НЕ НУЖНА Я НЕ ОПТИМИЗИРОВАЛ КОД НЕДЕЛЮ ПОЙДУ ПООПТИМИЗИРУЮ В JAVA ВСЕ ПРОСТО И ПОНЯТНО ААААААААААА ОШИБКА OUT OF MEMORY ERROR ЭТО ЖЕ ОЧЕВИДНО КАК ЕЕ РЕШИТЬ ПРИШЛО ВРЕМЯ ОПТИМИЗИРОВАТЬ КОД ККОКОКОКОКОКОКО ЖМУ/ПИНУС, ШВАБОДКА, ПИТУХИ, КОКОКОКОКОКОКО
>>2682783 >У вас просто не было нормальных джавистов Кхе-кхе, ну как-бы тебе объяснить, чел... То, что спринг приложение поднимается за несколько минут и только на старте жрет минимум гигабайт памяти, нужно сказать "спасибо" разработчикам этого поделия
Загадка, на которую я не нагуглил, почему при попытке сохранить в бд наследника, hibernate сохраняет только поля родительского класса? Дебагер показывает что сущность наследника создается как надо, проблема возникает именно на последнем шаге сохранения через стандартный метод save в jpa репозитории
>>2682822 При всей моей нелюбви к спрингу, все таки сам по себе он стартует нихуя не несколько минут. Несколько минут он может стартовать если в него навернуть с десяток тяжелых стартеров, ОРМ, и насовать в бины какой нибудь тяжелой хуйни в постконстракты или конфигурации. На пиздеже я тебя конечно щас не поймаю, ибо не был свидетелем того, что у вас там с ним за приключения были, но при своем мнении останусь - ваши джависты скорее всего были просто криворукими спрингокультистами.
Ну в целом но оффенс - если на гоу вам лучше, это здорово.
Помогите пожалуйста найти курс Язык программирования Java (Java SE10). Уровень 1. Базовый курс (бауманка) в интернетах, не гуглится, а другие кушать не хочу, говном измазаны, лишь этот прекрасный и все хвалят. Умею жабировать, но надо систематизировать знания, сейчас на уровне "берем вот это, копируем, гуглим по аналогии задачу, делаем вот так вот"
Пишу процедурный код на ООП языке. Пишу HTTP апи где клиент ломается от любого изменения и говорю что это RESTful. Пишу тест который поднимает базу, кафку, редис и говорю что это юнит тестирование.
Так еще б стояла цель тебе не платить. Основная цель - чтобы ты не свалил соискательствовать на Юрьев день.
Цимес рабства не в том, чтобы раб голодал и был перманентно избит и унижен - голодный полудохлый раб это просто тушка, от которой никакой пользы и один вред. Опытный рабовладелец даст рабу баланду и внушит идею о том, что "работать и терпеть - большая честь", за что раб в лепешку ради него расшибется. А рабам, которые для него представляют ценность, даст больше баланды и внушит мысль о том, что они - его синьоры любимчики.
>>2682997 Что конкретно не натягивается на гитфлоу?
Гитфлоу говорит четко: стартанул релиз - делай ветку. Зарелизил релиз - мерж ветку и вешай тэг. Что значит твой вопрос тогда? Если нужно несколько веток релизов - делай несколько веток релизов.
>>2683010 Да ты тоже неумный. Сука, стремишься помочь человеку, а вместо человека гнилой анальник, паскуда выебанная - анон у него виноватый за то, что не может свой вопрос сформулировать. Пиздуй нахуй с треда, здесь вообще джава.
>>2683034 Поделись в таком случае. Что спрашиваешь, насколько глубоко. Как оцениваешь кандидата. Скорее всего придется менять работу, а я последний раз проходил собесы 2 года назад.
>>2683528 > 1."Программируйте на уровне интерфейсов", Твои классы имплементировать интерфейсы,когда тебе в коде понадобится твой класс, например ты будешь передавать этот класс как параметр метода,то ты передаешь (используешь) интерфейс вместо конкретной реализации. Это помогает тебе обеспечить слабую связанность между классами тк реализаций может быть дохуя > 2."Предпочитайте композицию наследованию" Когда тебе нужен функционал какого-то класса ты не наследуешься от него,а создаёшь в своем классе поле private TargerClass target и используешь необходимый функционал вызывая методы у target
>>2683614 Это применимо к литералли всем реальным и будущим языкам программирования, в которых есть/будет такое понятие как переиспользование кода в каком то виде.
Че-то походу джава всё. Я почитал, везде хвалят сишарп, и у нас, и на западе, и за ним будущее. Ну так-то если подумать, то шарп постоянно развивается, на нём можно писать, что угодно. Игры, машин лёрнинг, бэкенд, фронтенд. Какие у шарпа вообще минусы есть? Думаю перекатываться из джавы в него.
>>2683818 Че-то походу сишарп всё. Я почитал, везде хвалят JS, и у нас, и на западе, и за ним будущее. Ну так-то если подумать, то JS постоянно развивается, на нём можно писать, что угодно. Игры, машин лёрнинг, бэкенд, фронтенд. Какие у JS вообще минусы есть? Думаю перекатываться из сишарпа в него.
>>2683866 Go никогда не позиционировал себя как язык для всего и претендовал исключительно на микросервисные апишки и серверное ПО. В отличие от JS и шарпа, которые в каждой бочке затычка.
>>2683883 Как то раз я столкнулся с одним шизом в телеге. Он два часа пытался мне продать, что Go - это прежде всего идея, а не язык, и типа что именно ради идеи следует изучать гоу. Скорее всего имел ввиду Goйную ортогональность и минималистичный тулинг, я хз.
Из забавного - упорно агитировал меня к тому чтобы я почитал биографию разработчиков Go, типа "пока я не ознакомлюсь с биографией, я не пойму идею".
>>2683976 В го вообще дохуя сектантов. Развитую экосистему других языков они называют ненужным легаси, которое не позволяет реализовать нужные решения. Т.е. мешает им писать велосипеды и костыли, лол.
>>2683985 Ну блять. А ведь теплилась надежда что если придурки-евангелисты окажутся правы и джава в конечном итоге умрет, то тогда хотя бы утащит за собой в могилу ублюдочный (спринго)культизм. Хуй там.
>>2684005 >>2684013 Я все в сервисе делаю. У меня контроллеры и репошки максимально тупые, они про сервис нихуя не знают, контороллер не знает какие у меня доменные модельки, только дтошки. А сервисы знают все. Но мне и тут и тимлидец доказывал, что я не шарю. Уже не помню что тут говорили, может просто потому что потому. А вот тимлид начал ко-ко-ко про ддд, адаптеры и что сервисы дохуя на чебя берут. Пока вообще не помнимаю на какие я могу грабли наступись, если мапплю в сервисе.
>>2684098 >А сервисы знают все. Отличный пример анемичной модели данных и программиста на спринг фримверке, лол. А потом удивляются, почему это проекты на спринг фримверке такое неподдерживаемое говно, лол.
>>2683923 1. В 99% случаем потом понадобиться создать класс BolshayaZalupa, и, чтобы не ломать обратную совместимость, надо изначально делать интерфейсы. А вместо ZalupaImpl называть BaseZalupa.
2. Что конкретно не читается? extends Hui? Ты олигофрен?
Много же тебе говна накидали, я ебал эту петушиную кодлу.
Единственный адекватный ответ - вот этого анона: >>2683540
От себя добавлю.
> 1."Программируйте на уровне интерфейсов"
Этот принцип еще имеет второе название: dependency inversion principle. если обьяснять его смысл на пальцах, то проблема формулируется так: если класс A использует напрмую класс B, то изменения в классе B неизбежно будут приводить к регрессиям (поломкам) в классе A, из-за чего класс B править становится сложнее и рискованнее. Выход - выделить новую сущность C таким образом, чтобы нужды ее менять было как можно реже, и уже на нее завязывать классы A и B. В джаве такой сущностью является интерфейс - один класс его имплементирует, второй - держит на интерфейс референс.
Каплинг получается A -> C <- B, вместо A -> B. Но важно понимать, что работать такой дизайн будет только если интерфейс C остается неизменным почти всегда. Об последнем спрингокультисты обычно не парятся, поэтому у них вместо правильного интерфейсного дизайна всегда выходят пары ServiceInterface <- ServiceImpl, к которым они быстро теряют интерфейс (профиту никакого, а писанины дохуя) и просто откатываются на прямой каплинг Service1 -> Service2. Дебилы, короче.
> 2."Предпочитайте композицию наследованию"
Есть два понятия: сабтайпинг и наследование. Сабтайпинг - это база, и основа для любого полиморфного поведения.
В джаве для нужд сабтайпинга есть два инструмента: наследование и имплементация интерфейсов. Проблема в том, что наследование - довольно посредственный инструмент. Дает слишком уж много свободы. Из-за этого, и еще из-за привычки со времен c++, люди по непониманию очень часто используют наследование не для сабтайпинга, а для переиспользования кода. Кончается это плохо. И вот для таких людей придумали чихвостить наследование в хвост и в гриву - пусть лучше они вообще не будут использовать наследование, чем будут использовать ТАК.
>>2684594 Интерфейс, абстрактный класс, или вообще какой нить тайпкласс из ФП - неважно. Это лишь разница в форме. Суть всегда одна - вместо того чтобы делать две конкретные (и как результат, волатильные, изменчивые) сущности зависимыми друг на друга (а зависимость конкретик - всегда и во всех языках и парадигмах источник рисков, регрессий и багов), выделяется некая общая (стабильная) суть этих вещей, и выносится в т.н. абстракцию.
Абстрактный класс тоже может выступать в роли абстракции. Но нужно понимать и отдавать себе отчет в том, что не каждый абстрактный класс и даже не каждый интерфейс уместно звать абстракцией. Абстракция - это в первую очередь сущность, максимально отделенная от конкретной логики, и описывающая конечную выполняемую задачу языком типов и деклараций. Если в абстрактном классе окажется слишком много конкретики, он перестанет быть абстракцией.
>>2684709 Разве интерфейс не определяет "что класс умеет делать" ? А абстрактный класс "чем класс является". Получается, нельзя использовать интерфейс в качестве абстракции...
>>2685030 >Разве интерфейс не определяет "что класс умеет делать" ? >А абстрактный класс "чем класс является".
С чего бы вдруг?
Что определяет конкретный класс или интерфейс, зависит целиком и полностью от разработчика и того смысла, который он вложил в этот класс/интерфейс. Ни больше ни меньше.
По совести - должно быть так: абстракция опредаеляет - "какую задачу решаем, что делаем". Конкретика определяет - "как конкретно решаем задачу". Абстракции удобнее лабать интерфейсами, конкретику - их имплементациями. Что впрочем не означает что интерфейсы и их имплементации - единственный способ лабать абстракции и конкретику.
>>2684326 Двачую этого. Пока не будет пары-тройки классов, не нужно над интерфейсами/наследованием заморачиваться. Это стоит делать когда уже явным образом вырисовываются сходные места и появляется понимание, как удобно всем этим будет пользоваться.
А на ранней стадии заебёшься в нескольких местах править.