Это копия, сохраненная 6 апреля 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вики по вкатыванию в джаву: https://github.com/java2ch/java-thread/wiki
- - Пять вопросов из предыдущего треда:
- - - - 1. Кто-то пробовал mjc school? Стоит того?
- - - - 2. На днях буду изучать spring, после буду проект писать для интервью.
Скажите, на spring только сайты пишут ? Или можно лаунчер для майнкрафта написать ?
- - - - 3. Аноны, есть две @Entity, скажем Person, с полями name и age, Payment с полями employeeName и amount. Как мне через JPA получить третий объект, представляющий джоин этих двух энтити?
- - - - 4. Пачиму нельзя скопировать модуль расширения dashchan встроенной функцией идеи? Выдает ошибку Error adding module to project, причём без какой-либо дополнительной инфы. Зато если в полу-ручном режиме скопировать папку и переименовать там классы с файлами, то всё работает как положено
- - - - 5. Посоветуйте, пожалуйста, хорошую книгу, чтобы понять ООП и объектный дизайн.
Предыдущий: >>2585661 (OP)
Что еще надо на мидла?
high contrast
Ну даже если мы предположим, что хибер есть только на легаси проектах, то легаси большинство.
Ну и кстати вопрос, сильно будет после пиления нескольких микросервисов почти с нуля садиться на легаси с монолитом/микросервисами/распределенным монолитом?
реальную
Вот эту
Дефолтную светлую тему. Глаза меньше устают. У меня и в терминале светлая тема.
дефолтную светлую. Даркула это кулхацкерам
У именно меня от светлой глаза устают. Все коллеги используют темную. Но насколько я понимаю, это индивидуально.
Я себе темную поставил везде и в идее и в мессенжерах и в ос. Пробовал даже расширение для браузера, чтобы на страницах фон перекрашивало - плохо работает.
Уже лет 7 использую muon. Раньше на том тирече стандартная тема раздражала, поэтому сидел на нульче.
в контроллерах спринга возвращают ResponseEntity<?>. зачем? контроллер работает с конкретными сущностями, почему явно не указывают класс сущности?
Т - если планируешь использовать параметр, а ? если тебе пофиг на него, лишь бы скормить компилятору.
так а в чем преимущество? я не понимаю. я сам не знаю так ли это, но логически если подумать, мне кажется, чем конкретнее указываешь компилятору какой тип использовать, тем более он тебе оптимизирует байт код.
Байт-код ничего не знает про дженерики. Читай книгу Философия Java на 1000+ страниц, там эта тема очень подробно разбирается.
ну тогда в чем преимущество то епта? в том что ты 1 символ ставишь вместо N символов?
Чтобы не писать методы для работы с каждым классом. К примеру, если пишешь калькулятор, то пришлось бы писать отдельный метод для сложения int и отдельно для double.
так я бы мог создать типизированный метод и с тем же успехом вызывать ResponseEntity<T> method<T>(...)
Мое мнение, что клауд не нужен вообще.
С нулевыми знаниями секурити тоже можно найти место. Но лучше быть готовым что на тестовом дадут минимальную авторизацию с basic auth. https://www.youtube.com/watch?v=7uxROJ1nduk вот этого видоса будет за глаза.
а явно писать геттеры-сеттеры-конструкторы-билдеры для открытых пидоров
Ваадин что-то типа WebForms, создаёт высокоуровневый абстракции над вебом, чтобы приблизить работу к десктопу. В итоге гоняет тяжёловесные пакеты между фронтом и бэком.
Блейзор же - результат длительной эволюции фреймворков на базе ASP.NET. Он не скрывает детали реализации. Можно напрямую писать html, создавать свои компоненты. Это полноценная альтернатива фреймворкам типа реакта и ангуляра.
олды явы пидорами не были
следовательно ты не прав
Можно напрямую писать html, создавать свои компоненты.
То есть это шаблонизатор что-ли ебучий просто прокаченный? Нахуй он тогда нужен? Анону нужно на ресте практиковаться.
>в петушарп завезли тормозящий сахар
рррррряя, питушарп лучший, сахарок, никакого бойлерплейта!
>в петушарп не завезли тормозящий сахар
ррррря, чё, не мужик что ли?))0))0 зачем тебе тормозящие пакеты какие то гонять? деды на голом хтмл писали и мы будем))00)
Там два варианта. Есть серверный, где клиент все нажатия кнопочек отсылает на сервер. И веб-ассембли, который полностью работает на стороне клиента.
Преимущество в том, что пишешь на сишарпе и не надо учить жс/тс. Если собираешь в фуллстеки, то сразу учи жс/тс.
>Я даже не ебу как мне этот проект описать одним словом, когда спросят, разве что начать называть сразу какие технологии там используются и какие фичи есть.
Никто ничего не спросит с вероятностью 90%. А если спросят, то только про технологии которые трогал в пете, про пользу это шиза. Если у тебя ненужные технологии типа шаблонизаторов, то страдай. Ну и просто акцентируй внимания на других технологиях из пета, более актуальных, связанных с бд например.
Ебаться с жс/тс - намного более адекватное вложение времени, чем вкладывать его в веб ассемблер, шаблонизатор и библиотеку-обертку для них, типа твоего вишневого блейзера.
> бэкендщику надо знать про реакт и прочее гомопидорство?
Нет.
> сначала бекенд пишут, роуты, только потом фронтендщик сам подстраивается? или бекендщик подстраивается? или все роуты обговариваются заранее?
Бэкендер продумывает ручки и дтохи, описывает их фронтендеру. Дальше пилят параллельно, бэкендер пишет логику, фронтендер красит кнопки и дёргает ручки.
>>Преимущество в том, что пишешь на сишарпе и не надо учить жс/тс.
Я пишу на джаве и мне тоже не надо учить жс/тс. Для этого фронты есть.
>>фуллстеки
2 мидла по цене одного, еще и дорогим сенькой никогда не станет
>фронтендер красит кнопки
Вот ты пренебрежительно относишься к работе фронтендера, типа легкая хуйня их работа, но ведь на деле современный фронтенд будет посложнее бека.
Это рофл такой, как бэкендеры, грузящие жсоны в базу.
Ну я вот например не крудошлёпством занимаюсь, на бэкенде. Фронта в принципе интереснее нет, а на беке много жемчужин.
> бэкендщику надо знать про реакт и прочее гомопидорство?
Знать штуки всегда лучше чем не знать штуки. Ауф.
>как происходит разработка в реальном проекте?
По всякому. Иногда идут от бэкенда. Иногда оба идут от API (spec-first). А иногда (вот как у нас, например), бэк и фронт идут вслепую параллельно, а потом начинается баттл-рояль под названием "интеграция фронта с бэком".
Ну вот короче, только с телефона хуево выглядит, ауф через гугл не работает тк домена нет, офну через час
http://89.208.209.143/api/view/main
Не переходите по ссылке. Долбоеб решил заскамить на аккаунты.
тебя ебет? я в скоупе юзер выставил на похуй
Спасибо, но я немного обьебался конечн, постоянно выкидывало из аккаунта внутри приложения, как я понял, это из-за того, что я сделал скейл на три инстанса на всякий, а айди сессии спринг хранит подефолту в какой-то коллекции внутри приложения я это не менял и когда перекидывало на другой инстанс, происходил редирект на логин пейдж опять. Еще сейчас понял, что сисрф задезейблен был и можно было б базу засрать через постман какой-нибудь тк валидация быоа только на формах стоит.
Ты не бизнес менеджер, чтоб создавать успешный коммерческий продукт. Так и преподноси, что это проект для оттачивания навыков и демонстрации разных технологий. А вот то что там общаться проблематично, это минус и претензия к тебе. То что используется таймлиф - не оправдание, зачем тогда выбрал эту технологию?
Алсо, подскажи, как хостил?
Напишу!
>Ты не бизнес менеджер, чтоб создавать успешный коммерческий продукт
Да сейчас с большой неохотой берут без коммерческого опыта, а если кандидат хороший, но нигде до этого не работал, пытаются выдать его пет проект за этот опыт. У меня знакомого об этом примерно спрашивали на собесе, видимо все-таки это немаловажно.
>используется таймлиф - не оправдание
Ну у меня скорее оправдание, что вкатываться в реакт как-то не хочется, убьет много времени и ничего вообще не даст в перспективе, поэтому пошел по легкому пути, который сейчас является узким горлом в моем проекте и не дает реализовывать все идеи в полной мере.
>как хостил?
Просто в кубер закинул, который в отечественном клауде создал, не уверен на счет того, что так можно и нужно делать, но сделал как умею
>пытаются выдать его пет проект за этот опыт
Это будет когда ты уже трудоустроишься и твоя аутсорс компания будет пытаться продать тебя иностранному заказчику, думаю тебе помогут с этим. А в саму компанию, в которую ты устраиваешься, нет смысла делать вид что ты сделал какой-то реальный коммерческий продукт
> Скажите, на spring только сайты пишут ? Или можно лаунчер для майнкрафта написать ?
Вот вы смеетесь а я пилил плагин для сервера который полный спринг контекст поднимает, и через REST доступ к миру дает
А вообще можно запилить бэкенд с таймлифом, и в портативный браузер засунуть а ля электрон
А как профилировать веб сервисы?
Я знаю как профилировать обычную программу, есть ли для веб сервисов особые профайлеры, которые как нибудь с жизненным циклом запроса интегрируются, например?
Что если у меня периодически какой-то запрос очень медленно выполняется? Только логи, метрики, инструментация в попытке найти зловредный тесткейс, или есть что-то более продвинутое?
А если замедло плавающее и не зависит однозначно от параметров запроса, и локально не воспроизводится?
Я знаю как это делать по принципу здравого смысла, ака смотреть на базу в первую очередь, логи писать итд, мне интересно что вы делаете когда совсем пизда
идея в том, что я не могу использовать 1 составную таблицу (movie и person), потому что один person может быть в одном фильме и актером, и режиссером (как пример). поэтому комбинации movie_id и person_id бы повторялись, но в таком случае нельзя было бы идентифицировать по роли person. тогда можно было бы добавить 3 колонку role_type (varchar или указывать id роли), но тогда не понятно какой составной PK делать. а PK по 3 столбцам нельзя делать (вроде)
т.е. вот так сделать...
но как я уже сказал, составной PK не сделать в таблице movie_person
но нужен ли он там вообще?
я руководствуюсь лишь тем, чтобы не было дубликатов в таблице, чтобы это сделать, нужно определить PK в ней по нескольким столбцам. по всем трем нельзя. по 2 не получится тоже, потому что это не даст одному и тому же фильму с одним и тем же person создавать разные роли
https://www.freecodecamp.org/news/garbage-collection-in-java-what-is-gc-and-how-it-works-in-the-jvm/
И Шипилева можешь глянуть - он любит про кишочки жвм рассказывать
>>597847
>>не понятно какой составной PK делать
Просто сделай суррогатный ключ и ограничение уникальности по 3 полям, not_null для каждого не забудь
UNIQUE (movie_id, person_id, role_id)
>>3 колонку role_type (varchar или указывать id роли),
лучше ид, если роли могут добавляться/меняться
>>нужен ли он там вообще?
Теория реляционных баз данных говорит, что первичный ключ должен быть в каждой таблице. В Postgres такого жёсткого требования нет, но обычно лучше ему следовать.
Чел, делай всегда primary key как рандомный UUID и все твои проблемы решатся. А на столбцы, если надо будет как-то часто искать по ним, индексы просто повесишь и все. Вторая картинка выглядит лучше первой, потому что в профиле человека ты сможешь легко собрать все его роли.
Можно. Но я бы все же не стал бы тебя отговаривать от попыток пошевелить мозгами на литкоде.
ваадин годится исключительно для создания внутренних админок или прототипов. ui-кастомизация там, как и гвт - кромешный пиздец.
Ну как мы видим - уровень ненужности технологий примерно одинаковый.
>Examples of such Garbage Collection roots are:
>Local variables and parameters of the currently executing methods
Кек, на последнем собесе так и сказал, а мне в ответ "Неееет, гк работает только с хипом! Неверно!".
Без понятия. Спроси у шарпопетуха зачем он какой-то стремный web-ui костыль постоянно тащит, как достижение. Хотя им даже в его дотнете никто не пользуется - на 700 вакух на асп.нет блейзер есть в 40.
Да. Контекст это механизм, реализующий di паттерн. Контекст - это основной функционал спринга, с которого он и начинался 20 лет назад. И сейчас его функционал лежит в артефакте spring-core
буте и тесты
Не выглядит особенно полезным, все эти метрики должны и при обычном мониторинге собираться
1. у меня есть клиент, который хочет получить данные из бд
2. чтобы он это мог сделать, ему необходимо отправить куда-то запрос
3. предположим, этот запрос принял контроллер, осуществил запрос к бд и вернул ответ
таково мое понятие контроллера. т.е. это что-то, что получает запрос и дает ответ. но что в случае с микросервисами? у нас может быть много этих контроллеров, которые могут быть как-то связаны между собой. и тут уже может быть не просто запрос-ответ, а цепочка запрос-перенаправление-перенаправление-ответ... в таком случае, эти перенаправления, их выполняют те же контроллеры? или тут уже нужна какая-то новая прослойка, которая будет этим наниматься?
какие вообще есть простые архитектуры для того, чтобы можно было познакомиться с микросервисами и написать свой?
Principal architect в треде, не иначе
@Data удобнее. И вообщеу меня жук, иди нахуй со своими жава,ланг,рекордами нахуй.
Нахуй нужен жук, когда существует @Query?
Нахуй не нужен.
@Query - путь настоящих хардкорных sql мужыков.
не знаю чел, тут ты или нет. я только сейчас созрел, чтобы на более реалистичном примере написать микруху (1 пик представление 3 разных бд для ms1, ms2, ms3)
что имеем:
1. решил пока оставить прошлую архитектуру (пик 2), как я понял она называется Database Per Service
2. rest по фильмам (ms1) имеет зависимость от rest по статике (ms3)
3. rest по юзерам (ms2) имеет зависимость от ms1 и от ms3 (аватар юзера)
4. если гость (не пользователь) захочет посмотреть первые 10 фильмов, он делает запрос на ms1
- ms1 нужно сформировать запрос, чтобы получить все, что связано с фильмами, но для этого нужно так же обратиться к ms3 за постером, скриншотами и трейлерами
- заранее этот запрос на ms3 отправить нельзя, не зная какие фильмы вернет ms1
- остается ждать ответа от ms1 и делать запрос следом на ms3 (на этом этапе пользователь получает только название фильма, имена актеров, режиссеров с затычками вместо медиа данных)
- после чего выполняется запрос на ms3 для получения медиа-данных
- в итоге двойной запрос, долго, вся хуйня, но я для простоты оставлю наверное пока это так...
- но возникает еще вот что, трейлеры могут весить под сотку мб, их может быть несколько, в таком случае ждать их полной отправки - это еще больше потраченного времени
- от сюда выходит, что хранить большие сырые данные в бд не лучший вариант
- что можно в таком случае сделать? я добавил поле url, но не знаю как на практике это все правильно согласовать с микросервисами. этот url уже должен содержать путь к файлу, который должен храниться где-то? в каком-то облаке? это облако не должно относиться к моей микросервисной архитектуре? оно просто где-то там существует, как файлопомойка?
5. как вариант, добавить прослойку API (пик 3). этот паттерн называется API Composition. но что он улучшает? как по мне, он только усугубляет мою ситуацию с запросами. но может быть я его не правильно как-то пынемаю...
6. по поводу кафки и прочих MQ, разве это не есть ничто иное, как таже самая API прослойка, которая в зависимости от реализации, может так же быть хранилищем очередей запросов, за которыми сервисы будут в нее обращаться? опять же, что тогда в моей ситуации меняется?
7. вариант с дублированием таблиц из ms1 в ms2, или из ms3 в ms1 для меня кажется бессмысленным... в чем тогда суть микросервиса?
в общем, реквестирую советы, как можно несложно изменить архитектуру, при этом сохранив принцип микросервиса. моя задача: сделать пет проект, который я планирую в будущем показывать на собесах. поэтому делать один rest с одной db и одним web клиентом, как мне кажется, не раскрывает суть проекта. с другой стороны, нужно ли вообще это все работодателю? и может быть действительно достаточно ограничиться одной бд, одним рестом и одним клиентом? честно, я даже не знаю что вообще можно добавить в мою логику приложения и вынести это в отдельный сервис, с которым было бы проще работать...
все примеры в сети, которые пишут люди, построены именно так: один клиент (чаще даже вообще без него), один рест и 1 бд...
не знаю чел, тут ты или нет. я только сейчас созрел, чтобы на более реалистичном примере написать микруху (1 пик представление 3 разных бд для ms1, ms2, ms3)
что имеем:
1. решил пока оставить прошлую архитектуру (пик 2), как я понял она называется Database Per Service
2. rest по фильмам (ms1) имеет зависимость от rest по статике (ms3)
3. rest по юзерам (ms2) имеет зависимость от ms1 и от ms3 (аватар юзера)
4. если гость (не пользователь) захочет посмотреть первые 10 фильмов, он делает запрос на ms1
- ms1 нужно сформировать запрос, чтобы получить все, что связано с фильмами, но для этого нужно так же обратиться к ms3 за постером, скриншотами и трейлерами
- заранее этот запрос на ms3 отправить нельзя, не зная какие фильмы вернет ms1
- остается ждать ответа от ms1 и делать запрос следом на ms3 (на этом этапе пользователь получает только название фильма, имена актеров, режиссеров с затычками вместо медиа данных)
- после чего выполняется запрос на ms3 для получения медиа-данных
- в итоге двойной запрос, долго, вся хуйня, но я для простоты оставлю наверное пока это так...
- но возникает еще вот что, трейлеры могут весить под сотку мб, их может быть несколько, в таком случае ждать их полной отправки - это еще больше потраченного времени
- от сюда выходит, что хранить большие сырые данные в бд не лучший вариант
- что можно в таком случае сделать? я добавил поле url, но не знаю как на практике это все правильно согласовать с микросервисами. этот url уже должен содержать путь к файлу, который должен храниться где-то? в каком-то облаке? это облако не должно относиться к моей микросервисной архитектуре? оно просто где-то там существует, как файлопомойка?
5. как вариант, добавить прослойку API (пик 3). этот паттерн называется API Composition. но что он улучшает? как по мне, он только усугубляет мою ситуацию с запросами. но может быть я его не правильно как-то пынемаю...
6. по поводу кафки и прочих MQ, разве это не есть ничто иное, как таже самая API прослойка, которая в зависимости от реализации, может так же быть хранилищем очередей запросов, за которыми сервисы будут в нее обращаться? опять же, что тогда в моей ситуации меняется?
7. вариант с дублированием таблиц из ms1 в ms2, или из ms3 в ms1 для меня кажется бессмысленным... в чем тогда суть микросервиса?
в общем, реквестирую советы, как можно несложно изменить архитектуру, при этом сохранив принцип микросервиса. моя задача: сделать пет проект, который я планирую в будущем показывать на собесах. поэтому делать один rest с одной db и одним web клиентом, как мне кажется, не раскрывает суть проекта. с другой стороны, нужно ли вообще это все работодателю? и может быть действительно достаточно ограничиться одной бд, одним рестом и одним клиентом? честно, я даже не знаю что вообще можно добавить в мою логику приложения и вынести это в отдельный сервис, с которым было бы проще работать...
все примеры в сети, которые пишут люди, построены именно так: один клиент (чаще даже вообще без него), один рест и 1 бд...
оракл через консольку? Чо там в консольке можно делать?
> и ещё можно дебажить вебсферу.
в вебсфере нет стандартного способа дебага?
> оракл через консольку? Чо там в консольке можно делать?
Писать запросы, редактировать таблицы мышкой.
> в вебсфере нет стандартного способа дебага?
Есть какая-то древняя IDE от IBM, только ну её нахуй.
>Есть какая-то древняя IDE от IBM, только ну её нахуй.
пиздос. Я думал в конфиге открыл какой-нибудь порт и дебагируй на здоровье
ну типо я щас читаю, там можно в постгресе эксплеин нажать и тебе напишет, как запрос будет происходить подробно, типо это полезно для анализа, наверное. вроде этот план можно даже в каких-то субд менять, но как я понял в их число постгрес не входит
выглядит вроде как хуйня, щас мож за вечерок разберусь
алсо понял, что вообще пропустил тему с индексами в бд, надеюсь там тоже немного
Вкатуны 2021: итоги
я сейчас задумался: а надо ли вообще писать микросервис в качестве пет проекта, чтобы взяли джуном??? что-то я вообще не хочу с ними на своем этапе сталкиваться... а писать "микросервис", у которого 1 rest api лежит прослойкой между клиентом и базой данных, как-то стыдно...
Вот забыл разраб создать индекс на нужные столбцы, пишет запрос, понимает, что тот работает медленно, смотрит план запроса и видит "full scan" на каких-то атрибутах из where. Создаёт индексы на эти столбцы, в плане уже "index range scan", работает намного быстрее, заебись, не надо обходить всю таблицу целиком. Это только в хеллоуворлдах создание индексов тривиально, но не в легаси говне с тысячей таблиц, в некоторых из которых по 50 столбцов. Да и индексы не бесплатны.
Это нормальный подход или нужно на похуях всё в одну папку закинуть и чтобы одна фабрика разбиралась со всем?
>Минутка рекламы закончена. В этот момент вы должны понять, что Docker — это хорошо, а если не поняли — закрыть статью, отформатировать свой жесткий диск и пойти мести крыши.
имагинирую ебало этого агрессивного чсвшного прыщавого додика, писавшего в этот момент эту хуету
Ебать тебя порвало от безобидного рофла. Тебе больше нравятся душные сухие мануалы?
собеседовался 2 месяца назад на проект с соапами. вопросы?
хотя справедливости ради меня там про соап даже не спросили
А ты уверен что правильно понял смысл этой цитаты и правильно ее передал на собесе?
В цитате сказано, что локальные референсы являются источниками сборки мусора. Тот факт что они являются источниками, еще не означает то, что сборщик мусора их собирает
Рофл в том, что эта омежка агрессивная даже сама не поняла, как начала брызгать слюной. Даже, если не слюной, небольшой мондраж и постукивание зубами точно были. Почитай статью, там где он специально рофлит, сразу заметно по хуевому пикабушному чувству юмора. Если человек :) использует, это уже звоночек...
У меня были пару собесов до этого, везде спрашивали с чем работал, говорил с рестом всегда, когда молчал про соап говорили плоха.
А вообще ща такие клиенты, ты вот обмажся рестами, но когда тебе 10 страховых компаний кидают только wsdl и xsd чтобы ты соап запросы им делал, то хуй им чё скажешь
На "проекте с соапами" есть давно устоявшийся подход, где никто не задаётся вопросами о фабриках и нормальных подходах, потому что конфиги написали динозавры 15 лет назад, а остальные просто делают всё по аналогии до тех пор, пока изживший себя соап окончательно не выпилят из проекта.
>>598390
Вызывать готовые соап-сервисы легко, там не нужно знать, как писать их самому.
Что ты там разрисовывать собрался? Сервлеты - это тупо спецификация для реализации HTTP. Клиент пиши хоть на WinAPI, сервлетам похуй.
Апплеты депрекейтнуты сотню лет назад. Большой удачей будет если ты вообще хоть чето на них запустишь.
Можно через JFXPanel, который запускает JavaFX поверх свинга. Гугл говорит, что с апплетами будет работать.
На Википедии всё написано.
IoC - это подход большинства фреймворков, когда в начале развешиваешь коллбеки и другие компоненты и дальше вызываешь main loop, который начинает обрабатывать события и сам вызывает методы твоих компонентов.
DI - разновидность IoC, где компоненты указывают, какие ещё компоненты им нужны для работы, а фреймворк их ищет и передаёт компонентам так, чтобы компоненту не нужно было самому создавать и инициализировать другие компоненты и можно было сразу писать логику.
Чё за Алиешев? Ещё один инфоцыган?
Скорее всего он говорит что-то другое. Кидай референс где он такое ляпнул. Интерфейс не может ничего создавать.
увидел 3-й пик, обосрался. Подумал с моего компа скрин. Что скажете об этом курсе?
Очень поверхностно. Ддя вкатуна пойдет, для джуна+ уже недостаточно.
Возможно ли запаковать jar в apk для установки и запуска на android?
Можно запаковать в один жарник. Дальше, если нужен exe, ебаться в launch4j.
Ну типа, класс Б не должен быть зависим от класса А. Они оба должны быть зависимы от интерфейса. Во.
Всю жизнь билжу через идеевский терминал, мавенским меню не пользуюсь. В чем не прав?
Никогда этим неудобным говном не пользовался, всегда собирал через конфигурации.
Сижу на эклипсе и похуй на зумеров
Сижу на идее 2021, обновил бы, но я в РФ, а жиды - нет. В старой идее ждк 17+ запрещается запускать что ли?
Впервые слышу.
Вангую, что в корпоративном сервере лицензий.
вот только примеров почему-то нигде нет. зато 1001 статья создания "микросервиса" с одной апишкой и одной бд. даже если учесть, что распределенные транзакции это анти-паттерн, то подобного рода статьи все равно не раскрывают сути микросервисов. алсо, в реальности я уверен распределенные транзакции есть, без них почти невозможно, или это уже не микросервис, а распределенный монолит с shared базой данных.
Зачем ебаться с триалкой, если можно просто не обновляться?
Что там такого ценного завезли за пару лет?
Почитал. Звучит как типа "йоу, мы взяли и переизобрели two-phase-commit". Ну молодцы, супер, чо.
>про нее инфы нет почти, никто не обсуждает, статьями с ней не срут
Проблема не столько в туле, сколько в постановке задачи. Распределенные транзакции считались ебаниной душной еще во времена EEшных серверов приложений, и остаются ебаниной душной сегодня, в эпоху микросервисов. Если есть альтернативы или допустимые компромиссы, они лучше и предпочтительнее чем ввязываться во все это. Даже ебаный монолит лучше. В распределенные транзакции идут либо от безнадеги, когда другого выхода тупо больше нет, либо по наивности.
>и что делать, когда видишь пикрил?
Для начала - чекнуть что конкретно там за "уязвимость", потому что эти механизмы частенько фолс-позитивят. Ну а потом, ждать апдейтов. Или забить проконсультироваться с СБ своей шараги.
я чот не понял про эту сагу. Это типа надо делать ручку для "отката транзакции" в виде новой транзакции? Сохранил заказ, потом пришла команда отмены, и в новой транзакции удаляешь этот заказ. Так чтоли?
Новую картинку в прямоугольничек загрузки. И ещё новое уи.
>Это типа надо делать...
Типа да. Но это ничего не меняет, причем неважно - делаешь ты это тулом или руками. Такие вещи - не мейнстрим. Их делают от безнадеги в узком спектре задач, и они всегда приносят боль. Здесь нет ничего элегантного, что можно было бы подсветить в статьях и словить хайп. Здесь нет хороших практик, которые "каждый должен знать". Это - просто грязная жопа, следствие чужих проебов, технического дефолта. У распределенных транзакций не может быть фанатов.
ну так это суть хваленых микросервисов. Если нужна транзакционность то нужен монолит
Нужно просто резать на сервисы так, чтобы транзакции нужны были только для сущностей внутри сервиса.
Нет. Это ни в коем случае не суть, не цель и не фишка хваленых микросервисов. Это как раз темная сторона микросервисной архитектуры. Как все в этом проклятом мире айти - микросервисы что-то упрощают, усложняя что-то другое.
Суть микросервисов в том, что ты делишь свою единую монолитную модель на такие контексты, в которых тебе нет нужды обеспечивать сиюминутную консистентность (и как следствие, нет нужды в распределенных транзакциях между этими двумя кусками). Данные в этих двух разделенных моделях-контекстах могут некоторое время пребывать в рассинхроне, но при этом быть eventually consistent за счет более мягких механизмов синхронизации вроде event sourcing'а. Иногда бывает так, что мягких механизмов не хватает, тогда (и только тогда) приходится городить саги, а иногда даже саг не хватает, и тогда городят, прости господи, двухфазный коммит. Но саги и расщепление транзакций - нихера не самоцель деления на микросервисы.
клиент создает заказ, платит деньги и получает товар
Нужно ли делить на микросервисы "заказы", "платежи" и "склад"? Если да то как без транзакций?
Платежи с заказами в одном сервисе. На сервис склада инфа идет не транзакционно - сообщением из кафки после транзакции на изменение заказа и платежа.
хм. Т.е. делить на микросервисы надо так, чтобы транзакционность была только внутри сервиса?
Чел, вот ты то мне и нужен. Чекни тут >>2598704 (OP) 1ый и 2 пик, можешь не читать пасту. Как это можно разбить без зависимостей? Я уже третий день ебу себе голову и мне буквально хуево от этого всего. Я действительно уже готов писать монолит (хз вообще с чего я решил, что написать микросервис это престижней, чем монолит в качестве пета...). Или написать микросервис, но условиться так: если админ захочет добавить новый фильм в базу через клиент, ему это нужно будет сделать в несколько этапов, сначала добавить в movie, затем только после успешного добавления вручную так же добавлять постер, скриншоты и трейлер. С удалением из бд сложней, тут таблицы не связаны локально, каскадирования нет. Потому решение такое же тупое: сначала медиа всю удалить и только после успешного удаления браться удалять сам фильм. Но тут проблема в том, что у сервиса с юзерами есть тоже зависимость с фильмами. Тогда придется вторым этапом не фильм удалять, а все зависимости у юзеров, и третьим этапом сам фильм. Но в реальности такая ситуация возможна? Т.е. ты условно админ бд с фильмами, нахуя тебе ее делать меньше? (разве что пыпа запретил фильмнейм, поэтому нада удолить)
>клиент создает заказ, платит деньги и получает товар
Одна такая транзакция относительно просто бьется на несколько локальных, с синхронизацией через эвенты.
Мы берем и вводим у заказа статус. Прям как в Озоне, еба. Вокруг этого статуса строим стейт-машину, переходы между которой происходят локальными транзакциями в сервисе заказы в ответ на получение эвентами подтверждений (или опровержений) из других сервисов.
Первый статус - "заказ сформирован", происходит в тот момент когда клиент засабмитил заказ.
"Заказ сформирован - заказ оплачен" в тот момент, когда платеж был совершен (локальная транзакция прошла на сервисе платежи).
"Заказ оплачен - заказ собран" в тот момент, когда на сервисе склада прошла транзакция резервирования товара.
"Заказ собран - заказ отправлен" в тот момент, когда сервис логистики отрапортовал об отправлении.
И так далее. Если какая то из вышеозвученных локальных транзакций не прошла, заказ переходит в состояние "Заказ отменен (не прошел платеж)" либо "заказ отменен (кончился товар)".
Детали могут отличаться в зависимости от конкретных требований, но суть одна.
Чел, я тебе ответил банальную вещь из первого абзаца любой статьи про микросервисам.
А читать конкретные таблицы и схему конкретных сервисов и переразбивать их это уже работа. А у меня выходной и я на самом деле таким никогда не занимался.
Мне анон в прошлом треде отвечал, но я тогда не был еще готов анализировать это все. Да и бд не было как таковой. Он мне про кафку тогда говорил и эвент сурсинги, но для меня это сложно пездец еще... Блин, тот анон тоже толковый был, но он потерялся походу...
То есть на примере эти эвенты несколько сервисов и пишут и читают в один и тот же топик? В эвенте статус заказа айди заказа, сумма платежа, айди товара на складе. В складе и в платежах при формировании заказа формируется запись в таблице заказов, где есть айдишник и нужная сервису-консьюмеру информация. И когда они видят статус, который они не только сохраняют, но и обрабатывают, то они делают обработку и кидают сообщение с измененным статусом в тот же топик.
Примерно так?
Мне лень читать твои простыни, но, похоже, тебе нужен микросервис-оркестратор, который будет вместо твоего web client. Там сосредоточена логика работы с многоэтапными процессами, по порядку отправляются запросы в нужные микросервисы, ответы складываются в единый результат и отправляются пользователю. При оркестрации микросервисы обычно не взаимодействуют друг с другом напрямую, всё идёт через оркестратор. Остаётся решить, как сделать так, чтобы оркестратор не превратился в очередной монолит.
мимо
В этом и суть, хочется без этих распределенных транзакций и их разновидностей. Без саг, оркестров, и хореографов. Я пытался найти хоть какие-то примеры кода в купе со спрингом, как это правильно и лучше сделать. Но ничего не нашел абсолютно. Пытался понять чем тут может помочь кафка, но не осилил. Базовую идею вроде понял, но потом начинается какой-то пиздец, суть теряется, и уже даже не уверен способно мне это как-то помочь в моем случае или нет. Если решений в принципе простых нет для такого рода дел, то я походу скорее всего плюну и напишу монолит, либо сделаю менеджмент фильмами, как писал выше - в несколько этапов. Я еще думал, может просто бд хуево как-то разбил, но иначе там никак, без зависмостей не обойтись все равно.
Топология эвентов - отдельная большая тема.
1. Общий топик на все сервисы - геморрой. Как вариант, если взять брокер rabbitmq, можно сделать по очереди для каждого отдельного сервиса, откуда он будет читать свои "входящие", по exchange для каждого сервиса (или даже каждого типа сообщения), который шлется этим сервисом, куда сервис будет писать свои "исходящие", и биндить конкретный exchange на конкретные очереди, тем самым определяя маршрут по которому сообщение пойдет.
2. В сообщении - только та инфа, которая нужна получателю (получателям). Если "заказам" от "склада" нужно только подтверждение резервации, в сообщении от "склада" будут айдишник заказа и тип "резервация прошла успешно/резервация отклонена".
Ну я просто с раббитом не работал, только с кафкой.
Там вроде вместо очереди на каждого консумера принято делать один жирный топик на весь эвент, с лишними сообщениями, просто каждый тип эвентов идет в отдельную партицию, а потом консумер читает только нужную партицию.
Сука, когда нибудь я дочитаю кабанчика и перейду к книжке по микросервисам, по эвент-дривен девеломпенту и кишкам постгри.
Опиши словами, какие у тебя пользовательские сценарии. Не картинками со схемой БД как в ОП-посте, без технических и микросервисных терминов. Словами кабана-заказчика, который в душе не ебет за микросервисы и за джаву.
И тогда можно будет рассуждать.
Мимо эвент-сорсинг-чел с прошлого треда, никуда не терялся.
>Там вроде вместо очереди на каждого консумера принято делать один жирный топик на весь эвент, с лишними сообщениями, просто каждый тип эвентов идет в отдельную партицию, а потом консумер читает только нужную партицию.
Ну ок, вроде звучит норм, попробуй так.
Никак ты это без саг не сделаешь. Все используют саги. Потому и примеров нет, что без них никак.
Монолит писать все умеют, там же ничего сложного. Продолжай ебаться с микросервисами, изучишь много того, что пригодится потом.
И нет никаких "сегодняшних реалий", монолиты никуда не денутся, их так и будут писать, потому что микросервисы нужны далеко не всем. Нет такого, что "монолиты только в легаси", сейчас пишут и будут писать новые монолиты.
В первый вообще какую-нибудь дрисню. Конфиги поправить например в 10 сервисах. Тесты написать к уже готовой апишке.
Могут вообще тестовую задачу дать.
Ну а потом через пару неделек поле добавить в сущность. Миграциями в бд, потом в модельку, в репошку, если запрос не генерится, в дтошки.
Добавить фильтры или сортировку в готовый эндпоит.
Потом через месяца два добить новый эндпоит.
Это мы так в маленькой команде на 7 джавистов на новом проекте к джунам относимся. В больших командах, да еще и с большим легаси или с бюрократией, как в банках наверно все немного иначе.
Сценарий такой:
1. Возможность найти любой фильм, посмотреть его описание, обложку, скрины из фильма, трейлер, если есть, т.е. обычный функционал подобных сервисов
2. Возможность регистрации пользователя
3. Редактирование профиля пользователя (имя, почта, аватар...)
4. Пользователь может добавить фильм в "любимые"
5. Пользователь может написать обзор на фильм
6. Пользователь может оценить фильм и обзор
7. Админ может добавлять/удалять фильмы через свою админ панель, а так же медиа данные к нему (трейлер, постер, скрины)
Я это все разделял логически на 3 базы данных:
1 - фильмы (жанр, заголовок, актеры, рейтинг...)
2 - пользователи (логин, пасс, емеил, фэворит листы фильмов, их оценки фильмам, их обзоры на фильмы...)
3 - статика с медиа данными (скрины, трейлеры, аватары, постеры)
Даже не представляю, как можно будучи русскоговорящим это по-другому понять.
А зачем тестовую давать, если тебя уже приняли? Или ора сложней будет? Что бывает, если ты за весь день никакого результата не добился? Например
>Конфиги поправить например в 10 сервисах.
Вот как ты это себе представляешь? Я пришел, о проекте не знаюнихуя. Что я им там могу даже в теории поправить? Порт что ли? Гыгыгы
Я им скорее вообще весь конфиг наебну и они не смогут собрать проект
В первый день? Ничего, я всю неделю ждал, когда исполнят все заявки, принесут пекарню, выдадут все права и доступы, установятся все программы (которые тоже через заявки, самому ставить нельзя), потом три дня ебался с развёртыванием проекта, который поднять - целая наука.
Потом тимлид научил меня дебажить, я этим не пользовался в пет-проектах и всё отлаживал через System.out.println.
А дальше всё как у этого анона >>599410 , исправление опечаток в текстах ошибок, написание тестов, добавление новых полей в отчёты. Где-то через месяц начали давать более крупные задачи, типа реализовать CRUD-справочник.
Но это у нас большая команда из 50 разрабов, большое легаси и бюрократия, потому что банк лол
> Я пришел, о проекте не знаюнихуя. Что я им там могу даже в теории поправить? Порт что ли?
Так тебе в джире задачу распишут очень подробно, какие строки смотреть, на что заменять. Твой код будут ревьюить, т.к. в основную ветку без аппрува ты не можешь подмержить.
Если они сами знают что, где и как поменять, нахуя мне это давать? Чел, который писал этот туториал, мог уже сам все это исправить. Или это западло? Лол. Ну или это специально так мои навыки проверяют? Но о каких правда навыках в такой ситуации может быть речь я хз... По бумажке любая кухарка может буковки подправить.
Тестовый сервис, чтобы новичок ознакомился с стеком и подходами, кодстайлом, гитфлоу и тп. Даю ему сервис с прода для примера, даю упрощенную задачку для сервиса. Задание на неделю. Раз в день-два подхожу, спрашиваю промежуточные результаты.
>Я пришел, о проекте не знаюнихуя. Что я им там могу даже в теории поправить?
ну примерно. надо во всех сервисах что-то скопипастить. Ну и даешь ему сервис откуда копипастить и сслыку репошки сервисов. Он читает коммит откуда копипастит, и делает 10 копипаст, 10 коммитов и 10 мров.
Давал недавно джуну баг найти поправить. Он не смог сходу разобраться. Пришлось за него разобраться и код ему под диктовку надиктовать.
Ну да, у джунов все таски так проходят. Все понимают, что джуны сами не разберутся и правильно не сделают. Джуна надо обучать, чтобы он начинал приносить пользу проекту, иначе смысл его брать.
Блядь, вы там че совсем ебнутые? На собесе словно в наса ракеты строить ищите кандида. А после рефера код диктуете какой писать.
Чтобы тебя обучить. Общеизвестно, что джуны в самом начале убыточны и приносят мало пользы, потому надо обучать. Дальше так подробно расписывать не будут, потому что ты уже это умеешь. Сеньоры, конечно, всё знают и всё могут сами сделать, но на все задачи у них тупо не хватит времени.
> Никак ты это без саг не сделаешь. Все используют саги. Потому и примеров нет, что без них никак.
Не понял логики. Если это делают все, то почему до сих пор ни одного реального кода в качестве примера? Почему 100500 однотипных говно примеров говно микросервисов с одной бдшкой, где даже намека нет на общение между микросервисами?
Ну так я диктовал, потому что он не понял что делать за 2 дня. Не выгонять же его сразу. Если к концу испытательного не перестанет так сильно тупить, тогда и выгоним.
Ну и я хотел все за него просто написать, сэкономил бы час из трех потраченных на него, но после написания под диктовку он хоть что-то понял.
Ну и собесил его тимлид, а онбордингом занимаюсь я, вчерашний джун.
Ок. К разбиению претензий нет, к сценариям тоже.
А теперь перейдем к дилеммам.
>>599314
>Как это можно разбить без зависимостей?
Я тебе еще в том треде сказал. И в этом повторю. С чего ты взял, что зависимости между сервисами недопустимы вообще ни в каком виде? Зависимости - это нормально. Просто природа этих зависимостей между сервисами другая.
> таблицы не связаны локально, каскадирования нет
Да, все так. Да, это доставляет ряд неудобств и имеет ряд недостатков. Но в то же время имеет и ряд достоинств. Так как у тебя нет между моделями общих констрентов, эти модели могут располагаться в разных СУБД на разных хостах - СУБД перестает быть боттлнеком. Ради этих достоинств и делят на микросервисы. Ты этих бенефитов не прочувствуешь на своем пете, потому что ты - не "кинопоиск", и у тебя еще не скоро настанет момент когда ты в СУБД упрешься, но это не значит что идея априори бессмысленна.
>если админ захочет добавить новый фильм в базу через клиент, ему это нужно будет сделать в несколько этапов, сначала добавить в movie, затем только после успешного добавления вручную так же добавлять постер, скриншоты и трейлер
Ну да. Так а в чем сомнения? Или ты как себе в монолите это видел - админ одним запросом всю это пачку добавляет? А если один из файлов не загрузится - всю транзакцию дропнешь? Представляешь ебало админа в такой момент - ему заново надо будет анкету заливать? Админу тупо самому будет удобнее наполнять контент поэтапно.
>С удалением из бд сложней
А давай представим что админ удалил фильм, но контент по этому фильму из сервиса "ассеты" еще не удалился. Ответь себе на вопрос - насколько это - проблема? Ну открывает юзер страничку с фильмом. Получает 404, потому что на сервисе "фильмы" такого фильма не знают. Все. Какая разница что контент фильма сиюминутно не дропнулся? Ну дропнется попозже, когда от сервиса "фильмы" до сервиса "ассетов" дойдет уведомление что фильм дропнулся. Юзер этого даже не заметит.
>Но тут проблема в том, что у сервиса с юзерами есть тоже зависимость с фильмами
Ок, погнали думать. Вот у юзер заходит на страничку своих фаворитов. Скорее всего эта страничка будет делать следующее:
1. С сервиса "пользователи" загрузит айдишники фильмов-фаворитов
2. Затем, используя сервис "ассетов", страничка будет в фоне подгружать постеры и трейлеры, а с сервиса "фильмы" - тайтл и актерский состав.
Предположим один из таких фоновых запросов сказал - "все, фильма нет". Ну и хуй с ним. Опять же вопрос - такая ли уж большая проблема что айдишник одного из фаворитов пользователя больше не резолвится? Берешь и рисуешь заглушку, что "этого фильма нет", оставляя на этой заглушке кнопку "удалить из фаворитов". Или вообще не показываешь несуществующий фильмв списке, а в бэке подписываешься сервисом "пользователи" на события удаления фильмов из сервиса "фильмы".
Ок. К разбиению претензий нет, к сценариям тоже.
А теперь перейдем к дилеммам.
>>599314
>Как это можно разбить без зависимостей?
Я тебе еще в том треде сказал. И в этом повторю. С чего ты взял, что зависимости между сервисами недопустимы вообще ни в каком виде? Зависимости - это нормально. Просто природа этих зависимостей между сервисами другая.
> таблицы не связаны локально, каскадирования нет
Да, все так. Да, это доставляет ряд неудобств и имеет ряд недостатков. Но в то же время имеет и ряд достоинств. Так как у тебя нет между моделями общих констрентов, эти модели могут располагаться в разных СУБД на разных хостах - СУБД перестает быть боттлнеком. Ради этих достоинств и делят на микросервисы. Ты этих бенефитов не прочувствуешь на своем пете, потому что ты - не "кинопоиск", и у тебя еще не скоро настанет момент когда ты в СУБД упрешься, но это не значит что идея априори бессмысленна.
>если админ захочет добавить новый фильм в базу через клиент, ему это нужно будет сделать в несколько этапов, сначала добавить в movie, затем только после успешного добавления вручную так же добавлять постер, скриншоты и трейлер
Ну да. Так а в чем сомнения? Или ты как себе в монолите это видел - админ одним запросом всю это пачку добавляет? А если один из файлов не загрузится - всю транзакцию дропнешь? Представляешь ебало админа в такой момент - ему заново надо будет анкету заливать? Админу тупо самому будет удобнее наполнять контент поэтапно.
>С удалением из бд сложней
А давай представим что админ удалил фильм, но контент по этому фильму из сервиса "ассеты" еще не удалился. Ответь себе на вопрос - насколько это - проблема? Ну открывает юзер страничку с фильмом. Получает 404, потому что на сервисе "фильмы" такого фильма не знают. Все. Какая разница что контент фильма сиюминутно не дропнулся? Ну дропнется попозже, когда от сервиса "фильмы" до сервиса "ассетов" дойдет уведомление что фильм дропнулся. Юзер этого даже не заметит.
>Но тут проблема в том, что у сервиса с юзерами есть тоже зависимость с фильмами
Ок, погнали думать. Вот у юзер заходит на страничку своих фаворитов. Скорее всего эта страничка будет делать следующее:
1. С сервиса "пользователи" загрузит айдишники фильмов-фаворитов
2. Затем, используя сервис "ассетов", страничка будет в фоне подгружать постеры и трейлеры, а с сервиса "фильмы" - тайтл и актерский состав.
Предположим один из таких фоновых запросов сказал - "все, фильма нет". Ну и хуй с ним. Опять же вопрос - такая ли уж большая проблема что айдишник одного из фаворитов пользователя больше не резолвится? Берешь и рисуешь заглушку, что "этого фильма нет", оставляя на этой заглушке кнопку "удалить из фаворитов". Или вообще не показываешь несуществующий фильмв списке, а в бэке подписываешься сервисом "пользователи" на события удаления фильмов из сервиса "фильмы".
Все так делают в проде. Примеры для новичков пишутся авторами, которые сами недалеко ушли, но очень сильно хотят писать статьи. А опытным разрабам, которые могут дать больше конкретики, не до вкатунских пет-проектов, они на работе все заняты.
Вообще, давно заметил, что нормальных примеров мало по чему угодно, разве что по вебговну с реактами ищется всё.
Почему я примеры, как писать изъебистые запросы на малопопулярной nosql субд могу найти, какую нибудь хуйню по эврике или настройке метрик и трейсов могу найти, а саги эти есть только в теоретических книжках?
Забей, чел тебя троллит. Говорить "все лабают саги в микросервисах", это как сказать "все юзают паттерны в джаве". Ничего не сказать.
Там архитектура, а тут конкретные технологии. По технологиям есть единая документация, где и так всё это описано, а в архитектуре никакой общепринятой документации с описанием единого подхода нет и быть не может. Остаётся задаваться теоретико-философскими изысканиями.
>>599448
Я потому и говорю, что сказать тут действительно ничего нельзя. Анон задаётся вопросом уровня "как писать на джаве так, чтобы не юзать паттерны". Очевидно же, что никак.
>Или ты как себе в монолите это видел - админ одним запросом всю это пачку добавляет?
Ну, вообще, да. Даже, если не одним, т.е. есть возможность потом добавить картинки и видео, все равно должна быть возможность добавить это все сразу. Но если под капотом это будет N отдельных запросов в разные сервисы, то снова все упирается в распределенные транзакции. Потому что без транзакции у тебя 1 запрос успешно выполниться, а другой нет (или вообще потеряется где-то из-за сбоев в сети), но ответ придет от первого ОК. Ты будешь думать, что все действительно ок, а на деле даже не будешь знать о том, что нихуя не ок, пока сам не решишь проверить.
>Представляешь ебало админа в такой момент - ему заново надо будет анкету заливать?
Тут больше от клиента зависит, можно же не удалять последние заполненные поля формы.
> А давай представим что админ удалил фильм, но контент по этому фильму из сервиса "ассеты" еще не удалился. Ответь себе на вопрос - насколько это - проблема?
Настолько, что в бд плавает мусор, который никак не связан с фильмом. И никто не вспомнит даже о нем и не найдет, только если случайно, а он тем временем будет нагружать бд. Если таких "зомби" в бд будет много, то в этом явно ничего хорошего не будет.
> Ну дропнется попозже, когда от сервиса "фильмы" до сервиса "ассетов" дойдет уведомление что фильм дропнулся. Юзер этого даже не заметит.
Какое уведомление? Мы ведь рассматриваем ситуацию, когда нет никаких mq или кафок, нет никаких саг? Тут и проблема основная кроется, что нужно как-то следить за всем этим мусором... Примера реализации даже самой простой саги я не смог найти.
> Или вообще не показываешь несуществующий фильмв списке
Это, если удаление фильма админом дошло до завершающей стадии, которая удалила и ассеты и сам фильм. А если удалились только ассеты? Там просто будет непрогруженный фильм, что будет выглядеть криво. Допустим, админ снова подумал, что удалил фильм успешно, а на самом деле это не так. И он таким же мусором, только без ассетов, плавает в бд. Мы ведь говорим все еще о ситуации без mq, кафки?
>, а в бэке подписываешься сервисом "пользователи" на события удаления фильмов из сервиса "фильмы".
Опять же, не совсем могу представить это событие. Как вообще из пользователей можно удалить фильм? Т.е. обычный пользователь чекал свой список, увидел что какой-то фильм - больше не фильм, удалил его из своего списка и тем самым сгенерировал запрос на удаление остатков из бд с фильмами?
>Или ты как себе в монолите это видел - админ одним запросом всю это пачку добавляет?
Ну, вообще, да. Даже, если не одним, т.е. есть возможность потом добавить картинки и видео, все равно должна быть возможность добавить это все сразу. Но если под капотом это будет N отдельных запросов в разные сервисы, то снова все упирается в распределенные транзакции. Потому что без транзакции у тебя 1 запрос успешно выполниться, а другой нет (или вообще потеряется где-то из-за сбоев в сети), но ответ придет от первого ОК. Ты будешь думать, что все действительно ок, а на деле даже не будешь знать о том, что нихуя не ок, пока сам не решишь проверить.
>Представляешь ебало админа в такой момент - ему заново надо будет анкету заливать?
Тут больше от клиента зависит, можно же не удалять последние заполненные поля формы.
> А давай представим что админ удалил фильм, но контент по этому фильму из сервиса "ассеты" еще не удалился. Ответь себе на вопрос - насколько это - проблема?
Настолько, что в бд плавает мусор, который никак не связан с фильмом. И никто не вспомнит даже о нем и не найдет, только если случайно, а он тем временем будет нагружать бд. Если таких "зомби" в бд будет много, то в этом явно ничего хорошего не будет.
> Ну дропнется попозже, когда от сервиса "фильмы" до сервиса "ассетов" дойдет уведомление что фильм дропнулся. Юзер этого даже не заметит.
Какое уведомление? Мы ведь рассматриваем ситуацию, когда нет никаких mq или кафок, нет никаких саг? Тут и проблема основная кроется, что нужно как-то следить за всем этим мусором... Примера реализации даже самой простой саги я не смог найти.
> Или вообще не показываешь несуществующий фильмв списке
Это, если удаление фильма админом дошло до завершающей стадии, которая удалила и ассеты и сам фильм. А если удалились только ассеты? Там просто будет непрогруженный фильм, что будет выглядеть криво. Допустим, админ снова подумал, что удалил фильм успешно, а на самом деле это не так. И он таким же мусором, только без ассетов, плавает в бд. Мы ведь говорим все еще о ситуации без mq, кафки?
>, а в бэке подписываешься сервисом "пользователи" на события удаления фильмов из сервиса "фильмы".
Опять же, не совсем могу представить это событие. Как вообще из пользователей можно удалить фильм? Т.е. обычный пользователь чекал свой список, увидел что какой-то фильм - больше не фильм, удалил его из своего списка и тем самым сгенерировал запрос на удаление остатков из бд с фильмами?
> Я потому и говорю, что сказать тут действительно ничего нельзя. Анон задаётся вопросом уровня "как писать на джаве так, чтобы не юзать паттерны". Очевидно же, что никак.
Вот только примеры паттернов есть и их много разных. А примеров этого говна даже в самом простом виде нет нигде. Если я раньше любил писать говнокод и изобретать велосипед, то сейчас я этого не просто не люблю, но и боюсь. Боюсь утонуть в собственном говне, потерять тонны времени на решение проблемы в проблеме в проблеме в проблеме, в итоге придти на двач (единственное место, где мне могут помочь), но вместо помощи меня только еще сверху калом закидают и потроллят. Я вообще никого не обвиняю из анонов итт, если что. Исключительно констатирую факт, что писать велосипеды, особенно, механизм которых достаточно сложен и запутан - боюсь.
Даже с паттернами не всё так просто. Часть паттернов легко понять и объяснить с примером в 30 строчек. А есть паттерны, которые вызывают скрытые проблемы, и о них надо знать, далеко не в каждой статье про паттерны они вообще упоминаются, не говоря уж о подробном их рассмотрении. Есть и Егор Бугаенко с элегантными объектами и своим собственным видением паттернов. Наконец, есть такие штуки, как MVC и REST, их в каком-то смысле тоже можно отнести к паттернам. MVC далеко не все понимают и пишут SQL-запросы в контроллерах, ещё многие задаются вопросом, как соответствующие классы правильно располагать в проекте, и там нет универсального ответа, кто-то вспоминает про DDD. И REST, который вызывает ещё больше вопросов, никто не знает, как его правильно готовить, в бугурт-треде уже третий год не устают про это сраться.
А микросервисы не изучить так же просто, как обычные технологии, где загуглил готовый пример и всё понял. Надо погружаться, понимать, что делаешь и зачем, много думать, над какими-то вопросами думать неделями, много раз психануть, всё удалить и начать писать заново, читать книги, очень много экспериментировать. Примеры, впрочем, найти можно на каком-нибудь гитхабе, но и там большинство проектов будет единственным микросервисом с одной БД.
>все равно должна быть возможность добавить это все сразу.
Ты щас пытаешься со мной спорить на предмет требований, что бессмысленно. Из нас двоих требования сейчас определяешь ты, и если ты сказал что должна быть одна транзакция, я тебе отвечу что хуй с тобой, тогда делай монолит. Но это не имеет никакой корреляции с реальностью: в реальности требования определяет клиент, и ему будет по большей части похуй на такие нюансы. Ты привык что в мире монолитов и реляционок целостность данных - ультимативная ценность. Но для клиента это - не совсем так. Клиенту важно, чтобы твой кинопоиск обслуживал миллионы запросов в секунду, и тут уж хошь не хошь, а на компромиссы идти придется.
>Настолько, что в бд плавает мусор, который никак не связан с фильмом. И никто не вспомнит даже о нем и не найдет, только если случайно, а он тем временем будет нагружать бд. Если таких "зомби" в бд будет много, то в этом явно ничего хорошего не будет.
ПО-ХУЙ! Во первых - ты еще доживи до того момента, когда это станет проблемой. Во вторых - проблема мусора решаема. Проведи аналогию с джавой: в джаве же тоже есть мусор. И ничего, никому он не мешает. Где есть мусоро, есть и мусор-коллектор.
>Мы ведь рассматриваем ситуацию, когда нет никаких mq или кафок
Ну возьми да заведи крон таску по поиску и чистке мусора в ассетах на основе того, какие фильмы есть в "фильмах". Или заведи табличку РКНнутых фильмов для того, чтобы в этой таске отслеживать какие фильмы были РКНнуты. Да, это будет долгая операция - ну повесь ее в три ночи, когда все твои юзеры спят. Или разбей ее на куски, типа, еженочно мы чистим ассеты только в течение часа - сколько за час успели почистить, столько и почистится. Eventually мусор соберется.
Ну и стоит отметить, что отсутствие кафок и mq - всего лишь наша с тобой условность. В реальном проекте этой условности тупо не будет, вот и все. Обмен сообщениями между сервисами - обычное дело.
>А если удалились только ассеты?
А ты скажи что "фильмы" - единственный source of truth. РКНнутым фильм считается только если он дропнут из "фильмов", а ассеты - независимая сущность с независимым лайфциклом, который админ вправе менеджить отдельно.
Короче - резюмируя вышесказанное: пока ты мыслишь единой моделью данных со строгими констрейнами, ты не найдешь для себя ответов. Так и будешь мучиться и страдать, пытаясь развязать неразвязываемое, мечась между привычным тебе монолитом и микросервисами, которые ты пытаешься для себя постигнуть.
Посмотри на реальные сервисы. Посмотри на ютуб. Видео из ютуба может быть давным давно грохнуто админами, но при этом найтись через поиск, или быть частью какого нибудь плейлиста (где будет торчать вместо него плашка что оно удалено администраторами). Посмотри на гугл. Он спокойно может отдавать тебе ссылки из своих индексов на интернет ресурсы, которые больше не существуют. Steam, который на фоне РФ-санкций может показывать тебе игру в поиске, плашку игры в магазине, фаворитах и прочих местах, но при переходе на страничку этой игры сказать, что ее не существует в регионе.
Консистентность в реальных проектах - не аксиома, а такой же трейдофф как и все остальное.
>все равно должна быть возможность добавить это все сразу.
Ты щас пытаешься со мной спорить на предмет требований, что бессмысленно. Из нас двоих требования сейчас определяешь ты, и если ты сказал что должна быть одна транзакция, я тебе отвечу что хуй с тобой, тогда делай монолит. Но это не имеет никакой корреляции с реальностью: в реальности требования определяет клиент, и ему будет по большей части похуй на такие нюансы. Ты привык что в мире монолитов и реляционок целостность данных - ультимативная ценность. Но для клиента это - не совсем так. Клиенту важно, чтобы твой кинопоиск обслуживал миллионы запросов в секунду, и тут уж хошь не хошь, а на компромиссы идти придется.
>Настолько, что в бд плавает мусор, который никак не связан с фильмом. И никто не вспомнит даже о нем и не найдет, только если случайно, а он тем временем будет нагружать бд. Если таких "зомби" в бд будет много, то в этом явно ничего хорошего не будет.
ПО-ХУЙ! Во первых - ты еще доживи до того момента, когда это станет проблемой. Во вторых - проблема мусора решаема. Проведи аналогию с джавой: в джаве же тоже есть мусор. И ничего, никому он не мешает. Где есть мусоро, есть и мусор-коллектор.
>Мы ведь рассматриваем ситуацию, когда нет никаких mq или кафок
Ну возьми да заведи крон таску по поиску и чистке мусора в ассетах на основе того, какие фильмы есть в "фильмах". Или заведи табличку РКНнутых фильмов для того, чтобы в этой таске отслеживать какие фильмы были РКНнуты. Да, это будет долгая операция - ну повесь ее в три ночи, когда все твои юзеры спят. Или разбей ее на куски, типа, еженочно мы чистим ассеты только в течение часа - сколько за час успели почистить, столько и почистится. Eventually мусор соберется.
Ну и стоит отметить, что отсутствие кафок и mq - всего лишь наша с тобой условность. В реальном проекте этой условности тупо не будет, вот и все. Обмен сообщениями между сервисами - обычное дело.
>А если удалились только ассеты?
А ты скажи что "фильмы" - единственный source of truth. РКНнутым фильм считается только если он дропнут из "фильмов", а ассеты - независимая сущность с независимым лайфциклом, который админ вправе менеджить отдельно.
Короче - резюмируя вышесказанное: пока ты мыслишь единой моделью данных со строгими констрейнами, ты не найдешь для себя ответов. Так и будешь мучиться и страдать, пытаясь развязать неразвязываемое, мечась между привычным тебе монолитом и микросервисами, которые ты пытаешься для себя постигнуть.
Посмотри на реальные сервисы. Посмотри на ютуб. Видео из ютуба может быть давным давно грохнуто админами, но при этом найтись через поиск, или быть частью какого нибудь плейлиста (где будет торчать вместо него плашка что оно удалено администраторами). Посмотри на гугл. Он спокойно может отдавать тебе ссылки из своих индексов на интернет ресурсы, которые больше не существуют. Steam, который на фоне РФ-санкций может показывать тебе игру в поиске, плашку игры в магазине, фаворитах и прочих местах, но при переходе на страничку этой игры сказать, что ее не существует в регионе.
Консистентность в реальных проектах - не аксиома, а такой же трейдофф как и все остальное.
>>599462
Проблема паттернов в том, что они описывают решение в отрыве от контекста. Людям непосвященным в контекст проблемы, паттерны создают иллюзию панацеи - типа "делай как пишут умные дядьки, и вкатишься твой проект будет работать так же хорошо как у них". Это пиздецки паршивый ит заразный эффект, из-за которого вся айтишка сегодня состоит из фанбоев и их каргокультов по интересам.
Никакая статья не раскроет вкатуну адекватно контекст проблемы, стоящий за тем или иным паттерном, ИМХО это тупо невозможно. Суть паттерна постигается когда человек сталкивается сам с проблемой и решает ее, но когда он ее решает, роль паттерна в его познании уже и не такая ключевая. Нахуй ему паттерн, если он и так разобрался. Ну разве что для того чтобы находить общий язык с себе подобными.
Но тогда нахуй паттернами грузят вкатунов, если у них все равно нет ни единого шанса их постичь? Я не знаю. Наверное это очередной жалкий потуг индустрии сделать разработку дешевле.
У меня опыта коммерческого вообще нет. Я и на джаве-то еще толком ничего не писал, только теорию всякую нонстоп занюхиваю уже месяц. Поэтому я представляю, что в реальном проекте все гораздо строже. Ты говоришь, что тот же мусор в бд - не проблема. А я все равно не понимаю: почему? Ведь на хранилища выделяют деньги, если у тебя даже 10% забито мусором, разве это не значит, что освободив это место от него, бизнесу не придется покупать новое хранилище что сохранит +0,05% прибыли? Я сомневаюсь, что кабан не удавится за эти проценты.
Тогда по хорошему, надо действительно какой-то сервис, который будет следить за порядком в бд... Но это все равно какое-то кривоватое решение что ли... Хз даже, честно. Я если что с тобой не спорю, просто пытаюсь понять почему все то, о чем ты говоришь - норма в продакшене. Мне вообще даже кажется, если бы у меня спрашивали на собесе "почему ты решил оставлять этот мусор в бд в своем пет проекте?", а я отвечаю "гуглу можно, а мне что нельзя что ли?", меня скорее всего бы уже захотели слить побыстрей.
Ну мне к вышесказанному больше добавить нечего. Насколько я тебя понял, у тебя скорее остался страх перед интервьюерами быть неспособным пояснить за свое решение, нежели вопросы к самим микросервисам. Тогда просто не свети пет в резюме. Джунов по архитектуре обычно не пытают.
Ну и добавлю еще
>Ты говоришь, что тот же мусор в бд - не проблема. А я все равно не понимаю: почему? Ведь на хранилища выделяют деньги, если у тебя даже 10% забито мусором, разве это не значит, что освободив это место от него, бизнесу не придется покупать новое хранилище что сохранит +0,05% прибыли? Я сомневаюсь, что кабан не удавится за эти проценты.
Ты судишь об этом так, потому что ты с ними еще не имел реальных дел. Но в реале - ты удивишься насколько не все так просто.
Да не, проблема точно не в страхе перед интервьювером. Если я к какому-то выводу или решению пришел, то в 99% я смогу пояснить, почему я так сделал. Мне даже будет не зазорно признаться, если я просто не знал, как можно иначе решить проблему. Проблема больше в том, что я думаю, что там в продакшне все стремятся к идеальным решениям, дрочат девопсов (иначе нахуя им столько платят?), чтобы все работало максимально хорошо, не допускают ни малейшего проеба, а по факту это далеко не всегда так. Я привык постоянно сомневаться в себе и ровняться на те же статьи в инете, воспринимая их как эталон, потому что сравнить не с чем, нет работы в реальных проектах. Всегда кажется правильным - поверить какому-то бородатому дядьке с умным видом. А читая доку спринга, постоянно думать: ну там же не дураки сидят, а знающие люди, поэтому хуйни не напишут. Я думаю такое со временем проходит, когда этот опыт появляется.
С микросервисами сейчас так же. Кажется, что я не раскрываю их суть, если не использую распределенные транзакции или евент сорсинги. Моя цель по большому счету: просто показать завершенный пет проект, который не монолит, а микросервис (просто потому что это модно, епта). Но углубляясь в эту всю тему, я только понимаю, что проектировать приложение, а особенно эти микросервисы - это нихуя не просто. Поэтому, на этом сделаю акцент и решу для себя, что микросервис в любом виде в качестве пета - всегда хорошо. Спасибо, анон, за то что дал какое-то свое виденье. Появилось больше уверенности, что я не делаю хуйню.
Если ты вкатун, то тебе скорее всего должно быть до пизды на микросервисы. Потому что тебе дадут маленькую таску в одном или парочке сервисов. А что там снаружи ты и не узнаешь, если сам не полезешь в свое личное время читать доки и код всех сервисов. Даже если сервис будет новый, то архитектуру таблиц, интеграций и эндпоинтов нарисуют за тебя. А мнение об общей архетиктуре спросят ну очень нескоро.
Лучше больше задрачивай взаимодействие с базой, с сериализатором в json, с http, с фишками контекста и конфигурации спринга и особенно с тестами.
Я бы на твоем месте начал бы писать второй пет, где не трогал бы микросервисы, но поигрался бы с запросами посложнее, с конфигами сериализации, написал бы миграции, валидации и тесты.
Но из-за анона, написавшего про тупящего джуна, который таску под диктовку делал, у меня возник вопрос: где проходит та грань, перейдя которую, тебя попрут с испытательного? Типо, что нужно сделать, чтобы тебе сказали пиздовать на улицу, мб два раза так протупить как описывал анон выше? Или нужно все три месяца косячить, самому вообще ничего не написав? Вообще часто бывают такие прецеденты, что джуна шлют к херам в первые недели-месяцы? Может у кого-то тоже есть какие-то подобные случаи, которые вы лично наблюдали или слышали от кого-то, было б интересно почитать, чтоб избежать этого, если когда все-таки получиться дорваться до заветной работки
Я даже так и сказал, что сначала определяются руты таким вот образом, на что последовал данный панч, и после этого перехотелось уже что-то доказывать
Тебе это вряд ли грозит.
С таким джунами очень сложно столкнуться лично, почти все отсеиваются на этапе собеседования. Какой-то процент тех, кто целенаправленно учится наёбывать собеседующего, всё же может попасть на работу, но и они обычно сами съёбывают через пару месяцев.
Прописываю нормально, как в каждом туториале говорится
WebClient webClient = WebClient.create("http://test-service:8081/test);
В докере в логах смотрю получаю 500 потому что к имени контенера откуда-то приставился айпи адресс этого контейнера т.е вот так
failed: Connection refused: test-service/196.25.0.3:8081
Это webflux как-то подставляет это? Откуда это берётся?
Там нетворки нужно еще чтоб согласованы были, возможно стоит копнуть в этом направлении, хотя я не уверен, просто что-то подобное было, когда я начал поднимать все не через композ, а по отдельности и тоже не находило нихуя по имени сервиса
docker network ls
Да я и композ с туториалов взял. Даже chatgpt попросил написать мне, думал может как всегда в туториалах говно не рабочее, да нет, выдал тоже самое, только версию бампнул с 2 до 3
Где перспективы и зарплаты выше?
Вкатывался в Android-разработку - а там работы сейчас нет. В фронтенде тоже.
Куда идти?
Очевидно, да.
Научишься говорить на петушином
Курьером. Айти все, кончилось.
>Откуда это берётся?
Учи сети. В частности - что такое hostname и как он резолвится в айпишник.
В случае с докером один контейнер доступен из другого по имени, если оба они сидят в одной докеровой сети.
в джава не иди, я иду
Я тоже об этом думал, что лучше уделить внимание больше какому-нибудь спрингу или хибернейту. Под http ты что подразумеваешь? Как работает протокол? Алсо, теорию tcp/udp надо хорошо знать? Просто в вакансиях такого даже не встречал, хотя, это вроде как одна из баз. Или та же модель osi? Раньше ее часто встреаал упоминание, сейчас уже тоже не вижу.
Что это дает вообще? Не придется на клиенте формировать url? Или что?
Попал на проект, где интегрируются с огромной легаси-хуиткой, которая стартует полчаса и жрет столько ресурсов, что рабочий мак начинает задыхаться. Раньше просто мокал зависимости через ваейрмок или мокито, но тут развесистая логика на стороне той хуитки и мокать замучаешься, т.к. дергая одну ручку она создает кучу сущностей на своей стороне. Как лучше всего организовать процесс тестирования? Охуел, что в команде есть выделенный микрочелик, который ручками тыкает запросы на отдельном тестовом контуре. Разработка фичи может растягиваться на месяцы...
Хотелось бы поиметь автотесты, которые бы гонялись на CI, но если хуитка будет крутиться на тестовом серваке и туда будут ломиться запросы при прогоне тестов, то все похерится, когда будет выполняться много тестов с разных пулл-реквестов. Хз как стейт чистить после каждого теста...
Конечно бывает. Потом я вспоминаю, что мне нужны деньги, чтобы оплатить аренду квартиры, ипотеку, что-то купить пожрать, стоматолога оплатить и еще отложить на черный день и всю эту дурь как ветром сдувает.
>работа должна приносить удовольствие
Распространенное заблуждение, между прочим. За годы гребли попалась реально классная команда и интересный проект. В основном гребешь на унылых проектах, которые тебе не интересны, а работа вызывает отвращение. Но что поделать - нужно же на что-то жить.
>вкладываются в эффективность в перспективе.
Буквально единицы вкладываются в оснащение офисов и продуктивность разработчиков. Покупают дорогие кресла, мощные ноутбуки/рабочие станции и т.д. Большинство выдает забитые пылью ноутбуки HP/DELL, которым сто лет в обед и которые начинают завывать когда разворачиваешь проект.
>Буквально единицы вкладываются в оснащение офисов и продуктивность разработчиков.
а кровать так никто и не поставил
Ой бля нее. Ты че - школьник? Только оный и уместится в эту детскую стенку блять.
Большущий стол - вот тема. Особенно с подъёмным механизмом. И хорошее большое удобное кресло.
Имею ввиду как spring mvc работает с http запросом. Боди, параметры, хедеры, корсы. Интерсепторы, фильтры, адвайсы. Все на практике потыкать.
Ну и теорию с диспетчер сервлетом.
Нет, tcp/udp знать не надо.
это попытка совместить объекты и реляционные базы, чтобы автоматом гонялось туда обратно. Получилось не очень, но на примитивных операциях данных оно работает
У нас даже конченых дебилов не прут.
Все просто, чекай пакеты. Если пакет начинается с javax.persistence (как у Entity), значит это JPA. Если org.hibernate - значит хибернейт. Ну а если org.springframework.data - значит Spring Data.
лол
У дудя всегда такие интервью
>где проходит та грань, перейдя которую, тебя попрут с испытательного?
Это не обязательно испытательный срок и не обязательно джюн. У каждого проекта есть заказчик, сроки и бюджет. Если вы в команде не укладываетесь по срокам, то будь ты хоть мидлом или сенькой - разговор будет один. Сначала тебе прямо говорят, чтобы ты наверстывал темп и быстрее и качественнее делал задачи. Если ты не понимаешь или не вывозишь и из-за тебя команда продалбывает очередной спринт, то тебе просто говорят писать по собственному и все.
Ну так у меня они и сидят на одной докерой сети, нет? spring-cloud-network.
>>599528
Ну в application.yml он стоит 8091, но ведь сам докер контейнер же хостится на 8081, везде говорится по порту контейнера подключаться.
Это вот я так я думал до того как ты написал, попробовал поставить 8091 и оно теперь мне другим ебёт мозг. Выдаёт 400 Bad Request (а реквест то рабочий, без контенерезации всё норм)
Пиздец я ебал эту ебалу, ща буду по флешке архивы передавать. Спасибо за подсказку, буду разбираться
делать из 2 айдишников 1 составной, потом из 1 составного и оставшегося айдишника делать снова составной? мне кажется это хуйня какаято-то...
Меня как то 4 часа собесили. Оправдывали это тем что "ну клево общаемся же, душевно". Что кстати было правда, пообщались хорошо, ненапряжно.
Я бы ожидал, чтобы джун уже умел в спринг тесты мосkMvc + testcontainers с реляционкой. https://bootify.io/spring-rest/spring-boot-integration-tests-with-testcontainers.html
>Ну так у меня они и сидят на одной докерой сети
Да, верно, я не сразу заметил. Более того, айпишник то он тебе, судя по тому мессгау из логов, зарезолвил. А вот на порту 8081 никого не нашел.
>но ведь сам докер контейнер же хостится на 8081, везде говорится по порту контейнера подключаться.
Я всех деталей щас не вспомню, но скорее всего это работает немного не так как ты думаешь. Директива ports в докер-композе - это биндинг портов контейнера на докер-хост (докер-хост - это твой пека, на котором докер развернут). На биндинг портов внутри контейнера эта директива никак не влияет: они там будут биндиться ровно туда, куда ты спрингу скажешь, вне зависимости от того, есть у тебя ports в докер композе или нет
Короче, попробуй порт в урле вебфлакса поменять на 8091.
И что, тебя туда взяли ?
У меня собес шёл где-то 1.5 часа, задавали много несложных вопросов по стеку, спрашивали теорию про нормальные формы, вычислительную сложность алгоритмов и подобное. Решал две задачи с алгоритмами. Ещё по приколу спросили, знаю ли я C++, и дальше несколько вопросов про отличие умных указателей от сборки мусора и про отличие шаблонов от дженериков.
Да, попбробовал 8091 и действительно находит, только как написал выше, bad request. Пиздец кароче
Что за говно
ощущение что я копаюсь в глубинах какого-нибудь древнего сервера приложений. Тут оказывается нет задания урл базы, только название ibm сервера
В C++ есть шаблоны (template), их можно использовать примерно как джавовские дженерики, внешне выглядят похоже, но есть много своих нюансов. Например, они при компиляции копируют шаблонный код, подставляя туда типы, с котороыми это шаблоны использовали, и после компиляции получается несколько копий одних и тех же классов и функций с разными типами, это похоже на макросы. Шаблоны бывают рекурсивными, через них можно реализовать вычисление выражений при компиляции и ещё много чего.
В любом случае, если о C++ ты знаешь только то, что существует такой язык, задаваться этими вопросами не нужно.
1. абстрагироваться по смыслу? в таком случае, ее можно было бы назвать movie_person
2. или опираться на техническую составляющую? т.е. если она ссылается внешним ключом на какую-либо таблицу, то указывать ее в названии "movie_person_role" (на пике сейчас этот вариант)
обычно так и называют. Бывает ещё вариант movie_x_person_x_role
Зачем выделять роль в отдельную таблицу от movie_person_role?
Если у одного актера в одном фильме несколько ролей?
Ааа, пон, я просто подумал, что в джаве какие-то шаблоны есть, о которых я не знаю. Эт тебя на джуна по крестам гоняли так?
не понял вопроса. ты имеешь ввиду, чтобы было так?
_movie_id___|___person_id__|_role_name_|
____1_______|_____50_______|____actor___|
____1_______|_____51_______|__director___|
так составной ключ будет по movie_id и person_id только, тогда не получится делать так
_movie_id___|___person_id__|_role_name_|
____3_______|_____55_______|____actor___|
____3_______|_____55_______|__director___|
плюс дублировать строку - тяжелее по ресурсам, чем ссылаться на int
нашел рабочий пример. Оказывается все это есть искаропки и в jdbc постгрес драйвера
Не сказать, что гоняли, просто по приколу спросили, типа понять, что ещё знаю, кроме джавы. Хз, зачем.
Да не трясись ты, вкатун, лол.
На уровне, достаточном для работы, знаю только джаву. А так много чего тыкал, и петухон с машобом, и JS с реактами, и шарп, и андроид, даже с хаскеллем когда-то игрался. Времени было очень много.
Назови movie_cast. Или movie_crew, если там из ролей не только актеры.
засуну хуй с рукой в пизду и начну дрочить
Тогда посмотрю на stackoverflow или баелдунге.
Нормальная таска. Если джун с такой справится не может - зачем брали, спрашивается?
Джуну надо расписать каждое движение. Провести доскональное ревью. Если не понимает сразу, выполнить таску вместе с ним.
Да.
Нет, как ты на маке вебсферу запустишь?
да, без него не освоить циклы и написание программы хеллоуворлд
Почему ваша жава - такое неструктурированное добро? Один проект - не похож на другой. Смотришь в код, а там каждый ТВОРЕЦ, блядь. Один так положит файлики, другой - так. Один так обзывает, другой так.
Я не знаю. Но блин. Я вот, как шарпоняшка, просто горю с того, как среднестатистический проект устроен. Будто разраб на джаве - испытывает некую неудовлетворенность и желание быть таким же крутым как С++'ер, и намеренно код распихивает максимально дурацки.
Но я могу ошибаться. Возможно, в этом есть либо какой-то смысл, либо это какие-то особенности языка. А потому - хотел бы от вас услышать ответа.
Но просто взгляните на этот пиздец в сравнении. Абсолютно же ебануться можно, пока найдешь то что тебе надо.
Так исторически сложилось, и ничего не сделать. Никому это не нравится, хуй вспомнишь, в какой из сотен пакетов засунули нужный класс, из-за чего всем приходится юзать автоимпорты, в итоге без IDE код писать невозможно.
В том то и прикол, что у нас есть IDE, а не виндовс блокнот для написания кода,
и нам можно куда угодно сувать классы (в теории, на практике - оно непосредственно связано с качество дизайна, ведь расположение классов напрямую берётся из того, как разработчик себе представляет проект, структура пакетов - это что-то того рисунка проекта на бумажке, поэтому и у спринга такое говнорасположение классов, потому что он сам говно и сборник кала от десятка тысяч серунов).
А для посвящения в проект профанов должна быть ВИКИ, не надо заставлять их понимать, как работает проект по сурсам.
>Почему ваша жава - такое неструктурированное добро? Один проект - не похож на другой. Смотришь в код, а там каждый ТВОРЕЦ, блядь. Один так положит файлики, другой - так. Один так обзывает, другой так.
хуйню несешь
дальше не читал твой жир
Я ж не про это. А про какие-нибудь практики, которые должны быть общими для разработчиков внутри экосистемы.
Вот на шарпе - есть гайд от майков, как называть что. В шарпе - есть общие правила по названиям папочек и общей структуре проектов. Ты открываешь один проект - и быстро "просекаешь", как оно работает.
А в джаве - я буквально несколько проектов открывал и часа 4 потратил, чтобы понять где что лежит. Думал, ну, наверное так принято у них. Открываю другой - совсем иначе штуки лежат. Открываю третий - опять.
Еще: один - делает вложенные классы. Другой - не делает. Третий делает иногда. В шарпе, для публичных штук это считается харамом.
>>600241
Вот я открыл https://github.com/spring-projects/spring-framework. Вот я открыл https://github.com/thingsboard/thingsboard
В каких местах они похожи?
>>600239
Ну вот я - сижу в деревне на удаленке. Мне прилетает уведомление на телефон, нужно чет быстро поправить. На шарпе я просто вимом открываю папку с проектом, нахожу быстро нужное место, правлю, делаю pr и иду дальше коров доить. Как я блин должен это сделать на джаве?
>Ну вот я - сижу в деревне на удаленке. Мне прилетает уведомление на телефон, нужно чет быстро поправить. На шарпе я просто вимом открываю папку с проектом, нахожу быстро нужное место, правлю, делаю pr и иду дальше коров доить. Как я блин должен это сделать на джаве?
Ну это же совсем жирофрения уже.
Так реальный кейс... Когда на ковиде разогнали - уехал в родную деревню и там сидел с ноутбуком, ставить студию - было влом. Нормально делал задачки.
>Ты открываешь один проект - и быстро "просекаешь", как оно работает.
Ты хочешь сказать, что благодаря тому, что на петушарпе не делают вложенных классов (между прочим, которые на джаве пишут как раз для увеличения читабельности кода в исключительных случаях, когда класс не нужен за пределами того, в котором он объявлен) и перед названиями интерфейсов пишут уродскую букву I, там становится гораздо легче разобраться в работе проекта по сурцам? Жирный, плиз.
в то время я нахуй весь день потратил на создание пары таблиц со всеми видами отношений хотя во время просмотра все изи казалось
ебало мое?
А теперь репрезентуй свое ебало после того, как я тебе скажу, что статья о спинг жопа на спрингосайте отмечена как 15-минутная.
Благодаря тому, что структура проектов похожа один на другой. Ты открываешь проект на шарпе номер раз. Открываешь проект номер два. Открываешь проект номер 3.
Везде видишь папочки
Model
Events
Controllers
Services
Resources
Utils
В библиотеках:
Internal
Hosting
Extensions
Короче. Все +- одинаково, специфичные части - легко заметить. Именование тоже +- одинаковое у всех.
Из-за этого ты знаешь куда первым делом смотреть. Знаешь где какого рода штуки лежат. И быстро вникаешь.
В жаве, я часа 4 потратил чтобы просто найти, где ж там модельки лежат.
джава проекты тоже делаются так, просто мы используем специальный шифр, который рассылаем каждому джависту. шифр меняется в 0:00 каждого дня. делается это для того, чтобы пидорасы типо тебя горели и не могли понять что насрано в проекте
у меня больше проблем вызвало то, что я постоянно путался со связями один-к-одному/один-ко-многим/многие-ко-многим. не привычно было так же воспринимать отсутствие непосредственно поля в таблице, на которое ссылается другая таблица. т.е. я сначала пытался это все представить так, потом только начал потихоньку понимать и уходить от навязчивой мысли засунуть поле в таблицу. вместо этого абстрагировался. поле как бы есть, но оно в другом месте (внешний ключ)
Нашел, чем гордиться. Структура должна быть такой, чтобы классы как можно меньше работали с классам из других пакетов - то есть основное сообщение с однопакетниками, чуть поменьше с теми, кто в одном пакете более выского уровня, ещё меньше с теми, кто вообще далеко, и так далее. Внешние библиотеки стоят особняком, потому что их структура не видна при работе.
Такой подход позволяет достигать максимальной инкапсуляции, выполняя то, зачем вообще нужна структура пакетов - структурирование проекта прежде всего в голове разработчика. А у тебя что? Ущерб дизайну в угоду надоям.
>постоянно путался со связями один-к-одному/один-ко-многим/многие-ко-многим
Потому что фримверк сделан нелогично и просто нет логике в этих OneToMany и ManyToOne. А все ошибки ты ловишь в рантайме. Пока проект маленький, то фидбек получаешь мгновенно. Когда он разрастается, то ты можешь ждать по минуте, чтобы потом получить огромную портянку из стектрейсов в которых будешь копаться еще минут 5 в попытках правильно расставить аннотации.
А когда ты столкнешься с проблемой N+1 и попробуешь решить ее с помощью хубирнейта, то вообще на стены полезешь с диким воем.
нихуя
>>600290
я больше не с фреймворком ебался, а с представлением самих таблиц в башке. фреймворк больше сбивает количеством аннотаций, которые надо сразу все как-то в голове уложить и понять что каждая делает. я правильно понял, что можно указывать однонаправленную связь и хибер под капотом сам все поймет, но лучше всегда делать двунаправленную для читаемости кода?
На все.
Пока тута, объясню как в шарпе делается. Хотя не уверен, что одними и теми же словами то же самое называем.
Сущности - анемичны. Просто набор свойств обычно. Иногда атрибутами - ограничения могут устанавливаться.
Сервис - объединяет в себе какую-то бизнес-область. Типа сервис оплаты. Сервис управления пользователями. Сервис выдачи заказов. Внутри одного сервиса могут использоваться различные сущности.
Контроллеры - просто передают запрос нужному сервису, получив ответ - отдает клиенту.
На уровне фильтров/миддлваря - происходит базовая валидация запроса. На уровне сервиса - может быть валидация по правилам предметной области.
Как-то так. Да.
Ну да ладно. Я так понял, меня почему-то посчитали троллем. Я не хотел таким показаться. Просто последнее время - нужно много кода на джаве смотреть. И меня просто смутило, что все проекты по разному выглядят. Такие вот дела.
Очень редко.
Ежедневно.
Там несколько сотен кейсов, которые нужно держать в голове. Чуть накосячил и хубирейнт тебе нагенерит говна, что потом будешь в 4 утра в понедельник разгребать на проде.
>>на этот пиздец в сравнении
Там в обоих случаех пиздец. Но это либы, хуле ты ожидал там увидеть?
Ну теперь-то уж точно не собираюсь... Адьос!
Я наверное начну джаву учить и буду перекатываться. Все равно, считаю, что сидеть 5 лет на одном стеке - такое. С плюсов на шарп перекатился, думаю пора опять перекатываться. Так что если что - буду к вам захаживать. Да.
Как-то мы понравились одному петухонщику, до сих пор долбоеб после 500 постов перекатывает. Уёбывай.
на этом говне была сделана либа для "аудита". Все действия юзера в специальной таблице в админке
оказалось что жук платный. Бесплатная версия - самый минимум, скомпиленный под новейшей жабой (19). А чонить опенсорсное есть? Помню была queryDsl
Охуеть. Вот пидорасы!
и бесплатная версия отказалась работать под 11 жабой, пришлось обновляться на 19
QueryDSL даже более ООП-шный, чем жук. Юзай на здоровье.
У меня проект в продакшене на 11 жаве на фри жуке.
Какие функции тебе обязательно нужны из платных версий? Лично я не заметил ничего прям совсем нужного.
лол
Говорят на С++ не решают задачи, там идет борьба с компилятором.
Kotlin, scala, js+ts, чистый си, питон, го. Ну в крайнем случае плюсы. Шарп джависту учить смысла явно нет. На нем никаких общеинфраструктурных вещей не написано, в связке они с джавой не нужны. А ниша по сути та же - тырпрайз веб + умирающий виндовый десктоп и юнити.
А просто учить голый язык без экосистемы - это бесполезно. Так можно и хаскель какой-нибудь разучивать.
Жук свежий? Еще не понравилось что надо обятельно генерить сущности из базы. Руками инсерт не получилось. Кверидсл лучше кароч
майнкрафт а расчет не берем
На свежем у меня сервис на 17. 3.17 внутри активно использует 17 джаву(sealed types, records, instanceof pattern matching). На 11 жук 3.16 годовалый где-то.
Генерация это основная фишка для запросов. Она и обеспечивает всю типобезопасность маппинга.
Маппинг имен таблиц/колонок и типов колонок задается на уровне кодогенерации. И когда ты все сгенерил, ты не передашь в запрос хуй знает что в строчках, если пользоваться типобезопасными апишками.
Но можно и так как на пике 2 писать, не понимаю, что у тебя не получилось. Апи без генерации приходится использовать для временных таблиц, типа сте или для создания таблиц или колонок в рантайме.
И еще фишка генерации - все констрейнты и индексы тоже генерятся в код. Их поля, типы констрейнтов и имена. На уникальных констрейнтах и уникальных частичных индексах у меня завязана кое-какая логика.
Джава слишком медленная и тормозная для тяжёлых вычислений.
Игры это по сути гуй.
А игровые движки - специфичные гуй библиотеки.
У жабы с гуем не задалось, особо удачных библиотек никогда не было.
Шарп всегда был ориентирован на виндовый гуй.
Почему майнкрафт не берем в расчет? Чем он тебе не гейдев?
Так то на джаве игры встречаются время от времени, даже в стиме. Сходу помимо кубача вспомню project zomboid и mindustry. Просто так кости упали, что на джаве не нашлось завирусившегося игрового движка уровня unity, и как результат, не сложилось конкурентного коммьюнити, вот и все. А вообще - есть и движки на джаве (jmonkeyengine3), и нативные биндинги на графику (lwjgl). Какую нить индюшатину по фану слабать можно и сегодня.
Гуй формошлепский с гуем (или даже лучше сказать - HUDом) в играх не имеет вообще ничего общего. Ни целей, ни подходов к дизайну, ни решений. Бессмысленно пенять на свинги.
Тормозной твой батя был 16 лет назад, а джава со всеми новейшими оптимизациями побыстрее плюсов будет.
И геймдев есть, и майнкрафт как раз берём в расчёт - его доля на рынке больше чем всех юнитиподелий вместе взятых, умноженных на 10 раз. Так что это на петушарпе геймдева нет, а не на джаве. На джаве он как раз есть.
Тормоз - это ты. А в джаве с вычислениями все вполне себе неплохо, с учетом JITа, интринсиков, оптимизаций и всяких биндингов на нативные либы. Даже CUDA при желании прикручивается.
Ну так шарп с юнити чудом выстрелил. Это один продукт, а не тенденция. Да и шарп там не полноценный, а моно.
Ничего просто так не происходит. Всегда всему есть причины. И в случае с петушарпом причина - майкрософт.
Ну вообще хз насколько это не тенденция. Возможно, тут сролял тот факт, что игорьки в основном всегда писались на плюсах под виндой, и все игровое коммьюнити разрабов уже тогда (когда не то что юнити - даже шарпов не было) все ходило под майками. А майки в свою очередь уже в дошарповые времена были ниибаца доминаторами в нише разработке на плюсах под виндой. Такой тандем явно имел в нише геймдева фору над sun/oracle, которые в игорьки никогда не играли.
Но ты прям ниибаца упрощаешь, говоря что:
>игровые движки - специфичные гуй библиотеки.
Это прям пиздец как неточно. Настолько неточно, что можно сказать - пиздеж, сорян. Каким бы клевым шарп ни был для проектирования десктопных приложух, никакое преимущество ему это не дает при разработке игр.
Ну вот писи рынок развился, который уже тогда был под контролем, и петушарп вместе с ним. Не тупи.
Ну такое. Я вот посмотрел и первый год юнити вообще был онли под мак.
А то что ты говоришь похоже на очередную теорию заговора по завоевание мира злым майкрософтом.
>Я вот посмотрел и первый год юнити вообще был онли под мак.
Как будто что-то отменяет. Ты логику вообще понял, или лишь бы пукнуть?
>на очередную теорию заговора по завоевание мира злым майкрософтом.
Какая ещё теория заговора, лол блядь? Это очевиднейшие, открытые факты, которые никто даже не скрывает.
>>600245
Чел, ты смешон. Либо очередной неприкаяный вкатун, который никогда в реальном проекте не работал, но лезет к взрослым дядькам разжигать.
Какие нахуй гайды от майков. Какие харамы, что ты несешь, болезный? О чем ты вообще. Все гайды - хуйня, маня. На какой бы язык они не писались, если этот язык их не энфорсит, и не ебет программистов по рукам линейкой, валя к хуям компиляцию в случае хоть малейшего нарушения, никто никогда их соблюдать не будет. Просто прими это как факт - так работает мир разработки реальных приложений для человеков, с техдолгом и кранчами. Стайлинг решается лишь аппаратно-техническими средствами, и эти средств в джаве хоть жопой жуй. Были еще гоферы, пытались решить проблему стайлинга через ортогональность прям языка нахуй. Хуй их знает насколько у них это получилось. Но вот уж с кем с кем, а не с нубом-шарпистом говорить об ортогональности, ты и слова то такого наверное не знаешь.
Все остальные твои претензии - чисто твои загоны. Ты привык читать шарповый код, поэтому код на джаве априори будет для тебя непонятнее. Для меня - наоборот. И хули тогда остается ответить на твои выгладки и полотна, кроме как не послать тебя нахуй?
>Какие нахуй гайды от майков.
Ты так говоришь, как будто бы эти гайды не хуйня из под коня и которые вообще нихуя не преимущество петушарпа. Обоссывание майкобляди стоит начинать не с того, что он пиздит, а с того, что даже если его манямирок это правда - это всё ещё хуйня.
Еще раз, чел. Майки были доминаторами в плюсах, и их доминаторство в этой нише было чуть ли не со времен первых виндовсов. Их плюсовый компилятор был лучшим среди конкурентов и единственным в своем роде. Все игры компилировались им, и линковались с их SDKями. Под майками был DirectX, выдававший в те времена лучшую производительность и не имевший конкуренции, на нем работали литералли все игры. Они на геймерском дерьме собаку сьели.
Причем тут влажные фантазии сонибоев с их соснолью и ее временным периодом успеха? Сколько сони существует со своим поленом, и сколько - майки.
Да вот еще ты поучи меня, как ебланов в айти попускать. Ты то куда лезешь? Мне вообще похуй на его шарпистское гражданство.
> это всё ещё хуйня
Ну не знаю... Когда в коммунити - люди плюс-минус в одном стиле пишут, имеют похожие структуры проектов, похожие структуры файлов с исходным кодом и т.д. как-то проще я считаю..
Вот опять же, в шарпе принято:
class ClassName
{
//события
//поля
//конструкторы
//свойства
//публичные методы
//приватные методы
//реализации интерфейсов
}
Вот такая структура файла класса - в абсолютном большинстве исходников на шарпе. И это позволяет сразу открыть файл и понять куда смотреть.
Я хз че такого плохого, когда в коммунити - есть принятый стиль и люди стараются его придерживаться.
>>600526
> никто никогда их соблюдать не будет
В коммунити шарпа - соблюдают в массе. В абсолютном большинстве проектов следуют гайду от майкрософта. А молодых сильно ругают, чтобы они тоже следовали.
А упрощается следование тем, что в шарпе на уровне проекта, можно настроить кодстайл и отход от него будет генерировать варнинги. При этом - можно сделать так, чтобы варнинги воспринимались как ошибка, и соответственно твой проект просто не соберется, если ты сильно много себе вольностей в плане стилистики позволяешь.
Ну и нахуя ты опять натягиваешь сову на глобус? Ты сначала привел как пруф, что в джавовских проектах нет единой структуры проектов (и слава богу!), а теперь высираешься за порядок данных в классе, что и в джаве есть и что контролируется идеей, как будто я сказал, что слава богу что такой структуры нет.
>В коммунити шарпа - соблюдают в массе
Иди нахуй, пиздабол. Соблюдают в массе эти правила до первого кранча, когда всех на уши поднимут овертаймить и лишние условности отходят на второй план.
>А упрощается следование тем, что в шарпе на уровне проекта, можно настроить кодстайл и отход от него будет генерировать варнинги.
А в джаве значит по твоему такого нет? Одни шарписты до такого по твоему додумались, это ты мне хочешь чтоли сказать, кусок ты предвзятого дерьма блять?
Ты хули вообще включил евангелистскую шарманку то, чмо? Ты мне шарп свой нахуя продать пытаешься? Я и без тебя знаю что в любом серьезном языке существуют стайлинг-чекеры, мне твоя вот эта вот лекция обзорная по возможностям шарпа не нужна. Мой тезис не про то, у кого код чище. Мой тезис - в том, что ты - кусок дерьма, а твой гнилой наброс - продукт твоего воспаленнного надмозга, не имеющий никакой корреляции с реальностью, и не несущий никакого конструктива. Есть что по существу ответить? Нет? Вот и иди нахуй.
Причем не только местные шизики шарписты. Вот дослушал https://youtu.be/1PvzqL2xdX8 и нарратив продолжается.
>У нас это как в джаве
>А это как в джаве, но лучше
>А этого вообще нет в джаве
>А этого, как в джаве нет, но потому что это нинужна.
Откуда такая джавазависимость? А если зритель с джавой не знаком? Я вот десятки видосов про джаву видел. И нигде не упоминается Шарп. Всем тупо насрать на него.
Потому что петушарп - паразит джавы.
Кстати интересно, а майки в джава экосистему как-то контрибутят? У Гугла вот есть голованг, но они с джавой до конца не порвали.
Майнкрафт они контрибутят, бесконечный поставщик вкатунов в джаву.
Еще один с ебанутыми конспирологическими теориями, с целью разжечь.
Какой в пизду комплекс? Комплексы - у местных шизов-двачеров. А докладчики просто этим трюком расширяют целевую аудиторию доклада, чтобы не только шарписты могли понять о чем речь, но и джависты приобщиться. Или по твоему что - подкаст подлодки исключительно шарпистская тусовка чтоли?
Таких же отсылок к джаве можно найти в докладах по котлину и скале. По той же причине.
Послушай рассказ про джаву Тагирки там же. Джава в свое время отталкивалась от плюсов. Но он это в начале сказал и о плюсах забыл. А тут я про джаву слышал постоянно.
Этот подкаст для не знакомых с языком. И если бы не был знаком с джавой, писал бы только на питоне или жсе для меня бы эти отсылки к джаве только добавляли непоняток.
Я слушал их подкаст про го, питон и ерланг и нигде нету таких постоянных ссылок на другой язык.
Чето контрибьютят. Из недавнего промелькивал тут https://github.com/microsoft/openjdk-aarch64.
Кроме того, у майков есть azure, и они не могут тупо игнорить поддержку джавы в нем.
И на основе этого всего ты сделал вывод о каком то комплексе? Ты дипломированный психолог? Или как это у тебя работает?
>И если бы не был знаком с джавой, писал бы только на питоне или жсе для меня бы эти отсылки к джаве только добавляли непоняток
Ну так поэтому их там и не делают. Питон в каком месте на джаву похож? Вообще и в каком. А в шарпе с джавой очень много схожих черт, поэтому джависты отсылки поймут - можно и вставить. То же самое и с Тагиркой. Какой смысл делать много отсылок на плюсы, если джава с плюсами практически ничего общего не имеет?
>>подкаст подлодки исключительно шарпистская тусовка чтоли?
это ж вроде какие то яндексоиды? в любом случае про жабу там вряд ли будет что то толковое, лучше жокера навернуть
А кто основные столпы джавы, кроме оракла, редхата, вмваре и ибма? Нетфликс и линкедин пилят инфраструктурные продукты. У Амазона есть jdk. Гугл вроде уменьшает вложения в экосистему джавы.
Эпл и Фейсбук что-то внесли в джаву?
Озоноиды скорее.
Хз, гугл в помощь
>>Питон в каком месте на джаву похож?
в котлине
>>поэтому джависты отсылки поймут
но зачем жавистам слушать про пеушарп? Я уж лучше го поковыряю или жс обмажусь - пользы и то больше будет.
>в котлине
В каком месте?
>но зачем жавистам слушать про петушарп. Я уж лучше го поковыряю или жс обмажусь - пользы и то больше будет.
А типа чо - если тебе не нужно, значит не нужно вообще всем джавистам? Почему тебя вообще это так заботит?
Ну так 99,(9) спринга пилится опенсорс лохами, а эти пидарасы просто донатики собирают.
Вмваре принадлежит спринг. У ибм и редхата свои ждк и сервера приложений. У редхата есть кейклок написанный поверх jboss.
Почти все в попенсорсе пишется людьми на зарплате больших корпораций. Левые васяны только мелкие баги правят.
Уже поверх кваркуса.
Не скажи. Основные контрибьютеры крупных штук типа спринга как раз в основном сидят на зарплате. Рандомные челики забегают чето фиксить в основном тогда, когда сталкиваются сами с каким нибудь дерьмом и им нужен фикс лично.
Так это я твои чувства задел, опенсурсный лох.
На западе java ee вполне себе имеет вес и ждк вендорные в придачу. А вот белсофт с фсбшными закладками там нахуй не нужен.
Пользуются.
Обычно ждк в основе своей - тот же самый хотспот что и опендждк. Но дополнительно эти кастомные ждк могут добавлять свои уникальные фишки, типа AOT (Excelsior Jet) или GC (Azul). В перспективе наработки этих вендоров могут уходить в апстрим.
Нет.
99.(9) = 99 + 0.(9) = 99 + 0.(3) ⚹ 3 = 99 + 1/3 ⚹ 3 = 99 + 3/3 = 99 + 1 = 100
Подвоха нет, это не сокращение нулей, как у доказательств, что 2⚹2 = 5
https://ru.wikipedia.org/wiki/0,(9)
ты дурак или притворяешься?
такой же вопрос
> наукобот увидел фразу, идущую в разрез с манямиром наукобота
> .
> .
> .
> .
> .
> .
> .
> .
> .
> .
> .
> .
> .
> .
> .
> .
> .
> Даун, ты в школе не учился что ли?
>99,(9) спринга пилится
Командой, которая сидит на зарплате у VMWare. Какой-нибудь Netty пишется челиками из Гугла, Эппла и прочего фаанга, которые там на зарплате и используют эту либу для своих поделок. Лид проекта вообще сидит на зарплате у Эппл. Какой-нибудь gRPC пилится инженерами из гугла и всякие клиенты для того же котла или джявы снова пишут зарплатные из гугла.
ELK стек пилится инженерами из самого эластика, которые там на зарплате. Кейклоак, кваркус, инфиниспан - редхат, хейзелкаст - снова ребята на зарплате.
И всё пиздёж и мантра. Всё попенсорсное пилится попенсорс комьюнити, а те, что на зарплате получают зарплату за нихуя.
:)
Имеется: разраб на удаллёнке в одной маленькой конторе в г. Казань
Стек разраба: Java + Postgres
Стаж: около 2-х лет (2 года ровно в мае)
ЗП в конторе: 75к на руки
Параллельно проверяю java-домашки по Spring на местном сайте с обучением программированию
На следующей неделе должны в конторе повышать ЗП. Перед повышением хотят услышать мои ожидания.
А я без понятия сколько можно просить? Хочется 150+, но не нагло ли просить в 2 раза больше? Есть страх отказа и что буду смотреть на меня косо, если назову слишком большую цифру
Как грамотно просить повысить ЗП?
Знакомые получают все по-разному, но все больше, чем я (с аналогичным стажем или меньше)
Сейчас джуны, у которых я домашки проверял, на 70 - 100 к залетают
Называешь цену, например 300к, тебе говорят максимум 150к, говоришь b + (a - b)/2 (где а - твоя последняя цена, b - их последняя цена) итого 225к, если отказывают и не предлагают новую цену, решаешь соглашаться или нет. Если предлагают новую цену выше, например 180, говоришь 202,5 и т.д. пока не сойдетесь
Там будет по сути оплачиваемая стажировка, после неё, если адекватный, берут джуном. Почему бы и нет? Много компаний выращивает джунов.
Идёшь собесишься и получаешь офферы на 300к/сек, после идёшь к своему начальству и говоришь, что меня зовут на 300к/сек, а тут я получаю копейки. Они сразу тебе предложат больше, если захотят удержать, если же нет, то пишешь заявление и уходишь.
Нормально ли просить прибавку к зп, если ты джун на испыталке? Или сразу после испыталки хотя б
А ты заслужил?
>Ты докажи, что 0,(3) = 1/3, наукобот.
Вот поэтому тред и не надо перекатывать на 500 постах.
мимопроходил
Ну вообще 1/3 + 1/3 + 1/3 = 1 а 0,(3) + 0,(3) + 0,(3) < 1 так что, наверное, они не равны
Ты че долбоеб? По-твоему 0,(9) = 1? Даун?
Сложно найти применение плюсов для джависта. Разве что писать инфраструктурные штуки, где нужны будут платформозависимые байтоебские вставки.
Или лезть читать кишки jvm.
Больше кейсов не могу придумать.
Указать нужный тип в @Column(columnDefinition = "")
Пиздец.
Простейшее доказательство:
x = 0,(3)
10x = 3,(3)
10x - x = 3,(3) - 0,(3) = 3
9x = 3
x = 3/9 = 1/3
Аналогично доказывается, что 0,(9) = 1
Жабач образовательный, программа средней школы эдишн.
25 - 45 = 16 - 36
Далее прибавим (9/2)^2 ко обеим частям ур-ия:
25 - 45 + (9/2)^2 = 16 - 36 + (9/2)^2
5^2 - (259)/2 + (9/2)^2 = 4^2 - (249)/2 + (9/2)^2
(5-9/2)^2 = (4-9/2)^2, обе части положительны, можно извлечь квадратный корень
5 - 9/2 = 4 - 9/2
Далее прибавим 9/2 ко обеим частям ур-ия:
5 = 4 что и требовалось доказать
Следовательно 2*2 = 5
шиз
1 вакансия в моем городе нахрнэн. Похоже, буду год у мамы дома сидеть и моды писать для майнкрафта :(
Свинья смеется над убогим выебоном омежки вместе с кабаном. На ближайших 50 дейликах как минимум раз тебя да вспомнят. На 51 день кабан ебёт свинью и платит ей за это 450к.
Твои действия?
это частая практика? я вообще удивлен что смог эту хуйню нагуглить, уже час сижу мозги ебу, сервак тупо высирает лярд строк, которые похожи одна на другую и никакого ответа не отсылает, и я не понимал что ему надо было...
я дебажил... я не понимал нихуя что происходит, он меня по хз чьему коду дрочил. дебажить фреймворки - это не мой лвл. я по старинке через sout проверял, объекты с бд приходили, а ответа от сервака не было, что добавляло только больше вопросов...
>toString
я видел, что его всегда переписывали, но я думал это просто для удобного вывода объекта в консоль, а мне это не нужно было, поэтому я не стал его переопределять
да, причем скорее всего одним из самых неоптимальных способов. При том что взаимодействие с бд это бутылочное горлышко. А чтобы заставить jpa делать оптимальные запросы, нужно хорошо знать sql + очень хорошо знать кишочки хибернейта и его грабли и ограничения.
Сперва вкатуны радуются что всё работает, а вот потом с опытом приходит понимание, что за это нужно платить, и плата слишком высока
т.е. всегда можно по сути написать свой запрос? при чем лучше не доверять это хибернейту, а самому его написать? как на пикриле? просто не понятно зачем jpa использовать, если ты запросы сам пишешь все равно? в любом случае, если sql знаешь, написать свой запрос не сложно и не долго, в чем тогда преимущество jpa?
>в чем тогда преимущество jpa?
ну типа там автоматически работают инсерт, апдейт и дилит, не надо их руками писать. Ещё getById есть искаропки. Ну ещё может что сущность не надо руками собирать, все поля автоматом проставляются из результата запроса
>у меня получается хуевый json
>с таким подходом в бд меньше места занимает хранение
JSON на рестах и сущности на уровне БД не имеют, не могут иметь и не должны иметь ничего общего. У тебя явно есть косяк где то в декомпозиции на слои. Ты сущности ORM случайно не отдаешь как респонз из рестов?
вот так отдаю. ты имеешь ввиду их надо компоновать вручную перед возвращением? как это лучше и правильно делать? или я не понял тебя
По задачам.
Ну да, так я и думал.
Чтобы у тебя не возникало таких дилемм, никогда не делай ORMные сущности ДТОшками на рестах. У рестов должны быть свои структуры, у базы - свои. Тогда ты сможешь БД и ресты развивать независимо друг от друга.
Выгрузил сущности из сервиса, преобразовал их в рестовые сущности, отдал. Преобразовывать можно руками, удобно это делать через стримовые map. Еще слышал об инструменте object mapper, который вродле как и создан для таких преобразований, но я его не пробовал.
>Выгрузил сущности из сервиса, преобразовал их в рестовые сущности, отдал.
т.е. это надо в слое контроллера делать? не лучше в том же сервисе?
Ну или мапстрактом. Не важно как, важно сделать.
>т.е. это надо в слое контроллера делать? не лучше в том же сервисе?
Это вопрос дискуссионный. Я оставлю ответ на него на твое усмотрение, ибо считаю что на новичковом уровне ответ на него не так сильно важен. Попробуй так и эдак, огреби граблей, тогда и обсудим.
с++ не имеет применения
в случае с жуком можно было бы сразу заполнять дтошки руками из результата sql запроса. Не нужно эти мапперы дополнительно лепить
Достаточно. Ну и мочь кратко рассказать про партишены.
Дак я ж спорю разве? Можно.
Не понял, а если у тебя сучность на 20+ полей? Руками как-то впадлу поля сетать, разве что у тебя оплата построчная
потратить 10 минут и написать сраный маппер это сложно? Лучше с хибернейтом мудохаться часами и каждый запрос проверять?
Мой подход в том, что в контроллере только то что нельзя спустить на уровень сервиса. Аннотации с хттп маппингами параметрами, аннотации валидации и отлов их ошибок, всякие аннотации свагера. Логирование запроса.
Все остальное, включая маппинг дто лучше спустить на уровень сервиса.
По формированию конечной дто. Тебе в дальнейшем возможно придётся дообогащать свой ответ ещё запросами в базу или в другой сервис. И вызов других сервисов и репошек это явно не дело контроллера.
Советую попробовать моделмаппер. Он медленнее чем мапстракт из-за рефлексии, но проще в использовании.
>>а если у тебя сучность на 20+ полей?
Назови поля в дто также как в сущности - и оно само смапится. С агрегированными данными тоже канает. Типы жук сам подгонит, если надо.
>>моделмаппер. Он медленнее чем мапстракт из-за рефлексии, но проще в использовании.
Мне он тоже казался проще, но с мапструктом сложно только в первый раз. Потом уже не оторваться.
Если у тебя полный update, всех полей или insert, то там вовсе не обязательно сетить по одному. Преобразуешь сущность в jooq рекорд и сохраняешь все.
https://stackoverflow.com/a/54131550
Хз как. Меня на нынешней работе с жуком гоняли по хиберу на собесе. Не сильно конечно, но я тогда жука не знал.
Проходил кстати стажировку на одном легасиговне. И там кроме хибера были хранимки на 100 строчек в jdbcTemplate
Хуя се, это только в платном такое, или везде? Жуком прост не пользовался, а там оказывается какой-то маппер встроенный есть
У меня на проде бесплатный и не помню случаев чтоб платный нужен был. Разве что для жсонб постгреса методов у него нет, но не факт что в платном они есть - решается просто постановкой стринги с sql запросом.
Но такой автомапинг это магия, надо соблюдать осторожность - проебешься с неймингом и не покроешь тестами - словишь нулы в неожиданных местах.
https://www.jooq.org/doc/3.18/manual/sql-building/column-expressions/json-functions/json-attribute-access/
Часть в 3.18 введут, и в бесплатную тоже.
похоже, с моими связями в таблице, используя маппинги хибера невозможно сделать так, чтобы дубликаты персон удалились, а их роли объединились в список и были добавлены в объект персоны.
для такой реализации, как минимум нужно добавлять поле List<Role> в сущность Person, а так нельзя, потому что Person уже связан с Role через MoviePersonRole... т.е. остается только убирать связь role ---< movie_person_role и делать role ---< person? но тогда, как я уже говорил, это будет неэффективно с точки зрения занимаемого места в бд... ебнуться просто
Выглядит как говно ебаное, спасибо за название, буду обходить стороной.
>невозможно сделать так, чтобы дубликаты персон удалились, а их роли объединились в список и были добавлены в объект персоны.
Ты опять выдумал чето непонятное. Проговори опять языком кабана, что делать пытаешься?
хочу, чтобы возвращался один шварц, со списком ролей внутри себя (снова пики скину).
как уже выяснили, мой жсон сейчас работает исключительно по связям таблиц. т.е. хибер возвращает результат из бд, а джэксон (или кто там этим управляет?) собирает мне жсон на основе ответа. так делать не надо, лучше создать DTO, которое я буду возвращать пользователю.
я сейчас пытаюсь это DTO собрать, пока оно у меня такое (пик3). и тут начинается проблема, Person у меня не содержит List<Role> , вместо этого он связывается с MoviePersonRole (пик 4), собственно поэтому я и имею пик 1.
чтобы MovieDTO работало так, как мне надо, мне надо либо поменять эту связь Person с Role через MoviePersonRole, что приведет к неэффективному хранению на бд (так что этот вариант не подходит), либо... либо я должен как-то собрать этот объект сам, чтобы его структура была какая мне надо
persons: [
_person: {
__firstName: "asda"
__roles: [
___ ....
__]
_}
]
и я уже голову всю сломал, как это можно сделать стримами, плюс сам их синтаксис кажется какой-то кашей, в которой только путаешься больше. бля... это даже объяснить все сложно... либо я упускаю какой-то момент и не понимаю
Либо мне надо создать какой-нибудь PersonDTO, где будет List<Role> и который я буду передавать в MovieDTO ( List<PersonDTO> )? DTO - это же по сути просто вспомогательные классы? т.е. это даже не сущности? и связей в них нет никаких? я просто думаю как эту структуру описать в этом MovieDTO, не меняя связей в бд....
Потому что 4 - 9/2 < 0, очевидно, что корень извлекать нельзя.
А тот анон дал строгое доказательство.
Ну т.е. извлечение корня из квадрата - это модуль, а не просто 4 - 9/2
бля, это такой пиздец... в такие моменты чувствуешь себя просто конченным тупым говноедом, просто животным ебаным...
реквестирую нормальные способы решить эту проблему
https://www.baeldung.com/mapstruct - вот это решит, надо будет просто правильно @Mapping прописать.
Перенеси это на уровень сервисов, в контрллере логики быть не должно.
var uniquePersonMap = moviePersonRoles
.stream()
.collect(
Collectors.groupingBy(x->x.getPerson(),
Collectors.mapping(x->x.getRoles))
пишу без ИДЕ - сам поправишь/допишешь под свои классы
var personsDto =
uniquePersonMap.entrySet()
.stream()
.map(m -> newPersonDto(m.getKey().getName,m.getValue()))
.collect(Collectors.toList())
Ну и далее в таком духе. Стримы это стильно, модно, молодежно. А циклы и мутабельные листы - ебанина какая то.
PS какая версия жабы? Если 11+ используй var, а то рябит от типов. Идея подсветит что там в варе, если запутаешься.
Зачем ты вешаешь @Component на дэтэошки? Ты идиот? Не лезь, короче, чел. Ты не понимаешь как работает спринг фримверк.
и что не так? к чему доеб вообще? если ты к самой конструкции, то она вся такая. ты мои связи в таблице видел вообще для начала? а писал я это в лоб через циклы, чтобы хотя бы написать в принципе эту хуйню
>>601768
ты вообще иди на хуй, у меня 5 часов утра уже было, и до этого я сидел без вылазно 18 часов, прогал свою хуйню, я даже не помню как его ставил вообще
>>601729
тут кто-то писал уже что его настраивать сложно, поэтому не стал. про modelmapper тоже читал, немного, не понял преимуществ, поэтому пока не стал юзать (потом мб попробую получше вникнуть в эти мапперы)
>>601746
проблема еще в том, что я стримы не особо знаю. не знаю их всех возможностей, до этого пытался только через map и distinct решить задачу, но получалась лапша вложенная, от которой башка взрывалась только. у них синтаксис пиздец специфичный для меня
>у меня 5 часов утра уже было
Ты просто не понимаешь как работает спрэнг, чел... Просто не лезь в айти. Иди лучше таксуй или грузаном в пятерочку - пользы кратно больше будет.
отгрузил тебе в рот, чсвшный уебок
>>и что не так? к чему доеб вообще?
- Глобальные переменные, некогда объяснять, вы будете локальными.
Ты, List<Role> roles будешь списком, то есть списочным массивом с одним элементом, увидимся на следующем шаге.
>>и что не так? к чему доеб вообще?
- Глобальные переменные, некогда объяснять, вы будете локальными.
Ты, List<Role> roles будешь списком, то есть списочным массивом с одним элементом, увидимся на следующем шаге.
так я должен же как-то проинициализировать значение в мапе, когда его добавляю впервые, оно у меня - список. он может быть как из 1 элемента, так и из нескольких (у одной персоны может быть несколько ролей). о каких глобальных переменных вообще идет речь? ты хочешь сказать, что List<Role> должна быть глобальной? или что?
>>601858
>>601794
>>601768
с чего ты взял вообще что за меня тут кто-то что-то делает? я только спрашиваю про практики и другие улучшения того, что уже сам сделал, потому что хочу знать как правильно.
>Пусть пиздует разбираться а стримах и прочей хуйне, которую не знает
одно другому не мешает, нахуя ты меня ограничиваешь источником инфы? ты вообще знаешь сколько у меня вкладок блядь открыто с разной инфой? скажи, ты шиз? тебе внимания не уделяли в детстве? или с чего твоя жопа так подорвалась?
>>601746
я в итоге так переписал, стало чуть лучше, вроде... алсо, к стримам надо привыкнуть и про их методы почитать. groupingBy оч полезным в данной ситуации оказался
Кому хочу, тому и отвечаю. Иди лечись лучше.
Вкатун с кинопоиском, все ты правильно делаешь, ты молодец.
Не слушай хуесоса выше. Разве что простыни текста мог бы делать покороче, читать очень сложно.
Я бы тебе помог, но хибера почти не знаю.
Такой дроченый маппинг, тем более написанный руками точно должен быть в сервисе.
Контроллер по-хорошему вообще не должен видеть класс с сущностями, только дтошки.
я уже задавал этот вопрос итт, мне сказал один анон, что надо на практике самому и так и так попробовать, а когда с проблемами столкнусь, тогда и можно будет порассуждать на тему как лучше - в сервисе или в контроллере. алсо, я тоже логически больше склонен к слою в сервисе, но с другой стороны от сервиса же по сути требуется только вернуть обработанные данные, но под обработкой я подразумеваю какие-то специфичные обработки, типа исключения чего-то не нужного, объединения, добавления, запросы мб какие-то другому сервису. а контроллер по сути просто должен или не должен преобразовать эти обработанные данные в DTO.
что думаешь про это? >>601958
еще такой вопрос, если из бд приходит сразу все что нужно, например всего два поля с id и name, нужно ли сверху еще наворачивать абстракцию в виде DTO, которая будет возвращать абсолютно те же данные? я понимаю, что если есть вероятность изменения этих DTO, то об этом можно заранее позаботится, но если такое неизвестно заранее?
В 2020 году начал свой вкат - и сначала я вкатывался в Python, хотел сделать свой YouTube на Django.
Потом вкатывался в JS.
Потом - в Android-разработку, учу Java и Kotlin.
Потом решил вкатиться в блокчейн-разработку - и учил Rust с Solidity.
Теперь, наслушавшись историй про то что IT-рынок сейчас в кризисе, решил идти на бэкенд-разработку - ведь в ней, по словам экспертов, возможности получить работу выше.
Но не могу определиться, куда пойти: в Java Spring или в C# .NET Core.
Параллельно теплится в душе надежда сделать игру на C# Unity и заработать на ней миллионы долларов - после чего стать директором своей Rockstar Games и прикуривать от стодолларовых купюр.
Помогите мне, дайте совет: куда пойти и что делать? Инбч иди нахуй
винда конечно
>>сказал один анон, что надо на практике самому и так и так попробовать
Анон какой то хуеплет попался. Ты конечно можешь как хочешь писать, но каждый первый, кто увидит код, будет тебя заебывать вопросом, а почему у тебя толстые контроллеры, что мешало убрать все в сервисы. Бест практис или шаблонное мышление - уже другой вопрос.
>>от сервиса же по сути требуется только вернуть обработанные данные
там вся логика, он для этого как бы и нужен. У тебя при правильном подходе там ничего и не будет - достал и репозитория, передал мапперу, вернул результат. Но в проде там могут быть еще какие то запросы в другие сервисы, проверка доступов и ролей (чтоб не выдавать фильмы 18+ если ты не указал возраст, например), все что придумает кабаныч
>>а контроллер по сути просто должен
он должен передать запрос в сервис и отдать то что получил, изредка если что то и преобразует это не связано с логикой, а с форматом отображения, ресурсом и тп.
>>преобразовать эти обработанные данные в DTO.
это делает маппер на уровне сервиса. В контроллере тоже конечно можно, эта не считается ошибкой, но маппер может менять данные перегоняеммые между методами внутри сервиса и зачем его тогда лишний раз размазывать по слоям и подключать везде
>>что думаешь про это?
я б мэпстракт использовал, но если не умеешь - то можно конечно и так.
>>нужно ли сверху еще наворачивать абстракцию в виде DTO
ты ж на джаве пишешь - всегда нужно больше абстракций
>если из бд приходит сразу все что нужно, нужно ли сверху еще наворачивать абстракцию в виде DTO
Ну за всех сказать не могу, но у нас обязательно. Для контроллеров есть интерфейсы и они лежат в отдельном апи мавен-сабмодуле, вместе с дтошками. А вся реализация в сабмодуле импл. Ну и апи ничего не знает про импл, импл зависит от апи. Поэтому я вообще не могу отдавать не-дтошки.
Но видел продовый код, где таким не заморачиваются.
>>601958
В архитектуре, на которой я работаю так сделать нельзя, дто ничего не знают про энтити. Можно сделать наоборот, ебануть конвертер внутри энтити, но это тоже не очень. Лучше иметь отдельный метод контвертер в сервисе или класс-конвертер, или маппить с помощью библиотек.
в данном случае это была метаирония
Абстракции конечно хуево ооп пидоры до сих пор лепят интерфейс для единственного сервиса, но джава это обычно сурьезный бизнес и попавшая на слой представления ентити может потом создать проблемы, поэтому лучше сразу привыкать писать везде полностью контролируемые дто.
Забей чел. Вкатывайся в Java Legacy.
Тоесть найди компанию которая поддерживает говно динозавра, и просто чиль и хуй пинай
Нет, смысла нет. Я переходил, чтобы поиграть с windows subsystem for android. Поиграл и забил.
В остальном разницы не вижу.
Пишут на 8 джаве или ниже.
Это закрывающий тег?
Все просто, чекай пакеты. Если пакет начинается с jakarta.persistence (как у Entity), значит это JPA. Если org.hibernate - значит хибернейт. Ну а если org.springframework.data - значит Spring Data.
Глилой ты ебаный кусок дерьма.
А вот ответь, козлина, кому тогда отвечать то? Очередному сотому по счету нытику, проходящему в прямом эфире пять стадий принятия, задерживаясь на торге и депрессии, вместо того чтоб взять и хоть что то попытаться сделать? Кинопоиск-анон хоть пытается понять и хоть пробует штуки, собирает грабли и учится, вместо того чтобы в тысячный раз на двощах разжечь тупой и бессмысленный срач с шарпистами, выклянчить роадмап или поплакать о том, что вакух на стажерство не осталось в РФ.
Презираю таких как вы. Кинопоск-куну мое уважение.
Согласен с предыдущим аноном. Если есть какая-то логика в маппинге, то у нас на проекте создается маппер-сервис и в нем методы toDto(), toEntity(). Если логики нет, то просто используй jackson, встроенный в спринг.
new ObjectMapper().convertValue(entity, EntityDto.class)
алсо new ObjectMapper() можно просто инжектнуть
>Анон какой то хуеплет попался
Сам ты хуеплет блять. Хули толку челика вдобавок еще и бестпрактисами душить? Таких душнил и без тебя у него на будущей работе хватать будет, он еще тридцать раз от них выгорит и станет постоянным клиентом у какого нибудь психотерапевта, ибо иначе с вами уродами работать тупо не возможно.
У него и без практисов щас приключений хватает. Пусть доделает проект до конца, хоть по-говенному, но до конца, чтоб работало.
Хуя ты порвался, большинство сами сидят и разбираются, а не на двощах срут своими простынями. Надеюсь этот вкатун к тебе в контору попадет и будет подходить каждый час спрашивать как комит сделать, спок, шиз.
>>бестпрактисами душить?
Чел не знает как правильно и спрашивает совета, а ты ему говоришь "делай как хочешь" - считай что нахуй посылаешь. Он сам не знает как хочет.
>>Таких душнил и без тебя у него на будущей работе хватать будет
Хуй знает повезло мне так или нет, но мне ни раньше ни сейчас никто почти не говорит как же правильно. Может "душнить" не хотят, а может и сами нихуя не знают. А может просто всем похуй - твой код ты и ебись.
Критика по существу лучше равнодушия.
>>он еще тридцать раз от них выгорит
Потому и выгорит, что не знает как надо. На работке и так куча всего нового будет, чтоб еще и охуевать, что последний год делал все неправильно и теперь надо переучиваться.
>>иначе с вами уродами работать тупо не возможно.
Тут двачую, спрашиваешь как правильно принято у вас уебков, а такой тебе отвечает "пук среньк делай как считаешь правильным".
Всегда проще сначала научиться идти по рельсам, а не блуждать в потемках.
>>У него и без практисов щас приключений хватает.
Ему эти беспрактисы помогут пройти приключения проще. Их не просто так придумали и назвали соответсвенно..
Ну и заебись. Я много людей менторил и онбордил, мне не западло на вопросы вкатунам отвечать. А вот с таким гнильем как ты я бы предпочел никогда не работать.
Ок, как скажешь. Считай так если хошь, я буду считать иначе.
Мне это дерьмо джавистское под названием "бест практисы" всегда мешало. А решенная до конца задача - всегда мотивировала двигаться дальше. И по настоящему расти в синьорность я стал только тогда, когда пришел для себя к выводу, что "бестпрактисы" - всего лишь не имеющий под собой никаких обьективных обоснований свод пустых стереотипов. Фанаты "бестпрактисов" и их поделки, попадавшиеся мне по пути, редко из себя представляли хоть что-то достойное, поэтому сорян за мой скепсис, я никогда не стану пропагандировать это дерьмо. Сами варитесь в этом котле. Я - по обьективным вещам, а не по фанбойству.
Это копия, сохраненная 6 апреля 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.