Это копия, сохраненная 24 апреля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
https://junit.org/junit5/docs/current/api/org.junit.platform.commons/org/junit/platform/commons/logging/Logger.html
Подключил этот хуев логгер, как теперь туда ложить?
Делаю logger.error("hui pizda djugurda")
Конпелятор говорит: incompatible types: java.lang.String cannot be converted to java.util.function.Supplier<java.lang.String>
Мертвый тред мертвого языка. Напомню, что сишарп уже догнал джаву по вакансиям, желающим работать с ООП языками теперь нет смысла учить что-то кроме дотнета
Собираю мавеном. Запускаю. Как понять какая версия hui.pizda.djugurda у меня подцепилась и в какой директории искать этот пекедж?
Говорит lambda expressions are not supported
Без бампа версии логгер теперь никак не подключить чтоле?
Только logback.
Supplier появился в 8-ке, там же и лямбды появились. Ты что-то перемудрил с language level. Если билдишь Мавеном пропиши корректный language level. Если IDEA ругается, исправь в свойствах проекта.
roles.stream()
.map(RoleMapper::toDto)
.collect(toSet());
Ну и в маппере ролей просто перегонять одну роль в дтошную
Версия JDK не принципиальная, просто начал с hello world отсюда
https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
Всё равно ложить через лямбду это дичь какая-то ящитаю
>>159740
Такс, какой выхлоп пошел, спс, но идет только на уровне error. Как теперь теперь ему ещё логлевел настроить, желательно через аргументы вызова мавена или его конфиг? Мне собственно нужно ложить из тестов, которые вызываются через mvn test
> Такс, какой выхлоп пошел, спс, но идет только на уровне error. Как теперь теперь ему ещё логлевел настроить, желательно через аргументы вызова мавена или его конфиг? Мне собственно нужно ложить из тестов, которые вызываются через mvn test
Скорее всего тебе нужно сделать конфиг, который будет подтягиваться для тестов. Тут тебе нужно будет самому поискать
Ок и на том спасибо
куча результатов в гугле и нихуя не работает
>Всё равно ложить через лямбду это дичь какая-то ящитаю
Так это и не для тебя писалось, ты в JavaDoc видел что написано:
>@API(status=INTERNAL, since="1.0")
Возьми нормальный логгер и используй его.
Ну а что ты хотел, либо используешь вымирающие технологии, либо переходишь на гредл.
Что именно в нем сырое?
https://habr.com/ru/company/itelma/blog/577736/
Да, там 3.х.х версии херачат как из пулемета.
Новый КОБОЛ, лол
В итоге, роутер сообщений из c++ в Рабит написал на дотнете за 30 минут, где все из коробки работает и все пакеты доступны в пару кликов
Как в свое время ты кекал с кобол девелоперов, так сейчас студенты говноеды гоферы кекают с тебя
Не хочу огорчать, но
> обмазываюсь последней джавой и ботинком на новом проекте
> кекают
Студент говноед на связи.
Я еще ни одного xml не написал на галере и не создал ни одну абстрактную фабрику другой фабрикой. хотя, нет, одну, вроде, создавал
Да и java это не питон, чтобы вечно сидеть на чем-то древнем, мне кажется.
> студенты говноеды гоферы кекают с тебя
У нас в вузе учат Qt, да и думаю, по сравнению с плюсами ява перспективнее.
С кого не кекают, я просто не в теме и интересно
https://maven.apache.org/guides/mini/guide-multiple-modules-4.html
не шарю в канкуренси. Вот что нашел
>рассмотрение потоков с их моделей исполнения:
>1:1 (потоки исполнения на уровне ядра)
>В этом случае потоки исполнения соответствуют соответствующим потокам операционной системы и могут исполняться параллельно на различных ядрах.
>В Java модель исполнения 1:1, соответственно потоки могут исполняться на разных ядрах процессора параллельно, что является большим плюсом, из минусов — создание, удаление, переключения контекста и блокировки стоят сравнительно дорого. В итоге приложение будет тратить больше времени на создание и удаление потоков, чем на обработку непосредственного запроса. Потоки занимают значительное количество памяти, соответственно при создании большого количества потоков JVM может начать пробуксовывать.
>N:1 (потоки исполнения уровня пользователя)
>В этом случае потоки должны быть реализованы в пространстве пользователя и должны управляться некой виртуальной машиной.
>Минус подобной модели состоит в том, что настоящий параллелизм здесь невозможен так как такие легковесные потоки будут исполняться в одном потоке операционной системе.
>Плюс в том что переключения контекста очень быстрые, потому как не требуют соответствующих системных вызовов.
>M:N (смешанная потоковость)
>Самая сложная модель, в ней некоторое количество потоков на уровне пользователя отображаются на некоторое количество потоков ядра.
>Плюс — быстрые переключения контекста
>Минус — возможна неоптимальная работа из за дорогой координации между планировщиком виртуальной машины и планировщиком ядра
>Для легковесных потоков так же возможна реализация, когда потоки уступают выполнение друг другу, это так называемая кооперативная многозадачность.
>В этом случае планировщик отвечает лишь за создание и уничтожение потоков.
Зеленые потоки это N:1? А лум?
N:1 частный случай M:N. В луме это M:N со всеми вытекающими ограничениями и отсутствием нормального синтаксиса и апи чтобы их решать. По сути говно без задач.
а на кодварсах типа сложное что-то на работу стандартных либ бывает? Там сложное, если только алгосы изъебистые.
Что это значит? Класса/интерфейса UserMapperImpl у меня нет, снесен очень давно. Если рефактор->переименовать UserMapper будет ошибка UserMapper не найден. Чё он хочет?
>студенты говноеды гоферы кекают
Кекают, а потом идут учить пхп, жс, 1с, сишарп и жаву, так как на Го для студентов работы в принципе нет.
Попробуй mvn/gradle clean и удалить кэш идеи в проекте
Как пояснить фронту, что я хочу получить Set<Role> у себя в контроллере? Как приводить типы? Я так понимаю на фронте есть какой-то json, а че с ним дальше делать? Как перегнать одно в другое и наооборот? Может у таймлифа есть какие-то возможности ?
я вот не пойму нахуя нужны рекорды когда скоро будут вэлью типы
>чел лум уже готов
И в какой LTS он будет? Вон, леха шипилев обещает лум только через одну LTS, а это какой год будет? 2025? В итоге только к концу десятитлетия дай бог увидим лум на проде.
я читаю из yml файла:
HUITA:
-a1:b1
c1:d1
-e1:f1
g1:h1
оно выдает
print(HUITA)
>"[{a1=b1, c1=d1}, {e1=f1, g1=h1}]"
print(HUITA.getClass())
>java.lang.String
как из этой хуиты теперь достать значения без пердолинга с говнокодом, за который меня уволят нахуй
allMatch должен просмотреть все элементы стрима и сказать, соответствуют ли они предикату, как он понимает, что стрим бесконечен ?
Если "матчи" умеют определять бесконечен ли стрим, то почему anyMatch этого не понимает и продолжает бесконечно искать элемент соответствующий предикату?
Котлин.
Всё так. После десятилетия разработки вымученно выдреснут в прод как и jpms, и это станет последим гвоздем в крышку гроба жабы позорной. Мир вздохнет с облегчением.
потому что двоичная логика, allmatch завершается после первого false, потому что от дальнейших значений результат не зависит. anymatch ждет первого true
Я бы ушел в дотнет, но там нет нормальной работы - одни стремные предприятия с CRM, серверами, экселями от мелкомягких. А Го просто васянство из прошлого века
Ну и на чем писать бекенд-то, ептыть?
Java как-то медленно развивается. Ну и разработчики JDK хуесосы еще те, надо же было надрачивать на обратную совместимость в тот момент, когда ее нужно было сломать (дженерики), а потом сломать эту же совместимость позже, но уже в другом месте, лол. Работы всякой полно, но как правило везде унылый энтепрайз, где нужно грузить джейсоны в офисе с утра до вечера.
Сишарп - язык хорош, но тулинг хуета, опенсорс решений не от MS нет, нормальной работы нет, везде какой-то кал уровня винформочек, wpf, .net framework 4, MSSQL, Sharepoint, юнити, etc.
Голанг - вроде перспективно и молодежно, а вроде и хуйня на деле. Есть горутины, рейс детектор, в целом выглядит заебись при первом знакомстве, но в деталях понимаешь, какой же кал сотворил роб пайк. А тут еще дженерики завезут, наверняка получится кал уровня жабы, и оставят возможность писать interface{} там где не нужно. Хотя похуй. Надеюсь хотя бы дженерики у них стираться не будут.
Раст - ну вроде интересно, но работы нет от слова совсем. Какие-то мутные блокчейн стартапы. IDE для раста тоже нет. В общем мутная хуета, но может лет через 5-10 взлетит.
С++ - есть интересная работа, но сам язык просто ужасный. Помимо интересных вакансий с линуксом, сетью и хайлоадом, куча всякого говна на Qt, WinAPI, MFC.
JS - вроде есть огромный рынок, но для бекенда вроде только нода и экспресс. Честно не уверен, что они популярны у нас.
Пыха - в целом заебись выбор для простого бека, но опять же куча 1С, битриксов, мутных мелких работодателей.
Питухон - вроде как подох в бекенде. Хотя фласк и фастапи до сих пор живы. Но больше популярен у аналитиков.
А в чем преимущества молодеждных языков по сравнению с древней жабой? На жабе работы больше имхо (если не считать жс фронтенд)
>Голанг
Он заебись в плане многопоточности и производительности, у нас пишут микросервисы которые работаю с видео/аудио стримами и все шустро и стабильно. Но блядь сам язык и то что его окружает это отдельная история, хуй с ним с синтаксисом и отсутствием чего либо +/- привыкнуть можно я даже одну апишку за вечер накидал почти без боли, изучая язык с нуля, но то что там нет никаких практик написания приложений, каких нибудь фреймворков и ОРМ которые устоялись бы, наоборот там все стараются писать код на голом языке и сука каждый пишет как душа ляжет, объемы говнокода на гитхабе просто зашкаливают, в итоге получается стиль написания как в пхп в начале нулевых еще щепотку говна и будет битрикс
>Раст
Он пока только взлетает, даже более менее рабочий для бекенда фреймфорк пока еще 0.5 версии https://rocket.rs/ и активно пилится, но в целом потыкался, прикольный язык лучше плюсов на мой взгляд Короче да, тут пока только ждать
>IDE для раста тоже нет
Для любой иде жыдбрейнса можно установить плагин и будет работать
>JS - вроде есть огромный рынок, но для бекенда вроде только нода и экспресс. Честно не уверен, что они популярны у нас.
Там много чего есть для бэка и typescript можно прикрутить, но там подход другой, на каждый чих ставится библиотека, куча всякой хуйни в зависимостях, если проекту больше года, то запуск npm i споряжен с еблей с зависимостями, все живет максимум пару лет имел "удовольствие" поебаться, не понравилось и плюс часто нужны фулстеки. А так если нужно поднять быстро мелкую апишку экспресс.жс идеальный вариант. А так работы дохуя.
>Пыха
Попробуй symfony наблюдаю как джависты на него перекатываются и вроде довольны. А так пыха уверенным шагами идет в сторону жабы, сейчас еще активно развивается https://www.swoole.co.uk/ и мне кажется со временем заменит php-fpm который каждый реквест запускает запрос и умирает
Остальное смотреть не советую, поскольку:
>но опять же куча 1С, битриксов, мутных мелких работодателей
Сам из-за этой причины съебался в рельсы, смотришь на вакансии и большая часть это студии ебучие пусть студенты там работают за 30к
>Питухон
Попробуй джангу, авось зайдет
>Голанг
Он заебись в плане многопоточности и производительности, у нас пишут микросервисы которые работаю с видео/аудио стримами и все шустро и стабильно. Но блядь сам язык и то что его окружает это отдельная история, хуй с ним с синтаксисом и отсутствием чего либо +/- привыкнуть можно я даже одну апишку за вечер накидал почти без боли, изучая язык с нуля, но то что там нет никаких практик написания приложений, каких нибудь фреймворков и ОРМ которые устоялись бы, наоборот там все стараются писать код на голом языке и сука каждый пишет как душа ляжет, объемы говнокода на гитхабе просто зашкаливают, в итоге получается стиль написания как в пхп в начале нулевых еще щепотку говна и будет битрикс
>Раст
Он пока только взлетает, даже более менее рабочий для бекенда фреймфорк пока еще 0.5 версии https://rocket.rs/ и активно пилится, но в целом потыкался, прикольный язык лучше плюсов на мой взгляд Короче да, тут пока только ждать
>IDE для раста тоже нет
Для любой иде жыдбрейнса можно установить плагин и будет работать
>JS - вроде есть огромный рынок, но для бекенда вроде только нода и экспресс. Честно не уверен, что они популярны у нас.
Там много чего есть для бэка и typescript можно прикрутить, но там подход другой, на каждый чих ставится библиотека, куча всякой хуйни в зависимостях, если проекту больше года, то запуск npm i споряжен с еблей с зависимостями, все живет максимум пару лет имел "удовольствие" поебаться, не понравилось и плюс часто нужны фулстеки. А так если нужно поднять быстро мелкую апишку экспресс.жс идеальный вариант. А так работы дохуя.
>Пыха
Попробуй symfony наблюдаю как джависты на него перекатываются и вроде довольны. А так пыха уверенным шагами идет в сторону жабы, сейчас еще активно развивается https://www.swoole.co.uk/ и мне кажется со временем заменит php-fpm который каждый реквест запускает запрос и умирает
Остальное смотреть не советую, поскольку:
>но опять же куча 1С, битриксов, мутных мелких работодателей
Сам из-за этой причины съебался в рельсы, смотришь на вакансии и большая часть это студии ебучие пусть студенты там работают за 30к
>Питухон
Попробуй джангу, авось зайдет
Так ты же сам сказал, что жава - хуета. Я кинул альтернативы.
За жс/го не скажу, но в котле просто много сахарочка. Ну, про него ты сам почитаешь.
Преимущество молодежный языков в том, что они быстрее развиваются, так как не обременены миллиардами строк легаси говна. Втф решения старых языков пересматриваются и создаются новый втф решения
>Java как-то медленно развивается
вершина развития - смерть. Что есть "развитие"? Количество фишечек и сахарочка?
Я как русбист в нем разочаровался, там синтаксис похож, но пропал весь шарм ООП который есть в руби, но есть те кому нравится. Феникс мне показался какой-то хуитой многословной после рельс.
А так это функциональный язык для виртуальной машины эрланга, который мегаотказоустойчивый за это его и полюбили где-то видел статью в кторой написано что на нем добивались девять девяток 99.9999999%
> «Вы могли подбирать людей на улице», — говорит Джон Пайк, британский программист, изучавший COBOL в 1960-х годах, — «и в целом учить их, как это делается».
Каждый раз в голос с этой фразы. После создания Java вы могли подбирать индусов с улицы обозначенной для сранья, и в целом учить их как это делается.
Ну вот как раз отказоустойчивость его основная фишка.
Давно рассматриваю его в качестве языка для реализации микросервисов на нем внутри моего рабочего проекта.
Что там на счет разнообразия либ?
>который мегаотказоустойчивый за это его и полюбили
Это все пока у тебя можно без последствий дропать реквесты. А вот если у тебя запросы которые нельзя дропать например финансовые транзакции, то ты заебешься на нем делать рековери после каждого let it crash.
>Что там на счет разнообразия либ?
хз, я на нем поплевался пару дней и забил, спроси лучше в элексиротреде
У меня есть диалоговое окно, в нем бутстрап селект, для выбора роли, он как я понимаю отдает String
Пусть фронт скажет. Либо в браузере, если сам фронт пишешь
в браузере "инспект элемент", или как там на русском. И там вкладка "нетворк". Вот там смотришь свой запрос
Вот тут двумя алертами я выкидываю данные о роли и они вроде выскакивают те которые есть. Птом в закомнеченом пытаюсь их вот так засунуть в форму, но в этом случае модалка не открывается.
Ошибка теперь серверная, а дебажить я ее все равно не могу, все падает до метода save.
Хотя если использовать обычный массив интов вместо листа оверхед становится совсем небольшим - примерно 630 мегабайт против 382, всего лишь почти в 2 раза!
Может кто объяснить, куда сжирается столько памяти? Ладно хуй с ними, с массивами, там оверхед небольшой, но сука куда делись три с половиной гигабайта? Я даже ума не могу приложить, что может хранится в этой памяти. Такое чувство, что взяли огромный кусок памяти и заполнили его нулями или другой рандомной информацией.
Сейчас запускал с ключом -Xmx. Массивы действительно работают как нужно. -Xmx390m хватило сполна. А вот лист работает только если ему дать минимум 2гб памяти. Все что меньше - валится с OutOfMemoryError.
Я не специалист по фронту, хуярю как умею, всеми технологиями. Огонь из всех орудий. Посмотри требования в вакансиях, надо знать всё. Бутерброд технологий, кайф же
Сейчас в голову пришла мысль, что большой оверхед не в листе (ведь внутри него по сути обычный массив сидит), а в классе Integer. Например, 100 миллионов Byte спокойно умещаются в 400 мегабайт памяти, а Integer'ам нужно чуть более чем в 4 раза больше, что в целом ожидаемо.
Вопрос, какова хуя эти классы обертки так много жрут?
UPD. Протеститровал Integer[] и понял, что все-таки виноваты обертки. Хули им нужно так много памяти. Это какое-то наебалово от разработчиков джавы? Примитивы в коллекциях использовать нельзя, значит нужно идти покупать оперативную память? Че за хуйня?
Пет не про фронт. У меня конкретная проблема и конкретный вопрос, на который хер кто ответил. Как с фронта бросить сет ролей в бэк, хоть таймлифом, хоть жэсом, хоть чем.
Во первых Integer обертки занимают раза в 3 больше, чем int.
Во вторых у листа есть capacity. То есть там по сути там массив под крышкой. И его размер выше, чем размер до конца массива.
Только засчет этого может быть разница в 3-5 раз.
Может еще какие то причины, просто самые очевидные
>an object with one int field (including a boxed Integer) will also take up 16 bytes
Да уже разобрался, спасибо.
Вопрос, когда наконец выйдет вальхалла, то вместо List<Integer> я смогу написать List<int>, чтобы создать списко, который будет под капотом держать не массив жирных 16 байтовых оберток, а массив 4 байтовых примитивов?
Жсом берешь и создаешь объект с массивом объектов, идентичным содержанию твоего енума, потом сериализуешь и отдаешь. Шаблонами - я хз.
>создаешь объект с массивом объектов
let set = {{}};
let role = {id:1, name:"admin"};
set.add...??
Так?
А зачем нужен js-овский сет?
let set = new Set();
Сет нужен, чтобы были уникальные элементы. Для жсона достаточно массива
Хз. Потыкай в свой контроллер хттп клиетом идеи/постманом Наугад подбери нужный ему формат запроса. Потом в таком же виде делай фронт.
Я тоже не шарю в спринге особо, особенно на шаблонизаторах. Но делал бы так.
>Это какое-то наебалово от разработчиков джавы?
Именно так. Ну а хули ты хотел? Хочешь производительность - используй массивы.
>>162416
https://habr.com/ru/post/134102/
>Итак, давайте попробуем подсчитать сколько же будет занимать объект класса Integer в нашей 32-х разрядной HotSpot JVM. Для этого нужно будет заглянуть в сам класс, нам интересны все поля, которые не объявлены как static. Из таких видим только одно — int value. Теперь исходя из информации выше получаем:
Заголовок: 8 байт
Поле int: 4 байта
Выравнивание для кратности 8 : 4 байта
Итого: 16 байт
Разница в 4 раза,на 64-битной и побольше может быть.
>>162416
>>162418
Зуммеры, для вас JOL сделали https://github.com/openjdk/jol
Берете и получаете результат с точностью до байта, хоть на 32, хоть на 64, хоть со сжатыми указателями, хоть без. Можно вообще сложный DTO засунуть и получить объем всего дерева объектов.
Нужно съебаться из джава треда с такими вопросами, и побыстрее.
Спуливаешь мастер к себе.
Мержишь изменения из мастера себе в ветку.
Мержишь свою ветку в мастер.
метод контроллера такой public String save(UserDto dto) .там метод маппера.
мне кажется ты не понимаешь меня
Кого его? Вопрос без ссылки на другие посты. Или его это этот тред?
GWT
На спринге делают только скучное, поэтому за него и плотят.
Никто не будет заморачиваться с спрингом на ютабе, нужно угодить подпивасным зрителям и высрать КЛОН ТВИТТЕРА НА РЕАКТ НОДА ЗА ЧАС (дольше никто смотреть не будет)
Ну вот клот твиттера на 5 табличек это не про спринг и упрощение.
Опиши в паре абзацев, какой проект был бы адекватен настоящему спринговому стеку.
Как мне в контроллере через @RequestBody передать enum таким образом, чтобы он сериализовался как объект:
{
"status": "ACCEPTED"
}
Сам enum выглядит следующим образом
@Getter
@RequiredArgsConstructor
public enum Status {
IN_PROGRESS("В работе"),
SUBMITTED("Отправлена"),
ACCEPTED("Принята"),
COMPLETED("Выполнено"),
NOT_ACCEPTED("Не принята"),
DELETED("Удалена");
private final String value;
}
Если запихнуть прямо @RequestBody Status status, нихуя не пашет, сваггер говорит (и говорит правильно), что нужно отправлять просто один из вариантов статуса, без кавычек, без нихуя, не объектом.
Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Access denied for user 'Karasik'@'localhost' (using password: YES))
Какой нахуй карасик? Это имя пользователя на моей винде, а имя пользователя mysql prospring5. Оказывается эта мразь каким то образом держит в переменной пропертей username(пик) имя моего пользователя. И никак его не меняет. И нужно было изменить имя переменной.
И я тыкался 3 дня. У этой ошибки миллион причин. Пока на третий день не дошел до второй страницы выдачи гугла, где это описано про эту книгу.
Как это говно работает? @Value берет pathvariable винды? Нахуя?
Только без виндосрача, пожалуйста, джава же ран евривере.
>@Value берет pathvariable винды? Нахуя?
Не только винды. Куда ты лезишь в спринг нахуй, если не можешь прочитать, как аннотация работает?
Чтобы ты в свой рот принял информацию конечно же, мань.
да ладно, понятно зачем, я просто не сталкивался с явным использованием переменных среды из джавы.
Но козьмина могла догадаться так переменную в пропертях не называть. Еще книги пишет, сука.
Я прочитал одну и еще несколько до половины. Но чувство, что я знаю фрагментарно очень меня очень гнетет. Может микрзилки были говно конечно.
А тут охват, в одном контексте, да и по нашему еще пишут.
Я как главу про jdbc прочту пойду читать Java Persistence API и Hibernate.
А че ты из мурзилок посоветуешь такому бестолковому? Баелдунг? Я читал штук 7 статей, когда писал кое-что.
Думал тупо доку почитать. Но я насчитал в нужных кусках доки 3.5 ляма символов. То есть 1500 страниц. Но на ингише(скорость чтения у меня в 5 раз медленее) и с только кусочками кода, без полных программ. И язык потяжелее баелдунга.
Про Шилдта
У него есть 2 книги
"Шилдт Г. - Java. Руководство для начинающих" и "Шилдт Г. - Java. Руководство для начинающих" и "Шилдт Г. - Java. Полное руководство". Это книги которые следует учить друг за другом? Или первая это для тех, кто хочет освоить быстро основные положения Java core а вторая для тех, кто хочет освоить Java более углубленно?
???
Пытаюсь запустить сервлет Java 8 с JBDC на tomcat 9.
В pom.xml подключил зависимость на mysql-connector-java. Стартую сервер, при отправке запроса на сервлет выдаёт ошибку:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb...
Заметил, после добавления драйвера в зависимость, в консоли томкэта появился варнинг:
INFO [RMI TCP Connection(2)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Не очень понимаю, что это означает. В war-файл драйвер упаковался.
В чём может быть проблема?
ОС: macOS Catalina 10.15.7
Tomcat 9.0.53
Короче, убрал зависимость в мавене и положил вручную джарник с драйвером в tomcat/libs. Заработало. Само собой, не самое лучшее решение. Хотелось бы, чтобы подтягивался драйвер из war-ника.
Полноценно это как?
Есть ли какая-нибудь более свежая альтернатива этой книге? Нужно для обучения. Хочется почитать примеры, но не из 2004 года.
Собственно, вопрос. Когда я буду пытаться куда-то еще устроиться, будет ли проблемой, что у меня не будет именно продакшн опыта на этих технологиях, а только какие-то пет-проекты (планирую запилить 2-3 штуки для практики)?
Я не тот анон, но у нас тоже нет ни хибера ни спринга. Вместо них Guice, jOOQ, gRPC, Apollo.
Красная Книга становится всё толще, так что с этим проблем не будет.
Микросервисы да, а что?
Короче, хочу себе JRE на андроид. Эксперименты в этой области были и весьма успешные:
https://github.com/PojavLauncherTeam/PojavLauncher - позволяет запускать Minecraft Java Edition причем актуальных версий. Также, позволяет запускать установщики модов, тоже на джаве. Но, как вы поняли, он заточен чисто под кубач, а я хочу запускать вообще любые программы на жаве с гуем. Ну например Open Rockets, Xmind.
https://github.com/MasterDevX/Termux-Java это ставит джаву из под термукса ну и тут ограничиваемся консольными приложениями
Гуглится вообще сложно тема, поэтому спрашиваю тут, может есть уже готовые приложения, которые могут запускать жары на ведре?
Я не виноват, что это требуют работодатели. Да и вроде для понимания работы спринга полезно знать будет.
Лучше для понимания работы спринга читай доки спринга
>Ну вы и ебанутые, небось еще и на го пишете.
Нормальный стек, легче, более шустрый и без магии, чем дефолтный спринговый.
Как в гибернейте смапить поле типа BLOB у ебучей DB2?
Пробовал
@Column(name = "DATA")
private byte[] data;
и
@Column(name = "DATA")
private Blob data;
в результате при попытке достать сущность из базы выходит одна и та же ошибка:
Exception in thread "main" org.hibernate.UnknownEntityTypeException: Unable to locate persister: ru.huita.db.entity.ProcessInstanceData
Ебать я затупил, элементарно же проверить можно было.
Убрал поле, снова получил ошибку, понял где накосячил - не добавил класс сущности в конфигурацию.
Добрй тебе, анон.
Спасибо, посмотрю
>От чего будет зависеть, сколько понадобится итераций на каждый элемент массива?
От генератора случайных чисел. В принципе для генератора с нормальным распределением можно рассчитать матожидание.
У тебя еще норм стек. Я вот каким-то хуем устроился в инфобез 2 года назад писать разные хуевины на ANTLR, так до сих пор и сижу там. Куда перекатываться хуй знает, так как я вообще бекендом никогда в своей жизни не занимался. А в джетбрейнсе меня нахуй шлют.
Добавил hibernate validator 6.2.0.Final, добавил валидацию - проект работает, валидации не было. Решил добавить еще validation-api, и все, пиздец, кидает
java.lang.AbstractMethodError: Receiver class org.hibernate.validator.engine.ConfigurationImpl does not define or inherit an implementation of the resolved method 'abstract javax.validation.ParameterNameProvider getDefaultParameterNameProvider()' of interface javax.validation.Configuration.
И ни в какую обратно вернуть ничего не могу, локальную историю поднимал, удалял .м2, убрал всю валидацию и ничего, все та же ошибка. Насколько я понял, что проблема с javax и jakarta, но я в душе не ебу, как это можно пофиксить
ебать, пофиксил. Внукам: сделал mvn clean в 1000 раз, сменил на hibernate validator 6.1.6 - заработало.
Такое существует?
Это бут медленный или спринг? И почему?
>писать разные хуевины на ANTLR
Мне кстати нравилось с ANTLR работать. В разы приятней чем DLS на котлине, грувях или XML.
Я не до конца понял из контекста. Думаю и с другими стеками джавы сравнивали и с шарпом/го.
Бут долго стартует в дефолтной конфигурации. Чтобы его ускорить надо отключать автосканы и ненужные компоненты.
Они работают долго. В основном логирование, аудит и тд, да
Транзакции, особенно всякие пре/пост коммит хуки. Йоба валидаторы. Всякие автоматические конверторы. Хибернейт если злоупотреблять связями. Всякие аутентификаторы хитрые, которые под капотом в базу могут писать.
Сам 3+ года опыта, уволился, в октябре предстоит прохождение собесов. Что там сейчас на повестке у интервьюеров?
integration test
Жс нинужон. Только чтобы самому понимать, что там наверху творится.
Базы хибером никто не делает. Все миграции пишутся ручками. Ну и кроме знания самого sql надо хоть немного понимать, что происходит в базе
Т.е. хибер тоже нинужон? И как получить знания sql, читать книги? Выдумывать самому незнамо чё? В моем пете 4 операции криейт, райт, апдейт, делит. Что я ещё должен сделать?
>>js, ajax, jQuery, bootstrap-ы верстку, всю хуйню
Хуйня без задач.
>>angular
Будет плюсом, если на галеру идешь, Джон Боров оценит 2 по цене одного.
>>react, vue
Для интерпрайза не особо популярно.
>>И что такое знание sql?
Умение написать запрос в @Query и прочитать его. Там дальше агрегации обычно не заходит. Оптимизация запросов через индексы практикуется не так часто. Тебя скорее выебут за n+1.
>>Есть те, кто базы не хибернетом делает?
Миграции пишут всегда.
>>167430
>>Т.е. хибер тоже нинужон? И как получить знания sql, читать книги?
Сейчас везде либо хибер, либо ждбцТемплейт. В первом надо писать query либо уметь применять спецификации, во втором - чистый сиквель.
>>В моем пете 4 операции криейт, райт, апдейт, делит. Что я ещё должен сделать?
Для этого стандартные методы подойдут. А когда тебе надо будет найти всех анонов старше 30лет, имя которых начинается на С или В, мать - шлюха, упорядочить список по степени шлюховатости матери по мнению Ашота, потом по возрасту анона то придется или писать супердлиный метод или писать @Query с hql/sql или таки освоить Specification
>Хибер нужон. Но его используют как орм, а не как тулу для миграций
Двачеры совсем ебанулись, использовать хибер как тулу для миграции базы.
Для вас, мудаков, ликвибейз и флайвей завезли. А вы пидоры все хибером ебашите.
Братцы, есть ли какие-нибудь альтернативы аннотации @XmlAnyElement(lax =true) в библиотеке json?
Я не очень опытный програмутор, в гугле ничего не нашёл.
Суть дела такова. На проекте есть готовый фреймворк, который был создан для десериализации XML. Но теперь вместо XML ответов мы начали получать абсолютно аналогичные ответы на JSON. Мне поручили переписать готовый фреймворк так, чтобы он одновременно мог обрабатывать и старые XMLки и новые Jsonы
И вот хз, какой аналог может быть @XmlAnyElemet? Мб кто-нибудь знает?
4ые сутки мучаюсь, работа стоит
Наоборот же, проявишь себя самостоятельным и независимым работником, умеющим решать сложные задачи.
В jackson то, что тебе нужно, как раз есть https://www.baeldung.com/jackson-annotations#3-jsonanysetter
Спасибо, буду пробовать
Если получится - наконец то перестану работать в выходные и рубану в дьяблу
>наконец то перестану работать в выходны
Хртьфу блядь, чтоб я еще раз помогал кому-то в этом треде. Не дай бог окажется таким же чмошником как и ты.
Жесть чел, а ты не подумал, что я не за бесплатно в выходные работаю?
Если твой совет мне поможет - то мне заплатят 300к/наносек просто за то что я задал вопрос на дваче.
Так что я не чмошник
Тем более блядь.
ууу, абстрактные, ни на чём не завязанные примеры. Ни одного аргумента.
Ты слит маня, съебал с треда
>Что там сейчас на повестке у интервьюеров?
Многопоточка, асинхронщина и распределенные системы.
Должен знать на зубок как работают внутри конкурентные коллекции, уметь написать свою Lock-Free очередь, досконально знать JMM и как работает GC. Понимать, как работает под капотом NIO и NIO.2 (epoll, kqueue) и всякие каналы, селекторы.
По распределенкам тут уже сложнее, но базу вроде paxos и raft нужно знать. Микросервисная архитектура туда же.
Всякий спринг и хибер раньше спрашивали плотно, сейчас уже не так часто, так как сейчас идет тренд чтобы по максимуму отказаться от них в будущих проектах.
>>по максимуму отказаться от них в будущих проектах.
И писать свои велосипеды вместо проверенных технологий? Зачем в такое говно идти вообще?
А меня за что?
Для этого нужны faang-style программисты с faang-style зарплатой, который будет непеша пилить и поддерживать велосипеды для тысяч программистов, а не чинить баги на проде под вопли "мы обещали, Сычев".
>faang-style разработка.
Для этого нужны и ресурсы как у FAANG. А то будет как ебучем Революте, когда разрабы перегружены раскраской кнопочек, решением проблем клиентов и прочей бизнес хуетой, а по вечерам должны сапортить самописные велосипеды Влада.
Че за револют?
Погугли вопросы для джуна, на ютуте есть тестовые собесы, вопросы почти всегда одни и те же для ждуна.
Сейчас вот заканчиваю с тутором по jdbc и перехожу к хиберу. Читаю статью по пулу соединений. Ну и везде краеугольная тема, это то, что подключение к базе это дорогой ресурс, это медленно, ресурсозатратно и т.п.
Но нигде не написано почему.
Тот кто шарит на более низком уроне может рассказать вкратце в чем суть тяжести соединений к базе?
Скорее всего у тебя Window из java.awt тянется
Я не знаю что такое дебаг логи и где их включать. Мне надо над самим проджектом думать, а не незнамо че гуглить сейчас.
Я могу перезаписать поля геттерами и сеттерами у имеющегося объекта, могу JPQL запрос написать. Но CRUD же должен простой метод для обновления уже сам иметь, разве нет?
если в двух словах и не выебываться: чем больше абстракций над железом, тем медленнее это работает и больше ресурсов требуется.
Из требований - обязательно должна быть поддержка Consul через consul-client но про него пишут:
> Well, that’s a problem with the consul-client library. It probably does not support GraalVM since it uses proxies. You can as well replace it with your own code that just calls Consul REST API to work with the native image builds
Однако само приложение говорит что можно работать, но для жтого надо чтобы я на этапе сборки воспользовался конфигурацией
>To define proxy classes use -H:DynamicProxyConfigurationFiles=<comma-separated-config-files> and -H:DynamicProxyConfigurationResources=<comma-separated-config-resources> options.
Собираю так:
mvn clean package -Pnative -DskipTests -Dquarkus.native.container-build=true -Dquarkus.native.additional-build-args=-H:EnableURLProtocols=http\\,https,--enable-all-security-services,--allow-incomplete-classpath,-H:DynamicProxyConfigurationResources=proxy-config.json
в proxy-config.json прописал интерфейсы consul-client и теперь на этапе сборки меня посылает нахуй
>com.oracle.svm.core.util.UserError$UserException: Class .... not found
Два дня уже ебусь с этим, пиздец просто. Что делать?
Да там вообще пидарасы этим консулом занимаются, завел issue на гитхабе, а они месяц молчат уже.
Типа потому что база это отдельный процесс(если она на той же машине)?
Очевидно, не настроил доступ к базенке своей.
Подними в докере свой мускуль (гугли докер композ);
Потом настрой проперти файл со строками подключения;
Потом запускай свою программулину (не избирательную лул).
Никаких, я так и вкатился, только на русском читал
>>Знание Java SE (не ниже версии 7,
>>Знание технологии из стека Java EE (JMS, JAX-WS/RS, JTA).
>>умение писать bash скрипты.
>>Ты получишь уникальный опыт
Работа мечты прям. Жаль зп не указана.
480x360, 0:06
>Знание Apache Camel (routing).
>Знание Apache ActiveMQ (JMS).
>Знание языка запросов SQL Oracle. Владение языком pl/sql.
Ok это книга Selikoff & Boyarsky OCA/OCP. Эта книжка, если ты не просто будешь ее читать, а экспериментировать, даст тебе больше, чем Шилдт .
OCA настроит мозги на нужный лад.
OCP даст крепкие знания и ты сможешь реализовать свои сервисы для портфолио и удовольствия ради. Я гарантирую это.
И плюс ко всему получим сертифицированного джависта на выходе, благородного жаба господина.
Спроси у того кто ему oca/ocp советует
А чем тебе решение с циклом не устраивает?
С мавеном такого не было.
Сделай дамп бд и скриптецкий для создания базы. Гугли pg dump
Ну и зачем ты тогда Postgres выбирал, тебе нужна встраиваемая БД.
Типа SQLite, Firebird, HSQLDB (последняя лучше заточена под JPA/Hibernate).
Postgres и MySQL должны быть установлены там, где будет запускаться приложение. А сама база на них создается с помощью миграций - см. Flyway и Liquibase.
У String есть методы indexOf и substring, для твоей задачи их достаточно. Но с циклом будет работать быстрее.
Хорошее время было, до б-гомерзких соцсетей и гейфонов. В IT были молчаливые бородатые сычи, а не женоподобные хипстеры.
А еще была куча вакансий на божественной Delphi.
https://javarush.ru/groups/posts/605-junit
https://habr.com/ru/post/120101/
https://www.baeldung.com/junit-5
Это про JUnit. Интеграционным не занимался, это Selenium штоле?
Интеграционное = юнит с настоящей базой
Потому что грейдл для пориджей, мавен для гречневых.
Я вообще не задумывался о таких мелочах,когда начинал делать. Постгресс мне понравился из-за функционала,да и более опытные ребята посоветовали,типо мастхэв. О том что я столкнусь с невозможностью тупо скинуть файлики на флешку я не подозревал
Бд можно создавать при запуске и накатывать все ликвибейсом
А ты от MS SQL Server'a файлы собирался передавать?
Если да, то хорошенько подумай и никогда так не делай.
Передаются обычно бэкапы, желательно с предварительной проверкой их работоспособности.
На лабах по бд я скидывал преподу .mdf .ldf файлы и ему хватало чтобы отъебаться от меня. Вот и подумал что в постгресе есть такая же возможность
Если тебе поверхностно - посмотри на баелданге как написать простенький тест с junit5 + mockito. Можешь TestContainers попробовать. Для теста рест апи - Rest Assure. Для е2е - селениум. По каждой из этих тем дохуя инфы.
Ты же не уточнил, что тебе надо: как писать тесты библиотеки инструменты, подход к тестированию в целом какие тесты надо писать, сколько из должно быть, что надо тестировать, а что нет и т.д.
Для второго читай книги по теории тестирования что-то типа https://temofeev.ru/info/articles/fundamentalnaya-teoriya-testirovaniya/
Решил проблему: нахуй нужен этот consul-client от orbitz, накатил поделку от vertx, у него нет этих ебучих мозг проксей.
Хотя можно было бы и просто put-реквестами самому разрулить
Хибер это реализация ЖПА. На практике надо знать JDBC и JPA. Остальное можно прям по ходу дела изучить.
Если любишь pure sql, зацени jacoco
Чексумму с размером можно не хранить. Только если для верификации какой-нибудь
>>в таблице надо хранить записи с полями:
Обычно это массив байтов + инфа о самом файле - название, размер, ссылка на владельца и тп.
Есть на работе один проект на кэмэле и jms, шо, сильно неактуальное говно?
Чтоб можно было этот блоб в базу впихнуть, забэкапить, шардить и реплицировать? Да и тестировать такое проще.
Опечатался. Мозги уже набекрень. Jooq жи
Так можно и год появления спринга или самой джавы вспомнить. Проблема кэмэла даже не в том, что он старый, а в том, что он говно без задач.
А спринг6 ты прям сразу будешь играть, как 6.0.0.RELEASE выйдет, в тот же день?
Даже какая нибудь 13 версия, которую никто не собирался тащить в прод выходила с большим интересом.
У него требования жава17, поэтому только что играться в петах. Со спрингом я напрямую взаимодействую - поэтому интересно. Опять же спринг не побоится сломать обратную совместимость ради новых фич. А в самой джаве там опять что то оптимизировали/ускорили в жвм, добавили немного плюшек - ничего особенного.
А что годного появилось в спринге из самого последнего?
Внутри пятерки были новые фичи?
Что ожидается?
> Camel
Не то, чтобы прям говно говна, но сам подход к проблеме это энтрепрайз из начала 2000х. Со всеми этими EJB, ESB, MQ и прочим SOAP. Сейчас предпочитают или написать микросервис для интреграции двух систем или через очереди работать. А от подхода универсальный интегратор всех сервисов - отказываются.
>JMS
Идея универсального адаптера к мессенджигу себе изжила. В том виде в котором API JMS сейчас - он не дает нормально использовать все возможности Kafka или RabbitMQ или еще кого современного. А идея, что ты можешь легко заменить реализацию, если работаешь через универсальное API - миф.
Если у вас нет и не предвидится больших нагрузок, но при этом персистентность очень важна и есть надежная СУБД с репликацией и бекапами, то какой нибудь ActiveMQ не самый плохой выбор. Все необходимое на месте и настраивать проще чем Kafka или RabbitMQ.
>>Цдн ещё есть
Как это работает, если я хочу допустим сохранять картинки, который пользователь заливает?
Меня это не волнует. Это забота цдн. Все, что я храню - ссылку на пикчу + метаданные
Так ты не решаешь вопрос хранения данных, ты просто отдаешь его на аутсорс. Для сайта пицерии - норм решения, для корпоративной энтерпрайз поебени (которую часто и пишут на джаве), спрятанной за впнами - не всегда приемлемо.
Ceph есть. Если ты про это
@PostMapping("dvach/huemoe")
public ResponseEntity<Object> huemoe(){
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
> преимущества, перед ResponseEntity?
Ну, само собой, в тех редких случаях, когда метод всегда один статус отдаёт, допустим если это ExceptionHandler какой-нибудь
спасибо за ответ
- Это же Абстрактная фабрика! На чём ты кодил до этого?
- На Джаве.
- Жабапидор! - в один голос заорали все 20 человек.
- Жабапидор! Жабапидор! Жабапидор!
Кто-то включил сирену. Над дверьми замигали красные лампочки тревоги. На окнах мгновенно сомкнулись плотные жалюзи. В офисе одновременно бывает два отдела человек по сорок. На обеде вся эта толпа собирается на первом этаже, где яблоку негде упасть. А поэтому, как охранники ни пытались вырвать джавапидора из рук разъяренной толпы, им это не удалось. По всему офису стоял сплошной рев:
- Жабапидор!
В коридоре его сразу же сбили с ног. Используя галстук как поводок, его тащили через весь коридор, передавая из рук в руки. Поэтому получалось так, что никакого движения в коридоре не происходит, но и джавапидора тоже нет. Его заволокли в каптерку под лестницей, где хранятся ведра и швабры с тряпками, и там закрыли. Под конец рабочего дня он всё же появился. За получасовой обед его изнасиловали несколько человек. Сопротивляться было бы бесполезно. Через день на нем чистым оставалось одно лицо, а на теле не было живого места. Он превращался в мразь, в животное. Его били все, даже дизайнеры и уборщицы. Его заставляли есть говно и опарышей. В очко ему совали битые лампочки, живых птиц и змей. Он стал «дельфином» – в нужнике пятнадцать дырок, он ныряет в первую, выныривает, ныряет во вторую... И так – до конца. От него постоянно воняло. С ним невозможно было рядом находиться. Был такой случай: к нам устроился работать Степаныч. Степаныч сидит на толчке, а кто-то снизу через очко хватает его за яйца. Степаныч с воплем вылетает в коридор без штанов. Напротив - айти отдел. Смех не стихал долго... Потом Степаныч забил его кирзовым сапогом насмерть. Менты как узнали, что сдох джавапидор даже дело заводить не стали.
- Это же Абстрактная фабрика! На чём ты кодил до этого?
- На Джаве.
- Жабапидор! - в один голос заорали все 20 человек.
- Жабапидор! Жабапидор! Жабапидор!
Кто-то включил сирену. Над дверьми замигали красные лампочки тревоги. На окнах мгновенно сомкнулись плотные жалюзи. В офисе одновременно бывает два отдела человек по сорок. На обеде вся эта толпа собирается на первом этаже, где яблоку негде упасть. А поэтому, как охранники ни пытались вырвать джавапидора из рук разъяренной толпы, им это не удалось. По всему офису стоял сплошной рев:
- Жабапидор!
В коридоре его сразу же сбили с ног. Используя галстук как поводок, его тащили через весь коридор, передавая из рук в руки. Поэтому получалось так, что никакого движения в коридоре не происходит, но и джавапидора тоже нет. Его заволокли в каптерку под лестницей, где хранятся ведра и швабры с тряпками, и там закрыли. Под конец рабочего дня он всё же появился. За получасовой обед его изнасиловали несколько человек. Сопротивляться было бы бесполезно. Через день на нем чистым оставалось одно лицо, а на теле не было живого места. Он превращался в мразь, в животное. Его били все, даже дизайнеры и уборщицы. Его заставляли есть говно и опарышей. В очко ему совали битые лампочки, живых птиц и змей. Он стал «дельфином» – в нужнике пятнадцать дырок, он ныряет в первую, выныривает, ныряет во вторую... И так – до конца. От него постоянно воняло. С ним невозможно было рядом находиться. Был такой случай: к нам устроился работать Степаныч. Степаныч сидит на толчке, а кто-то снизу через очко хватает его за яйца. Степаныч с воплем вылетает в коридор без штанов. Напротив - айти отдел. Смех не стихал долго... Потом Степаныч забил его кирзовым сапогом насмерть. Менты как узнали, что сдох джавапидор даже дело заводить не стали.
Вот поэтому в тред стоит писать с сажей
К нам в IT отдел пришёл новый сотрудник. Нужно сказать, что у нас в отделе работают почтенные жабогоспода. Новичка посадили за компьютер, но не успели даже дать задание, как он начал кодить. Начальник из любопытства подошёл посмотреть, что он там написал. В течении секунд тридцати он побледнел, затем посинел, затем покраснел, а потом трясущимся от нескрываемого гнева голосом сказал:
- Это же линкью! На чём ты кодил до этого?
- На Шарпе.
- Шарпопидор! - в один голос заорали все 20 человек.
- Шарпопидор! Шарпопидор! Шарпопидор!
Кто-то включил сирену. Над дверьми замигали красные лампочки тревоги. На окнах мгновенно сомкнулись плотные жалюзи. В офисе одновременно бывает два отдела человек по сорок. На обеде вся эта толпа собирается на первом этаже, где яблоку негде упасть. А поэтому, как охранники ни пытались вырвать шарпопидора из рук разъяренной толпы, им это не удалось. По всему офису стоял сплошной рев:
- Шарпопидор!
В коридоре его сразу же сбили с ног. Используя галстук как поводок, его тащили через весь коридор, передавая из рук в руки. Поэтому получалось так, что никакого движения в коридоре не происходит, но и джавапидора тоже нет. Его заволокли в каптерку под лестницей, где хранятся ведра и швабры с тряпками, и там закрыли. Под конец рабочего дня он всё же появился. За получасовой обед его изнасиловали несколько человек. Сопротивляться было бы бесполезно. Через день на нем чистым оставалось одно лицо, а на теле не было живого места. Он превращался в мразь, в животное. Его били все, даже дизайнеры и уборщицы. Его заставляли есть говно и опарышей. В очко ему совали битые лампочки, живых птиц и змей. Он стал «дельфином» – в нужнике пятнадцать дырок, он ныряет в первую, выныривает, ныряет во вторую... И так – до конца. От него постоянно воняло. С ним невозможно было рядом находиться. Был такой случай: к нам устроился работать Степаныч. Степаныч сидит на толчке, а кто-то снизу через очко хватает его за яйца. Степаныч с воплем вылетает в коридор без штанов. Напротив - айти отдел. Смех не стихал долго... Потом Степаныч забил его кирзовым сапогом насмерть. Менты как узнали, что сдох шарпопидор даже дело заводить не стали.
К нам в IT отдел пришёл новый сотрудник. Нужно сказать, что у нас в отделе работают почтенные жабогоспода. Новичка посадили за компьютер, но не успели даже дать задание, как он начал кодить. Начальник из любопытства подошёл посмотреть, что он там написал. В течении секунд тридцати он побледнел, затем посинел, затем покраснел, а потом трясущимся от нескрываемого гнева голосом сказал:
- Это же линкью! На чём ты кодил до этого?
- На Шарпе.
- Шарпопидор! - в один голос заорали все 20 человек.
- Шарпопидор! Шарпопидор! Шарпопидор!
Кто-то включил сирену. Над дверьми замигали красные лампочки тревоги. На окнах мгновенно сомкнулись плотные жалюзи. В офисе одновременно бывает два отдела человек по сорок. На обеде вся эта толпа собирается на первом этаже, где яблоку негде упасть. А поэтому, как охранники ни пытались вырвать шарпопидора из рук разъяренной толпы, им это не удалось. По всему офису стоял сплошной рев:
- Шарпопидор!
В коридоре его сразу же сбили с ног. Используя галстук как поводок, его тащили через весь коридор, передавая из рук в руки. Поэтому получалось так, что никакого движения в коридоре не происходит, но и джавапидора тоже нет. Его заволокли в каптерку под лестницей, где хранятся ведра и швабры с тряпками, и там закрыли. Под конец рабочего дня он всё же появился. За получасовой обед его изнасиловали несколько человек. Сопротивляться было бы бесполезно. Через день на нем чистым оставалось одно лицо, а на теле не было живого места. Он превращался в мразь, в животное. Его били все, даже дизайнеры и уборщицы. Его заставляли есть говно и опарышей. В очко ему совали битые лампочки, живых птиц и змей. Он стал «дельфином» – в нужнике пятнадцать дырок, он ныряет в первую, выныривает, ныряет во вторую... И так – до конца. От него постоянно воняло. С ним невозможно было рядом находиться. Был такой случай: к нам устроился работать Степаныч. Степаныч сидит на толчке, а кто-то снизу через очко хватает его за яйца. Степаныч с воплем вылетает в коридор без штанов. Напротив - айти отдел. Смех не стихал долго... Потом Степаныч забил его кирзовым сапогом насмерть. Менты как узнали, что сдох шарпопидор даже дело заводить не стали.
Просто берешь и делаешь. Маппишь ручками
Я сейчас делаю примерно вот так:
@GetMapping("/path")
public ResponseEntity<?> get(){
return new ResponseEntity<>(Collections.singletonMap("Varable", Value), HttpStatus.OK);
Нормальный ли вариант со складываем в singleton-мапу? Или лучше как-то руками сформировать json-строку?
}
То, что я не отец на проекте. А котлин пока что только в далёких планах
Сап харкач у меня есть два платиновых вопроса с подвопросами на которые гугл выдает херню с хабра и т.п., где в комментах срач и батхерт, что автор не прав и ничего не понимает. Но вы то тут гении)0
1.1) Как писать микросервисы
1.2) Является ли обычный сервер на спринге, допустим, выдающий хэлоу ворлд и не передающий ничего другим серверам микросервисом.
1.3) Как могут обмениваться микросервисы между собой информацией без кафки и прочих рабитмкью?
2.1) Как засунуть микросервис в докер
2.2) Зачем кубернейтс, если есть докер композ?
> 1.1) Как писать микросервисы
Руками. У каждой тимы есть своя пачка сервисов, над которыми они работают
> 1.2) Является ли обычный сервер на спринге, допустим, выдающий хэлоу ворлд и не передающий ничего другим серверам микросервисом.
Если он крутится рядом с другими микрухами, да
> 1.3) Как могут обмениваться микросервисы между собой информацией без кафки и прочих рабитмкью?
Рест, gRPC, брокеры, кеши, база, файлы
> 2.1) Как засунуть микросервис в докер
Написать докерфайл
> 2.2) Зачем кубернейтс, если есть докер композ?
Кубер позволяет разворачиваться на нескольких нодах и не ебать себе мозги + куча всего остального, о чем я не знаю
Вот почитать: https://microservices.io/book
Такой вопрос: пишу запросы к базе данных, которые традиционно имеют километровую длину. Собственно, есть необходимость некоторую заранее вставленную в запрос метку заменять на действительное значение. Вроде как
SELECT....FROM....WHERE SOME_VAL = #mark#
Я вижу два пути. Самое простое это тупо запихнуть запрос в String, а потом вызвать у него replaceAll с заменой метки на Value. Смущает в этом всем то, что запрос большой, точек замены может быть много, а строка финальная, соотвтетственно довольно сильно будет засираться память.
Второй подход в том, чтобы создать StringBuilder, приаппендить к нему запрос, найти индекс метки, вызвать replase, передав ему индекс начала метки, индекс конца (начало + длина метки), и само значение Value. СтрингБилдер вроде мутабельный, и все эти упражнения вроде как не должны перерасходовать ресурсы, но зато реализация чуть сложнее (индексы нужно получать сначала).
Как вообще лучше делать в этой ситуации?
А ты не можешь на строне базы сделать шаблон?
По-моему, такое можно сделать через Prepared Statements.
куда скармливаешь запросы? Там наверняка есть prepared statement - специально для этого придуманная штука
1) В базе данных создаётся таблица user_activity (user_id, status, last_seen);
2) Для этой таблицы создаётся функция-триггер, которая рассылает уведомления об изменениях в этой таблице;
3) В коде создаётся слушатель этих самых уведомлений (событий);
4) Каждый клиент во время подключения к веб-сокету передаёт свой id/username на веб-сокет контролер;
5) Каждый раз, когда приходит обновление из соответствующей таблицы (users_activity), мы делаем:
— достаём у каждого подключённого клиента список его контактов;
— смотрим у кого в контактах есть пользователь, по которому пришло обновление с базы данных, и отправляем клиенту по веб-сокету соответствующий JSON, например
{
"username" : "username",
"status" : "online",
"last_seen" : 1152359098263742
}
Полная хуйня, или может быть?
Java 11, Spring 5, PostgreSQL
я бы делал всё в коде. В базу такую таблицу как дублирование только на случай ребута - чтобы приложуха при старте читала из этой таблицы состояние. Ещё флаг "обработано" не забудь
> В базу такую таблицу как дублирование
> флаг "обработано" не забудь
Детальнее можно, пожалуйста, что ты имеешь ввиду?
всё это делаешь в коде. Возникает проблема - что при рестарте приложухи ты потеряешь текущее состояние. Для ликвидации дублируй изменения в таблицу в базу. И при старте приложухи читай состояние из этой таблицы
Флаг "обработано" - прочитал ты из базы состояние. Как узнать, ты уже оповещал по этой записи или ещё нет? Вот добавляешь флаг. Отослал все оповещалки - поставил флаг в true.
разве такую хуиту не лучше в редиске хранить, вместо реляционки?
> SecurityContext и обновлял бы user_activity.
Вот это хороший совет, спасибо.
> Если производительность страдает
Вот тут тоже есть вопрос, ну будем тестить.
>>173968
Тоже хорошая идея.
>>173969
Ну сейчас в базе всегда актуальное состояние хранится, типа записи не копятся. Один юзер = одно поле в user activity.
> Я бы в фильтре доставал SecurityContext и обновлял бы user_activity
А нельзя просто при подключении/отдключении к вебсокету обновлять запись?
Наверное, можно. Почти не работал с вебсокетами. Поэтому и не советовал. Но идея очень годная. Вроде как с помощью вот этого реализуется: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/messaging/support/ChannelInterceptor.html
JVM тупо дает понять процессору, что мол "не кэшируй значения, а доставай их постоянно из памяти"? Или задействуется механизм синхронизации кэша (https://ru.wikipedia.org/wiki/Когерентность_кэша), который щас вроде как везде встроен в проецссоры? Или ключевое слово не дает JIT компилятору провести оптимизации, а-ля расчет некоего значения в регситрах?
Есть тут хардкорные джависты, которые знают как под капотом hotspot работает?
а разве "под капотом" не меняется в каждой версии? И нет смысла заучивать конкретные реализации в конкретной версии
Ну по идее да, java-разработчиком нужно абстрагироваться от конкретной реализации jvm и пользоваться только тем, что говорит JMM. Но все же интересно какие механизмы используются для обеспечения volatile, хоть для любой реализации (хотя мне кажется везде +-одинаково, по крайне мере для linux-x86)
>Как под капотом работает volatile и что обеспечивает видимость актуального значения во всех потоках?
По разному, в зависимости от хардвары. Но если кратко то:
1. JIT не делает оптимизации по изменению порядка кода или пропуск записи в память.
2. После записи и перед чтением ставит рид врайт барьеры специальная команда процессора.
Ну тоесть по факту получается доступ к некоему куску памяти блокируется, при этом не важно где он находится - в кэше или в оперативе (уже тонкости на уровне процессора, не видимые jvm)?
То есть, лучше использовать свой кастомный DTO-контейнер на каждый ответ, для маппинга на json? В чём преимущество?
Просто если мы отдаём какой-нибудь "something" String, например, то его просто размапит в одиночную строку, а не вложенный объект, а в body будет просто ответ вида "somestring", а не
{
"field": "somestring"
}
Как предполгагет гайдлайн JSON.
Я не один с сажей. Про сажу в предыдущем тебе почитай
Вообще насрать. Как вам с фронтом удобнее. Просто так более понятно, что "something" - это "field", а не что-то рандомное
У тебя musicPlayer не может создаться. С ним разбирайся
Блокировки нет, там на уровне кешей решается. Ядру надо просто кеш линию с этими данными перевести в эксклюзивный режим. После чего все остальные ядра должны будут инвалидировать свои копии если есть и прочитать новую версию у владельца эксклюзивных прав.
https://en.wikipedia.org/wiki/Cache_coherency_protocols_(examples)#MESI_protocol
>(уже тонкости на уровне процессора, не видимые jvm)?
Не совсем не видимые. У JVM есть модель памяти JMM которая дает гарантии видимости данных. И у процессора есть модель памяти, причем у разных процессоров разные модели. А дальше JIT при генерации нативного кода, вставляет нужные инструкции для конкретной платформы чтобы выполнить требования JMM.
разработка (SQL запросы для отчетов по запросам, процессы Talend, печатные формы и проверки на Drools) – не более 30%
Там будет программирование или слово JAVA там просто байт и нужно будет составлять отчетики по данным из БД? Из этой вакансии реально стать джуном или ну её, куда вообще из неё карьерный рост?
сама вакансия https://hh.ru/vacancy/47886958
Мне просто интересно, я не первый раз вижу вакансии 1,2 линия поддержки всегда их скипаю, в моем понимании это чел на телефоне который записвает проблему и передает программистам, не?
Ещё интересно узнать про всякие Pega, Low-Code это типа программирование с помощью картинок кек? Стрелоку перенес, цикл сам написался и т.п.
Вака не оч. Программеры на такую не откликнутся. Уровень подай/принеси отчет для белых господ, а затем пошел нахуй.
Лучше сразу идти в разрабы, пускай джуном, пускай даже интерном. Вокруг тебя будут квалифицированные коллеги и если не будешь лениться, за год- полтора выстрелишь до мидла. Через еще год крепкий мидл. Актуально для дотнет/жаба.
>Поясните, что такое: вторая линия поддержки различных серверов приложений (в основном на Java с базами данных Oracle) .
Каждая контора понимает это по своему, но обычно это: человек который отвечает на саппорт тикеты, которые не смогла решить девочка на телефоне. Тут надо знать как система работает какие там есть внутренние сущности, как и где они хранятся, как части системы взаимодействуют, базовые знания программирования чтобы читать логи и хорошие SQL чтобы чекать базу.
Это позиция не предполагает программирование, но если ты сможешь посмотреть код и понять как он работает это будет плюсом.
У меня не парситься, как бы я его не написал на скрипте, всегда ошибки. Может пример приведешь?
>>Стажер департамента IT
>>возможности профессионального роста
Рост до мануального тестировщика?
>>2 линия поддержки
Видимо несущественные баги решать(серьезные дев команда решит), отчеты джаспера править (отступ слева 3 пикселя поправить на оступ в 2 пикселя).
>>преимущества работы в РН Банке.
Кек, это ж частный корпоративный банк не работающий с физиками, какие преимущества то?
Хуйня вакансия, если совсем никуда не берут - можешь попробовать - стаж набивать, но лучше выучи спринг бут и иди в джуны на галеру.
Спасибо за ответ!
Я имею ввиду не конкретно первый день, а первые задачи, рабочие, которые дадут жуну?
И во что это сконвертиться в таком методе - public void getUsers(@RequestBody List<User> list) {? Или как это надо получать, какая будет сигнатура у рест метода?
Нихуясе, у тебя руководство неадекватное
Здесь он принимает список юзеров и ничего тебе не отдает. Остальной твой пост не понял
Есть дто. UserDto, поля - Long id, String name, List<Item> list. Как отправить такой объект из фронта в рест контроллер, например аяксом? Как сделать такой объект жаваскриптом, чтобы он спарсился рест контроллером?
Очень хуево. Никто не укажет на твои ошибки + все будут на +- похуй срать в репу.
Зависит от адекватности ревьювера. Если он норм, то значительно ускоряется адаптация новичков, если долбоёб с имитацией деятельности, то задача на пару дней растягивается на неделю из-за неубранного лишнего импорта и лишней пустой строки с пропущенными при этом критическими багами.
>Лучше сразу идти в разрабы, пускай джуном, пускай даже интерном.
Я пытаюсь и к моему большому сожалению не я один. Может в сопроводительном писать "Готов работать полгода бесплатно и платить Вам каждый месяц по 30к"?
Мне кажется в какой-то момент там может быть и 100. Вот вам и дефицит IT кадров, вкатунов столько, сколько нет уже ни в одной специальности, наверное.
А мог бы учить не мертвую оверрейтед джаву, а няшный шарфик где разрабов в два раза меньше даже с учетом индии
Я его знаю хуже, у меня в резюме есть и он, как и .net crud mvc в репе. По вакансия с C# я сразу отказы получаю, возможно из-за того что у меня был небольшой опытом java тестировщиком, видно это оскорбляет С# господ. Пока 0 приглашений, ищу с сентября, держу в курсе.
despair++;
Я в отчаянии, может поработав год автотестировщиком меня возьмут джава джуном?
После такого ты уже никогда не отмоешься.
В нормальных компаниях - если придти к начальнику и сказать о своем желании, тебе пойдут навстречу и дадут шанс.
Тогда вопрос тебе и другим анонам, как более опытным. У меня есть приглашения от IT галеры, двух банков и продуктовой компании(продукт веб приложение). Куда перспективнее? Сразу скажу, не хочу бегать от компании в компанию, хочу засесть лет на 5 в одном месте и расти до джава мидла во влажных синьора
То есть неправильно, у меня всё заработало
Надо удалить папку .git и заново закоммитить что надо.
расти лучше в галере
На галере у тебя будет больше возможностей пощупать разные технологии и разные проекты. И в целом переход на другой проект проще. конечно если это крупная галера, а не Вебстулия Сокол.
На вебстул Сокол можно посадить целую команду разработки
Деньги практически одинаковые. Галера тоже отправит грести в банк. Не топовая, короче не епам и не люксофт.
>>175595
Мне вот тоже кажется на галере будет больше технологий, из минусов только что это будут технологии тестировщика, типа какой-нибудь селеноид, апачи-хуячи и прочи жметры. Надеюсь это не сильно повлияет на свободное время, так как по моей страте после работы я буду тренить пет проекты на джава джуна в этой же компании.
На крупной галере, если ты сильно захочешь и попросишь, тебе почти со 100% вероятностью дадут себя попробовать в разработке. У них проектов и людей много, они постоянно их туда-сюда двигают.
А вот в продуктовой - тебе могут сказать, что разработчики сейчас не нужны, а как раз нехватает QA. Подожди пока еще 2-х QA наймем, тогда и поговорим.
А галеры работают удаленно, сейчас? И если да, то какое может быть развитие? Ведь спросить ничего нельзя, только если приебаться к кому-то в скайпе, это мне кажется наглым надо быть.
Галеры разные бывают, кто-то работает удаленно, кто-то в офисе. Опять же тебе могут дать проект где команда не в твоем городе, так что все равно надо будет по слаку спрашивать.
$ git push feature-branch-name
Я хочу не пушить, а именно сделать мердж реквест своей ветки. Пуш, я так понимаю заливает всё на гит без предпросмотра
После пуша своей локальной ветки, естественно.
У меня тоже так, забей. Видимо, они их автоматически обходят кандидатов по ключевым словам, когда новую вакансию публикуют.
Оно и видно, дебил.
Хибер лучше не трогать в принципе.
А дополнительные функции которые в Session есть по сравнению с EntityManager не очень нужны?
Если будет нужно что-то хиберовское, ты сделаешь entityManager.unwrap(Session.class)
пасиба.
Критерия - круто, но используется редко. Сначала jpql, потом можешь критерию
Ты не понял, я про кю, а не про IQ
Рекомедую вот это - https://en.wikibooks.org/wiki/Java_Persistence
В свое время помогло сильно обновить знания перед собесом
кстати вообще относительно джава/джакарта ее стандартов.
>What is new in JPA 2.1?
>JPA 2.1 was approved as final on 22 May 2013.
между тем
>The JPA was renamed as Jakarta Persistence in 2019 and version 3.0 was released in 2020.
последние джава ее - первые джакартовские стандарты вообще кого то волнуют? Тот же хибер вроде соответствует последнему стандарту, но в статьях о джакартовских стандартах почти не пишут. Че там в других стандартах? Я даже с сервлетами не понял.
Жаба ЕЕ сейчас мягко говоря слабо востребована, не ебал бы ею голову. Если ты конечно не желаешь поработать в мохровых ытнырпрайзах в банках и прочей еботене. Но это мазохизм.
А так я думаю что основа jpa актуальна, в 2.2 они едва ли там все ПЕРЕДЕЛАЛИ.
Опенсорс на джаве, лол, завтра оракл очередной раз поменяет лицензию и сдерет с тебя бабки
>Опенсорс на джаве, лол, завтра оракл очередной раз поменяет лицензию и сдерет с тебя бабки
Шарпидор, иди нахуй! OpenJDK уже давно под GPL2.
Есть простая строка типа "(3 4)(5 8)" и из неё я хочу получить четыре числа. Но морочиться с split, substring и так далее я не хочу - это кажется мне некрасивым. Есть ли такой метод, типа:
YobaUtils.parse(str, "(%d %d)(%d %d)"),
который вернёт int[] или какой-нибудь YobaParseObject?
Регулярки
Pattern pattern = Pattern.compile("\\((\\d+)\\s(\\d+)\\)\\((\\d+)\\s(\\d+)\\)");
Matcher matcher = pattern.matcher("(3 4)(5 8)");
if(matcher.find()){
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println(matcher.group(4));
}
Все выше 8 для пориджей и хипстеров
Действительно ошибся. 17 еще и LTS, но использовать её, на мой взгляд, рановато.
Я не знаю что за долбоеб тебе сказал, что в опен сорс берут вкатунов. Опенсорс это обычно инструменты для разработчиков. Сделать удобный молоток сложнее, чем забить гвоздь.
Напиши пару крудов, подучи теорию и вкатывайся на галеру. Ментором станет тимлмд, который будет режектить твои пулреквесты. Просто так тебе объяснять никто ничего не будет, это сложно и за это не платят (или ты готов платить по ставке 50 баксов в час?).
>>помогать буду в чём смогу по мере возможностей
Это еще надо найти подходящую задачу чтоб ты смог принести пользу и ничего не сломать. Мне проще было бы самому такую таску выполнить, чем объяснять ее тебе. Особенно если ты даже не джун, а стажер, за которым еще все переделывать.
Вообще у меня тут в системе Java 11, но в идее поставил 17. Зато узнал, что switch expression есть в 17, но нет в 11
В JPA 3.0 только переименование пакетов, изменений по существу не было
Ой ты хетрец, это как бы типа "готов работать за бесплатно" завуалировал под опенсорс, типа ты такой идейный, зачет, возьму на вооружение.
мимо предлагавший лиду половину зп, если возьмет джуном
Чел ты... это ведь только ввод входных данных в тестовом, а ты уже застрял, может ну его и лучше почитать про substring и indexof? Они все равно не возьмут, там будет кукарек, что надо было делать в хэшмапе или дереве, что не по солиду и это только вершина айсберга
>>предлагавший лиду половину зп, если возьмет джуном
Потом кабан об этом узнает и лид идет искать сотыги в другом месте. 20-30к стоит того как думаешь? Взятка должна быть большая, чтоб ее размер перебивал риск наказания.
Я ещё смешарик
Чел, это не задача с собеса )
there are offices all over the country, many employees work remotely (including me)
Значение inputNumber никогда не меняется
Ну хрен его знает, в 17 raw strings уже даже не в превью. Должны работать без танцев с бубном.
Но с другой стороны, алгоритм с реверсом строки проще и очевиднее
При поиске в интернете по запросам "java raw string" и т.д. не выдаются статьи по типу "Виды строковых литералов в Джава" или ссылки на документацию. Выдаются только вопросы на форумах, типа "Есть ли в Джава сырые строки", "Как красиво составить регексп" и т.д., а также JEP 326: Raw String Literals (Preview), имеющий статус Closed / Withdrawn.
>Please note: This was intended to be a preview language feature in JDK 12, but it was withdrawn and did not appear in JDK 12. It was superseded by Text Blocks (JEP 355) in JDK 13.
Ну ошибся с названием фичи, не Raw String Literals а Text Blocks.
> Но зачем хорошему кодеру продавать себя на авито за гроши(по меркам средних зп, которые этот кодер мог бы получать), и тратить кучу времени на тупых вкатунов?
Максимум - статью/доклад на широкую публику написать
Но увы, блоки не помогут писать регекспы красиво (
Получается, хороших менторов не найти?
>хороший кодер может здорово помочь новичку
Сколько ты репетиторам не заплати, пока ты не сядешь и не начнешь учить, как английский язык, теорию, практику, ничего не выйдет. Без преувеличений, тебе понадобится минимум 6 месяцев по 8 часов ежедневно разбирать только базовые библиотеки, core, lambda, concurrency, ты даже не коснешься спринг бута. Еще пол года ты потратишь после того как узнаешь, что помимо этого тебе надо знать не мало вещей из девопса и тебе придется в этом разбираться. Потом ты узнаешь, что знаний бэка недостаточно, тебе в любом случае придется разбираться в верстке, жс и т.д. Я уже молчу про БД, SQL, NoSQL про всякие хранимые процедуры, индексы, нормализацию и т.д. Если ты не поридж до 22 лвл, то никто тебя не возьмет с минимум знаний. А бумеру 30+, даже зная всё это, нужно быть готовым, что его резюме не просмотрит 70% работодателей, они даже не откроют его просто посмотреть на позицию джуна. Но ты можешь мне не верить, думать, что тут тебя отговаривают конкуренты, пожалуйста, твое право. Можешь открыть эксель и протянуть 120 строчек (10 лет) свой текущий оклад, с учетом прибавки зп, при карьерном росте, и рядом колонку твоего вкатунства, где ты скорее всего 2 года будешь сидеть без зп, а потом полгода получать 60к, потом год 80-120к, потом го 120-160 к. Проссумируй всё и сравни, ещё не забудь вспомнить как ты 2 годы будешь превозмогать и готовься что придется часто читать про новые фичи, а потом уже принимай решение.
>Пробую учить Java по курсу со stepik
А степик это просто чушь. Ты проанализируй, как я тебе посоветовал выше, может какой-то сертификат по текущей работе тебе принесет больше профита.
По текущей точно нет. Почему stepik чушь? Вроде отзывались многие неплохо, по крайней мере лучше цыган из скилбоксов. Да, я понимаю, что учить очень и очень много, но это единственный путь развития, который вижу, из того, что вообще интересует. Про репетитора спросил не для того, чтобы за месяц куда то вкатиться, а чтобы в идеале более качественно понимать, а не зубрить.
Я думаю нет. Чтобы изучать джава-стек тебе же надо кроме идеи еще браузер запускать и базу держать запущенной.
А этот проц хуже самого слабого десктопного интеловского селерона 10-тилетней давности.
Если все запустится, то будет боль.
Этот проц разве что с голой джавой без иде играться. А для этого тебе память не обязательно покупать.
разве что найти идею 7-летней давности(какую-нибудь самую первую с поддержкой джава 8), но все равно будет боль.
да с этим процом ему только нотпад++
я начинал изучать жабу на АМД Duron 850 МГц. Идея не тянула, поставил какую-то легкую редактировалку, которая могла запускать жабу. Ну норм
Вкратце: лучше делать проекты ide- независимыми и не полагаться на "магию". Возможно твои действия как раз и делают запись в pom.xml, но лучше понимать наверняка что ты делаешь
Ну и мне надо на хибер это перевести(только пока лист не дтошек, а самих сущностей) и я даже хз где я проебался. Он вместо списка сохраняет в только первый перевод.
То ли @OneToMany не так прописал, то ли что-то еще, то ли там что-то нужно типа joincolumn вместо mapped by. Прочитал. Еще одно-направленные, двунаправленные связи. Я чем дальше мурзилки читаю, тем дальше запутываюсь.
IDE вытянет спокойно. Запуск будет немнго притормаживать, но можно и потерпеть
У тебя нет постоянной высокой нагрузки. Есть маленькая, эпизодическая нагрузка. Хеловорды вытащит спокойно.
>Standalone, то есть состоящее из одного выполняемого компонента верхнего уровня
Хотелось бы услышать вашу интерпретацию данного определения.
Сложно.
Спасибо, буду знать
А как?
бамп вопросу.
Райффайзен? Имеют в виду, что нужен не war для деплоя в томкат, не библиотечный jar и т.п., а исполняемый файл. Обычный исполняемый jar, который cобирается спрингбутом.
Не до конца может понял, что ты хочешь, но ты что ли надеешься на то, что по mappedBy="transfer_id" (схуяли вообще transfer_id?) хибер сам догадается про джойн и по "from" и по "to"? Не будет такого, но можешь сделать две отдельный связи. И не ставь никогда FetchType.EAGER на подобные коллекции.
В mappedBy должна быть колонка владеющая отношением. В твоём случае, либо fromAccount, либо toAccount. Вместо transferHistory, тебе нужно два поля, каждый из которых связан с from и to соответственно. А при необходимости объединять списки на уровне самой джавы.
>>179675
Ну это понятно, что не ставить, а только когда нужен объект с вложенным списком. И в jdbc-ишном проекте в репозитории у меня было 2 метода:
Optional<Account> findById(Long id) с простым запросом. Optional<Account> findByIdWithTransfers(Long id) с экстрактором.
А как сделать второй с jpa?
>>179681
Я просто достаточно бездумно копипастнул код с мурзилки. Так пока и не разобрался в этих ваших связях.
Спасибо за совет. Сам думал о двух листах. Получилось вот так. Все работает. Но нельзя как то поизящнее с одним листом?
>а только когда нужен объект с вложенным списком
Вот именно, а с EAGER он у тебя будет всегда со списком, а не только когда он нужен.
>Получилось вот так. Все работает. Но нельзя как то поизящнее с одним листом
Ты не показал, что именно у тебя получилось, но ты подумай о том, что тебе не обязательно совершенно идти от account и доставать transfer как его связь. Можешь сделать запрос к transfer, где from_account или to_account равны тому, что тебе нужны. В реальной жизни как раз может оказаться так, что никакого смысле в такой коллекции у account нет, потому что тебе никогда не понадобятся сразу все transfer одного account, только с какими-то еще условиями, допустим с датой в определенном диапазоне.
Ну когда я себе этот проектик придумывал еще для изучения jdbc(сперва rawjdbc, потом jdbctemplate) там весь функционал -
первая страничка: список акков, потом создать аккаунт,
вторая сразу отображает всю инфу с сущности одного аккаунта, всю историю переводов, удалить аккаунт, перевести сумму.
И хотелось бы фронт и контроллеры вообще не менять.
Есть общий интерфейс репозиториев и 4 реализаций, хотел только имплементации репозиториев менять. Вот теперь еще два вида доменных моделей - jdbc-шная и хиберовская(по сути раньше у переводов были поля типа Long from_account_id, теперь Account from_account ).
>потому что тебе никогда не понадобятся сразу все transfer одного account, только с какими-то еще условиями
Мне нужен аккаунт с List<TransferDto> transferHistory(тот же transfer, но без айдишников). И раньше я аккаунт с листом дтошек прямо из базы дергал и ничего не меняя джейсоном отдавал на фронт. Теперь наверно два лист из настоящих трансферов придется в один лист дтошек где-нибудь в репозитории(по уму наверно в сервисе надо, но я уже написал себе контракт с интерфейсами AccountRepo и TransferRepo).
Для учебных задач, кажется мне, довольно глупый подход - "уже написал себе контракт", теперь вынужден с ним ебаться, но дело твое.
Вариант с двумя EAGER листами не очень хорош еще тем, что в результате получится такой селект с джойнами, у которого будет сильно раздутое, избыточное количество строк на выходе. Лучше либо делай два селекта - самого счета и его переводов - либо делай селект по переводам, от которых уже будет джойн к счетам. Счет будет заведомого один и тот же у всех, так что вытащишь нужный из любого перевода.
да я не хотел EAGER делать, мне он и не подходит. У меня будет запрос к аккаунту без листа переводов и потом с ним. Просто пока не понял, как с LAZY работать. Не увидел этого в мурзилке/не дочитал.
>Райффайзен?
Да, он самый :)
Тоже кинул заявку?
>Обычный исполняемый jar, который cобирается спрингбутом
В целом, я примерно о том же самом и подумал, спасибо за ответ. Только откуда инфа про спрингбут?
Было бы странно собирать стендалон jar'ник в именно в буте, вроде же вся его идея как раз в том, что он инкапсулирует в себе компоненты, в том числе контейнер/сервер embedded tomcat, и сам представляет собой некий верхнеуровневый "standalone", грубо говоря.
>Тоже кинул заявку
Нет, самому мне туда не надо (уже есть свои 600кк/нсек), но попадались на глаза эти их носки.
> откуда инфа про спрингбут
Ну а какие еще варианты, если это самый дефолт и мейнстрим, и если они сами пишут в задании, что желателен Spring(Boot) Framework.
>он инкапсулирует в себе компоненты
И вот именно поэтому результирующий джар и можно назвать standalone, все сходится
>Нет, самому мне туда не надо
Обознался, извиняюсь
>и если они сами пишут в задании, что желателен Spring(Boot) Framework.
А что за задание? Просто я довольно внимательно всё изучил, и нигде не увидел упоминания спринга, кроме стека команд хотя да, логично, что он будет. Если поделишься какой-то инфой по заданию - буду очень благодарен самому интересно быстрее глянуть, что там
>И вот именно поэтому результирующий джар и можно назвать standalone, все сходится
Действительно, ну я и херню сморозил, хотя выше сам себе ответил. В момент затупа почему-то подумал, что компоненты бута будут не в одном джарнике уже спать пора, походу
>А что за задание?
То, из которого ты взял эту формулировку про standalone. Если не из задания, значит, штош, я ошибся.
Я её взял из FAQ их телеграмм бота, пару дней назад.
Ну ладно, если у тебя какие-то конфиденциальные данные - то обойдусь.
Тысячи тон нефти тебе, анон. Я это, само собой, делал, но поисковик попался протухший.
Хочу чтобы писал
"bar.foo must be greater than or equal to 1"
А получаю
"bar.foo должно быть не меньше 1"
Есть энтерпрайзное говно на джаве. В рантайме энтерпрайзное говно сериализует объекты и складывает их в БД. Мне нужно из этих сериализованных объектов достать определенные атрибуты.
В либах энтерпрайзного говна мне удалось найти нужный объект и десериализовать его, но один атрибут достать не могу - геттер там хитровыебанный и выплевывает ошибку хотя сам атрибут инициализирован и в нем есть данные, это видно в дебаге - localSymbolTable.data
Подскажи, программач, могу я как-то достать нужный атрибут?
Либо рефлексией вытащить либо ручками разобрать сериализованый формат. Что там за формат кстати, джавовская сериализация или что-то еще?
В джаве я хуй простой, поэтому слабо понимаю о чем ты.
> Либо рефлексией вытащить
Это как-то так - https://stackoverflow.com/questions/1196192/how-to-read-the-value-of-a-private-field-from-a-different-class-in-java ?
> либо ручками разобрать сериализованый формат. Что там за формат кстати, джавовская сериализация или что-то еще?
В БД лежит byte array сжатый gzip.
На всякий десериализация в прикрепленном пике.
>Это как-то так
Да.
>В БД лежит byte array сжатый gzip.
>На всякий десериализация в прикрепленном пике.
Да, это джавовская дефолтная сериализация.
Есть ссылка на элемен(страницу) она работает если проходишь по пути,обнавляешь(ф5), она пустая.
В чем может быть проблема? Как решить.
В тестовом Datasource конфиге, если спринг. С помощью ApplicationContextInitializer в спринг Буте. Ну и база в тестконтейнерах
Если тест не может подключиться к базе, значит ему не хватает каких-то настроек бд? Для обычной бд есть класс applicatio.properties. Где искать аналог этих проперти для тестовой базы?
Зависит от того, как на проекте заведено.
Я их загоняю вместе со стартом тестконтейнера в ApplicationContextInitializer
Я нашел, просто не смог сообразить что приложение работает с двумя базами. А как обычно бывает на производстве? Вот закончил ты пилить логику проекта, и начинаешь хуярить тесты, сам их придумывая, и делая объем работы равный или больший нахуяренной логики?
Если повезет, и на проекте так заведено, то да. Лично я накидываю кучу работающего говна, покрываю тестами, а потом рефакторю это же говно с их помощью
в постгре можно хранить json и в запросах манипулировать атрибутами
Что-то типа того
City city = cityService.findByName(addressDto.getCity());
city.setCountry(countryDao.findByName(addressDto.getCountry()));
return Address.builder()
.id(addressDto.getId())
.city(city)
.index(addressDto.getIndex())
.street(addressDto.getStreet())
.house(addressDto.getHouse())
.build();
}
Как такую логику реализовать в мапстракте?
если инструмент приносит только проблемы и головную боль, то зачем кушать этот кактус?
>Может они такие же тупые
Вполне может быть. На самом деле инструмент действительно непростой, им нужно учиться пользоваться, понимать ограничения и подводные, затупы вполне естественны. И уже только когда хорошо разобрался и освоился, тогда и начинается какой-то от него профит.
когда научился скакать мимо расставленных граблей. Но всё-равно бывает наступаешь. Ради сомнительной выгодны
Я не знаю, я только начал. Может дело во мне.
Но же популярный. Почти все вакансии на спринговом стеке его требуют. Да и во всех мурзилках тоже про него.
>>180591
Может еще от размера схемы зависит? Вот я читаю мурзилку, переделываю ее. И тамошний пример на 3-4 табличке с jdbc сильно понятнее. Ну а сам я базы больше 15 табличек не видел никогда пока(из какого-то учебника по sql уже не начального, а среднего уровня) и мне уже было тяжеловато. А реальная база на джава-стеке это наверно от 50 и до нескольких сотен(я так предпологаю). Может там профиты?
ощущения ненужности sql не почувствовал. Вроде многое делается через jpql, который абстракция поверх sql.
Думаешь реально плохо знать sql и хорошо знать хибер?
> Может еще от размера схемы зависит
Зависит, да. Хелловорды с тремя таблицами вообще без разницы на чем писать. Профит от хибера ощущается на больших проектах, где много сущностей (таблиц) и много логики, которая ими манипулирует, и соответственно много простых и однотипных crud-запросов. Хибер позволяет не тратить свою жизнь на то, чтобы писать и поддерживать их руками. Но сначала нужно один раз вложиться в то, чтобы научиться обходить его грабли.
по-умолчанию везде Eager. С ним всё будет работать. Но медленно
>Вроде многое делается через jpql
круды можно без запросов лепить, через все эти merge, save
>Но сначала нужно один раз вложиться в то, чтобы научиться обходить его грабли.
Проблема в том, что грабли хибера обширны, а разработчики приходят и уходят. Причем проблема может вылезти в совершенно другом месте. Добавил в одном месте ленивое поле, а в другом пошла по бороде производительность из-за ломбоковского toString().
С чистым SQL ты хотя бы видишь запрос и что он грузит из базы. Никто лениво ничего не тянет. Если не делать select * то новые поля старые запросы не замедлят. SQL это хорошо, SQL это надежно.
как боженька расписал
Если в Java JDBC я сам получаю Connection'ы из DriverManager, которые потом могу засунуть в свой ConncetionPool, то как быть с DataSource в Spring JDBCTemplate? Темплейт сам принимает DataSource и делает у него getConnection.
1) Как тогда реализовать свой пул коннекшенов в JDBC Template? Тупо сделать пул DataSource'ов? Но ведь тогда все-равно каждый раз будут выполнятся новый getConnection у датасурса, что ломает всю идею предназначения пула, с постоянно открытыми конекшенами.
2) Нужно ли закрывать какие-то ресурсы за собой? Если да, то как? У DataSource и JDBCTemplate нет никаких методов close() и имплементации Autocloseable, судя по докам. Где происходит закрытие стейтментов и конекшенов в темплейтах?
https://easyjava.ru/data/pool/nastrojka-hikaricp/
все популярные пулы дают реализацию DataSource, ну и ты тоже наверно инкапсулируй все в свою реализацию.
Ну я понял, типа принято реализовать свой DataSource, связанный с пулом и который будет отдавать пул. Это понял.
Остался только вопрос с пониманием механизма закрытия ресурсов.
Документация, как и большая часть людской писанины, чаще всего содержит вводную часть - от 1 абзаца до пары страниц - объясняющую вкратце что это за велосипед. Полезно в том числе чтобы быстро дропнуть то, что тебе не нужно и идти дальше. Так что совет вполне дельный.
А если речь про конкретный функционал конкретного фреймворка, то вбиваешь в гугол фреймворкнейм и суть вопроса. Тебя выкинет на документацию к фреймворку напрямую или через со, я гарантирую это. Читать документацию целиком полезно, но при наличии норм ревью кода необязательно. А частоиспользуемые фичи сами запомнятся.
Сами template, как я понял, потокобезопасны из коробки.
Принято ли реализовать свои read/writeнапример, с помощью ReentrantReadWriteLock блокировки? Либо, для операций на запись, всё делают на транзакциях, с выставлением нужного Isolation level?
В случаях с использованием одних лишь транзакций на запись, по идее, можно получить сайд-эффекты в виде неактуальных селектов, до тех пор, пока не пройдёт транзакция на запись. Такое вообще допустимо?
Прилетело мне, например, сообщение с Кафки с ошибочным полем, сообщение в БД не записали и залогировали ошибку о том, что такое-то поле не удовлетворяет каким-то там условиям. По логике же это WARN, я правильно понимаю?
В мою пользу еще сентри, например, ругается на error – говорит, что это ошибка и ее надо исправлять как-то.
В последних абзацах есть немного о практиках построения. Коротко говоря, транзакции разумнее размещать в слое логики.
Насчёт блокировок и сайд-эффектов - вопрос ещё открытый.
>другая веб сервер к которому надо прикрутить поля и кнопку. Что использовать, чтобы опыт использование потом пригодился (жс не осилю, я дибил)
Eсли это EE на сервлетах, то можешь в через request/response передавать и принимать атрибуты на JSP-страницах. Для спринга, можно дописать контроллер, который будет мапить модель на JSP-страницу.
Правда, вряд ли тебе сейчас где-то опыт работы с JSP пригодиться. Но это самый простой и легкий вариант.
Консольное приложение я бы тоже разобрал веб-контроллерами обмазал тупо, а дальше по схеме выше.
Самый простой способ - использовать на спринге шаблонизатор типа thymeleaf. Его освоить за пару часов можно, но опыт не пригодится.
Пригодится ангуляр, но это не пару часов, а пару дней (для твоей задачи) и вообще дикий оверхед для одной кнопки. Вью тоже не намного проще.
Осиль голый жс. Он простой(мне показался проще фримаркера/таймлифа), для кнопки его достаточно и может много где пригодиться.
Можешь просто погуглить, как сделать таблицу на жс и кнопку с рест запросами через fetch. Думаю за вечер прочитав один-два примера разберешься.
>>создавая по одной
Ты создаешь новую роль? зачем тебе айди из дто тогда? Или ты достаешь роль по айди из базы, а не создаешь?
В общем в мапере юзера добавь аннотацию @Mapper(uses = {MapperUtil.class})
над методом toEntity(user, roles) поставь аннотацию
@Mapping(target = "roles", source = "roles", qualifiedByName = {"getRolesFromDto"})
MapperUtil.class - это класс где есть метод getRolesFromDto() который принимает дто, возвращает роли (как он их создает/достает - тебе виднее)
Но я бы просто в мапер передавал готовые роли, которые предварительно достал/создал, тогда все эти аннотации ни к чему.
List <Role> roles = dto.getIds.stream().map(id -> this.createRole(id)).collect(Collectors.toSet);
createRole(Long id) - это например приватный метод в этом же классе который создает/достает роль по айди.
Я другой анон и хочу перестать просто изучать и нацелиться на работу. Раньше учил так(учебники, онлайн-тренажеры, ютуб, видеокурсы с торрентов), для развлечения скорее.
Вот думаю может денег занять и ментора нанять. Что ты думаешь по этому поводу анон? И сколько это может стоить?
Открываю какую-то биржу менторов из гугла и там 2.5-4к за час. Биржи эти адекватные и адекватна ли цена? Ну часов 20-30 мне нужно наверно.
Ну вот я бы у него попросил проинтервьюировать меня, найти слабое в джавакоре и дать направление, как и что учить из фреймворков, а то в них конца и края не видно, даже в основных. Ну и проектик помочь наметить и проверить потом раза 2.
Ну это 100к надо.
В ArrayList ты не можешь записать int, только Integer, думаю тут ещё оверхедиков добавилось.
Потом когда ты его наполняешь - он каждый раз создаёт новый с размером ~1.5 когда заполняется до края, соответственно старый в мусор.
Я не создаю роль, она в базе. Можно подробнее про , qualifiedByName = {"getRolesFromDto"})
и
MapperUtil.class?
Я этот класс должен сам написать? Может есть пример какой?
>>MapperUtil.class?
>>Я этот класс должен сам написать?
Да это самый обычный класс, ты его в маппере указываешь, чтоб к его методам можно было обращаться. Назвать можешь как угодно.
Но конкретно под твою задачу - проще все же достать из базы роли в сервисе и добавить их к уже преобразованному юзеру, а не пытаться воткнуть логику в мапер.
Маппер должен выполнять одну роль - преобразование энтити в дто и обратно.
Вариант с reflection api не сработал - при попытке сделать
Field f = rootBPDExecutionTreeNode.getClass().getDeclaredField("localSymbolTable");
получаю исключение:
java.lang.NoSuchFieldException: localSymbolTable
Хотя поле в классе есть.
ЧЯДНТ, анон?
Скорее всего это поле объявлено не в этом классе, а в его предке.
https://pastebin.com/iUwMVViL
Error - что-то явно работает неправильно, нужно заводить тикет и исправлять. Warn допустимо, но требует повышенного внимания к событию.
в char[][] {{'1', '0', 'X'},{'0', '1', '?'},{'0', '0', '0'}} ?
У меня ничиво не получаицца, я чет путаюсь в трех соснах
Stream.of("1 0 X\n0 1 ?\n0 0 0".split("\\n")).map(String::toCharArray).toArray(char[][]::new);
но ведь надо еще split(" ") а потом String[] преобразовать в char
вот моя нерабочая версия
String[] rows=board.split("\n");
return Arrays.stream(rows)
.map(i->Arrays.stream(i.split(" ")).map(t->t.charAt(0)).toArray())
.toArray(s->new char[rows.length][s/ rows.length]);
так, ну вот с Chatacter[][] получилось, как char[][] сделать
String[] rows = board.split("\n");
return Arrays.stream(rows)
.map(i -> Stream.of(i.split(" ")).map(t -> t.charAt(0)).toArray(Character[]::new))
.toArray(s -> new Character[rows.length][]);
Можно сконкатенировать все и перегнать в char[]
Stream.of("1 0 X\n0 1 ?\n0 0 0".split("\\n"))
.map(s -> String.join("", s.split("\\s+")).toCharArray())
.toArray(char[][]::new);
Не понял. А разве на уровне интерфейса базы данных есть какой то отдельный синтаксис для транзакций кроме:
BEGIN;
INSERT INTO accounts(name,balance)
VALUES('Alice',10000);
COMMIT;
Или он начинает транзакции на уровне базы но не через интерфейс бд, такие команды как BEGIN?
>разве на уровне интерфейса базы данных есть какой то отдельный синтаксис
Да, на уровне jdbc вообще есть много всякого, чего ты не увидишь в "синтаксисе" текстового терминала. PreparedStatement, батчи...
Но я был уверен, что при препейред стейтмент на уровне джавы выполняется и подставляет там значения с проверкой. А базе отдает уже готовые строчки запросов.
Короче я ещё сильнее нихуя не понимаю, чем до того, как задал вопрос.
>А разве на уровне интерфейса базы данных есть какой то отдельный синтаксис для транзакций кроме:
Все сильно зависит от базы. Обычно если ты выполняешь некий DML у тебя автоматом начинается транзакция её не нужно явно стартовать. Можно начать явно START TRANSACTION. В некоторых базах есть READONLY TRANSACTIONS, которые стартуют на любой SELECT. А еще есть savepoint, если произойдет ошибка, то транзакция откатится только до savepoint.
>>182935
>Но я был уверен, что при препейред стейтмент на уровне джавы выполняется и подставляет там значения с проверкой. А базе отдает уже готовые строчки запросов.
Зависит от драйвера и СУБД, но обычно в современных СУБД он отдает выражение с подстановочными параметрами и сами параметры отдельно. Это нужно для улучшения перформанса.
java.lang.NullPointerException: Cannot invoke "org.springframework.test.web.servlet.MockMvc.perform(org.springframework.test.web.servlet.RequestBuilder)" because "this.mockMvc" is null
Само тело теста, что в нем не правильно?
this.mockMvc.perform(post("/page/add")
.content(objectMapper.writeValueAsString(category))
.contentType(MediaType.APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk())
.andReturn();
Не помогло
Вроде есть я наследуюсь от абстрактного класса вот с такими аннотациями.
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
classes = ProjectApplication.class)
@ExtendWith(SpringExtension.class)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@AutoConfigureTestEntityManager
@AutoConfigureMockMvc
@DBRider
@DBUnit(caseSensitiveTableNames = true, allowEmptyFields = true, schema = "test_base")
Плюс в своем Автоварю MockMvc
Ну вроде как должно работать. Может быть DEFINED_PORT не работает с автоконфигурацией мок мвс. Попробуй ручками собрать
Проблема, кажется, решена. В поиске по Maven-репозиториям в окне Project Structure->Project Settings->Libraries можно добавлять в проект библиотеки из этих репозиториев. Моя проблема была в том, что там не высвечивались новые версии библиотек. Но я решил её так: File->Settings->Build, Execution, Deployment->Compiler->Java Compiler->Per-module bytecode version сменить на последний (у меня вообще стоял 1.5, и я этого не замечал)
Бля нахуй ты сочиняешь эти пол года по 8 часов, это не нормально и так никто не учится. Да и главным все равно будет качество а не кол-во.
Похоже что стили он ищет в /views/styles. Попробуй поменять путь на ../styles/style.css
у тебя тут на первом скрине есть окошко с браузерами что бы открыть вью, по ней тоже белое открывается? попробуй полный путь прописать.
Тоже , уже наверное все попробовал. Пытаюсь этот метод переопределить , но тоже бестолку. Не понимаю относительно чего этот метод определяет директорию ресурсов. Кто то пишет что все должно лежать в папке resources , кто пишет что эта папка должна быть в webapp.
когда я делал без бута, все лежало в вебапп и через мавен можно было дерикторию менять, если не выбирать web при иницилизации проекта. а буте все лежит в ресурсах да.
дак я не юзаю бут. Но при инициализации веб выбрал , при том что thymleafe все формы сука обрабатывает , а конкретно стили не хочет подтягивать.
>Оно правда не использует thymeleaf
Только не говори, что тебе кажется, будто thymeleaf отвечает за применение стилей к странице
У нас базы на докере
>написано один раз - запускается везде, просто блять божья роса эта жава машина
Пиздежь. Вот докер это точно обеспечивает.
В конце 20го века докеров не было + маркетинговый ход: наша жава везде крутится, в отличие от вашего ЯЗЫК_НЕЙМ.
А докер - вещь хорошая. Тебе даже не надо жвм ставить. Собрал контейнер, и все работает
>>что написано один раз - запускается везде
Там имеют ввиду, что код на джаве в принципе можно и на винде и на маке запустить, в отличие от плюсов. Это не значит, что в процессе не придется ебаться с установкой жвм, мавена, БД.
JVM и Docker решают разные проблемы.
JVM решает проблему переносимости кода между разными ОС и процессорами. Ты можешь разрабатывать приложение на MacOS ARM, а запускать на Linux x64.
Docker решает проблему единого окружения для запуска приложения. И плюс виртуализация.
Вопрос такой: можно ли ResultSet, как-то разобрать на массивы сразу поатрибутно, а не дрочиться с пойнтером? Например, мне приходит набор из десяти записей, у каждой из которых пусть три атрибута. Я вызываю что-то вроде getIntAttrArray(1) и получаю сразу готовый массив int[], в котором 10 элементов. А еще лучше массив массивов сразу со всеми ячейками.
Впрочем, можете нахуй послать, потому что написать такое самому раз плюнуть, но может есть че готовое.
JdbcUtils
Потому что ты ебонавт.
Ему дали дебаггер, но нет, он лучше будет жрать говно на двачах
Твое условие никогда не станет false, ты забываешь обновлять inputNumber и оно у тебя всегда заходит в проверку одинаковым.
slf4j
Двачую
мне так не кажется, но в примерах откуда я инфу смотрел работало с ним. У меня ток без него, не выкупаю почему
Я просто сижу гадаю, чё там должно прилететь. И подставляю всё подряд что есть в этом перформе - isForbidden, isBadGateway, isBadRequest... Это и есть тестирование? Я должен угадать?
Не пиши параметры в урле.
.delete("delete").param("id", id)
И эндпоинт кривой какой-то. Лучше будет DELETE /users/{id}
Потому что при get параметры запроса в урле, с делит так не работает
>>185455
https://stackoverflow.com/questions/17972428/mock-mvc-add-request-parameter-to-test
ну хмл, так хмл
А что такое sessionAttr? И где брать userClientObject? Я ничего подобного в контроллере не использую. У меня return ResponseEntity.ok().build(). А без этого не работает, всё подчеркнуто красным.
Посоны, такой вопрос. Есть жабовый бэк (аутентификация, роле бэйсед доступ, логирование, вся хуйня). Хочу прикрутить к нему фронтецкий.
Что взять? Я не хочу изучать ни JS дрысню, ни ios/android. Помимо vaadin есть что годное?
Переписывай на .net + blazor (cutting edge стек бтв)
После мурзилок ощущение что знаю только малую толику инструмента и шаг вправо-влево можно наткнуться не просто на новые классы и методы, а на какие-то новые концепции, о которых после мурзилки не подозревал.
Если фронта мало - тимлиф, если много - учи жс.
Насколько сложно будет замутить рестуху на свинге?
>>175341
В Москве не имеет смысла искать работу джава джуна или стажера на хх. Тем более, что на хх очень часто встречаются фейковые вакансии, которые не закрываются годами.
Нужно заходить на сайты энтерпрайзных контор (сбер, телекомы, всякие галеры вроде нетсракера, ебама, ланита, крока, и прочей параши) отправлять им резюме и ждать результата. Хедхантер уже морально устарел. Спецы с минимальным опытом на линкедине находятся, джунам нужно искать вакансии вручную.
В сбер часто берут любых дегенератов, чем вам не айти? Правда потом тяжело будет на другую работу перекатиться.
>Что взять?
HTML + tymeleaf + CSS (опционально).
Но JS так или иначе на минимальном уровне придется выучить для фронта рано или поздно.
Двачую.
Лично я полгода назад задавался тем же вопросом.
Неделю сидел над таймоифом, потом еще дня три над фримаркером, что-то не пошло. Потом решился и чуть больше чем за месяц прошел основную часть жс (сам жс, дом, работа с аджаксом) и даже кое-что лишнее. Без лишнего за 2 недели часов по 15 в неделю реально весь нужный жс пройти.
Пацаны говорят, что он просто копипастит официальное руководство разбавляя его графоманией и говнокодом.
Говорял, что Хорстман чоткий пацан. Нечётким пацанам "Чемпиона по Java" не дают.
https://blogs.oracle.com/java/post/new-java-champions-holly-cummins-aleksey-shipilev-and-david-heffelfinger
>Java Champions: Holly Cummins, Aleksey Shipilev, and David Heffelfinger
Типа сан-оракл дают медальки за заслуги известным членам сообщества?
Чтобы у меня получилось корректная thread-safe конфигурация, я должен шарить один экземпляр DataSource между всеми темплейтами? Или лучше сделать его статическим бином?
Зачем так сделано?
А на галеру без вышки берут?
>Но тогда это удаление проебывается в кеше
Ты про кэш сессии? Если в нем что-то проебывается, значит, сущность в нем уже есть, значит, можно ее удалять, не опасаясь лишнего селекта.
Про кеш фабрики сессий, т.е. второго уровня. Или он по другому взаимодействует с hql ?
Ну и вообще почему нет метода у сессии с удалением по ид? Там какой то сакральный смысл?
>второго уровня
Ничего в нем не проебывается при удалениях/апдейтах через hql
>почему нет метода у сессии с удалением по ид
Вот такой дизайн. Если хочешь кидать как бы запросы напрямую в бд, подобно голому sql, пишешь запросы. Не хочешь - работаешь с сущностями, где применяется все это отслеживание состояний, кэш сессии и прочее. Удаление по id не является каким-то особым важным случаем, чтобы для него делать исключение.
>В хибере можно удалить сущность по ид только через hql?
> void delete(Object object) throws HibernateException
> Remove a persistent instance from the datastore. The argument may be an instance associated with the receiving Session or a transient instance with an identifier associated with existing persistent state.
Создаешь пустой энтити, сетишь айди и удаляешь.
Кроме изменения сигнатуры на doSmth(A a) + апкаста внутри метода
>Это можно как-то адекватно реализовать?
Нет, потому что ты пытаешься сделать нелегальную операцию. Вот пример, ты в B2 пытаешься передать не A2 который он поддерживает, а A1.
https://pastebin.com/srQ1wVJW
Более того, если у тебя есть метод с параметром <T> и в объявлении T указан как <? extends ...> то ты такой метод вообще ни с каким аргументов вызвать не сможешь.
Да, я это прекрасно понимаю. Вопрос был в том, чтобы сделать это красиво. Сейчас я проверяю класс и кащу до нужного. Появляется простыня из ифок/свитч. Хотелось бы автовайрить List<? extends B>, и строить мапу: класс А - объект B, но так не работает из-за того, что у меня "? extends"
Про пикрил Брайан Гоец пишет, что это антипаттерн, потому что "possible for a thread to see a partially constructed Resource".
Как получить этот partially constructed Resource? Как я ни ебался, так у меня ничего и не вышло. new Resource() блокирует, пока объект не будет до конца создан.
К тому же Гоец сам потом добавляет, что если добавить volatile к resource, то всё становится ок. Каким образом изменение переменной на волатильную предотвратило бы partially constructed Resource?
Шипилёв тоже пишет, что с DCL всё в порядке, если переменная volatile (https://shipilev.net/blog/2014/safe-public-construction/).
Так как же получить не до конца построенный объект, которым пугает Гоец?
>Появляется простыня из ифок/свитч. Хотелось бы автовайрить List<? extends B>, и строить мапу: класс А - объект B, но так не работает из-за того, что у меня "? extends"
Засунь это все внутрь базового класса. https://pastebin.com/1uHyY3gq
>удаление по ид достаточно частый случай, как мне кажется
Такое, чтобы откуда-то извне прилетел id, и ты, не глядя, кидаешь в бд для него delete, это только в простом случае прокатит. А довольно часто, действительно сначала нужно посмотреть на запись, которую удаляешь. Например, чтобы проверить, имеет ли право юзер удалять именно вот эту вещь. Или чтобы записать в лог/аудит, что удаляем вот такую херню, у которой были вот такие параметры. И тогда получается, что нет смысла плакать о "лишнем" селекте.
А если все же нужен именно строго один delete, не такая большая проблема написать пару строк с hql.
Задание такое.
Я сделал просто вывод среднего. list.stream
.mapToDouble(emp–> emp.getSalary())
А как это в сравнение засунуть я хз
Ну вообще тот анон прав, в два прохода только можно.
var averageSalary = people.stream().mapToDouble(Person::getSalary).average().orElseThrow();
var middleClass = people.stream().filter(person -> person.getSalary() > averageSalary).collect(toList());
Можете посоветовать видосы по spring/hibernate с условиями:
1. Хорошее произношение. Индусы не подойдут.
2. Компетентные. Не инфоцигане.
3. Свежие видосы по свежим версиям технологий.
Опционально, но желательны неавтогенерируемые субтитры на английском.
Пока вроде одного нашел, подходящего по 1 и 3 пунктам.
https://www.youtube.com/watch?v=8SGI_XS5OPw
Но насчет компетентности не уверен пока. Он норм?
>В один тоже можно, через NavigableMap.
Там сложность O(n*log(n)) + память O(n), уж лучше 2 прохода.
Так это же мы возьмем всех, кто выше медианной, а не средней. Или я неправильно понял, что ты хочешь сделать?
За один проход считаем среднее и складываем в мапу. А затем берем из мапы все, что выше среднего.
>За один проход считаем среднее и складываем в мапу.
>один проход
>складываем в мапу
>в мапу
Проиграл с этого computer scientist-а.
У тебя поди и поиск медианы через Arrays.sort() + array[mid] будет константной.
Ты берешь values() и складываешь в лист
>>Он норм?
Разве можети нигга мусульманин научить плохому?
2 и 3
Индус с хорошим звуком и почти нормальным произношением (единственный на весь ютюб) https://www.youtube.com/watch?v=I0poT4UxFxE
1 и 3
Инфоцыган с юдеми, но объясняет просто и понятно, с картинками. На торрентах его очень много.
https://www.youtube.com/watch?v=pTFZFxd4hOI
Ну а вообще смотри в сторону юдеми - там полно курсов хорошего качества на английском. Лучшие выложены на торрентах. Сабы там тоже у многих есть.
Нет, но я могу за несколько минут её выгрузить, прогнать через скрипт и загрузить в эксель.
В общем, имеется сайт с паролем, для чека пароля используется проверка в виде правила регулярного выражения :
/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{1,5}|[0-9]{1,3})(\]?)$/
Можно ли исходя из этого выражения самостоятельно генерировать пароли ? Если да, то как ? Спасибо заранее за ответ!
>/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{1,5}|[0-9]{1,3})(\]?)$/
Жесть, почему вместо явных диапазонов не стоят буквы, типа \d для цифр?
И что значит >для чека пароля ?
Ну и как же он работает? Вот залезь в исходники и покажи мне второй проход там внутри.
>visual basic +1.27%
>classic visual basic +1.06%
>go +0.13%
Да и почему питухон в топе, а жса/пхп втрое меньше чем плюсов?
>Ну и как же он работает?
>Inserting a value in Red Black tree takes O(log N) time complexity and O(N) space complexity.
А поскольку вставок N, то будет O(N log N).
Ты дурачок думаешь, что если ты сам проитерировался один раз, то у тебя однопроходный алгоритм. И не понимаешь, что под капотом дерево дает тебе большую сложность, чем 2 раза пройтись по массиву.
>Внутри tailMap дополнительных проходов нет, твердо и четко.
В глаза порешься?
>>188449
>>Inserting a value in Red Black tree takes O(log N) time complexity and O(N) space complexity.
>А поскольку вставок N, то будет O(N log N).
Где тут про tailMap? Тут про map.compute() в цикле.
Да и tailMap имеет сложность совсем не константную, но на фону map.compute() это уже мелочи.
Питухон сейчас на первом месте по запросам. Студенты, школьники,
хайп датасайнса и етц делают своё дело. Бейсик - мб ретро вейв(соскучились люди по говну).
Похуй, все равно никто такой хуйней заниматься не будет.
классика
почитай про мавен, возьми шаблонный пустой мавен проект. В идее есть интеграция с мавеном, оно будет подтягивать все либы
>Нужно скачивать жарку с либой и подключать руками
Но я не знаю где взять ее просто в виде жарки. Есть только ссылка мавен.
>В идее есть интеграция с мавеном, оно будет подтягивать все либы
Конечно будет, только у меня сугубо плохой опыт пытаться навернуть мавен на уже готовый большой рабочий проект. Из-за моей рукожопости и слабого знания темы, конечно, а не из-за самого мавена. Но все же рисковать не хочу.
Возможно, ты имел ввиду создать пустой проект, выкачать туда нужные либы, и потом найти их физически на диске и спереть в целевой проект. Если так, то звучит довольно реализуемо, спасибо.
На mvnrepository можно скачать жарку
У меня проблема, есть строка, типа:
"""00000000: 1d c4 15 25 91 e6 09 59 04 99 15 29 0a 45 21 29 ...%...Y...).E!)
00000010: 26 8e 74 a0 1a be 75 68 06 dd 70 33 a4 77 7a 5d &.t...uh..p3.wz]
00000020: b1 ba 22 a7 cf cc f7 ef b1 e3 13 ed f1 89 ad ad .."............."""
И нужно перевести двузначные шестнадцатеричные числа в byte[]. Я составил регулярку, которой соответствует каждое число: " ([0-9a-f]{2})" Есть ли такой метод в классе String или Matсher, чтобы в него передать такую регулярку, и она выдаст {"1d", "c4", "15", ..., "89", "ad", "ad"}? Типа, найти первую пос-ть символов, соответствующую регулярке: " 1d". Сохранить группу: "1d". И так далее.
Может я конечно дебил, но почему просто не сплитануть это все с использованием пробела, и не отсеять мусор по принципу if(arr.length != 2){мусор}?
Отличная идея, спасиба! ^-^
Вот не зря же говорят, что одна голова хорошо, а две лучше)))
Всё же свежий взгляд на проблему важен :D
А вот я уверен, что это вывод рандомного hex-редактора и можно скармливать проге на джава не вывод, а ввод этого редактора.
Это задачка из codewars, там нужно реализовать две функции: массив байтов -> такой текст и наоборот.
нет. Пустой проект, где в корне есть pom.xml файл. Открываешь проект в идее, открываешь вкладку с интеграцией с мавеном, нажимаешь кнопку "обновить", и оно выкачивает все либы автоматически
Зато со стримами сочно поебался
Единственный минус это не очень нужный свинг(гл.11 т.1), но без понимания свинга будет сложно с примерами кода из других тем, например из многопоточки(гл.12 т.1), потому что там код с участием свинга.
Если совсем зеленый, как был я, когда начинал читать, то смело пропускай:
- жаба fx(гл.13 т.1)
- модули(гл.9 т.2)
- и еще свинг(гл. 13 т. 2)
Это это не нужно почти всем.
Опционально:
- знакомство со свингом(гл.11 т.1)
- работа с хмл из голой жабы(гл.3 т.2)
- интернационализация(гл.7 т.2)
- безопасность(гл.8 т.2)
- платформенно-ориентированные методы(гл.12 т.2).
Остальное мастхев, хотя в некоторых главах тоже не особо нужные подпункты.
А что нужен оказался? Ну можно попасть в те пару процентов мест, где он нужен. Тогда и доучить можно. Там вроде ничего сложного, просто объемно достаточно для необязательной темы и муторно.
>Если совсем зеленый
Я после долгого переыва решил вернуться к своему проекту, который на самом деле как лоскутное одеяло состоит из спижженых кусков кода с разных сайтов. Как итог костыль на костыле и жором ОЗУ и ресурсов ЦП. Удивительно что вообще работает. Сейчас хочется системное понимание этой вашей жабы получить, чтобы переписать код в труъ рабочее состояние. Сам работаю прогером 1С, принимаю соболезнования.
Хз, считать меня зеленым или нет. Наверное буду читать всё.
Там крутых советов по перфомансу нету все равно, про кишки тоже. Там основы.
Да и для префоманса, мне как челику тоже плохо разбирающемуся кажется нужно знать не язык, а комьютер саенс. Алгосы, архетиктура пк и операционки.
К тому же на основе хорстмана ты ничего особо не напишешь. Чтобы написать что-то дельное, нужно читать много отдельных книг и кучу статей и документации. Причем объемом, как 10 Хорстманов.
Голая джава мне кажется очень мало что умеет. Жс или питон из коробки сильно больше дают на мой взгляд.
Что за проект?
Тоже сегодня начал тему jpa уже со спрингом, до этого с хмлками играл без спринга. Тоже не сразу смог настроить.
Не вижу у тебя @ComponentScan
Задача:
Мне нужно сделать некоторое логирование работы класса. Поскольку опыта с логгерами у меня нет, пока что это будет простой FileWriter. Так вот, я его создаю в точке запуска программы, и мне надо как-то его связать с логируемым классом. Сам класс, само собой, написан до решения что-то логировать, и высирает просто эксепшены, и иногда что-то в конслоль.
Я вижу два решения:
1)Включить в логируемый класс объект FileWriter как дополнительный член, и передавать его туда конструктором или просто через public-доступность для внешнего кода. В этом меня смущает, что этот сраный Writer не имеет отношения к бизнес-логике, и выглядит там чужеродным мусором.
2) В запускаемый класс (держащий main) включить его как публичное static поле, тогда его можно будет легко дергать из любого места в коде. В таком подходе смущает, что нельзя будет создать несколько логгеров, да и вообще статик поля периодически подбрасывают проблем когда-то в неизвестном будущем.
Что из этого лучше? Как вообще делают нормальные люди?
>Как вообще делают нормальные люди?
Аоп. Но для этого нужна какая-никакая инфраструктура в приложении, может тебе это будет оверкилл и проще действительно руками вкрутить.
А для чего он нужен в конфиге JPA ? Ты так пометил где у тебя интерфейсы репозиторий лежат ? Просто я в гайдах встречал @EnableJpaRepositories , но с это аннотацией у меня конфиг вообще не запускается.
Покажи еще зависисмости. Ты кроме хибернет-кор и data-jpa что-нибудь подключал ?
Ну да. РЕПО Этож бины. Их же надо откуда то брать. Хотя если у тебя Бут с его классом main, то там над ним в одной из аннотаций есть автосканилка бинов. У меня просто модельки, репо, тестик и конфиг.
До Бута я и спрингдаты ещё не дошел. Но когда смотрел видосы с практикой, читал спрингинэкш там вообще как то без конфигов на самых простых крудах все работает. Пока выглядит, как магия.
Нет конечно, ведь я не ломбокоблядь.
import somefolder.Outer.Inner; - работает
import Outer.Inner; - не работает, "package Outer does not exist", хотя папки я соблюдаю.
Как импортировать внутренний класс, не помещая ради этого всё в пакет?
Так у меня там вообще нет пакетов, и ни в одном из классов нет строки package.
Попробуй сделать импорт внутреннего класса без использования пакетов, нихуя не выходит.
В общем с учетом добавления аннотации @EnableJpaRepositories(basePackages = {"proj"}) твой конфиг рабочий. Только я не понимаю зачем у тебя написано factoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()) , если ты уже создал бин который создает этот адаптер и логичнее было бы вписать jpaVendorAdapter(). или я чего то не понимаю
Ну в той книжке без бута большая часть. Единственный большой минус книжки, что там не просто градл, а древняя его версия 2017 года. В новых туториалах хеловордах более свежий градл поприятнее.
>>190640
Это опечатка книжки походу. Я потом убрал это.
Я погуглил. Твоя аннотация нужна для работы через интерфейсы наследуемые от crud repository, а я пока не дошел до спринг дата жпа. И пользуюсь синтаксисом обычного jpa. И там достаточно компонент скана.
Раньше тоже смотрел. Типерь думаю зря. Все эти постбин аннотейшн процессоры ищ головы вылетели, ибо тоже нулевыц как и ты. Если зашло, что что мешает всего Борисова посмотреть? У него как минимум спринг Бут и спринг дата есть.
Ну короче сегодня решил сдаться. Ну от springdatajdbc я отказался раньше, ибо меня тут убедили, что это ненужная технология.
А вот на реализации rawjpa я понял, что объектная модель jdbc и в jpa разная. В пером ссылка через лонг айдишников, во втором через экземпляр объекта на который ссылаются. Можно было сразу догадаться.
Попробовал короче сделать модели с наследованием от интерфейса, в котором реализация геттеров/сеттеров всего, кроме различающихся полей. Там поколхозил с явным даункастингом и тесты заработали.
А вот с сериализацией через jackson на фронт проблема хз насколько решаемая. Вроде можно настроить jackson на несколько реализаций (но я не уверен, что смогу), но выглядит уж совсем еботней ради еботни.
Буду мутить второй проект с raw jpa + springdatajpa. Но хотелось бы на той же базе. Как настроить jpa/hibernate на уже готовую базу, тем более, что хибер в тестовой базе мне генерирует в постгрессе не всегда такие же типы, что я себе сам написал? Или это очередная глупая идея?
Да, это так. И еще слишком бездумно распечатывают листнинги, с повторениями, многое не нужно, причем все равно часть кода не распечатывают и без кода перед глазами не все ясно. Я думал там пиздец толмуд 1100 страниц, если вырезать листинги будет 500, если их грамотно редактануть и убрать лишние куски листингов будет страниц 900.
То есть по факту книга очень поверхностная оказалась для реального объема текста на 500 страниц и охвата тем.
Ну а что смешного? Сперва чистый спринг, потом с бутом. Я и книжечку скачал на русском.
Круды свои ксати пишу с бутом.
Иногда подрубаю стартеры бутовские, а пишу с обычными спринговскими контекстами и конфигами.
Я так то смотрел несколько курсов с практикой на буте, спринг дате и прочитал половину spring in action. Магия какая то. В общих чертах ясно что и для чего. Переделать чужие программы под себя я могу. А если с нуля писать для меня магия. По баелдунгам тоже как то очень обрывочно все понимаешь. Там темы в кучу, их миллион и не ясно, какая базовая, а какая для специфических случаев.
EE я бы тоже хотел подучить. Но ссыканул. Потом заточу какую-нибудь книжку. В одном ряду с Java Concurrency in Practice.
Можно поподробнее? Типа мне надо написать круд в стиле стековерфлоу девелопмент, не зная что вообще творится под капотом, походу пройти баелдунгов по самым самым непонятным встречающимся темам, задрочить топ100 вопросов к собесам на джуна и через месяц идти по собесам?
Бля, это стрессово очень. Хочу размеренно учиться. Работа она ведь в лес не убежит.
Так мне и так 30 лет. Какая разница работодателю приду я к нему в 30 или в 32? Я и так в конце списка. Так хоть получше подучу.
>Ну от springdatajdbc я отказался раньше, ибо меня тут убедили, что это ненужная технология
Зря отказался. Напиздели.
>Или это очередная глупая идея?
Наоборот, в коммерческих задачах никто не генерирует скрипты для базы хибером. Вообще базу делает разработчики баз данных, а не бэкендеры, а ты получаешь готовую схему.
Поэтому учись настраивать хибер на уже готовой схеме.
>которые пытаются учить спринг без спринг бута?
Сам в томкат задеплоить своё говно и пару бинов ручками прописать не можешь, что ли?
Ну я про springdatajdbc не только тут почитал, о ней везде неоче отзываются и вакухах ее нету.
Ну хз, анон, как знаешь. Я обратную инфу в треде читал, от местных, когда такие вопросы заходили. Просто не уверен, что ORM-подход прям в 100% случаев используют. В вакухах я вообще редко видел, чтобы какие-то компоненты спринга перечисляли. Обычно просто обобщают в что-то типа "знание Spring".
Так если ты не тролишь, расскажи чем эта спринговская недоорм, как я видел в нескольких местах ее называют хороша. Может ее чисто по кайфу поучу, а не ради вакух.
А про компоненты часто вижу boot, mvc, datajpa, иногда security. И это только в джуновских. В мидловских еще 3-4 подфреймворка могут упомянуть.
>Так если ты не тролишь
Конкретно итт троллингом не занимаюсь, пишу серьёзно.
>расскажи чем эта спринговская недоорм, как я видел в нескольких местах ее называют
Я не могу назвать себя опытным в java-бэке, но мне кажется, если "её" Spring JDBC так называют, то, скорее всего, уже не совсем понимают, о чём речь идёт.
ORM - это объектно-реляционное отображение. Например, ты подключаешь хибер, и он сам тебе вычитывает из твоей реляционной базы данных сразу готовые объекты - часть работы делают за тебя.
Spring JDBC - это всего лишь удобная надстройка над Java JDBC. Грубо говоря, это стандартный API, который позволяет получать доступ к БД и производить взаимодействия с ней. Там ты вручную пишешь Statement'ы В Spring JDBC - темплейты, где прописываешь обычные SQL-запросы, и на них получаешь набор ответов, как бы указатели на строки и колонки таблицы - ResultSet в Spring JDBC можешь получать объекты через имплементацию RowMapper. То есть в случае с JDBC, ты просто прогаешь SQL-запросы и получаешь результаты их выполнения. А вот построение объектов из них - это уже твоя задача в DAO-слое.
То есть, этот подход как бы на один уровень абстракции ниже, чем ORM-подход. Их нельзя сравнивать между собой, на мой взгляд.
чел, springjdbc это и есть jdbctemplate(точнее jdbctemplate это самое используемое из springjdbc). Это я уже прошел. Поиграл с роумапперами и экстракторами. Прикольно.
Я имел ввиду springdatajdbc.
https://docs.spring.io/spring-data/jdbc/docs/2.2.5/reference/html/#reference
https://habr.com/ru/post/423697/
Это новый подфреймворк подфреймворка по сути надстройка над jdbctemplate, чтобы апиха репо-слоя выглядела, как у springdata.
>Я имел ввиду springdatajdbc
А, ну я проебался, когда читал вопрос и зря простыню катал. Тогда да, хз, где это используют.
Это еще одна проблема спринга, что он блядь просто бесконечный и многие даже работающие на нем не знают что в нем есть, кроме того, что они используют.
А уж как нам вкатунам отбросить зерна от плевел это хз. А еще ведь правда есть java ee. И куча сопутствующих технологий.
Вот курс полугодовой на 80 часов видосов за овер 200к для вкатунов. Все ли это нужно? Я очень хз.
Spring in action такой же +- по содержанию.
Клауд точно нужен. Хотя бы знать, что это такое, и как это работает. Реактивщина - от проекта зависит
Код рисует из символов шахматные доски используя эти бины.
Забыл я офнуть ее, че такой токсичный\.
Написал это чисто для проверки работы переменных в цикле.
Что блядь не так? Почему все вылетает?
Scanner input = new Scanner(System.in);
String a;
int b;
do {
a = input.nextLine();
b = input.nextInt();
} while (b!=6);
Scanner input = new Scanner(System.in);
String a;
int b;
do {
a = input.nextLine();
b = input.nextInt();
} while (b!=6);
Про Бут и Дату не знал, спасибо за наводку, добавил на посмотреть.
То он отображается, и даже сравнивает креды, но, опять таки, форма логина не конфигурируется, выбивает при переходе по любому запросу, что .permitAll, что нет - все похую. А также не различает роли, то есть залогинившись даже с ролью юзер я все равно могу перейти на hasRole(ADMIN). Готов скинуть на пиво 150 рублей, только поясните, какого хера у меня ничего не выходит
Знаю, много мусора, но по-идее там ничего не должно мешать. Пытался и бутом, один и тот же результат.
>>192534
лог при попытке с пермишеном User зайти на hasRoleAdmin
org.springframework.security.web.context.HttpSessionSecurityContextRepository - Retrieved SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=peter, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=0677E115B7894183BC916F48070E9A60], Granted Authorities=[USER]]]
22:06:01.849 [http-nio-8080-exec-1] DEBUG org.springframework.security.web.context.SecurityContextPersistenceFilter - Set SecurityContextHolder to SecurityContextImpl [Authentication=UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=peter, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[USER]], Credentials=[PROTECTED], Authenticated=true, Details=WebAuthenticationDetails [RemoteIpAddress=0:0:0:0:0:0:0:1, SessionId=0677E115B7894183BC916F48070E9A60], Granted Authorities=[USER]]]
22:06:01.850 [http-nio-8080-exec-1] DEBUG org.springframework.security.web.access.intercept.FilterSecurityInterceptor - Authorized filter invocation [GET /proj/wheel] with attributes [authenticated]
Ответь на вопрос: ты используешь мавен/градл как нормальные люди или ебёшься со "встроенными" в идею проектами?
Я ебусь с двумя собственными проектами, которые были запилены давно и независимо друг от друга, без всяких мавенов и градлов (во первых, они начинались как песочницы, во вторых я нуб в системах сборки). Один из проектов теперь превратился в рабочий (работает в реальной пользовательской среде как своего рода микросервис), но мне в нем нужна функциональность другого проекта. Я бы мог второй проект откомпилить и подключить как библиотеку, но вероятность того, что там будет кровавая адаптация, очень велика, и я хочу его иметь именно в составе исходников, чтоб иметь возможность все редактировать прям на месте, без перекомпиляции каждые 5 наносекунд.
А то я вчера скачал саму свежую версию, пришлось аккаунт создавать.
Поставил из AUR прошлую версию
Не обновляюсь.
Прохожу курсы на степике. Раз в 3 месяца абужу степик в курсах, где дают сертификат. За 3-7 дней дают ключик на 3 месяца.
Нажимая enter, чтобы отправить число, ты отправляешь так же и символ пропуска строки. nextLine() поглощает этот символ, а nextInt() - нет, оставляя его потомкам (в твоём случае - следующему вызову nextLine).
Там нужно просто кое-какие файлы и директории стереть, чтобы триал сбросить. В интернете куча готовых скриптов по первому же запросу. Не ленись и пойди загугли.
Скрипт на сброс триала всех продуктов жидбренса для macOS могу кинуть в тред, если кому надо
Допустим, у меня есть две таблицы: компании и сотрудники.
Сотрудники хранят внешний ключ на id компаний. Схему создаю сам, хибер выполняет только validate.
Соответсвенно, в самом классе "сотрудники" стоит аннотация на связь ManyToOne (без cascade) и JoinColumn на внешний ключ.
Так вот, я делаю компании и кладу их в void компанииДАО.
Потом создаю сотрудников, добавляю им компании и кладу в void сотрудникиДАО.
Для первичного ключа у меня GenerationType.IDENTITY.
Все методы дао работают в своих транзакциях, т.е. у EntityManager всегда разные сессии.
Так каким образом хибер понимает, что компании в новых объектах сотрудников, которых я положил ВНЕ его сессии (а сессия есть только в пределах транзакции, как я понимаю) - это те самые компании, которые и отослал в компанииДАО ранее??
По итогу, он отлично разруливает, что и куда я положил.
Но как он это делает? У него же нет никаких первичных ключей, потому что в МОИХ объектах, которые я создал руками, они тупо не заданы.
То есть в сотрудникиДАО уходят сотрудники со вложенными компаниями, у которых не заданы первичные ключи в объекте, но они уже были добавлены в базу ранее, через компанииДАО. Как он их связал?
JpaRepository имеет аналогичное поведение.
Последствия ночного затупа.
Все первичные ключи там на месте, их в объект неявно entityManager.persist возвращает, когда туда объект передаётся по ссылке. То же самое и репозиторий делает, по-видимому.
Набросал несколько примитивных проектов на спринге на гитхаб. Думаю, что для портфолио хватит. Осталась теория для собеседования. Что посоветуете почитать до конца выходной недели? У меня из теоретических знаний только поверхностный университетский курс по джаве.
Дали рабочий МАК, на котором нихуя не понятно. Как-то можно стартовать пробный период Ultimate версии без регистрации аккаунта? Если нельзя, то скрипты помогут обновить пробный период или данные о времени останутся на аккаунте?
https://github.com/enhorse/java-interview
За неделю реально прочесть. Тут текста на 200 страниц где-то.
В Idea можно несколько проектов в одном открыть как модули. Как это делать не знаю, но коллега таким пользовалась.
Погугли intellij idea multiple projects
Сделал гораздо проще. Просто скопировал каталог с исходниками внутрь проекта. Идея без проблем все это увидела и вкючила в проект. Единственное что пришлось сделать, это подправить в каждом классе package defenition в начале файла исходника. Пока что каких-то проблем с таким примитивным подходом не нашел. Если бы мне нужно было например интегрировать это вместе с историей git-репозитория, был бы геморрой, а так все вроде норм.
Чел. За время пока ты задавал этот вопрос, щелкал наугад что иде съест, а что нет, ты уже бы с мавеном разобрался.
Да я просто забил сюда 4 строчки, чтобы кто-то мне сказал насколько так делать можно и нет ли подводных камней, потом еще минут 10 потратил на то чтоб попробовать.
С мавеном мне бы пришлось разбираться на каком-нибудь песочном проекте, потом тащить этот опыт в рабочий с риском все наебнуть. Короче, куча времени бы ушло. Я понимаю что тут полно гениев которые изучают спринг за 2 дня и кор за 21 час, но я не из таких видимо.
А что у тебя за проект? Сколько своих классов, сколько внешних библиотек подключено?
Если там 20 классов и нет внешних зависимостей, то что там можно мавеном то наебнуть?
Просто я до того как освоил мавен пилил хеловорды меньше 10 классов на стандартной либе и их даже проектами язык не поворачивается назвать.
Я этим способом и пользовался до 2021 года . Теперь же они аккаунт требуют. Не может быть, что до сих пор можно сбросить удалив те же файлы и ветку в реестре.
Ну, тот куда надо добавить, содержит в качестве внешних библиотек два драйвера баз данных, библиотеку связи с продуктами MS_Office, и мой собственный утилитный джарник. Сам состоит из штук 10 пакетов классов по 5 в среднем каждый.
А тот который надо докинуть - просто минипроект из 8 классов и без зависимостей.
вроде сам нагуглил, надо тупо вызвать .flush.
тупая привычка сначала высираться на двачи, а потом что-то делать, сорян гайс
Что это за фигня?
Чтобы класс был иммутабельным, он должен соответствовать следующим требованиям:
Должен быть объявлен как final, чтобы от него нельзя было наследоваться. Иначе дочерние классы могут нарушить иммутабельность.
Все поля класса должны быть приватными в соответствии с принципами инкапсуляции.
Для корректного создания экземпляра в нем должны быть параметризованные конструкторы, через которые осуществляется первоначальная инициализация полей класса.
Для исключения возможности изменения состояния после инстанцирования, в классе не должно быть сеттеров.
Для полей-коллекций необходимо делать глубокие копии, чтобы гарантировать их неизменность.
Жесть какая то, типа фулстек фреймворк.
Типа реакт внутри проекта спрингбута. А поверх реакта собственный DSL, основанный на XML. И фронт пишется на на этом DSL-xml.
Что-то я сомневаюсь вообще идти ли на собес.
Только я не понимаю почему они тогда не пилят на нормальных старперских технологиях. Зачем нужен обрезок с ограниченным функционалом поверх рякта. Может они сами запилили эту шляпу?
Но на собес я схожу. Нужно тренировать собесы.
https://habr.com/ru/post/585318/
Хуябр.
А спрос разве резко возник? Вроде был всегда последние лет 20.
Только вчера триал скинул - всё работает.
>>193695
https://pastebin.com/MN7FqJgq
Сохрани в .sh, выстави права на исполнение и запусти из терминала.
Спасибо
Существует project loom, поиграться можно уже сейчас, но хуй знает, когда в основную ждк подольют, много лет уже ждём.
Я хз, думаю потому что нет необходимости. Не то, чтобы я охуеть энтерпрайзер, но ни разу не было нужно это при работе с джава. А в шарпе только когда прогал в Unity. Чем тебя не устраивают обыкновенные треды?
А вы сами как думаете, раз задаёте вопросы типа
>Зачем нужны зеленые треды в джаве
>Чем тебя не устраивают обыкновенные треды
Это похоже на отус, ищи на торрентах. Там просто двухчасовые лекции на каждую тему. Научить толком не научат - просто будешь знать что это и зачем.
да, отус. На nnmclub лежит.
Пока первые 5 вебинаров отсмотрел, полет нормальный, неплохо системетизировал, что уже читал. В том же проспринг куча неактуальщины оказалось. И в многих других гайдах тоже.
Норм на самом деле. Единственные минус из-за того, что это вебинары - много воды. А некоторые лекторы не умеют разговаривать и там воды больше половины.
Думаю после этого курса прочитаю спринг ин экшон(бросил его после трети прочтения первый раз) и норм будет. Как раз новое издание выйдет через 2 месяца.
>>195403
А кто научит?
Вчера почти 4 часа возился - и ни в какую. Выплевывает какой-то экспепшон непонятный на стадии верификации, якобы у меня не указаны имени колонок. Ошибка не гуглится. Все доки перерыл уже.
Даже sql-скрип инклюдил в файл - всё равно не работает.
Отпишитесь, пожалуйста, у кого оно работает.
>>вебинары - много воды
Меня бесят все эти "меня видно? эммм ну вот, понятно?". Особенно после юдеми, где тебе столько же информации выдадут за 15-20 минут с картинками и схемами.
>>А кто научит?
Я через петы учился. Сначала пару раз почти прямо по гайдам (юдеми), потом свои проекты с гуглением отдельных моментов. Когда вкатился оказалось что мои петы были не так уж и далеки от реальности, кек. Масштаб меняется, а принципы те же самые.
Если я все технологии, которые указаны в вакансии изучил?
Только город укажите, а то в этих ваших ДС'ах рейты повышены.
>>за какую ЗП ваши фирым готовы
Я зп других разрабов то не знаю, откуда мне знать сколько кабан готов платить? В вакансиях на джунов и вилок то обычно нет. 20-120к в зависимости от упругости.
Если прям вообще опыта нет, то на 30к рассчитывать можно на какой-нить сбер хуестажировке. Я на пет проектах посидел, без опыта в резюме встал на 80к. Это в Новосибе
ну мне кажется будет норм этот отус + спринг ин экшон + 2-3 пета. А что ты хорошее на юдеми смотрел?
>>194245
Короче сходил. Собеса не было.
40 минут директор с кучей ненужных подробностей рассказывал, что они поддерживают миллион говна для гос органов. И им отдали на поддержку говнолегаси монстра инф систему для медиков. Им нужен базист на оракле с plsql и джавист.
Джависту придется работать с ораклом, постгресом, джавой8, спрингом 4.2, но с бутом, миллионом интеграций другими гос системами и кучей баз, очередями и тем странным фреймворком для фронта. Во фронте тоже походу придется ковыряться джависту.
Дали тестовое. Какая-то несложная шляпа с базой, веб-мордой и небольшим парсингом регулярками. Думаю опытный челик за час сделал. Мне 3-7 дней придется копаться.
Думаю таки сделаю тестовое чисто для себя.
Если вдруг возьмут, насколько такой опыт плох?
>Если вдруг возьмут, насколько такой опыт плох?
А у тебя на руках уже есть 5 офферов или с чего ты решил перебирать офферами?
Глубоко ничего не изучишь, но получишь представление о большом количестве разного говна, будет о чем в резюме написать. И в целом лучше год тут отработать, чем потратить его на поиск работы мечты.
Двачую этого.
Более того, на первом этапе глубоко лучше вообще ничего не изучать. Лучше изучать широко, в смысле поверхностно, но побольше всякого разного, чтобы быть всесторонне развитым. Это в перспективе куда лучше и выгодней, чем задрочить какую-нибудь одну хуйню, а за её пределами и хелловорда не мочь.
Да и всякие около/госконторы обычно работают довольно размеренно (хотя с уебанским управлением часто всякие факапы будут случаться наверняка), а значит можно учиться всякой хуйне и в рабочее время.
По описанию кабан-кабаныча(реально оказался очень подходящим под стеретип) это прям легаси в худшем его понимании. Это говно под которое они нанимают написали другие такие же рога и копыта из другого региона лет 7 назад и оно уже сменило 2-3 компании сопровождения.
И на одно слово про технологии десять, как он много работает с местными бюрократами, с федеральными, выигрывает тендеры и т.д., что по каким законам.
Ну и хоть частники, но так много рассказывал об этом, что на меня снова пахнуло запахом(неприятным) госслужбы.
И? Ты хочешь услышать, что это не работа мечты? Да это херовая работа, но это все равно лучше чем ничего.
Тебя же никто к батарее пристегивать не будет, через год обновишь резюме и будешь неспешно искать новую работу уже в приличной компании имея и опыт и зарплату на текущем месте. Можешь неспешно выбирать интересное предложение.
хз, может вы мне еще подводные камни таких шараг накидаете. Понятно, что я сам буду думать. У меня в этом из знакомых просто никто вообще не разбирается, есть только один фронтендер. Хочется с кем то обсудить.
Я кстати все еще жду начала курса епама, нацеленную на удаленный найм на джуна в питерский офис. Мне уже сказали, что курсы епама это хоть какой-то вариант, но далеко не 100%. И логично, что у сегодняшнего варианта шансов стать первой ступенькой для вката больше.
Короче вопрос: написать тестовое на spring-jdbc или на spring-data-jpa. У меня есть проект на spring-jdbc, но там велосипед по загрузке скриптов sql для создании базы(я не нагуглил как это правильно делается). А spring-data-jpa я почти не трогал еще, но выглядит, что там все чуть-ли само делается.
>хз, может вы мне еще подводные камни таких шараг накидаете.
Нормальных процессов там не будет и ты привыкнешь делать так, как там "принято". Я реально работал с сеньорами которые не понимали зачем нужны пул реквесты, код ревью и прочий CI/CD. Так он еще и активно сопротивлялся внедрению всего этого - типа 15 лет кодил так и все норм было.
Работа может быть организована через жопу. В начале года пока бюджетов нет работы мало, а в конце года когда нужно освоить бюджет куча задач которые надо сделать вчера.
Ты офис то посмотрел? Прилично выглядит? Чай-кофе-печеньки есть?
>Короче вопрос: написать тестовое на spring-jdbc или на spring-data-jpa. У меня есть проект на spring-jdbc, но там велосипед по загрузке скриптов sql для создании базы(я не нагуглил как это правильно делается). А spring-data-jpa я почти не трогал еще, но выглядит, что там все чуть-ли само делается.
Иди по пути наименьшего сопротивления. Идешь https://start.spring.io и генерируешь себе проект с JPA, H2 и прочими необходимыми вещами. Дальше напихиваешь туда требуемые вещи. Я обычно в корень проекта добавляю README.md с коротеньким описанием как собрать и запустить.
>>хорошее на юдеми смотрел?
Мне Mosh понравился, amigoscode. Батыршинов (JavaBegin) и Алишев тоже пойдет. Они и на ютюбе есть (но там не все само собой).
Книги читал только по патернам/архитектуре/алгоритмам. По фреймворкам - хуита. Устаревают быстро.
>Ты офис то посмотрел? Прилично выглядит? Чай-кофе-печеньки есть?
там совок. 5-10 кабинетов по соседству с кучей других компаний, в советском административном здании, переделанном под офисы.
И подход очень совковый у всех, госслужбисткий.
Но просто это в моей мухосрани в 20 минутах ходьбы от сычевальни. У нас в мухосрани есть еще адовые местные галеры. в 2\3 из них вообще нет спринга, а в остальных вакансии бывают раз в год. Может самому написать им в соцсети?(Знакомый фронт начинал с одной из этих галер и перекатился в епам на удаленку и сказал по организации процессов земля и небо, плюс переработки прям сразу)
>Иди по пути наименьшего сопротивления.
да, уже энтити накидал, вроде сохраняется. Правда всегда боюсь с jpa что-то напутать в связях типа manyToMany. Сейчас сервис с регулярочкой буду пилить, а потом контроллер и фронт.
По алгосам - для начала и грокаем алгоритмы пойдет, Седжвика понемногу читаю (у него курс на курсере есть) но пока времени маловато. Это больше на вырост, щас я джейсоны перекладываю.
Паттерны, архитектура - Фаулер + мельком про DDD (Миллет). GoF пишут сложно и непонятно, но внезапно есть Head First Design Patterns в котором все это пересказано человеческим языком с примерами (другие книги серии не рекомендую, но эта - ок).
Но паттерны/архитектуру со временем и так понимать начинаешь и книги лучше читать когда уже не нулевой и писать что то осмысленное умеешь.
Ну грокаем это по сути просто перечисление общего смыла алгосов, после них деревья не покрутишь.
Блоха советуют уж очень многие и Чистый код. думаешь стоит читать?
Так этого и так хватает. На собесе про О(n) ответить сможешь, а деревья крутить джуна не отправят.
>>Чистый код
Если нравится фантастика. Это работает до первого изменения требования перед дедлайном.
>>Блоха
Я читал местами перед самим вкатом, чтоб подтянуть то что слабовато знал. А так лучше время потратить на практику и спринг.
>Может самому написать им в соцсети?
Напиши, хуже не будет ни в какие черные списки тебя не внесут, а так может что и выйдет.
Сэймы есть?
Хз
Живу также как анон, за полгода не изменился вес. Все что нажираю теряю при очередном стрессе/депрессии.
Как блять разбавить эту рутину ебаную? Вечером хотелось бы покодить что-то интересное, и вроде хочется, и сил нет.
>5-10 кабинетов по соседству с кучей других компаний
это ГОРАЗДО ЛУЧШЕ модного аквариума опенспейса. Уж поверь
купи машину, к ней гараж. Это для начала
Мне тоже интересно
Вернуться с удалёнки в офис, начать активно общаться с какой-нибудь тяночкой-QA.
Да, ты слишком долго спал. В java 8 добавили регистронезависимость и лямбды. В семнашке ещё строгую типизацию вроде убрали.
ЭТО ХОРОШО! ДОГНАТЬ И ПЕРЕГНАТЬ!
Тогда с тяночкой-аналитиком, они поумнее.
На самомм деле в модификаторах доступа вообще смысла нет. Ведь к любому полю можно получить доступ через рефлексию.
Делать доступ к полю напрямую без геттеров\сеттеров это детские грабли.
Если сделать геттер и сеттер, то это оставит больше возможностей для изменений в будущем. Ты сможешь добавить логику для этих методов.
Да, здорово потом ебаться с геттерами, которые лезут в базу своими селектами пару раз и апдейты видел
> Как тогда не утонуть?
Читать мурзилки.
> Что вообще нужно знать из хибера джуну?
Знать инфу из пары туториалов и суметь написать круд на жпа.
>я знаю джава кор, с большей частью стандартной либы (включая всякие типа "сложные" закоулки, вроде дженериков, стрим апи, рефлексию, етц) низкоуровневое коннективити к базам данных, sql конечно же, немного опытен в свинге (хотя это тоже по большому счету станд.либа), и очень хорошо умею абстрагировать предметную область в какую-то программную архитектуру.
Набор студента, перешедшего на второй курс. Пока сам не напишешь круд, покрытый тестами и упакованный в контейнер, шансы на вкат минимальны даже на стажировку
Проигрываю с местных экспертов-крудошлепов, которые из мультипарадигмального языка общего назначения сделали средство шаблонного крудошлепия, и не только этим гордятся, но еще и других через это мерило оценивают. Кринж нахуй. Ни дать ни взять, макаки забивающие микроскопом гвозди.
мимо
Проигрывай дальше
>из мультипарадигмального языка общего назначения сделали средство шаблонного крудошлепия, и не только этим гордятся, но еще и других через это мерило оценивают.
Абсолютно во всех прочих задачах c# лучше, а дополнительно мои хотелки закрывает rust. Я больше не пишу на джаве вне РАБоты
Если 80% вакансий такие, а на джунов-джавистов, которых нанимают открыто по объявлениям за 90%, то остальное просто статистически незначимо.
Так что для вкатунца по факту джава и является
>средство шаблонного крудошлепия
Это сложившееся в сообществе мнение.
В чем прикол раста в сравнении с Си например? Что он может такого особенного?
>включая всякие типа "сложные" закоулки, вроде дженериков
Никто не знает дженерики.
Сделай Builde дженерик, так чтобы код компилировался https://pastebin.com/CnSRGQhY
Согласен про шарп на 107%. Хотя с одним но: Intellij лично для меня лучше VS, кроме своего мегаублюдочного конструктора форм (которые в Java все равно не нужны) Хотя есть решарпер и райдер, конечно, но я не пробовал.
Почему ты тогда не найдешь работу на шарпе?
Но на фронт мне нужно отдавать лист дтошек, все без основного текста.
Долгим перебором и подбором я дошел до выделенного jpql запроса, но он все равно не работает и я не понимаю почему.
В голосину с этих сложных закаулков, хотя если под знанием стримов ты подразумеваешь написание кастомных сплитераторов, тогда вопросов нет
А знание спринга - это постпроцессоры бинов @ несколько контекстов.
Ну, ты ж не сказал что надо именно класс билдера дженерезировать. Можно и так попробовать
>>197433
От чего тут в голосину? Так уж видимо сложилось, что все навыки 95% прогающих на джаве сводится в дженериках к List<String> list, в стримах к какому-нибудь Array.toStrim.max, а рефлекшен это что-то что лучше вообще не трогать потому что нарушает какую-то там безпасность и медленно. Ну либо у меня в окружении одни дебилы, я не уверен.
Ну хз, мусора всякого так побольше, чем если только целевые методы дженеризировать. Но для любителей кучи скобочек и брейнфакинга конечно лучше
https://pastebin.com/BTQAPYTX
>Ну, ты ж не сказал что надо именно класс билдера дженерезировать. Можно и так попробовать
Очевидно же что: .<C.Builder>.bar() - это говно. Хорошо когда в API сами дженерики не отсвечивают вообще.
A a = A.builder().foo(1).build();
B b = B.builder().foo(1).bar("abc").build();
C c = C.builder().foo(1).bar("abc").baz(0.5).build();
>>197472
Much better! @SuppressWarnings("unchecked") только добавить, чтобы глаза не мозолило.
Ну, ты прав, конечно.
В основном в том, что многословность самого внутреннего кода - всего один раз, а клиентские многословные вызовы - многократные.
Хотя интуитивность даже дженерик-методов хорошая, как по мне - сразу видно что дженерик значит.
Короче согласен во всем.
Давай-давай.
Принципиально - ничем, все языки программирования более-менее взаимозаменяемы, если опустить ряд особенностей вроде типизации или многопотока.
Нишево - сложилось так, что жабу в основном юзают в очень больших проектах, а пхп - в маленьких и средних. Из-за этого экосистема развивается по-разному, и заменить одно на другое сложно. Жабашарпы отдельно, питонопыхожиесы отдельно.
Ну вообще странно. Это значит, джава умеет поддерживать бОльшую сложность, чем пхп. Почему тогда она не вытеснила его и из малых проектов?
Пиздец, теперь эта долбоебина вообще не стартует. Все классы помечены красным значком j. При этом в Edit Configuration он мейн класс не видит,ебанат блять
Вот мне нужно передать с фронта пост запросом 2 поля объекта и еще 4 сфомировать на беке. И сперва я 4 поля забивал нулями. Но это как то не очень. Я например не хочу, чтобы фронт знал все поля настоящего энтити.
Ну самый разумный ответ - дтошка с этими двумя полями.
Но нелья ли просто две строчки передать в теле (ну вот лень мне писать дтошку например) без обертки? Если нельзя, то почему?
Можно аннотациями Jackson, но это ебучая магия.
https://stackoverflow.com/questions/16019834/ignoring-property-when-deserializing
Уже перекопировал блять,спасибо дядь вов. А вообще,я посмотрел что изменилось и сраный грейдл тупо проебал все стартеры,хотя они записаны в файле конфигурации,и не хотел билдиться потому что не может найти файлы, которые он сам должен был скачать и внедрить. Долбоеб блять,хуй я больше когда к этой залупе притронусь
Я ведь хотел сегодня блять день посвятить изучению спринга,постгрес в докер закинуть и подключить к проекту,а вот хуй там,с двух часов,а это уже блять 9 с половиной часов,9 сраных часов я пытался починить эту шайтан машину. Пошел нахуй дибил ебучий сука зла не хватает
>>это оставит больше возможностей для изменений в будущем
А потом в каждый проект тащишь ломбок, пишешь @Getter @Setter и не видишь этих геттеров больше никогда.
>Долбоеб блять,хуй я больше когда к этой залупе притронусь
Вот и правильно. Больше джаву не трогай.
С либерикой ты можешь претендовать на включение в реестр отечественного ПО, а с ораклом нет
Ну а ты как хотел? Один костыль, чтобы замести следы за другим. Минус на минус дают плюс. А два костыля совершают работу, результирующая которой, стремится к нулю. Зато соломка подстелена. Все выиграли.
Все выиграли, кроме шарпоблядей, у которых сделано нормально, но всем похуй, все юзают жабу позорную.
Ну так идея умная и знает, где искать гит, нашла его по стандартному пути в Program Files, а терминал тупой и сдаётся, если не нашёл чего-то в PATH.
Вот примерно такое ты должен уметь написать для джуна:
https://github.com/Raiffeisen-DGTL/cib-interns-test-task
>Если нельзя, то почему?
Можно, но все просто пишут DTO-шку для этих целей, потому что мапперы вполне себе хорошо их сериализуют.
Плюс объект DTO можно легко валидировать, расставив аннотации для Validation Api в нём, и он сразу отрыгнёт экспепшеном в контроллере, если фронт невалидного говна прислал.
Если не считать того, что будет плюсом, то довольно простое задание для пары вечеров.
Только я не понял, что означает
standalone - состоять из одного выполняемого компонента верхнего уровня
и
Схему БД желательно хранить в репозитории в любом удобном виде.
Кто-нибудь может пояснить?
Помоги по-братски сделать дтошку. Или разубеди ее делать.
Короче хотел деркать дто прямо из базы. Но у меня не получается:
>Есть сущность "документ", у него есть коллекция "кодов", коды я засунул в @ElementCollection(fetch = FetchType.EAGER), потому что они всегда нужны. Из сущности выделяется дто, все поля кроме текста.
Нужно сформировать метод для репозитория springDataJpa и запросом jpql, который возвращает лист с теми DTO, сет кодов которого содержат определенный код. https://pastebin.com/ztsB90Dp
Тут мне вместо сета в конструктор дтошки передается один лонг.
И еще вся проблема в том, что мне нужен не просто лист дто, а с пагинацией.
Так вот я разобрался, как забрать page сущностей, а потом их форматнуть в page dto на ходу. Но там будет грузиться каждый раз самое большое поле из базы. За это могут предъявить.
И мне еще по этим кодам потом фильтровать надо будет.
Сейчас уже думаю лучше бы на jdbc пилил тестовое это. Правда там с пагинацией еще больше проблем.
Ебать даун внатуре,и на эту хуйню дрочат красноглазики
>standalone - состоять из одного выполняемого компонента верхнего уровня
Грубо говоря - всё запаковано в один джарник. Без каких-нибудь томкатов рядом, в которые ещё нужно это всё задеплоить. Ну, в общем-то, это как раз джарник спрингбута и будет.
>Кто-нибудь может пояснить?
Обычное описание sql-запроса на создание схемы базы данных в файле.
>standalone - состоять из одного выполняемого компонента верхнего уровня
Ожидают, что ты не будешь выебываться и твое приложение будет состоять из одного сервиса.
>Схему БД желательно хранить в репозитории в любом удобном виде.
Выложишь вместе с приложением дамп своей БД.
Анон, я завтра отпишу тебе, если никто раньше не ответит бошка болит пиздец и шевелить мозгами сложно
Хуёво. Я такое легко могу сделать, но не в вебе. Да ладно, я уже и так понял, да и раньше знал, что без веба практически некуда лезть
>Почему тогда она не вытеснила его и из малых проектов?
потому-что пыхпыхеры тоже хотят кушать
Мне тестовое в "рога и копыта" выдали посложнее. Через неделю(как выполню или сдамся окончательно) выложу суда.
Посмотрел пул реквесты и почему-то все вкатыши напрочь игнорируют существование в этом мире составных ключей. Их вообще не смущает, что генерируемый id не используется фактически никак, а все выборки осуществляются фактически по двум колонкам, которые у них не ключевые, ещё и без индексов.
Чел, я с гитом пока на вы. А как удобнее их смотреть в гитбаше/идее? Склонировать проект, в идее есть еще git -> github -> view pull requests. И виден код. Как этот код запустить или скопировать себе этот код с пулреквеста? Я вообще это могу сделать, как не владелец репозитория?
Ну и раз смотрел вкатунские пулреквесты, скинь пожалуйста ссылку на лучшее из худшего, что видел.
короче с Interface-based Projections https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections все работает без jpql, чисто на методах спрингдаты.
А с обычными дто я ебался весь день вчера.
И пагинация, и само отделение дто(проекции) и фильтрация по элементам коллекции.
Это практически все задание и есть. Сейчас на постгрес вместо h2 только накину. И только контроллеры с фронтом останутся.
Хрень полная. Какие-нибудь паскалисты тоже хотят, однако все они сдохли, и считанные выжившие единицы сидят в петушином углу
Вопрос: почему так? Ведь тогда получается, что впрыскивание происходит раньше, чем запускается postInit у BPP. То есть при такой логике впрыскивается неактуальный бин (например, без прокси). Как понимать такое?
Как я буду пользоваться Спрингом, если не знаю до конца, как происходит создание объекта и как я могу на это повлиять?
>почему так?
Потому что нахуя тебе на практике PostConstruct-метод, в котором ты не можешь использовать зависимости бина.
>Ведь тогда получается, что впрыскивание происходит раньше, чем запускается
Действительно так, на этапе вызова PostConstruct не вся инициализация из BPP уже отработала, и что-то может быть еще "неауктуальным". На практике чаще всего этот эффект заметен в виде неработающих @Transactional.
Я надеюсь ты не из тех вкатывальщиков, кто решил сначала досконально изучить теорию спринга, прежде чем попытаться на нем что-то написать.
Так это правильный подход. Сначала учишь C, потом C++, потому джаву, причём задрачиваешь сокеты, свинг, треды и прочее, потом сервлеты с ЕЕ, потом спринг, потом спринг бут. По каждому читаешь минимум одну книгу на 1000 страниц.
Так ассемблеры - это БАЗА, туда же вышмат, информатика и прочее. Это изучается само собой, но началом вката ещё не является.
Ну ты же не понимаешь досконально как работают процы от интела и амд, изготовленные за последние 5 лет, на которых и будут работать твои серверные программы под спрингом. И ничего.
Ну си и ассемблер куда ни шло. Но зачем тут плюсы? И си с ассемблером учится во время изучения архитектуры эвм, операционок и сетей. Там талмуды типа Таненбаума и после каждого талмуда горы спецификаций последних версий железа/операционок/сетевых протоколов. Ведь талмуды пишутся с задержкой 5-20 лет.
Ну и куда после синтаксиса джавы в сервлеты сразу? А спецификация jvm как же? Там тоже гора абстракций, которую абстракционист-перфекционист должен задрочить.
C++ - это мост в промышленные языки из C.
Ассемблер учится параллельно с архитектурой, но не C.
Спецификации надо читать сеньорам, для вката достаточно учебных талмудов по EE.
Хотя прокси ведь в поле для обычного класса и не впрыснешь... Ладно, отложу пока этот вопрос.
Мурзилки по спрингу в свободном доступе.
Отус
>>195425
вот другой чел советовал. Я только алишева смотрел. Основы наверно лучше ди популярнее всего разжеваны
>>196178
Еще prospring5 читал. С нуля подойдет, но много неактуального в примерах. Почти все примеры без бута и на хсл кофнигах. И самое уебищное это градл, причем древний, у которого нет обратной совместимости с нынешним.
Ну и по примерам - книга spring in action и на ютубе letscode два плейлиста хороших.
Паскаль позволяет делать и веб-приложухи, и десктоп, и многое другое, а пхп только веб.
Паскаль общего назначения язык, на нем что угодно можно, просто он нахуй никому не нужен, никаких ниш не смог занять, фреймворков нет, даже рад-студия пидорское ПО, которое стоит дохуя а пиратнутое стучит в офис разрабам
>А как тогда быть
1. Убедиться, что проблема не умозрительна, а реально существует - ты в ситуации, когда нужно использовать в PostConstruct нечто, что не успевает подцепиться.
2. Использовать любой подходящий workaround, например, вместо @Transactional брать напрямую TransactionManager
Речь-то не о проде, а о задаче
При каждом запуске.
>>198257
Вообще, для таких задач просто индексы нужно прописывать на нужные поля.
Другое дело, что в том же liquibase, у меня ни в какую не получилось индексы прописать. Ни через ченджлоги, ни через инклюд sql-скриптов напрямую. Была как-то такая задача - провозился в этой парашей 4 часа, и нихуя не заработало.
Может быть, в этом и причина, почему многие так сделали схему.
1) Как ты будешь ссылаться на эту таблицу из других таблиц? Там тоже делать дублирующие поля для составного ключа?
2) Может измениться структура, правила заполнения этих полей, обязательность, возможность дублирования и так далее. Всё это создаст огромные проблемы если использовать их в качестве ключей
3) Производительность и сложность индексирования. Ключ по текстовому полю - плохая идея
4) Поля могут меняться. Как их менять, если они выступают в качестве ключа?
Как блять это говно ёбаное отключить? Каждый 3 раз при переключении вкладок у меня эта поебень срабатывает. Уже клавиатуру пополам почти сломал.
он содержит в своем составе встроенный
Таки нашёл. Почти час искал.
AnnotationConfigWebApplicationContext aactx = new AnnotationConfigWebApplicationContext();
aactx.register(YourAppConfig.class);
DispatcherServlet dispatcher = new DispatcherServlet(aactx);
Tomcat tomcat = new Tomcat();
tomcat.setBaseDir(System.getProperty("java.io.tmpdir") + "tomcat_embed");
tomcat.setPort(8080);
Context rootCtx = tomcat.addContext("", new File(".").getAbsolutePath());
Tomcat.addServlet(rootCtx, "DispatcherServlet", dispatcher);
rootCtx.addServletMappingDecoded("/", "DispatcherServlet");
tomcat.start();
tomcat.getServer().await();
Но реально это размазано на 100500 классов.
Хм, прямо в конструкторе эти методы вызываются? То есть томкат стартует сразу после создания бина спрингом?
А, ты про это. А если составной ключ для Many to many связей?
P.S. сам курс ни о чем, за два месяца предполагается объять необъятное.
Сам планирую вкатиться, а тут такой сыр... есть вероятность, что придется пахать за МРОТ
Кто-нибудь вообще сталкивался/работал в этом Тим Форс?)
Охуенно подфартило же. Тут наоборот как не спросишь, что надо джуну знать, так говорят что если ты не знаешь спринг то вероятность успеха равна нулю, а тебе сказали что разберешься по пути. Заебись же.
По моему это пиздежь просто. Я сам вкатыш, но всегда, когда требовалось каким-то образом провзаимодействовать с чем-то вне программы, гуглилось это за минуты и делалось тоже. Например всякие там создания директорий, файлов, чтение/запись реестра, переменных среды и т.п. Есть куча встроенных в джаву классов которые для тебя все это абстрагируют
Это значит, что у тебя нет прямого доступа к системному API (winapi, posix и прочее), но и его можно получить через системно-зависимые обёртки. Больше никакой изолированности нет.
Если ты волокешь например в C, то можешь просто написать свою реализацию любой системщины, и вызвать ее из java с использование JNI.
На Скале не обязательно писать в фунциональном стиле. Можно продолжать писать в императивном стиле используя синтаксический сахар Скалы.
В целом если ребята не сильно угорели по типам, то освоишься легко.
Ну типа нельзя взять мусор из оперативки, вывалившись за пределы массива, как в сишечке.
Дэк его либо нет, либо 2 с половиной человека
Не обязательно с литкода.
У нас только фронтендерам.
плагины для:
- баз
- жс и фреймворков
- хибера и жпа
- хттп клиент
- спринга
И это я только вкатываюсь.
На комьюнити этого или вообще не будет или придется пользоваться клиентами баз и постманом каким-нибудь.
Интересно как с этим в SpringToolSuite или вскоде. Сейчас пишу тестовое для компании, где очень нарядли будут оплачивать идею.
А зачем юзать коммунити?
Почитай про Docker Compose.
https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html
Ничего особенного, но тыкнуться в свеженаписанную апишку не отходя от кассы много времени экономит.
> идея не предлагает валючить авто импорт
Пидоры из жидбрейнс ломали-ломали функцию автоимпорта, наконец-то доломали.
> и в подсказки не выдает в докерфайле и при указании пути например
Купить ультимативную идею или попробовать поискать плагин.
И так ультимейт,а чем там с автоимпортом? У меня кстати еще когда создаю вручную файл типо application context среда не отмечает его как спринг файл,он тупо висит как обычный, соответственно подсказок там тоже нет
Есть ли сейчас Spring in Action на русском языке в нормальном издании, где не будут допотопные технологии описываться, желательно спизжено с торрентов чтоб все это было?
Он просто перечисляет какие есть классы и какие методы в них вызывать, но общего представления у меня от этого не возникает. Как будто предполагается, что я уже писал сетевые приложения на другом языке и хорошо знаю, как работает этот ваш инторнет.
> докер
>>199092
> докер
>>199828
> докер
>>199910
> докер
Слушай, анон, мы может и понимаем, что раз ты учишь сопутствующие к жабе технологии, то тебе кажется логичным про всё это спрашивать в жаба-треде, но скажи, если у тебя сломается винда или надо будет починить принтер, про это ты тоже здесь спросишь?
Нет конечно. И вряд ли будет. Читай на инглише с автопереводом, там язык очень простой, даже я все понял.
Можешь прям 6ое издание начинать. Там первые 5-7 глав уже вышли, а вся книга выйдет через месяц.
Ну мне все понятно было
https://www.youtube.com/playlist?list=PLtPJ9lKvJ4oiNMvYbOzCmWy6cRzYAh9B1
вот плейлист поверхностный-ознакомительный по сетям. Посмотри 5-10 видосов про ip, tcp, сокеты и http.
Я когда эту главу читал написал первое учебное приложение сам. Типа чатик в cmd на tcp-сокетах по локалке, с двумя потоками. Помню было два джарника: клиент и сервер, на клиенте пришлось захардкодить ип сервака. Поставил на второй комп в другой комнате и тнусом переписывался.
Ладно там кубер, но докер. Он сейчас даже в тестовых на стажёра, не то, что джуна. Это как с вопросом по гиту в отдельный тред отсылать.
Читать всё. Вдруг ты вкатишься в древнее легаси с вебсферой, антом, шестой жабой, DB2, на спринге (третьем) только пара модулей, остальное на ЕЕ.
Его отменили, он только на мобилках, в котлине свои фреймворки, и т.д. Выбирай, какая причина больше нравится.
В последнее время я скорее больше проектов на котлине с вебфлаксом видел, чем с жабой. И gradle тоже нужно из жаботреда увольнять, жаба для него всего лишь один из возможных плагинов.
Но при этом там многое упущено. Например по тем же базам. На один пример с современными автоконфигами бута - 5-10 старых с хмл/ддава конфигом. Про бут, стартеры, хуяртеры придется отдельно читать.
Сосачую этого.
Кстати, кто каким софтом пользуется для перевода? Лет 15 назад был годный Babylon, который мог моментально перевести слово под курсором. Сейчас уже канул, наверное.
Зачем тогда нужен шарп?
тоже кутранслейт, только недавно яндоксовский движок перестал на нем работать. Приходится пользоваться гуглом. яндекс по моим ощущениям с английского на русский был чуть лучше.
Я перекатился из треда по шарпу в джаву, потому что шарп не может в кроссплатформенные графические приложения.
.Net Core может только в консольные и веб приложения. А если хочешь графические, то только Windows. Кроссплатформенность .Net Core - это обман.
В шарпе есть авалония. Но это всё равно нахуй никому не сдалось, гуй сейчас в основном в виде веб-параши, хоть в жабе, хоть в шарпе.
И что? Ты хочешь сказать что джава с ее инструментами работы с UI это типа то чем стоит заниматься по жизни? Серьезно?
- Использовать аннотацию @query
Какие-то еще способы есть?\
А что нельзя просто напрямую сделать запрос через драйвер базы с использованием низкоуровневого jdbc?
все, кроме гугла и яндекса неудовлетворительно.
Нужно изучить технологию
@
Гуглишь статью/видос
@
Вникаешь, радуешься
@
Случайно позже натыкаешься на статью "yoba-технология теперь устарела, надо использовать ололо-Api"
@
Ловишь бугург
А чё, тут побугуртить незя?
> yoba-технология теперь устарела, надо использовать ололо-Api"
Не надо. Даже если кто-то считает, что устарела, это ещё не повод учить ололо-апи, если на нём нет работы.
В итоге нужно знать и древние 20-тилетние технологие и попсовые 10-летние и модные-молодежные 5-летние.
> @GetMapping/@PostMapping
Не всё так однозначно. Понадобилось на рабочем проекте мне как-то покопаться в рест-контроллерах, а то в основном с соапом ебусь. Вижу везде @RequestMapping, с учебных крудов вспомнил про @GetMapping, попытался заменить, идея его не нашла, и выяснялось, что четвёртый спринг их не поддерживает.
Нет, со спросом. Тебе отдают хуйню и говорят переделывать половину механизма, можно делать что угодно, лишь бы фронт мог вызвать.
Как работается? Что на собесе спрашивали?
Использовать можно, но подумай, что на стороне СУБД это потом нужно будет индексировать.
Если хочешь модно, бери монгу, там уже из коробки вместо автоинкремента ID хуй знает что, тебе понравится. Правда, не совсем уже модно.
нормально. В случае если надо будет сливать несколько баз в одну - это единственный вариант
Я помню раньше были сухарики с курицей карри, прикольные.
Сложно ли будет вкатиться сейчас в язык?
Да хоть в 2056-2057 его пиши.
Тогда несложно. Джава в десктопах мало развилась с 2007. Свинг вообще +- тот же.
А потом обратно на завод?
Молись, чтобы это знание тебе никогда не пригодилось.
Конструкцию try-catch-finally я понял.
А что дает нам запись "throws" в сигнатуре метода?
Че-то там типа пробрасывается "наверх"..
Получается, что этот метод сам с исключением не работает и если оно возникает, то оно будет обрабатываться в том месте, где текущий метод вызывается?
Типа вместо результата текущего метода исключение придет?
Это ошибка в дизайне языка, суть которой в делении исключений на непроверяемые (unchecked) и проверяемые (checked). И если ты кидаешь проверяемое исключение или вызываешь метод, который кидает такие исключения, ты обязан либо поймать его в этом же методе, либо пометить свой метод throws, заставляя всех, кто использует твой метод, проделывать то же самое.
И всё это описано в главе про исключения в КАЖДОЙ БЛЯТЬ книге про джавакор.
Да слышал я сто раз объяснения, но не понял сути. Поэтому и переспросил, чтобы мне объяснили на говне и палках
Да, если бы все здесь перед тем, как спросить, сначала RTFM, активность постинга была бы на уровне /rm/. Но мне по фану отвечать.
Спроси в андроид-треде. Здесь разве что расскажут, зачем нужен Spring IoC, когда есть CDI/EJB.
Так Guice в андроиде не применяется вроде.
Ну ты чо как маленький-то? Ты же даже не гуглил.
Качается драйвер для твоей БД, подключается к проекту как зависимость, загружается в программу через Class.forName (видимо это надо чтоб класс-лоадер отработал), потом у DriverManager (это часть джава.скуэль) вызывается статический метод GetConnection, в который параметром передается всякая трехомудия с параметрами подключениея. Возвращается из вызова коннекшен, с которым уже можно всякое чудить.
Потом тупо пишешь запрос на языке SQL той базы, которую используешь, кладешь его в строковую переменную. Создаешь объект класса Statement, через вызов createStatement у объекта Connection. В зависимости от того, надо ли запрос параметризовать, юзаешь или просто Statement или PreparedStatement. Стэйтмент можно уже отправить выполняться на сервер. В зависимости от того, селектит ли что-то запрос, используется или execute или executeQuery. Если ты селектишь, то результат приезжает в виде так называемого ResultSet, у него есть как бы курсор, который указывает на единственный кортеж результата. Из того кортежа, на который сейчас указывает курсор, ты можешь вытаскивать результаты по индексу, имени атрибута, и т.п, и делать с ними уже все что угодно. Движение курсора в ResultSet только одностороннее - хотя структура и реализует интерфейс, позволяющий вызов previous, база данных пошлет тебя нахуй скорее всего, всегда работает только next(). В самом начале кстати курсор стоит как бы над первым кортежем, и чтоб начать что-то получать нужно один раз вызвать next(), чтоб получить первую запись
ну так обоснуй свой вскукарек
С ошибочности идеи, что существуют ошибки, которые всегда можно обработать на месте. Такого не бывает.
Причём в Go наступили на те же грабли и теперь пишут везде if err != nil { return nil, err }, чтобы прокинуть ошибку наверх.
если не можешь, выкидывай выше. При этом код выше должен жестко знать об этой возможности получения такой ошибки, которую надо обработать. Если он тоже не может, то снова выше. Это заставляет думать о корректной обработке эксепшенов
Я и выкидываю, куда деваться.
try {
...
} catch (final Exception e) {
throw new RuntimeException(e);
}
мразь
Возможно, речь про Runnable, который не декларирует исключения, и если в качестве его реализации попытаться подсунуть метод с throws, это не скомпилится.
Если ты вызываешь метод, который в сигнатуре имеет throws, то у тебя два стула пути: либо ты оборачиваешь строку с вызовом этого метода в try-catch, либо тот метод, который ты пишешь в данный момент, тоже должен быть помечен как throws этого же типа исключения, либо супертипа.
Надо понимать, что если исключение возникло, то исполнение, так сказать, бизнес-логики метода в блоке кода прекращается. Если все это происходит в блоке трай, то продолжается оно в выражении catch и finally, если же ты просто пробросил вверх через сигнатуру метода, то метод этот вообще умирает, совсем.
что это?
Пытаюсь с помощью @propertysource достаю из внешнего файла пароли к базе, но томкат их не видит (а где он, блять, их вообще искать то пытается?).
Очевидно, что никто, все лепят синглтоны, большинство даже не подозревает, что есть что-то ещё. Пару раз попадались prototype и request, но делать кастомный скоуп - эио ж насколько спринганутое приложение должно быть.
С ресурсами ничего не происходит
А есть какие-то способы сделать это в принципе? Или принципиально никак не избавиться от того, что перехватывать и обрабатывать эксепшены придется внутри работающего треда?
А чтобы снова сделать исключение обязательным к отслеживанию, я так понимаю, надо делать чтото типа
try{
thread.start()
}catch (RuntimeException rte){
if (rte instanceof MyException) throw new MyException(rte)
}
?
Чем они тебе не угодили? Ну если ты их так не любишь, пробрасывай всегда вверх. IDE это позволяет делать автоматически. Просто бесит что ли срань в коде? Тогда джава в принципе не для тебя, если только ты не какой-нибудь лобколюб
У меня контроллеры и сервисы создает spring data rest. Я даже классы такие не создаю. При этом у сущности department например все работает заебись. Вбиваю в постмен localhost:8080/departments и все ок. А как вбивать имя из двух слов я вообще хз,уже и так и этак пробовал и с подчеркиванием и с дефисом
Вопрос закрыт,надо в кемел кейсе
Теперь эта падла вставляет null значения в поля базы
https://www.google.com/search?q=maven+локальный+репозиторий&newwindow=1&client=firefox-b-d&sxsrf=AOaemvJXVrr7s2rBl9kXHFe10uNjVyFBqA:1635955579683&ei=e7OCYeuMKY3-rgS9tKvQBg&oq=vfdty+kjrfkmysq+&gs_lcp=Cgdnd3Mtd2l6EAMYADIGCAAQFhAeMgYIABAWEB4yBggAEBYQHjIGCAAQFhAeMgYIABAWEB4yBggAEBYQHjoHCAAQRxCwAzoECCMQJzoRCC4QgAQQsQMQgwEQxwEQ0QM6EgguEIAEELEDEMcBENEDEAoQAToOCC4QgAQQsQMQxwEQ0QM6BQgAEIAEOggIABCABBCxAzoICC4QgAQQsQM6FwguEIAEELEDEMcBENEDEAoQARAqEJMCOgwIABCABBCxAxAKEAE6CQgAELEDEAoQAToJCAAQgAQQChABOgsIABCABBAKEAEQKjoKCAAQgAQQChCLAzoPCC4QgAQQ1AIQChABEIsDOgwILhCABBAKEAEQiwM6DAgAEIAEEAoQARCLAzoICAAQgAQQiwM6DgguEIAEEAoQARAqEJMCOgcIABCABBAKOgQIABAKOgYIABAKECo6CAgAEAgQDRAeOgcIIRAKEKABOgkIIRAKEKABECpKBAhBGABQiogWWJauFmCTtxZoAXABeACAAYcBiAHGDZIBBDQuMTKYAQCgAQHIAQi4AQLAAQE&sclient=gws-wiz
Да, сначала лезет в %username%/.m2/repository и ищет там, если не находит, качает.
Я все переменные делаю final, такая у меня привычка. И ты тоже попробуй.
Про любые, которые вы смотрели и можете примерно оценить. Даже если там просто java core.
Самому отсматривать ебанёшься, а за советами ко мне прибегают часто.
Здравствуйте мои дорогие
>надо ли запрос параметризовать, юзаешь или просто Statement или PreparedStatement
Ещё надо добавить, что б не вздумал параметризовать простые запросы через конкатенацию строк, иначе можно получить дыру для sql injection.
>загружается в программу через Class.forName
Ещё забыл: начиная с JDBC type 4 драйвера, его не нужно тянуть руками через класслоадер.
https://www.youtube.com/watch?v=q-d40ZWGcJQ&list=PLm2nrlGYLq1Uv1qYpqMC07JYoOXilEQZI
вот вполне крепкий курс по кору
Деанон-травля же.
Город-миллионник в РФ.
>>202521
>Поясните за Н2
Её, в основном, используют как in-memory database. Профиты в виде использования для тестов, в том числе.
>Если кините как докер компоус составить вообще супер
Миллиард статей и видосов на ютубе по запросу "docker compose spring postgres". C стационарной H2 всё должно аналогично работать. Единственное, если она долго стартует и приложение успевает упасть, то, возможно, нужно будет присрать какой-нибудь скрипт, типа этого https://github.com/vishnubob/wait-for-it
Я так понимаю, что в том, чтобы мы имели возможность самостоятельно обработать возникновение исключительной ситуации, которая не относится к RuntimeException. То, что относится RuntimeException, является непроверяемым потому, что восстановление работы программы после него невозможно/нецелессобразно? Есть вот, например, проверяемое исключение FileNotFoundException. Если мы перед октрытием файла, к примеру, сначала проверим его на наличие, а в следующей строке откроем, все же есть вероятность, что между этими строками файл будет перемещен/удален и поэтому нет способа избежать исключения с помощью проверок. А например, деление на ноль всегда вина того, кто пишет. Такой смысл?
Что ты имеешь ввиду под конкатенацией строк? Если ты сконкатенировал у себя в коде и отправил запрос уже готовым, чем это отличается от того чтобы просто отправить запрос? Или там есть какие-то механизмы отправлять запрос в СУБД кусками?
оно очень примитивно по сравнению хоть с постгресом и обычно не взаимозаменяемо. Может это для всяких мобилок, хз
Нет. Смысл в том чтоб ты не мог проигнорировать факт возможности возникновения проверяемого исключения. Ловить ты можешь в том числе и непроверяемые (ты в трай-кэтч можешь заключить блок кода который бросает рантайм эксепшен, словить его и обработать, просто ты не объзан этого делать. Ты можешь в трай-кэтч заключить вообще что угодно, даже если там никаких исключений не случается, хотя все тело метода, исключив выход чего-либо наружу). Так же можешь и не ловить проверяемые, пробрасывая их вверх во всех мотодах где они вываливаются, вплоть до main (это чревато тем что твоя программа будет наебываться по любому самому пустяковому эксепшену). Короче, у тебя нет прям непреодолимой обязанности делать что-то с ними, они просто как иголки воткнутые в воротник, настоятельно подталкивают тебя использовать их так, как они задуманы.
Иди таблеток прими от нервов, токсик
Откуда нам знать, что тебе интересно? Может, ты так любишь писать бизнес-логику без привязки к языкам и технологиям, что тебе и кобол понравится.
Наверное, возможность поиграться с архитектурой. Интересно делать что-то с нуля, когда дают самостоятельно написать целый модуль или микросервис, там прокачиваешь умение в архитектуру, может понадобиться юзать интересные спринговые фичи, о которых и не слышал раньше. Но такая возможность выпадает не очень часто, обычно надо дорабатывать или фиксить существующее и написанное давно. На больших проектах почти весь спринг скрыт за ядром приложения, и пользуешься в основном всем готовым, никогда не открываешь конфиги, пишешь логику и скучаешь, от спринга юзаешь пару аннотаций.
Создание архитектуры невозможно автоматизировать, это наиболее творческая часть программирования. Можно использовать готовые ее паттерны просто.
Я просто не до конца понимаю, зачем это разделение на проверяемые и непроверяемые и на каком основании они сделаны? Как обращаться, мне понятно. Чтобы обратить внимание? Почему именно на них? Есть ли какая-то смысловая разница? Моё предположение было в том, что разделение основано на том, что возникновение RuntimeException всегда зависит только от программиста, написавшего код, который породил RuntimeException, в то время, как проверяемое исключение (отсутствие файла) гарантированно предупредить невозможно (между двумя строками проверки наличия и открытия он может быть перемещен), потому что там задействованы внешние ресурсы, которые неподконтрольны программисту, написавшему код. Верно ли это?
Не могу тебе на этот счет ничего сказать. Мне это представляется довольно естественным: тебе дизайн языка дает возможность как вынудить пользователя помнить о возможных исключениях при работе с твоим кодом, так и скрыть эту возможность, воспользовавшись анчекед вариантом. Зачем задаваться вопросом, зачем дано слишком много каких-то возможностей? Лучше думать о тех, которых не дано, а надо бы.
Про ситуацию с файлом... опять же не понимаю что не так. Механизм исключений как раз таки тебе позволяет в случае если файл куда-то перемещен не наебнуться при попытке начала работы с ним, а предпринять, например, вторую попытку, указать новый файл, и все такое. И то как оно сделано вынуждает тебя хотя бы обратить на это внимание (хотя ты можешь забить и просто пробросить вверх). Если бы там стоял анчекед, ты бы, возможно, просто даже не стал париться о том что файла может и не оказаться, просто набисал бы логику а потом словил эксепшен. С этой точки зрения, безопасность работы с этим инструментом была повышена через чекед эксепшен.
Анчекед эксепшены они имеют такое свойство, что возникнуть могут буквально везде. Если бы дизайн языка не имел вообще анчекед варианта, тебе приходилось бы буквально каждый математический стейтмент оборачивать в трай-кэтч, потому что вдруг там деление на ноль. Естественно, это уже что-то вроде неоправдявающего себя перебдения за безопасностью. Тебя бы такой стиль просто заебал.
Скорее дело в каком-нибудь web-xml/beans.xml/другом древнем говне.
Нету тут XML , задача ебанутая. Этот конфиг был как дано. Только вот он нихуя не работает и в тестах независимо от того что я меняю в коде стабильно 404
Да.
Но современная джава заточена под большие серверные приложения. И ты такое:
1. Вряд ли запилишь один.
2. Под большой проект нужна большая дорогая инфраструктура.
А если пользоваться джавой для чего то более мелкого, то будешь пользоваться не самым подходящим инструментом, то есть забивать гвозди микроскопом. Так что на джаве пилятся учебные проекты(причем скучные и однотипные), для изучения джава технологий и их возможной демонстрации для джунов. А ты уже не соискатель, то они и не нужны.
>а можно ли на Java написать допустим бампалку для двача или автопостер для втентакле
Да, можно. Берем selenuim и погнали нахуй. Никто не запрещает.
Только не проще ли питон взять для этих целей? Правда вк уже умеет ботов распознавать. А для двача нужен пасскод.
>>203383
>откуда идеи черпаете?
Из головы.
Много идей всяких.
Распределенное отказоустойчивое хранилище данных.
Бот для инсты/vk, который будет на протяжении долгого времени собирать разную информацию и строить социальный граф. Что-то вроде автоматизации построения досье на человека и его окружение.
Система контроля версий для геометрических моделей. Во всяких 3ds max и cad/cam наверное такое уже есть, но все равно интересно самому подобную хуевину сделать.
ГИС система с бекендом на жабе, и с фронтендом на js или c++/rust/wasm. Что-то вроде клона викимапии или народных карт яндекса. Ну и соответственно хранилище для картографических объектов. Хотя это уже излишнее велосипедирование, postgis давным давно существует.
Всякие интерпретаторы/компиляторы/трансляторы. Тут можно много всякого придумать. Но какой-нибудь транслятор Verilog -> VHDL было бы интересно запилить, правда такой уже наверняка есть.
Как-то так. Можно хоть всю жизнь писать, работы дохуища в каждом из проектов. Как инженерной, так и исследовательской. Другое дело, что их писать можно на любом другом языке, не обязательно на жабе.
А вообще идеи для проектов берутся легко, если у тебя есть кругозор какой-никакой. Ну то есть, если ты последние 6 лет только лишь скроллил двачи 24/7, то ничего кроме скачивателя вебмок из фаптредов и автобампа тебе на ум не придет. Нужно кругозор расширять.
>Система контроля версий для геометрических моделей. Во всяких 3ds max и cad/cam наверное такое уже есть, но все равно интересно самому подобную хуевину сделать.
Вот об этом тоже думал, остальное в голову вообще не приходило.
>кругозор какой-никакой
Вот это точно. Устраивался впервые на одну работу, связанную с продажами - сразу понял что там можно автоматизировать. Правда решение для этого уже существовало. А так как я больше нигде не работал и не знаю других воркфлоу, то и идей, соответственно, нет.
>Система контроля версий для геометрических моделей. Во всяких 3ds max и cad/cam наверное такое уже есть.
А что, обычный гит этого не сумеет? Это же просто бинарные данные о геометрических примитивах в составе модели
Професси-анально работал в 3DMax несколько лет - там такого не было (правда это было много лет назад)
Что это значит? Или ты просто зеленишь? Я правда не понимаю.
То есть я понимаю что наверное вся важность спринга раскрывается вместе с прочими его компонентами типа бута, мвс, секьюрити етц. Но вот если взять кор в вакууме то это какая-то муть имхо
Ну, кор в вакууме редко используется.
У тебя есть 100+ объектов. Тебе их нужно создать, настроить, проинжектить. Скорее всего придется делать какую-нибудь фабрику и изобрести спринг и каждый раз ее править, когда что-то меняется. Получаем огромный класс-помойку, на котором постоянно мерж конфликты, в который лучше не лезть вообще и тд и тп
Еще так и не понял пока что, как создать несколько бинов из одного класса, но с разными значениями values. В файле пропертиз дублирование не допускается же
Можешь через конфиг:
@Configuration
public class MyConfig {
@Bean
public MyBean foo() {
return new MyBean();
}
@Bean
public MyBean bar() {
return new MyBean();
}
}
И при автовайринге юзать @Qualifier
Ты путаешь архитектуру и инфраструктуру.
Ищи в книге
2015 Spring 4 для профессионалов, страница 44
или
2019 Spring 5 для профессионалов, страница 67
Там будет часть "Помещение Spring в приложение Hello World!"
Вот отсюда и до конца главы прочитай эти 7-8 страниц.
Мне на нескольких собеседованиях задавали вопрос, нахуя он нужен, поэтому я очень внимательно перечитывал это место.
https://www.youtube.com/watch?v=szI5sza6Wug
https://github.com/inponomarev/java-mipt/tree/master/di-example
я только простой пример видел, без класслоадеров.
Через jpa repository делаю,там автоматом
А почему бы тебе самому тогда не поискать более глубоких знаний самому? Это же джава, здесь все миллион раз придумано до нас. Возьми и погугли хорошенько на английском. Залезь в сорцы самих di-фреймворков.
Я о таком честно говоря не задумывался, меня все эти аннотейшн процессторы, рефлексия и класлоадеры не возбуждают. Но что там такого сложного, если есть желание повозиться?
Сложного ничего, у меня просто в голове крутится идея объединить аннотейшн процессор и сервис лоадер, но я не понимаю, как. Они друг с другом никак не стыкуются на первый взгляд.
По аннотациям можно генерировать
META-INF/services/...
но это нахер не нужно. Уж лучше сразу на базе аннотаций генерировать код который будет инициализировать классы при старте.
Да
Возможно, если послать нахуй нормализацию.
Ну если у класса MyBean есть поле примитивное, например int someInt, как я создам два бина с разным значением из конфиг-файла? Пока что я вот такой способ нашел, но только через конструктор:
@Value("${myBean.someInt}")
int someInt;
@Bean
public MyBean myBean() {
return new MyBean(someInt);
}
а почему не сохранить в нормальную базу? н2 это же для тестиков в инмемори режиме.
Возьми sqllite.
ну шерсти доку н2. Гуглится плохо, ибо твой кейс мало кому нужен в реальной жизни.
А че за курсы такие?
Ноунейм шарага в новосибе,блять как же я заебался,второй день с этой базой сраной ебусь и не могу дальше пройти.Ненавижу ебучую Н2,горите в аду создатели этого говна.На постгрес переключаешься и все волшебным образом работает
Нет,производство визуальных новелл на джаве является преступлением против человечества
Существуют движки VN, написанные на жабе. Но для скриптинга юзаются другие языки типа Lua, ибо жаба компилируемая, в ней нет питоньего eval/exec.
А доебаться до самого препода/сокурсников?
У тебя прям в задании так написано что ли - "Берите именно H2, допишите его исходники, чтобы научить делать то, чего он не умеет, затем уже пилите свой круд"? Почему нельзя взять SQLIte, который и умеет сохранять в файл без сервера, и поддерживается хибернейтом?
То есть есть сущности например department и employee. У department есть лист employees и метод allToEmployees. Так вот,как и где вызывать этот метод? Реализации круд операций за нас то реализованы
Я пукнул хихи)
Намекну. В этом треде все сидят исключительно с целью найти работу или поднять своё ЧСВ. А похлебать борщи можно на чём-нибудь поинтереснее спрингокваркусов.
сильно сложно менять схему в базе, где уже много данных? Как это происходит?
Обычно несложно, пишется alter table + апдейтов, и всё. В сложных случаях что-нибудь местные базисты могут подсказать.
Я скорее имею ввиду бюрократически что-ли. Мне просто кажется это большая ответственность. Проекты старые и большие.
"менять схему" в большинстве случаев это просто добавление новых таблиц и колонок, количества данных роли не играет
Если кто-то что-то сломает, выявляют и чинят достаточно быстро. До релиза это проходит несколько этапов тестирования на тестовых схемах БД, при проблемах всегда можно восстановить бэкап.
Они везде есть, сначала их катят на тестовых, затем уже запускают на проде.
Поднять ЧСВ - это пилить на чистой джаве. Наблюдая местные высеры, зачастую можно подумать что спрингодети уже просто не умеют ничего делать вне фреймворка.
Те, кто умеет, ничего не спрашивают.
Что вообще пишется на чистой джаве и нахуя? Наоборот на голой джаве пишут дети, когда джаву учат.
плагины к браузеру
Curl
Постман
Тот же вопрос интересует, но не именно про тесты, а вообще про все популярные направления спринга: boot, data, mvc, security, orm, etc.
Так прямо в самом любом гайде по юнитам начинают с теста к сервиса, где сервис автовайрят, а репо и другие компоненты, от которых завист сервис мокаются. Этот один автовайр разве не поднятие контекста?
Если автовайр встречается вместе с моками, то это значит, что часть зависимостей все равно обеспечиваются спрингом. То есть это интеграционный тест.
Хз, что за гайды у тебя, но
1. если ты в сам тест заавтовайрил сервис, но дальше тестириуешь только один сам этот сервис, а зависимости его мокаешь, то это по сути именно юнит-тест, хоть даже спринговый контекст чуть-чуть где-то сбоку там участвует.
Могу кстати заметить, что в типичном энтерпрайзе полезность юнит-тестов очень ограничена. Нет ничего более глупого, чем мокать репозитории, и сводить тест к проверке того, что сервис действительно вызывает у репозитория нужный метод.
2. с тестами есть эта вечная путаница с терминологией. Частенько юнитами называют любые тесты, которые являются частью проекта, запускаются вместе со сборкой, и не требуют участия внешних систем. Ну типа раз через junit запускаются, значит unit, и похуй, что там в нем.
Так нельзя :( помогите
Хотел использовать timestamp-поле для postgresql, но там не юниксовый timestamp, а какой-то свой. В итоге, пишет неправильно.
>Есть спринг бут приложуха,для создания одной сущности требуется еще две другие.
Ты сделал какую-то херню. Родительская сущность должна всегда создаваться первой и без дочерних. Персистишь ее и уже потом создаешь дочерние и линкуешь к родительской.
Работаю макакой-тестировщиком, периодически приходится писать простенькие заглушки на Спринге, которые отвечают 200 OK, но делаю это я в общем-то интуитивно. Ну а как дальше? Есть ли смысл в курсах конкретно по Спрингу,что почитать, с чего вообще начинать?
>Хотел использовать timestamp-поле для postgresql, но там не юниксовый timestamp, а какой-то свой. В итоге, пишет неправильно.
Если неправильно пишет -то 99% у тебя стоят разные таймзоны на сервере с постгресом и сервере с приложением. В общем или поменяй тип поля на long или в бине используй ZonedDateTime а в базе timestamp with time zone
>Поднимаешь контекст - интеграционный
Ебанулся что ли? Интеграционный тест проверяет интеграцию между системами и у тебя должны не контексты подниматься, а сервисы целиком деплоиться.
>но делаю это я в общем-то интуитивно
Да вообще писать продакшн-код тоже так можно по началу. Если ты не дурачок, базовые принципы понимаешь, уже что-то написать в состоянии, то вполне может хватить официальной документации.
>>204987
пока лучше всего мне зашел курс от отуса(есть на nnm-club). >>191161
Я целых пол года по 5 разным гайдам/ютуб каналам/книгам дрочил спринг core, boot, jdbc, data, mvc, правда до security так и не добрался, Но вот иду по отусу, посмотрел пока 7 видосов из 40 и узнаю много нового(судя по названием тем я знаком с содержанием первых +- 17 видосов, но где-то на 70%).
Много бойлерплейта(прям как в джаве), лишнего балабольсва, разговоров с аудиторией. 80 часов видео при грамотном монтаже можно было бы урезать в 2.5 раза. Если первый раз знакомишься со спрингом наверно все таки кое-что, но немногое придется гуглить. Например все по базам там на h2, а не на нормальных postgres/mysql. Но костяк весь есть и понятно будет,что гуглить и какие гайды читать.
Ну а потом практику думаю норм отсмотреть. Например книга spring in action. Я с нее начал и там просто ничего не объясняется, тупо пользуются кучей магии.
Может дело во мне, но вот такой у меня опыт самообучения, может кому тут пригодится.
>>205227 - кун
>Во, вот как раз я и говорил о мутной терминологии.
Все нормально с терминологией, просто надо почитать пару мурзилок про теорию тестирования.
Юнит тесты тестируют отдельные классы и поведение публичного API этого класса, если у класса есть зависимости их обычно мокают, для предсказуемости поведения. Это тесты для разработчиков.
Функциональные тестируют бизнес функционал. Можно тестировать как через REST API подняв сервис целиком, но иногда можно поднять контекст и тестировать функциональность вызывая методы у класса. Главное что тестируется бизнес функциональность, а не API класса. В общем-то это основной тип тестов для проверки, что система соответствует требованиям бизнеса.
Интеграционные тестируют интеграцию между системами. Поднимается несколько систем и смотрят как они между собой взаимодействуют. Тут тестируется, что разрабы из разных команд успешно договорились про API, формат данных, порядок взаимодействия и прочее. Тут тестируют базовые сценарии, весь функционал тестами, как правило, не покрывают.
>просто надо почитать пару мурзилок
О, спасибо за совет, действительно, как же разобраться без "мурзилок".
Вот, например, всем известная музрилка baeldung https://www.baeldung.com/integration-testing-in-spring
действительно описывает, как поднять несколько систем, чтобы проверить договоренности о порядке взаимодействия, ну да
>Все нормально с терминологией, просто надо почитать пару мурзилок про теорию тестирования.
Ты теоретик обоссаный или хочешь нормальные тесты писать?
>Функциональные тестируют бизнес функционал.
>Интеграционные тестируют интеграцию между системами.
https://www.youtube.com/watch?v=Lnc3o8cCwZY
То есть в этом видосе автор попутал и LoginTest это функциональные тесты, а не интеграционные?
Да, весь мир все попутал, и только на дваче, как обычно, четко все разложили
Ну вот есть у меня книга,у книги есть автор и жанр. У жанра и автора много книг,у книги один и жанр и автор. При создании книги я должен передавать и автора и жанр,а там по несколько полей. Я хочу тупо их айди передавать
Это мурзилка "как протестировать", а не "зачем и что тестировать".
>>205286
>Ты теоретик обоссаный или хочешь нормальные тесты писать?
Кстати, такие мудаки как это реально проблема индустрии. Сейчас стало модно заставлять разработчиков самих тестировать свой код, но при этом никто не подумал, что разрабы плохо понимают тестирование. Зачем пишутся тесты, какие тесты бывают, а уж выражение "тестовый сценарий" для большинства разрабов звучит как ругательство.
>>205293
>То есть в этом видосе автор попутал и LoginTest это функциональные тесты, а не интеграционные?
Да, он даже сам вначале говорит что будет тестировать функционал логина. Если бы он тестировал OAuth2 авторизацию, через сторонний SSO сервис - это был бы интеграционный тест. А это чисто функциональный тест.
entityManager.getReference()
Спасибо за ответ!
Не уверен, что дело именно в таймзонах, потому как была бы куда меньшая погрешность. А так, выходит, что я вношу unix-timestamp типа 2021-10-25 само собой, лонговой строкой, для облегчения понимания дату написал, а из базы селектом что-то типа 1970-01-19 выходит. Как-то так.
Видимо, всё же придётся менять на лонговое поле.
А есть эта хуитка на нормальных торрентах? по каким словам искать? курс отус по спринг или сорт оф?
еще один вкатун
чел, ну тебе же все равно придется дохуя гуглить.
https://nnmclub.to/forum/viewtopic.php?t=1474084
А чистый spring jdbc в проде c нагромождением RowMapper-ов и ResultSetExtractor-ов это муторно.
А тут топили за чистый jdbcTemplate.
>и кто пиздит или не шарит
Ты может удивишься, но в этом нашем ремесле обычно так не бывает, что способ X в 100% случаев это единственный правильный вариант, а способ Y это однозначно зашквар и кто так делает не шарит. Если б все было так просто и однозначно, тут бы и не платили 400к/наносек, быть может. И то используют, и то; в каких-то случаях что-то муторно, в каких-то вполне приемлемо. Кто-то больше любит одни подходы, кто-то другие. Многие вещи вполне можно нормально сделать и так и сяк, и выбор будет зависеть просто от вкуса, привычек, того, с чем больше знаком.
Thymeleaf и шаблонизаторы вообще - нужны ли они бекенд разработчику на реальной работе с реальными проектами, или это хрень, которая во всяких уроках юзается только чтоб как-то видеть как данные выводятся в браузер?
Я совсем пока не понимаю как происходит стыковка работы приложения и итогового фронт-энда. Может кто-то скажет в двух словах как данные которые выдает контроллер превращаются в настоящие нормальные страницы, вроде двачевской.
просто один только тимлиф можно изучать кучу времени, хочется быть уверенным что это не совсем зря и что запоминать его стоит на долго, а не ради уроков
вот он боейлерплейт джавовский. Суть фразы из 3 слов
>бывает по разному
завернул в 1000 знаков.
хтмл - это строчка. таймлиф внутренней магией меняет куски строчки. и строчку отдает на фронт. Не советую вникать, просто повтори примеры в источнике механистически и переходи к ресту.
> это хрень, которая во всяких уроках юзается только чтоб как-то видеть как данные выводятся в браузер?
Обычно да, но ситуации разные. Бывает, делают внутренние тулзы для облегчения разработки, которые юзают только разрабы и тестеры, но не пользователи, и там может быть что угодно, на чём даже вакансий нет, хоть таймлиф, хоть свинг. Это всё по необходимости, на собесе за незнание таймлифа никто не завернёт.
> Я совсем пока не понимаю как происходит стыковка работы приложения и итогового фронт-энда. Может кто-то скажет в двух словах как данные которые выдает контроллер превращаются в настоящие нормальные страницы, вроде двачевской.
На более-менее современных проектах юзают SPA: на бэке только рест апи, и отдельно существует проект с фронтом на каком-нибудь реакте, который деплоится на какой-нибудь nginx и просто дёргает апишку.
>который деплоится на какой-нибудь nginx и просто дёргает апишку
я короче захотел как то докеризировать отдельно фронт, отдельно спрингбутовое приложение, отдельно nginx с js-ом. Ну и короче я сломался в настройках nginx. Полдня потыкал и забил(пришлось отрубить cors в spring security).
Уметь настраивать nginx это вообще релевантно для джависта? Я знаю это всяким там фулстекам на пхп надо. Вроде хочется покопаться, но жалко времени, и так в планах на изучение много материалов.
>>205575
Спасибо, аноны
>на бэке только рест апи
Ну, вот например сейчас я вижу в уроках что спрингом делается мэппинг какого-то запроса на метод контроллера, который выдает (везде, что я пока посмотрел) просто строчку с названием представления, после чего спринг сам что-то там связывает и выдает в браузер.
А на реальных проектах куда попадает аутпут метода с мэппингом и что в нем вообще лежит?
Сорян за тупые вопросы, можете если что просто послать в гугол
> Ну и короче я сломался в настройках nginx. Полдня потыкал и забил(пришлось отрубить cors в spring security).
Вроде, делается несложно через proxy_pass.
> Уметь настраивать nginx это вообще релевантно для джависта?
Нет, ты не девопс, разве что для общего развития. В пхп-мирке не могут себе позволить отдельно фронта, отдельно бэка, отдельно девопса, отдельно лида, вот и приходится им учить всё.
> Ну, вот например сейчас я вижу в уроках что спрингом делается мэппинг какого-то запроса на метод контроллера, который выдает (везде, что я пока посмотрел) просто строчку с названием представления, после чего спринг сам что-то там связывает и выдает в браузер.
Есть просто контроллеры (@Controller, которые Spring MVC), а есть рест-контроллеры (@RestController). Контроллеры да, возвращают название вьюхи, но рест-контроллеры возвращают объект, который надо сконвертировать в JSON и отправить фронту.
Ну в просто контроллере он отдает штмлку/динамически измененную шаблонизатором штмлку(которую он берет из файла с "представлением") строчкой в теле http ответа. А в ресте в теле тоже в виде строчки будет сериализованный объект. А штмлку тебе нарисует жс внутри браузера.
Короче почитай статьи про основы http и rest.
Если уж зашла такая тема, то что нужно изучить дополнительно к спринг чтоб обрести статус неформальный full-stack? Реакт? что-то еще?
Да, реакт и всю трендовую веб-парашу с вебпаками и популярными либами. Ну и девопс - разобраться хотя бы в докерах-куберах-нгинксах.
https://hh.ru/search/vacancy?area=&fromSearchLine=true&text=Full+stack+Java+Spring
Кто нам нужен - full stack developer, который:
Имеет опыт коммерческой разработки от 2 лет
Хорошо знает Core Java, Spring
Знает Angular, RxJS, TypeScript
Владееь технологиями HTML 5, CSS 3 а также знание препроцессоров
Знает стек TCP/IP; Знает работу с HTTP, WebSockets
Умеет работать с инструментами: Webpack, Jest, Cypress, Docker
Готов читать задачи и доводить их до работоспособности (важный редкий навык!)
И сколько за это обещают в этой вакансии и в реальности сколько это стоит в сравнении с голым беком?
Хз, обычно фулстеки со спрингом это мидлы/синьеры.
Для вкатунцов фулстек это как раз всякое странное говно на фронте типа шаблонов/jsp/ваадина, примеры совсем странного велосипедного говна.
jdbcTemplate есть из коробки в спринг буте. А твой спринг-дата я хуй знает.
Второе. Знаешь зачем это нужно? Если нужно сделать хитровыебанный запрос, или всякие хранимки, или специфичные функции субд, типа там массивов или геоданных.
Я сильно сомневаюсь что @Query сможет обработать такие штуки
Ну челик говорил, что сложные агрегации с которыми хибер плох он делает на майбатисе и это ему проще чем на темплейте. А про новую спринговую поделку просто сказал что небесполезно.
Эти челики для меня не авторитеты. Я просто украл их курс и смотрю.
Объект уже существует и сделан не мною, нужно уже под него спроектировать схему. Так бы, само собой, взял бы нормальный дэйт.
Ты за 2000 год смотришь? И как тебе лекторы?
Я 2018 украл, там один тип всё рассказывает, говорит быстрее, в сон с него не клонит, как с Колыбельного.
2020
Самый частый, толстый такой лысый - реально плох в плане умения рассказывать. Плюс, если отходит от плана, то там точно сделает опечатку, которую 2 минуты будет искать. Но вроде шарит и сам план норм. Слушать тяжело. Очень хочется монтажа. Пришлось даже через метод помидорки это смотреть. Но инфа мне нравится.
>>205366
>>205052
Проблема была не с БД, а со старым говнообъектом даты.
Может кому понадобиться - не пытайтесь просто взять и вкопипастить лонговое значение unix-time в сраный Date()-конструктор - он засетит его неправильно. Инициализируйте объект через другие конструкторы даты, например, через GregorianCalendar SimpleDateFormat.
>не пытайтесь просто взять и вкопипастить лонговое значение unix-time в сраный Date()-конструктор - он засетит его неправильно
И почему же?
Скорее всего, потому что он принимает unix-time расширенный, в миллисекундах. Можешь попробовать туда засетить unix-timestamp и умножить его 1000 - может заработает.
>пока лучше всего мне зашел курс от отуса(есть на nnm-club)
Ссылкой, конечно же, нельзя поделиться?
>Скорее всего, потому что он принимает unix-time расширенный, в миллисекундах
Ну то есть стандартный формат, о чем и в джавадоке написано https://docs.oracle.com/javase/8/docs/api/java/util/Date.html#Date-long-. Ты-то нахуя ему секунды кормил?
И слава богу.
конечно же, нельзя.
Скажите на какую ЗП устроились, в каком городе и стек технологий, который у вас был и какой был необходим.
>Ну то есть стандартный формат
Это не стандартный формат. В стандартном формате unix-time принято указывать с секундной точностью.
>о чем и в джавадоке написано
>Ты-то нахуя ему секунды кормил?
Потому что до открытия доки это было неочевидно. Я просто вставил стандартную секундную строку и пошёл искать поломку в другом месте.
Мухосрань-милионник, 60к
Не могу сказать что смог, просто вписался в разношерстный ИТ-отдел одного пром-предприятия, где вообще лютый треш и салат из всякого легаси-говна чуть ли еще не на бейсике и 1С-хуиты. Я просто имел много идей по бизнес-логике, и сказал что реализую все сам, но работать буду на джава, подключая все свое дерьмо как что-то вроде микросервисов к единой почти корпоративной БД. В итоге я там сам себе и архитектор и реализатор. Поскольку я еблан, пилю всю свою шнягу на чистой джаве (кор + ждбц + всякие прикладные вещи).
Хуйня, конечно, потому и зарплата по меркам отрасли нищая. ХЗ зачем я это высрал, но тоже своего рода опыт.
>Это не стандартный формат. В стандартном формате unix-time принято указывать с секундной точностью.
Нет, стандартный как раз в миллисекундах. В джаве же нет метода System.currentTimeSeconds(), или ты результат System.currentTimeMillis() на 1000 делил всегда?
Померил у себя на компе - память ддр3, база постгрес на ссд сата3. Считал через System.nanoTime().
Ну вот простое обращение к полям объекта - 1-3к наносек.
А вот первый запрос к постгресу(я делал инсерты), что через jdbc, что через хибер это 20-60 кк наносек.
Правда со второго по десятый инсерт(тут только на jdbc пробовал) например это уже 150-400к наносек. Но все равно 2 порядка разницы с java-объектом.
Первый инсерт это время подключения к базе походу.
То есть
- подключение к базе - 50 миллисекунд(как пангинуть до франкфурта),
- простой инсерт в базу это 300 микросекунд,
- обращение к объектам 2 микросекунды.
И это на очень простых запросах и пустых базах. На крутом серверном железе разница будет максимум в пару раз.
Правильный порядок цифр?
>Нет, стандартный как раз в миллисекундах.
Алло, это в жаве он стандартный в миллисекундах.
А в стандарте unix-epoch он в секундах:
>Unix-время представлено целым числом, которое увеличивается с каждой прошедшей секундой без необходимости вычислений для определения года, месяца, дня, часа или минуты для удобства восприятия человеком. Современное Unix-время согласуется с UTC — отсчет происходит в секундах СИ.
ты измерял на локалхосте, и считаешь эти данные показательными, я правильно тебя понял?
Ну считаю минимумом. Ясно, что база часто на другой машине. Но я не могу так проверить.
А какие порядки цифр показательные? Я в хаброответах вообще нагуглил, что 200 миллисекунд на сложный многосоставной селект это многовато, не не то чтобы очень.
Просто хочется понимать порядки цифр и насколько например кешированный объект сэкономит времени для полного цикла запроса в рест-приложухи от нажатия кнопки на фронте до перерисовки компонента на фронте же.
Хз, но сталкивался, что когда приложуха крутится на локалке, она выдает стабильную и большую скорость, когда же начинается работа с удаленным сервером это становится довольно плавающей характеристикой - может и быстро прогрузиться, может и подлагнуть иногда. Я бы придерживался стратегии хранить в памяти такие данные, которые нужны неоднократно (например на весь сеанс работы), и такие которые герантировано не сожрут много памяти (например, какие-нибудь весьма ограниченные списки). Если возможны селекты больших объемов данных, можно сделать логику, которая кэширует в память весь пул кусками, например по 500 объектов (после работы пул очищается и ты лезешь за некст 500). Это позволяет не селектить каждый объект отдельным запросом, но в то же время не пытаться закэшировать сразу 100500 рекордов, рискуя получить аут оф мемори.
Сугубо мое мнение и практика, может нормальные люди так и не делают.
Охотно верю, что пагинация в кеш это норм вещь, думаю там много конкретных способов оптимизации. Но хотелось бы про какие-нибудь порядки цифр узнать для общих случаев.
Для чего тебя порядки цифр? Вот какая нахуй разница отдашь ты данные через 200 миллисекунд после нажания кнопки или через 1 секунду?
простые запросы по индексированным полям - десятки милисекунд.
Сложные оптимизированные запросы - сотни милисекунд. Плохие запросы - секунды. Очень плохие запросы - минуты
Понимаю, что это все довольно условно, в то же время какая-то примерная грань существует. Пусть каждый и определяет для себя сам оттенки.
Расскажите о своем становлении. Как вы поняли что уже на уровне мидла? Сколько времени это заняло(может занять)? Мб есть какие-то конкретные хардовые критерии уровня.
Интересно узнать, чтобы хоть какой-то ориентир и цель иметь
Здесь в основном сеньоры, это же борда для успешных людей.
По моим ощущениям - все действительно очень условно, определяется больше ролью на конкретном месте, чем какими-то "хардовыми критериями". Для себя никогда не задавался таким вопросом - перешел ли я уже на конкретный "уровень" или нет - и неплохо себя чувствовал.
В качестве ориентира и цели лучше иметь либо размер зп, либо задачи/проекты/предметные области, которыми хочешь уметь заниматься, а не условную лычку мидла или сеньора.
>Алло, это в жаве он стандартный в миллисекундах.
А ты программируешь на джаве или на стандарте unix-epoch?
Я программирую на языке жопаджава, в котором и так многое стандартизировано, потому что один прикладным языком весь мир не ограничен. Например, работа с ФС для JVM регламентирована стандартами окружения, в котором она запущена.
Поэтому неочевидность несоответствия каким-то общепринятым стандартам - это вполне себе причина для неожиданных ошибок в коде.
пиши на голом жсе.
Юзай гитовые патчи
Сучара, ты почему в джава треде это пишешь?
Если нет цели представиться (недо)фулстеком, а хочется потыкать что-то для себя, так чтоб не голый сваггер, можно много чего придумать. Да хоть декстоп клиент к своему рест-апи сделать.
Я добавил зависимость в POM, вылезла какая то ошибка что он там чето не может, ну хуй с ним, я эту зависимость удалил, и теперь этот ебучий мавен не собирает приложение с ошибкой Could not transfer artifact "зависимость" from/to nexus
НО БЛЯДЬ УДАЛИЛ ЭТУ ЗАВИСИМОСТЬ СУКА, КАКОГО ХУЯ И ГЛАВНОЕ ОТКУДА ОН БЕРЕТ ИНФУ, ЧТО ОН ТАМ ЧЕ-ТО НЕ МОЖЕТ СДЕЛАТЬ С ЭТОЙ ЗАВИСИОМСТЬЮ, КОТОРОЙ СУКА НЕТ В ЭТОМ ЕБУЧЕМ POM.XML.
у МЕНЯ СЕЙЧАС ПЕРДАК РАЗОРВЕТ.
ААА БАЛЯЯ ГОРИШЬ?)))
Нихуя не понятно и выглядит противоестественно
Попробуй clean refresh
Брекпоинты в контроллере не работают. 2 вечер рецепты из гугла перебираю, но нихуя.
Как формулы распозновать? Парсер логических выражений я написал , но толку от него мало потому что на вход не подаются числовые значения. Вопрос в том , как парсить эти выражение на наличия аксиом. Я думаю что можно исходное выражение парсить , пока оно не сократиться до адекватных размеров и там уже перебором решать. Но не понимаю как это сделать , ведь названия переменных в исходных выражениях могут быть рандомными.
>Вопрос в том , как парсить эти выражение на наличия аксиом.
Ты мешаешь в кучу, 2 несвязанных вещи:
1. Парсить надо по грамматике - можно регулярками токенизировать, потом строить дерево синтаксического разбора, но если есть формальное описание синтаксиса лучше взять antrl и сделать нормальный парсер.
2. После того как распарсил АСТ - уже начинаешь вычислять, вот твои аксиомы и пригодятся.
ди нахуй)
Сам нашёл.
Мой парсер может распарсить по грамматике и посчитать выражение если заменить все на 1 и 0. Но я не понимаю как сократить выражение , если оно содержит в себе аксиомы.
>можно регулярками токенизировать
Шо это значит.
>Мой парсер может распарсить по грамматике
Что твой парсер выдает как результат парсинга? Реальный парсер должен выдавать синтаксическое дерево. Подозреваю что твой, просто eval какой-то делает.
Чем реже перекаты - тем меньше клоунады от шарпоблядей с 1 по 500 пост каждого треда.
Да, до 500 с сажей, потом можно расслабиться. Я тоже к этому пришёл.
>Hibernate: select document0_.id as id1_0_, document0_.name as name2_0_ from document document0_
Проект - легаси, контора в которую я устроюсь уже третья или четвертая, кто поддерживает проект. И к софтине пользователь предявляет много новых требований. Особенно по интеграции.
Расскажите что это означает для джуна. Особенно в условиях того, что штат небольшой.
Хоть даёт, хоть не даёт, это блять не имеет значения, тред про жабу, а не про шарп.
чтобы избежать проблем при джойнах колонок с одинаковым названием
Есть еще мнения? Интересно узнать
Вчера стримили новый дотнет, он в 4 раза быстрее жээвы. Надеюсь на рыночек это не повлияет
И еще вопрос. Я учил современный спринг, свои холоворд-круды писал на последнем. А на проекте будет 4.2. Там все сильно отличается?
Да, в худшую сторону.
И в 16 раз быстрее го?
Бля, не тот тред
Какая красивая девочка, да уже, это точно не в наш тред.
>Может там просто долбоебы бенчмарки готовили?
А может наоборот профессионалы, которые знают как написать тест чтобы CLR был топчег, а JVM наоборот отстой. Например достаточно создавать кучу мелких объектов в JVM и использовать value type в .Net - и вуаля, JVM тормозит на GC а .Net на коне. Или использовать в JVM BigDecimal, а в .Net - Decimal и делать много вычислений.
Точно, благодарю. Ощущения на кончиках пальцев.
Мой парсер численный ответ выдает. Скобки он тоже понимает. Порядок выполнения вроде бы тоже. Сори за тупые вопросы, но eval это что ? А как он это дерево выдает ? Я делаю методом рекурсивного спуска его мне собсна и показывали на лекции, тока написанного на Си
АНТЛР выучи и не еби мозгу
Представим что есть класс SomeData, который внутри содержит строковый массив:
@Data
public class SomeData {
private Sttring words[];
}
Контроллер:
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public SomeData doIt(@RequestBody SomeData object) {
return object;
}
В итоге передаю Json следующий через постман:
{
words: ["двачер", "тяночка", "Тони", "лайф"]
}
Но потом все валится с ошибками, т.к. массив в итоге остаётся null. Как правильно передавать массив и принимать их со стороны Spring Boot? Может быть в Spring Boot что-то ещё дополнительно надо описать, чтобы он принимал массивы?
Класс ReentrantLock, реализующий интерфейс Lock, также, как и synchronized, обеспечивает многопоточность, но имеет дополнительные возможности, связанные с опросом о блокировании (lock polling), ожиданием блокирования в течение определенного времени и прерыванием ожидания блокировки. Кроме того, ReentrantLock предлагает гораздо более высокую эффективность функционирования в условиях жесткой состязательности. Другими словами, когда несколько потоков пытаются получить доступ к совместно используемому ресурсу, виртуальной машине JVM потребуется меньше времени на установление очередности потоков и больше времени на ее выполнение.
В переводе reentrant может означать повторно используемый (повторный вход). Что может означать блокировка с повторным входом? Это учет количества получения определенных блокировок. Т.е. один и тот же поток повторно получает одну и ту же блокировку. Но для того, чтобы реально разблокировать необходимо уже будет два раза снять блокировку. Это аналогично использованию synchronized; если поток повторно входит в синхронный блок, защищенный монитором, то блокировка не будет снята при выходе потока из второго (или последующего) блока synchronized, блокировка будет снята только когда поток выйдет из первого блока synchronized, в который он вошел под защитой монитора.
Одним из интересных методов интерфейса Lock и его реализации ReentrantLock является запрос блокировки с возможностью прерывания процесса ожидания. Т.е. если поток запрашивает блокировку методом lockInterruptibly() и не получает ее сразу же, то переходит в процесс ожидания. Методом interrupt работу потока можно прервать. Тогда ожидающий блокировки поток просыпается, и генерируется исключительная ситуация InterruptedException. После этого попыток доступа к защищенному ресурсу (получения блокировок) не делается и освобождать блокировку не требуется.
не вижу ничего смешного, такова многопоточность.
А у нас в компании противоположный слушок.
Разные есть мнения на этот счет. Работать нормально будет и то, и то. Хазелкаст получше в основном тем, что его удобно встраивать, а редис это всегда отдельный сервис, дополнительная devops-нагрузка
>Я делаю методом рекурсивного спуска
Не уверен, как его тут применить. Я бы просто взял ANTLR и сгенерировал парсер, для таких булевых выражения она должна быть несложной, а потом уже можно пройтись по дереву делая замены для правил которые попадают под аксиомы
Начать можно с этого примера https://stackoverflow.com/questions/30976962/nested-boolean-expression-parser-using-antlr
вначале реализовать свою грамматику, заимплетентить EvalVisitor без аксиом, потом добавить замену аксиом.
Оно на критерии написано. А много где прям нелюбовь к критерии встречал.
Ты никогда не станешь даже стажером, если не умеешь покрывать код тестами. Сейчас это базовое знание даже для новичка.
Типа так и пишут, что ты только тесты будешь писать за другими, а больше мы тебе ни к чему не подпустим? Мне кажется, даже если так и есть, то в этом в вакансиях не признаются.
>>209935
Признаются, если вакансия называется типа "Автоматизатор ручного тестирования" и в обязанностях "Писать автотесты". Перекатиться в нормальную разработку потом да, будет труднее. Есть такой сиереотип, что у автоматизаторов квалификация ниже и кодить они умеют хуже, и поэтому при переходе на другой проект, услышав, что ты раньше писал автотесты, могут захотеть тебя опять посадить за них. Часто даже бывает, что автоматизаторами становятся после обычных ручных тестировщиков, когда они начинают изучать кодинг.
Я и так не использую, предпочитаю конструктор клонирования. Но, во-первых, я ковыряюсь в говнолегаси где это сделано, и все места там зарефакторить будет сложновато. Ну и в основном спрашиваю просто потому что бесит, когда что-то непонятно как работает, тем более в такой базе (хоть и мусорной)
>Там происходит что то с использованием рефлексии, или я просто что-то плохо понимаю? Как это срабатывает?
Там не рефлексия, а нативный код JVM memcpy скорее всего. Но тебе на это пофиг, тебе надо знать какие эффекты есть для тебя:
1. Конструктор не вызывается.
2. Копируются все поля, для ссылок копируются только ссылки.
3. Поведение можно переопределить с помощью внезапно переопределения метода clone(). Т.е. ты можешь заменить клонирование на конструктор копирования хотя это и не рекомендуются.
Все эти свойства и особенности использования этого говна я знаю. Не знал только, как оно это умеет делать, думал что может упустил какие-то полезные умения джавы, относящиеся к "публичным" инструментам языка. Если оно работает чисто магически, то хуй с ним. Спасибо за ответ.
при том, что есть еще рест-веб клиент с велосипедами на фронте.
для госов.
что мне ждать?
Все нормально.
> soap с виндовым клиентом на жаба8 это сильно больно?
Что "это"? Больно юзать SoapUI? Больно писать с нуля свой велосипедный аналог SoapUI? Больно писать клиентское приложение, работающее через SOAP?
Я сам пока не понял, что там. Может поддерживать клиент, может переписывать его на веб-морду. Явно нужно будет дописывать модули для сервера.
Я вообще пока не знаю soap.
90% современных роликов это рест с spa-фреймворком.
Нагуглил себе "мурзилок" и видосов. Сейчас буду вкушать.
Пока выглядит сильно сложнее реста. Особенно хеловордный пример на spring.io, но там класс домена отсутствует в исходниках и генерируется с xml-ки. Это прикол соапа или еще откуда-то?
> класс домена отсутствует в исходниках и генерируется с xml-ки
Соап в отличие от рест-жсонок типизированный, из-за чего системе-отправителю надо строго соответствовать контракту, понятному системе-получателю, описав не просто вложенные структуры и названия полей, но и типы, чтобы можно было провалидировать ещё до отправки. Переписывать все типы было бы сложно, поэтому обычно выгружают схему контракта в специальном формате и используют её на обеих сторонах. Схема - это описание типов в XSD и описание самого SOAP-сервиса в WSDL. Хотя подобное и в ресте иногда практикуют с OpenAPI/json schema.
Да. Правила достаточно хитрые, можно не вникать, главное уметь её выгружать и генерировать по ней классы через JAXB.
А что за jax-b? Еще jax-ws какой то. Везде птичьим языком объяснено. Можешь пояснить для дебилов?
Именно JAXB, не jax-b, он не имеет отношения к jax-ws. Это сериализатор/десериализатор между джава-объектами и XML (примерно как Jackson для JSON), но ещё есть jaxb-maven-plugin, который умеет генерировать джава-классы из XSD-схемы.
JAX-WS - это оракловая спецификация API для серверов приложений, реализующих SOAP-сервисы на Java EE, просто стандарт. В Spring-WS этому стандарту не следуют, там свой подход.
Блядь, как же всего этого говна много. Ощущение, что я не очень скоро узнаю даже то насколько глубока кроличья нора. Не говоря уж до знания всех нужных штук.
Разобраться можно, если долго ежедневно ебаться с этой хуйнёй. Но глубоко понимать и не надо, достаточно только на том уровне, что нужен для решения текущих задач.
А для собеседований насколько глубоко нужно погружаться? Я проект пилю, но ощущение, что всё равно какую-нибудь редкую поебень могут спросить, до которой я не дошёл.
Единственная вакансия на hh по которой мне ответила херка на мой отклик это магнит, но на собес не позвала, ибо не знаком ни c jms, который нужен в вакансии, ни с кафкой.
Резюме без опыта, с 2 крудами на гите. Написано - java, jdbc, spring mvc, spring data, hibernate, sql, rest, html/css/js, docker.
Вот сейчас буду дальше в таком порядке: soap(ибо с этой штукой там вроде предлагают работу, но может обломаться в любой момент и даже если возьмут, то там походу такое, что лучше больше полугода не сидеть) потом nosql, месседжинг, секурити, микросервисы, облака.
После каждой новой техи обновлять резюме, делать отклики на хх. Тут челик еще сказал делать отклики на сайтах крупных контор типа
>сбер, телекомы, всякие галеры вроде нетсракера, ебама, ланита, крока, и прочей параши
буду делать на след шаге.
Глубоко дрочить ничего не собираюсь. Разве что джавакор подтянуть.
это описание методов запросов и ответов. А также структуры запросов и ответов. Вместо того чтобы юзать костыли типа сваггера или описание контрактов в вики - эта штука сама описывает все возможные запросы и все возможные структуры данных. Можно даже автоматом генерить сервисы и дто.
Взял всдл, сгенерил по ней классы, юзаешь их. Элементарно. Что-то изменилось - взял новую всдл, сгенерил новые классы, идея сразу кидает ошибки что изменилось
Гораздо удобнее и строже говнореста
в сваггере глазами смотришь, нет автоматической валидации, ендпоинты надо руками писать
>ендпоинты надо руками писать
Чел ты... https://editor.swagger.io
Ну и валидация для сгенерированного кода там есть.
Просто это как обычно, вначале зумерье кричало что XML тяжеловесный, а XML Schema сложная, SOAP вообще отстой, а мы сейчас обойдемся простым REST по шаблону /ресурс/айди/ и валидировать будем кодом на беке. Но потом на реальных проектах жилко пернуло, после того как API разрослось и сталу нужно отдавать его внешним заказчикам. До них наконец дошло, что было бы неплохо и формат запросов валидировать, и формальное описание сервисов иметь. В общем по второму кругу изобрели SOAP.
C чего ты взял? Есть все.
> ELK
Специфично, не в каждом проекте нужно.
> MQ
Там и учить нечего.
@СлушатьОчередь(очередьНейм)
очередьСервис.отправить(очередьНейм, сообщение)
А с остальным девопсы ебутся.
Потому что хватит писать языки, фреймворки и технологии. Пишите продукты для конечных пользователей.
Да я ебал)
>Аргументы?
изначально предполагалось, что менеджер или топ будет сидеть такой и мышкой менять схемы бизнес-процессов в редакторе, и всё это будет загружаться и автоматически изменяться.
Надежды не оправдались, топам не всралось изучать bmp редакторы и ебаться с багами и ограничениями. Им проще как и раньше описывать всё на бумаге и спускать четырёхглазым засерям по почте.
А засерям не усрался bmp, им проще в коде поменять
Mingw
Ты скажи ему, что мейком можно только плохо джаву билдить.
Че он тебя так неуважает? Ботинки тебя заставит целовать, тоже будешь?
Ну смари. Мне дали задание решить задачу по матлогике. Языки были : Java , Python , C , Kotlin. На каком языке я ее решил думаю понятно. И вот хуяк он вываливает системы теста. Я то думал как на тимусе будет или там какие то условия есть раз Java и Kotlin в списке. А нет нихуя, система тока через makefile принимает.
Т_Т
>Единственная вакансия на hh по которой мне ответила херка на мой отклик это магнит
В краснодаре живешь?
А в чём проблема то? Чем DI не устраивает?
Хуёво ТЗ поставил.
У тебя 3 бина и енум, принимающий 3 значения?
А в сервисе хочешь 3 бина получить? Тогда инжекти все три через конструктор и похуй на енум.
по удаленку
>Для каждого типа источника создается свой бин каждого типа
Enum1Extractor, Enum1Processor, Enum1Writer, Enum1Extractor...
Я хочу их во первых объединить в одном классе типа Enum1Support, Enum2Support, а затем заинжектить в другой сервис в мапу <Enum, EnumSupport>.
Ну напиши makefile который запустит грейдл.
.DEFAULT_GOAL := build
build:
_____./gradlew build
clean:
_____./gradlew clean
>Enum1Extractor, Enum1Processor, Enum1Writer, Enum1Extractor...
>Я хочу их во первых объединить в одном классе типа Enum1Support, Enum2Support, а затем заинжектить в другой сервис в мапу <Enum, EnumSupport>
В Enum1Support передаешь 3 бина Enum1Extractor, Enum1Processor, Enum1Writer, в Enum2Support - Enum2Extractor, Enum2Processor, Enum2Writer. По типам все разрулиться.
Чтобы засунуть все в мапу в конструктор передаешь List<EnumSupport> спринг соберет в лист все бины которые реализуют этот тип.
Я ебал это все руками делать. Я хочу чтобы саппорт-бины генерились автоматически, а в мапу все автовайрилось по квалифаерам.
>Я хочу чтобы саппорт-бины генерились автоматически
Ты хочешь чтобы спринг за тебя бины генерил? Может еще и бизнес логику за тебя реализовать?
>а в мапу все автовайрилось по квалифаерам.
У тебя каша в голове, попробуй вначале ту мапу описать, потом поймешь что это невозможно. <Enum, EnumSupport> - не описывает что должно быть ключом, что значением.
>Ты хочешь чтобы спринг за тебя бины генерил? Может еще и бизнес логику за тебя реализовать?
Это две противоположные вещи. Да, бины он и так за меня генерит.
><Enum, EnumSupport> - не описывает что должно быть ключом, что значением.
Ключом енум, значением бин, в который заавтовайрены другие бины с определенным квалифаером. Ты тупой?
Хорстманн, если не ньюфаг.
Для себя лучше в зал тренажерный запишись, или на спорт какой-нибудь.
>Да, бины он и так за меня генерит.
Мамка твоя дебило генерит, а спринг генерирует только прокси.
>Ключом енум, значением бин, в который заавтовайрены другие бины с определенным квалифаером.
Ебать ты даун! Как протрезвеешь, подумай если найдешь чем и скажи как по сигнатуре
<Enum, EnumSupport>
спринг должен понять, что надо в мапу вайрить.
Н И К А К
И
К
А
К
Спринг вайрит типы, а не конкретные значения. Если ты такой тупой, что не можешь из List сделать Map то тебе надо идти в клининг менеджеры и не ебать тут мозг.
Спринг вайрит типы с учетом квалифаеров. Я и спрашиваю, как мне вытащить квалифаер при этом. Впрочем я уже нагуглил.
А я могу все собрать в jar пакет и просто через мэйк его вызывать ? Я просто вообще мэйкфайлы писать не умею.
Увидел питоновский пример такого файла и охуел от краткости скажем так. Нельзя ли и jar так же ?
На форчане сказали go заменяет джаву. Это правда?
На заборах тоже много чего пишут.
Не имеет значения, заменяет или нет. Сейчас работы на жабе больше, а если это когда-то станет не так, то к тому времени можно успеть переучиться.
Это похуй
>Шилдт какая-то душная хуйня
Да ты охуэл штоли сука. Шилдт прекрасен.
Наверни хэд-фёрст Сьерры и Бейтса. Там как раз для любителей унылого стендапа, которым серьезные дядьки скучна/сложна.
А что, можно как-то эффективно разрабатывать веб-приложения толком не понимая как оно все работает? Если все так не важно, то зачем же в шапке, на которую все слегка дрочат, указывается что шарить надо?
Шарить поверхностно нужно, но это тред про жабу, а не веб.
Шилдт - говно. Даже нет приложенного архива с кодом. Я че сам это все должен переписывать и дописывать к каждому примеру бойлерплейт?
Я работу хттп, хтмл, жс смотрел на https://developer.mozilla.org/ru/docs/Web/HTTP/Session
там больше половины на русский переведено.
Он выступает как справочник, а не учебник для всяких пряников. Так что со своими архивами можешь уебывать, смузихлеб.
Во первых в чем проблема дописать к справочнику бойлерплейт и выложить сорцы?
Во вторых вкатыш сверху прямо сказал, что пошел по Шилдту, как по учебнику и в этой роли Шилдт душная хуйня, и в этом он прав.
В третьих а нахуя такой унылый справочник нужен? У тебя есть справочник - дока называется.
Это что, в какой-то новой идее из коробки так? У меня нет там никаких others (idea 2020.1)
2021.1 ultimate
Проблема в тебе. Совсем уже охуели, пряники гречневые. В олдскульных книгах всех рекомендуется код писать в блокноте без всяких ИДЕ и собирать/запускать из командной строки, а этим хлебушкам уже даже лень написать три строчки в тепличных условиях.
Нахуй вообще его запускать? Ты что не веришь что тебе в книге правильный аутпут покажут? Посмотрел листинг, понял о чем в нем речь и погнал дальше.
>А я могу все собрать в jar пакет и просто через мэйк его вызывать ?
Можешь, но ты же начал с
>Как собрать проект c makefail на винде ?
Как вариант можно из грейдла запускать main() метод.
лол. чувствуется запах программиста из говновуза. Нахуя код запускать вообще? Сиди и пиши его на листочке и дрочи на него. Программы пишутся же не для того, чтобы их запускать, а чтобы кусочки кода в голове прокручивать.
И таким долбоебизмом только твой Шилдт занимается. Есть замечательный Хорстман с нормальным кодом, книжка по канкарренси с кодом, книга Лафоре по алгосам с кодом, книга по хиберу с кодом, книга спринг ин экшон с кодом. Одному Шилдту это нинужна.
Зачем нужно такое говно, как шилдт, если это просто перепечатка доки?
Этот входильщик-в-ай-ти-из-мак-доналдса порвался, еще несите. Чуйку почини свою, дебс. Я не сказал что код писать не нужно, я сказал что непонимаю нахуя слово-в-слово переписывать или запускать скопипащенный код который в книге. Разницу чуешь?
А нахуя во всех нормальных книгах есть готовый код и все кроме шилдтодебила его выкладывают? Чтобы читатели запустили из книжки и посмотрели как работает, покрутили, поменяли пару переменных, дописали что-то, на сайдэффекты могли бы наткнуться, перешли в библиотечные классы через идеху и поняли, как работает код с данной языковой конструкцией/библиотекой?
Ты лучше мне ответь нахуя нужна перепечатка доки.
>>212752
>>212768
Ребята, не ссорьтесь. Давайте лучше вместе почитаем Core Java Хорстмана!
Первый том 12 издания уже вышел.
https://dropmefiles.com/0o9L8
Хорстман топ. Читал 11.
17 есть, это збс. А там с 11 есть что-то новое, кроме многострочек и свича нового?
Свинг он зря не убрал из первого тома.
Нормально задачу сформулируй, а не "получить все комбинации 2^n". Или ты думаешь кто-то будет тут всматриваться в твой говнокод пытаясь понять что он делает, если заведомо известно что делает хуево?
>эта смесь регистра букв в аргументах X и x
>эта транслитерация русского слова
>отсутствие выравнивания
>это получение результата через побочный эффект
пиздец
ссылку хоть кинь на нее. посмотреть чем нынче вкатыши занимаются. или скопипасть текст
Нет)
google -> how to run java program
Уже больше года дрочу, но ощущение, что всё равно обосрусь.
Ну обосрешься и обосрешься, у тебя бесконечное колличество попыток, малой, только время теряешь на страхи свои. А по существу глянь на ютабе собеседования, те же вопросы и задают везде
Бесконечное количество попыток на что?
Пока ни разу на собес не позвали даже.
На ютабе глянул, там у людей даже с полугодовымопытом такую хуйню спрашивают, что я даже вопрос понять не могу.
А сколько тебе лет и какое образование? Меня вот не зовут, как я думаю, потому что я старый и с нерелевантным образованием.
Какие кейворды написаны?
Лет за 30. Образование профильное. Мне кажется, что херки в первую очередь рассматривают студентов и выпускников профильных вузов. А стариков сразу в корзину.
А если образование профильное, то почему ты вкатываешься за 30 лет? Или ты на другом стеке работал? Для таких я думал тоже норм скидка, как и для выпускников/студентов старших курсов
Я по глупости своей пошел не на айти, хотя хотел, а потом еще годы пытался работать по специальности, которую закончил. В сейчас вкатившиеся без образования убедили меня попробывать.
Оно приводит к утечке ресурсов ОС, а не памяти приложения. Система продолжает сопровождать и обслуживать то, на что ты уже утратил способ влиять (оно вышло из области видимости программы).
В формате увлечения лет в 30. Изучал джаву "просто так" для интереса, прогал микроконтроллеры на околоплюсах, ну и просто компьютер саенс в разных аспектах. Работать на джаве начал пару лет назад, но у меня специфическая область - попил своего рода "микросервисов" которые кое-что обрабатывают в базе данных и туда же скалдывают результаты. Понятное дело что это хуйня, так что понемногу изучаю Spring, потому что это и есть коммерческая джава по сути. Изучил джаву (кор включая стандартную либу), какой-никакой UI не ней, работу с БД, с некоторыми другими внешними вещами (это все легко разбирается).
Побудило то что "обычные" профессии (я был инженер) - это как правило засилье тупости и беспомощности, люди там годами делают тупую хуйню по шаблонным рецептам, даже не задумываясь зачем это нужно и нужно ли вообще, как работает, и как может быть улучшено и автоматизировано.
В целом на мой вкус энтерпрайз - это параша, как по мне гораздо более интересны какие-то более фундаментальные вещи, вроде ОС или движков каких-нибудь красивых технологий, вроде графических/физических/блокчейн/нейросети и вот это вот все. Надеюсь когда-нибудь туда съехать (если не сдохну раньше)
Да, но это не похоже на то как обычно на ней работают. Это скорее похоже на то как работают на каком-нибудь шарпе. Джава обычно используется на бэке в вебе. У меня совсем не так. Дело в том что я работаю в проекте где не было какой-то заранее готовой архитектуры и соответственно технологий, и мог пилить на чем угодно, что дало бы результат. Я стал юзать джаву потому что на ней больше всего умею и знаю.
Просто голую джаву с ее стандартной либой. Специфика того что надо делать - больше вычислительная а не КРУДовская. Для связи с БД просто JDBC без всяких гиберов. Это все конечно можно начать перетаскивать на Спринг (JavaEE вроде как более менее мертвая в сравнении со спрингом), но если я буду достаточно квалифицирован чтоб работать с такого уровня вещами на спринге полноценно - будет просто нецелосообразно работать там где я сейчас нахожусь, потому что стоят такие вещи гораздо больше, чем я здесь обхожусь своему работодателю. Это и есть ближайшая цель - подучить какие-то популярные мейнстримные технологии и вкатиться "по-настоящему"
Ну такое... всякое бывает. Иногда сравнительно сложное, вроде эволюционного алгоритма подбора коэффициентов функции оптимизации, или что-нибудь вроде "экспертной функции" вроде того какую машину наивогоднейше отправить по такому-то маршруту, с учетом ограничений и маршрута, и машины - ну типа там, у этой радиус поворота не позволит проехать там-то, а эта недостаточно проходима что пройти там-то (это как пример, просто задачи подобные)
тогда ты меня вообще не утешил. Звучит пострашнее всяких страшилок спрингистов про сложные валидации, огромные базы и интеграции с миллионом сервисов.
Ну почему же. Отличие от спринга в том, что там тебе нужно знать какой-то гигантский стек технологий разработанных ХЗ кем и ХЗ как работающих. В том случае, в который я попал, тебе ничего особо знать не нужно, кроме самой джавы с ее либой, ну и каких-то базовых вещей для межпрограммного взаимодействия (С БД, системой, какими-то типами ресурсов). А весь код, который тебе позволит абстрагировать предметную область и сделать нужные обработки, ты придумываешь и пишешь сам, соответственно хорошо его знаешь и всегда можешь адаптировать/допилить/перепилить под новые нужды. Хороший способ естественным путем дойти самому до всяких "паттернов проектирования", лол. Тут просто, как бэ, язык вторичен, главное идеи и понимание того что надо сделать. Язык просто твой супер-универсальный программируемый калькулятор с неограниченными возможностями.
Я не ебу, ес честно. Просто практически в кажом мануале по юзанью Autoclosable интерфейсов говорится именно это. Еще когда-то где-то читал, что у системы ограниченное количество дескрипторов разных предоставляемых клиентсому ПО ресурсов, так что если ты запустишь открытие потоков в каком-нибудь длинном цикле то они тупо могут закончиться. Это похоже на memory leak по смыслу, только в этом случае не освобождается не память до удаления на нее всех указателей, а ресурс системы, с которым процесс работает.
После вуза, сюрприз, ты тоже нахуй никому не нужен без опыта.
Тогда не было засилья рекламы всяких курсов и я не знал, что нужно делать. Но зато тогда можно было на собес попасть даже с пустым резюме, где тебя как правило обсирали, хули ты ничего не умеешь.
А теперь нужно дохуя всего знать, часов 500 пописать пет-проекты чтобы тебя соизволили пригласить на интервью.
>Просто практически в кажом мануале по юзанью Autoclosable интерфейсов говорится именно это
Да, я тоже просмотрел десяток мануалов, и везде пишут одно и то же, не разъясняя почему.
Потому что это особенность операционной системы больше, чем самой джава-среды. Если ты хочешь прокачать джаву чтоб не думать об этом, можешь накатить ламбок, там есть аннотация которой ты можешь пометить любой вновь создаваемый ресурс, и лобок его утилизирует за тебя.
Я хочу прокачать джаву. Чтобы конструкцию try-with-resources переименовали в context manager, и чтобы с вместо try(...) использовалось ключевое слово using(...) или with(...).
То есть ты 8+ лет после вуза писал пет проекты?
Ну трипл, обычно когда котлин вслух произносят у дидов в команде включается эпичное НЕНУЖНО
> переименовали
И сломали заодно весь код, где есть переменная с таким названием, которая раньше была корректным идентификатором.
>Увидел питоновский пример такого файла и охуел от краткости скажем так. Нельзя ли и jar так же ?
Кстати, начиная с 12 JDK можно так же java MoiGovnokod.java
в классе не должно быть никаких внешних зависимостей
Ну дяяя.
Почему дотнет может позволить себе послать нахуй обратную совместимость и переродиться (.net framework -> net core - NET 5+), а джава нет?
>Каким именно образом незакрытый ресурс приводит к утечке памяти? Где висит та ссылка, которую не может убрать гц?
Это касается нативной памяти не кучи и тех ресурсов которые ОС выделила твоему приложению например файловый дескриптор и кеши.
Хорошая новость в том, что все стандартные классы реализуют финализацию. Плохая в том, что сторонние библиотеки могут этого не делать например тот же JACOB раньше забивал на это хуй.
А разве там не впилили костылину с аннеймд модулями?
Сам .NET и ASP NET Core (аналог спринга)
Пожалуйста, обновляйтесь.
Кидай стектрейс.
java 8 поддерживается до 2030 если шо
Про List.of и Arrays.asList - упрощение в том, что не надо импортировать util.Arrays?
Строки короче получаются.
Ничего. Делал не я, переделывать времени как обычно нет.
Ты не один, с тобой весь этот тред. Здесь все твои друзья.
Держи. Задачу то я решил , переменные нормально обозвал. Но когда 16 переменных выражении время исполнения за секунду все равно переваливает. Эх...
Из за чего это может быть ? Парсер у меня самый дефолтный , на лексемы просто разбивает и потом обходит.
Охотно бы съебался в какую-нибудь системщину, или геймдев. Бизнес-автоматизация - это душное говно. Особенно если голая крудня без всяких алгоритмов обработки более-менее нетривиальных
Так это понятно. Там интереснее и сложнее.
А про фронт интересно. Стать формошлепом после опыта крудомакакой с джавовским ооп головного мозга.
Я понял, что главное что-то одно из этого потрогать, но с чего лучше начать? Что сейчас популярно, что из под спринга попроще управляется?
Там со всем интеграция хорошая. Можешь с рэббита начать
>Вкат в жабу
Сейчас не 2015 год, у тебя есть превосходно отполированный дотнет и несущийся локомотив хайпскрипта, но нет надо жрать говно на допотопных технологиях
Репорт.
Хуйню какую-то несешь. На энтерпрайзе джава разделывает ваш дотнет и тайпскрипт вместе взятые помноженные на 5
Расскажи чем реально лучше дотнетовский стек для больших приложений, чем дефолтные java11/springBoot/springDataJpa/springSecurity?
Просто если использовать try-with-resources то в блоке catch уже не виден пойнтер коннекшена.
Так при транзации ты не поломанное соединение обрабатывать должен тракетчами, а ошибки в бизнес логике во время транзации. И при ошибке в логике ты и ролбечишь.
Ну это понятно, но если например логика упадет с любым другим SQLException, и я попаду в catch, есть ли смысл делать откат транзакции? Или достаточно просто того, что до киммита уже и так никогда не дойдет?
Просто эта механика как-то хреново согласуется с try-с-ресурсами - ведь из catch уже ничего нельзя сделать с коннекшеном. Либо надо внутри try-с-ресурсами где делается коннекшен делать вложенный try-catch вокруг логики и в нем в catch вызывать rollback, потому что там он все еще виден. Вот я и хочу понячть есть ли смысл городить такой пиздец, или можно просто забить на открытую транзакцию.
так при разрыве соединения там все ролбечится автоматически. По классике два вложенных трайкетча(обычно больше) - на внутреннем обрабатываешь ошибку логики и в его кетче ролбечишь, а на внешнем sql-ексепшоны.
Уже так и сделал, благодарю за содействие. Классический подход обдвачевавшегося долбоеба - сначала спроси, потом подумай и сам все пойми, потому что это вполне логично
Или лучше зарегать почту, которую не жалко и все данные для этой почты выкладывать на гит, чтобы оно работало?
Ну то есть если вдруг кто-то мой гит будет смотреть, то это норм, что код не будет работать, так как я не выложу всякие секурные пропертюхи?
В ридми напиши, как эти пропертюхи получить.
>Бизнес-автоматизация - это душное говно
по сравнению с системщиной тут рай. Логи, скриншоты, повторяемость, подробнейшая документация, исходные коды, бизнес-аналитики. В системщине у тебя даже логов не будет, а документация только редкие ндашные даташиты. Стековерфлоу тоже будет недоступно. А аппаратные ошибки, которые надо будет ловить на конкретном девайсе всякими осцилографами
репозиторий с front-end. Используйте proxy при разработке
(настройки CORS не должно быть).
Это значит, нужно 2 микросервиса делать?
Как использовать прокси? Прямо во фронте ловить запрос и перенапрвлять его на бэк? Как это по уму делать?
"Если класс использует блокировку с открытым доступом, он позволяет клиентам выполнять последовательость вызовов методов атомарно — ценой потери гибкости".
Это выбирается не потому что там просто, а потому, что сложно
Просто спиздили безликого робота у шарпов, впрочем как и весь язык
Вот кот был гораздо лучше
Зумеры, зачем вы носитесь с этой мантрой? Шарп был копией на первых версиях языка
Если ты пытался потроллить кодом на шарпе, то мое тебе почтение
Webclient
Может тем, что когда куколд Бреслав пили котлин и опирался на другие языки, шарп уже далеко ушел от просто копии жабы?
А еще? Clock.idleTime() чет не очень
Суть этого задания в отусе - поднять фронт отдельным серваком не на джаве на отдельном порту. Но если у тебя будет на разных портах работать фронт и бек - ты попадешь под cors ограничения.
Я с эти столкнулся, когда вот этот хеловорд дописал: https://sysout.ru/spring-boot-postgresql-js-v-dosker/
Для преодоления этой проблемы используются реверс-прокси, вроде нгинкс(нормальный метод, но я спасовал, не захотел разбираться с натройками nginx) или отключение корса на сервере(как сделал я, плохой способ).
Я бы не ебал мозги и никуда фронт пока не выносил.
Насколько важно знать докер для вкатуна?
А брокеры сообщений?
Или лучше потратить время на подготовку к вопросам про джава кор?
я так и не понял зачем нужен докер. В докере запускать базу? Зачем? Установил на рабочую машину и вот у тебя тестовая база.
Остальное окружение всё-равно не поднять локально, надо деплоить на стенд. Конфиг докера одинаковый на все МИКРОСЕРВИСЫ на жабе, и как они там на стендах деплоятся я не знаю. Этим пердолики девопсы занимаются
private Object getField() {
if (field == null) {
synchronized (this) {
if (field == null)
field = computeFieldValue();
}
}
return field;
}
Мне кажется брокеры нужнее докера. Меня не позвали на собес, ибо нужен был jms или ребит/Кафка, чтобы был знаком.
>В случае, если переменная field будет не null, значение field будет считано из памяти дважды? В этих местах: "field == null" и "return field"?
Если она не volatile то гарантий нет, но вероятнее всего 1.
> В докере запускать базу?
Да
> Зачем?
Гугли testcontainers
> Установил на рабочую машину и вот у тебя тестовая база.
Неудобно create-drop для тестов
> Остальное окружение всё-равно не поднять локально, надо деплоить на стенд.
Редис, реббит, эластик хорошо поднимаются в докере
> Конфиг докера одинаковый на все МИКРОСЕРВИСЫ на жабе, и как они там на стендах деплоятся я не знаю. Этим пердолики девопсы занимаются
Докерфайлы обычно программисты пишут, т.к. только они знают, как их говно в конт собрать. Но в основном программисту докер нужен только для разработки
>The Super POM is Maven's default POM. All POMs extend the Super POM unless explicitly set, meaning the configuration specified in the Super POM is inherited by the POMs you created for your projects.
>if the configuration details are not specified, Maven will use their defaults.
В суперпоме указан modelVersion, однако в каждом своём поме всё равно приходится указывать это дерьмо, при том что оно не меняется с 2007 года. У них там свои представления о наследовании?
Книжка 2008 года, серия дурацкая, да и про jsp в книге.
Вообще стоит глубже знакомиться с сервлетами? Или мне хватит того, что есть такая черная коробка, которая реализует всю работу с хттп?
Нет, не я
Предлагаем вам выполнение тестового задания:
Сделать сервис агрегации агрегаторов такси. Необходимо реализовать общую архитектуру, коннекторы к конкретным агрегаторам можно реализовать на примере IWay или stub connector, но нужно сделать общий интерфейс
Сервис должен реализовывать возможность поиска предложений по адресам(в т.ч. асинхронно), бронирования и отмены бронирования
В качестве примера для имплементации можно взять API IWay
В тестовом задании необходимо использовать технологии и принципы указанные в вакансии:
владение Java на уровне junior+;
Spring/Spring Boot, Hibernate, SQL
работа с XML, XSD, XSLT;
желательно: gRPC, PostgreSQL, Kafka, Docker;
Как вам такое на Джуна? Зп не указана.
~/.m2
Они закономерно идут нахуй
Нахуй пусть идут, как как
мимо-вкатыш
может пойдешь лучше мамку тролльнешь?
но меня по факту взяли на работу на
Java8, Spring4, PostgreSQL, Oracle, Liquibase, SOAP, XML, REST, JMS + какой-то велосипедный вебфронт, который поддерживать тоже мне.
>Вообще стоит глубже знакомиться с сервлетами?
Нет, если ты не собираешься писать свой WEB framework. Напиши хеловорлд, с базовыми функциями куки, сессия, авторизация, посмотри как выглядят HTTP запросы и этого достаточно для практической работы.
Так и думал, что челик советовавший книжку по веб-технологиям 15-летней давности и тем более с jsp неправ не только в этом.
>хеловорлд, с базовыми функциями куки, сессия, авторизация, посмотри как выглядят HTTP запросы
это я делал перед спрингом, правда авторизацию не трогал. Потратил вечер. Только пару гетов, пару постов и что-то одно с сессией.
Но сейчас я так и не знаю, (хотя по спригну уже много читал/смотрел, писал несколько петов) где спринг соединяется с томкатом/ другими контейнерами сервлетов.
javac .\src\main\java\govno\FirstProject\Dog.java
java .\src\main\java\govno.FirstProject.Dog
Первая команда выполняется, а вторая - нет. Полная\частичная замена точек на бекслеши не помогает, всё равно ClassNotFoundException. В собаке.java указан package govno.FirstPrjoect;
javac .\src\main\java\govno\FirstProject\Dog.java
java -cp .\src\main\java podbrushkin.FirstProject.Dog
Есть дохуя непокрытого юнит-тестами кода. Покрывать его, во-первых, долго, во-вторых, бесполезно, ибо функционал скоро будет удаляться.
Но, сука, менеджеры из среды кабан кабанычей доебались, типа, хули coverage такой низкий, всего 30%, надо минимум 80%!
А там покрывать столько, шо я ебал её маму рот.
Пытался нагуглить squid-настройки, но чёт нихуя внятного нет.
Можно как-нибудь исключить java-файлы по маске имени или типа того?
Никакого иного именования, кроме "джава" не приемлит организм.
А у вас как?
бамп
А мне пох, я разрвб, а не филолог.
Тестируй геттеры и сеттеры
>Можно как-нибудь исключить java-файлы по маске имени или типа того?
Добавь аннотацию @Generated
урАвня
Может быть ты еще и Идею используешь только комьюнити эдишон, потому что она бесплатная?
Я прохожу степики раз в 3 месяца и получаю ключик.
Челик с отуса форсит белсофтовсий ждк, типа даже для коммерции бесплатно.
Расскажи поподробнее? Я полузуюсь пизженной ИДЕ-шкой, и мне это иногда не нравится
>белсофтовсий ждк, типа даже для коммерции бесплатно
Не совсем понимаю при чем тут ЖДК, мы же об ИДЕ, она вообще может быть любая подключена, и в дефолт-поставку жид-брейнса входит опен-ЖДК из коробки
https://support.stepik.org/hc/ru/articles/360010105180-Как-получить-лицензионный-ключ-от-JetBrains-
>Не совсем понимаю при чем тут ЖДК
я начал с бесплатности ждк
ЖДК МНОГО, ЯВА У МЕНЯ ОДНА!
А Я ЯВУ НЕЖНО ТРЯПОЧКОЙ ПРОТРУ!
>Я прохожу степики раз в 3 месяца и получаю ключик.
Нахуя? Просто сбрасывай триал раз в месяц. Это делается одним кликом по нужному скрипту.
5 лет. Потом первые пару лет зарплата 35 тысяч до вычета НДФЛ.
Как же хорошо, что в JdbcTemplate это делается просто, прозрачно и без ебучей магии говнохибернейта.
И причем тут это? Если я через рест контроллер возвращаю объект он его сам в json превращает и возвращает в теле ответа. Мне нужен вот такой вывод employee.
{
"id": 7839,
"fullName": {
"firstName": "JOHN",
"lastName": "KING",
"middleName": "MARIA"
},
"position": "PRESIDENT",
"hired": "1981-11-17",
"salary": 5000.00000,
"manager": null,
"department": null
}
>>218405
Знаю , я решил уже эту задачу через него. Теперь через спринг дату надо
Через jpa репозиторий , который через аннотации @Entity ищет сущности в таблице. На скрине , который скинул он никак не получается , потому что поля FullName нету в таблице. И надо как то заставить засунуть три поля в 1 объект засунуть.
На скрине сущность называется EmployeeEntity. Это то, что лежит в бд. Из контроллера надо возвращать объект другого класса. При его создании и надо склеивать три поля в одно. Нахуй ебаться с этой хуйней на уровне репозиториев?
Сори , опечатался. Да возвращаю EmployeeEntity и его юзаю везде.
Таково задание , я сам выкупаю что бесполезная задача.
Судя по первому посту, у тебя задание
>Вернуть json класса emoloyee
Для формирования json явно не класс сущности надо использовать.
Да вроде бы его . Вот вывел этот класс , но без имени
Скоро заканчивается триальный месяц. Новый акк заводить или можно сбросить как-то?
Вот , решил как ты сказал. Но имхо это лютейший костыль. Зачем тогда вообще юзать хибернет , если через JdbcTemplate проще 7?
>Зачем тогда вообще юзать хибернет
До тебя начинает доходить...
>Но имхо это лютейший костыль
Разные классы для сущностей и для представления - индастри стандарт.
Ну тогда сорре
Судя по странице https://www.gismeteo.ru/b2b/ , токены они дают только для юридических лиц. Ты точно уверен, что это то, что тебе нужно?
Но я другой анон
Ну гис метео чисто для примера, можно openweather или яндекс. Суть в том чтобы найти туториал
Java 8 самая популярная и более новые не использкют широко?
Или потому что в других версиях не такие значимые изменения?
Потому что в ней добавили механизмы, качественно изменившие разработку на джава, а именно лямбда-выражения, на котором основан еще один важный фреймворк - Stream API. Большинство же нововведений дальнейших версий - это какая-то косметическая хрень или не получившие широкого распространения фичи. Есть конечно потенциально полезные вещи в последних изменениях, например рекорды, но они вроде пока что в тестовом режиме еще
Анончеки, что в спринге надо уметь делать?
Мне дали тз ебнутую какую-то, типа написать структура университета. Я ахуел с колличества всего, надо пилить дохуя сущностей в виде уроков, расписаний уроков, преподавателей, студентов, админа, админки и прочего прочего. И это на джуна сраного. Это везде так?
2 года назад мне нужно было сервис обработки JSON сделать и все.. А тут блять целая структура.
В другом нужно было 2 таблички сделать и по одной из них искать/фильтровать, чуть сложнее, чем тестовое от райфа на стажера.
Сегодня прислали еще:
Реализовать на языке программирования Java Rest API для картотеки супергероев Marvel. Необходимо реализовать 1) Базовые API методы https://developer.marvel.com
· GET /v1/public/characters
· GET /v1/public/characters/{characterId}
· GET /v1/public/characters/{characterId}/comics
· GET /v1/public/comics
· GET /v1/public/comics/{comicId}
· GET /v1/public/comics/{comicId}/characters
2) POST/PUT методы для наполнения базы/файлов c комиксами и героями Обязательные требования:
1) Постраничная загрузка, сортировка, фильтрация для запросов, возвращающих списки
2) Работа с изображениями (загрузка, отображение)
3) Адекватные ошибки в ответе. Например:
a. 404 если не найден персонаж
b. 400 если запрос не прошёл валидацию
4) Документирование API (например, через Swagger) Допущения:
1) Формат запросов и ответов может быть упрощён по сравнению с Marvel (оставлены только базовые поля)
2) На первом этапе можно не реализовывать проверку токена безопасности Требования к инструментам:
1. Язык программирования – Java
2. Сборка – Gradle/Maven
3. Исходный код должен быть опубликован на Github/Gitlab/Bitbucket
4. (Крайне желательно) использование Spring/Spring Boot
5. (Желательно) использование базы данных. Например Mongo
6. (Совсем здорово) использование docker Срок выполнения: две недели.
Просто уже доебало, когда надо вернуть какой-то еще стейт из метода, помимо основного output-а.
Это выглядит уёбищно.
Вообще идеально было бы иметь какой-то механизм языка, позволяющий множественный аутпут, с разбором по индексам например. При этом дефолтный вывод бы был с нулевым индексом либо просто без индекса, и он бы завершал исполнение. Если что-то еще не выведено на этот момент - не ебет, тогда выводится нулл или дефолтное значение для типа.
Пишешь что-то вроде
public {double, int, int} doSomething(){
return(1) 1;
return 3.1415
}
Есть языки умеющие в такое дерьмо?
>Это выглядит уёбищно.
Уёбищно выглядят out переменные, вот это уёбищно. А named tuple выглядят отлично. Сразу ясно что на входе, что на выходе. Никаких side effects с тем, что у тебя локальная переменная поменяла значение после вызова.
И как блять ООП решает этот конкретный вопрос? Скорее ООП это стиль, который просто не приемлет такой семантики концептуально
>>219510
Named tuple это целый отдельный класс, который надо создать, сопроводить, насрать им в память и все такое. Лень хуярить всякие матрешки каждый раз когда тебе надо что-то такое сделать
Условие задания такое в универе было , sping дату проходили просто.
Блять, это суррогат просто средствами ООП для решения проблемы, вот и все. Никто бы не стал заниматься такой хуйней если б для этого были более удобные и красивые средства
Что красивого в том, чтобы возвращать несколько значений из метода без названий? Посмотри на питон, дохуя красиво наверное?
Ну я же не утверждаю что тот вариант, который я наверху высрал, красив и единственно возможен. Просто сказал что хотелось бы подобные вещи.
>питон
не имею чести его знать, к сожалению
>Named tuple это целый отдельный класс, который надо создать, сопроводить, насрать им в память и все такое. Лень хуярить всякие матрешки каждый раз когда тебе надо что-то такое сделать
Надо разрешить тимлидам пиздить таких долбоёбов, которым лень создать record. А вот похерить читабельность кода всякими out переменными - это им не лень.
>>219635
Tuple это и есть красивое и удобное средство, во всех приличных языках именно так и делают. Где-то можно и безымянный и именованый tuple создавать, где-то только именованные.
Есть недоязыки, где не захотели вводить tuple, поэтому метод возвращает tuple, но его сразу наде деконструировать.
>лень создать record
Хуя ты молодчик. Где ты найдешь проекты на 16+ джаве? К тому же это говно еще насколько знаю в "раннем доступе".
class Book {
@Id
Long id;
String name;
@JoinColumn(name="author_id")
Author author;
}
Я создал объект книги, и знаю author_id. Мне нужно сохранить книгу в бд.
1) Могу получить автора по id, и сохранить книгу в бд. Но получение объекта из бд вынуждает делать лишний запрос.
2) Можно сохранить книгу напрямую SQL запросом.
INSERT INTO book (name, id, author_id)
VALUES ('Mein Kampf', 14, 88)
Но тогда пропадет смысл в JPA
3) Нет ли способа сделать это через JPA но без лишних запросов? Что-то вроде
Book book = new Book();
book.id = 14;
book.name = "Mein Kampf"
getEntityManager().persistAndChangeColumn(book, author_id, 88);
class Book {
@Id
Long id;
String name;
@JoinColumn(name="author_id")
Author author;
}
Я создал объект книги, и знаю author_id. Мне нужно сохранить книгу в бд.
1) Могу получить автора по id, и сохранить книгу в бд. Но получение объекта из бд вынуждает делать лишний запрос.
2) Можно сохранить книгу напрямую SQL запросом.
INSERT INTO book (name, id, author_id)
VALUES ('Mein Kampf', 14, 88)
Но тогда пропадет смысл в JPA
3) Нет ли способа сделать это через JPA но без лишних запросов? Что-то вроде
Book book = new Book();
book.id = 14;
book.name = "Mein Kampf"
getEntityManager().persistAndChangeColumn(book, author_id, 88);
>Выучив все что в шапке можно претендовать на джуна?
можно
>И сколько это примерно займет?
Астрономически дохуя
Но джуном можно быть с гораздо меньшим багажом
Смотря какой у тебя бэкграунд. Если ты не знаешь чем integer отличается от boolean, как возможно такое что x = x + 1 (ведь на уроке математики за такое пиздят указкой по ебалу), и думаешь что "байт" это когда ты задираешь кого-то на двачах чтоб потроллить, то наверное и 4-5 лет будет маловато. Если уже и так знаешь процедурщину, особенно около-Сишную, есть понимание как вообще (и где) компьютер хранит и обрабатывает данные, что такое БД и как с ним разговаривать, и если вообще склонен к аналитическому мышлению, то может от года до двух.
Спасибо
30-50 нижний новгород.
Интересует, как у вас ЗП поменялась и через какое время, если вы уже были опытными разработчиками в 1С с нормальным стажем (у меня 4 года стажа + бэкграунд в виде айтишной вышки, в течение которой я на разном кодил, но базовое знание синтаксиса и каких-то элементов стандартной библиотеки эт сегодня вообще нихуя не значит, насколько я понимаю, там весь стек надо знать со смежными технологиями и фремворки).
Если мне тут почти 200к платят, (но иногда и больше выходит, так как я сижу на окладе + ещё во франче подрабатываю в свободное время и закрываю какие-то часы), то я предполагаю, что на jav'e первый год придётся снова поесть на тыс 50 ?
И какие курсы ещё норм ? Я пока думаю между OTUS'ом и Хекслетом. Но вроде на Хекслете по Jav'e не так много инфы. На ОТУСе есть полная профа с нуля.
Хочу накопить денег, уволиться и пол года заниматься только самообразованием, а потом переехать со своей хуйни в Дс/Дс2, где есть вакансии джависта на джунские/стажёрские позиции.
я ещё думал про C#, в частности asp.net, но по этой ёбе вакансий мало и материалов для обучения тоже с гулькин нос относительно того, что есть на Джабе
Мне 25
П.С.
Ещё хотел спросить. Убунту надо же накатывать хватит ли wsl виндовской?, если Джавой заниматься буду ?
И я плохо представляю, как выгглядит erp-система на Джаве. Там что через веб-интерфейс всё ? То есть клиент на стандартном веб-стеке описывается, его тоже надо знать ? Тут декстоп приложения делаются или уже моветон ?
>со своей хуйни в Дс/Дс2
А где ты зарабатываешь 200к вне дс/дс2?
Хз, стоит вообще щемиться с такой зарплаты? Мне в твоей ситуации западло былобы только то, что это 1С - довольно контуженный язык, еще и встроенный в какую-то среду специфическую. Но так ли это важно?
https://www.youtube.com/watch?v=QlSop74hSDc
вот об этом видос.
Зачем увольняться? Зачем платить инфоцыганам? Читаешь бесплатное, воруешь у инфоцыган.
>Убунту надо же накатывать
Куда накатывать? Можешь спокойно сидеть на винде. Джава позиционируется как вообще кроссплатформенная на уровне самих откомпиленных файлов. То есть скомпилив джарник на винде ты его сможешь запустить на маке и линухе и получить тот же (теоретически) результат
>erp-система на Джаве
О чем ты? У джавы нет никакой среды, куда она встроена (вроде вашего 1С или какой-нибудь СУБД с т.з. SQL). Она сама по себе, программирование ведется в IDE, все это компилится и деплоится на сервак или еще куда. Может конечно ты имеешь ввиду фреймворки. Если так, то это тоже безинтерфейсное все. Это просто заранее откомпиленный комплекс программного кода, служащий определенным задачам (как правило это Spring)
>Там что через веб-интерфейс всё ?
Джава отвечает за бекэнд только ка парвило, то есть тебя вообще не волнует особо как данные будут отображены. конечно на практике обычно морда вебовская
>Тут декстоп приложения делаются или уже моветон ?
Делаются, но уже моветон, лол. Это не ниша языка. Но если очень хочется то пожалуйста - напедалить какую-нибудь кнопкожалку на десктоп - не проблема.
>А где ты зарабатываешь 200к вне дс/дс2?
Владивосток.
Но я работаю оч много.
При 8часовом рабочем дне дефолтном - это было бы 150к.
Ну в ДСе под 200 было бы с нормальными условиями.
Но в 1Се верхний предел это эти самые 200к. Максимум 250. Дальше уже всё, потолок стеклянный почти не разрушается, завязанность на СНГ, локальный стек, отсутствие best practise, которые используются во всём мире (ну процедурный стиль в 21 году ещё, архитектурно платформа устарела на лет 20), жидовская фирма, которая документацию продаёт за далары и садит клиентов на инглу лицензий, грязь, блядство и гавно. Я даж баг репорт в фирму 1С не моггу отправить, так как там кучу бюрокартии.
Я не хочу тут оставаться. Есть опасения, что сегмент 1Ски начнёт постепенно оттесняться. Вот, кстати, CRM сеггмент у неё уже отжали. И могут дальше пойти отжимать. Понятно, что буха и зарплата останется, но я не занимаюсь этим, да и там уже не совсем программирование.
>>219770
>Читаешь бесплатное, воруешь у инфоцыган.
Да у меня есть деньги. Почему нет. Пусть обучают ёпта. Вроде на ОТУСе по отзывам норм площадака, не наёбская.
>Где ты найдешь проекты на 16+ джаве?
У нас уже идет тестовая миграция на 17. Я потестистил сборку и рантайм нашего проекта на 17-ой. Как только будет на уровне компании одобрено использование в проде, начнем миграцию.
Насколько мне известно, в jpa такой возможности нет. Но скорее всего, ты ее и так пойдешь в базу, чтобы проверить, существует ли автор с ид 88
>Если ты не знаешь чем integer отличается от boolean
На самом деле вопрос гораздо глубже, чем кажется. В байткоде нет операция по работе с булевским типом и все операции с булевскими типами это операции с int. Есть только тип поля и параметров boolean.
Мимо 2 года байткод генерил.
Ну если она уже и вышла из тестов, один хуй это не значит, что на нее уже переехали много проектов.
>А что тебе мешает обычный pojo сделать?
Ничего, так и сделал. Просто иногда заебывает делать все эти обертки, когда уже все готово, и местами даже использовано в дургих методах, но вдруг выясняется что кое-какие порождаемые параллельно в том самом методе данные тоже нужны на выходе. Соответственно изволь потом подправить везде, где уже успел наделать вызовов.
Да там это было для образности сказано, что типа есть такое понятие как "тип данных" в программировании (по крайней мере, с развитой системой типов, как на жаве). Если уж говорить про "на самом деле", то вообще нет никаких типов - а все есть обычный байтодроч на уровне машинных кодов. А вся система типов это просто контроль над сохренением семантики операций.
Не совсем понял. Ведь таплы и out переменные такая же беда настигает. Если они расширяются, все норм. Если что-то выпиливается, то нужно все править
Эффективно, имею в виду
Прям все 8 часов эффективно пишешь код? а в конце рабочего дня откладывваешь все что связанно скодоми отдыхаешь?
Не знаю. Сам задаюсь таким вопросом.
У меня синдром неполноценности. У каждого адекватного 1Сника в какой-то период его карьеры возникает такой недуг.
Ну ещё из рашки можно будет уехать, инглиш у меня норм
Таплы настигают (я так понимаю мы тут под ними подразумеваем что-то вроде параметризованного класса Tuple<T, V>), а вот out-переменные нет (ты можешь в любой момент запихнуть такую в аргументы, это никак не повлияет на output). Проблема с аутами в том, что это по сути программирование через побочные эффекты на члены класса, а это немного бесит - надо всегда учитывать, что у какой-то переменной в классе есть стейт, и он может оказаться в каком-то не том состоянии, которое ты ожидаешь.
Ага, понял.
Тогда, если мы потенциально будем меняться, нужно делать pojo. При добавлении полей в него все будет норм
Ты мыслишь в правильном направлении.
Разобраться с одним подмодулем модуля по интеграции с соап-сервисом. Весь модуль - по сути соап-клиент + сервер для рест клиента. Подмодуль - именно соап-клиент.
И написать подобный подмодуль для другого модуля по другой доменной модели.
В модуле 200+ классов. Вызываются другие модули(во всем проекте - 30 мавен модулей в каждом около 5 подмодулей и 15к файлов). И этот модуль вызывается другими модулями.
Код на смеси старого спринга и библиотек реализующих javaee. Код написан хуево, дао, репо и контроллеры часто названы сервисами(наверно есть что и похуже, я просто пока не дошел и плохо шарю).
Документации нет.
Я вообще не знаю соап. За первый день даже не смог найти точку входа.
Кабан уже через 2 часа начал спрашивать разобрался ли я.
С чего начать?
Если меня уволят через 2-3 недели с записью в трудовой это плохо для резюме?
Какая разница, на чём писать бизнес-логику?
А почему нет? Это просто конвенция. Предполагается что программист не заморачивается с возвратом кода отработки.
Сделал вот такой код чтоб это проверить, и вроде как результат показывает что все строго наоборот. Причем если перевернуть циклы (сначала отработать по Entry) то разница вообще становится огромной (показано на врезке внизу в консоли). Если раскомментировать вывод в консоль, чтоб исключить возможность что что-то там есть связанное с lazy-вычислениями, то разница практически отсутствует (при смене порядка вычислений, имею ввиду - во всех случаях второй проход раза в 1,5 быстрее, бОльшая часть времени уходит на вывод в консоль, там величины порядка миллиарда наносекунд)
Вопрос: это я долбоеб, который что-то делает не так, или просто инфа про то что перебор по энтри-сер быстрее - фуфло?
>это я долбоеб, который что-то делает не так
This!
Бенчмарки так не пишутся. У тебя нет ни прогрева, ни нескольких запусков, ни грамотной работы с возвращаемым значением. Берешь Мавен, создаешь из JMH архетайпа проект, в нем пишешь бенчмарк:
- в инит методе заполняешь мапу рандомными данными
- делаешь 2 метода один тестит первый тип цикла, другой второй тип
- ебалу с вложенными мапами лучше выкинуть, ну или сделать 2 отдельных тестовых сценария
- значение которое прочитал из мапы обязательно скидываешь в черную дыру
- желательно написать параметризированный тест и проверить на разных размерах (10, 100, 1000б 1000000)
Вот примеры как правильно писать JMH бенчмарки https://github.com/openjdk/jmh/tree/master/jmh-samples/src/main/java/org/openjdk/jmh/samples
В этом нет смысла. Возврат int был принят в Си для последующего встраивания утилит в сценарии на shell-оболочке, чтобы можно было делать вывод об успешности выполнения каждого шага. В C++ это осталось для совместимости.
Java, во-первых, изначально не предполагала написания утилит для скриптов в каких-то оболочках (это нарушало бы кроссплатформенность), нацелившись на создание полностью своей экосистемы. И по этой причине ты передаёшь класс на исполнение не оболочке, а виртуальной машине. А там принцип коммуникации построен на объектах, любая ошибка — это, как правило, исключение со стектрейсом. Код возврата JVM нахуй не упал.
Ну а во-вторых, если тебе вдруг приспичит использовать Java для задач, традиционных для Си что само по себе не очень умный выбор, но мало ли, то у тебя есть System.exit(), куда ты можешь засунуть любой код возврата, какой хочешь.
Да это кусок реального рабочего проекта, поэтому там карта в карте, и небольшая выборка из примерно 50 энтри суммарно тоже по этой причине. Я понимаю что бенчмаркинг это довольно сложное дело, но все же по множеству запусков с перестановками выглядит так, будто энтри-сет медленнее. Данные там не рандомные, но точно разные (получины вычислениями кое-какой бизнес-логики).
Энивей, я не собираюсь вливать говно в жопу с серьезным бенчмаркингом, раз уж оказалось что это тысячи наносекунд всего, но все же спросил вдруг кто знает что-нибудь на эту конкретную тему (доступ по ключу VS энтри-сет)
Хуитрикса.
>по множеству запусков с перестановками выглядит так, будто энтри-сет медленнее
У тебя сайдэффекты перевешивают, все эти множество запусков.
Код написан в одном методе, а у JDK есть ограничения у JIT-а, он не всякий код из интерпретатора может заменить на скомпилированный. Метод довольно большой, почти наверняка есть ограничений на инлайнинг тупо один метод заинлайнился, а другой нет. Никак не используется возвращаемое значение - что там JIT выкинет - неизвестно.
А какое множество то? Там уже готовая карта, я просто ее пробегаю и вывожу.
То есть ты считаешь что энтри сет быстрее работает?
>То есть ты считаешь что энтри сет быстрее работает?
Я не знаю. Я написал бенч, сейчас закончит прогоняться узнаю.
Подозреваю, что на маленьких мапах разница будет незаметна и выигрыш будет только на больших.
О, прикольно. Если не затруднит, покажи результат. Не то чтоб это важно, но для общих знаний.
Спасибо
Потому что решения не с потолка берутся и хотелось бы понимать, в чем их смысл
>Benchmark (mapSize) Mode Cnt Score Error Units
>MapIterate.iterate_by_key 10 avgt 25 97,182 ± 1,287 ns/op
>MapIterate.iterate_by_key_value 10 avgt 25 75,485 ± 1,246 ns/op
>MapIterate.iterate_by_value 10 avgt 25 79,858 ± 6,576 ns/op
>MapIterate.iterate_by_key 100 avgt 25 1045,236 ± 13,137 ns/op
>MapIterate.iterate_by_key_value 100 avgt 25 834,681 ± 18,286 ns/op
>MapIterate.iterate_by_value 100 avgt 25 821,635 ± 19,629 ns/op
>MapIterate.iterate_by_key 1000 avgt 25 11427,181 ± 353,521 ns/op
>MapIterate.iterate_by_key_value 1000 avgt 25 8951,105 ± 390,315 ns/op
>MapIterate.iterate_by_value 1000 avgt 25 10653,960 ± 951,261 ns/op
>MapIterate.iterate_by_key 10000 avgt 25 199055,673 ± 4000,670 ns/op
>MapIterate.iterate_by_key_value 10000 avgt 25 180748,862 ± 12711,778 ns/op
>MapIterate.iterate_by_value 10000 avgt 25 174720,827 ± 2289,144 ns/op
В середине прогона комп ушел в спячку, так что результаты для 1000 неточные. Но видно, что итерация по ключу чуть дольше, а keyvalue и value почти одно и то же.
И как это в спрингдате сделать? В репозитории сделать метод, над которым с помощью аннотации ручками написать запрос?
Нет такого в спрингдате уже давно.
Ещё можно из блокнота в ide перекатиться, из командной строки в проводник, из джавы в no-code.
Жабу специально под это и затачивают. Можно приводить сколько угодно разумных доводов против этого, но очень показательно, что в большинстве туториалов примеры пишут без импортов, и если не использовать иде с автоимпортом, приходится гуглить каждый класс. И хуй запомнишь эти импорты из-за всяких спрингов с десятью вложенными пакетами.
Хочется писать в консольке и блокнотом - юзай сишку или питон, там нормально сделано.
А веб на который меня посадили работает через javax.ws.rs.* аннотации. Это сильно хуево?
Чему ты научишься дроча джаву в консольке без сборщика, если на работе этого никто не делает?
Научится скачивать сотни жарников руками, когла доберётся до спрингоговна.
Консоли.
Нахуя нужен сборщик, если у тебя одна-две зависимости? Ты напишешь две консольные команды один раз и они будут моментально выполняться каждый раз когда тебе это нужно, а мавен мало того что срёт в стдаут бесполезными простынями текста, так ещё и замедляет повторные компиляцию-запуск, которые приходится делать постоянно.
Не надо воспринимать это как челлендж . Нормальным людям за такое должно быть стыдно.
Это хибернейт и спринг такие, для них мейвен оправдан. Все остальные допы(jdbc, servlet, junit, javafx итп) подключаются буквально одним джарником.
Классический троллинг тупостью.
Для вас дебилов блокнотных звездочку завезли.
Джавовский аналог мейка - ант. У него скорее build.sh
ля гет
на ноуте
Зарепортил.
Хорошо, что таких "продвинутых" большинство. Меня так подобрали грести без вышки за юный возраст, конкуренции даже не почувствовал
зумер мидл
Чаю
Ебал я столько говна учить, в джеесик куда проще и быстрее вкатиться. Буду попердывать за 150к пока ты доучивать очередную древнюю хуйню изжопы
Детекчу в тебе свиновыблядка из нуб-треда, который там усирается как он всех крутит на хую со своим CMS-фуллстеком за 70к. Поссал на всякий случай тебе на спину.
В легаси нет базы. Мало технических задач, тупо пилишь бизнес-логику на существующий платформе и стагнируешь. Вот в чём-то актуальном куда легче прокачать эту самую базу.
Устроился на первую работу. Там легаси, очень размашистое, плохо написанное и нет документации. И стек еще древний оказался.
Сижу, копаюсь, реверс-инжинирингую.
Не знаю, что может быть хуже.
Я так понимаю нормальная практика,когда ты пишешь не на джаве,а на платформе? Оракловской или ибм
Научишься grep'ать, особенно в древнем говне с кучей xml
Не, пишешь ты на обычной джаве. Просто в проекте будет уже столько абстракций, что практически вся техническая часть будет скрыта за готовыми обёртками, будто бизнес-фреймворк, для всего будут готовые сервисы, даже спринговве аннотации могут быть переопределены по той или иной причине. Ты знаешь, как этим пользоваться, но не знаешь, как оно работают и взаимодействуют со спрингом, всё уже придумано за тебя. Не чувствуешь экосистемы, да и не гуглишь ничего, тупо смотришь внутреннюю документацию. Можно было бы писать на любом другом языке и не заметить разницы, разве что синтаксис другой.
Ай ной дат фил, бро.
Спустя пару недель уже вешаюсь и подумываю перекатиться в машоб или каки-нибудь алгоритмы. Уже даже скачал книжку по пайтону.
Начал на проекте с микросервисами, монгой, кубернетисом, кафкой, так тут и сижу
Да, все новые проекты на буте и докерах-хуёкерах. Старые проекты по мере возможности тоже распиливают на микросервиы.
>Мне интересно делать красявые графические приложения
Так возьми Qt или Electron. Сейчас ГУИ на жабе уже давным давно мертв, свинг остался только в самом махровом легаси времени java 1.4, про которое уже мало кто вспомнит и JetBrains IDE, а javafx в принципе оказалась никому не нужна. Правда в джетбрейнсе решили сделать свой фреймвор jb-compose, посмотрим что из этого выйдет, но скорее всего ничего хорошего.
Шарп может и хорош для ГУИ на винде, винформочки и впф сделаны неплохо, но вне винды они никак не используются, а MAUI не поддерживает линухи.
Десктопный гуи уже сдох как лет 10, если не больше, ковыряться в доисторическом говне мамонта сейчас нет смысла, нужно брать либо qt, либо электрон, все остальное сдохло по разным причинам.
>QTranslate is a free translator for Windows
>Windows
Я думал джависты исключительно под linux/mac os сидят.
Скала нахуй не нужна очевидно, хоть задумка и интересная была, но в последние 2-3 года желающих писать на скале все меньше становилось, в РФ наверное только в вертикалях яндекса и тинькоффе она еще попердывает, но в остальных местах ее либо на жабу заменили, либо на котлин.
А сколько их, новых проектов? Ну вот если я пойду в условное МЯСО/ритейл вроде Х5/утконоса (и что там еще из продуктовых компаний есть в РФ?), или всякие говногалеры по типу нетсракера, ебама, лохософта, ланита, крока, я с большей вероятностью попаду на Java EE 6/Glassfish и говнокопролиты, либо же на няшные микросервисы ну или на нормальный монолит, который потихоньку пилят на микросервисы и переводят на новые технологии?
А какие годные языки тогда остаются?
На чём бы вы предпочли пердолить код, если бы ЗП всем платили бы одинаковую?
А если проект настолько старый,что работает на чистой жабе? У Райфайзен банка я знаю есть такие системы
Пока первая неделя прошла. Думаю месяца через три начну искать. Месяцев через 8 уйду, даже если не найду ничего.
А может меня сам директор этой хуйни выгонит через 2 месяца, если я не начну шарашить новый функционал на этом же говне. Ведь там копать - не перекопать.
Просто это первая работа и на другие места даже на собесы не звали. И меня предупредили, что легаси. Но я не думал, что все настолько плохо.
>На чём бы вы предпочли пердолить код, если бы ЗП всем платили бы одинаковую?
Да похуй на чем, нужно смотреть по задачам. Конечно в маняфантазиях я пишу ЙОБЫ от компиляторов до геометрических движков всяких CAD/CAM, от систем анализа трафика в realtime до распределенного отказоустойчивого хуйлоада, но в действительности мы все понимаем, кто есть кто.
1. Не всегда монолит хуже микросервисов. Нормальный не легаси монолит может быть даже проще в разработке, чем когда тебе надо последовательно сделать изменения в 10 микросервисах. А уж синхронизация состояний в 10 базах, это отдельное удовольствие.
2. Как правило в аутсорсерах проще сменить проект если не нравиться.
Про sdkman слышал от ютуберов, но это нужно все sdk через него ставить. А админ говорил про какую-то хрень для работы с уже установленными по обычному sdk.
>Несмотря на то что SDKMAN! удобен для установки JDK, но он не помогает при автоматическом переключении между разными JDK при переходе от одного проекта к другому. Здесь нам поможет jEnv.
>После того как вы установите несколько JDK, с помощью SDKMAN! или любыми другими способами, вам нужно будет добавить их в jEnv:
В итоге на винде дома закинул два батника в корень диска c. Раньше через гуй винды переключал это говно.
лошара блять)))
Масштабируемость и отказоустойчивость
пизда
Подойдет ли книга Spring Boot 2. Лучшие практики для профессионалов? До этого смотрел на ютубе курс по Spring от Наиля Алишева и делал Rest Api CRUD сервис магазина домашних животных, который создавал объекты в бд, обновлял их, удалял и получал объекты из БД
Подойдет ли книга Spring Boot 2. Лучшие практики для профессионалов? До этого смотрел на ютубе курс по Spring от Наиля Алишева и делал Rest Api CRUD сервис магазина домашних животных, который создавал объекты в бд, обновлял их, удалял и получал объекты из БД
Я тебя изнасилую
Даже если на работку в итоге не возьмут - я начну больше шарить в программировании в целом?
Сейчас абсолютный ноль
не, просто прогаю на раб-оте по мелочи. но я недавно вкатился. в чем твой вопрос вообще? для вката подойдет любой ЯП, особенно массовый (то есть всякие брейнфаки и ассемблеры лучше не выбирать). Особенно если ты не будешь в нем замыкаться и почаще будешь интересоваться как то же самое делается в других ЯП, и вообще почему их так много и чем они разные.
Милорд 500ккк в пикосекунду.
У каждого микросервиса есть свои данные которые надо как-то хранить.
Например: один микросервис занимается учетом складких остатков, второй занимается заказами, третий отвечает за задания на комплектацию товаров на складе, пятый за трекинг заказов, шестой рассылает нотификации пользователю. И вот ты заказал дилдак и смазку: у тебя сервис заказов отправил запрос в сервис учетом складких остатков на бронирование дилдака и смазки. После подтверждения бронирования сервис заказов отправил запрос на комплектацию посылки в сервис комплектации. Когда сборщик начал комплектацию заказа, выяснилось что смазки нету у складских петровичей был веселый вечер и во первых тебе придется долбиться насухую, а во вторых надо обновлять состояние других сервисов: у складских остатков отмечать что дилдак продали, а смазку спиздили петровичи. У сервера заказов, надо отметить, что заказ будет выполнен частично и послать уведомление. В сервисе трекинга добавляем собранную посылку и включаем отслеживание. И шлем письмо с рекомендациями по изготовлению смазки из подручных средств.
И каждый пук в этой цепочке сопровождается изменениями в базе и надо это все делать надежным способом. Что делать если сделали 3 попытки послать запрос, но сервис по прежнему не доступен? Приходится либо в локальную базу записывать какой-то флаг и потом по расписанию пытаться послать этот запрос. Или слать нахер этот REST и переводить все на очереди, тогда у тебя возникает куча состояний, типа запрос на бронирование товара отправлен, запрос на бронирование товара подтвержден/отклонен и вопросов что делать на UI, что показывать покупателю.
А в монолите все просто: Ein Service - ein Datenbank - ein Transaktion.
Но ооп нигде в том объеме, как в джаве и шарпе не нужно.
он тебе про фому, ты ему про ерёму. с каких пор ооп стало синонимом программирования?
Чел ты так увлекся кейсом со смазкой, что так и не объяснил зачем 10, кроме одной основной базы. Почему данные микросервисы не могут хранить в основной? Дорого и долго?
А вот этот кейс про сохранение данных каждого микросервиса, несмотря на недоступность полного функционала всей приложухи он прямо такой популярный? Почему бы не хранить в инмемори базе, а потом все что не смогли отправить в основную базу через короткое время удалять?
>Почему данные микросервисы не могут хранить в основной? Дорого и долго?
Потому что тогда теряется смысл микросервисов. Смысл микросервиса - это когда ты прячешь информацию о внутреннем состоянии за API, никто за пределами микросервиса не знает что там у тебя за база и как она устроена может там вообще нет ничего и микросервис ходит за данными в другие микросервисы. Это нужно для того, чтобы можно было спокойно менять внутренне устройство без изменения API. Раньше у тебя один сервис рассылал СМС и емайлы, а теперь ты их разделил и добавил голосовые звонки, но API остался прежний.
2 главных смысла использования единой базы это: контроль целостности на уровне базы foreign/unique key и прочее и возможность делать изменения в одной транзакции создаем заказ, бронируем складские остатки, создаем задание на сборку заказа.
Нужно для понимания работы говнокода без документации.
ООП - ОО программирование. И, учитывая, что при разговоре о программировании в 95% случаях имеется ОО программирование - это синонимы.
Последние 5 лет чаще всего под программированием чаще всего подразумевается верстка штмля джаваскриптом, где с ооп все оче не оче.
Только сегодня высралась очередная шарпоблядь, её уже потёрли. Но это хуйня по сравнению с ежедневной клоунадой до 500 постоа. Можно вообще не перекатывать, пока не будет самым последним тредом, а после переката всем писать с сажей.
Можно ли вкатиться в зарплатку 100+к через 2 года?
Еще и телефоны на проходной отбирают безопасники, мемчики не полистаешь на работе!
Или же тесты надо писать так, чтобы при взгляде на них было ясно видно, что передаётся в тестируемый метод, что должно вернуться и почему?
Очень хуёво, тесты должны быть детерминированными. Если ты и юзаешь рандомные данные, то должен их сгенерировать и захардкодить заранее.
А тут короче soap клиент нужно сделать. Через jax-ws, реализация cxf. Я нихуя вообще не понимаю.
Как делать не сказали. Сказали вот код без документации, там есть другая интеграция по soap. Есть спецификация от разработчика сервиса на 180 страниц, 3/4 из которой разные xml внутри вордрвского файла.
Читаю спецификацию для интеграции к сервису и нихуя не понимаю. Там пиздец, электронные подписи, асинхронность.
Смотрю другой клиент-интеграцию для примера, а там тысяча классов. Все разнесено на 10 подмодулей и не очень ясно, как взаимодействует. Какие то классы генерированные, какие то. Как генерировать тоже не совсем понятно, cxf модулем, но как хз. Из доки cxf ничего не понятно. Ещё там откуда-то из какого то сервиса идёт шифровка и дешифровка сообщений.
Я неделю потратил чтобы это узнать.
Чё делать?
Насколько я понимаю, таким способом нельзя вставить что-то в "синтаксическую часть" запроса, например имя таблицы, атрибута или подобное? "SELECT FROM ? WHERE ? = ? " Есть ли какой-то безопасный способ такое делать?
>Хорошо ли при написании тестов использовать генераторы случайных чисел, создаваемые в рантайме строки и тому подобный динамический контент?
Можнл, если не забывать граничные случаи. Т.е. у тебя есть тест с нулем, отрицательным и положительным значением, а потом тест десяти рандомных чисел. Ну и конечно не забыть записать что за случайные значение были, чтобы можно было воспроизвести.
Но обычно такие тесты нужны, чтобы протестировать какой-то хитрый алгоритм, на предмет хитрых багов типа: не работает с числами которые одновременно делятся на 3, 5, 13. Если у тебя просто бизнеслогика взять число и записать его в базу - то нафиг не надо.
>Есть ли какой-то безопасный способ такое делать?
Нет. Смысл Prepared Statement именно в том, чтобы никак нельзя было изменить изменить само выражение.
Если тебе надо делай 2 PS одно с одним условием, другой с другим.
Хорошо (и необходимо) для property based testing. В остальных случаях - сомнительно.
Надеюсь, написано оно на электроне, требует next-generation железа, которое можно купить только за next-generation зарплату?
А что с плагинами и колорсхемами?
Нативное приложение, вдруг реально на котлиняше запилили? Я не хочу работать в индустрии где все восхищенно хавают трешняк типа го, а про котлин за пределами андроида даже молодые разрабы не говорят
Пишут что юзают котлин. Может даже на композе морду захуярили. Пока мало инфы, даже хз как это распространяться будет.
Ебать чел тупой, не может сам тест пофиксить.
Аргументировано - можно. Но тред тонет в низкопробной клоунаде без аргументов и контекста.
С такой логикой из треда всё пойдёт нахуй, кроме консольных кофемашин. Потому что тред про джаву, а не базы данных, веб-протоколы и прочее.
Прост мне кажется это какой-то ебанизм же, в эту железяку должен быть встроен какой-то рантайм, что само по себе лютый проеб памяти и хардваре-ресурсов. Сколько чего видел или делал сам - это все прогается на плюсах в нативный код, и работает без всяких там осей и виртуальных машин.
Я смотрю, ты тоже любишь крайности, как тот анон с вопросами про докер. Обсуждение, как подключаться к постгресу из спринга и как в жабе юзвть вебсокеты имеют прямое отношение к сабжу. Вскукареки, что на шарпе овердохуялион вакансий, а жаба это кобол кобол кобол - тупой шитпост, и здесь ему не место, даже если бы это было правдой.
Насколько я понимаю, это реликт с времён, когда каждое устройство было на своей ОС и со своим набором команд. Типа намного легче было ораклу написать виртуальную машину под устройство, чем осваивать ньюансы C++ под каждый телефон, если речь про разработку игры на мобильный.
Сейчас всё унифицированно и такой нужды нет.
мимо ньюфаг
Что-то я очень сомневаюсь что когда-то вообще существовали тостеры, стиралки и кофемашины с собственными осями. Опять же, ОС не обязательно нужна чтоб поддерживать JVM на борту. ОС это по сути просто диспетчер пользовательских приложений. Например у меня старинная нокия умела в игрушки на джава, хотя это не был смарт, и ничего кроме прошивки в нем не было.
>написать виртуальную машину под устройство, чем осваивать ньюансы C++ под каждый телефон
А то что жвм все равно надо каким-то способом прикручивать к аппаратной части в каждом телефоне, ты видимо не подумал, да?
По-моему весь этот концепт - просто типа такой трюк, который типа возможен, но нахуй никому не нужен. То есть действительно, имея кофе-машину на JVM со средствами ввода программ и их запуска, программист джава сможет написать для нее игру на дисплее, которая будет брать инпут от кнопок управления,.. но зачем? Ведь в 99,9% случаев все будут пользоваться заводской прошивкой, которую гораздо естественнее наговнокодить на плюсах, вкомпилировать в контроллер и порядочек.
Убийство вс кода
Дёргать публичные гет это без проблем, а вот пост/пут это уже внесение изменений на сервере. Как можно это делать безопасно? Регать другой акаунт для этого не вариант.
Никак. Может быть, делать пост/делит, но все равно изменится какая-нибудь статистика
3 миллиарда устройств?
телефон это как бы вообще не то же самое что кофеварки/стиралки/тостеры/пылесосы, не?
Бамп
Кнопочные телефоны, которые были распространены в нулевые, вполне похожи на кофеварки и стиралки тем, что тогда каждый производитель пилил свое железо и свою мини-ОС для своих телефонов. Это сейчас либо андроид, либо iOS и все работает на ARM, а тогда был такой зоопарк, в котором хуй разберешься. Теперь, понятное дело, все унифицировалось, что в телефонах, что во встраиваемой технике по большей части, так просто гораздо быстрее и дешевле вести разработку и проще нанимать новых людей к себе в компанию.
Ну шарп как язык явно неплох, наверное один из самых наполненных разными фичами и годных по дизайну. Жаба в этом плане отсталая.
Другое дело - экосистема. ИМХО, для жабы больше всяких либ и фреймворков для бекенда написано от разных вендоров, а не только от MS, как в случае с шарпом.
Удачи затащить на прод quarkus/micronaut, спринг по факту единственный фреймворк (rip java ee)
В большинстве мест спринг основной фреймворк, и будет им оставаться еще очень долго, но работу в РФ на quarkus/micronaut/helidon/guice/vert.x можно уже сейчас найти, хоть ее и очень мало, к сожалению.
Увидеть бы лица тех, кто предпочитает это васянство и костыли вместо божественного ktor.
Меня обманули?
Потому что приходишь ты не на стек, а на предметную область. Конечно же, это у всех так, что читаешь талмуды типа pro spring, а потом из всего спринга юзаешь пять аннотаций.
Сколько времени нужно для освоения, примерно?
Чет я уже не уложился(
Да нихуя, там например все по обычному, но просто без спринга во многих местах. Спринг даты нет, но есть хибер. Для реста вместо spring mvc - jax rs. И куча таких моментов, где спринг бы заебись смотрелся, даже в те времена, когда проект начинали.
Мне сказали могу пользовать спринг, если уж очень хочу. Но для единообразия лучше не стоит.
https://leetcode.com/problems/maximal-rectangle/submissions/
мое недорешение:
https://pastebin.com/Fs4vti80
прикол в том что, при подаче массива {{1},{0}} на литкоде возвращается 0, а в идее 1.
Как такое может быть? Это оптимизация? или версии жаб различаются у меня 16?
Есть один parent, внутри которого лежит чекстайл.хмл файлик. Как мне в дочернем мавен-проекте указать в плагине путь к этому файлу? И возможно ли это? Нагуглил что можно обращаться к пропертям парента через ${project.parent.property-name}, но либо у меня руки из жопы, либо эта хуйня не рабочая
Структура у проекта не такая, парент находится не выше и не рядом, а где-то там в артифактори
А в паренте чекстайл плагин настроен? Тогда он автоматически и к чилдам будет применятся.
Настроен вот таким образом. Но нихуя не применяется
Так как я хотел сделать не получилось, но получилось по гайду создав отдельный проект для чекстайла
https://codeburst.io/how-to-centralize-your-checkstyle-configuration-with-maven-7575eacd7295
Написан на современном стеке - будущем стандарте индустрии. жс макакеры со своим вскодом нервно плачут от зависти.
Мокать ответы фейковыми данными, которые в точности как реальные ответы от сервиса. Но может выйти что мок работает, а валидация на сервисе провалена по воле Аллаха. По сути нужно в полуслепую переписать рест реализацию этого сервиса и надеяться что он работает именно так.
Если мой калькулятор без видимых на то причин создаёт папку с:\говно\моча, то тестом найти её практически невозможно, и невозможно убедиться, что калькулятор\класс\метод не делает того, что он не должен делать.
Это вызвало вопрос - почему нет способа запуска\объявления программы, которая по определению неспособна к произвольному изменению данных на жестком диске, обращениям по сети итп?
Если я в джаве создаю объект и вызываю у него метод, то он при всём желании не сможет прочитать/изменить переменные, которыми я пользовался, но ему не передавал. А запуск приложения на пк - это всегда раздвинуть булки и надеяться, что ничего плохого не произойдёт.
Хотя на мобильных устройствах с инкапсуляцией гораздо лучше. Это потому, что платформа - молодая, а пеки сотканы из легаси-говна?
Вообще, можно ли запустить екзешник так, чтобы отображались все его попытки записи на жесткий диск?
В чём заключалось твоё превосходство перед бумерами-коллегами, в чём они были хуже?
choort szi est'
У половины преподов в курсах по спрингу стоит винда. У меня проблемы были только с редисом. Но можно использовать докер/всл.
>ошибка в дизайне языка
нихуясебе у нас дизайнер языка в треде
жаба пережила 17 версий и исключения ни разу толком не трунули - это как раз говорит о том что это одна из самых важных фич
>и не делает того, что не должна делать.
А вот это не совсем правда, иногда бывают явно оговоренные вещи которые программа делать не должна, но обычно тестируют именно то, что программа должна делать. Проверить все случаи "не должна" невозможно.
>Это вызвало вопрос - почему нет способа запуска\объявления программы, которая по определению неспособна к произвольному изменению данных на жестком диске, обращениям по сети итп?
Есть SecurityManager https://docs.oracle.com/javase/8/docs/api/java/lang/SecurityManager.html который умеет это контролировать, но его скоро выпилят к хуям https://openjdk.java.net/jeps/411
Более современное решение это Docker, он не запрещает ничего, но за его пределы можно выбраться только если явно разрешить это.
скан классов скорей всего не срабатывает, сделай конструктор бина контроллера и проверь в дебаге что он вызывается
@RequestBody String[] words
Вообще никаких проблем. Даже если у тебя оракл вместо постгреса.
такой тупорылой статьи я давно не читал
Проиграл
почему тогда регулярно выходят новые версии, в том числе с весьма весомыми новшествами?
>Почему мне вобычном консольном проекте пишет, что я не могу использовать аннотации?
А текст ошибки скопировать не судьба? Но вангую что ты не в том месте лепишь аннотацию, @SuppressWarnings можно ставить на класс, поле, метод и объявление локальной переменной объявление и присваивание должно быть в одной строке.
Рынок использует восьмерку
Текст ошибки буквально Annotations are not allowed here, как и написано в первом сообщении. Сам ворнинг, как и написано, Manual array copy.
проиграл с этого погромизда
>Текст ошибки буквально Annotations are not allowed here, как и написано в первом сообщении.
Нет, дебилушка, текст ошибки аннотация не разрешена тут, а у тебя написано
>пишет, что я не могу использовать аннотации
Если ты не понимаешь в чем разница между этим двумя предложениями - то программирование это не твое это я серьезно.
Ну и в твоем случае аннотацию надо ставить на метод.
>Написан на современном стеке - будущем стандарте индустрии
Ага, Котлин уже стал стандартом индустрии, осталось Skia стать стандартом и вытеснить Electron и заживем! но это не точно
Мне кажется стандартом уже стал джаваскрипт, который выполнил все то, что сан микросистемс прогнозировали про джаву
@Var @Named("a") @Inject @Service @Named("serviceA")
ну так ебаное айти
А что бы у меня был массив точек в бд , которые можно было бы добавлять и удалять, и они все отображались на страничке. Направьте куда гуглить .
TypeScript native.
Принял , тогда не буду маяться хуйней и сделаю на нем.
>даже самую последнюю, с шарпом/жсом/питоном/котлином
Да хули сравнивать - програмил на джаве 8 лет и на котлине 2 года, один хуй задачки делать надо а не писюнами мерятся
Базара нет котлин лаконичный язык при условии что какой-нибудь порридж не начнет ебошить бесконечное количество экстеншенов или писать на нем код в стиле брейнфака.
Ты когда-нибудь пробовал понять чужой код написанный в функциональном стиле с помощью экстеншенов чтобы было МАКСИМАЛЬНО коротко.
За такой PR при просмотре хочется яйца оторвать а тебе как тимлиду нужно его в продакшн пустить.
Потом вдруг в продакшене случается пиздос и нужно очень быстро понять где же бажина а ты час пытаешься прочитать 3 строчки на модном языке.
Если бы язык заставлял программера писать читаемый код это был бы лучший язык.
Вот и не пускаешь а порридж тебе говорит что ты не оценил его прогрессивный соde style и вообще не любишь модный язык
А я люблю язык а вот хуйни не люблю
Ну и самое интересное это как автор пытается прочесть собственный код спустя пол года при тех же обстоятельствах - внезапный косяк на проде. Ох сколько раз уже это пережил
>>227004
А кстати, можно ли в проект на джава в интеллидже начать невозбранно встраивать котлин-код? Я просто пилю собственные микросервисы на почти голой джаве, никому по сути ничего не должен по содержимому проекта, хоть на брейнфаке пиши. Думаю ради расширения знаний вкатиться. Это реально?
мимо-макака
>Если бы язык заставлял программера писать читаемый код это был бы лучший язык.
Теперь это го тред.
Можно конечно, кто ж запретит. Был и такой опыт.
Но это опять таки приведет к зоопарку - отрыл один файл там жава, открыл по ссылке класс а там котлин. Через пол года едешь в дурку.
>Теперь это го тред.
varFoo, err := GetFoo()
if err != nil {
return err
}
sliceBar, err := SliceTheBar(varFoo)
if err != nil {
return err
}
err := CheckBarSlice(sliceBar)
if err != nil {
return err
}
> if err != nil {
> return err
> }
Некоторые местные шизики кайфуют от checked exceptions (которых, кстати, нет в шарпе), так что им и это должно понравиться.
Ну и толку-то? От вседозволенности сносит башню только так. У меня с груви такое было в свое время.
https://habr.com/ru/company/otus/blog/592585/
Если я джун и пойду работать туда, где нету спринга, я смогу через годик претендовать на позицию мидла? Или это пустая трата времени и нужно сразу искать позицию, где работают с современным стеком, пускай и денег платят меньше?
Блять, понятно, что она тут (в месте копирования) не разрешена, а не на заборе, например, нахуй ты меня дизморалишь? Негде больше самоутвердиться? Клоун. Чем так отвечать, лучше бы просто ебало завалил.
Что над методом, мне уже ясно, неясно почему не над присвоением, что ты и не осилил объяснить.
Ну я понимаю, что там не столько хардскиллы имеют значение, сколько пройденные грабли. Но вот сейчас читал статью на хабре про то, что синьор должен иметь опыт разработки ТЫРПРАЙЗ приложений. А если я буду несколько другие задачи выполнять?
> В день большая часть программистов пишет приблизительно 10-12 строк кода, которые попадают в итоговый проект. Настоящие программисты 90% своего времени тратят на размышления и пробные запуски, чтобы найти лучший вариант программы.
Это рофл или как? Большинству программистов настолько нехуй делать или там огромное легаси, что чтобы что-то добавить/исправить надо весь день разбираться?
При чем тут говорится про всех программистов, а не конкретно джавистов.
Что ты понимаешь под другими задачами? На спринге ничего другого нет, только тырпрайз.
> там огромное легаси, что чтобы что-то добавить/исправить надо весь день разбираться?
Не только. Большинство тасок, как правило, до конца не понятны, потому что упираются в предметную область, и ты большую часть времени продумываешь все варианты и граничные случаи. Уходит время на погружение в эту самую область, и если один разраб что-то не успел доделать, хотя оставалось немного, другому разрабу придётся разбираться с нуля, и потратит он намного больше времени. Ну и переписки с созвонами отнимают дохуя времени.
>Что над методом, мне уже ясно, неясно почему не над присвоением, что ты и не осилил объяснить.
Жопоглазый, давай начнем с того, что не можешь прочесть ни то что тебе пишут
>>226760
>@SuppressWarnings можно ставить на класс, поле, метод и объявление локальной переменной объявление и присваивание должно быть в одной строке.
ни документацию
https://docs.oracle.com/javase/8/docs/api/java/lang/SuppressWarnings.html
>@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
Это места где эту аннотацию можно использовать, потому что так решили авторы джавы.
>нахуй ты меня дизморалишь? Негде больше самоутвердиться? Клоун. Чем так отвечать, лучше бы просто ебало завалил.
Мы на дваче, тут не вытирают сопли. Я тебе все сказал еще первым постом. Не нравится? Пиздуй на курсы, там за твои бабки тебе будут и сопли вытирать и жопу целовать.
String t1s = "12:34";
String t2s = "07:41";
DateTimeFormatter timeFormat = DateTimeFormatter.ofPattern("HH:mm");
LocalTime t1 = LocalTime.parse(t1s, timeFormat);
LocalTime t2 = LocalTime.parse(t2s, timeFormat);
LocalTime t = t1.plusHours(t2.getHour()).plusMinutes(t2.getMinute());
String ts = t.format(timeFormat);
System.out.println(ts);
Огромное тебе спасибо, анончик.
Вот знакомые мидл+ фронты и меньше меня знают и им норм. Но с джависта спрос другой.
Развернуть дерево и с графами всякое делать точно придется?
Просто я садился за алгосы несколько раз, меня быстро заебывло и я забивал. А по ощущениям с моими силами мне надо на литкод + учебник потратить месяца три минимум
Например, вот:
Массив items = {"foo", "bar", "baz"];
Твой шаблон:
\\<ul>
<items :{item | \\<li><item>\\</li>
}>
\\</ul>
И в результате получится:
<ul>
<li>foo</li>
<li>bar</li>
<li>baz</li>
</ul>
А если мне, например, надо ставить запятые между элементами массива, но после последнего элемента запятая не нужна?
>Развернуть дерево и с графами всякое делать точно придется?
Не придется ни разу, если не ходить специально во всякие яндексы
<items;separator=", ">
https://github.com/antlr/stringtemplate4/blob/master/doc/cheatsheet.md
Норм, беру. Только пусть еще шаблоны будут в ${}, а не в <>.
Трудно ли написать на Java куайн? Какого лвл-а по шкале джуно-сениора надо быть чтоб справиться?
Писяпопа))))
Браток, только вернулся к этому вопросу.
Посмотрел. А у меня идея так по дефолту настроена.
Сегодня опять надо будет дебажить. Как скинуть миллион библиотечного кода и походить только по коду проекта?
Шарпошиз, плиз, вернись в стойло
Этот тред отображает ирл положение Java.
Зарегал ещё хабру и суперджоб. Позвали на два собеса на удаленку и пропали. До 12 декабря думаю посижу. Я с этой работой слез с пособия. И если я уволюсь сейчас и получу только часть от оклада(а оклад треть того что кабан обещал), то не смогу заплатить за квартиру. Не думаю что кабан при расчете будет платить то что обещал, а не то что в договоре.
Сегодня даже не копался в коде. Чтобы через дебагер ковыряться в реализации говна нужно нужно посылать запросы с фронта старого модуля, а там подписи и нужно поставить крипто про и крипто про плагин фаерофокс на машину с убунтой. Я не смог, админ меня сегодня послал на потом.
Сижу читаю про асинхронный соап. Ибо в новом модуле будет и асинхронный. Причем хз как это реализовывать. То ли через jms, то ли нет. Jms я тоже соответствовенно не знаю.
И мне хотели в первый день поставить нетбинс и бивер. Но в итоге поставили ультимейт идею с ключом с моим степика.
Мне кажется это самая трешовая работа на жабе эвар.
Жесть конешно. Я сам только вкатываюсь, до этого на пыхе пробовал кодить, но джава больше понравилась. После твоей истории даже ссыкотно как-то, неужто вот так прям бросят в огонь и делай что хочешь? Неужели им вообще пахую что будет с проектом? Что если ты накосячишь? Разве обычно не делают так, что вводят в курс дела, в курс стека и всё такое в первый месяц/неделю? Ну и джуну же еще приставляют синьора какого-нибудь, опять же, чтоб не накосячил. Неужели я настолько маняфантазёр?
>>227664
Лол. Сам сижу с ключом от степика, но никогда бы не подумал, что работодатель скажет мне юзать это. И правда зашквар, похоже реально попал к кабану какому-то. Сожалею.
Они сами нихуя не в курсе. Кабан урвал проект по связям пару месяцев назад. Кодить умеет три человека. Его зам, который руководит разработкой. Но разработка это 30% обязанностей зама. И два кодера. Один пилит фронт, другой другую интеграцию. Ещё два кодера уволились за месяц до моего прихода. Сроки скоро, конь не валялся.
Горизонтальное масштабирование. Модно.
Нахуй.
Хз, наверное мобильная версия легче и лучше оптимизирована. У меня ноут так-то сильный: i5 7300HQ, 16gb ОЗУ, SSD 1gb, gtx 1060 max-Q. Всё летает, кроме этого треда.
У меня десктоп и5 4460, памяти столько же, видяха хужее. Ноль проблем с тредом.
Ты чем-то засрал свой ноут. Может режим энергосбережения стоит.
Используй спринг бут. А еще лучше gin.
Используй WildFly.
Используй Undertow.
Используй WebLogic.
Дак я блять не про скрипты спрашиваю. Я юзаю темплейт резолвер. Я указал в конфиге где лежат ресурсы. Он мне все подтянул , все стили , все скрипты а шрифты заигнорил. Если запустить страницу вне джава проекта , просто открыть index.html все нормально.
Кароч я нашел в чем проблема , просто у резолвера нужно прописывать кодировку.
--------------------------------------------------------------
1. Прочитать файл. Удалить дублирующиеся строки, указав в файле назначения количество удаленных дублирующихся строк.
2. Реализовать восстановление сжатой версии в полную.
--------------------------------------------------------------
Знаки препинания в русском и большинстве других языков не отбиваются пробелами, пряник
1. Используй BufferReader, он позволяет построчно читать содержимое файлов. Считанную строку сразу же можно write в аутпут через BufferWriter, cоседние строки не сложно сравнивать через equals, если получается труе, то запись пропускается, и инкрементится какой-нибудь счетчик. Когда некст строка будет нулл, записываешь значение счетчика и закрываешь все это.
2. Сжатой версии чего во что? Пружину сжатую? Гондон наказанный воздухом? Если речь о сериализации-десериализации, то используются файловые потоки, схоже впрочем с тем что написано выше.
<a href="map"><a>
И сделаю маппинг /map - Это окей ? Или переходы между страницами надо как то по другому делать ?
Привет. Подскажите, что нужно знать среднестатистическому джуну, чтобы попасть на стажировку с возможным трудоустройством по джаве? Ну +-, в общих чертах кроме Java Core.
>То ли через jms, то ли нет
По хорошему без провайдера типа JMS обойтись не получится так как ты будешь плодить потоки на каждый запрос.
Как вариант организовать через локальную базу сервиса - пишешь в базу пришел такой-то запрос и после обработки маркеруешь его что ответил.
Мочь на спринге сделать простой круд, ну и само собой SQL, Git, Maven.
Не трать зря время.
Он неиронично создает пул из 50-100 потоков, после чего на каждый запрос выделяет поток из пула, а как только пул закончился, то кидает клиенту 500? В 2021 году это больше на постиронию похоже, скорее на какую-то лабу в универе, чем на что-то реально рабочее.
Как же тогда пишут сервера на несколько десятков и сотен тысяч запросов в секунду? Если у нас на нашем томкате 1 запрос обрабатывается 1 секунду, то 50-100 запросов в секунду, это максимум, который можно выжать. Какие есть нормальные способы обрабатывать вплоть до 1М или 10М запросов в секунду?
Как в >>228441
>Гугл, Амазон, Букинг
строят хуйлоады? Они несколько миллионов серверов закупили и на каждом крутят tomcat servlet container, каждый из которых обрабатывает по 50 запросов в секунду максимум? Как это работает?
> как только пул закончился, то кидает клиенту 500?
Нет, запросы с открытыми соединениями тупо лежат в очереди, пока не появится свободный тред, тогда и обрабатываются.
> ак же тогда пишут сервера на несколько десятков и сотен тысяч запросов в секунду?
Поднимают дохуя нод, обмазывают кешами, автоматически масштабирующимися микросервисами, тяжёлые вычисления пишут на более быстрых языках.
На сервлетах с моделью поток на запрос жаба-мир не заканчивается. Например, если возьмешь spring webflux, будет там под капотом по дефолту неблокирующий netty, заточенный на тот самый хуллиард одновременных соединений. Хотя и на условном томкате не обязательно обрабатывать каждый запрос отдельным потоком.
Почему вообще при этом к 2021 все уже не выкинули давно томкаты? Потому что не все подряд амазоны, а потоков может быть не 50-100, а скорее 500. И тогда при твоих расчетах с запросом за секунду десяток томкатов дадут 5к в секунду. Гугл на планете один, а для твоего бизнеса хватит с запасом.
ПИЗДЕЦ,
Я так понял, что большинство джава проектов до сих пор пишется в блокирующем стиле. А у меня острое желание писать исключительно неблокирующие сверхбыстрые легкие сервера. Мне нужно изучать Govno для этого?
Я никогда не думал, что джава это старый отсталый язык, но вот именно то, что почти все пишется с блокировками, меня очень сильно огорчает.
>>228546
ПИЗДЕЦ
Я так понял, что большинство джава проектов до сих пор пишется в блокирующем стиле. WebFlux не популярен и даже не занимает 30% от всех спринг проектов. А у меня острое желание писать исключительно неблокирующие сверхбыстрые сверхлегкие сервера. Мне нужно изучать Govno или node.js для этого?
Я никогда не думал, что джава это старый отсталый язык, но вот именно то, что почти все пишется с блокировками, меня очень сильно огорчает.
>>228546
>Потому что не все подряд амазоны, а потоков может быть не 50-100, а скорее 500. И тогда при твоих расчетах с запросом за секунду десяток томкатов дадут 5к в секунду. Гугл на планете один, а для твоего бизнеса хватит с запасом.
Я всегда думал, что жабу используют в сверхогромных энтерпрайзах, продуктами которых пользуются миллионы и миллиарды людей. Ну и думал, что почти вся джава это хуйлоады. А тут оказывается, что для большинства задач достаточно блокирующей модели? Как такое возможно? Разве даже у самого помойного интернет магазина не бывает нагрузки в 100-500к соединений в секунду?
Я думал, что подобные сайты просто вымерли где-то в середине нулевых еще.
Да и взять тот же сбер, который написан на дефолтном спринге чуть более, чем полностью. Там же миллионы людей ежесекундно переводят друг другу деньги и оплачивают покупки в интернетах. Неужели для этого тратятся охуллиарды на закупку серверов?
Ты слишком преувеличиваешь нагрузки
"Блокировки" серьёзных проблем не вызывают, системный планировщик задач не даст процессору простаивать и переключит ядро на другой поток, пока первый ждёт разблокировки. Проблема только одна - сам системный планировщик работает не так эффективно, как работал бы встроенный. Есть проект по впиливанию его в жабу, называется Project Loom. Ну и куча реактивных либ, там пиши без блокировок, сколько влезет.
А энтерпрайз не обязательно огромный, очень часто это несколько тысяч внутренних пользователей. На реально нагруженных проектах, да, закупают больше серверов, но так делают независимо от стека технологий, там хоть на сишке с асинхронными либами пиши, многократного прироста производительности не увидишь.
> миллиарды людей
>Да и взять тот же сбер
Алё, миллиарды это вся планета. Сядь прикинь, даже если считать, что все взрослое население страны каждый день совершает штук по 5-10 переводов через сбер, сколько это в среднем операций в секунду. Получатся совсем не миллионы.
Скорее можно представить, что до 50 миллионов пользователей сбера в самый пиковый час переводят по 3 операции. 150 лямов операций в час это 42к операций в секунду. Думаю может быть даже суперпиковая минута в день зпхи, где и есть и овер 50к в секунду.
Плюс там всяких юрлиц куча с их переводами.
Собственно в недрах JDK (насколько хуево импортировать jdk?) обнаружил такой класс, который появился только в 11 джаве:
https://docs.oracle.com/en/java/javase/11/docs/api/jdk.net/jdk/nio/Channels.html
И у него есть метод:
https://docs.oracle.com/en/java/javase/11/docs/api/jdk.net/jdk/nio/Channels.html#readWriteSelectableChannel(java.io.FileDescriptor,jdk.nio.Channels.SelectableChannelCloser)
То есть, можно в качестве аргумента можно передать FileDescriptor.in, и можно будет читать неблокирующе из STDIN. Вопрос только в том, что желательно бы сами данные из канала как-то прочитать. А как? Опять же, в недрах JDK нашел, что Channels.readWriteSelectableChannel возрващает не что иное, как ReadWriteChannelImpl. Этот класс унаследован от AbstractSelectableChannel и реализует интерфейс SelChImpl.
В AbstractSelectableChannel нет методов для чтения из channel в ByteBuffer, такой метод есть только у SocketChannel, что не мой случай.
Чо делать с этим всем? Есть варианты прочитать данные, которые вроде как в stdin находятся, но при этом запрятаны в класс, находящийся в глубинах стандартной либы джавы?
Или лучше не ебать себе мозги этими NIO и просто педалить спрингбут?
Как ты себе представляешь неблокирующее чтение из stdin?
> у меня острое желание писать исключительно неблокирующие сверхбыстрые легкие сервера.
Reactor, quarkus, nio, netty, kotlin ktor и ещё пол сотни фреймворков.
>>228558
> Я никогда не думал, что джава это старый отсталый язык, но вот именно то, что почти все пишется с блокировками, меня очень сильно огорчает.
У тебя есть возможность писать как угодно.
> Я всегда думал, что жабу используют в сверхогромных энтерпрайзах, продуктами которых пользуются миллионы и миллиарды людей. Ну и думал, что почти вся джава это хуйлоады. А тут оказывается, что для большинства задач достаточно блокирующей модели? Как такое возможно?
Когда маркетологи нассали в уши и не такое возможно.
> Разве даже у самого помойного интернет магазина не бывает нагрузки в 100-500к соединений в секунду?
Не бывает.
От того что у тебя в коде нет видимых блокировок не означает что их нет. Как ты собрался работать с любой базой данных без блокировок, их от тебя могут спрятать но это не значит что их не будет.
"Без блокировок" смахивает на религиозные верования но скорей всего постичь блокировки просто слишком сложно для юного вкатывальщика
Ты можешь вообще сюда не заходить.
> "Без блокировок" смахивает на религиозные верования
Просто тренд последних лет, как микросервисное говно которое хорошо продавалось вайтишными курсами. Челу еще предстоит узнать блокирующие задачи могут быть и cpu bound и что все его миллиард запросов будут стоять в очереди и сосать хуй пока потоки из пула заняты long calculation задачами.
Классический паттерн, это когда только цепочка линейна, и один обработчик идет за другим. А тут практически 2D вместо цепочки.
Я просто боюсь их. Ну женщин. Не хотелось бы сильно часто с ними взаимодействовать.
> На джаве вообще много тянок пишут?
Это нн настолько важно, в основном ты будешь взаимодействовать с тестировщиками и аналитиками. И вот среди них тянок и кунов поровну.
Вернее, не совсем вкуриваю логику, хоть направьте в какую сторону копать. Суть в том, что пытаюсь наковырять свой фреймворк по PageObject, в общем основная задача: написать метод, который СОХРАНЯЕТ текст в себе, не обращаясь к ЛОКАТОРУ.
Есть метод, в котором я достаю из локатора текст .getText() и он возвращает текст, но подводный камень в том, что данный текст, мне нужен, когда УЖЕ этого локатора на странице нет.
Я конечно могу решить проблему костылем создать стрингу и впендюрить её в ламповый пейджобджект напрямую, но не хотелось бы от слова совсем.
Большинство куа и иногда аналитики - жнщины. Представь, написал ты новый функционал, отдаешь на тестирование, а тебе куа говорят, что там есть баг. Чем чаще делаешь баги, тем чаще приходится общаться с жнщинами.
У нас ни одной фронтендерши, но есть несколько джависток.
>>229045
>>229047
А есть отрасли в айти, где не придется взаимодействовать с куа, аналитиками и фронтендерами? Ну чтобы женщин вообще не было?
Я думаю про какой-нибудь эмбеддед на С/С++, где мужики работают за тридцатку на военных заводах и регулярно получают пизды от каких-нибудь офицеров-заказчиков. Там тянок по идее вообще не должно быть, ну нахуя им в такой параше работать? По этой причине думаю пойти в эмбеддед парашу.
> ну нахуя им в такой параше работать?
А нахуя кунам там работать? Это надо быть совсем анальником-адептом культа превозмогания.
Нет таких отраслей, тянки везде. Сейчас не 19 век.
Из разработчиц у меня 2 было из 8 челов в нашей кладовке. Но это хуйня, потому что придется общаться ещё с десятком команд и отделов где процент может доходить до 100%
70к брутто, ДС. 40к у нас стажёры получают, ну и джуны в некоторых совсем убогих шарагах.
в одной конторе 50 предложили, в другой 40 попросил, тк собес на мой взгляд не оч хорошо прошел, благо через пару месяцев еще 20 накинули
15к
А что значит общаться по работе? Я вот необщительный аутист, но если уточнить, что нужно туда-то в такое-то место добавить такую формочку, то это наверное я смогу. Или нужно прямо быть альфачом и клоуном одновременно, чтобы быдло боялось, а тянки текли?
>уточнить, что нужно туда-то в такое-то место добавить такую формочку, то это наверное я смогу
как правило нужно или это, или уточнить у другого разраба какие-то детали того, то он делал
>Классический паттерн, это когда только цепочка линейна, и один обработчик идет за другим. А тут практически 2D вместо цепочки.
Тебе прям в статье написали:
>Combination of patterns if possible.
Там просто процессор внутри себя снова использует этот паттерн.
>Анон помоги JPA настроить.
>Он вроде бы подключается к БД и создает там таблицы
>Запросы на поиск тоже работают.
И чем тебе помочь? Сломать это все?
Да я понял. Ну в принципе это норм, если есть много вариантов, как обработать данные, или они должны применятся последовательно. Но я изначально искал вариант, как избавиться от кучи вложенных if-else и вышел на эту статью. Может еще какие-то варианты есть? У меня получается всего 2 варианта обработчиков на каждом шаге - тут такая комбинация паттернов выглядит излишней.
Да я еблан , суть забыл написать. Он не сохранял нифига. Но я уже решил, я не тот ентити манагер прописал в конфиге.
Нет какой-то серебрянной пули как это сделать универсально и красиво.
Если есть некий универсальный критерий который в if проверяется, например поле тип, можно создать Map где ключ тип, а значение обработчик. похож на CoR но решение принимает не процессор, а основной обработчик
Если у тебя сложные и длинные проверки в if, то вынеси их в отдельный метод код if(isOfflineTransaction(txn)) читается гораздо лучше чем 3 условия через &&.
Ну и в целом разбивать на методы и выносить функционал в классы это универсальный метод который всегда работает. Вот например их первый пример с разбивкой на методы https://pastebin.com/QK2N4hhh
Наверное не буду усложнять и оставлю просто ифы. Думаю от 2-3 вложенных веток никто не помрет.
Например, в Сбере некоторые внутренние сервисы. Он очень специфичный, не для всех задач подходит, без реальной необходимости его не берут.
Ой анончик не злись , поделись пожалуйста со мной своим опытом. А потом я тебя отняшу под хвостик :3
Всем, кто изучает или недавно изучал жпа - советую. Практическое объяснение с 50:40, до этого бла-бла.
У тебя разные методы в форме логина и в контроллере. Авторизация срабатывает, потому что выполняется до вызова контроллера.
они там генерят и методы репозиториев спринг дата жпа. Так что это и про нее тоже.
Я нагуглил что на метод POST /login у спринга есть встроенный контроллер из коробки. Я лишь прописал отображение страницы.
Видел на ютубе гайды что у челов все работало само и им не приходилось создавать свой POST обработчик логинки.
Энивей как пофиксить, подскажи пожалуйста.
Почему у тебя рест и десктоп исключают друг друга? Они в разных плоскостях лежат. И какая задача у тебя?
>И какая задача у тебя?
Для гос конторы запилить приложение учета. Прошлая их программа была написана в начале нулевых на делфи.
Нужно данные синхронизировать в реальном времени? Или на каждом ПК по своей независимой локальной базе будет?
И чем MS Access не устраивает?
ну в общем и целом да, не понимая как устроены базы данных будешь писать дичайшую хуйню и не важно с какой библиотекой
>Нужно данные синхронизировать в реальном времени?
This.
>И чем MS Access не устраивает?
С него и той программы, что его использовала, как раз и переезжают из-за недостатка автоматизации.
Тогда, очевидно, должны быть клиент и сервер. Клиент не важно на чём, хоть веб, хоть десктоп, но на веб потом будет легче найти человека. Протокол тоже не имеет значения, но если веб, придётся делать рест.
И правда, логично, спасибо. Просто на дипломе потом обосновать придется почему именно такая архитектура, а объяснение вида "ну потому что я бек и в паре с фронтендером" - не прокатит.
А где в jpa нужно знание jdbc? Там нужно знать сами реляционные базы данных, а jdbc-api это совсем другое апи, нежели jpa, хоть и более низкоуровневое.
Потому что данные общие, и если их независимо вести в разных базах, поддерживать все базы в актуальном состоянии будет невозможно. А так у тебя есть единый сервер, который централизовано занимается ведением базы, а клиенты нужны только для работы с сервером, который сам всё будет синхронизировать. Ну и масштабируемость.
Нигде. Вот и получается, что для спринг даты не надо знать, как работает jpa.
Нихуя. Для спринг дата жпа нужно знать, как в жпа энтити объявляются. Там только мастхевных аннотаций штук 20 с 2-5 параметрами в каждом.
Ага, понял.
когда ты Еntity описываешь в коде это и есть jpa, ебанаха я молчу про все остальные аннотации внутри entity
единственное где jpa может не быть это если у тебя вообще не будет реляционной базы в проекте
Гугл конвенция скорее всего.
схуявится
٩(‿。)۶
Я так понимаю, основной джава работодатель у нас это сбер, который больше 250к сеньорам не платит?
Сложнейший вопрос между прочим.
- Во первых есть 2 аннотации @Transactional (нужно юзать спринговую а не javax)
- Если пометишь публичный метод бина аннотацией то транзакция создаться еще при входе в метод и будет использоваться именно она а не то что мог бы создать спринг дата.
- Если ты нихуя не пометил то транзации будут создаваться при вызове методов репозитория и ты их по сути контролировать не сможешь. До определенного уровня сложности в твоем коде этого даже достаточно.
Но однажды ты можешь охуеть от того что не понимаешь как твоя залупа работает и будешь сидеть в дебагере до сопряжения сфер
- Если у тебя появятся сложные операции то могут понадобится вложенные транзакции и тогда тебе вообще пизда без понимания всего этого механизма
Подытожив все это, лучше вешать аннотацию на все методы сервиса,которые вызывают методы репозитория. Так?
ну в 95% проектов на жабе есть сиквел бд. И большинство из них используют жпа. А вот носиквелы нужны не везде.
Вешать нужно там, где нужно. Например, если нужна атомарность нескольких апдейтов
Ну полно старперского легаси говна без носикуля. А говно без сикуля это не про джаву.
В статье челик 5 раз говорит, что к ресту нужен и необходим сваггер. Реально так? Нужно поучить и в свои петы/тестовые засунуть? Или не стоить тратить время?
Не сказать, что это трата времени, делается в несколько строк и потом помогает разрабам клиентской стороны разобраться с твоим API.
Тем что сваггер не надо руками писать. Постман кстати может создавать коллекции на основе сваггера.
> Я вот тут подумал, а чем feign клиенты принципиально отличаются от репозиториев спринг даты?
Примерно тем же, чем сервис отличается от DAO.
Спринг дата работает с данными, это просто круд к базе, а REST-клиенты нужны для вызова бизнес-логики, которая не вписывается в концепцию круда.
Пытаюсь понемногу вкатиться в спринг, дошел до DI аннотациями и вот не понимаю...
Как мне создать два бина из одного @Component с разными значениями полей, внедряемыми через @Value? Да и через @Autowired тоже. Если в XML можно вручную этих бинов наплодить сколько угодно, пихая в каждый свои значения, то как я могу сделать это с аннотациями? Я же не буду делать несколько классов с разными значениями @Value и @Autowired
Еще не очень пока понимаю, в чем вообще прикол всей это хуйни. Чем связывать это все аннотациями проще, чем просто вручную средствами самой Java. Это мне только кажется что это какое-то говно без задач, или просто конкретно эта часть спринга такая, а всякие там MVC и прочее уже сверхполезны?
> Если в XML можно вручную этих бинов наплодить сколько угодно
Не надо через XML, делай через Java-конфиг.
@Configuration
public class AppConfig {
@Value("${foo}") String foo;
@Value("${bar}") String bar;
@Bean myComponentFoo() { return new MyComponent(foo); }
@Bean myComponentBar() { return new MyComponent(bar); }
}
Сколько ни рассуждают про DI, SRP и прочее, в конечном итоге всё сводится к менеджменту ресурсов. Спринг знает, как поддерживать пул соединений к БД, очереди и прочее, и надо как-то их эффективно прокидывать в логику, но не создавать же для этого глобальную переменную со свалкой ресурсов, потому что этим сложно управлять и сложно это расширять.
Охуеть у вас тут атмосфера токсичная.
шо там не понятна? не понятна.
прочитай сперва просто что такое прокси потом аоп потом читай или смотри уже по спринг транзакции.
как ты гуглищь не понятна пишешь спринг транзакции первая ссылка на хабр общедоступно там.
мб "login.html" нужно в form.loginPage указать
Имхо, бэк легче, но это хуёвый критерий, выбирать надо то, что интереснее или прибыльнее.
Ты главное не пытайся разобраться в вопросе самостоятельно, а больше читай го-тред, сделаешь однозначные неоспоримые выводы.
Спасибо, но все-таки джависты могут без тралирования объяснить зачем вообще нужен этот cloud native и почему спринг в него не умеет?
Тогда почему лично димсоул в pro.jvm говорит, что спринг вряд ли когда-либо станет cloud native?
>писать на джаве
>не быть в pro.jvm/jvmjobs
>не знать димсоула
Ты вообще в какой вселенной живешь? Наверное капчуешь из какого-нибудь мухосранской галеры?
https://t.me/jvmjobschat
Просто ты почему-то выпал из самого крупного русскоязычного джава-сообщества.
Чтобы ты юзал JdbcTemplate.
>Чат для обсуждения вакансий
А может я просто работаю на нормальной работе и мне нахуй не сдалось обсуждать вакансии?
Так у него и спроси почему. И нам расскажи.
Никаких, посмотри на последний дотнет и сравни это с кучей говна на джаве
В Го их вообще нет, но это не мешает дрочить на него в присядку.
Кто как осваивал?
Стоит читать книги? Или мб какие-то видеоуроки смотреть?
Или статьи?
Запрашиваю ваши мнения
Что это значит?
Бамп вопросу
Как мне декомпозировать монолит на МКС?
У меня был монолит в одном проекте в IDEA, а теперь я разбиваю на
несколько проектов? или как?
Чет не пойму пока
Это копия, сохраненная 24 апреля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.