24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Программирование - это не столько про анальное крудошлёпство, сколько про стиль мышления. Высокоуровневая абстракция, поиск сходных черт, оптимизация - всё это высшие интеллектуальные способности, что образуют такой прочный симбиоз с программированием на Java.
Пять вопросов из предыдущего треда: 1. Самая базовая и мастхев библиотека/фреймворк джавы, без которой джава вообще не джава (за исключением стандартной библиотеки)?
2. Сап джавовый! Я тот неугомонный который копается в JVM. Хочу сделать следующее, написать приложуху на джабе, прикрутить мониторинг и начать насиловать JVM. Когда найду потолок, начать опциями комбинировать чтобы повысить производительность. Подскажите как это сделать с технической точки зрения. Вижу следующий вариант: На спринг буте делаю рест хуйню с одним эндпоинтом, когда буду дергать его, спринг будет в цикле создавать n количество объектов (в классе которого ещё будут статические поля). Норм тема или херню придумал?
Когда мы вызываем с помощью рефлексии метод другого класса и передаем туда аргументы, он выполняется там где мы его вызвали с помощью рефлексии, или выполняется там откуда вызвали ?
Вызванный через рефлексию метод вызовется так же, как и вызванный напрямую. В том же треду, на том же стеке вызовов. Единственное отличие - для java.lang.Method можно задать обьект-инстанс, на котором этот метод будет вызван. Ну и с точки зрения производительности может быть просадка, ибо рефлексия дороже обычного вызова (особенно если работать с рефлексией по тупому).
>>2585661 (OP) Как там в вашем тестконтейнере почистить все данные в БД после каждого теста? Перезапускать контейнер или дрочить репозитории руками не предлагать.
>>2586384 Да, каждый раз когда добавляешь или удаляешь таблицу меняешь клин-скрипт. Способ не очень подходит, если ты через свою приложуху динамически меняешь схему. Поищи по гитхабу, как используется Sql.ExecutionPhase.AFTER_TEST_METHOD для очистки базы. Это если ты не накатываешь схему на каждый тестовый метод. Миграции по умолчанию накатываются на каждый тестовый класс, потому что каждый раз переподнимается контекст.
Аноны, есть две @Entity, скажем Person, с полями name и age, Payment с полями employeeName и amount. Как мне через JPA получить третий объект, представляющий джоин этих двух энтити?
>>2585661 (OP) >Самая базовая и мастхев библиотека/фреймворк джавы, без которой джава вообще не джава (за исключением стандартной библиотеки)? Конечно же ЖИДБРЕЙНС АННОТАЦИИ. Ебало тех, кто пишет @NonNull и Validate.nonNull(obj) представили?
Почему валидация List<@Valid CustomObject> может не работать, и когда поле не проходит валидацию выдает код 500 вместо 400? Когда пробую сделать реквест с просто @Valid CustomObject, все отлично. В чем может быть причина?
>>2586816 Использую аннотации спринга и в хуй не дую. Javax превратился в jakarta? Да и в рот оно ебись! У меня есть спринг, идея провалидирует все параметры.
Пару часов потратил на гугление, но нихуя внятного и понятного не нашел, поэтому прошу помощи у вас. Есть один JMS-канал, откуда летят сообщения. Мне необходимо эти сообщения получать и сразу без каких-либо обработок отправлять в такой-то топик Кафки. Хуйня вопрос, заюзал KafkaTemplate и отправил куда надо и все работает, все понятно. Но сделать это нужно с помощью Spring Integration, которым я впервые пользуюсь и который для меня нихуя непонятен.
На ютубе только гайды от индусов, в которых делается непонятная не нужна мне поебень, которая даже отдаленно не помогает сформировать хоть какой-либо псевдокод у себя в голове. Вся надежда на вас, анончики, прошу любой помощи
И там, и там есть абстракция - у метода абстрактный класс, у абстрактной фабрики интерфей. И уже конкретный сабкласс создает конретные объекты. Какого хуя?
Получается, ключевое отличие в том, что в случае с Abstract Factory, клиент не знает, какую фабрику получает и какие объекты будут созданы? Там еще говорится, что Abstract Factory может создавать семейства объектов. А че, разве я не могу создание нескольких объектов засунуть в фабрику, используя Factory Method?
Грубо говоря, с Factory Method мы имеем одну фабрику, которая на основе какой-то переданной переменной будет создавать нужный объект. А c Abstract Factory мы имеем фабрику фабрик. Так как правльно-то?
>>2587398 Потому что вопросы задавать не умеешь, вот почему.
Ни предыстории, ни внятного эксепшена, нихуя не дал, и бампает сидит - ну умора. Тут не чат экстрасенсов. По той инфе что ты дал, однозначно сказать можно только одно - у тебя SLF4Jя в класспафе нет. Помогло тебе это? Нет? Ну и хуй с тобой.
>>2587369 Ты слишком критичен к себе, и слишком много придаешь значения паттернам. Паттерны это хуйня... Ну то есть как хуйня... На полшишечки хуйня. Ща обьясню.
Просто жили-были банда четырех, писали программульки на плюсах. Собрали пучок граблей, сьели пуд соли, но преуспели в этом деле. А потом смотрят такие - "йоу, а у нас вот такая вот конструкция повторяется в нескольких проектах, и в целом роляет". Взяли с пару десятков таких конструкций, назвали паттернами да и собрали их в книгу.
По сути паттерны это просто юз-кейсы, оторванные от базы, ни больше ни меньше. Без базы паттерны - каргокульт. Зубрить различия между ними имеет смысл только чтобы иметь возможность ответить какому нибудь тупорылому уебку на собесе, если он своим скудным мозгом додумается спросить об этом. На практике знание паттернов назубок не дает никакого преимущества, а иногда может навредить. Про фабрику достаточно знать лишь что она позволяет отвязать объект(ы) от процедуры его/их сборки. А уж как это делается - методом или классов - так ли уж важно?
>>2587402 Я портирую мод для копрокубов с 1.7.10 на 1.12.2. Это в целом большое приключение из-за говнистости форджа и градла, и мне пришлось уже разрешить (но в основном обойти) дохуя проблем.
Самой серьёзной проблемой на моём пути оказалось добавление библиотек в джарник. Видимо, это происходит из-за того, что фордж как-то анально залезает в процесс сборки градла и ломает там чё-то (скорее всего, эта поломка очень глубокая, плавающая, редкая и платформо-зависимая, потому что починить её у меня не удалось, даже скачав готовый проект мода на 1.12.2).
Я пытался использовать различные версии форджеградла, пользовался разными плагинами для шейдинга, перепробовал с десяток разных способов с стаковерфлоу и вики форджа, мне даже приходилось скачивать идею 2017 года. Всё бестолку. Самое большое, что мне удалось добиться от дегенерадла - добавить все библиотеки вместе с майнкрафтом в итоговый джарник.
В один момент я плюнул и решил добавить библиотеки напрямую в .jar. Я сделал проект на мавене с этими библиотеками, открыл итоговый джарник с библиотеками в винраре, мод без библиотек, и перекинул из библиотечного всё в модовый.
Запускаю я значит этот мод, и вижу следующую проблему - мод успешно вызывает HikariCP, который был добавлен путём копипасты, а тот пытается получить доступ к LoggerFactory из SLF4J, который тоже был закопипасчен, и это уже не получается. Вылетает java.lang.ClassNotFoundException: org.slf4j.LoggerFactory. Я предположил, что дело в том, что по какой-то причине закопипасченные классы не могут получить доступ к закопипасченным, но написанный в основном коде мода Class.class.getClassLoader().loadClass("org.slf4j.LoggerFactory"); тоже выдаёт NullPointerException.
>>2587409 1. Открываю джарник с библиотеками, собранными через мавен, и мод, собранный градлом в винраре 2. Выделяю пакеты с библиотеками (в моём случае org и com) 3. Перетягиваю их в окно мода и нажимаю "ОК" в открывшемся окне 4. Запускаю получившегося франкенштейна сервером форджа
>>2587406 Ок, с форжем я почти не знаком, ибо в майнкампф не шпилю. Скорее всего ты впоролся в класслодеры, и SLF4J у тебя грузится не-пойми чем.
На твоем месте я б забил на затею с винраром и все таки разобрался бы с добавлением зависимостей в мод. Я чекнул мельком mdk-проект с форжа - выглядит так, будто все должно решаться обыкновенным добавлением зависимостей в dependencies.
>>2587405 Да, спасибо. Ты все верно написал, я со всем согласен. Хочу именно в самом стандартном классическом их виде разобрать паттерны, чтобы дать четкий ожидаемый ответ на собесе.
>>2587421 Чел, ты щас на третьей стадии принятия - торг. Давай сразу к принятию.
Отвечая на вопрос: гугли джава класслодинг. Стандартный сет класслодеров подразумевает цепочку "бутстрап класслодер" -> "класслодер расширений" -> "системный класслодер". Последний ищет и грузит классы из класспафа (надеюсь - что такое класспаф не надо обьяснять?) когда ты делаешь класслодер.loadClass().
Но это все стандартная схема. Что у тебя там нахуеверчено - одному богу известно. К примеру, вот этот вот кусок стектрейса:
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:101) ~[launchwrapper-1.12.jar:?] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_352]
По нему видно что произошла делегация к какому то хуй пойми какому класслодеру net.minecraft.launchwrapper.LaunchClassLoader, который хуй пойми как работает и хуй пойми откуда классы берет. Ты серьезно щас хочешь лезть в кишку? Просто поверь - разобраться с твоими терками к градлу скорее всего будет проще.
https://spring.io/guides/tutorials/rest/ сижу эту хуйню читаю блядь как же мне хуево чисто физически я не привык, когда происходят в коде вещи, о которых я ничего не знаю эта залупа сама что-то делает, я даже не понимаю что ей для этого надо тонны блядь каких-то методов хуй пойми для чего обертка над оберткой над оберткой над апи фреймвокра
>>2587801 Обычные пулы исполняют монолитные раннаблы и коллаблы. А форкджойн пул, помимо раннаблов и коллаблов, умеет выполнять forkjointaskи. А форкджойн таски имеют уникальную особенность - их можно не только выполнить (compute), но и побить на подтаски (createSubtasks), этой особенностью форкджойн пул активно и пользуется. Там есть еще всякие внутренние нюансы работы этого пула типа job-спиздинга, но ты просил по вершкам. За деталями иди к Шипилеву в блог.
Напрямую его обычно редко используют. Он сидит под капотом у комплитабл фьюч.
>>2587916 да я не про это даже почему я нигде не создаю объекты, но это говно знает какой и где объект создать? а если она однажды не тот объект мне создаст? как использовать разные конструкторы? я не понимаю как это все там внутри работает а смотреть исходники проекта этого я ебал того в рот кто в здравом уме туда полезет? чтобы скакать от одной зависимости к другой часами? ты сам можешь вообще имагинировать такое?
а еще уровень статьи где говорят вот если ты Employee возвращаешь, то это не REST а вот если ты EntityModel<Employee> возвращаешь, то это REST ахуенное блядь объяснение, я теперь пытаюсь про это жижу нагуглить что-то получше, но нигде не упоминают подобное - про все эти линки блядь какие-то ахуенно, хочешь разобраться в чем-то - тебя только запутывают больше и говна за шиворот накидывают
я всегда блядь раньше считал, что REST это обычный подход к менеджеру какими-то ресурсами, которые могут быть запакованы в условный жсон но теперь я блядь не уверен и не могу больше ничего подобного нагуглить, что в той статье сказано (а как же не гуглить? ведь это сами разрабы спринга меня запутали. они то дядьки умные. это я хуй с горы не понял их гениальную идею просто) спасибо дядя спрыня покодил блядь
>>2588015 Про spring data rest почитай, уже давно все решено и сделано за тебя, попроще к этому относись и не заморачивайся надо всем. я хз как ты вообще в проге двигаешься без умения делать что-то не понимая (по крайней мере первое время)
Какие зависимости добавлять для Hibernate ?!?!?! Добавляю hibernate-core, на тебе ошибка, добавляю ещё один, на ещё ошибку ! ! ! ! ! ! Добавляю все возможные библиотеки для hibernate, опять ОШИБКИ !! ! !
>>2588773 Спрашивают. Полезно знать, что такое persistence unit и context, как оное связано в entity manager'ом и сущностями, какие состояния бывают у сущностей (transient, persisted, detached, removed) и что они означают в контексте разговора о persistence context'е.
Если на этом этапе ты понял что в гробу видел все это знать - поздравляю. Ты теперь стал чуть ближе к ORM-скептикам.
Окей, два вопроса. 1. Но ведь dry - don't repeat Yourself. Паттерны жеж не твои, ты не себя повторяешь 2. А что делать если ты такой пишешь код, никого не трогаешь и БАЦ - случайно переизобрел один из паттернов? Переписывать?
>>2588885 >Кек Хотелось перестать читать, но всё же обоссу порриджа.
>1. Но ведь dry - don't repeat Yourself. Паттерны жеж не твои, ты не себя повторяешь Ты еблан? Доебался до хуйни. Очевидно речь идёт о в принципе отсутствии повторений. Да и к тому же если ты паттерны не один раз используешь, то ты принцип нарушаешь.
>2. А что делать если ты такой пишешь код, никого не трогаешь и БАЦ - случайно переизобрел один из паттернов? Перефразировать ещё хуже чем повторять себя, потому что сложнее сделать абстракцию над этим. Это максимально хуёво, потому что ты в угоду визуальному ненарушению DRY ухудшаешь качество кода.
>Переписывать? Как я уже говорил, сделать запрограммированную абстракцию, которая бы включала в себя этот паттерн, а не повторять код.
>>2588892 Ты че порвался то? Высрал полотно так, будто я какой то защитник паттерного мышления, бля. Выше я уже пояснил что паттерны хуйня, поэтому я в душе не ебу, охоту на каких ведьм ты тут развёл.
Просто я первый раз слышу чтоб паттерны обсирали именно через драй. Попросил пояснить. И пока что твоя аргументация звучит так, что хочется сидеть и дальше тебя подьебывать тупыми вопросами на генерацию паст, лол.
Начал изучать кубер, задеплоил свой пет в кластер на клауде, сейчас практикуюсь в написании манифестов и читаю про Helm, в планах после кубера разобраться с дженкинсом, написать пару-тройку пайплайнов. Как думаете достаточно для вката на джуна будет? Или энивей только на позицию стажера могу претендовать?
не писал никогда микросервисы учить спрингу не на своем проекте не интересно хочу попробовать сделать небольшой аналог кинопоиска накидал структуру на пике планирую с этим проектом потом идти на собес база или кринж?
>>2589235 юзеры и мувисы это разные микросервисы? Как юзеры будут знать про мувисы? Что делать если мувис надо удалить? Что насчёт тракзакций? Что делать если умрут мувисы при живых юзерсах?
>>2589017 "Паттерн представляет собой не какой-то конкретный код, а общую концепцию или пример решения той или иной проблемы. Паттерн — это высокоуровневое описание решения, реализация которого может отличаться в двух разных программах." В этом значении паттерн - абстракция.
>>2589243 есть 2 микросервиса REST API (RestController), каждый из которых управляет своей базой данных 1 база - фильмы 2 база - клиенты есть 3 микросервис, который при обращении клиента (4 микросервис) к REST API клиентов, получает запрос регистрации/аутентификации клиента и отправляет ему ответ
если клиенты отвалятся - можно будет смотреть только какие фильмы есть если отвалятся фильмы, то только регистрироваться/логиниться юзеры про мувисы знать не будут (я чет даже и не задумывался об этом, не хотел чтобы юзер мог давать даже оценку фильмам, лол) получается не особо аналог КП, да? ну хз, а как можно связать две независимые БД между собой?
>>2589243 Я не тот же анон, если че > Как юзеры будут знать про мувисы? А зачем им знать про них? Допустим можно сложить мувисы против айди юзера в другой бд > Что делать если мувис надо удалить? А что мешает это сделать в микросервисе мувисов по айди юзера и айди мувиса > Что насчёт тракзакций? Разбивать на несколько в пределах одного микросервиса или есть что-то типо распределенных, на сколько я знаб > Что делать если умрут мувисы при живых юзерсах? Выдавать сообщение об ошибке при неудачном запросе
>>2589260 я думал кинопоиск это поиск подходящих фильмов для каждого юзера. Типа ластфм. Это чо, теперь ещё нужен третий микросервис, хранить связи юзеров и мувисов?
И это надо ещё прикручивать кафку - чтобы мувисы и юзеры могли подписаться на события изменений
Микросервисы - глобальный наёб и торжество сойдева. Реальный опыт корпораций по работе с микросервисами показывает, что в любом случае микросервисы превратятся в очень сильно тормозящий монолит, в котором каждый из тысяч микросервисов связан с каждым другим микросервисом (опыт гейфликса).
Единственная по настоящему работающая архитектура - иерархический монолит.
>>2589266 Ну я скорее рассуждаю с позиции, работоспособно ли это, а оптимальность архитектуры, это уже следующий вопрос, тут я с тобой не могу не согласиться
>>2589260 >А зачем им знать про них? Допустим можно сложить мувисы против айди юзера в другой бд ты имеешь ввиду создать 3 БД, которая была бы связана со всеми REST API? пик
На днях буду изучать spring, после буду проект писать для интервью. Скажите, на spring только сайты пишут ? Или можно лаунчер для майнкрафта написать ?
>>2589421 а че так можно было в 2014? а я в 2015 только поступил в вуз, но пузырек освоил уже на 3 занятии по информатике. получается я мог уже тогда искать работу?
Шарперы чем-то напоминают хохлов. Им нужно всегда заявить о себе, помахать флагом, прийти в тред джавы и высраться, короче, комплекс младшего брата. У джавистов такого нет. Джава просто работает, не надо ничего никому доказывать
>>2589809 Насколько я понимаю, в OneToMany родитель использует Коллекцию с дженерик типом класса дочернего. В методе main(); создаем обьект класса родителя и дочернего, устанавливаем через конструкторы значения. А затем просто добавляем в коллекцию наш дочерний класс и всо. Зачем только ?
>ну хз, а как можно связать две независимые БД между собой?
А в этом и фокус, чел. По сути, разбитие на микросервисы в конечном счете и сводится к разбитию единой модели данных (именно модели - здесь речь еще даже не о конкретных СУБД идет) на контексты. Но разбивается она не совсем на независимые БД. Физически БДшки независимые, но пересматриваются связи между ними.
То, что реляционки - одни из первых кандидатов на звание бутылочного горлышка в системе, люди понимали еще в эпоху хайпа по nosql. Тогда и пришло понимание что какими то гарантиями консистенции данных в модели можно пожертвовать в угоду масштабируемости. Так популяризировалось понятие eventually-consistent - мы допускаем что данные в двух физически независимых БД придут в согласованность не прямщаснахуй, а рано или поздно. И методы обеспечения такой консистентности получаются более щадящие - вместо анального foreign key constraintа ты можешь для согласования моделей использовать, например, event sourcing средствами кафки.
Ну а дальше, можно бить монолит так, что те же юзеры дублируются в разных моделях разных микросервисов и существуют в этих моделях в разной роли. При этом eventually согласовываются между собой. Например, в сервисе авторизации юзер будет из себя представлять табличку с логином и инфой для сверки креденшелов. В сервисе "клиенты" юзер будет существовать как сущность с перечнем закладок и предпочтений, и. т. д. В мире микросервисов такое зовут "разделением доменной области на ограниченные контексты (bounded context)".
И кстати - ментальность типа "юзеры про мувисы знать ничего не будут" - типичная и часто распространенная ошибка при проектировании микросервисов. Много контор, угоревших по микросервисному хайпу, зафакапилось на этом.
>>2589846 хуй знает что за кафка, мне бы спринг освоить сначала епта
у меня была идея просто добавить в бд с пользователями нужные столбцы (в зависимости от функционала) и хранить в них айдишник фильма
например: фэворит пул фильмов для пользователя пользователь жмет на звездочку, имея уже на клиенте id фильма (потому что если он его видит, значит запрос уже был отправлен на бд с фильмами и фильм был дернут за анус от туда) так вот, когда он это делает, этот id просто посылается в нужный столбец БД с юзерами и если я захочу глянуть любимые фильмы, то я: 1. отправляю запрос на БД юзера, получаю id от туда 2. затем делаю второй запрос на БД фильмов и получаю уже по этим айдишникам названия фильмов минус в том, что запрос выходит долгим, через клиента
какие есть еще минусы в моем варианте? (я еще пока ничего не пишу, думаю над архитектурой + спринг учу)
>>2589846 > угоревших по микросервисному хайпу и еще, мне на микросервисы вообще похуй, я не хайпую. мне просто один знакомый сказал, что запилить микросервис в качестве пет проекта - это норм, аргументируя тем, что за этим будущее. но похуй за чем там будущее, мне просто деньги платите я буду писать вам любой кал
>>2589866 >минус в том, что запрос выходит долгим, через клиента
Все правильно, это - минус. Это как раз тот кейс, когда сервисы мы развили, но толку от этого хер да маленько, ибо в одну бизнес-транзакцию "добавление фаворита" вовлечено два реста, которые даже не гарантируют ни атомарность, ни консистентность. Такие случаи называют "распределенным монолитом" и считают за антипаттерн.
Пойди от фильмов. На клиенте у тебя уже известен юзер, так как ты авторизован. На стороне фильмов заводишь табличку "юзер" и связанную с ней табличку "фавориты". В табличке "юзер" у тебя - айди. В табличке "фавориты" - фильмы, которые юзер отметил для себя.
А дальше, нажатие на звездочку обрабатывается ОДНИМ запросом к "фильмам" типа "добавь фаворида для юзера А", который под капотом просто инсертит новый фаворит в табличку. И тогда тебе останется лишь решить для себя, как юзер попадет в табличку "юзер" на стороне "фильмов". Если не хочется связываться на первых порах с эвент сорсингом, можешь просто условиться, что юзер попадает в базу фаворитов при первом добавлении фаворита.
И еще раз - тот факт что "фильмы" теперь имеют на своей стороне "юзеров" - это нормально. Это делает сервис фаворитов самодостаточным: он останется рабочим даже если ты положишь все остальное. Для его работы у него есть все что ему нужно.
>>2589980 Ну расскажи мне на основе курса про лецзиинит эксепшн, из-за чего он возникает и как его избежать на примере например сущностей Доска,Тред и Ответ
>>2590005 какой хибернейт епта я спринг учу до хибернейта я еще не дошел у меня чичас мвц, жэпэа, рэстфул вот седня узнал что есть томкат который в спринг бут входит
>>2590015 Как бы вы объяснили почему из postProcessBeforeInit возвращается бин,а из postProcessAfterInit возвращается прокси? Можно ли из метода before вернуть не бин,а например нулл или прокси? Что тогда будет?
>>2590024 эти методы могут возвращать любой тип, но получить их значения нельзя. поэтмоу используют void прокси возвращается тому що после вызовов пост существующие бины не сразу уничтожаются. там че-то с транзакциями прикол какой-то. я принят?
>>2590022 > хибер будет делать отдельный запрос Получается при загрузки доски с 10 тредами и 50 ответами в каждом мы сделаем 500 запросов? Можно это как-то оптимизировать или все что нам остаётся это отказаться от хибера? > Ещё хибер может игнорировать лейзи и упорно загружать сущность если посчитает нужным То есть если я укажу коллекцию вложенных сущностей как ленивую хибернейт все равно загрузит их как жадные? И исходя из вашего ответа сделает кучу доп запросов? Получается lazy всегда игнорируется или есть нюансы?
>>2590029 > эти методы могут возвращать любой тип, но получить их значения нельзя. поэтмоу используют void Как понять любой тип? Допустим у нас есть threadBeanPostProcessor ,у него есть метод public Object postProcessBeforeInitialization(Object bean, String beanName) Мы можем отсюда вернуть null или обернуть наш бин в прокси и вернуть уже его? > прокси возвращается тому що после вызовов пост существующие бины не сразу уничтожаются. там че-то с транзакциями прикол какой-то. Как связано уничтожение бинов и прокси? То есть если бы они уничтожались сразу мы могли бы вернуть просто бин? Зачем если они бы сразу уничтожались?
>>2590031 >Получается при загрузки доски с 10 тредами и 50 ответами в каждом мы сделаем 500 запросов? нет, в худшем случае мы сделаем 1 запрос тредов + 10 запросов ответов. Если тредов будет 20 - то 20 запросов ответов. Хибер умеет делать джойны, но это анальная магия с кишочками, не всегда срабатывает. Надо будет поковырять на эту тему
>То есть если я укажу коллекцию вложенных сущностей как ленивую хибернейт все равно загрузит их как жадные? у меня было что указывал как ленивые, а хибер загружал как жадые >Получается lazy всегда игнорируется или есть нюансы? предположу что если он может делать джойн то он его делает и сразу загружает данные. А если джойн не выходит - то оставляет лейзи
>>2590043 >Мы можем отсюда вернуть null да >обернуть наш бин в прокси нет >Как связано уничтожение бинов и прокси? как-то >То есть если бы они уничтожались сразу мы могли бы вернуть просто бин? нет >Зачем если они бы сразу уничтожались? затем
>>2590044 Отвечу сам,lazy на коллекциях отрабатывает отлично. Подгружаться сущности будут только при попытке обратиться к их полям. Касательно твоего случая возможно ты обращался к полям вложенной сущности в сервисном слое или в мапере. Пример: Сущность Доска и коллекцией Тредов. До тех пор пока ты не сделаешь Доска.getТреды() треды не будут загружены,до этого момента у тебя хранится прокси,при обращении к которому будет загружена целевая сущность. Объект называется persistentBag если я правильно помню. То есть если у тебя жадно загружаются ленивые коллекции то ставлю 90% что ты обратился к их поляи,например при маппинге в дто
>>2590051 > >Мы можем отсюда вернуть null > да Не можем,так как после postProcessBeforeInitialization вызывается инит метод > >обернуть наш бин в прокси > нет Верно,по той же причине > >Как связано уничтожение бинов и прокси? > как-то Не связано > >То есть если бы они уничтожались сразу мы могли бы вернуть просто бин? > нет > >Зачем если они бы сразу уничтожались? > затем Вопросы задал чтобы показать неправильных ход рассуждений
>>2590055 >Не можем,так как после postProcessBeforeInitialization вызывается инит метод вообще не понял про что ты я тебе про лайфцикл бина у которого можно вызывать инит/пост методы помечая их аннотациями @PostConstruct и @PreDestroy о каком ините после уничтожения речь?
>>2590059 Сначала вызывает BPPbeforeInitialization потом вызывается инит метод, тот самый который ты пометил @PostConstruct если ты вернёшь из первого метода null то в пост констракт у тебя придет нулл и ничего создать не получится
Пачиму нельзя скопировать модуль расширения dashchan встроенной функцией идеи? Выдает ошибку Error adding module to project, причём без какой-либо дополнительной инфы. Зато если в полу-ручном режиме скопировать папку и переименовать там классы с файлами, то всё работает как положено
>>2590062 хорошо. посоветуй тогда где можно посмотреть/почитать про спринг, чтобы на всю эту хуйню знать ответы? и вообще мне кажется ты меня специально пугаешь только, чтобы я отказался от затеи идти в жава энтэрпрайз
>>2590068 Я лично читал spring in action т смотрел доклады Евгения Борисова. Также полезно копаться в дебагере. Про персистант баг я например узнал оттуда. Вот тебе лайфсайкл как шпаргалка
>>2590103 На практике спрашивали плюс минус. Я так долго сижу без работы что успел и докер поковырять и кафку немного. А вакансий с февраля в моем регионе ноль. Так что если ты не из дс судьба может быть к тебе жестока. Будешь как я своими знаниями на дваче выебываться
>>2590112 так найди удаленную блядь хули ты как этот у тебя знания есть по сравнению со мной я нахуй 4 года на шее у мамки после вуза висел ни опыта блядь ни знаний нихуя нет по сути весь вуз блядь лаба1 лаба 2 лаба3 писал в консольке блядской пока я сидел дрочил и прокрастинировал стек вырос так блядь что я ахуеваю буквально а теперь добавь к этому то что если за месяц не освою спринг, не освою жава ЕЕ, не освою хибернейт, не напишу свой маленький микросервис для резюме (мне буквально не хуй показать работадателю, весь мой опыт это лаба 1 на шарпе, лаба2 на кутэ, лаба3 на с++, лаба4 на прологе, лаба5 на ассемблере, лаба6 на андроид, вот и думай бля), не найду работу, то неиронично рискую из КЗ упиздовать в окоп я даже инглишь не знаю толком, могу только документацию читать и то с переводчиком под рукой
>>2590124 Я откликался удаленно,все отказы, даже до собеса не дошло. Некоторые жирным шрифтом пишут тип удаленки нет или джуны только очно. При том что гит с петами имеется
>>2590133 Датаарт теперь айтентика,я проходил у них джава школу лол. У них там три собеса тупо чтобы лекции послушать. При том одно это диалог на английском с носителем,ебать я там пропотел
Сап, жависты. Работаю автотестером на жаве. Есть варинт перекатиться на жава-спринг-хибернейт разраба в кровавом тырпрайзе. Либо пойти дальше по автотестерской стезе развиваться. Какой стул выбрать?
>>2590231 Ну, в перспективе, да. Но поначалу не уверен. То есть, я могу стать синиор атомейшеном. Либо перекатиться на джун-мидл разраба. И мидл вероятно будет мой потолок на ближайший год-полтора. И еще надо учитывать, что это галера. Так что по деньгам, в короткой-средней перспективе, мне кажется, лучше автоматизатором быть. Но тут не только в деньгах вопрос. Мне нравится кодить. Был проект, где было много свободы. И я пилил всякие тулзы по автоматизации, изучал что-то постоянно и т.д.
>>2590241 Ну, представь, что будет через 5 лет, а не в короткой-средней перспективе. В любом случае, разрабом до миддла-сеньора дорастёшь быстрее, чем кажется, и там и там одно и то же программирование, просто вместо тестирования надо будет погружаться в предметную область и бизнес-требования, разница не так уж и велика.
>>2590224 Те в целом самому как тестировщиком, нормально? К чему душа больше лежит?
Вроде как есть мнение что тестировщикам больше всех на орехи достается от чужого долбоебизма. Ситуация, когда на QA спускается невнятная параша от говнокодеров, которую не пойми как вообще тестировать, довольно распространена. Разрабам в целом немного чиловее живется (что на мой взгляд несправедливо, но похуй). Плюс, по моим наблюдениям, лучшие разрабы получаются именно из бывших тестировщиков: наверное потому что тестировщики знают толк в контроле качества, в отличие от среднестатистических долбоебов.
>>2590024 А разве на этапе пост процесс афтер еще не факт, что бин будет запроксирован т.к по сути там и создается прокси? Чтобы произвести какие-то манипуляции именно с прокси обьектом правильнее наверн будет написать эвентлисеннер на контекст рефрешед, где уже точно контекст поднят, все бины настроены и запроксированы
>>2590112 Плюсую, я уже кубер ковыряю во всю последний месяц, а все без работы, надеюсь, когда разберусь и поставлю еще один кейворд в резюме, офферы, наконец, повалятся
Хотя кого я обманываю…
Бтв, скажите плиз, пример дефолт таски с кубером, может мне уже его достаточно и пора переходить к чему-то другому
>>2590252 Всегда казалось, что между мидл разрабом и сеньором прям серьезная пропасть. И, если в тестировании сеньора можно как-то относительно легко залететь, то будучи разрабом надо прям серьезно попыхтеть и прям дофига чего знать. Типа начиная от того, как на базовом уровне устроен язык, заканчивая всеми нюанасми технологии в с которой работаешь (спринг и т.д.). >>2590268 Мне норм. Но душа лежит больше к разрабству. Был проект, где я чисто пилил тестовый фреймворк. Раширял, добавлял новые фичи, фиксил баги. По сути можно сказать был разрабом. Никаких вооще тестов, регрессий, прочей херни. И это было прям круто и интересно. Сейчас пилю автотестики и это скучновато. Хоть и ненапряжно. Но ощущение, что занимаешься какой-то бесполезной хуитой. У меня вот не то чтобы обратное ощущение. Но вижу часто, что разрабы пыхтят, тужатся, постоянно преодолевают какие-то траблы. А я сижу себе да тестики попиливаю. Поэтому еще и стремаюсь немного - вдруг я слишком тупой и не потяну.
>>2590335 Между мидлом и синьором вполне себе осязаемая пропасть - мидл от синьора отличается тем, что мидл имеет достаточный набор компетенций чтобы принимать решения в рамках отдельно взятой бизнес-фичи или компонента. Синьор - человек, способный с нуля стартануть продукт. Синьорность это не совсем про технологии, хотя общая эрудиция тут роляет, да. Синьорность скорее - про вес твоего экспертного мнения и стоимость твоих ошибок.
> Был проект, где я чисто пилил тестовый фреймворк
В какой то мере для меня например эта вот фраза - индикатор того, что твои компетенции вполне могут быть как минимум выше джуниорских. Если ты пилил этот фреймворк с нуля под ключ не в стол, а для реальных стейкхолдеров, реальных пользователей которые им пользовались, ты уже не можешь быть джуном. Даже если до этого ты владел другим стеком, ты уже либо мидл, либо синьор, в зависимости от того, насколько осознанно ты владел этим продуктом. Даунгрейд на джуна станет тупо топливом для твоего выгорания, потому что джун в этом анал-карнавале - фактически подсос. Шестерка. Вне зависимости от рода деятельности.
Поэтому не прибедняйся, не считай себя тупым по сравнению с разрабами (ибо это - навязанный разрабами тестерам стереотип, который тупо ложь: как разраб с многолетним опытом говорю), учи новые штуки и пробуй себя, адекватно оценивая свои возможности. Если ты - на галере, и эта галера дает тебе возможность сделать внутренний переход с тестировщика на разраба - пользуйся этой возможностью: пройти этим путем кратно проще чем искать работу вхолодную.
обращаюсь к интервьюверам (я знаю, тут такие есть). как вы относитесь к тем, кто закончил вышку в ИТ, но как программист не состоялся? и имею ввиду под этим: не участвовал в открытых проектах, не довел до конца ни один из его собственных проектов, знания на уровне "потрогал то, это, пятое, десятое, но нихуя не разобрался досконально в чем-то одном".
и как относитесь к тем, к кому относится все тоже самое, что и выше, но только теперь он понял: времени было проебано и так много, поэтому надо брать любой популярный стек и учить уже хоть что-то, даже если оно тебе не нравится и по тебе это видно?
Мы не любим скакунов, у которых стаж весь - в лоскутах по три месяца длиной. А дальше надо разбираться, что ты имел ввиду под "открытыми" проектами.
Опенсорц? Опенсорц - преимущество, но его отсутствие на самом деле вообще не дилбрекер, всем похуй в подавляющем большинстве случаев. Неумение доводить дела до конца? Ну это означает просто что тебе рано лычку синьора давать, но этож не конец света.
>учить уже хоть что-то, даже если оно тебе не нравится и по тебе это видно?
Бесполезно. Выгоришь, будет еще хуже.
Тут надо просто пересматривать свои ценности. В идеале самое здоровое отношение к стеку и технологиям - чисто утилитарное. Когда ты, поинмая все его достоинства и недостатки, даже отдавая себе отчет что стек по сути - говно, знаешь как его эффективнее всего применять для достижения целей. А кайф получаешь именно от решения задач и своей роста компетенции.
>>2590963 >Неумение доводить дела до конца? разве это не говорит о программисте, что он ленивый хуй и будет только вам палки в колеса вставлять? постоянно за ним присматривать придется, подгонять. оно же нахуй не нужно никому?
>Бесполезно. Выгоришь, будет еще хуже. в длительной перспективе, возможно. но сейчас я готов писать любую хуйню на любом языке (ну я уже решил в жаву вкатиться, вот сижу учу ее, хотя, всегда хотел писать игоры на плюсах, но я понимаю, что это более долгий путь и сложный, особенно, когда цель не найти гейдев контору, а стать успешным инди)
>у которых стаж весь - в лоскутах по три месяца длиной что это значит? разве это не >"потрогал то, это, пятое, десятое, но нихуя не разобрался досконально в чем-то одном" о чем я писал ранее?
>разве это не говорит о программисте, что он ленивый хуй
Ну ленивый хуй разумеется никому не нужен. Но из твоего описания проблемы я понял что речь не об этом же, так? Насколько я понял, ты просто jack of all trades и никак не остановишься на прокачке в чем то конкретном. И как результат, не можешь растить грейд.
>что это значит? разве это не то о чем я писал ранее?
Трогать пятое-десятое - это не просто нормально, это хорошо. А вот что плохо, так это бросать свои обязательства (которые у тебя неизбежно появляются как только ты трудоустраиваешься). Если ты меняешь работу как носки, это для интервьюеров как раз звоночек, что не имеет смысла в тебя инвестировать свое время и деньги.
>>2590986 >ты просто jack of all trades и никак не остановишься на прокачке в чем то конкретном не, скорее я не знаю что мне нравится, я что-то нахожу новое, щупаю, мне не нравится через какое-то время, я бросаю. если бы можно было говорить об этом, как о том, что я могу взять любой язык, который раньше использовал и написать на нем что-то рабочее, то это не так. все что становится мне не интересно или не нужно - просто забывается. и не смотря на то, что я раньше мог на этом даже что-то написать рабочее, пусть и не завершенное до конца, то сейчас я даже условно хелоу ворлд не выведу в консольку на том языке без гугла и вспоминания синтаксиса.
вот например, я помню как делал дипломную работу на реакте, при чем я тогда даже не был особо знаком с клиент-сервер приложениями, но за пару недель смог разобраться и написать дипломную. но если сейчас меня попросить на нем что-то написать, то я даже и близко не помню его синтаксис. помню только общую идею этой библиотеки и для чего она, но не более.
на qt помню формошлепил, еще когда учился, курсовую. написал готовое приложение с весьма объемной базой данных, которая управлялась этим франкенштейном на qt. но сейчас я даже не смогу создать виджет с одной кнопкой.
и я вот как представлю, что после изучении жавы иду на собес, меня там спрашивают про мой опыт, и я отвечаю на каждый вопрос "ну опыт был, да, только сейчас ничего не смогу сделать". мне аж хуево становится и кринжово со всего этого интервью. но в то же время вспоминать это все, чисто чтобы покозырять на собесе, как-то и нахуй не хочется, когда ты пришел на позицию жава девелопера собеседоваться...
>>2590986 >>2591017 т.е. я хочу понять, насколько ценен тот мой позабытый опыт длиною в условные 6 лет, добавив к этому 1 месяц вкатывания в жаву и завершенный 1 пет проект на ней? при условии, что моя цель - получить работу жава девелопером
Сначала ты спрашивал "как мы относимся к таким". Ответ: нормально относимся.
Теперь ты уже задаешь другой вопрос: "насколько ценен твой позабытый опыт". И ответ уже будет другим. Ну... сам понимаешь - каким. Какой ценностью впринципе может обладать позабытый опыт? Ценностью обладают твои скиллы и навыки решения задач, а окончательно роляет ситуация, когда твои скиллы закрывают потребности потенциального работодателя. Те же скиллы определяют и твой грейд. Если твои скиллы - на уровне джуниора, значит и отношение будет на уровне джуниора.
>>2591058 так я вкладывал этот же смысл про позабытый опыт еще сюда >"потрогал то, это, пятое, десятое, но нихуя не разобрался досконально в чем-то одном" ты это понял по своему >ты просто jack of all trades и никак не остановишься на прокачке в чем то конкретном
я не спорю, что не совсем верно сформулировал свои мысли изначально.
>Какой ценностью впринципе может обладать позабытый опыт? а разве это не говорит о человеке, что он как минимум способен к обучению? единственное, ему для этого нужно просто определенное количество времени. я лишь хочу понять: стоит ли это хоть чего-то? или лучше потратить еще пол года практики на жаве, написать 5-10 проектов и идти на собес, даже не упоминая о старом позабытом опыте?
>я не спорю, что не совсем верно сформулировал свои мысли изначально.
Сорян тогда. Если че, я не подразумевал под этим чето обидное.
>а разве это не говорит о человеке, что он как минимум способен к обучению?
Это здорово, но этого работодатель в первую очередь ожидает от вкатунов, стажеров, интернов и джунов. Так называемые "горящие глаза". Им готовы простить незнание каких то вещей и отсутствие навыков, так как все рассматривают их скорее как инвестицию.
Миддлы и синьоры - другая история. Это - бойцы, выполняющие поставленную задачу. Им наоборот готовы простить отсутствие "горящих глаз" и потерпеть их душнину, взамен за их опыт и результативность.
>лучше потратить еще пол года практики на жаве, написать 5-10 проектов и идти на собес
ИМХО при любом раскладе лучше идти на собес как можно раньше. Да, первые собесы ты завалишь, но получишь понимание - чего вообще ждать на собесах (и как результат, чего учить). А иначе ты можешь угрохать кучу времени на этих 5-10 петах, выучить хуй пойми что и все равно не пройти.
>даже не упоминая о старом позабытом опыте
Если не хочешь чтобы тебя спрашивали о позабытом опыте, лучше убрать. Но ты подумай - может он не настолько уж и позабытый?
>>2591114 >Это здорово, но этого работодатель в первую очередь ожидает от вкатунов, стажеров, интернов и джунов. а я и не претендую на что-то выше джуна. какое-то время думал вообще уйти тестировщиком куда-нибудь (представлял это нечто более простым, чем писать по). да и кто лучше протестирует программу, чем сам программист?
>Но ты подумай - может он не настолько уж и позабытый? на уровне синтаксиса точно. да и что вообще можно рассказать об этом? как создавал виджет через Qt4:: обращаясь к объекту <name>? разве что помню основы плюсов, потому что сложнее консольного приложения на них не писал. даже STL далеко не весь потрогал, не говоря уже о boost. козырнуть явно не чем, но и приходить и говорить "здравствуйте, я программист, пишу на жава 1 месяц, вот мой пет проект" как-то тоже...
>да и кто лучше протестирует программу, чем сам программист?
Спорно. Программисты - те еще проебаторы. Сам факт, что программисты по прежнему не любят и не умеют писать юнит тесты, уже говорит о том, что они не умеют нихуя тестировать свое дерьмо.
>а я и не претендую на что-то выше джуна.
Ну тогда я думаю вопрос исчерпан. Добро пожаловать в реалии джуна 2022 года.
>>2591153 хз, когда программист пишет приложение, сил писать юниты уже не остается. я и сам не люблю распыляться. если я пишу и сконцентрирован на чем-то, то я и хочу писать это.
но когда у тебя работа основана на тестировании и твоя задача заниматься непосредственно тестированием, то и потратить свое время на написание юнита не сложно. наоборот даже, появляется некоторое желание сломать чужой код, чтобы нормально сделали.
я не работал тестировщиком, это мои представления только. но я действительно считаю, что программисты не должны покрывать код тестами.
под программистом я подразумевал человека, который знает как работают программы/код, как там все устроено, потенциально шаткие места и т.д.
>>2591156 Был период когда я так же думал. Сейчас я считаю иначе.
Цимес в том, что хорошие юнит тесты на самом деле пишутся просто, и сил отнимают в разы меньше, чем ковыряние сорцов дебагом, когда случится бага. А если юнит тесты написать на какую то хуйню тяжело настолько, что сил на это не хватает, значит либо эта хуйня написана говенно (закон юнит-тестирования: когда тестируемый юнит написан хуево, юнит тест со стопроцентной гарантией будет тоже бесполезным куском говна), либо эта хуйня должна покрываться другого уровня тестами (интеграционными).
Ну а дальше весь вопрос сводится к тому, как писать юниты хорошо. И вот здесь у программистов все совсем плохо. Часть пытается каким то образом купировать свою некомпетентность посредством введения дополнительных ритуалов, aka test-driven development. По слухам - кому то оно даже помогло (но в основном - нет). Другая часть тупо забила на юнит тесты, и по старинке хайрят QA-команду, которая мейнтейнит высокоуровневый тест-сьют.
>>2591171 Я пишу интеграционные тесты на все эндпоинты своего сервиса и считаю их очень полезными. Очень часто на этапе написания теста понимаю, что эндпоинт работает неверно. С другой стороны не очень представляю, как можно писать по tdd в test-first стилистике. Это надо заранее на 100% понимать, как будет работать твоя апишка на вход и выход и припоминать все сайд-эффекты. Типа вот есть такой пост запрос - вот три валидных запроса, 5 невалидных, вот ответы на это все, вот такое изменение в базе произойдет, вот тут вызов внешнего сервиса в таком формате, вот тут пук в кафку в таком формате, вот здесь обращение к серверу авторизации в таком формате. После написания эндпоинта я это сделать могу, хоть и времени на все это уходит раза в 2 больше, чем на написание самого эндпоинта. А заранее написать тест - это анрил. джун+ спринг-крудошлеп
>>2590338 >пилил этот фреймворк с нуля под ключ не в стол Пилил не с нуля, конечно. Пришел, когда уже база была. Но добавлял какие-то новые фичи. Спасибо за поддержку и советы.
Сап, анчоусы, только начал разбираться с ci и тут же вопрос, как я понял, при коммите в условный гитхаб срабатывает скрипт, который билдит твое приложение и запускает тесты, а как быть с датасорсами? Для этого делают отдельный тестовый профиль, в котором нет коннекшенов к базе или там есть какие-то инструменты, которые поднимут контейнер с чем угодно? Если есть то какие?
>>2591466 Юниты запускаются на всяких ин-мемори HSQLDB/H2 Автотесты подключаются к полноценной СУБД, аналогичной обычной работе приложения. Ну какие там могут быть инструменты? CI-агент запускает приложение, оно подключается к отдельному серверу с СУБД, и всё.
>>2589008 Маркет практически целиком на жабе написан, еще некоторые части клауда, толока, бизнес да и много где по мелочи. Но в основном сейчас Go/C++/Python используют.
Сейчас будет, скорее всего, очень глупый вопрос, но всё же. Как кэшировать объекты на уровне приложения? Есть кэш 1 уровня у Хибернейта (хз, может и у всех, я пока чисто попсу ковыряю) - можно не закрывать сессию и иметь всё под рукой, есть какие-нибудь кэшинг-фреймворки, есть вариант навелосипедить что-то своё под конкретную специфику. Что выбрать? Что анон выбирает?
При разработке swing-приложения в Intellij idea его размер такой как надо. Но когда я делаю build и запускаю в папке jar-файл, размер окна и компонентов увеличивается многократно ! Почему так ? Теперь всё переделывать...
>>2592417 >>2592420 Хорошо, понял, спасибо. Но всё-таки интересует момент с использованием кэша сессии в Хибернейте. Я щас на работе имею дело с проектом, там вообще никакого кэширования нет, есть только некий Tapestry Hibernate SessionManager, из которого всё время берётся сессия, которая никогда не закрывается. Я так понимаю, она вместо кэша и используется.
>>2592479 это внутренний хибернейтовский в попытке снизить количество операций с бд. Кеш обычно нужен когда например есть дорогие обращения к внешним сервисам, и ты кешируешь возвращаемое ими значение
>>2592482 Ну вот меня как раз и интересует: можно ли в приложении, которое активно обращается к БД, кэшировать через Хибернейт таким вот образом? Так ещё и искать удобнее.
Что посоветуете изучить в дженкинсе джуну, над какими тасками стоит посидеть? Пока пишу простейшие одноклеточные джобы, но хотел бы разобраться как сделать так, чтобы приложение после успешного прохождения тестов собиралось и пушилось в докер реджистри, а потом каким-то образом оказывалось в кубернетисе, допустим с докером вроде изи, я поставил плагин, которое как я понял это сделает, но как это все направить в кластер с использованием чартов пока не разобрался, так что можете прояснить, ну или хотя б на вопрос ответьте
>>2592521 ничего. это тебе надо девопса изображать. то есть, ты спрашиваешь штуку, которая зависит от особенностей деплоя в кубер. А с точки зрения Jenkins тут абсолютно нечего изучать. Ты как запускал команды через sh, так и будешь запускать всю жизнь.
>>2592521 Джуну надо знать о существовании дженкинса. Миддлу надо уметь нажимать на кнопку "Build Now". Есть ещё кнопка "Build with Parameters", но это уже уровень сеньора. И я блять серьёзно. Ты разраб, а не девопс, к написанию пайплайнов тебя и на километр не подпустят.
>>2592533 >>2592550 Просто, почему я решил вообще начать изучать кубер, а теперь дженкинс, периодически видел тут от анонов посты о том, что разраб должен все равно что-то уметь показать в работе с этими вещами, у девопса много своих головняков по администрированию виртуалок изнутри, написанию каких-то скриптов и еще чего-то, чего я пока не знаю, тк не интересовался особо их профессией, или девопса может вообще не быть на проекте, будут говорить что-то про ю билд энд ю ран, да и наверное, с этими знаниями больше шансов пройти собес, чем без них, очень много на ждунов в требованиях пишут кубернетис же
>>2592561 > видел тут от анонов посты о том, что разраб должен все равно что-то уметь показать в работе с этими вещами Ещё здесь были посты, что айти всё, и нет смысла вкатываться. Почему одним мимокрокодилам ты веришь на слово, а другим нет? > у девопса много своих головняков по администрированию виртуалок изнутри Для этого есть админ, который и делает всю ручную работу с заведением заявок, разовой настройкой серверов, мониторингом, сбросом забившихся кешей и прочим. > девопса может вообще не быть на проекте Даже в таких случаях роль девопса берёт на себя тот, кто хоть что-то в этом понимает, а не все подряд. Обычно это один из разрабов, которому приходится жертвовать кучу своего времени на решение проблем со свалившимися сборками и выдачей доступов. > с этими знаниями больше шансов пройти собес, чем без них, очень много на ждунов в требованиях пишут кубернетис же В требованиях это пишут, потому что разрабам приходится минимально в этом разбираться, чтобы локально развернуть сервер. Минимально - это значит знать пару-тройку команд и уметь гуглить, а не писать джобы и пушить образы в registry. Если на собесе один разраб говорит, что разбирается в девопсе, но хуёво решил задачу с алгоритмами, а другой ни черта не смыслит в девопсе, но задачу решил хорошо, возьмут скорее второго, чем первого.
>>2592579 >>один разраб говорит, что разбирается в девопсе, но хуёво решил задачу с алгоритмами, а другой ни черта не смыслит в девопсе, но задачу решил хорошо, возьмут Того кто попросил меньше сотыг, ведь код они писать будут одинаково хуево.
>>2592602 Возьмут того, кто хорошо решил задачу, потому что он будет лучше писать код. Запрошенные сотыги роли не играют, потому что вкатыши часто просят намного меньше, чем установлена вилка, в итоге пришлют оффер ровно на столько, сколько стоит кандидат, ему остаётся лишь согласиться или отказаться.
>>2592642 >>хорошо решил задачу, потому что он будет лучше писать код С чего ты это взял? Как решение алгосов проецируется на решение реальных задач? Или тебя не было в треде последние несколько дней и говнокод компании эталонных алгосодрочеров ты не видел?
>>сколько стоит кандидат Вкатун умеющий кое-как писать код гораздо ценнее студента олимпиадника не знающего нихуя кроме синтаксиса языка (да и то очень ограниченно). Первый может уже через месяц потихоньку пользу приносить и пилить простенькие фичи. Второй будет просто начинать учить фреймворки и доучивать язык еще 3 месяца.
>>ровно на столько, сколько стоит кандидат Оффер будет ровно на столько сколько он попросит, если это не выше определенной суммы. Готовы дать сотыгу, но попросил 30к - получит 30к.
Я думал, что на мою пасту никто не откликнется, но раз такое дело, тогда контакт свой оставлю и лично расскажу, если кому интересно > [email protected]
Расскажите как у вас в компании принято организовывать pom-ы, делите по секциям (тестирование, персистенс и т.д) или просто лепите подряд? Что в родительском поме?
В родительском поме - все плагин-биндинги, организованные по профайлам + dependencyManagement и pluginManagement. В дочерних помах - зависимости и только зависимости.
Активация у профайлов настраивается таким образом, чтобы профайл активировался по умолчанию ровно на тех подпроектах, где он нужен. Например, сборка докер образа активируется только в проектах с Dockerfile.
А, и еще. Самый главный, можно сказать мастхэвный плагин: это maven-flatten-plugin. Он после билда вычищает из помника все что не зависимости, инлайнит все паренты и деливерит такой помник в реп, вместо оригинального. Это устраняет множество корнер-кейсов, в которые можно впороться в вышеописанной мной схеме
>>2593142 >Активация у профайлов настраивается таким образом, чтобы профайл активировался по умолчанию ровно на тех подпроектах, где он нужен. Например, сборка докер образа активируется только в проектах с Dockerfile. Дай пример. Мне по документации показалось что там толком ничего не настроить.
>>2593172 У каждого профайла есть секция активейшн, через которую можнро сказать, при каких условиях этот профайл должен запускаться. И ее можно по всякиому эксплуатировать если проявить фантазию и придрочиться. Например, можно настроить профайл на проекты с тестами, проверив на существование src/test/java. Или сделать профайл который запускается для всех проектов, проверив на существование pom.xml. Помимо файлов, профайлы можно активировать пропертями, или в зависимости от операционки.
>All profiles that are active by default are automatically deactivated when a profile in the POM is activated on the command line or through its activation config.
Плюсы слишком больно пиздят за ошибки. Джава в самом начале как раз и вывозила за счет трейдоффа - ты жертвуешь производительностью, получая взамен гарантии безопасности. В начале трейдофф был прям пиздецовый (мемы про хеллоу ворлд за 67 гигабайт - как раз с тех времен), но с введением JITа и современных GC трейдофф выровнялся. Ну и сролял тот факт, что в определенный момент железр стало стоить кратно меньше разработчиков.
>>2593391 а что пробывать тут? берешь и пишешь. если команда красноглазиков есть вообще супер, взяли, сели и написали. кабаны просто тупые не согласятся свои легаси менять на не понятно что. а так в теории можно было бы рыночек за 1 день перезагрузить и жава больше не нужна нигде никому кек
>>2593401 >Плюсы слишком больно пиздят за ошибки >В чем проблема написать идеальные отдебаженные и быстрые либы, с которыми было бы удобно и быстро работать? просто сесть, написать все четко, покрыть тестами каждый пук, архитектуру выстроить так, чтобы пользователям не пришлось даже думать о выделении памяти чему-либо. условно аналог спринга можно сделать, где под капотом будут все эти страшные вещи происходить, а ты только как макака вызывать статичные методы
>>2593410 На плюсах сделать все вышеперечисленное тупо дороже чем на джаве, вот и все. Не забывай - время разработчика кратно дороже железа (за редкими исключениями в лице эмбеддед, где по железу иной раз тупо альтернативы нет).
>>2593411 какая разница будешь ты вызывать метод контроллера на жава или на плюсах. я же сказал, сделать архитектуру библиотеки, похожую на спринг, только со своими нюансами, но не ведущими к увеличению кода.
>>2585661 (OP) Мне вот интересно если я скачал Идею с торрента, активировал по инструкции, она заработала то могут ли как-то узнать что я ее пизднул например когда через нее будут коммиты в профиль гитхаба? Короче сулит ли это проблемами в будущем?
Как себя представить в линкедине и гитхабе чтоб это было правильно, ну в смысл мне какой-то никнейм себе придумывать рядом с моим именем и фамилией?
Моя основная почта должна быть с моей фамилией или же с никнеймом?
Очень хочу все сделать правильно, чтоб это не сыграло против меня когда начну рассылать резюме. Умудренные опытом аноны, помогите молодому и неопытному советом.
>>2593413 А поддерживать эту библиотеку, фичи пилить, интеграции новые, аннотации - по твоему забесплатно будут?
Кроме того, ты упускаешь тот факт, что потребители этой библиотеки - человеки, делающие человеческие ошибки. За которые плюсы будут также пиздить. Пиздить больнее, чем джава.
Или ты что думаешь - коли есть спринг, человеки ограничиваются лишь шлепаньем аннотаций? Есть стопятцот способов и спринг сломать, так то.
жаву джуну надо знать прям всю? или основные моменты? коллекции, лямбды, потоки? если открыть доку к жаве, там дохулион классов всяких, это кто вообще все знать может даже в теории?
>>2593417 >А поддерживать эту библиотеку, фичи пилить, интеграции новые, аннотации - по твоему забесплатно будут? можно изначально сделать собственную либу для разработки основного фреймворка. лезть в сами кишки придется только, если понадобится добавить что-то абсолютно новое
>>2593426 Никто этого и не знает. Есть основные общеиспользуемые классы. Многопоточку даже далеко не все знают, но вот коллекции надо знать короче, не только как с ними работать, но и как они устроены под капотом. Лямды глупо не знать, потому что что там знать вообще?
LinkedList был и остается связным списком, ArrayList был и остается списком на основе массивов, HashMap был и остается хэш-бэйзд мапой. Они могут фиксить там баги и тюнить оптимизацию, но суть их внутреннего устройства была и остается прежней.
На каком уровне происходит хэширование пароля? На уровне сервиса, который работает с репозиторием перед тем как сохранить юзера? Прост как мне кажется, это не безопасно, а другие способы в голову не приходят, разве что в фильтре вклиниваться
>>2593634 Ну я так и делаю сейчас, инжекчу пассворд энкодер в сервис и делаю энкод пароля перед сохранением. Просто, что мешает при таком исполнении какому-нибудь разрабу написать какой-нибудь аспект, который будет дтошку с незахэшированным паролем отправлять ему на почту?
>>2593662 Ничто не мешает. А что мешает разработчику написать фильтр поверх твоего фильтра, и соскрябать пароль до того как ты его заэнкодишь? Что мешает ему впринципе выкинуть твой фильтр?
Ты этому разрабу ничего особо не противопоставишь, кроме пиздюлей на кодревью. Ну может archunitом еще можно запретить менять сорцы определенным образом. Или выделить все сисурити в отдельный модуль, доступ к сорцам которого не давать всем подряд, но это тоже скорее организационные решения проблемы, нежели технические.
>>2593566 Учишь вот это : jdbc(учить не так и много, глубоко не надо, можно и вовсе пропустить) -> hibernate(придется поебаться) -> spring data jpa(тут объем тоже небольшой). Каждое последующее - обертка над предыдущим. Spring Data JBDC - не нужен от слова вообще. jdbcTemplate - встречается, но не так чтобы много давал поверх голого jdbc. Еще есть jooq и mybatis.
На собесах надо будет отвечать про устройство хибера, а в тестовых писать на spring data jpa.
>>2593668 Ну про фильтр я скорее вкладывал то, что пароль так меньше времени будет находиться незахэшированныи в памяти, тк фильтры идут раньше контроллеров и сервисов. Так же я читал, что пароли полагается хранить в массиве чаров, чтобы потом его можно было пофасту заклирить, в отличие от стринги, до которой гк хуй знает когда доберется. А это означает, что к памяти как-то можно получить доступ и оттуда пароль как-то считать, получается фильтр все-таки чуть лучше будет. Ну или это все хуйня и похуй, где хранить
представим вам похуй на зарплату и карьерный рост вы знаете программирование (язык не важен) вам нужна работа, но вас не берут никуда но вам предлагают поработать преподавателем программирования в онлайн школе для детей вы бы согласились?
алсо, есть у кого опыт работы преподавателем в этих школах? какие плюсы/минусы? сильно напрягает сидеть в конфе с микро челами, да еще и с вебкой?
>>2593717 Книга по хиберу есть. Ей лет 10, но устраела она совсем немного. Причем то что там есть, это оверкил для новичка, хватит десяток статей про основные апихи жизненный цикл энтити, методы энтитиМенеджера и кеши. jpql, лейзи инициализация, entity graph. Поебаться придется скорее на практике. Спринг дату учить почти не надо, тупо открываешь хеловорд на баелдунге и пользуешься. Ну и доку открыть можно. Там дока - 50 страниц из которой половина не нужна.
>>2593747 Не согласился бы. А если с дуру согласился, то выгорел бы. На меня джуно-стажера скинули и когда он тупит - меня это бесит неимоверно. Хотя тупит не то чтобы прям очень. Просто умение преподавать это отдельный скилл, для которого нужны задатки и который надо качать. Задатков у меня нет, а тратить время на прокачку мне не хочется.
>>2593757 а как у тебя с боязнью аудитории? как по мне, это самый главный камень преткновения... я например понимаю, что у меня нет педагогического, и в роли преподавателя я ни разу не был, но я бы согласился попробовать, если бы не знал, что я туплю во время любых выступлений, меян накрывает ебейшее волнение, из-за этого в голове полный крах. как вспомню как диплом защищал, это вообще пиздец тушите свет. казалось бы, тут дети и с ними проще, но нихуя...
>>2593765 Ну бывают небольшие коммуникативные проблемы. Если надо что-то коллегам рассказать, моя и так неидеальная речь становится еще немного хуже. Начинаю заикаться и запинаться. Замечания никто не делал, но я по записи и сам слышу. Но чтобы боязнь и прям жесткое волнение - нет. Мне просто трудно выступать и от этого неприятно это делать. Думаю это все опять же прокачивается. Но я бы не очень хотел на это время тратить.
На гитхаб проект вместе с логированием заливать ? Или логирование используется исключительно во время разработки для дебага, а затем удаляется ? Подскажите пожалуйста как правильно.
>>2593785 >>Или логирование используется исключительно во время разработки для дебага, а затем удаляется ? При разработке для дебага ты можешь и в консольку пукать, а логи нужны на проде, когда ты не можешь просто подключится к нужному сервису и пишешь логи, чтоб понять, что пошло не так.
>>вместе с логированием заливать ? Если ты про конфиг логбэка - то да, с ним.
Сейчас реально попасть на проект с легаси из 1998 - 2003? Есть тут такие? Почувствовали ли в этот момент некую романтику тех времен? Было чувство прикосновения к истории?
>>2593822 Ну а чем легаси 25-летнее будет отличаться от 10-летнего? Если там версия языка 25-летняя или библиотек, значит это или какой-то совсем кал, что не смогли найти человекочасы на миграцию или изменения вносятся раз в несколько лет.
>>2593842 Тем, что тогда про код стайл мало кто знал. Либы олдовые с приколами своими, о которых ты даже подумать не мог. Сидишь и представляешь, как кто-то сидел это 20 лет назад писал. Булка хлеба 7 рублей стоила, сникерс 10 рублей. Программирование не было мейнстримом.
>>2593871 Нет, я 10 лет назад закончил юридический и не было хайпа. Мои одноклассники, закончившие мухгу на кодеров больше года не могли найти работу. Устраивались тестировщиками, в техподдержку, аналитиками, чтобы им через годик дали перебраться в кодеры. Двое знакомых пошли на завод. Один дико выебывался, когда через год дошел до 2.5 мрот, когда все остальные получали полтора. Хайп лет 7 назад начался, а вот прямо нормально лет 5 назад. Тогда очень многие знакомые юристы, экономисты, филологи и журналисты стали вкатываться один за другим.
>>2593822 Только смежники, там сидят деды предпенсионного возраста, вкатившиеся ещё в те времена, новичков не берут. Романтики на самом деле никакой, один говнокод, который и не развивают даже, а просто поддерживают, чтобы продолжал работать. Хотя та, был одно время восторг от забытых технологий предков. У самих легаси 2006 года, получилось как ответвление более древней системы, написанной в 90-х. Там и от джавы были только обёртки над веб-сервисами с RPC, вся логика была на PL/SQL, никакой веб-разработки, одни десктопные клиенты на плюсах, делфи и вижуалбейсике. Сейчас уже почти всё переписали на джаву, но с древнего десктопного клиента так и не слезли.
>>2594031 Нашел на что порваться. Лишний раз энтер жмакнуть не судьба? Эта ссаная строчка - самое малое из говнищ идейки. У них до сих пор переименование и удаление модулей в проекте не работает нихуя, а ты на какую то строчку бомбишь.
Архитекторы,поясните как лучше хранить информацию о сотрудниках:сделать одну таблицу и в ней дохуилиард полей или разбить на документы. Отдельно таблица с паспортом, отдельно с военником и тд. Второй вариант кажется красивее,но тут возникает вопрос как принимать данные по хттп. Сделать фасад,в который собирать все данные и раскидывать по сервисам сохранения или забить хуй и заставить пользователя заполнить все эти документы и вручную передовать айдишники при создании записи о сотруднике?
>>2594039 > Сделать фасад,в который собирать все данные и раскидывать по сервисам сохранения Ну конечно. Принимаешь одну родительскую DTO-ху с инфой о юзере и вложенными DTO-хами с документами, на уровне сервисов/DAO просто распихиваешь всё по таблицам. > заставить пользователя заполнить все эти документы и вручную передовать айдишники при создании записи о сотруднике? Сам потом пожалеешь об этом. Это бесконтрольный нетранзакционный процесс, клиенту надо будет слать несколько запросов с риском, что что-то на полпути пойдёт не так, и надо будет всё откатывать вручную или смириться с тем, что в БД будет копиться мусор. Да и очень сложно уследить за хитрыми пользователями, которые подставят чужие ID и привяжут документы другим пользователям.
Установил плагин для идеи, который требовал перезапуска. Перезапустил. Теперь при запуске выдаёт критическую ошибку Internal error. Please refer to https://jb.gg/ide/critical-startup-errors
Три года работаю с Java в европе. Вроде все норм, чиловайя работа, сижу на двачах, слушаю подды, хуй пинаю итд все довольны моей работай. Но как же скучно. Сейм у когото? Хочется в фронт-энд ворваться чтобы хоть видеть что я програмигую
>>2594319 Вообще не сейм. Вкатился в джаву, потому что не хочу на фронт. Правда не три года, а полтора. Хотел петик написать, чтобы потрогать кое-какие технологии на джаве. Но потом понял, что нормальному пету нужен фронт, а я пиздец как его не хочу писать.
>в европе Правда, что в европе джава это не второй язык на беке, после пхп, как в рф? Тут кто-то приносил, что джаву и шарпы и нода и питон обгоняют.
Блядь, ПШП тред мёртв по этому спрошу у вас. Как организовать лучше ветки в учёбном репозитории гита? У меня два источника задачек(курсы/книги) которые я решаю и хочу закидывать в две разные папки в один реп.. Все просто скидывать в мейн? Или для каждой папки создать свою ветку, а потом, когда все задачки решу, слить в мейн? Как правильнее или лучше не заморачиваться?
>>2594411 Так я и хотел именно что-то такое и сделать. На с 3-4 сервиса, с кафкой, дискавери сервисом, апи гейтвеем, секурити провайдером, метриками в прометеусе, логами в эластике, трейсами в зипкине и распределенными кешами в редисе, потом кубер подрубить. Но с фронтом на сваггере это уныло очень. Нужно хотя бы пару табличек, три кнопочки и формочка. И с этого надо начинать. Наверно начну и без фронта, как засяду за книжку по спринг секурити.
>>2594411 Так я и хотел именно что-то такое и сделать. На с 3-4 сервиса, с кафкой, дискавери сервисом, апи гейтвеем, секурити провайдером, метриками в прометеусе, логами в эластике, трейсами в зипкине и распределенными кешами в редисе, потом кубер подрубить. Но с фронтом на сваггере это уныло очень. Нужно хотя бы пару табличек, три кнопочки и формочка. И с этого надо начинать. Наверно начну и без фронта, как засяду за книжку по спринг секурити.
>>2594525 Понятно. Значит непринципиально т-к. решённую задачу можно как "боевую". Но чисто ради посмотреть как работает/попрактиковаться, можно считать, что решённой задачей считается прохождение всей книги. Думал мб там с коммитами какая путаница
>>2594433 Мастер - прод ветка. Там рабочий и протестированный код. Дев - ветка разработки там код тоже рабочий, но не протестированный и возможны баги. Некоторые шизы вроде этого >>2594525 угорают по гитфлоу, остальные просто делают ветку от дева на каждую фичу и вливают ее в дев.
На учебном можешь оставить мастер, делать отдельные ветки на фичу и мержить их в мастер. Тогда и CI себе настроишь минимальный, и ебаться с ветками не придется.
>>2594861 Я пару раз в предыдущих проектах написал и забил, в новых петах скипаю написание этих тестов унылых, пиздец можно со скуки сдохнуть пока этим занимаешься. На каждый метод по несколько сценариев, умножить это на количество классов, потом еще апишку протестить, базу и это минимум, пиздец короче.
Что делает, если мавен очень долго инициализируется? Я нажимаю install, и проходит 9 секунд перед тем, как мавен тупо начнёт собирать, и эти 9 секунд тупо консольная строка висит в идее. У меня проект маленький, и эти 9 секунд это много, тестить неудобно.
>>2594934 Для пета который будешь демонстрировать они нужны, хотя бы для виду. Чтоб показать что хуе-мое чистый код, идеальная архитектура.
На реальном проекте то конечно похуй на них - только если заставляют писать. Да и то я ебал все кейсы покрывать - 100% покрытие есть и ладно, дальше пускай тестировщики ебутся и все проверяют.
>>2595367 Ну его можно и не выделять, это основная библиотека с которой работаешь при работе с Spring MVC.
Ну и по моему для сваггера скорее не api-first, а springdoc-openapi. api-first это типо круто и хороший тон, но с помощью аннотаций к готовому контроллеру сваггер прикручивают чаще. Ну и кубер нужен не везде.
>с помощью аннотаций к готовому контроллеру сваггер прикручивают чаще Не спорю, но я сам сталкивался с тем, что меня спрашивали мол делал ли ты такую штуку и в чем преимущества такого подхода
>кубер нужен не везде Ну и не требуется знать его на уровне девопса и уметь по памяти написать любой манифест, я думаю достаточно посмотреть курс от адвита на ютубе и задеплоить свой пет в кубер хотя бы локально. Хотя для меня интереснее было в клауде, у мэила вроде неплохой клауд, только там регистрация 500р, у яндекса вообще интерфейс не понравился и гайды хуевые хуй знает для кого делались, но там регистрация бесплатная и он в целом дешевле.
Я считаю, что к списку >>2595358 нечего добавить, скорее надо убавить немного. Разве что по диаганали почитать про монгу, кликхаус и редис, чтобы говорить в чем отличие nosql баз.
>>2595574 Ну кубер я бы из обязательного убрал, на совсем последнем месте поставил в твоем списке. И если нужны хотя бы поверхностные знания кубера, значит нужно еще понимание вообще микросервисной архитектуры и ее паттерны(service discovery, circuit breaker, распределенные транзации) - ну и пользоваться всякими штуками - например в api-gateway эндпоинты знать как и зачем прокидывать.
Spring Security может или не быть(вместо него какой-нибудь keycloak) или он есть, но к нему новичка не допустят. А если на тестовом будет авторизация, то хватит и http basic.
Concurrent в жава-коре не мастхевная тема, много где не спрашивают. Мастхев к коллекциям и стримам это иерархия исключений.
JDBC Template это тонкая обертка над jdbc, я бы не стал отдельно выделять.
>вместо него какой-нибудь keycloak Так для того, чтоб понять как там все работает, надо бы сначала с ауфом в спринге посидеть и разобраться, настроить не дефолтный аусентикейшн провайдер, вк например, там ебли достаточно будет, чтоб начать в этом немного шарить. Я кейклок тоже вертел, но вот именно его можно опустить, он реально ненужон вкатышу. Ну и жвт простейший настроить будет не лишним перед всем вышеперечисленным для хоть какого-то понимания основных принципов.
На счет кубера не согласен, на поверхностном уровне лучше знать, как и то, что ты написал далее, давно уже мода на микросервисы, не стоит отсеивать немалую часть проектов, потому что лень почитать книгу по ним и покрутить кубер месяц максимум.
>>2595690 Ну конечно совсем лишним не будет, но это с одной стороны будет увеличивать time to vkat. А с другой стороны отнимет время у выучивания наизусть устройства хешмапы, принципов ооп, уровней изоляции транзакций, жизненных циклов бина и энтити хибера. И у написания петов. Челика без опыта по куберу и микросервисным паттернам гонять не будут, даже если они на проекте во все поля. А вот по ооп в джаве и гоф-патернам - вполне. Твой список скорее для собеседующегося на мидла, который до этого на легаси сидел или писал бек на другом языке.
>>2595810 >ответом на него был харчок в камеру и дисконект из конфы, в последствии дают оффер сразу на мидла Как было на самом деле: ты промямлил "эээ ну а зачем тестировать ломбок? эээ ну не знаю ээээ" и тебе пообещали перезвонить.
>>2594526 Блядь чел, если тебе не лень поднимать всю описанную тобой парашу ради круда, то не найти силенок накидать простейший фронт - ну это хуй знает кем надо быть.
>>2595810 Не, ну ты понимаешь курьез ситуации? Тестировать. Тул. Внешний. Не свой. Тул, которому ты делегируешь поставленную перед ним задачу. Но при этом не можешь ему доверять, из-за чего тратишь время и тестируешь его высер. Но в то же время не можешь и выкинуть этот негодный тул потому что "ну еба, вы че, этож ломбок, ну как это можно - без ломбока в 2023м, пацаны ж засмеют".
>>2595884 А почему ненавистники сахара не пишут на голом си? Лобок есть в большинстве проектов на жабе. Это просто данность. И это не такой уж сахарный сахар, как в котлине.
>>2595892 Потому что Си - не ООП язык и сложно писать большие программы, а также не кроссплатформенный, нет сборщика мусора и безопасности при работе с памятью.
>>2595892 >>2595991 Странное сравнение вообще, может и сайты на ассемблере писать? Си и жаба - языки для разных областей применений. Си хорош для низкоуровневых вещей, для небольших библиотек, которые должны быть быстрыми, для системного программирования, вроде WinAPI или системных вызовов POSIX. На жабе пишут крупные системы, где важнее поддерживаемый код, чем скорость. Когда необходимо, си легко подключается к жабе через JNI. Вот C++ непонятно зачем нужен - никто его толком не знает, по сравнению с сишкой много оверхеда, а по сравнению с жабой/шарпом недостаточно прост.
>>2595337 В общих чертах круды умеешь писать - значит годен на ждуна. Дальше зависит от степени ебанутости собеседующего и качества конкурентов. Чем больше ты знаешь - тем выше шансы. Вместо изучения новых слов, лучше углуби знания в перечисленном тобой. А то окажется что твой постгрес - это селект с джойном написать, а спринг - 3 аннотации поставить.
>>2595358 Еще можно добавить grpc и soap сервисы сюда же, но это опционально уже, но повысят шансы прилично.
Еще периодически спрашивают про планировщик запросов, я сам его скипнул пока, так что хз, какой там обьем инфы надо знать, может аноны, которые с этим знакомы подскажут
Как называется паттерн, когда у тебя есть объекты в памяти в и базе данных одновременно, и когда ты читаешь, то читаешь из оперативы, а когда пишешь, то пишешь и туда, и туда?
>>2596162 Если чувствуешь уверенность, что понял основные принципы и можешь без особых трудностей закончить. Смысл написания такого пет-проекта в том, чтобы закрепить знания на практике, и не более.
Как лучше организовать связь между таблицами: есть сотрудник,специальность и военный билет. В военном билете хранится ссылка на специальность,это обязательно. Пока у меня сотрудник имеет ссылку на военный билет где лежит ссылка на специальность. Я считаю что нелогично хранить ссылку на специальность только в военном билете и подумываю добавить ссылку на специальность напрямую в сотрудника. Но тогда возникает проблема что у сотрудника может быть ссылка на одну специальность,а в военном билете ссылка на другую. Как бы вы разрешили эту ситуацию?
>>2596226 А вообще ебать,я так подумал,я же могу всегда держать специальность нулевой,не запрашивать ее у пользователя и тупо брать с военника,все равно в базу за ним лезть. Че скажете?
>>2596226 Что понимается под специальностью? Только военно-учётная специальность, или может быть учебная или какая-нибудь рабочая в зависимости от должности? Может ли быть специальность при отсутствии военного билета? В любом случае ссылки могут быть разные, ещё и специальностей может быть несколько, может же человек два образования получить (хотя насчёт военно-учётной хз, может ли их быть несколько), но для такого случая лучше сделать таблицу связок (многие ко многим) с ID сотрудника и ID специальности.
>>2596240 Скажем, что нужно больше инфы о контексте. Что конкретно разрабатываешь, какую задачу твоя система будет решать? Пока нет ответа на этот вопрос, любые предположения - твои и анонов - будут гаданием на кофейной гуще.
Любая модель данных всегда строится от бизнеса. Нефункциональные требоваения, вроде производительности выборок, имеют определенную свою роль в моделировании, но без биснес-контекста нет смысла даже начинать рассуждать.
>>2596226 >Но тогда возникает проблема что у сотрудника может быть ссылка на одну специальность,а в военном билете ссылка на другую. Как бы вы разрешили эту ситуацию?
Если ты уже постановкой вопроса определил условие своей задачи, и специальность сотрудника всегда должна быть равна специальности в военном билете, то в тот момент когда ты специальность решил продублировать у сотрудника, ты получил не до конца нормализованные данные. Согласно правилам нормализации, дублирование данных не допускается, твердо и четко. Как результат, твоя идея дублировать специальность в таблице сотрудников не имеет смысла с точки зрения реляционной модели. Специальность по сотруднику ты всегда можешь получить через селект с джойном к военным билетам без всякого дублирования. В теории.
На практике, иногда от нормализации отходят в угоду производительности, а консистентность (твой констрейнт, что специальность сотрудника должна быть равна специальности в военном билете) гарантируют иными средствами (или забивают и не гарантирують вовсе). Но денормализацию делают когда налицо пиздец с производительностью. Заранее ее делать - плохая идея.
>>2596306 Бля точняк, гражданская специальность и военная это ведь не одно и то же. Короче думаю да,добавлю еще одну сущность отдельно для военной специальности
Нормальная ли тема в дто реквесте принимать айди дочерней сущности? На фронте ведь все равно дернут эндпоинт и им прилетит сущность с айди,откуда они сами по имени в реквест воткнут айдишник. Или нужно принимать что-то более человекочитаемое? Например имея сущности книги и авторы, нормально ли при создании книги прочить айдишник автора,тк на фронте эти данные есть и пусть сами ебутся с формированием запроса или же нужно сделать эту работу за них и дать им формат реквеста с именем автора и уже на бэке сходить в базу по имени и если есть присвоить,а если нет создать? Фронтендеры же все равно пидорасы хуйней занимаются весь день,пусть сами формируют запрос,да или нет?
>На фронте ведь все равно дернут эндпоинт и им прилетит сущность с айди,откуда они сами по имени в реквест воткнут айдишник
Лично я думаю что терпимо, хотя знаю мнение что айдишник сущностей в БД через АПИ палить некошерно, и нужно вдовесок к первичному плодить еще и суррогатный ключ.
>Или нужно принимать что-то более человекочитаемое? Например имея сущности книги и авторы
С человекочитаемыми ключами есть одна засада: рано или поздно этот человекочитаемый ключ тебе придется использовать в запросах к БД. И может так оказаться, что индекс на этот человекочитаемый аттриут будет отрабатывать в разы говенней или занимать в разы больше места, чем на какой нить числовой айдишник. Проебешь производительность.
Плюс - никто ж тебе не гарантирует что этот человекочитаемый аттрибут у тебя не изменят из под ног в какой нить параллельной транзакции.
>>2596318 Вот и я также подумал,во первых доп обработку этой хуйни делать,во вторых хуй знает сколько по этому имени будет результатов,в третьих эти пидоры и так нихуя там не делают,аниме смотрят и капчу двачуют суки
>>2596315 Смотря как клиент эти данные использует. Если дочерние сущности клиенту нужны сразу, а не при нажатии на какую-нибудь кнопку, я бы их сразу в ДТО передал. А то клиент при открытии страницы будет отправлять кучу запросов, в итоге и страница будет медленнее грузиться, и нагрузка на сервер возрастёт. Ещё можно передавать не всю дочернюю сущность, а добавить в ДТО нужные поля и заполнять их в конвертере при формировании ответа, к примеру, не класть AuthorDTO в BookDTO, а просто добавить в BookDTO поля authorId (для последующих запросов при нажатии на кнопки) и authorName (для отображения имени автора рядом с книгой). Но это только один из вариантов.
>>2585661 (OP) Пришел на проект, а там дтошки гоняются туда-сюда. И ладно на выход просто передаются id связанных сущностей, а вот на вход прилетают эти же id и там в маппере начинается анал-карнавал с обращением в базу по каждому id, чтобы собрать объект воедино со всеми его полями/объектами. Это вообще норм? Как такую проблему решают?
Ебанистика какая то, как по мне. Звучит как та ситуация, где программисту хотелось срать монадами во что бы то ни стало, а на базу данных ему было похуй.
>>2596490 >спринг это элементарное управление зависимостями и всё Нет. На изучение всех особенных случаев и кишочков уйдет несколько лет. Если ты не понимаешь глубоко как работает он под капотом и как инициализирует бины, то тебя даже близко нельзя подпускать к разработке на спрэнг фримверке.
>>2596462 Spring Data JPA автоматически конфигурирует и настраивает JPA за тебя. Писал как-то проект без Spring (десктопное JavaFX приложение), так заебался просто подключать там JPA, миграции Flyway просто не брались. В Spring просто прописал в пропертях пару строк, и все работает.
>>2596468 Spring не просто так используется - сравни сколько кода получается с ним, и сколько без него. Можно, конечно, REST сервисы писать чисто на Empedded Jetty + Jersey JAX-RS, самому настраивать Hibernate и т.д. Но заебешься с этим всем. Для мазохистов-пердоликов существует C++, а в Java должно быть все просто и понятно, чтобы было легко поддерживать.
- - - - 3. Аноны, есть две @Entity, скажем Person, с полями name и age, Payment с полями employeeName и amount. Как мне через JPA получить третий объект, представляющий джоин этих двух энтити?
Заинжекти ссылки на соответствующие репозитории в сервисный бин и используй булеву алгебру над элементами множеств для объединения, пересечения, вычитания и дополнения. Всякие предикаты помимо фильтрации по значениям сделают обходы коллекций допустимыми для лямбд и стрим апи. В теории можно сервис данных, выступающий издателем в реактивных взаимоотношениях с его клиентом запилить с целью перейти от транзакционной конкурентности к реактивности. В теории бля меня, находязегося в стадии обучения.
Вики по вкатыванию в джаву: https://github.com/java2ch/java-thread/wiki
Пять вопросов из предыдущего треда:
1. Самая базовая и мастхев библиотека/фреймворк джавы, без которой джава вообще не джава (за исключением стандартной библиотеки)?
2. Сап джавовый! Я тот неугомонный который копается в JVM. Хочу сделать следующее, написать приложуху на джабе, прикрутить мониторинг и начать насиловать JVM. Когда найду потолок, начать опциями комбинировать чтобы повысить производительность. Подскажите как это сделать с технической точки зрения. Вижу следующий вариант:
На спринг буте делаю рест хуйню с одним эндпоинтом, когда буду дергать его, спринг будет в цикле создавать n количество объектов (в классе которого ещё будут статические поля).
Норм тема или херню придумал?
3. >https://github.com/neo4j/neo4j/blob/c082e80b792d46ad1b342fbf7f1facb2028344c6/community/kernel/src/main/java/org/neo4j/kernel/info/JvmChecker.java#L33
>Ахахах, реально. Пометил себе neo4j как неюзабельное говно.
Оооо, а вот на хуя они так делают то?
4. Чё нового в мавене 4.0.0?
5. Если без приколов, 8к строк на джаве - это какой проект, маленький, средний или большой?
Предыдущий: