Программирование 😎 — это не столько про анальное крудошлёпство😏, сколько про стиль мышления🤔. Высокоуровневая☝ абстракция, поиск сходных черт, оптимизация — всё это высшие интеллектуальные способности, что образуют такой прочный симбиоз с программированием на Java😜.
работяги, у меня тут встал вапрос, разве инъекция зависимостей в спринге не противоречит принципу ооп?
ооп говорит о том, что данные объекта должны обрабатываться методами этого самого объекта, например, есть спринг приложение с некоторым пользователем, у пользователя надо обновить поля, штобы ничего не пошто по пизде неплохо было бы вытянуть пользователя из базы по ид, переписать ему поля и засунуть обратно на базу. вот тут мы и подходим к тому, что, по идее, это самое доставание из базы и сравнение полей должно быть методами пользователя, но ебучий спринг не дает ничего заинжектить в ентити. получается, нам нужно делать утилитный дао класс, а утилитные классы не оч сочитаются с ооп, так сказатб, антипаттерн. собсна где правда, везде кричат про ооп, а по факту, самый распространенный фреймворк использует mvc паттерн, который ниразу не ооп... может я чето проебал и mvc и ооп отлично сочитаются?
и еще, нахуя нужен слой сервис, дао обмазывает объекты логикой, контроллер обрабатывает запросы, а сервис тупа по середине? просто штобы вся хуйня не портила вид контроллера?
>>2731528 > работяги, у меня тут встал вапрос, разве инъекция зависимостей в спринге не противоречит принципу ооп? В джаве на хую вертели ООП. Была бы поддержка процедур - классы никто бы не юзал. > и еще, нахуя нужен слой сервис, дао обмазывает объекты логикой, контроллер обрабатывает запросы, а сервис тупа по середине? просто штобы вся хуйня не портила вид контроллера? Поймёшь, когда увидишь сервисы в 50 раз объёмнее DAO.
>>2731528 > что данные объекта должны обрабатываться методами этого самого объекта добро пожаловать в последователи бугаенко. В идеале не должно быть геттеров и сеттеров, должна быть логика и вычисления прям внутри классов
Не так. Это не в джаве вертели на хую ООП, это джависты вертели на хую ООП. Джависты в прошлом - коболисты, дедам переход с процедур на ООП дался тяжело.
>>2731561 И статические инициализаторы, и нестатические инициализаторы, и инициализация полей - все это само по себе такой же байткод, какой и весь остальной код. Твой вопрос не имеет смысла, переформулируй.
Парни, а где джава сейчас вообще используется в коммерческой разработке? Сбер? Там переходы на ГО. Джава это легасиговно. Тинькофф? Там даже на си решетку переходят. Яндекс? Ровно один проект, причем самый днищенский маркет. ВК? Пара проектов И так можно до бесконечности...
>>2731922 > Сбер? Там переходы на ГО. Джава это легасиговно. Ты про какой Сбер? В моём Сбере дохуя новых проектов пишут на 11/17 жабе, а Go только у пары хипстеров с геймификацией, хайпом HR и другими нахлебниками, не относящимися к основному профилю организации.
>>2731917 Кто бы что ни говорил, но "Git за вечер" можно выучить, только поебавшись перед этим несколько месяцев с SVN, Mercurial, CVS, Perforce и другим подобным говном. Множество способов сделать одно и то же, дохуя нюансов, дохуя новых концепций, которые без реального опыта сложно понять.
>>2732177 Понятно. Мне бы хотелось прочитать мнение именно пользователя макбука, т.к. у пользователей виндовых ноутбуков в превалирующем большинстве случаев мнение ангажированно и необъективно. Запускал идею, докер, постгрес сервер на прошке 2013 года, и всё работает более-менее сносно, при тех параметрах что у него есть. Боюсь представить, что там будет на современном железе.
>>2732177 > Идея часто подтормаживает. Как интересно. У меня i5 10-го поколения, и ничего не подтормаживает, хотя могу запускать по 3 штуки одновременно (бэкенд, фронтэнд и crm).
>>2732465 Эти 8 гигов у тебя хром выжрет в одно ебало, а тебе еще идею кормить. А это - еще минимум комфорта. По максимуму прикольно еще докер с СУБДшками держать под рукой.
И ладно бы это был картонный бомженоут десятилетнего возраста за карманные деньги, я бы понял тебя, мол, черная полоса у чувака, денег нет, а вертеться надо. Нахуя связываться с анальным яблоком при таких вводных - вообще не понятно.
Я в свое время на 16гиговом маке сидел, мне не хватало, 8 это вообще забей.
И это еще при условии что ты свалил. Если ты до сих пор в РФ, с маком ты - анальный заложник пидарасов, которые тебе в любой момент поддержку выключат в рамках очередного витка санкций, и будешь как дурак, отвалимши кучу баксов пидарасам за брэнд, через 30 слоев выпиена доказывать всем что ты не верблюд.
>>2730933 (OP) Программирование 👩💻 — это не столько про анальное крудошлёпство 🍩👋, сколько про стиль мышления🤔. Высокоуровневая абстракция 🙏🛐, поиск сходных черт 🦧🔎🐷🔰👶, оптимизация 🐒📉💥 — всё это высшие интеллектуальные способности 🧠, что образуют такой прочный симбиоз 👉👌 с программированием на Java ☕😜.
>>2730933 (OP) У вас есть стек любимых технологий, которые вы опробовали на многих проектах и он каждый раз давал вам качественный результат? Какой он?
>>2732787 Эта хуйня походу подыхает после начала сво. В ковидные денежные годы у нас жадный кабаныч выделил бабок дотнетчикам и увеличил им команду, но после всех событий тот проект закрыли и челов переучили на спринг
>>2733109 Ещё там мержить и ребейзить надо уметь и понимать плюсы и минусы обоих подходов. Я вот мерж более менее понял, а от ребейза у меня голова разболелась.
>>2733109 > create branch Специально для джавистов надо сделать систему контроля версий, которой будет нереально пользоваться без автодополнения. Типа gitVersionControlSystemCreateBranchIfNotExistsGayLongCocksSuckRequiredTransactional.
>>2733167 Я не могу писать в блокноте, потому что сейчас требование везде - это идея. Современный джавист - это идея-разработчик. Все гайды по джаве - это как найти нужную кнопочку в идее. Вот буквально сегодня искал инфу по JUnit и 90% гайдов - это про идею как там вызвать нужное меню и прожать нужные галочки, чтобы сформировались заготовки тестов.
>>2733175 Нужна проприетарная серверная версия идеи, как рантайм для выполнения IdeaLang. Будут ставить серверную идею вместо серверов приложений, и на ней хостить приложуху.
Если ты этот класс скомпилируешь, ты получишь файл Zalupa.class, в котором будет байткод класса Zalupa.
И если ты потом сделаешь javap -c -p -s -l Zalupa.class, ты увидишь содержимое байткода класса, как на пикрил 2. Если присмотришься, то на пикриле 2 увидишь байткод всех 4х языковых конструкций (правда компилятор сделал еще свои преобразования, из-за чего статическая переменная инициализируется в блоке static, а блок инициализации приклеился в начало конструктора, но не суть).
Все это - байткод. Включая конструктор. О каком bytecode execution'е ты спрашиваешь, который идет раньше или позже чего то, если ВСЕ из тобою вышеперечисленного - байткод? Твой вопрос тупо - оксюморон и не имеет смысла. Опиши чего добиться пытаешься, какую задачу решаешь.
Кстати, мавена это тоже касается. А то сделали, понимаешь, удобную тулзу для запуска из командной строки, слишком просто. orgApacheMavenBuildPomXmlProjectHugeNiggaPenisInsideYourButtWithCleaningTargetDirectoriesAndInstallationToLocalRepository
>>2733429 > Че там на счет зп студенту 40к до вычета налогов. > шкиле Бесплатная рабочая сила. > Разраебка плагинов для майнкрафта Платить будешь ты, ещё и должен останешься.
Какая сейчас средняя зепка у миддла с 3х летним опытом? Где-то блять 200-250 указывают, где-то 120-130, какие-то поехавшие вообще 100-120 рисуют. Кабаны-суки в вакансиях ничего не указывают, только обещания "платить в среднем по рынку", а какая блять эта средняя цена
>>2733497 Явно меньше чем на великом дотнете (на котором пишут весь импортозамещающий софт топ конторы), потому что на вакансию джава миддла приходит по 500 челов в неделю
>>2733159 Встречный вопрос. В чем проблема не быть нытиком ебаным, и смотреть на вещи обьективно? Идея тяжелая по двум причинам: 1. Плагины 2. Анализаторы
И то и другое отключается, после чего идея жрет не больше браузера. Если для тебя и этого мало, ной дальше - "в чем проблема сделать легковесный браузер в 2023м году", блять.
>>2730933 (OP) Как в принципе глубоко понимать фреймворки по типу спринга? Если нужно что-то сделать, что выходит за границы гайдов и их кривой документации, которая не покрывает и сотой части того, что происходит в реальном проекте, то тут же начинаешь закапываться в интернете и перелистывать сайт за сайтом, в попытках накопать информацию. При этом с годами лучше не становится и спринг давит своей монструозностью и нелепостью. Какие-то совсем простые вещи делаются на автомате. Начинаешь копать глубже и вот уже дока этого не покрывает, лезешь на гитхаб ишьюс, стековерфлоу и прочие сайты, где люди постят воркэраунды, багрепорты и прочее
>>2731906 >>Джависты в прошлом - коболисты Те кто еще живой переходили на жабу/шарп с плюсов, иногда с паскаля. Кобол на западе был, в РФ его никто и не видел даже.
>>переход с процедур на ООП ОПП остался где то в жабе 7
>>2733109 git checkout -b foo но это не точно, я в идее кнопочку New Branch тыкаю
>>2733131 раз в полгода надо что то черипикнуть или заребейзить - погуглить проще чем запоминать эту ебень
>>2733134 >>Специально для джавистов надо сделать систему контроля версий так в идее все есть - кнопку нажал и все работает. не надо с консольками пердолиться. и автодополнение в комментах есть.
>>2734352 Ну посидел денег в инете - нашел ответ. Че сложного то? Ясен хуй в доке тебе не напишут что мы тут проебались и в версии 2.28 был баг, но в 14.88 его починили. А если что - вот костыль.
>>2734352 >Если нужно что-то сделать, что выходит за границы гайдов и их кривой документации
...то ты закрываешь пасть и делаешь как в рекомендуют в гайдах (ничего личного). Иначе ты начинаешь входить в конфликт со спринговой магией и спринг превращается из няшки в твой персональный анальный кошмар.
Усвой темы типа бинпостпроцессоров и написания своих стартеров. Смотри видосы евангелистов типа Борисова про кишки спринга.
>то тут же начинаешь закапываться в интернете и перелистывать сайт за сайтом, в попытках накопать информацию
Открой для себя стековерфлоу (не как источник для гугления, а именно как площадку, куда ты можешь свой вопрос задать). Без шуток. Спрингодевелоперы там часто отвечают, если вопрос задаешь грамотно.
Еще, учись дебажить. Развивай общую эрудицию касательно того, как работает джава и ее отдельные фичи, тогда механизмы спринга будут понятны прям из кода и гайдов. Ну и возьми за привычку спрашивать конкретику, а не абстрактную хуету, иначе с 75% вероятностью будешь послан нахуй как троль-шарпист.
Шалом, анон. РУками написал скуль и надо подружить это с энтитями Как сказать энтити через какую промежуточную таблицу делается many-to-many, если я не хочу делать для этой таблицы отдельную энтити? Ее вообще не должно быть видно. типа такого @ManyToMany(mappedBy = "roles", table="r_user_role") private Set<User> users;
>>2731528 Принципы ООП в целом абстрактная хуйня для академиков. Им следует только всякая студентота и зелёные. Если понаблюдаешь за своими дедами, поймёшь, что в реальной разработке всякие принципы и паттерны практически никак не используются. Опытные прогают по ТЗ, без переусложнения на ровном месте. Архитектура кода также на 80% складывается из ТЗ и текущей архитектуры. Никаких значительных изменений там нет и быть не должно, если ТЗ конечно пишут не полные наркоманы, что в бизнесе исключено: это слишком дорого. В принципы и паттерны код никто, ну кроме студентоты, специально не укладывает. В реальной разработке никаких принципов в принципе нет: как удобно, так логику и разбивают. Просто так получается, что большинство таких решения так или иначе можно описать этими принципами и паттернами, поэтому они и существуют. Но в реальной разработке их используют не для проектирования, и именно для описания, для объяснения. Т.е. ситуация диаметрально противоположная ожиданиям студентоты: они думают что принципы первичны, что естественно, ведь их с них и начинали учить, чтобы объяснять теорию опираясь на некий общепринятый словарь, но на самом деле принципы вторичны, их используют только для объяснения устройства и работы кода, как раз как общепринятый словарь, чтобы все понимали о чем речь. А все потому, что разработка по своей сути процесс нестандартный, творческий. Весь код принципами описать невозможно, только какие-то отдельные высокоуровневые составные части. На низком уровне слишком много скрытых нюансов. Поэтому у студентоты постоянно горит от реального кода: все не так, как учили, везде не по канону, везде нарушают. До них начинает доходить, только когда они увидят, что этот код написан не зеленым рукожопом, а опытным дедом, который тебя за пояс заткнет в любой задаче. Опять же причина воспламенений в том, что студентота зелёная: она ещё не видит всей картины в целом, и мыслит только базовыми теоретическими примитивами, воспринимает все слишком близко и буквально. Тот же DI например с точки зрения принципов лютый треш: код, который занимается тем, что с помощью грязных хаков залазит внутрь объектов и меняет их состояние произвольным образом, игнорируя области видимости и любые правила приличия. И формально это так и есть. Но существует он и используется не в рамках ООП принципов, а в перпендикулярной им плоскости: это архитектурный компонент, его задача сформировать архитектуру приложения, а не следовать ООП принципам. Его никто не наследует, и вызывают только один раз за все приложение: в ООП он вообще никак не используется. Зато он обеспечивает возможность существования ООП в приложении, пусть и путем некой магии, для непосвящённых. И в целом такие решения вполне оправданы. Конечно в реальности они встречаются редко, но только из-за того, что решают нерешаемые легальными способами задачи, поэтому знать их нужно: это такой же инструмент, как и остальные. В 99 задачах он не пригодится, но зато в одной выстрелит, сэкономит много сил и времени, позволит оставить архитектуру более чистой и простой, и тем самым многократно окупит затраты на свое изучение.
org.hibernate.dialect.MySQL57Dialect - ChatGPT сказал что именно такая версия мне подходит, хотя в уроке Заура Трегулова указано следующее: <property name="dialect">org.hibernate.dialect.MySQLDialect</property> - когда в файле hibernate.cfg.xml указываю эту строчку, Интележи Айдия подчеркивает красным и пишет: Invalid Hibernate XML Configuration
>>2731979 Выучить - тупо звучит. Это не то что нужно учить или зубрить. Это просто прикладной инструмент - его надо осваивать, а не учить. А то некоторые его по 2-3 года "учат", и все без толку. Хотя осваивать его реально часа 4. Смотри сам: чтобы понять что такое git, нужно понять что такое коммит, как коммиты между собой связаны, как и где они хранятся, понять концепцию меток: хеши, ветки, теги. Понять концепцию репозиториев. И понять как с этим можно работать: как создать коммит, как его удалить, как создать и удалить ветку, как переключаться между ветками и коммитами, как подтягивать историю из внешней репы и выгружать туда свою. Это реально маленький объем информации. И для старта вообще достаточно понять как добавлять ветки и коммиты и отправлять их а origin Даже если брать консольку - это всего несколько команд: add, checkout, pull, push Все, этого с головой хватит для обычной работы По мере роста потребностей можно постепенно осваивать дополнительные команды: log, branch, init, merge, rebase, cherry-pick, revert, reflog. Но это уже специфика: некоторые о reflog через 2-3 года попыток "выучить" git узнают - так медленно у людей растут потребности. То есть до этого они с такими ситуациями, где нужен reflog, просто не встречались. К тому же большинство разработчиков в git ходят через IDE/GUI, то есть с консолькой практически не контактируют - им даже команды осваивать потребности нет, достаточно заиметь понятие о самих концепциях git: что есть коммит, что есть ветка, что есть репа.
Так что да, освоить git за вечер вполне реально, если не ебланить и не отвлекаться на всякие соцсети/ютубики/мессенджеры, которые сожрут 80% времени, внимания и мотивации что-то делать. Я не верю что кто-то не может понять что есть коммит, это же простейшая концепция.
>>2735265 Не "поэтому", а потому что тебе влом как следует изучить HTTP и как настраивать свой фреймворк.
В целом похуй на тебя, делай что хочешь. Просто тебя с некоторой вероятностью нахуй пошлют, если ты по таким лекалам RESTful будешь делать, но камон, как будто первый раз где то кто-то лабает всратое не имеющее стандартов API. Как жили в дерьме, так и сдохнем в дерьме видимо...
Хедер есть такой в HTTP. Accept называется. Если ты реквест пошлешь с "Accept: application/json", сервер не пришлет тебе никакого HTML. Или JSON пришлет, или 415-й статус код, если MIME на сервере не поддердживается.
>>2735316 Я те вроде уже все сказал - делай что хочешь. Не нравится следовать RESTful - городи поверх HTTP свои правила, только не удивляйся что твое API ненавидят и нахуй шлют с такими инициативами. От меня тебе че еще надо? Те сказали что двухсотка на ошибки - не RESTful и не канон: что ты в ответ доказать то пытаешься? Что ты - хуи не сосал? Что RESTful нинужон? Что 200 - это ок но не всегда? Что?
>"отчёт не сведён"
Если запрос на сведение отчета был валиден и легитимен, но на сервере что-то не сошлось во время выполнения сведения, то 500. Если проблема была с запросом, то один из 4 кодов, в зависимости от того, что с запросом было не так.
Более того, если ты все делаешь правильно, клиенту зачастую и не будет нужды лезть в боди. Если статус - 404, один хуй ясно что запрашиваемая клиентом сущность не найдена - зачем в боди то лезть? Или, если статус - 403, один хуй ясно что надо юзера редиректить на логин, или говорить что у него нет привилегий. Многое браузер за тебя сам сделает, например перепошлет запрос на новый location, если получит 302.
В этом и цимес стандартов - на HTTP много че подвязано и в браузерах, и в серверах, и в прочих узлах типа прокси или CDN. А вы берете и просто такие - "а, ебал я стандарты", и в итоге все заново переизобретаете. Или лабаете куцую хуйню которую потом другие люди заебутся интегрировать.
>>2735360 фронту надо сообщить что данная операция неуспешна по причине "бюджет не сведён". Какой http код отвечает за несведённый бюджет?
>Делай свой раз дефолтный не подошел. так не я отвечаю. Между мной и клиентом 100500 посредников, и каждый может выдать хтмл/json заглушку. Ты почему-то ориентируешься только на успешный сценарий, когда всё везде работает
> Если статус - 404, один хуй ясно что запрашиваемая клиентом сущность не найдена - зачем в боди то лезть? PUT /order/adress 404 оно относится к order, к adress, к неправильному урл или отсутствию приложухи на сервере?
Дежурно напоминаю, что HTTP предназначен для передачи гипертекста и коды состояния HTTP должен отдавать веб-сервер, а не приложение, которое вы накостыливаете поверх HTTP.
>>2735399 >фронту надо сообщить что данная операция неуспешна по причине "бюджет не сведён". Какой http код отвечает за несведённый бюджет?
Ты тупишь чтоли, или я с нейронкой ебаной общаюсь щас? У тебя боди есть - вот там и сообщай что хотел клиенту. Только не со статусом 200, а со статусом 500.
>и каждый может выдать хтмл/json заглушку
Если ты шлешь Accept в реквесте, то они не имеют право слать тебе в ответ что-то другое. А если по факту шлют, значит - не правы, и должны быть пофикшены.
>PUT /order/adress - 404
Это троллинг тупостью чтоли? Ты PUTом ресурс запрашиваешь чтоли, чтобы оно тебе отвечало "The server can not find the requested resource", или что?
>>2735411 > У тебя боди есть - вот там и сообщай что хотел клиенту. Только не со статусом 200, а со статусом 500. клиент читает боди при 500 @ приходит реальная 500 с заглушкой @ фронт, жидко пёрнув, умирает
Дальше, проблема с мониторингом. Это не 500, это стандартная ситуация, не нужно никому сигнализировать и рисовать красные экраны. Как отличить штатное сообщение валидации и реальное падение?
>А если по факту шлют, значит - не правы, и должны быть пофикшены. шлёт шлюз провайдера клиента @ эй, сраный билайн, фикси свои сервера
>Это троллинг тупостью чтоли? шлёшь PUT /order/10/adress/20 body {newValue} 404 относится к ордеру, к адресу, к приложухе, или что ты урл неправильно сформировал?
>>2735721 не. Content Type это сервер отсылает, обозначая тип данных. А Accept Header это клиент, типа я могу обрабатывать только такой формат. Но это совет, мало кто эти хедеры читает
>>2735730 Content-Type может быть еще и в реквесте, если этим реквестом ты через POST или PUT передаешь контент на сервер. По этому хедеру сервер будет судить - что ты ему передал.
>>2735732 если ты заведуешь ручкой - то ты эти хедеры и должен обрабатывать. Но проблема что если на сервере или на гейтвеях проблемы, то до ручки запрос не доходит, и там уж как реализованы все эти нгинксы и томкаты, хз читают ли они эти хедеры и умеют ли они отдавать заглушки в жсоне. Я вот сомневаюсь.
>>2735736 Ну вот присылает мне клиет с access'ом xml а мой эндпоинт отдает Json. В консоли я увижу что-то типо: Resolved: [Incorrect type],а клиент что увидит?
>>2735738 Чтобы отвечать на тупые вопросы, надо задать тупые вопросы. А выше по треду был только спор по рестфул душный какой то. Где твой тупой вопрос?
>>2735742 Та за шо. >>2735743 Он в процессе формирования. Просто по своему опыту помню, что я вот про эту простейшую семантику даже не знал, но тем не менее что-то писал многопоточное. Ахуенные рассуждения у меня, конечно, выходили. Чувствую, что со спрингом будет x2.
Твой эндпойнт не просто отдаст джсон, он отдаст его с хедером Content-Type: application/json. По которому потребитель уже имеет шанс понять что пошло чето не так. Помимо этого есть хедер Server, и ты еще своих хедеров набашлять можешь для разных нужд.
>>2734755 >>2734795 Я устал. Одного понять не могу - как вы можете днями напролет заниматься этим? Буквально на начальном этапе создания базы данных и связывания ее с IDE запутался, ничего не робит, и гугл не помогает решить вопрос. Вам нравится такими вещами заниматься?
>>2735791 >>на начальном этапе создания базы данных и одна команда в консольке - docker run всякие параметры postgres >>связывания ее с IDE запутался На это секунд 15 трачу. Надо ж просто 4 строчки заполнить адрес/порт/логин/пароль. И test connection можно прожать.
>>Вам нравится такими вещами заниматься? Код писать нравится. Это как медитация. Отдыхаешь от всякой дневной хуиты пока пишешь код.
>>2735452 Вот тебе пруфы https://securepayments.sberbank.ru/wiki/doku.php/integration:api:rest:requests:register Сбер шлет при ошибках 200, код ошибки в теле json ответа Ну не может же сбер, айти компания номер один, ошибаться, верно? Тупо конечно, но это стандартная практика в мире CMS-интеграторов, которые клепают 80% всех сайтиков, и нифига толком не могут в программирование, на них и ориентируется весь бизнес
>>2735370 А если это сайтик или приложуха, и им не интересно перебирать десяток кодов? У них всего два варианта ответа: "ой, что-то пошло не так, попробуйте ещё раз" и "форма отправлена успешно". Так что любой ответ они парсят и проверяют всего двумя условиями: если json не пустой и содержит флаг ошибки - выводим ошибку, иначе выводим успех
>>2735791 Писать код - это как слушать музыку, как полет, как серфинг или спуск на лыжах, захватывающе, восторг на грани со страхом. Надоесть может, через много лет, но пока ты плывешь по волнам, в потоке, это охуенно. Иногда сложно, иногда легко, иногда с горочки со свистом, иногда филигранно обходишь сложное препятствие. Мозг все время работает, анализирует, выдает решения - ты чувствуешь как жизнь бьёт ключом. Эндорфины прут, тебе хорошо, ты все можешь. Ты летишь в неизвестность, в темноту, и не знаешь что оттуда на тебя вылетит, справишься ли ты. Но успех от решённых задач подбадривает и говорит о том что справишься - справился же с сотнями сложных проблем ранее, значит все говорит в пользу того что и новые тебе покорятся. Бесконечный подъем наверх, с каждым разом покоряет все более сложные высоты. Пока ты активен и здоров, пока ты имеешь силы и возможности - разве может это надоесть? Программирование становится не интересно только в болезни - тогда тебе плохо, у тебя нет ресурса думать, просто лежишь и слюни пускает, тебе уже не до программирования.
Как же всрато выглядит JPA Criteria Query после хибернейтовских запросов, это просто пиздец. Аж писать ничего не хочется, когда вспоминаешь, что придётся изучать эту нелепую махину с кучей оверхеда и какого-то одному JPA нужного кода, который мне половину метода засрёт и усложнит его чтение.
А ведь мог просто брать и писать запросы на хибернейтовских критериях. С ветерком и на чиле. И потом сидеть и спокойно читать эту лаконичную красоту. На кой хуй их задепрекейтили бляяяяять
Я неудачный вкатун в жабу. Год учился, нихуя там и не смог даже на собес попасть, хотя откликов сделал навалом. Сейчас мне нужно на вордпрессе одну хуйню сделать, полез вспоминать php. Бля, какое же дно. Как же там не хватает всей этой привичной строгой типизации, обязательного ООП... Все же Джава пиздатый язык.
>>2736645 Из-за таких как ты и не стали учить. Никакой синтаксический сахар и перспективы вката не окупят убитую психику от работы в команде с шарпистами ебаными.
>>2736707 Альберт Степанцев - автор курсов по РНР. Если бы такие классные курсы были по джаве, то может быть и на джаву ещё попытался. Но тут и курсов крутых нет и шансы вката минимальные.
шалом как сделать так, чтобы при сохранении через jparepository, когда срабатывает save, ДО него вызвался мой код и изменил кое-что в сохраняемой сущности я хочу сделать generalEntity с датой создания и модификации, от него все унаследовать и перехватывать сохранение. Есть способы лучше так сделать?
>>2736719 Когда надоест заниматься ерундой, то скачай курс Альберта и увидишь как он учит программированию. Я за пару недель так прокачался, как не смог за 4 года в универе.
>>2736723 >Когда надоест заниматься ерундой Ерунда не ерунда, но ты подумай, почему в иммутабельном объекте, который дает ряд гарантий в многопотоке, есть мутабельные поля, которые перезаписываются.
володенька, массивы в жабе действительно такие хуёвые, что нельзя инициализировать массив объектов через фабрику, которая выплёвывает один объект? только через конструктор или пердолить как все через ArrayList? чисто академический интерес.
вот пример на яблоках:
class Polka{ Apple[][];
Polka(int cols, int rows){ this.Polka = new Apple[rows][cols]; // хуёво, так как Apple не может в правильный конструктор // нужный Apple можно получить только от getApple() } }
>>2736906 Просто смирись с мыслью, что для в любых подобных задачах надо писать 100500 строк бойлерплейта. Здесь нет изящных и удобных решений в одну строку.
>>2736938 Хотя проще так как-то сделать: public static <T> T get(T[] arr, int i) { return arr; }
public static <T> T get(T[][] arr, int i, int j) { return arr[j]; } Сомневаюсь, что где-то нужны большие массивы, хотя интересно можно ли как-то с помощью дженериков скалякать геттер произвольной dimensions. Впрочем не совсем понятно нафига это может понадобится.
>>2736949 Ну главная проблема коллекций, что project valhalla все еще где-то там, далеко. Так что примитивы пока что только в них храним. Или похуй уже?
>>2736980 Тут и перфоманс в том числе. Ряд оптимизаций жвм просто невозможен. Да и аллокации время занимают. Ну и а байты считать смешно, конечно. Из-за таких как ты жаба и считается монстром, что жрёт дохуя оперативы. Типа, а хули нам используем LinkedList<Boolean>, норм тема.
>>2736982 >Из-за таких как ты жаба и считается монстром, что жрёт дохуя оперативы.
Среди пердунов и шовинистов каких то разве что. Эти удавятся за лишний байт в оперативе, хотя их душнина обходится кабанам в стотыщ миллионов раз дороже той доли оперативы, за который они воюют. Остальным - давно похуй, заворачивают гуишки в электрон и в ус не дуют.
Ты обьясни - че конкретно за прикол ты с этими ебаными яблоками то пытаешься сделать? Из твоего исходного мессага ж нихуя не понятно, но очень интересно.
>>2736986 >Ты обьясни - че конкретно за прикол ты с этими ебаными яблоками то пытаешься сделать? По ветке можно было понять, что это не мой пост. Я просто решение через рефлексию предложил. Ну и еще интересно стало, можно ли как-то type-safe сделать через женерики для произвольной размерности массива. >Эти удавятся за лишний байт в оперативе Ну я просто не считаю делать анбоксинг и боксинг, если этого можно избежать.
>>2736992 >Жду проекта вальхала, когда там его допилят. Окей, подождем.
Так а яблоки че? Я чекнул твой солюшен с рефлексией, и все равно не врубаюсь ни в постановку проблемы, ни в смысл решения. Чел вроде бы создает массив, а ты наоборот getаешь. Как ты интерпретировал его шизофазию?
>>2736993 Ну как я понял, ему нужно массив любых размерностей через метод создавать. Т.е. не только длина может изменятся, но и размерность. Вот только хуй знает где это может понадобится. Гет тут нужен, чтобы с таким объектом работать.
>>2736994 Я хз где ты это там увидел, конечно. Или ты - лютый психиатр, или кто то из нас поехавший.
Вообще, он там чето об инициализации массива бугуртил, что типа через фабрику нельзя (схуяли?). Конструктор у яблока вишь ли у него неправильный. Короче я ебал, не моего ума видимо загадка.
>>2736994 не, мне нужен двухмерный массив объектов, объекты нельзя создать конструктором (ихоняя api говорит, что от этого жопа треснет), а только через сторонний метод. так что Apples[][] apples = new Apples[rows][cols]() не прокатит. массив фиксированн по размеру и меняться никогда не будет, коллекция не нужна, от apples.get(row).get(col) вместо apples[row][col] у меня дёргается глаз.
>>2737013 >объекты нельзя создать конструктором Яблочки низя создать без конструктора? Технически, и wrapped классы нельзя по ним, точнее не желательно. Не понимаю в чем проблема.
>>2737023 Ну как бы да. Массив - это отдельный объект, опосредованно связанный с классом, который он определяет. Я тебе еще по интегеру это же сказал. Удачи там.
Когда я имел секс с нативной грааль сборкой, сначала была ебля с конфигами reflection metadata. Потом - похожая ебля с Unsafe. Лично я сдался, когда мне попалась зависимость с JNI вставками. В твоем случае спринг может быть сделал многие вещи за тебя из коробки. А может и не сделал, лол.
>>2736453 Все так, бро Сам на php много лет зарабатывал, теперь перекатываюсь в java В разработке php частенько не хватало строгости java Со временем сложилось понимание, что на php ничего нормального в принципе не построить Язык поощряет срезать углы и говнокодить, что и обрекает любой сложный проект на смерть В одно лицо крупные проекты не пилятся, а нормальную команду на php собрать вообще нереально: с одной стороны язык поощряет говнокод, шанс найти нормального программера на php мал, с другой стороны php выбирают чтобы максимально сэкономить на разработке, так что бюджеты на команды маленькие, что тоже не способствует найму профи Типичная php-команда: недосенька, который все тащит, несколько типа "мидлов", и пучок "крепких джунов", которые не знают даже базы и по всем стандартам могут тянуть только на стажеров. Из всех них программером можно обозвать сеньку, и то с натяжкой - зачастую и у него с базой непорядок Также php серьезно губят cms: 80% вакансий под программером понимают некого студента, который будет натягивать шаблоны на cms, и не более. Самим же программерам с cms связываться никакого резона: опыт подобной копрофилии им вообще нигде не пригодится Вот и получается что на php работы много, но по большей части она низкооплачиваемая и низкоквалифицированная
На java пока напрягает только разговоры о том, что нет фриланса и удаленки - это было бы печально, от удаленки и той свободы что она дает отказываться не хотелось бы
>>2737709 >Типичная php-команда: недосенька, который все тащит, несколько типа "мидлов", и пучок "крепких джунов", которые не знают даже базы и по всем стандартам могут тянуть только на стажеров. Из всех них программером можно обозвать сеньку, и то с натяжкой - зачастую и у него с базой непорядок У меня так же выглядит команда на 10 жавистов в небольшой галере. >На java пока напрягает только разговоры о том, что нет фриланса и удаленки фриланса считай нет, удаленка есть, хотя наверно поменьше чем на пыхе. И ее срезают всякие параноики из крупняка. Или режут вообще или переводят на гибрид. Или не разрешают удаленку из других стран или из других городов.
>>2737842 Многие бывшие однокурсники сидят на жабе спокойно и в хуй не дуют на 200к зп. Хуй знает, наверно тоже надо было в жабу идти, жаль 2 года на другой стек проебал.
Блять заебался с этими сетями, дайте совета чё ответить по существу девопсу, а то срёмся уже и даже тимлида подключили. Есть проблема - Connection timeout. Когда происходит общение наших сервисов в кластере то у них стоит дефолтный таймаут в 1 минуту, после чего он падает с 504. Я использую HTTPInterfaces в спринге и потому в конфиг добавил: HttpServiceProxyFactory httpServiceProxyFactory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(searchASTWebClient)) .blockTimeout(Duration.ofMinutes(2)) .build(); Что в принципе везде советуют и при локальном тестировании всё нормально, соединение живёт 2 минуты вместо дефолтной 1 и потом падает. Однако на деве, на кластере, оно всё равно живёт 1 минуту. Мне девопс указывает что ошибка на моей стороне, потому что в логах выдаёт: org.springframework.web.reactive.function.client.WebClientResponseException$GatewayTimeout: 504 Gateway Timeout from POST http://(тут линк на апи в кластере). Однако, я подозреваю, что проблема в кластере, он сам рубит соединение и потому вебклаент так же падает. Опять же, проблему локально я не могу повторить, потому что её просто нет. Вопрос, как мне разобраться в чем проблема? Действительно ли это на k8 кластере у спринга отваливается конфиг прокси?
>>2738496 Ты чекни с девопсом - может между клиентом и сервером на проде есть прокся какая то ебаная, которая рвет коннекшен через минуту вопреки всему по своей инициативе. Например, чекни что в хедере Server у респонза с 504 приходит.
У меня такая же петрушка помню была, из-за чего весь отдел с ума сошел. Кастомерская бага была на то, что "севис отвечает чет медленно, тормозит", а на самом деле бэк сервиса лег под нагрузкой нахуй, а прокся между сервисом и клиентом обрывала коннекшен по таймауту с 504м статусом, который фронтенд тупо саппресил, создавая иллюзию что "все ок". Прикинь мое ебало в тот момент, когда я это нашел?
>>2738603 Тонны нефти, пиздос заебался уже какой день искать в чем проблема. Server действительно прилетает awselb/2.0, сейчас пойду указывать на это. >Прикинь мое ебало в тот момент Да у меня такое же будет, если не разберусь и придётся помидоров из других отделов звать, а проёб моим будет
>>2738614 Не торопись, проведи пару тестов. Например, чекни какой респонз вернется если сервер по своей инициативе в таймаут свалится. Выстави ему 30 сек и так же чекни хедер. А то те не поверят и нахуй пошлют.
>>2738445 В смысле? В java-разработке просто тонны xml. Это и конфиги, и выгрузки, и даже, блджад, апишки xml-шные. Ты этот xml в страшных снах будешь видеть
>>2738770 Meh. Ты преувеличиваешь. Где раньше был XML, давно уже завезли альтернативы. Ну вот назови хоть один XMLник помимо помника мавеновского, с которым ты имел дело последние пару лет?
>>2738445 1. Конфиги на XML, да. Сервер приложений другое не умеет. 2. Пом.хмл, немного анта. 3. Клиент на Delphi работает через SOAP 4. В интеграциях тот же SOAP и кастомные ХМЛ-сообщения, хотя там частично перелезли на кафку с жсоном. Но есть и кафка с ХМЛ, прости господи.
>>2738809 Ну я вроде не работаю на серверах приложений, стек более-менее свежий. Ликвибейс, жук-кодген, логеры всякие. Интеграции на хмлях с кучей древних внутренних и менее древних внешних сервисах. На соапе, ресте, реббите. В спринге хмл видел 2 года назад на проекте, который тогда выл 10-летним легаси. На хибере не видел никогда. В среднем с yml и json я работаю даже чаще чем с xml.
>>2738983 И в чем преимущество перед конструктором? Типо не надо делать 100500 методов для каждой вариации? Хотя по итогу все равно все к нему сводится... Нахуя это надо?
>>2738982 >Опенапи генераторы Это нерабочее говно, которым никто толком не пользуется. Проще руками написать клиент и контроллеры на сервере, чем месяцами дрочиться с генератором, который раз за разом высирает говно. А контракт можно зафиксировать несколькими сообщениями в чате. Все!
Предположим у меня есть программа, которая считывает из памяти другой программы данные. Как мне передать их в жава приложение так, чтоб не писать на диск, а сразу, из памяти в память?
Это все называется и гуглится по термину - Inter-Process Communication (или IPC)
>Как мне передать их в жава приложение так, чтоб не писать на диск, а сразу, из памяти в память?
Сокеты, пайпы. В теории максимальбно близкий по твоему описанию IPC - это shared memory, но в джаве оно не поддерживается (и это - к лучшему, на самом деле). Также, не спеши по критерию "Чтоб не писать на диск" отсеивать файлы как таковые - в юниксах многие вещи в виде файлов существуют, например, именованные каналы.
>>2739185 Можно ещё сделать веб-приложение на spring и отсылать туда данные с памяти с get/post запросом. Spring будет с помощью модели отдавать эти данные на веб-страницу, а затем другое приложение будет читать их оттуда из url.
Как узнать какая зависимость в pom-файле к какой зависимости подходит? Есть сайт какой-нибудь, чтобы там написано было?
Вот сейчас добавил в проект Hibernate-core зависимость версии 6.2.5 Final (то есть последнюю) - и в web.xml файле в строках <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> dialect.MySQLDialect красным горит, не находит зависимость.
В pom файле поменял зависимость на 5.4.22.Final (как в уроке) - все заработало, хотя другие зависимости самые последние. Как это работает и от чего зависит?
>>2739442 Я бы хотел как можно меньше посредников. Вообще жава оказывается умеет по средствам винды инжектить длл в процессы, создается поток и туда длл пихается. Я тут подумал, а нельзя ли как нибудь не хранить на диске длл для инжекта? Ну типа мы уже можем создавать пустой поток в процессе, а как нам залить сразу в это адресное пространство байтики, которые мы заранее храним в памяти нашей программы?
>Как узнать какая зависимость в pom-файле к какой зависимости подходит? >Есть сайт какой-нибудь, чтобы там написано было?
Этого нет ни в джаве, ни где либо еще. Реальная совместимость версий зависит тупо от дисциплины людей, разрабатывающих компоненты.
Есть semver. Есть релиз-родмап тех же спринга и хибернейта, где декларируется кто с кем совместим в теории. А дальше все зависит от того, кто где обьебался.
>dialect.MySQLDialect красным горит, не находит зависимость.
Мало ли из-за чего идея красным горит... Может это баг в идее. Может идея индексы не обновила? Не думал об этом?
один интерфейс и одна релизация - это вышло из моды или всё ещё в силе? Щас спросили на собесе, говорю что вышло из моды. Но раньше применялось для создания проксей, моков и тестирования
>>2739454 Ну смотри как это делается в железе: выделяется общий буфер, выделяется счётчик, и выделяется прерывание. Железка снаружи пишет данные в буфер, пишет длину данных в счётчик, и дёргает за прерывание. По прерыванию просыпается друга железка или драйвер, смотрят на счётчик, забирают данные из буфера, засыпают.
В твоём случае общий буфер - это обычный файл, например в /tmp, проще некуда, и не на диске Счётчик - заголовок файла заранее известной длины Прерывание - сигнал, который посылаешь процессу И вот уже простейший конвеер готов
Если нужно не просто передавать, а двигать окно - тут уже потребуется двусторонняя связь и драйвер. На низкоуровневой стороне пишешь логику драйвера: он должен принимать смещение, размер окна, ссылку на буфер, и отдавать позицию окна, размер доступной области памяти и размер считанных в буфер данных. На высокоуровневой пишешь ответную часть драйвера: выделение буфера, считывание размера блока памяти и позиции окна в ней, управление смещением и размером окна, вычитывание буфера. Через этот драйвер получаешь почти прозрачный маппинг внешней памяти внутри java, и обрабатываешь в java как угодно Если очень хочется, можно даже буфер записи организовать, чтобы не только читать, но и писать
Мне надо в не спринговом приложении написать логику броска кубика с 6 гранями. Лепить класс со статик методом и потом вызывать его через int value = DiceUtil.roll(6) не хочется, потому что егорка сказал, что статик методы это плохо. Насколько лучше сделать так: int value = new Dice(6).roll() и повторять этот код во всех местах где нужен бросок? Без инъекции кубиков через конструктор/сеттер, потому что мне не нужно тестировать взаимодействие вызывающего кода с кубиком. Пока. Выглядит однохуйственно, честно говоря.
>>2740074 >в не спринговом приложении А как бы поменялась логика, если б ты спринг юзал?
Вроде все генераторы рандома делаются статическими или получаются через статический метод по типу ThreadLocalRandom#current(). Поэтому почему бы не сделать фабрику? Притом new будет очень плохо, тк создание условного SecureRandom долго...
>>2740089 >А как бы поменялась логика, если б ты спринг юзал Сделал бы залупа сервис синглтон, как обычно Благодаря спрингу мне не надо руками прокидывать дайс во все коллабораторы в мире и я получаю удобную возможность тестировать, что 1) подкидывание кубика реально работает 2) код, который работает с кубиком, кидает его с нужным числом граней. Объект остается объектом, а не утил методом
>Вроде все генераторы рандома делаются статическими или получаются через статический метод по типу
На самом деле помимо этого специфического примера постоянно возникает необходимость писать микрологику, которую некуда приткнуть, кроме как в утил классы.
>>2740102 >1) подкидывание кубика реально работает 2) код, который работает с кубиком, кидает его с нужным числом граней. Ты рофлишь? Вот этот вот код тестировать? Ебать тебе заняться нечем. Ну к слову, я б хотел увидеть, как ты рандом-то тестируешь. >На самом деле На самом деле я б на логику посмотрел. И вообще через инъекцию бы сделал. По моему она лучше всех выглядит... Впрочем кто я, а кто ты.
>>2740130 >коллаборатора потестил бы >класс, взаимодействует с тестируемым кодом Какое-то масло масляное получается.
Так-то если у тебя несколько дайсов, там не знаю аналог днд, то лучше делать не через Util класс. Да и каждый раз создавать новый кубик для броска как-то не логично.
А сама инкапсулированная микрологика, вроде и не плохо. Вон помню наебался с свингом и масштабированием шрифтов. Насколько я сейчас понимаю, всем абсолютно срать на них и есть спец пункт в менюшке, где пользователь сам настраивает размер шрифта. >Да, я вкатун. Ты-то судя по всему хотя б вкатился.
>>2740074 >Насколько лучше сделать так: int value = new Dice(6).roll() и повторять этот код во всех местах где нужен бросок?
Делая так, ты приколачиваешь все места в коде к одной имплементации "кубик"
>Без инъекции кубиков через конструктор/сеттер, потому что мне не нужно тестировать взаимодействие вызывающего кода с кубиком. Пока.
Никаких "пока", и прочих виляний жоп.
Ты либо скаплен, либо не скаплен, от твоих намерений по тестингу тут ничего не зависит. Если ты скаплен на конкретику (типа конкретной имплементации) - это всегда хуже чем если бы ты был не скаплен или скаплен на абстракцию (интерфейс "кубик"). Если тебе похуй, то тебе похуй. Но твой похуизм не оправдание и не переменная в уравнении "поддерживаемость" - ты просто получаешь закладку, которая тебе стрельнет если тестить ты таки намылишься (или стрельнет еще по каким нибудь будущим причинам).
>>2741045 Ладно, будет тебе одна строка. int parsed=0;try{parsed=Integer.parseInt(colorString,16);}catch(Exception e){} >>2741043 Хорошая практика - сначала проверить формат отдельным вызовом, а не тупо глотать ошибку и подставлять дефолтное значение, как в пыхоплеяде.
Уважаемые джаваташеры, вопрос от мелкой пиявки: Что думаете насчёт курсов яндекса и проч. Альтернативы изучения прогерства? Чел писал в мануале на этой борде, что курсы хуита и лучше делать "както" самому, что вы думаете по этому поводу? Если курсы хуита, то какая адекватная альтернатива?(дайте плиз инфу), либо...., пойду дальше изучать эти курсы совместно с изучением книжек(половина содержания которых абстрактны, наверное, так и должно быть) Сори за кашу
>>2741299 Курсы хуйта Реальная альтернатива - реально учить программирование, а не заниматься всем, кроме самого программирования Просто блять садишься и пишешь ебучие калькуляторы и прочую хуйню, ВСЕ
>>2741313 По отзывам коллег скажу - что курсы не совсем хуита. Если от программизма не фанатеешь и не шибко умен - то курсы норм. Подучат на джуна, можно даже мидлом стать и получать свою сотьгу.
>>2741299 Как правило курсы для вкатунов - низкого качества. Я вообще не уверен что физически возможно создать хороший курс для современных вкатунов, честно говоря.
Неплохие курсы есть для миддлов-синьоров по какой нибудь низкоуровневой специфике или архитектуре, но это - лотерея.
>>2741332 Вообще, хороший курс - курс с обратной связью, когда тебе литералли доступен канал связи, куда ты можешь задавать любые свои вопросы людям и получать на них ответы. Если уж связываться с курсами, то только с теми, где она есть. Иногда обратную связь продают как опцию, и вот без обратной связи даже хороший курс становится пустой тратой времени.
>>2741299 Ну смотри сам Сам я вкатился после двух месяцев самообразования и успешного тестового и интервью Потом проходил курсы Один проходил три года, так и не прошел, забросил Второй проходил полгода, забросил Третий прохожу два года, из них год хуи пинаю Если бы я перед поиском работы проходил бы курсы - был бы до сих пор без работы То что на этих курсах преподают, на работе освоил за полгода-год самостоятельно
меня короч назначили как default reviewer на один из проектов пул-реквесты проверять у джуниоров. У нас их 5. Двое из них меня активно уберают как reviewerа. Как это блять понемать? Мне их начинать чмэрить потехоньку?
>>2741401 Да, фигня всякая Написать сервис для бронирования билетов в кинотеатр кажется Бек, фронт, апи, миграции Простенькая админка, каталог доступных позиций, личный кабинет, список заказов Уровень исполнения любой, никаких требований, хоть из говна и палок Важно показать, что в принципе способен решить задачу В любом случае на месте дообучают до требуемого уровня Ну а если можешь чего - по коду будет понятно: какие технологии использовал, насколько легко задача далась, что вообще умеешь Тутошние мидлы такое за 4 часа накидают. У меня ушла неделя. За код стыдно конечно, сейчас понимаю что там трешак был. Но и пофиг - все равно взяли.
>>2741313 > Курсы хуйта > Просто блять садишься и пишешь ебучие калькуляторы и прочую хуйню, ВСЕ Вот это самый толковый совет Но это больно: проблемы на всех этапах. Сложно выбрать что конкретно хочешь написать. Но сейчас есть всякие рулетки тем, и прикладные проблемы никуда не делись, которые можно решить прям сейчас с помощью простенького кода. Сложно решать возникающие проблемы: как конкретно решать задачу, что использовать, как разбить? Но сейчас есть чатики - всегда можно спросить совета. По первости сложно гуглить: непонятно как вопрос сформулировать, что вообще искать. Но с опытом это быстро проходит. В общем вариант через боль, но очень быстро прогрессируешь, потому что прямо на практике сталкиваешься с проблемами и сам их решаешь - такой опыт потом фиг забудешь.
на собесе сказал "техлиду" что не люблю хибернейт, его проблемы. Что его нельзя "настроить", что там постоянно надо бороться с какими-то проблемами. Похоже ему не понравилось. Говорю не так как на хабре и в книжках, значит явно мошенник, умные дяди не зря всё это придумывали и форсили. Тяжко
>>2741687 На Хабре и много где тоже очень многие не любят хибернейт. Просто вместо обсирания хибера мог бы сказать что любишь и чем оно лучше хибера. Но хибер это дефолт. На 90% вакух на спринг крудах есть хибер и ради тебя его никто не уберет. Поэтому его нужно знать.
>>2741567 Не совсем понятно откуда черпать теорию и в каком порядке её проходить? Я читаю док спринга но это залупа, порой несвязная и непонятно что описывается.
Хотелось бы воспользоваться вниманием и спросить чем лучше связать бэкенд с фронтом для такой практики?
>>2741894 Начни с http - там все есть для связывания бека с фронтом
Если ты можешь связать бек с фронтом без фреймворка, то ты понимаешь как это работает и всегда докопаешься до истины в случае проблем Если же ты научишься работать только через фреймворк, то любой шаг в сторону - и у тебя большие проблемы
>>2741049 >Хорошая практика - сначала проверить формат отдельным вызовом, а не тупо глотать ошибку и подставлять дефолтное значение, как в пыхоплеяде. Я бы срал достью, но у меня есть древняя база данных, в которой появляется вот такое говно периодически.
>>2741894 >откуда черпать теорию и в каком порядке её проходить? Я читаю док спринга но это залупа, порой несвязная и непонятно что описывается. Алишев на ютубе spring otus на nnmclub.to Для начала за глаза. Остальное, по мере надобности более узкоспециализированное - просто на стековерфлоу, по баелдунгу, отдельным статьям на медиуме, в доке и в сорцах фреймворков.
на собесе сказал "техлиду" что не люблю ООП, его проблемы. Что его нельзя "настроить", что там постоянно надо бороться с какими-то проблемами. Похоже ему не понравилось. Говорю не так как на хабре и в книжках, значит явно мошенник, умные дяди не зря всё это придумывали и форсили. Тяжко
Жорик, я питоняша, но сейчас решил возвратиться к истокам и поиграться с processing, там кружочки и квадратики порисовать, всё такое. Последний раз жабу использовал 1.5 версии, тогда дженерики завезли, с процессингом идёт уже 17. Так вот, мало чего уже помню, помоги, такой расклад:
В процессинге есть класс PShape, через конструктор рабочий экземпляр не создать (наверно можно, но будет бессмысленная хрень). Объекты PShape можно получать от фабрики createShape(). Она как надо настроит и всё что нужно соберёт и подтянет. Проблема в том, что вся оболочка processing настроена так, что многое не явно. Вот допустим самих этих фабрик createShape() в сорцах процессинга хуева туча и я не знаю, которую дёргает IDE.
Мне же нужен мой собственный и любимый PShape с маленькими дополнительными фишками (пара дополнительных полей и методов). Наследование не вариант. Я думаю, что возможно есть два выхода из ситуации:
1) кастовать готовый PShape на myPShape, но я без понятия, возможно ли такое вообще. Наверно нет, полей, которых в PShape не было, это же не добавит.
2) инжектить поля и методы в экземпляр. Это мне кажется возможным.
Так вот, как в жабе в экземпляр класса инжектить произвольное поле или метод в рантайме?
Как же меня задолбала эта тупая идея! То дрочит с каждым файлом: добавлять ли его в гит. Когда сказал - да, добавляй всё. Это говно теперь какие-то добавляет, а какие-то нет. Говнина тупая! Кто это говно вообще писал!?
>>2741973 Хуево обосновал значит. Ну вот че это за хуйня?
>Что его нельзя "настроить" >Что там постоянно надо бороться с какими-то проблемами
Это эмоции, а не аргументация. Я б тя тоже послал после такого, при этом я - функциональщик.
Запомните, дети - избегайте на собесе тем-вкусовщин. А если вам такая тема все же перепала, вступайте в полемику только тогда, когда вы - маэстро обьективного ризонинга со стажем 10+, съевший пуд соли на сабже, которому наступили на больную мозоль. В противном случае, будьте как тот попугай из анекдота и говорите "зависит от контекста". Иначе оно вас сожрет нахуй. Интервьюер всегда в более выигрышной позиции в таких темах.
У тебя IDE чтоли процессинг дергает? Или ты - чатгпт не вывозящий тьюринг тест?
Ты ебанину невнятную какую то написал, а не вопрос. Что за фабрики? Почему их много? Почему это проблема? Что такое твой собственный PShape? Ты новую имплементацию написал или старую проапдейтил? В чем проблема вместе с парой доп полей проапдейтить и фабрики? При чем тут инжекция? У тебя спринг чтоли PShape создает? Тогда нахуя фабрики?
Короче ты не вывезешь эту задачу, тебе явно не хватает экспертизы даже тупо чтобы вести с тредом внятный диалог.
Обычно умные дядьки советуют делать так, чтобы одни методы возвращали void и производили сайд эффекты, а другие возвращали значение, но без сайд эффектов.
Но с другой стороны сейчас на проекте активно использую сервисы, которые обновляют состояние системы и возвращают список случившихся событий:
>>2742851 Почти везде достаточно школьной программы: арифметика Матан нужен там, где есть исследования, да и там зачастую этот матан курят всякие аналитики бигдаты От программиста не требуется что-то там исследовать, выводить закономерности и прочее, это задача профильных матанщиков
>>2742713 А смысл те колупаться с возвращаемым листом, вместо того, чтобы разослать сообщения прям в void-методе и не открывать коллерам лишних деталей о его имплементации? Что тебе дает этот List<DomainEvent>?
Если ты делаешь рассылку внутри метода, ты не можешь, вызвав метод, обновить состояние и никого об этом не уведомить.
В твоем же случае ты вернул список эвентов коллеру, а коллер возьмет и хуй забьет, и никуда их не отправит. Будешь потом искать по всей системе, где забыл сообщения разослать.
>>2742965 Если я правильно понял, то у него аналог https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html . Ты описываешь ситуацию, мол подписался на событие, а тебя проигнорили? Хотя в случае EDT однопоток и любое долговычислимое событие просто все застопорит. И еще нельзя делать сайд эффекты вне этого треда... Но то гуем объясняется, мб тут иначе. Есть какая-то конкретная реализация того, что он описал? Почитать бы...
>>2742999 >а микросервисы - уже априори не однопоток. Т.е. там ThreadPool<Event>? Интересно, а конкретную реализацию можно? >Да и даже если б был EDT - то с хуяли однопоток? All other Swing component methods must be invoked from the event dispatch thread. Programs that ignore this rule may function correctly most of the time, but are subject to unpredictable errors that are difficult to reproduce. Если паралелилить надо просовывать сайды в EDT, SwingUtils.invoke типо того. А внутри EDT только один тред, который последовательно вызывает event, поэтому он однопоток.
Когда микросервисов больше, чем один, тредов тоже априори больше, чем один. По одному на процесс как минимум. Это во первых. А во вторых, да - обработка эвентов в современных фреймворках обыно происходит в тред пулах.
>Интересно, а конкретную реализацию можно?
Нет
>All other Swing component methods must be invoked from the event dispatch thread
И че? Тут всего лишь сказано что ты не можешь свинговые компоненты в многопотоке шатать, потому что они не тредобезопасные. Где тут сказано что нельзя эвенты обрабатывать асинхронно?
Ты всегда можешь тяжелую часть обработчика вынести в пул, и по окончанию обработки кидать обратно в диспатчер тред новы эвент, чтобы по нему уже обновлять UI. Типичный callback-подход к асинхронщине.
>>2743007 >происходит в тред пулах. Т.е. весь фреймворк тредобезопасен? Заебно, наверное. Мне только непонятна разница между EDT и его обработкой эвентов. Вроде тоже самое, правда он зачем-то возвращает лист, нахуя... >Нет Жадина.
Сап, крч, ищу себе новую работу, бэкграунд 3.5 года Full-Stack Developer (.NET+JS) и щас почти 2 года Unity Developer, щитай middle+, но пытаюсь прорваться в senior.
Тяжело по вакансиям здесь, но вот одна подцепилась, дали тестовое, вроде норм, но тут одна херня выскочила, они хотят, чтобы у тебя было 3+ лет опыта в качестве мобильного разраба (Android/iOS), резюме посмотрели, сказали что типа вы нас заинтересовали, но прикол в том, что таску какую они дали, там Clean Architecture, я не знал что это такое, сказал что знаю, ибо думал стандартная хуйня в виде стандартных практик, которые знаю и имею опыт. А ОКАЗЫВАЕТСЯ, ЭТО АНДРОИДОВСКАЯ ДЖАВИСТКАЯ ХУИТА, в .NET такой хуйни нет, особенно в юнити ни разу блять не видел. Посмотрел примеры реализации этой хуйни в .NET, а там блять нахуй src/, сук, это из ебаной джавы блять, какого хуя блять в Unity, в C#, потерялась джава, ебать.
Джависты, ебать помогите пидоры че делать? Слать сразу нахуй вакансию? Сделать стандартным способом? Или пытаться пилить вашу Clean Architecture из говна и палок?
>>2743008 >Т.е. весь фреймворк тредобезопасен? Заебно, наверное.
Да не.
Проблемы тредобезопасности возникают только тогда, когда из нескольких тредов есть конкуррентный доступ к общим данным. Если общих данных нет (либо есть но в лице какой нибудь базы данных которая всю синхронизацию доступа к табличкам за тебя делает), проблемы потокобезопасности впринципе не существует. А в микросервисах большая часть данных обычно - часть какой нить базы данных.
>Мне только непонятна разница между EDT и его обработкой эвентов. Вроде тоже самое, правда он зачем-то возвращает лист, нахуя
Не знаю как тебе, а мне вот например непонятно, с чего ты вообще заговорил про EDT в контексте того разговора? EDT ничего никуда никакой лист не возвращает. EDT в свинге это просто тред, который в бесконечном цикле читает и обрабатывает сообщения из некоей очереди сообщений, вот и все.
>>2743011 Спрашивай в треде про Андроид >>2678699 (OP) Здесь одни Spring-программисты сидят и ни про какую КлинАрхитектуру не слышали. Хуле тебе в дотнете не сидится, а?
>>2742552 processing это такой язык. по сути это жаба и пара библиотек для рисования квадратиков. у процессинга свой IDE, который под капотом прозрачно оборачивает всё что ты написал в класс PApplet и запускает его. Плюс в том, что можно быстро делать прототипы или алгоритмически рисовать. фабрики createShape() там вызываются без какой-то явной привязки к коду, в зависимости от бекенда p2d, javafx, swing, awt оно там где-то скрытно делает свою магию. что тебе непонятно?
есть один экземпляр класса, как в рантайме добавить в сам экземпляр новый функционал? наследование и декомпозиция нахуй не нужны. жаба на такое способна вообще через рефлекшены или это только прерогатива змеиных людей?
А аспекты в спринге вообще часто используют? Просто смотрю, это ж пиздец какой-то - легальный рефлекшн, про который объекты не знают. Ещё по перфомансу эти все прокси обжекты бьют.
>>2744138 Так скоуп и лайфсайкл классов сам по себе в 99% случаев привязаны к приложению. Оставшийся 1% - это какая нибудь класслодерная магия типа OSGi.
>>2744067 Потому что нестатические синглтоны не дают никаких бенефитов, а проблем несут дохуя. Правильный ленивоинициализированный синглтон написать в SE, который бы учитывал многопоточку - задача не такая тривиальная как кажется. А требовать тащить DI контейнер ради логгера-синглтона = пройти нахуй, ибо оверкилл и ненужон.
>>2744371 Так один логгер на приложение с потребительской точки зрения - это хуйня постная. Эдак и логгинга не надо - пиши все в System.out.println, будет он для тебя выступать как один логгер на приложение.
>>2744372 Ну я имею ввиду, что синглтон не будет множить экземпляры. Следовательно индивидуальные для класса настройки не сделать. Правда есть ли они, но вроде вот по getLogger - есть. Да и sout в любом случае хуита, ибо ее можно легко закрыть и никогда больше не открыть.
>>2744376 Ну чел, ну хули ты душишь - "экземпляры множить"... У тебя один экземпляр на класс в худшем случае - все, прям экземпляров наплодил, пиздец пацаны, футпринт в хламину ебана...
Это во первых
Во вторых - есть логгер, и есть LoggerFactory (в slf4j). Имплементации оного стараются кэшировать логгеры для одинаковых вызовов getLogger, что какбэ тоже не способствует существованию избыточного количества логгеров.
>>2730933 (OP) Аноны, поясните кто нибудь за работу. Есть ли она на жаве в рф? Что обычно пишут? Веб приложухи? Какой то софт? Какие зп? Реально ли в 2к23 вкатиться?
>>2744427 > Есть ли она на жаве в рф? Есть, я же работаю. > Что обычно пишут? Веб приложухи? Какой то софт? Пишут энтерпрайз. Вебом это называют редко, потому что вся суть именно в бизнес-логике на сервере, а от веба там только фронтальная часть, которая может быть и десктопом, и мобилкой, и другим сервисом. > Какие зп? 100 для джунов, 150+ для миддлов, 300+ для сеньоров. > Реально ли в 2к23 вкатиться? Реально.
>>2744432 >300+ для сеньоров Сеньоры нынче до 300к. И 300к - это действительно сеньор, а не перекладывание жысонов в крудах на спринге. Т.е. это проекты и задачи уровня компаний МЯСКОТ.
>>2744626 Чуваку на Хабре вон 400к предлагали. Он взял и в три конторы параллельно подал, а потом каждой из контор сказал что другая предлагает больше. В итоге получил предложение на 700к. Какие нафиг 300, если за 200 пыхапэ-макаки формошлепствуют? Это java - тут же немножко мозга приложить нужно, это должно стоить больше.
Из серии глупых вопросов. Как конкретно создаются @Bean в конфиге? Еще непонятен момент, как именно подменяются вызовы внутри этих бинов на другие бины. Правильно я понимаю, что это можно представить как прокся factory-bean из xml контекста? Типа создаются прокси фабрики и навешивается scope на их фабричный метод, а также все вызовы старого метода подменяются вызовом прокся-метода. Еще непонятно чем конкретно отличаются Service и Component, вообще не понимаю, когда мне одно вешать, когда другое.
Наверни в ютубе Борисова "спринг-потрошитель". Он эти вопросы раскрывает.
>Еще непонятно чем конкретно отличаются Service и Component, вообще не понимаю, когда мне одно вешать, когда другое.
По сути, для спринга разницы литералли никакой. Service - просто метка для кодера что вот тут вот лежит бизнес логика. Да - звучит бредово, но это так.
>>2745921 >Наверни в ютубе Борисова "спринг-потрошитель". Я смотрель, там не было момента про конкретно это. Скажи насколько я прав в своих рассуждениях... >По сути, для спринга разницы литералли никакой. Я по етому и спрашиваю. Если так рассуждать, то в сервисах декларация того, что должно делать приложения, в компонентах, то как оно это делает. Хотя контроллеры - это компоненты, сложно как-то.
>>2745944 Ну как это - "не было". Если я правильно помню, все было. Спринг сканирует аннотации в конфиге, из которых выводит биндефинишены, в которых вся инфа о бинах, его зависимостях, их типе, параметрах и.т.д. На основе биндефинишенов создаются бины, далее либо бины инжектятся друг в друга, либо вместо бина инжектится прокся, которая развязывает скоупы.
>Еще непонятен момент, как именно подменяются вызовы внутри этих бинов на другие бины
Вот этот кусок твоего мессага вообще не понял. С чего бы спрингу подменять вызовы бинов? Ты здесь про что, про аспекты?
>Если так рассуждать, то в сервисах декларация того, что должно делать приложения, в компонентах, то как оно это делает
Не, так рассуждать не получится. Это интерфейсы и их импелементации соответственно, это не про бины.
Просто забей. Пусть тебе ревьюеры на кодревью скажут, что они хотят над бинами видеть.
>>2745967 >С чего бы спрингу подменять вызовы бинов? Пик. Это wiring, вроде тоже. Из-за этого s2 = true. >На основе биндефинишенов создаются бины Ну т.е. из этого дефинишина спринг может как создать прокся класс, так и взять существующий? >Просто забей. Пусть тебе ревьюеры на кодревью скажут, что они хотят над бинами видеть. Понял...
>>2745921 >Борисова "спринг-потрошитель" Смотрел два раза. До и после изучения Спринга. Первый раз вообще ничего не понял. Второй раз понял только то, что и так знал. У него просто талант рассказывать максимально непонятно. Ещё и манера подачи мне не нравится, куда-то вечно торопится, как-будто его одни гении смотрят и способны за секунды разбирать то, что он показывает. Сам-то он наверняка эти моменты часами обдумывал. Ещё негативный момент, что он Спринг-евангелист и из-за таких как он нет выбора фреймворков для джавы.
>>2746441 я вообще не понял смысла всего этого. Городить кучу кода с учетом знаний кишочка спринга чтобы сделать магию на аннотации. Но магия это ведь плохо. Магия это неожиданное поведение, конфликты, необходимость знать про эту магию и учитывать её. Сломается эта магия или где-то на стыке двух магий и пиздец
>>2746449 Я тоже. Есть ООП, которое позволяет всё тоже самое писать, и проверки будут на стадии компиляции. Но нет, навернём миллион бесполезных конструкций, чтобы нагружало систему в рантайме.
Мне похуй, я и сам не люблю спрингокульт. Но при всей нелюбви все таки отдаю должное - доклад "спринг-потрошитель" тему спрингомагии раскрывает очень неплохо. Если он не понятен, я хз че еще советовать...
Смотрю тут куча адептов спринга, у меня еще один глупый вопрос. Я правильно понимаю, что автор наебывает? Вот он говорит, мол усе безопасно, все транзакции отменяются и вообще заебись вышло. https://github.com/gracyaneoliveira/spring-start-here-book/tree/main/sq-ch13-ex1/src/main/java/com/example Но если AccountRepository#changeAmount не будет CAS, то при конкурентом доступе, все пойдет пиздой, я прав? И как именно транзакции отменяют все действия? Там в бд создается снимок что ли?
>>2746498 >конкретной СУБД. MySQL пусть будет. >е пойдет. У тебя весь стейт, к которому конкуррентный доступ, в базе. Имею ввиду взять значение до завершение транзакции и на его основе что-то сделать. Ну или записать значение в одной транзакции, а другая откатит. Получается бд всех участников guarded by a lock и спринг этих участников ей посылает? Или она вообще всю табличку ебает на локу? >>2746496 Можешь статейку скниуть...?
>>2746516 Это уже вопросы изоляции транзакций Тут БД можно настроить по-разному При одних настройках транзакции не изолированные, при других изолированные Вообще эта тема к программированию не относится - это именно работа СУБД. Тут очень много тонкостей и особенностей. Все они +/- следуют некому общему стандарту, но в деталях пиздец как отличаются, и без учета особенностей конкретной СУБД можно быстро сесть в лужу
>>2746516 >Получается бд всех участников guarded by a lock и спринг этих участников ей посылает? Или она вообще всю табличку ебает на локу?
Да не, ему обычно нужды нет. И кстати я выше приврал малясь про базу, потому что помимо базы обычно есть еще персистенс контекст от ORM. Там - свои локи и своя кухня. И вообще я щас спеку JPA чекнул, и вспомнил что EntityManager вообще то не тредобезопасный, и конкуррентный доступ к нему вообще запрещен...
Короче нюансов там - я ебал, не зря спринг это магия. Слава богу что я давно уже не юзаю ORMы.
Честно говоря, я вот щас даже сам с наскоку не вспомню всех нюансов.
>>2746545 ну я примерно освоил эти изоляции. в постгре изоляция по дефолту read commited, видны только закоммиченные данные. Не защищает от потери данных в случае параллельного коммита.
если ставим serializable - при параллельном коммите будет выдавать ошибку на втором коммите.
Если хотим реальную блокировку, чтобы второй поток ждал - делаем через select for update, второй select for update будет ждать когда закоммитится первый, и только тогда селектить.
Если у нас чтение и запись в разных транзакциях - обязательно делать оптимистическую блокировку. Проверять что данные между чтением и записью не изменились
>>2746545 >>2746559 Пасиба. А то я думал, что эти транзакции на уровне жавы только, а они оказывается бдшкой обеспечиваются. >>2746535 Надо будет разобраться хотя бы для пары бд более менее нормально. >>2746553 Это откуда?
>>2747113 Посмотрел пример на вики. Type type = System.Type.GetType("Foo"); var foo = Activator.CreateInstance(type); foo.GetType().GetMethod("Hello").Invoke(foo, null); И зачем это надо? какое практическое применение? выглядит стремно
>>2747101 настолько предельно понятно, что эту сраную лекцию возносят как грааль. Т.е. никто до этого не знал, и в мануалах это не описывается настолько подробно
>>2747155 Ну значит не нужно его править. Тут как с intterput у потоков, ты проста берешь и надеешься, что поток реализовал у себя адекватное прерывание. А stop не применяешь примерно никогда. Если тебе надо клонировать защищенные, с точки зрения апи объекты, то ты точно что-то делаешь не так. Тем более, что рефлексия бьет по перфомансу.
>>2747113 Рефлексия - это просто API, который позволяет программе в рантайме получать (и иногда даже модифицировать) инфу о своем внутреннем устройстве - в частности, о классах и их содержимом. Ни больше ни меньше.
По дефолту, если ты не занимаешься метапрограммированием и не лабаешь какой нибудь системный тул для анализа и инструментирования кода, рефлексия считается запрещенной техникой.
>>2747432 Не-не. Именно о неявности, Мол спринг ахуенный инвазивный и в отличии от других Фреймворков не вставляет кучу своего апи. По мне - это неявность. Ну и да, мол вообще потом этот код можно вне спринга использовать(Ахуенные истории)
>>2747725 Мне по каждому пункту пояснять? Расширения файлов определяет ос, жава тут ничего сделать не сможет. Вот какое расширение у *.tar.gz? А у sh скрипта без точки вообще?
Эти восклицания, кринж. Сам создал проблему, сам героически ее решил. К чему эти клоунские ужимки?
>>2747744 Ну это хуйня такая же, что и в хабре написано. Вам серьезно нужны функции над функцией? Сплит по точке, latindex и firstindex. Я хуею, а апач индусы качают что ли, которые is_odd написать не могут?
>>2747802 Заебал синтаксис кобола, хочется тоже почувствовать себя хипстерами. Конечно синтаксис непонятный, разве он бывает хоть в одном языке понятным без изучения? Я когда учил жабу после сишки, тоже не понимал нихуя.
>>2747830 Ну, да, больше над самой этой экосистемой. Я кстати так понимаю у них и выбора другого не было, ведь в андроид в VM выполняется, своё они вряд ли могли привнести
>>2747844 Какого выбора, ты про что? Они просто фанаты жабы и все. У них иде для нее и на ней написана. И они всрали просто дохуя бабла в этот яп, который чудо что взлетел, а ведь мог и не взлететь.
>>2747850 Увы, все IDE для жабы написаны на прожорливой неповоротливой жабе. VSCode не на шарпе, да. Мелкие неклепали дохуя шарповых говнолиб для гуя и сами же боятся их использовать, да и поддерживать линукс не хотят, ибо не профитно.
>>2748009 Contract-first - когда сначала пишешь XSD, а под сгенерированные по ней типы пишешь уже логику на жабе. Предполагается, что эту XSD ты потом передашь потребителю сервиса, чтобы он на своей стороне генерировал по ней типы. А с Contract-last всё пишешь на жабе.
Контракт, это такая хуйня, которой в одиночку обычно не пользуются: всегда есть как минимум один провайдер и один клиент. И вот есть у тебя допустим спринговый вер-сервис как провайдер контракта, и джавовая программа, как потребитель. При contract-last, в веб-сервисе ты сначала руками лабаешь MVC-рестовые контроллеры, потом так же руками лабаешь вызовы на ресте в клиенте. Рестов много, ошибиться просто. Контракт может меняться, вменсте с контрактом нужно апдейтить обе стороны. Ситуация еще на практике обычно усложняется тем, что обе стороны мейнтейнят обычно разные команды. Все это просто минное поле ошибок.
Есть альтернатива. При контракт-first, ты описываешь контракт нейтральным конфиг файлом один раз в одном месте. Например OpenApi спекой. А потом берешь генераторы сорцов клиента и сервера на джаву, и скармливаешь им эту спеку. Код пишет машина, вместо человека. Человеческих косяков она при этом не делает. Если контракт меняется, меняется лишь спека. После апдейта спеки остается лишь перегенерить сорцы и проверить что ничего не сьехало в самом софте по типам. Координировать работу команд в такой парадигме в разы проще. Менять контракт - в разы проще. Не случайно щас многие заказчики требуют вместе с RESTами сваггер - им по таким рестам интегриться тупо проще.
Единственный душный момент - ты становишься привязан к тому, как тебе по спеке генераторы код пишут. Генераторы очень рознятся по качеству, и могут не поддерживать (или поддерживать не так как ты ожидаешь) отдельные фичи, вроде аплоуда файла.
Я правильно понял, что прокси мод создает лист из реальных объектов с большей видимостью? И любое обращение будет проходится по этому массиву. Даже не так, получается все вызовы размножатся таким образом, что вместо один к многим получится один к одному. Типа если сервис сначала получает данные от сессии, не знаю, список товаров, и посчитает общую сумму, то для каждой сессии будет своя сумма? Хотя это бред какой-то, зачем все сессии обрабатывать-то сразу.
>>2748787 Решил потыкать, вроде как кандидат выбирается исходя из того, кто вызвал. Надо понимать, расчет идет на то, что все вызовы будут идти таким образом, что Scope будет идти от многих к одному. Интересно, возможна ли иная ситуация...
>>2748787 >Я правильно понял, что прокси мод создает лист из реальных объектов с большей видимостью?
По всякому может быть. Я бы на твоем месте не гадал, а пошел бы смотреть имплементацию.
>Типа если сервис сначала получает данные от сессии, не знаю, список товаров, и посчитает общую сумму, то для каждой сессии будет своя сумма? Хотя это бред какой-то, зачем все сессии обрабатывать-то сразу.
Так да. Сам подумай - вот есть у тебя рест. В ресте выполняется запрос. Он определяет реквест-скоуп - для каждого реквеста будет свой реквест-скоуп бин. Далее - реквесты у тебя обычно выполняются в контексте серверной сессии. Сессия определяет session scope. И так далее. А теперь сам ответь на свой вопрос - зачем все сессии обрабатывать сразу, если у тебя выполняется конкретный запрос с конкретной сессией?
>>2748917 >А теперь сам ответь на свой вопрос - зачем все сессии обрабатывать сразу, если у тебя выполняется конкретный запрос с конкретной сессией? Ну я изначально и подумал, что это бред какой-то. Теперь думаю, что можно проанализировать стек вызовов и определить нужный в данный момент реквест и сессию. Возможно там как-то иначе реализовано, но в общем-то суть в том, что сервисные методы вызывает реквест или сессия. Потому все еще вомзожно определить, какой бин надо подставить. Плюс так проблем с многопоточностью не будет. Тут я выше аналогию с ThreadLocal проводил, только вместо того, чтобы привязывать объект к конкретному треду, мы привязываем его к реквесту/сессии. >пошел бы смотреть имплементацию. Я не настолько хорошо разбираюсь в кишках спринга, чтобы найти на каком этапе начинается реализация scope.
>>2748931 Я там пошаманил и заставил вызывать не из реквеста: Exception in thread "Thread-1" org.springframework.beans.factory.support.ScopeNotActiveException: Error creating bean with name 'scopedTarget.purchaseController': Scope 'request' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
>>2748971 Там вроде бы цимес в том, что если ты его прям покупал, у тебя эта лицензия стала бессрочной, но на конкретную версию, без апгрейдов. С бесплатными так не прокатит.
>>2749089 В новой редакции посчитали, что вкатунам это знать не нужно.
Это общая проблема: прикинь вот ты как автор книги описал этот лайфсайкл, а авторы фреймворка взяли, и чето в нем поменяли. И все. Читатель-вкатун начинает плеваться - "книга устарела, вводит людей в заблуждение, фу читать книги".
Ну вот чтоб устаревала пореже, приходится абстрагироваться.
>>2749099 Я хз, новая редакция. Да и на статье хабра не так структурировано, да и черт знает для новичков ли. Вот какой-нибудь Spring Start Here эт да. Прям для дебилов разжевано. И тоже нет вот такой схемы. >>2749108 Да похуй, всегда можно почитать ченджлог. Она в общем-то актуальна для 4 спринга.
>>2749310 Открываешь любой тред, возможно кроме плюсов и лиспа (джависты умнее всех, поэтому серят в тредах питонистов\пубистов\пхпистов\жсистов, но вот в тредах языков, где не наворовать смехуечек с баша их почему то нет), читаешь последние 10 постов, в каждом будет залетный элитист "ваш язык хуйня, работы нет, учите джаву"
>>2749315 >учите джаву Жависты хитрые и обычно призывают учить шарп, котлин в крайнем случае. Мол жава старая, многословная, медленная и прожорливая - зачем она вам.
Женечка, расскажи за уникальные имена пакетов. я правильно понимаю, что на них всем похуй, если они уникальные, то есть не будут пересекаться (с любыми другими сторонними пакетами)? так что я могу выбрать your.ripped.ass и будет норм.
>>2749465 Тогда и имя тома + "://" еще сжирать должны. Если мы про абсолютный. Мне вот интересно, а как компании обходят эти ограничения? Модифицируют ntfs или ставят другие фски? Или вообще похую и раз максимум 256, то пусть будет 256
>>2749471 Имя тома нет смысла хранить, оно всегда одинаковое, просто таблиц несколько. Компании просто запускают всё на специальной виртуальной ФС, где длина пути может быть хоть 10 терабайт.
>>2730933 (OP) Аноны, хочу за лето вкатиться в жаву Я заводчанин, образование социолог Думаете получится? Пока зарегистрировался на гикбренсе и даваруш и скачал Алгоритмы на Java. Ваши советы как не проебать время, выучить как можно больше за лето и к осени найти работу разрабом хотя бы за 50к.
>>2749620 я с 10 летним стажем жабамакаки имею сложности с трудоустройством. На джуна - там 10 вакансий на всю россиюшку по 2к откликов. Чел, щас ситуация как с юристами и экономистами, оно уже случилось
>>2749659 как-то же до этого работал, проходил испытательные сроки, завершал проекты. И есть некая хуйня с образованием филолога, которая хочет вкатиться. С чего он будет лучше меня?
>>2749663 >как-то же до этого работал, проходил испытательные сроки, завершал проекты. Не показатель компетенции. Ты мог быть и балластом. >С чего он будет лучше меня? Ну конкретно он, вряд ли лучше будет. А у тебя профильное образование?
>>2749737 ничосе. А так можно? Качаешь томкат, запускаешь. Собираешь .war своей приложухи, деплоишь в запущенный томкат, он его подхватывает и развертывает сам
>>2749749 в бут встроен минитомкат. Он занимает весь порт одной приложухой. В оригинальном томкате ты на одном порту можешь хостить хоть десяток приложух, различаться будут урл
>>2749624 >>2749626 В гугл обязательно хотя бы чтобы поджечь пердаки юзеров этого форума) >>2749652 Т.е ты боишься что я заберу твоё место? Если да, то я его точно заберу))
>>2749390 Вот этот >>2749409 прав. Иногда это бывает важно. Например если ты релизишься в централ: забить за собой в централе ты можешь только группу, одноименную со своим доменом (ну и для гитхабных всегда еще есть опция com.github.username)
>>2750518 вопрос: что вам нравилось в прошлой работе? Мой ответ: отлаженные процессы, не нужно самому общаться с заказчиками и менеджерами, есть отдельный аналитик, выстроенные процессы. Кроме того нравилось расположение компании в центре, почти свой кабинет, рядом фитнес с бассейном и парковка. Но ассайнился я на удаленную работу. Сказал что есть опыт удаленки в ковидлу
вопрос: что вам писали в замечания на код-ревью мой ответ: в основном это было связано с моей невнимательностью и замыливанием взгляда
вопрос: какие книги вы прочитали за последние пол-года мой ответ: мук хрюк смотрел видосики и решал литкод. Читал пару книг, но не дочитал до конца. Кроме того прочитанное в книгах быстро забывается.
реджектнули на финальном собесе после этих ответов. Что не так?
Из того, что могу предположить - только первый ответ может вызвать проблемы. Возможно, что в их компании как раз нет аналитика и выстроенных процессов. И такой ответ показал, что Вы не готовы работать с их подходом - делай всё сам от сбора требований, до тестирования.
Почему отказ - может быть разные ситуации.
Процесс найма происходит по чьей-то инициации. Например, какой-то тим-лид говорит - нужен ещё сотрудник, далее менеджер оформляет заявку на подбор сотрудника. Далее проходит пара собеседований, и охотник на живой товар начинает требовать обратную связь от менеджера и тим-лида. Вот что в голове у этой парочки - можно только гадать.
может быть, у них оказался под рукой более подходящий кандидат.
Может быть, в их процессе подбора произошёл сбой. И когда охотник начал требовать обратную связь, выяснилось, что тимлид сказал, что нужен фронтэндер, а не бекэндер.
В общем, тут одни догадки. Твои ответы вполне приемлимы. Хотя мне они не нравятся. Я сам уже давно никакой книги не читал, но слышал о них.
Что вы ждёте от компании? Мой ответ: т.к. у вас госфинансирование, есть риск что это финансирование пропадёт и вам придется сокращать штат. Я бы не хотел чтобы такое произошло
Где тут джава? Где ебанутые литкод-стайл задачки, где сгоревшие от вопросов по кишкам пердаки? Че это за постная сопливая хуйня? У вас хрюшетред на такие случаи есть.
Прошел курс по Spring, хочу закрепил знания проектом. Посоветуйте какой-нибудь курс / серию уроков по созданию приложения (для опыта надо увидеть, как делают веб-приложения опытные программисты).
>>2750992 Нашел сайт со Spring Boot, это может сказаться на получении будущей работы - или надо самому создавать зависимости в проекте? Планирую пушить проекты на Гитхаб, и потом показывать работодателю.
>>2751000 > или надо самому создавать зависимости в проекте? Для добавления зависимостей в помник ничего уметь не нужно. Чуть сложнее с конфигурацией, но она тоже легко гуглится. И проект у работодателя уже будет готовый, остаётся только новые сервисы с логикой писать. > Планирую пушить проекты на Гитхаб, и потом показывать работодателю. Их почти никто не смотрит, все учебные проекты однотипны, да и часто их копируют друг у друга. Будут просто задавать вопросы.
>>2751010 >Для добавления зависимостей в помник ничего уметь не нужно. Всм не надо? А как же зависимости править, вон на пике например, кто от кого зависит кто кому подгаживает, пара пакетов может иметь другие имена и тд и тп. Такая ебля, если честно. А еще билд настроить.
>>2751006 Я ничего и не закреплял. Мне нужен цикл уроков, в которых автор делает какое-нибудь приложение - желательно максимально используя Spring. Чтобы, повторяя за автором, я научился проектированию приложений на спринге. Например, уроки по созданию какой-нибудь соцсети или онлайн-магазина. Только чтобы курс актуальный был. >>2751011 Курс Заура Трегулова https://www.udemy.com/course/spring-framework/
>>2751017 Подключаешь пару основных зависимостей, остальное подтягивается автоматически как транзитивные зависимости. Что-то не работает => лезешь в гугл => добавляешь. Гуглом пользуются все, никто эту ебанину в голове не держит, да и настроить надо только один раз. Настройка билда сводится к сборке fat jar через конфигурацию maven-assembly-plugin на 15 строчек, которая легко ищется на stack overflow. Всё.
>>2751016 Это вообще по другому работает. Я тут ручками диспатч серверлет создаю и контекст тоже. Тогда как эта хрень делегирует этот процесс. И чому твое чудо новое и не устаревшее, если это возвращение к ручному управлению?
>>2751029 У меня для теста вот нужны пакеты с пика 1, а для деплоя пик 2. В одном есть serverlet 3, а другом еще 2.4 и 2.5. Поэтому для тестов надо чета отключать, а для деплоя включать. Циклическая зависимость какая-то. И че-т мне кажется, самый простой способ решить эту хуйню - загрузить бут.
>>2751033 В градле не могут автоматизировать неломание обратной совместимости каждые полгода. А суть не изменилась, всё та же ебля с зависимостями и билдом, просто строчек надо меньше писать за счёт выпиливания громоздкого XML.
>>2751050 >здесь спрашивать про сервлеты Как раз хочу спросить. А в spring-mvc сколько конкретно сервлетов работает? Правильно я понимаю, что там один dispatchServerlet, который запросы отфутболивает в контроллеры с RequestMapping? Если да, то как там многопоточность реализована...
>>2751053 Ты не знал? Kubernetes - это сервер приложений. Появился из-за того, что в других языках не успели изобрести аналоги Websphere, Wildfly и Glassfish. Теперь для чего-то тащат кубер в жабу, хотя и так всё нужное есть.
>>2751059 Да. Многопоточность делается на уровне контейнера сервлетов, там грубо говоря несколько воркеров берут данные запроса, упаковывают их в HttpServletRequest и передают их методам одного и того же экземпляра DispatcherServlet.
>>2751077 >>2751078 Судя по всему многопоточность полностью ложится на контейнер. Тут чисто реквесты хандлеру потом котроллеру и modelAndView. В общем пасиба, я обязательно вкачусь... Вот-вот...
>>2751128 Ацтань. Тут чу-чуть осталось до секурити. Можно регистрацию наконец-то не косячную запилить будет. Жалко некого лично заебывать... Приходится в тредике спрашивать.
>>2751155 Та я тоже гуглю, просто хочу иногда убедится, что правильно понял. Правда доки спринга мне не особо нравятся, как и туториалы по типу baeldung.
>>2752325 Бля, оформление как в спринг ин актион. Сука, чому один паттерн названия и офрмления? Есть какой-то фремворк для книг? У меня вопрос-то, надо ли это вкатуну? Или похуй?
Забудьте вы уже такое слово как "вкатун". Щас такой категории как "вкатун" впринципе не существует - ты либо конкурируешь с миддлами на равных, либо тебя в индустрии не существует.
Что касается клауда - распространен он реже, чем сам спринг, поэтому и приоритет к его изучению - ниже. Да и крайне маловероятно, что за него спрашивают на джава-собесах.
>>2752583 >Забудьте вы уже такое слово как "вкатун". А я не знаю к какой категории себя отнести даже. В коре я пачти эксперт, как никак кучу лет уже в нем буквально копаюсь, а вот спринг и остальное так, считай около-новичок. Ну и на алгосы давным давно забил. Медиум и изи с литкода решу, но дальше не вижу смысла прорабатывать. >то касается клауда - распространен он реже, чем сам спринг Понел. Пасиба
>>2752725 Ну да, теперь вообще 2к. Так это по всей россии. Типа как в одном городе миллионнике может быть 2.5к, когда по всей стране столько не наберется?
Кто-нибудь пробовал вручную деплоить war-ники в tomcat? Делаю вроде всё по гайду, но получаю 404. В самом war-нике лежит файл index.html, но томкат его не хочет показывать.
>>2752982 Хз, мне кто-то тут посоветовал так делать, вродь все работает искаропки. Только чтоб показать тебе надо конечно же настроечки для серверлета сделать. А то че тебе томкатик-то запустит? >>2752990 А как сейчас все это происходит
>>2752990 Разобрался. Как всегда тупая идея в штаны насрала со своими офигетельными советами и подсказками. В общем, после создания фасета нельзя соглашаться на автоматическое создание артефакта, а надо самому ручками его создать, потому что идея генерирует невразумительное говно. И ещё они хотят за своё поделие денег немалых!
>>2753014 А чем там сложного-то? Вот это добавил в билд и проект. Делаешь конфигурацию clean, compile, package. Усе. У меня автор вообще даже не упоминал об этом...
>>2753015 Будь моя воля, я бы тоже через мавен собирал в каком-нибудь вс коде, а не в этой лагающей тупой идее. Но приходится мучаться и сидеть в бесячей идее. Современный джавист - это идея-разработчик.
Возможно ли из кода получить спринговый бин? У меня нет ничего, только конструктор и вызываемый метод. Возможно ли тут достать из воздуха спринговую фабрику бинов и достать бин?
>>2753631 пердолики из яндекса сделали некие клауд функции, я пытаюсь подружить это со спрингом. Непонятно что яндекс делает с этими инит классами - заменяет на свои, или прокси, или что. Если делать Autowired - при запуске локально инжектится, при загрузке туда - null, видимо яндекс подменяет этот класс своим
>>2753699 Будут, но фактически будут только потому, что агрессивные анальники, и им лишь бы постучать кому-то. Фактически никакой пользы в пробрасывании контекста всюду нет, один хуй спринг это тормозящий кобол.
>>2753671 Бля, а ты можешь нормально пояснить? У тебя просто сначала клауд функции, потом инит классы, кстати, что это? А в конце вообще класс один.
Я правильно понял, что тебе надо написать хандлер, который из контекста в сервере получит некий бин? >null, видимо яндекс подменяет этот класс своим Возможно конфигурация не видит хандлер?
>Если делать Autowired - при запуске локально инжектится, при загрузке туда - null, видимо яндекс подменяет этот класс своим
С чего вдруг такой вывод? Как по мне, вывод напрашивается совсем другой - у тебя в приложухе тупо спринга нет. Ты наверное расставил анноташки, и молишься на спринговую магию, а магии не случается, потому что яндекс пепяка тебе скорее всего подтягивает эту функцию из класспафа в обход спринга вместо того чтобы main с бутом стартануть или сервлет с диспатчером. Вот и вся любовь.
Как по каноничному RESTful стилю сделать так, чтобы POST запрос не приводил к изменению данных на сервере, если содержимое тела не отличается от текущих данных сущности в базе? Есть заголовки If-Match и If-Modified-Since, но они для другого. Ту надо сверять именно данные, которые пришли в теле.
>>2754126 Внешний клиент может отправить запрос на модификацию, но не хочет, чтобы дата последнего изменения обновлялась, если изменений по факту не было.
>>2754134 Блять, а че тебе ответить? Тебе присылают запрос с обновлением данных, ты его игнорируешь по каким-то личным причинам. Это норма типа? Мб именно дату хотят обновить.
>>2754189 Вменяемых compile-time DI фреймворков не было. Они все спиздиоли у меня из головы: генерацию сурс кода, аннотейшн процессор, даже аннотации, которые я хотел перенести из спринга. Хттп клиент почти один в один как по моей задумке, только нет поддержки абстрактных классов и декораторов.
>>2754196 Это то, что ты скинул? Там буквально ни слова про реализацию. Да и откуда она в доках возьмется-то... Это копаться надо, а мне лень. Поэтому и спрашиваю. Вкратце хоть обрисуй. Они фабрики заместо new подставляют? Вообще говоря, странная мысль, в яп главная фича которого - jit мы делаем что-то в aot.
>>2732465 не, не хватит. бля бэка надо минимум 16gb или будут лаги. Если хочешь ещё и докер запускать, то надо 24гб - но тут уже и ценник. Без докера 16ги должно хватать.
пришел в офис. Показали кубикл. Никто не зовёт пить кофе или идти в столовку, иду один. Так и должно быть? Самому напрашиваться? Судя по разговорам - тупые зумеры с какой-то ерундой
А насколько вообще требуются умения работы с докером? Я просто с lxd работал, но чет ограниченный докер вообще не трогал. Насколько ебать будут за это?
>>2755259 >настроил сборку докер образа Странно, что тогда прям в build мавена это не добавили. Хотя смотрю туда базу данных пихают. Типа через jndi сейчас больше не получают инфу о бд? Или это в буте где-то спрятано... >>2755251 В вакухе писале про докер. Еще в соседнем треде говорили, мол пиздос обязательно.
>>2754907 Ну вот у меня 3 проекта - 1 в разработке, 2 на поддержке. 1. Мне нужен докер локально: 3-5 контейнеров одновременно для каждого проекта. 2. Тестконтейнеры, до 3 контейнеров в тестах гоняются. В докере могут быть - минио, кейклок, постгрес, монга, редис, кафка, реббит. 3. Идея с кучей открытых плагинов в несколько окон. С терминальчиками, клиентами для хттп, докеров, баз 4. Локально поднято 1-3 сервиса. 5. Хром с видосами, докой, дев-окружением, таск-трекером, логами. 6. Корпоративный мессенджер с видеосвязью. 7. Куча всякого не сильно нагружающего - почтовый клиент, корпоративный впн, иногда нужно открыть вордовый/экселевсий файл. На все это разом 16 гигов оперативки не хватит не на одной ос. 8 не хватит и для самой обязательной части.
>>2755320 А по ssh откуда-то низя эти контейнеры запускать? Не знаю, мб любимая работа выделит тачку...? Отсается только идешечка и хром. >В докере могут быть - минио, кейклок, постгрес, монга, редис, кафка, реббит. Мда, сколько ж всего в них пихают...
>>2755337 А зачем мне их откуда то запускать? Это же медленнее и неудобнее, чем каждому со своей машины запускать контейнеры с обвязкой. Намного проще иметь комп с 32 гигами оперативы. Ну работа выдает ноут с 16 гигами оперативы, можно до 32 расширить. Операционка на выбор бубунта или винда с всл. Мак у нас только у тимлида, который код пишет самую малость и ему полная обвязка не нужна. Сколько там оперативы - я хз.
Я тут узнал, что в версии 21 супер апгрейд языка. Теперь для хелло-ворлд не нужно делать обвязку из класса, статического метода и т.п., достаточно просто void main() { System.out.println("hello"); } говорят революционное изменение. Теперь все ломанутся вкатываться в джаву, потому что стало почти так же просто, как в питон, будет наплыв вкатышей, через три года толбы мидлов-серьёров, зарплаты скорректируются. Кабанчики в восторге.
>>2755088 Год сижу в офисе, со всеми здороваюсь когда прихожу, с кем то даже смол толкать пытаюсь. Все еще никто не зовет - ходят своими компаниями, в столовке делают вид что мы не знакомы.
>>2755248 Будет плюсом (можно всякую хуйню по деплою скинуть), но не обязательно. У меня в команде техлид в этом шарит и на пару в девопсом решают все вопросы. Моего понимания хватает только чтоб запустить локально всякие базы, кафку, редис и прочую такую поебень.
>>2755278 >>В вакухе писале про докер. Мне в вакухе и про хибер писали - я его ни разу не видел, жуком пользуюсь.
>>2755847 >>Зачем нужна жава Для энтерпрайза. Микрософт обосралась сломав обратную совместимость несколько раз, обрекая ранее написанные проекты быть вечным легасным говном. А сейчас нет смысла менять жаву обычную на жаву микрософт - уж лучше го какой нибудь взять.
>>2755871 На хх очень мало вакух с жуком. Я уже больше года на жуке пишу и если менять работу - просто пиздец как неохота опять задрачивать хибер для собесов. Помню, как меня два года назад попустили на жизненном цикле энтити и отличия методов энтити менеджера.
>>2755890 Мы норм мигрировали. А с 11 на 17 вообще легко. Проблема не в самой жаве, а в библиотеках, которые завязаны на версиях жавы. Или вот например на 17 жаву перекатились бесшовно на нескольких сервисах на 10-40к строк. А вот на третий спрингбут хуй там, куча всего отваливается. А времени разбираться как мигрировать нету.
>>2755847 >async Убогая хуйня. Я понимаю петухлинщики выёбываются своими тормозными корутинами, но эти ёбаные асинки из петушарпа — лучше уж классические ReadWriteLock и CallableFuture.
>>2756276 Ну и кстати вот уже по этому куску доки можно предположить, что нет там никакой happens-before
These methods are designed to be used as tools for creating higher-level synchronization utilities, and are not in themselves useful for most concurrency control applications. The park method is designed for use only in constructions of the form:
while (!canProceed()) { // ensure request to unpark is visible to other threads ... LockSupport.park(this); }
>>2756332 Чел, ну че ты душишь то? Спуриос вэйкапы, спуриос шмейкапы... Те прямым тесктом в джавадоке говорят что реквест на анпарк не сразу виден - о каком вообще тогда happens-before для park можно говорить?
>>2756340 >реквест на анпарк не сразу виден Мне кажется мы разную доку читали. Там реквест на анпарк вообще липкий >A call to unpark makes the permit available, if it was not already available. (Unlike with Semaphores though, permits do not accumulate. There is at most one.) Такое ни notify, ни signal не дают. Тащемта важность этого метода подтверждает еще то, что его отредачат для виртуальных потоков.
>>2756348 Ну вот еще признак того, что сам по себе park никакого happens before не дают:
Reliable usage requires the use of volatile (or atomic) variables to control when to park or unpark. Orderings of calls to these methods are maintained with respect to volatile variable accesses, but not necessarily non-volatile variable accesses.
То есть - "ок, ордеринг мы вам гарантируем, но визибилити - сорямба, юзайте волатильные переменные".
>>2756366 Не-не. Это для контроля. Ну т.е. из-за того, что любая лока может проглотить реквест с анпарка требуются изъебства в виде атомиков и волатильных переменных. >to control when to park or unpark Но даже эталонная реализация, данная в доке, подразумевает локу. Которая должна гарантировать видимость. Потестить бы это на каких-то arm, где модель памяти мягче, чем в x86. Да и happens-before - это как раз ordering.
>>2756373 >Да и happens-before - это как раз ordering. Это не только ордеринг но и визибилити. А тут ордеринг есть, а визибилити - сорямба, не завезли.
>Two actions can be ordered by a happens-before relationship. If one action happens-before another, then the first is visible to and ordered before the second.
Я оговорился выше, когда сказал что "ордеринг мы вам гарантируем", достаточно вчитаться в цитату доки из предыдущего мессага чтобы увидеть что ордеринг они гарантируют только относительно волатайлов. Что какбэ тоже маловато для HB.
>Но даже эталонная реализация, данная в доке, подразумевает локу. Которая должна гарантировать видимость
Ты про FIFOMutex? Так правильно - там оптимистичная блокировка на атомик булене в цикле - она и обеспечит тебе видимость.
>>2756390 Ладно, кажись я допер, чтение волатильной переменной дает видимость для всего, что было между другим таким чтением. https://stackoverflow.com/questions/2475067/java-locksupport-memory-consistency >чтобы увидеть что ордеринг они гарантируют только относительно волатайлов. В совокупности с гарантией mutual exclusion, наверное можно ей назвать, не?
>>2732193 Пользовался огрызком про 2017, это отвратительно, ноутбук греется и шумит от любой средней нагрузки, но это все не главное. У меня была версия на 8гб ОЗУ, этого не хватает ни на что. ПОВТОРЯЮСЬ НИ НА ЧТО. У тебя только докер с айдией будут кушать под 10, а я еще про СУБД молчу. А тебе еще нужно параллельно держать браузер и т. д.
Щас у меня средненький vivobook (14”, r7 5700u, 16ram). Хватает, но ОЗУ порой мало, благо в пк 32гб.
Так а как вы предлагаете избавиться от классов в угоду голой функции main? Там же файлы в .class "компилируются", где уже и описан main метод, а тут придется в какой-то анонимный класс оборачивать каждую такую беспризорную "функцию"
>>2756623 Хочу, чтобы не через классы, а прям на фундаментальном уровне была поддержка функций, файлы .function, functionpath вместо classpath, переменные типа "ссылка на функцию", functionloader-ы и т.д.
>Second, we introduce unnamed classes to make the class declaration implicit.
>Henceforth, when the Java compiler encounters a source file with a method that is not enclosed in a class declaration it will implicitly consider such methods, as well as any unenclosed fields and any classes declared in the file, to be members of an unnamed top-level class.
Мало чтоли в джаве приколов с анонимными/VM-анонимными классами?
>>2756639 всякие груви и скалы. Не получилось перевести всех на хаскель - попробовали сделать скалу. Не получилось перевести на скалу - из жабы делают хаскель/скалу
>>2756628 >прям на фундаментальном уровне была поддержка функций, файлы .function, functionpath вместо classpath, переменные типа "ссылка на функцию", functionloader-ы и т.д.
И что тебе это бы дало?
Подумай вот о чем - на уровне железа один хуй у тебя будет императивный CPU, работающий со стейтфул-RAM. Чистенькими остаться не получится, рано или поздно придется делать грязные делишки, так чем JVM не кандидат?
>>2756659 И? В чём проблема? Ты на функциональные языки программирования намекаешь или на что? Функции как в хаскелле мне нахуй не нужны, мне надо как в плюсах.
>>2756672 Мне она не особо нужна. Сложно придумать задачу, где с перегрузкой операций становится значительно удобнее писать код. В вузовских лабах на сложение матриц это выглядело прикольно, но в повседневной бизнес-логике это ну никак не применить, здесь и обычное умножение юзается нечасто.
Хочу сделать подобное, для петпроектика в гите, шоб вкатиться: Есть некий сервис, с возможностью регистрации. Данные пользователя соответственно: логпасс, инвайт, счет фантиков. Также этот сервис позволяет делать эмиссию и ремиссию денег посредством лотереи. Таким образом, общая масса фантиков будет зависеть исключительно от удачи. Также есть возможность дебета и кредита между юзерами. Идея в том, что лотерея сама по себе будет производится посредством ГИСЧ, таким образом надо как-то делать так, чтобы этот процесс не жрал все ресурсы. Каждый пользователь с его счетом будет в реляционной бд постгресс. Также каждый процесс разыгрывания лотереи - twist, будет записываться в nosql бд - mongo. Каждый пользователь связан с другим, посредством инвайтов и это будет отражено в neo4j. Возможно, можно как-то внедрить и редис для кэша и кафку для регулирования того, что ГИСЧ очень медленный. Все вышеописанное - рест сервис. Еще будет mvc на jsp для отрисовки.
Где я проебался, что лучше изменить на этом этапе...?
>>2759754 >хотя бы таймлитф возьми Ну на единственной вакухе тока jsp. Такшо надо хотя бы посмотреть, что за жсп. >побольше разных технологий засунуть в проект? Угу, джуновский же проект. Не знаю тока, как будет взаимодействовать спринг секурити реста с сервером отрисовки.
>>2759716 ПИЗДЕЦ! ТРИ ебанных базы данных! ТРИ, КАРЛ!!! Эт чё типа микросервисы шоль? Тогда какого хуя одна БД ссылается на другую базу данных. Они вообще не должны знать о существовании друг друга. Да и вообще, что в проекте такого, что не может решить одна постгря или одна монго или один neo4j? Если у тебя с самого начала проект тормозит, значит архитектура построена через жопу и её нужно переделывать, а не ставить костыли в виде кеша или кафки. Микросервисы вообще другую проблему решают. Они решают проблему менеджмента, шоп дать каждой команде по сервису и они съебали разрабатывать независимо друг от друга. Кодеру одиночке никаких особых профитов они не дадут. Если только бОльший контроль над масштабированием и чуть бОльшая гибкость деплоя. Но по факту, то что ты нарисовал это тот же распределенный монолит. От того что ты ебать сделал 3 сервиса, он от этого монолитом быть не перестал. Потому что на фронтэнде откроется страничка, и ему придётся делать 2 запроса - один в users, другой в twistes, потом эти данные компоновать и выводить на фронте. Ты только добавил переусложнений на ровном месте.
>>2759900 >Ты только добавил переусложнений на ровном месте. Ебать открытие. Я просто хочу научится работать с бд. Все. >Тогда какого хуя одна БД ссылается на другую базу данных. Не понел, где? В бд users будет тобличка типа create table users ( id identity primary key, login varchar(25) not null, password varchar(25) not null, amount bigint not null ); В invites twistes будет поле user, которое relationship на id из users. Впр можно и логин туда хуйнуть, оба поля уникальны. >ему придётся делать 2 запроса - один в users, другой в twistes, потом эти данные компоновать и выводить на фронте. По идее, он просто делает запрос на условно 10 верхних документов на полю user и все. Айдишник известен на стороне сервера из сессии, а фронт просто пихнет код авторизации.
>>2759949 >Я просто хочу научится работать с бд Ты учишься делать ХУЁВУЮ архитектуру, потому что в реальном мире ни у кого нет столько денег, чтобы содержать зоопарк из баз данных. Серверные ресурсы не бесконечные. При том что на каждый запрос будет JOIN который скомпонует данные из нескольких источников. Это расточительно как в плане запросов, так и в плане будущей поддержки. Это по сути, программирование ради самого программирования.
>Не понел, где? >В invites twistes будет поле user, которое relationship на id из users Ёпта, ну элементарно обнови ID у пользователя в постгре и у тебя всё посыпиться. Нельзя удалить пользователя, чтобы при этом не остались "мёртвые" ссылки в других базах. И что что они уникальны? Если я удаляю пользователя, мне нужно будет пройти по всем базам и удалить всё что ссылалось на него.
Какбе ебать у тебя базы независимы, для галочки. А по факту очень зависимы.
>>2760018 >При том что на каждый запрос будет JOIN который скомпонует данные из нескольких источников. Можешь раскрыть мысль? >Ёпта, ну элементарно обнови ID у пользователя в постгре и у тебя всё посыпиться. Primary key меняют? Реально? >Нельзя удалить пользователя, чтобы при этом не остались "мёртвые" ссылки в других базах. И что что они уникальны? Если я удаляю пользователя, мне нужно будет пройти по всем базам и удалить всё что ссылалось на него. Ну если б я их сделал в виде таблиц, было б ровно тоже самое. И насколько я знаю, реально никто не удаляет, просто флажок делают, мол удалено. >Какбе ебать у тебя базы независимы, для галочки. А по факту очень зависимы. Окей, тогда в twistes можно хранить метаданные по конкретной лотерее. А все связи сделать в другой табличке, где будет связь id users один ко многим user, и document один к одному id из бд twistes create table twistes ( id identity primary key, user int not null, document varchar(25) not null ); А invites хз, мб проще просто перенести все в табличку отдельную, но отслеживать дерево связей, возможно, будет запарнее. Надо подумать. По крайней мере с twistes уже лучше?
>>2760042 Ой не неси пургу, твоё решение говно. Заставить бы тебя поддерживать этот проект хотя бы год. Естественно тебе похуй, ты поднял свой петпроект и снёс через день. Главный фейл в том, что ты мешаешь кислое с пресным. Реляционные и nosql базы в одном проекте это как быть поклонником минимал техно и Верки Сердючки одновременно. У реляционок жёсткая структура данных, ты не можешь добавить юзеру новые поля пока не сделаешь `alter table`. Соответственно, тебе придётся ебаться с миграциями. Но зато, ты получишь бОльшую гибкость запросов. Непонятно, зачем здесь нужна большая гибкость? У тебя максимум будет 4 операции - create user, get user, update user, delete user, ВСЁ! Монга здесь прекрасно бы справилась. Непонятно какую глубокомысленную идею ты преследуешь добавляя постгрю? Она будет работать тупо на CRUD. Ок, даже сортировать по таймстампу! Тоже самое с neo4j. Здесь нет никаких ни many-to-many отношений, чтобы нужны были графы. Ты придумал лишнюю ебатню, чтобы при каждом чихе нужно было ходить в другие ДБ и обновлять данные. Это будет добавлять лишнее latency и нужно будет это гасить кешированием.
>>2760158 >У тебя максимум будет 4 операции - create user, get user, update user, delete user, ВСЁ! >Также есть возможность дебета и кредита между юзерами. Точно ли многодокументные транзакции норма? >Здесь нет никаких ни many-to-many отношений, чтобы нужны были графы. Ну как, есть же инвайты. Соответственно будет дерево из юзеров. Условно A пригласил B, C, D, а D в своюю очередь пригласил еще R, T. Пик крч. Если добавить обратные связи, скажем проценты, то получится пик 2. Не то, чтобы это нельзя было сделать через постргресс, мне просто хотелось попробовать neo4j.... >Короче, из всех баз данных можно было оставить одну монгу. Мне вообще не нравятся nosql бд, я лучше оставлю реляционную.
>>2760158 > Ой не неси пургу, твоё решение говно. В общем, поясните мне, пожалуйста, почему нельзя мешать nosql бд и релиционные. По идее редис же есть, для кэширования данных ну или кафка, для консумеров и продусеров. Или это совершенно другое? В общем-то с той связью, что у меня, будет абсолютно наплевать удаляется метаданные или же нет. Можно будет выводить типа, срок хранения истёк ну или что-то подобное. Ещё можно повесить срок жизни на метаданные, так если и удаляется данные, они в любом случае умрут, вне зависимости от того, что там в реляционной. Единственная проблема будет, если кто-то изменит id в документах и возникнет неконсистентность данных. Я хз, возможно ли такое...
>Заставить бы тебя поддерживать этот проект хотя бы год. Да похуй, ты главное деньги плати, я-т любое говно поддерживать готов.
>>2760357 Окей, я и не претендовал на знания, тк ни разу не видел ни одной архитектуры. Так или иначе, обязательно надо выебнуться, что ты не такой и вообще выше всего этого?
Правда ли, что сейчас нельзя писать циклы и надо всё сводить к стрим апи? Вот, к примеру, типичная задача, где надо что-то посчитать и положить результаты во вспомогательную мапу, а потом по этим данным как-то отфильтровать входящие данные. Циклами такие задачки решаются элементарно. А вот через стрим апи голову сломать можно. Надо как-то вывернуться, насрать в поток какого-то маловразумительно говна, потом написать действие, которое это говно соберёт и склеит с нужными данными. Зачем так нужно извращаться?
>>2760530 >Правда ли, что сейчас нельзя писать циклы и надо всё сводить к стрим апи?
Запрещать циклы - шиза ебаная. Обычно она бывает у тех, кто перекурил какого нибудь хаскелля, где циклов нет и все делается через всякие мапфолдредьюсы по коллекциям, и теперь косплеит функциональщину в жаве любой ценой нахуй. Не надо так.
На самом деле стрим апи и циклы работают по разному и имеют разный сет достоинств-недостатков. Стримы можно параллелить, циклы - нет (чх, фанатики параллелят их редко). Стримы предоставляют понятный читабельный паттерн мап-редьюс, циклы - нет. В то же время итерации циклов, в отличие от лямбд стримов, можно замыкать на мутабельную переменную, что бывает удобно. Более того - циклы просты и предсказуемы как палка, в то время как по стримам у Тагира Валеева есть два доклада с их "причудами" и один опенсорцный либ StreamEx, дополняющий и исправляющий недостатки оригинальных стримов.
>>2766790 А что значит - "только для тестов", философски говоря? Тесты - просто частный случай переиспользования сущности под тестом, ни больше ни меньше. Да и что есть тест, если не формализация какого то кейса, который может случиться с тестируемой сущностью в проде? Учитывая вышеозвученные риторические вопросы, ответь - почему дополнительный конструктор, объявленный для сущности, должен и может быть только конструктором для тестов?
По совести, должно быть однохуйственно что это за конструктор. Если по какой то причине это у тебя не так, значит получилась хуйня скорее всего. Давай больше деталей.