прошлый https://2ch.hk/pr/res/1165567.htmlQ: Поздно ли вкатываться в айти в 20/30/40/100 лет?А: Нет, не поздно.Q: Cобираюсь учить джаву по 2/5/20 часов в день. За сколько дней я выучу достаточно, чтобы зарабатывать фрилансом?A: На джаве фриланса нет. Хочешь фрилансить — дуй в ПХП/раби/1С тред.Q: Хули все книги на английском?A: Без английского ты не нужен и можешь смело идти нахуй. Ну или в 1С-тред.Q: Что скажете за джавараш?Если вкатываешься с нуля, то можешь написать пару "хеллоу ворлдов" до 10 лвла. Дальше курс рассчитан на ленивых и не умеющих читать книжки людей. Количество говнокода зашкаливает, годных задачек пару штук на весь курс. В любом случае решать тебе.https://github.com/qqqlll/Java-Thread/wiki
а чё вы этого пидараса в хедер не поставите?
>>1173679Потому что он только на словах АХУЕННЫЙ кодер. Помню как-то показали код сатаниста, так он проебался в двух строках, не поставив точки с запятыми.
аноныя написал код который поднимает сервер с потоками. Как я могу обезопасить свой комп, когда на пару часиков буду включать серв?
>>1173706а как ты сделал так что из инета можно к нему подрубаться?
>>1173708включил в настройках роутера определенный порт для онли моего компа.
>>1173711охуеть. мне тоже так надо. А где про это можно по читать?
>>1173715 Если у тебя тп-линк, то напике показан пример. Если другой роутер, погугли "как открыть порт в настройках роутера"
>>1173716дак и по какому IP к тебе можно зайти?
Вроде разобрался немного с языком, решаю задачи на кодварс 4лвла, дальше особо не получается, хочу как-то дальше развиваться, подскажите че смотреть, куда двигаться
>>1173720а зачем ко мне заходить? Я просто для интереса тут спрашиваю про настройку безопасности сервера
>>1173706Ну, если у тебя только один порт проброшен наружу, то что тут ещё можно обезопасить?
>>1173761я просто заядлый параноик. В дальнейшем хочу сделать для себя небольшой постоянный сервер, для данных и прочего. Где я могу почитать про его безопасность и прочее? (буду писать на джаве)
>>1173764В гугле, видимо.Нет особой разницы - на джаве, не на джаве.Лишние порты должны быть закрыты и т.п.Это если выставляешь весь сервер наружу.Если же изнутри, и проброшен 1 порт (http) - то и хорошо.Используй SSL.Сделай порт с нестандартным номером >1024.Остальное зависит от сервера и его уязвимостей, если они есть.А также от уязвимостей в твоём коде.Если у тебя index.jsp с параметром zalupa=true форматирует диск, например, то это не очень хорошо.И логи пиши. А потом - читай. В том числе автоматически, с поиском подозрительных строк.Система аутентификации должна банить клиента после N неудачных попыток.И т.д. и т.п.Если хочешь как у взрослых - гугли как сделать сервер в DMZ.Хотя, не представляю, зачем.
>>1173778спасибо!
Чуваки, посоветуйте годный ресурс для изучения небольших экзепляров чужого кода в целях повышения своих навыков.
>>1173727А у меня другая проблема: у меня не получается писать маленькие тесты. У меня одна функция тестирования может занимать несколько сотен строк кода и я понятия не имею как разбить это на несколько тестов, поскольку вызов одной функции в тестируемом объекте может изменить поведение другой. Правда из хорошего получается почти 100% покрытие кода тестами, однако сами тесты выглядят отвратительно.И ещё не понятно: нужно ли писать дополнительные проверки на возвращаемое значение из библиотеки, если эта проверка (в случае правильности выполнения кода в библиотеке) никогда не будет выполняться.
>>1173782Гитхаб.>>1173787Открой для себя инкапсуляцию.
>>1173882> Открой для себя инкапсуляцию. Это ты спизданул просто так, потому что не знал что ответить, но очень хотелось?
>>1173884Тупой пидорок, я тебе ответил, но ты слишком тупой, чтобы его понять. Хорошо, смилостивюсь над идиотом и поясню на пальцах для таких тупорылых идиотов как ты.Тесты, неважно, юнит это или интеграционные (немного иначе с bdd, но суть та же) должны иметь три блока - подготовить запрос. Осуществить тестируемое действие. Проверить результат. Если тестируется бизнес-логика, то действий и проверок результатов может быть много. При этом действие это действие над блекбоксом и проверка результата, а не хуйня с внутренней реализацией тестируемого компонента. Впитывай, долбоеб.
>>1173886Ого какой агрессивный. Это ты, шизопомидорка с собеседованиями?> . При этом действие это действие над блекбоксом и проверка результата, а не хуйня с внутренней реализацией тестируемого компонента. Так ты ещё и читать не умеешь. Для проверки корректности работы блекбокса НУЖНО учитывать внутреннюю реализацию. Не будешь же ты тестировать функции объекта ниже исключительно по-отдельности?public class Foo { private boolean bar; public Foo() { bar = false; } public int method1(int a) { int rv = bar ? a 2 : a; bar = true; return rv; } public int method2(int a) { int rv = bar ? a 3 : a; bar = false; return rv; }}
>>1173889> Для проверки корректности работы блекбокса НУЖНО учитывать внутреннюю реализацию.Не нужно. Твердо и четко.Представь себе тестируемый класс, компонент или систему как китайскую комнату. На вход подаются таблички на китайском, на выходе их перевод на английском. Контракт соблюдается, тесты крутятся, бабло мутится, и вообще поебать сидит ли внутри комнаты китаец или что вообще там происходит. > ниже Ниже у тебя отвратительный пример мутабельного класса, чья внешняя функциональность зависит от совершенно не очевидного для окружающих внутреннего стейта. Не говоря уже о том, что не тредсейф нихуя. Это как если бы иногда вместо таблички с переводом, китайская комната отдавала табличку с джастин бибером потому что потому.На вход такой комнаты нужно подать ведро мочи, поджечь комнату и повесить ее архитектора.
В чем смысл приватных полей класса, когда есть геттеры и сеттеры?
>>1174118В том, что в геттерах и сеттерха ты можешь провести валидацию\обработку значений, прежде чем положить его в поле или прежде чем отдать его из поля.
>>1174121А с чем, по-твоему, работают эти геттеры и сеттеры?Или ты что-то другое имел в виду?
>>1174123Это было вот сюда: >>1174118
>>1174121Это можно сделать независимо от модификатора доступа. Но если поле приватное, то, по идее, оно не должно как-то выходить за пределы класса, и изменяться, но гет/сет обходят это. Можешь пример ситуации привести, когда это необходимо?
>>1174123Другое. Поле private. Но при использовании экземпляра класса я, по сути, имею доступ к этому полю по гет/сет методам.
Анончики, есть у кого-нибудь опенсорс проекты, чтобы для опыта поботрачить
>>1174128>Но если поле приватное, то, по идее, оно не должно как-то выходить за пределы класса, и изменяться, но гет/сет обходят это.>Но при использовании экземпляра класса я, по сути, имею доступ к этому полю по гет/сет методам.Смысл модификатора private не в этом.Смысл его в том, что другие классы не могут иметь к нему _непосредственного_ (не контролируемого твоим классом) доступа.А доступ через методы - не обязательно get/set - это нормально.Потому, что это _контролируемый_ доступ, _специально_ сделанный, с некоей целью.А то, что ты пытаешься сказать - просто не имеет смысла.По такой логике приватные поля просто были бы бесполезны, т.к. не могли бы изменяться вообще.
>>1174129>>1174149Более того - снаружи никто и не знает, что у тебя там есть какое-то приватное поле, и что геттер-сеттер меняют именно его. Там может быть что угодно - вычисления, обращение к бд, и т.п.Так что приватное - оно и есть приватное.Т.е. паблик методы - это внешний интерфейс класса. А внутренние приватные поля - это детали реализации, которые могут меняться, но это никак не скажется на работе клиентов (внешних классов).
Какую БД использовать в программе?
>>1173705Зато он Scala знает.
>>1174203>Какую БД использовать в программе?Охуенный вопрос.Самую лучшую, конечно.
>>1174203Ну и чего ты притих?Требования какие?Что хранить?
>>1174121это плохая практика - размазывать бизнес-логику по куче классов.А так геттеры и сеттеры - если внезапно понадобиться многопоточная работа с этим классом - просто повесить syncronized на геттер и сеттер
>>1174148https://github.com/cray33/jnomполучение базы данных адресов из osm данных
>>1174204пруфы?
>>1173720127.0.0.1
У меня есть две координаты, X и Y. И есть куча других координат, которые я получаю из интернета.Как более удобней будет полученный лист отсортировать по наиболее подходящим к первоначальным координатам?
>>1174347сравниваешь дельту между x и элементом листа
>>1174203Подходящую.
>>1174118Смысл нет - это просто культ Карго.
>>1174362Не совсем понял
>>1173657 (OP)Пасаны, расскажите, как устраивались джуниками. Какие вопросы, какая зп, какие первые задания были?
>>1174502Никакие, никакая, никакие. Иди дальше, добрый человек.
>>1174513Ну зачем ты здесь напердел?
>>1174271ты пишешь ?
>>1174388Отсортируй по расстоянию, наркоман. В чем проблема?
>>1174520Тебе в лицо.
>>1174347Две координаты - это точка.Сделай функцию для вычисление расстояния между двумя точками на плоскости.Сделай компаратор (на базе исходной точки), который в своём compare(p1, p2) сравнивал бы расстояние от обеих точек до исходной, и выдавал бы соотв. результат.Отсортируй список с этим компаратором.Можешь использовать для всего этого стрим, если умеешь.
>>1174129private поле используется для переменных, которые ты не хочешь показывать за пределами класса. Не обязательно подразумевается, что кто-то может запрашивать его через геттер/сеттер, или через оба.
>>1174575Ok
Книжка Хабибулина хороша?
>>1174502Бамп вопросу
Ответьте одним словом про Бугаенко. Он пиздобол?
Зачем обрамлять в скобки со static куски кода со статичскими переменными? Что это дает ?? Там же и так статические переменные
>>1174946Егорка-долбоеб.
>>1174949Почему джавапитухи любят так делать скобки, что они открывающая и закрывающая не находятся друг под другом?
>>1174961Потому что это прерогатива сиопущенцов
>>1174949Это static initializers. Можешь погуглить.Это не "переменные", а _исполняемый_ код.Там может быть что угодно.Например, сложная инициализация переменных, создание списков или map и т.д.Этот код выполняется при первом обращении к классу.Можешь думать, что это такой конструктор, но для класса как модуля (статические члены), а не для экземпляра объекта этого класса.
>>1174965Да даже на си так нормальные люди не пишут.Это, скорее, плюсоёбы так онанируют.
>>1175095конструкторы вызываются в последнюю очередь, поэтому такая аналогия будет губительной для понимимания
>>1175163В смысле?Это статический инициализатор (или несколько).Конструктор - тоже инициализатор.Но, инициализируют они разные вещи (и по-разному).Java класс - это два в одном - модуль (набор переменных и функций) и класс (шаблон объекта).Модуль - это статическая часть. Просто набор переменных и функций, имеющих что-то общее.Класс - то, что определяет поведение создаваемых (new) объектов-экземпляров.Общее у них то, что в статической части класса есть доступ ко всем не-статическим членам класса, в том числе приватным. Т.е. если в статический метод класса передать экземпляр объекта этого класса, то там можно с ним сделать то, что "снаружи" сделать нельзя.Больше ничего общего у этих двух частей нет.
>>1175177И да, из "классовой" части, естественно, есть доступ к статическим членам. И, вполне логично, что они должны быть проинициализированы до того, как будет создан первый экземпляр класса.И, если первым обращением к классу является вызов конструктора (new), то статические инициализаторы будут выполнены перед тем, как будет выполнен конструктор.И это логично и интуитивно понятно.
>>1174961Чтобы не тратить строчку ни на что и не делать зрительный разрыв между сигнатурой функции и ее телом, сисярподебил.
repo.spring.io забанили, пацаны. Сидим в опенспейсе с пацанами рофлим.
Зачем нужны лямбда выражения в Java? Ведь строго говоря это просто синтаксический сахар,
>>1175397следование за модой
>>1175397>Ведь строго говоря это просто синтаксический сахар,Мы вам перезвоним.
Посоветуйте хороших статей или видео о проектировании на Java.Что б отвечать на вопросы типа: как бы вы спроектировали Убер
>>1175418почему на эту фразу у собеседующих бомбит?
>>1175434«Этот вопрос не относится к списку профессиональных навыков, заявленных в тексте вакансии. Имею право не отвечать».
>>1175557мы вам перезвоним
Зачем люди создают коллекции вот так?List<Person> nums = new ArrayList<>();Почему нельзя писать так:ArrayList<Person> nums = new ArrayList<>();
>>1175584Так можно писать.Но, объявив это как более общий тип, ты можешь в дальнейшем поменять реализацию.Или использовать Collections.emptyList(), или ещё что-нибудь.В простых программах это кажется избыточным.Но, это вопрос стиля.Или его отсутствия.
Вы просто сборище даунов, вы на элементарный вопрос ответить не можете "Какую БД брать?".
>>1175592>Какую БД брать?Бери такую, чтобы в руке хорошо лежала.
Здрарова, джаваны. Посоветуйте, как или хотя бы с какой стороны подойти к решению задачи.Нужно считать и создать объекты класса из JSON файла.Объекты классов bigCar и smallCar, унаследованные от абстрактного Car. Проблема в том, что в JSON могут быть объекты обоих этих классов и какой это класс решат сочетание значений полей maxPassengers и trunkSize.Надеюсь, понятно расписал. То есть мне в процессе парсинга джейсона надо как-то смотреть на значения этих полей и в зависимости от них создавать уже нужный объект.Прошу совета.
>>1175642Не надо делать наследование классов данных, прежде всего.>в процессе парсинга джейсона надо как-то смотреть на значения этих полей и в зависимости от них создавать уже нужный объект.Вот так и делай, лол.А нормально - надо делать свой протокол поверх json - с типами и дженериками.Чтобы не ебать мозги ни себе ни людям.
>>1175642Алсо, такая объектная модель - это вообще пиздос.Так в принципе делать не надо, и дело даже не в наследовании.Такие вещи надо свойствами как-то делать, а не выдавать тугую струю классов на каждый пук.
>>1175642В таком формате никак. Во-первых, в жсоне никаких типов нет, сериализатор в душе не ебет, что там надо создавать. Во-вторых, с хера ли у тебя семейство типов базируется на значении атрибута? Нужен всего один класс с двумя методами isBig()\isSmall()
>>1175660>>1175646Сорян, я пока учусь. Можешь все-таки что-то посоветовать в моём случае? Сейчас читаю про gson, но в большинстве статей описывается типичная изи десериализация из двух строчек кода. Думаю, надо официальную документацию почитать, но реализуемо ли вообще то, что мне нужно с gson или что-то другое смотреть?
>>1175660Два чаю. Если нужно сериализовать Json с неизвестными заранее полями (например если список нужных полей отправляется в качестве аргумента для API), то пихаю Map<String, Object>. Но вот такого, что заранее неизвестно что при вызове вернёт Json ещё не было. Правда у меня Java приложения Json особо и не получают, в основном всё на xml.>>1175668Jackson можно использовать в качестве токенайзера. Тогда ты сам, ручками проверяешь каждый токен и строишь нужный объект. А вообще лучше десериализуй Json в HashMap<String, Object> и уже его передай в фабрику, которая и отдаст нужный элемент.
>>1175589Это не вопрос стиля. Нас не интересует конкретная реализация списка, нас интересует обобщенный список, который, допустим, позволяет итерировать по содержимому. Объявляя конкретный тип, ты связываешь себе руки, так как завтра выяснится, что ArrayList тебе не подходит, а нужен например стек или очередь, и ты будешь две недели вылавливать все места с конкретной реализацией, а потом еще две недели хавать баги. А обобщенный тип позволяет менять реализацию безболезненно. Поэтому лучше завести себе привычку и постоянно повторять "детали реализации должны быть скрыты от клиента".
>>1175675так конкретная реализация остаётся. Но она становится неизвестна
>>1175676> Но она становится неизвестнаС чего бы это? Есть же рефлексия.
>>1175677неизвестна для тебя. Ты добровольно выкидываешь из кода важную информацию
Ещё пример - из ConcurrentHashMap делать Map. И пойди догадайся, что это за мапа и потокобезопасна ли она
>>1175676об этом и речь. для кода, где этот список используется, достаточно знать, что это какой-то там список, больше этого ему знать не следует.
пошли все на хуй, уёбки
>>1175680> выкидываешь из кода важную информациюВажную в контексте чего?> Ещё пример - из ConcurrentHashMap делать Map. И пойди догадайся, что это за мапа и потокобезопасна ли онаТут надо задать вопрос, насколько релевантна тебе потокобезопасность. Если это обязательно, то разумеется сигнатуры надо объявлять так, чтобы потоконебезопасный тип передать было невозможно. А если требуется просто словарь, то ограничиваться ConcurrentHashMap не стоит, т.к. клиенту лишняя работа, не относящаяся к делу. Ну и если это чужой код тебе передает, то следует исходить из потоконебезопасности и может даже явно копировать в ConcurrentHashMap, т.к. сегодня они тебе передали одно, а завтра что-то другое, и оправдания типа "оно упало, потому что меня вызвали с не тем типом" звучат как-то неубедительно.
>>1175687>Важную в контексте чего?в контексте реализации и свойств. Сортируются ли значения. Выкидываются ли дубликаты. Допустимы ли null значения
>>1175689Это важно в конкретных контекстах, см. выше пример с ConcurrentHashMap, в таких случаях да, указывай конкретный тип. А List используй так же, как interface.
>>1175675>Поэтому лучше завести себе привычкуЭто и называется "стиль", лол.
>>1175682Смысл в том, что ты используешь абстрактные List или Map в тех случаях, когда тебе именно что _не_важно_, какой там будет конкретный класс.А когда важно - используешь более специализированные объявления.Что тут непонятного?В общем случае - нужно стараться максимально скрыть детали реализации и ограничиться абстрактным интерфейсом.
>>1175698Ну ок, пусть будет стиль.
Аноны, только начал изучать многопоточность. Столкнулся с такой проблемой:https://pastebin.com/pRcV1ammВот какого хуя оно так работает?
>>1175704Потому что главный поток не ожидает завершения всех остальных и сразу выходит из программы. Сохрани все msSecondThread в массив, а потом после цикла с вызовами вызови у всех метод join.
>>1175704а что ты хочешь? Оно выполняется параллельно, а не последовательно
>>1175707что значит все в msSecondThread? Переменную i, или что?
>>1175710Массив сделай для потоков. Стартани каждый. Потом сделай join на каждом.
>>1175710Сами объекты Thread. Если тебе просто нужно ожидать окончание работы треда, то нужно вызвать метод join у него. Но делать это надо после того как стартанёшь все треды, иначе смысла в многопоточности не будет. Потому все запущенные треды и надо сохранить в массив, а после того как все запустил уже и можно их ждать.
>>1175704>class AffableThread extends ThreadВместо этого - implements Runnable.Каждый раз - новый AffableThread.А лучше - просто используй лямбду: new Thread(() -> {...});В конце надо бы подождать завершения потоков, наверное (не обязательно).И что тебе не нравится?Что выполняются не по порядку? Это нормально.Для этого есть приоритеты, но, и они не гарантируют. Так что, если действительно важен порядок - придётся поебстись. И это хороший повод задуматься - правильно ли ты поставил задачу?
>>1175714Чето типо такого?:new Thread (() -> {System.out.println("Привет из побочного потока!"+Thread.currentThread().getName());});>>1175711>>1175712>>1175707Я почитал про это, я в будущем хочу что-бы кол-во тредов можно было вводить в строке. Наверное это мне не подоходит
>>1175722> Наверное это мне не подоходит Вместо массива можно использовать ArrayList.
>>1175714Анон, я понял как через лямбду:new Thread (() -> {System.out.println("Привет из побочного потока!"+Thread.currentThread().getName());}).start();Но у меня все равно "Главный поток завершен..." в начале высвечиваетсяГлавный поток завершён...Привет из побочного потока!Thread-2Привет из побочного потока!...>>1175724То есть ты имеешь ввиду, что нужно записывать .getName() в список?
>>1175726> То есть ты имеешь ввиду, что нужно записывать .getName() в список? Тут видимо легче показать, чем объяснить.https://ideone.com/wIQ7wZ
>>1175726> Но у меня все равно "Главный поток завершен..." в начале Так и должно быть. Про лямбду я не к этому написал, а вообще.Потоки - они выполняются _параллельно_.Главный поток отрабатывает очень (очень!) быстро, и сразу завершается (запустив другие). Сам он ждать не будет - ты же не просил его ждать. См. в примере выше про join.Для натуральности - добавь Thread.sleep(50) в лямбду (придётся засунуть в try|catch). Т.к. реальные потоки у тебя же что-то делать должены, в течение некоторого времени (или постоянно).
>>1175584Потому что программируйте на уровне интерфейсов, а не реализаций.
>>1175726И да, "if ( i== 5) " там совершенно лишнее.IDEA тебе бы подсветила это место с комментарием типа "здесь i всегда = 5".Также, могу тебе посоветовать посмотреть в сторону более высокоуровневых инструментов для многопоточности в java - пакет java.util.concurrent и т.п.Потому, что работа с голыми потоками - это может быть довольно заёбисто, если делать что-то сложнее хелловорлда.И особенно - CompletableFuture. Очень возможно, что именно это тебе и нужно.
>>1175757> И особенно - CompletableFuture. Лучше уж пусть изучает Reactor. Тот же Mono в сто раз удобней.
>>1175758Одно другому не мешает.И для относительно простых вещей CompletableFuture - просто охуенно.И если научился - потом переход на всякие Rx'ы и реакторы будет простым и естественным.Иначе - можно сразу ничего не понять и дропнуть.
>>1175674>>1175667А что, если мб так. Создать pojo класс, стандартными методами gson десериализировать все в массив объектов этого pojo класса. А потом пройтись циклом по этому массиву и создать уже нормальные объекты.
>>1175793Ну, так >>1175674 тебе и написал:>А вообще лучше десериализуй Json в HashMap<String, Object> и уже его передай в фабрику, которая и отдаст нужный элемент.
>>1175797Ага, спасибо. Только, честно говоря, не совсем понимаю, зачем HashMap тут. Думал обычным списком или массивом обойтись.
>>1175800HashMap<String, Object> - это твои объекты, вместо PoJo.Какой смысл делать ещё какой-то pojo, если, по сути, сырой json-объект - это Map?
>>1175804Можешь объяснить, что куда должно замапиться?Весь JSON записывается в String? Или String - это название поля, а Object - это значение? Что, если у меня много объектов в JSONе? Честно не могу врубиться и не получается этот подход нагуглить.
>>1175815> Честно не могу врубиться и не получается этот подход нагуглить. Используй кастомный десериализатор (регистрируй его для интерейса) и не парься. https://www.google.com/search?q=java+gson+custom+deserializer
>>1175815Объект - это набор свойств.Свойство - это имя (String) и значение (Object).Map<String, Object> - это объект.В JavaScript - это даже буквально так и есть, например.Отсюда и JSON - JavaScript Object Notation.Много объектов - много Map (список, например).Скорее всего и весь твой json целиком - это тоже Map. В котором, например, есть свойство cars, значением которого будет List<Map<String, Object>> - список (потенциальных) объектов car.Как это сделать в gson - я не знаю, т.к. им не пользуюсь (не люблю гуглоподелия, лол).Но, любой парсер json, как мне кажется, по умолчанию тупо парсит json как Map, в котором есть списки, другие Map и примитивные свойства. Т.е., как написано в json, так и парсит.Если ты сам решаешь, каким будет формат файла - добавь туда метаданные - информацию о типах объектов в файле. В удобном тебе формате. И тогда сможешь делать автоматическое превращение List<Map> -> List<CarXxx>. BeanUtils используй или своё что-то сделай на рефлекшн.
>>1175820> Но, любой парсер json, как мне кажется, по умолчанию тупо парсит json как MapНе. Сейчас все парсят сразу в объекты, а если что-то не получается уже созданные объекты выбрасываются и вываливается ошибка. Так максимально пирформансно же.
>>1175821> Так максимально пирформансно же.Т.е. надо заранее знать типы?В рантайме определять не получится?Я вообще мало json использую, и у меня есть своя библиотека, с блекджеком и шлюхами. Смотрел gson и нашёл его бессмысленным. Хотя, возможно, он и высокопроизводительный, но мне нужно другое.
>>1175822> Т.е. надо заранее знать типы?Там все объекты атрибутами развешивают, чтобы парсер мог понять что и как. Если атрибудтов недостаточно, то пишут свой десериализатор для конкретного класса. Когда встречается этот класс, то этот десериализатор и вызывается.
>>1175825>Когда встречается этот классА как узнать, когда он встречается?Что вот эта вот хуета - это именно это класс?В json добавляются метаданные?Приведу пример:Есть такой json - {"tuple": [1, "a", 33.3]}.Я хочу, чтобы это стал объект Tuple3<Integer, String, Double>.А не List<Object>, как может кому-то показаться.И что?
>>1175829> А как узнать, когда он встречается?Рефлексия. Там где рефлексия не работает (контейнер), то атрибуты.
>>1175829> В json добавляются метаданные?Ты изначально даёшь класс, который определяет каким образом надо десериализовать root-элемент.
>>1175836Да, я так и понял.И это, в общем случае, нормально.Но, мне нужно было сделать так, чтобы тип определялся в рантайме - чтобы можно было восстановить список разнотипных сложных объектов, включая коллекции с дженериками.Единственный способ это сделать - добавить данные о типах в json, и затем в десериализаторе с этим работать.И, насколько я понял, gson для таких вещей бесполезен.
Подкиньте где максимально понятно написано про геттеры/сеттеры?
>>1175904Если ты не можешь так понять про геттеры и сеттеры, то либо ты слишком имбецил, либо программирование просто не твое.
>>1175904ненужны
Там это самое, maven репозиторий заблокировали!
точнее сайт
>>1176164>>1176175Ну как проголосовал за Пыню?
>>1176227Вот у нас не понимают, что заблокировали половину адресов Амазона в России США и госдепартамент... Этого не понимают... Думаю, что это сделал Путин!
>>1173657 (OP)Сап, программач. Толи я тупой, толи аффтор учебника что-то не договаривает. Объясните мне пожалуйста зачем тут переприсваевается переменная. Разве не легче сразу i использовать?
>>1176453Попробуй переписать код с использованием переменной i. Конечно, если тебя не смущает, что она доступна только в конструкторе.
Можно спокойно создавать дженерик классы без даймонд оператора?Зачем он тогда вообще нужен??
>>1176453Это конструктор для формирования экземпляра класса NonGen, в него поступает переменная i и после она присваиватся полю num
Актуальная ли еще эта книгаГранд М. - Шаблоны проектирования в Java - 2004если она 2004го года?
>>1176546Добавь строчкуSimpleTriple<String> b = a;
>>1176577ну добавили чего?
>>1176612А то что у тебя варниг с какого хуя слева стринг, а справа хуй знает что.
>>1176612Странно, что компилятор не показывает ошибку, а только предупреждение. Может от версии java зависит, а может я уже просто забыл о таком поведении.У тебя переменая a имеет тип SimpleTriple<Object>, а не SimpleTriple<String>.Даймонд нужен, чтоб не писать тип, когда с лева он уже определен:SimpleTriple<String> s = new SimpleTriple<>(...);
>>1176661>>1176664у меня даже варнинга нет, это было просто выделение текста в нет бинс,а вообще я когда кожу никогда на варнинги не смотрю, нах надо, главное что б запускалось и выдавало что нужно
>>1176546он нужен для проверки типов, без него у тебя фактически SimpleTriple<Object>, т.е. можешь не только String добавлять, а все что угодно
>>1176546>Зачем он тогда вообще нужен??Даймонд - это не для создания, а для объявления типов.
>>1176554Дженерики в джаве появились как раз в 2004-м - в Java 5.И автобоксинг/анбоксинг тогда же.Это принципиальные изменения, в том числе с точки зрения паттернов.После этих изменений джава стала нормальным языком.Так что, если у тебя _русское_ издание 2004 года, то там, скорее всего, этого нет. Посмотри год издания оригинала и какая версия джава используется.
Аноны, кто разбирается в Swing, помогите, плиз.Мне нужно написать программу,рисующую 12 фигур разного цвета с разными координатами. Тип фигуры (эллипс, прямоугольник, линия), цвет и расположение выбираются случайным образом. Всякий раз, когда вы изменяете размер фрейма, картинка меняется на новую. Линии должны быть толстенькие.Ограничение: Вызов метода g2.draw() в тексте программы написан только один раз. Массивы и прочие коллекции не применяйте.Должно быть что-то типа 1го пика,во-первых я так и не понял как менять backgroundcolor для JPanel, там какие-то сложности с прозрачностью итд,потом я не очень понимаю, почему мой код вместо того чтобы рисовать 12 рандомных фигур рандомного цвета выдает 4ый пик,пусть даже пока что я не поставил им рандомные координаты, но каждый раз стабильно рисуется 1 черная линия и всё,https://pastebin.com/zA1GuCtM
>>1177127рисователь вкатился в тред.рекомендую поковырять Processingоч пиздатая рисовалка
>>1177156>Processingа что это вообще и как это найти?
>>1177159постить сюда ссылки это моветон. просто пишешь в гугле и методом логической дедукции попадаешь на нужный ресурс.что там хорошо - там уже всё подготовлено для рисования и узнаешь базовые принципы по обработки иветов етк
>>1177162>постить сюда ссылки это моветон.с каких пор?
Почему нельзя в одном file.java объявлять 2 публичных класса, но можно с любым другим модификатором доступа?И еще, я видел видео на ютубе, которое запостили в 2013м году, где человек как раз создает публичный класс в одном файле с уже имеющимся публичным классом,получается в предыдущих версиях Java так делать было можно?
>>1177341>в одном file.java объявлять 2 классаНе надо так делать.Независимо от публичности-приватности.Ньюфагам это, обычно кажется хорошей идеей.Ну так, на то они и ньюфаги, лол.Если очень надо - сделай один модуль (публичный класс, имеющий только статические члены), и в нём объяви другие (вложенные) статик классы, с нужными модификаторами доступа.
>>1177403Так почему не надо так делать-то?Какие в пользу этого аргументы?
>>1177600Потоу что в итоге все равно будут разные класс-файлы и выгоды от этого нет.
Актуальна ли еще лекция 15го года про многопоточность?https://www.youtube.com/watch?v=dLDhB6SRXzw
>>1177648Актуальна.
>>1177600Структурирование кода.По тем же причинам рекомендуют разбивать большой метод на несколько функций и т.д.Близкие по смыслу классы помещаются в один пакет (а не файл). Иерархия пакетов может быть сколь угодно сложной, но злоупотреблять этим не нужно.А ньюфагу кажется, что несколько мелких файлов - это сложнее, чем один большой.Но, на то он и ньюфаг.
Поясните за @Override. Есть класс Car, в нем несколько переменных которые я хочу вывести с помощью println(). Переопределил метод toString(), откуда println() знает что в классе Car есть overrided метод и нужно юзать его а не тот что в классе Object?
>>1177779> @OverrideУказывает конпелятору, что метод под ним должен переопределять виртуальную функцию. По факту переопределение происходит по совпадению сигнатуры (т.е. должны совпадать название, типы и количество аргументов и тип возвращаемого значения), а @Override нужен только для контроля и его можно не указывать вообще.
Поясните за жопаэль.
>>1177779>откуда println() знаетОн ничего не знает.Он вызывает метод toString() данного объекта.При этом срабатывает именно переопределённый метод.Почему?Потому, что так устроена Java и вообще ООП.https://www.geeksforgeeks.org/dynamic-method-dispatch-runtime-polymorphism-java/
Почему я такой тупой и не могу запрограммировать алгоритм минимакса для игры в крестики-нолики?
Я нюфаг и мне дали задание на первой лекции тренингов, почти все сделал, но осталось последнее задание, которое реализовать не получается:Имплементировать метод, с помощью которого в армию добавляется новый отряд. Если армия уже укомплектована, должно выводится соответствующее сообщение на экран. Необходимо убедится, что отряды не повторяются, в противном случае вывести сообщение.Мю у кого-то идеи есть, как это сделать? Как вообще дать возможность клиенту добавлять отряды? Пока наткнулся на enum и загнал их туда, а что делать я не знаю.public enum Units { SWORDSMEN(300), ARCHERS(200), CAVALRY(500), DRAGONS(1000), MAGES(800), ARTILLERY(500); private int price; Units (int price){ this.price=price; } public int getPrice() { return price; }}
>>1177864Если проще, то клиент может собрать армию из списка отрядов и потом подсчитывается стоимость армии, но дублировать отряды нельзя.
>>1177864https://ideone.com/v1eumq
>>1177863Бляя, еще и на паттернах не смог. Почему же я такой тупой.
>>1177928Решение от балды: проверяешь все четыре направления перебором. Если нет вражеского символа на линии - вставляешь свой в свободную ячейку
>>1177937Да алгоритмы то я уже придумал. Но что-то никак в них не въеду.
>>1177863А я сделал минимакс без проблем. Наверное просто программирование не твое.>>1177937А если есть, то выбрасывать исключение и завершать работу? Писать тик так то для чего-то, кроме минимакса, это простая всрача времени.
>>1173657 (OP)Подскажите, как создать персонажа с характеристиками взаимодействия с виртуальной средой, какие надо бубны практиковать? Как дописывать, если я что-то по ходовой придумал и как эту ебалу запилить, чтобы она заработала?
>>1178174Чоблять? Ты там движок игори пишешь что ли? На джаве? Ты там совсем ебанулся, или совсем ебанулся?Пиздуй юнити трогать.
Замечали ли вы, что программисты на Java более инфантильны, чем разработчики на других языках? Это объясняется тем, что в Джаве сделано за вас все, что бы вы не могли "выстрелить себе в ногу", то есть вас , как детей, изначально отгораживают от потенциально совершенных ошибок, думают за вас, потому что разработчикам языка виднее.Готовы ли вы с этим смириться?
Костыль это лучше, чем ничего, или хуже?
>>1178240Готов, ведь так лучше для меня.
>>1178244to>>1178221
>>1178221Да. На то мы и используем java. Любители стрелять в ногу. Сидят в других тредах
>>1178221Я замечал, что люди, не разбирающиеся в джаве обожают нести дикую хуйню про нее.
>>1173657 (OP)Можете кинуть ссылку на хороший сервис по изучению Java. В смысле бесплатный и для начинающих. Без видеоуроков. Был бы очень благодарен
Не знаю, шарит ли хоть кто нибудь здесь, но решил начать пилить свой сервер minecraft с плагинами и модами, и при этом запилить свои. в одном моде Placeable Items приглядел классные 3d модели мечей и кирок, которыми хотел бы заменить основные, но столкнулся с тем, что не могу никак открыть файл мода. Пробовал сделать это в eclipse и intellij. Или же я чего-то не знаю?
Аноны, почему оно не работает?if (i/2 == Double){}/Хочу сделать проверку целого числа, после деления на 2/
>>1178348Нет, не можем.>>1178372У тебя скорее всего джарник. Считай это выполняемым кодом. А чтобы изменить программу, тебе нужен исходный код. Иди на страницу своего плагина и ищи там ссылку на гитхаб. Если нету, то все.
>>1178402>Если нету, то декомпиляция и ковыряние с охуевшим видом в нагромождении говна без комментовФикс
>>1178405> декомпиляция> очевидно мимокрокодил, а не видевшее некоторое дерьмо повидлоНу ты хоть немного думай, когда фиксишь чужие поста, ебоклак.
>>1178427> речь о модах для майнсруфта, которые декомпилируются человеком, у которого из знаний только английский, за полчаса-час (в первый раз, потом за пару минут)Я первый свой мод (или лаунчер, не помню) для майна декомпильнул именно с такими вот исходными условиями.А потом всё удолил, потому что не умел в жабу.
>>1178432Разархивировать джарник и получить java-файлы из class-файлов не сложно. Вопрос что ты с этим будешь делать.
Мучаюсь уже часа 2, как мне из этого:String[] arr = {"aa", "bb", "cc", "dd"};String gg="";for (int i = 0; i != arr.length; i++){gg+=arr+" ";}System.out.println(gg);Переделать в лямбду?
>>1178470ArrayList<String> arr;
>>1178473>ArrayList<String> arr;Спасибо! Но что делать если у меня в коде, допустим, уже есть Arrays.sort(arr); ?
>>1178470Редьюсь.
>>1178398String s; //введенное юзером значениеtry { if((s.toLowerCase().contains('e') || s.toLowerCase().contains('.')) double d=Double.parseDouble(s); //вещественный тип else long l=Long.parseLong(s); //целый тип}catch(NumberFormatException nfe) { //строчный тип}
>>1178474Либо заменить на Collections.sort(list), либо сделать из массива список с помощью Arrays.asList(array).
>>1178470Ну где вас таких тупых берут.Stream.of(arr).reduce("", (s, acc) -> s+" "+acc);
>>1178470вот еще одно решение Stream.of(arr).map(s -> s).collect(Collectors.joining(" "));от >>1178668
>>1178470Могу еще тебе рекурсивное решение ебануть
>>1178671>>1178470public String join(List<String> arr, String acc){ if (arr.isEmpty()){ return acc; } else { return join(arr.subList(1,arr.size()), acc+arr.get(0)+" "); } }
Есть ли какие нибудь сайты по изучению Java с нуля, кроме платного JavaRush? На подобие learn.javascript для Js или pythontutor.ru для Питона? Чтоб прям для дошкольников было объяснено
>>1178670>.map(s -> s)oh boy
>>1178778Дебилы не задерживаются. Иди дальше, идиотский человек.
>>1178677>>1178671>>1178670>>1178668>>1178603>>1178540спасибо
Почему в жабе не сделать свойства, как в решетке?
>>1179436нинужна
Бля, вот я тупой. Мучался с этим минимаксом, придумал костыльное решение, исправил на нормальное, почти доволен. А оказывается это не костыльное решение было и все норм. Эх.
>>1174203Как вариант - одну из тех, которую поддерживает JDBC.
>>1175593>Бери такую, чтобы в руке хорошо лежала.БД "Дуня Кулакова"?
Сап двач, тут такое дело ..Вобщем мне надо написать лаб по яве. Нужно добавить класс, представляющий единицу, описанную в динамическом векторе основного класса. Я особо не понял данную задачу поэтому реквестирую помощь
Сап аноны. Есть у кого Кэти Сьерра "Изучаем Java" в fb2, epub, mobi формате? Скиньте плес. А то пиздец везде только в пдф. И вообще можно любые книги по джаве в этих форматах. Или хотя бы подскажите где скачать
Привет, аноны!Понадобилось сделать четыре вложенных друг в друга try-catch. Понял, что мой редактор joe мало чем может помочь.В каком редакторе/IDE легко и просто делать вложенные try-catch?
>>1179638> В каком редакторе/IDE легко и просто делать вложенные try-catch? А что мешает без задней мысли написать их ручками?
>>1179640>А что мешает без задней мысли написать их ручками? Отступы для удобочитаемости и можно по невнимательности упустить/добавить фигурную скобку
>>1179642Попробуй intellij idea.
>>1179625аноны подскажите плес хотябы что надо гуглить
Ананас, я засунул Try-Catch в Do-While цикл (крутится пока валится эксепшн) и теперь у меня нарушается порядок System.err.println (он в блоке catch) и System.out.println (он в начале Do-while). Flush потока не помогает. Проблема в разных потоках. Вопрос в том, как это по-хорошему должно решаться.
>>1179625Дичь какая. Подпишусь на трэд. мимо-вкатывальщик
>>1179625>поэтому реквестирую помощь"В общем" пишется раздельно.Не благодари.
>>1179644Спасибо, анон.
Есть игра. В ходе игры надо возвращать либо место для нового хода, либо результат игры, если после последнего хода игра закончилась. Какой возвращаемый тип лучше использовать? Массив int или новый класс забабахать?
>>1179687enum байтов.
>>1179625Чё блядь? Чё за динамический вектор? Имеется ввиду java.util.Vector, что ли? А чё за "основной класс"?
>>1179683Насколько я понял, надо в отдельном классе создать нужые обьекты. А в основном классе создать ArrayList где будут использоваться данные обьекты. Как-то так.
>>1179720вот >>1179687Я просто задание перевел с другого языка, да и само задание туповато сформулирована
>>1179728точнее >>1179732я уже плавленый
>>1179733почему нельзя едитить сообщения на дваче блядь
>>1179638Нахуя? Нельзя обработать всё в одном по разным типам эксепшонов?
>>1179732Ах ты, сука."Единица" - это unit наверное?И всё равно текст остаётся загадочным."Единица в динамическом векторе основного класса" - хорошо звучит. В России такое любят. С таким названием мог бы быть доклад на форуме "Территория смыслов", например.
>>1179644>Попробуй intellij idea. Попробовал, вещь супер!1. Пишу:PreparedStatementIDE дописывает:import java.sql.PreparedStatement;PreparedStatementРаньше, чтобы узнать, что писать после слова "import" я тратил кучу времени.2. Выделил несколько строк, нажимаю Ctrl+Shift+T, IDE предлает упаковать в try-catch, как в сказке!
>>1179849
Кто-нибудь пробовал сабж? Это типа наш ответ Unity. Можно делать игоря для Windows, Linux, MacOS, iOS, Android и браузеров с поддержкой WebGL.https://libgdx.badlogicgames.com/http://www.libgdx.ru/https://habr.com/post/243471/
>>1179945>ответ юнитиНу ты кек вообще. Пробовла его на мобилки. Если коротко то более-менее он подходит для 2д, в 3д не лезь блять. А еще там хуйня с iOS, так как пидорские майкрософт купили купили и закрыли RoboVM, что бы не мешал Xamarin'у, и было два варианта, мутный Intel ME, или старый молумертвый форк RoboVM - BugVM.
>>1179959Я хочу написать RPG типа Fallout 1-2 или Arcanum, но с вращаемой/перемещаемой камерой (как в Neverwinter Nights и WarCraft 3). Вид от 3-го лица, бои пошаговые. Подойдет ли оно для этого?
>>1179968Теоретически да, но я так и не смог заставить нужные мне модельки работать, постоянно то ли текстуры, то ли нормали отклеивались, а из готовых из интерента вроде норм. Но опять же с 3д он так себе. А у тебя именно что 3д.
Нужно получить указатель на int.Но напрямую сделать это не получается.Есть какие либо способы это сделать кроме как привести к long?
А чё в треде одни вкатывальщики? Или так во всём программаче?
>>1180032Во всём.
>>1180032Я профессионал.
>>1180070Профессиональный вкатывальщик.
5 лет промышленного опыта-кунЗадавайте свои ответы. На глупые вопросы не отвечаю
>>1180123>>1179678
>>1180145эксепшен ты сам кидаешь? Если да, то не надо так. Эксепшен это дорогая операция, плюс это должно быть что-то исключительное, эксепшенов не должно быть при корректной работе.Сделай функцию, возвращающую boolean, и дёргай это функцию
>>1180150Я проверяю на некорректный ввод. Если ввод некорректный, кидаю сам кастомный эксепшен и прошу пользователя повторить снова (для этого цикл). это учебное приложение, один из пунутов задания придумать кастомные эксепшены
>>1180168тогда пиши только в System.out
>>1180177Так в итоге и сделал. Просто думал, мб есть способ это нормально хэндлить. Спасибо за ответ.
Поясните за таимеры.Я почитал примеры но это не совсем то.Там показано как запускать тред через каждые n секунд.А мне не нужен весь тред.Я хочу выполнять один цикл строго до определенного времени через каждые x сек.Как мне это сделать?
>>1180494```final long deadline = ...;while (System.currentTimeMillis() < deadline) { // do stuff}```
посоветуйте движок / фреймворк для полнотекстового поиска
>>1180571Elasticsearch
Привет, мираноны!Возник вопрос, до какой степени джуну надо знать Хибернейт, Спринг(и что именно надо знать)?
>>1180677Не надо, пиздуй так - все равно перезвонят.
>>1180694А че так можно было? А я то сидел ждал пока пригласят.
>>1180748А ты думал мы вам перезвоним просто так сто сорок пятый тренд идет?
Читаю спринг экшон и у меня возник вопрос, почему для моего бина без интерфейса нормально работает аспект, хотя @EnableAspectJAutoProxy у меня стоит без proxyTargetClass=true?
>>1180910proxyTargetClass=true означает: использовать cglib-прокси, даже если есть интерфейс. Если нет интерфейса, будет cglib как единственный возможный вариант.
>>1180937спасибо
Что написать на яве, чтобы было интересно? Без ui. Киньте идей каких нибудь плез. Может кто то уже что то пилит, я бы скоопился.
>>1181056BOINC, Rosetta...http://boinc.berkeley.eduhttp://setiathome.berkeley.eduhttp://folding.stanford.eduhttp://boinc.bakerlab.org/rosetta/http://www.tscrussiateam.ruhttp://www.boinc.ruhttp://www.curlie.org/Computers/Computer_Science/Distributed_Computing/Projects/
У меня проблема с jframe.Я вывожу на jframe скриншот другого окна через jlabel.Но рисовка происходит только в том случае если мое окно активно.Как сделать чтобы jframe обновлялся постоянно?
Читаю и параллельно перевожу concurrency in practice. Благое дело?
Нахуй так жить, жабаны?
>>1181156спринговый эксепшен? Чот не помню такого
Анон, очень нужна помощь.Суть такова:обмазываюсь видеокурсом про спринг (тру-посоны в комментах на рутрекере поливают автора и курс говном, но ничего лучше т.е. просто ничего на русском не нашёл), там нужно поставить glassfish, mysql, затем создать БД и подключиться к ней из glassfish. БД создал, даже немного данных добавил в таблицы - всё норм. Пытаюсь теперь создать пул подключений: ввожу нехитрые настройки (пользователь, пароль, url), сохраняю, жму Ping и... нихуя! Вылезает ошибка Ping Connection Pool failed for MySQLPool. Class name is wrong or classpath is not set for : com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource Please check the server.log for more details.Порылся в интернете, нашёл очень полезный совет - положить jar-ник с драйвером в директорию домена, а не просто в глассфиш/либ. Положил по всему пути до ext'a в глассфише теперь лежит этот файл, перезапустил и всё равно ничего не получается. Может быть кто-то сталкивался с подобной проблемой или может просто указать мне на ошибочные действия, которые приводят к подобному результату?
>>1181146Правильно, что читаешь.А переводить не нужно.Учись понимать английский без того, чтобы переводить его при чтении. Иначе - это тупик.
>>1181244>т.е. просто ничего на русском не нашёлУмри>ошибочные действия, которые приводят к подобному результатуОшибочные действия - пытаться что-то делать с glassfish, он не нужен (как и другие ASы)
> java
Джаверы такой вопрос. Прочитал полностью Шилдта для начинающих. Какие еще темы нужно освоить из полного Шилдта или других учебников прежде чем начать учить Spring?
Не ставь жабу, бро, там вирусы, у меня от этого брат умер.https://computer76.ru/2018/04/16/javac-cmd-error/Установка Java не относится к насущной проблеме при работе в любой операционной системе, причём при некоторых условиях даже НЕ РЕКОМЕНДУЕТСЯ.
>>1181380желательно сначала освоить хотя бы Шилдта не для начинающих, ну или его альтернативы
>>1181411Шилдт сам пишет на крестах. В своих книгах про Java и C# он тупо пересказывает содержимое сайтов Oracle и MSDN. Иногда даже с ошибками.>>1181380Spring in Action. Даже у нас выпускали с хорошим переводом (есть в VK в поиске по документам).
>>1181412ты думаешь он что-то поймет в спринге после Шилдта для начинающих? не знаю, не знаю
>>1181415Ну, мне в свое время хватило общих знаний языка (по какой-то вузовской методичке) + AWT & Swing.В той книге все хорошо разжевано для начинающих.
Вот тут надо все штидировать - API, спецификацию, tutorial'ы:https://docs.oracle.com/javase/10/
>>1181380Брюса Эккеля прочти:https://proklondike.net/books/java/Ekkel_Thinking_in_Java__4th_Edition_2009.html
>>1181380>>1181411могу еще посоветовать Murach Servlet and JSP, кроме собственного говоря сервлетов и jsp, там еще есть работа с бд (jdbc, jpa), основы html/css, объясняется как это все вместе работает, есть даже пример разработки готового веб-сайта
>>1181433Кстати, нужно ли еще что-то знать из Hibernate, кроме использования его как реализации JPA?Там есть какой-то свой встроенный язык запросов - его спрашивают на собеседованиях?
>>1181436sql учить придется в любом случае, всякие jpql на нем основаны и не особо от него отличаются; думаю ты должен уметь выполнять crud операции в hibernate/jpa, знать основные аннотации и подобные базовые вещи
>>1181436Именно язык запросов там практически тот же самый, что в JPA. Есть свой criteria api, который ныне объявлен deprecated, несмотря на превосходство над ущербными JPA criteria.В реальном мире скорее всего придется столкнуться со спецификой Hibernate, но для собеседований должно хватить и JPA.
>>1181445можно ли говорить на собеседовании, что я предпочитаю не использовать hibernate и jpa?. Ибо от них одни проблемы без заметной пользы
>>1181574Мне jooq больше нравится. Но в каждой вакансии Hibernate и Spring.
>>1181574Можно, если сумеешь аргументировать. Адекваты понимают, что hibernate/jpa как минимум хороши не во всех ситуациях.
>>1181627в простых проектах проще руками пару запросов накидать.В сложных уже нельзя доверять автогенерации и нельзя выгружать весь граф объектов.Итого нет применения
>>1181635Так может просто и не ходить туда, где важен hibernate? Не так уж и в каждой он вакансии. Но в любом случае, на собеседовании в адекватной конторе умение осмысленно и по существу раскритиковать hibernate вполне может заменить его глубокое знание.
>>1181574Сходу выдашь свой отсутствующий опыт. В узких местах запросы пишутся ручками, но в большинстве крупных проектов без orm никуда - другой вопрос, что некоторые умники сперва пердолят свой запрос на каждый чих, а со временем всё это обрамляется в тот же orm, только хуёвый.>>1181635>в простых проектах проще руками пару запросов накидать.Внезапно, тебя не будут нанимать ради хелловорлдов с "парой запросов".>В сложных уже нельзя доверять автогенерации и нельзя выгружать весь граф объектов.Ты не понимаешь технологию, если не видишь ей применения.
>>1181574>предпочитаю не использовать hibernate и jpa?А MyBatis (бывший iBatis)?Это хороший компромисс.
>>1182078>Ты не понимаешь технологию, если не видишь ей применения.У меня есть технология изготовления фигурок из говна, найдёшь ей применение?Если нет, видимо ни ты ни я просто не понимаем её.
>>1182088Попробуй ещё раз и без использования говна. Уверен, у тебя получится.И как ты думаешь, если тысячи зрелых специалистов используют технологию, а ты "не видишь ей применения", то у кого проблемы с пониманием - у тебя или у них?
>>1182099>если тысячи зрелых специалистов используют технологию,Миллионы мух не могут ошибаться, да.Люди чего только не делают.И на джаве в том числе.И что?Я другой анон, если что.И тоже не считаю jpa и hibernate хорошим делом.Как и спринг.Всё это ненужная монструозная хуйня.
>>1182101>Миллионы мух не могут ошибаться, да.>>1182088>технология изготовления фигурок из говна/pr зафиксирован на кале, лол.>>1182101>Всё это ненужная монструозная хуйня.Для хеллоуворлда вообще мало что нужно.
>>1182103Сынок, чтобы тебе было понятно, о чём я - посмотри на продукты Caucho, например.Или на тот же MyBatis.Это примеры несколько иного подхода, нежели обычно принятый в джава-разработке.А коммерческий успех, в наше время, далеко не всегда свидетельствует о качестве продукта.И да, 95% чего угодно - говно, но, оставшихся 5% мне вполне достаточно.
>>1182107Щень пытается общаться снисходительно - какая прелесть. Чешет о монструозных продуктах и приводит в пример майбатис - один аргумент лучше другого.У тебя есть что-нибудь по делу, или ты так, попечатать зашёл?
>>1182118По делу тебе уже всё сказали, и даже не один раз, лол.А суть твоей аргументации - все так делают.Охуенно.И да, у тебя совсем не бомбит, как я погляжу.
>>1182121Перечитай посты ещё раз.Да-да, вызывай пожарных.
>>1182129Перечитал.Вызвал.Жди.
>>1182078>но в большинстве крупных проектов без orm никуданикуда без выгрузки всего графа объекта? Так делать нельзя в любом случае>Ты не понимаешь технологию, если не видишь ей применения.глупость. Есть куча "технологий" без применения
>>1182107>MyBatisсмотрю на мануалhttps://www.concretepage.com/mybatis-3/mybatis-3-annotation-example-with-select-insert-update-and-delete@Results({ @Result(property = "vid", column = "id"), @Result(property = "villageName", column = "name"), @Result(property = "district", column = "district") }) @Select("SELECT id, name, district from village WHERE id = #{id}") Village selectVillage(int id);По мне так это хуже ручного маппера. Оно не проверяется при компиляции, IDE не будет переименовывать эти поля при рефакторинге, оно будет падать в рантайме.Плюс в маппере можно делать преобразования, помещать некую логикуЭто JdbcTemplate с запросами в аннотациях? Не вижу преимущества перед простым JdbcTemplate
А что пацаны про Ebean скажут?
>>1182165Лучше ебатис.
>>1182165Ну давайте, серьёзный вопрос-то.
>>1182177Хибернейт выебал жука и высрал ебин :)))
>>1173896Бля, как же я хочу научиться излагать мысли так как ты. Ты это тренировал или впитал с окружением? Сколько времени ты писал этот пост? Исправлял что-нибудь или тупо поток мыслей записал?
>>1182185
>>1173896>Ниже у тебя отвратительный пример мутабельного класса, чья внешняя функциональность зависит от совершенно не очевидного для окружающих внутреннего стейта.так мы дойдём до ненужности ооп. Ибо основа ооп это внутреннее состояние объектов, что есть плохо по современным критериям
>>1182185Чоблять? Я просто ответил на пост без задней мысли. Я тебе такое и ирл с наскока высру, только без двощесленга про жопы и ссанину.> Ты это тренировал или впитал с окружением?Книжки в детстве читал и потом сидел в психотронной тюрьме. Не рекомендую.>>1182191Egorka-dolboeb, eto ti? Ни одна из парадигм ООП ничего говорит про стейт объектов. То, что сущность заявляет, что она кошка и умеет мяукать с пруфами ничего не говорит о внутренней реализации кошки. Лишь о том, что она умеет мяукать и к ней можно спокойно обращаться как к кошке.Если на девятое по счету мяуканье кошка взрывается нахуй и осколками посекает погладившего лишь говорит, что эта кошка говно. Хотя тут главное не дойти до нужности чекд экспепшнс и ненужности анчекд, но тут тонкая грань - внутренний стейт приносит неочевидность для внешнего наблюдателя и кучу других проблем, а анчекд экспепшнес стейтлесс каках это заебись.
>>1182201сам объект "кошка" предполагает, что это отдельный объект с отдельным стейтом. Иначе зачем вообще делать это объектом?Итого сама концепция стейта (и ооп) это нарушение инкапсуляции - стейт может поменять кто угодно, в том числе всякие наследники. В отличие от функции с ограниченным и заранее определённым набором входных параметров.ооп нарушает инкапсуляцию и порождает ворох проблем из-за стейта
>>1182204Егорка, ты что тут делаешь?> сам объект "кошка" предполагает, что это отдельный объект с отдельным стейтом. Додумываешь. Объект кошка предполагает, что он умеет мяукать, жрать и срать - удовлетворение контракта кошки. Всё. > Итого сама концепция стейта (и ооп) это нарушение инкапсуляции - стейт может поменять кто угодно, в том числе всякие наследники.Чоблять? Стейт, может быть, может не быть и может быть недоступным наследниками. И если у конкретной кошки есть стейт, доступный наследниками, то расширив эту конкретную реализацию кошки и поменяв в наследнике стейт, то это лишь станет стейтом новой наследной реализации кошки и никуда он торчать не будет. Икапсуляция схоронена. И тут мы подходим к мысли, что стейт это неочевидно, хуйова, хуйова тестируется, не тредсейф и вообще неидемпотентная ссанина говна червя.> ооп нарушает инкапсуляциюТы упорот там? Инкапсуляция это один из столпов ооп.> порождает ворох проблем из-за стейтаЕще раз. ООП ничего не говорит про стейт. Стейт привносят говнокодеры там, где он не нужен, а потом задаются вопросом КАК ЖЕ ЭТО НАЗЫВАЕТСЯ ТЕСТИРУЕТСЯ?Вот типа такой хуйни >>1173889
>>1182209> Объект кошка предполагает, что он умеет мяукать, жрать и срать - удовлетворение контракта кошки. Всё. тогда хватит статик методов, без создания объектов.А если нужна кошка1 и кошка2, и они должны отличаться в один момент времени - это значит внутри стейт.Так вот, создание объектов, создание кошки1 и кошки2, предполагает наличие у этих объектов состояния. Иначе нет смысла создавать объекты, можно просто статик методы хуячить.>Стейт, может быть, может не быть и может быть недоступным наследниками.наследник может сломать метод своего предка. Т.е. нарушена инкапсуляция, метод можно сломать извне>Ты упорот там? Инкапсуляция это один из столпов ооп.Скорее это столп функциональщины. Только функциональщина предполагает чёткий контракт и чёткий набор входных параметров>ООП ничего не говорит про стейт. Стейт привносят говнокодеры там, где он не нуженООП это стейт. Пчёлы это мёд. Не бывает пчёл без мёда
>>1182185Он написал хуйню.Не стоит этому завидовать.
>>1182221отличная аргументация
>>1182156Не надо использовать аннотации.Там есть xml маппер.И да, если ты не понимаешь, зачем всё это, и чем это лучше хибернейта, то тебе это просто не надо.Речь шла не о том, что хибернейт не нужен, а о том, что не стоит его использовать повсеместно.
>>1182217> тогда хватит статик методов, без создания объектов.Ебать у тебя отрицание пошло, уже до процедурщины скатился. > А если нужна кошка1 и кошка2, и они должны отличаться в один момент времениДа што ты? Кошка1 и кошка2 это кошки и обращаться с ними можно как с кошками. Если кошка2 требует для работы ниибацца стразы как у того кузнеца, то она должна быть реализована отдельным сортом кошки. Или вообще не кошкой, если не тянет. Стейт тут не при чем. > наследник может сломать метод своего предка. Т.е. нарушена инкапсуляция, метод можно сломать извнеА-а-а, нихуя. Это лишь будет сломанный сорт наследника. К нему по-прежнему можно обращаться как к предку, вот только хуйова он будет все делать. Ну такой наследник, щито поделать, ничего неожиданного в рантайме.> Скорее это столп функциональщины. Вот тут ты спалился, что вообще нихуя не разбираешься в ООП и ФП. Сейчас ты открываешь википедию и читаешь про ООП. Подумай почему инкапсуляция является первейшей парадигмой.Потом открываешь статью про ФП и неожиданно узнаешь, что оно про функции, а не про объекты. > ООП это стейтПовторение аргумента не усиливает его. Особенно если он некорректен. Пиздуй читать википедию. И когда устроишься на свою первую работу - не увлекайся стейтфул дрисней, бо обоссут нормальные программисты.
>>1182221> ебанаты в зк> на острие отрицания классических практик юнит-тестирования
>>1173657 (OP)Хочу программить на джаве, но у меня ХР стоит и ни чего с оф. сайта не устанавливается, подскажите что от куда скачать надо что бы на хрюшу установилось. Спс.
>>1182230юнит-тестирование это далеко не абсолютное добро
>>1182225>Там есть xml маппертоже текстом?Я и говорю, что лучше код чем текст>И да, если ты не понимаешь, зачем всё это, и чем это лучше хибернейта, то тебе это просто не надо.Я не понимаю чем это лучше простого JdbcTemplate
>>1182234> Сам сказал очевидность - сам с собой согласился.Как там, солнце еще встает на востоке?
>>1182226окей. Зачем тогда создавать две кошки? Может есть какая-то причина?Если они совершенно одинаковые, то хватит и одной кошки>Это лишь будет сломанный сорт наследника. К нему по-прежнему можно обращаться как к предку, вот только хуйова он будет все делать. Ну такой наследник, щито поделать, ничего неожиданного в рантайме.т.е. нужно повторно тестировать все методы предка в наследнике? Это и есть нарушение - оттестированные методы можно сломать, и нужно постоянно проверять на работоспособность старый оттестированный код
>>1182237адепты почему-то думают, что любое тестирование это абсолютное добро. И чем больше тестирования тем лучше
>>1182234У нас есть что-то получше? Можно, конечно, просто взять и договориться писать без багов.
>>1182240> окей. Зачем тогда создавать две кошки? Может есть какая-то причина?Нужны разные кошки. Одна серая, другая красивая, третья мяукает охуенно. Например стратегия доступа к данным. Одна к кассандре, другая к жбод какахе. Обе реализуют один интерфейс. Не стоит делать один объект с двумя по сути одинаковыми методами. Это чтобы ближе к телу аналогия. > т.е. нужно повторно тестировать все методы предка в наследнике? Нужно тестировать выполнение ожидаемого от объекта контракта. Выполнение контракта происходит - заебись, погнали дальше. Нет - ti okhuel blyat.>>1182242> тестирование не нужноИди нахуй.
>>1182250покрытие 100% это зло например.Многократное дублирование логики, затруднение правок
>>1182251>Одна серая, другая красивая, третья мяукает охуенно. cat1 = new Cat(grey)cat2 = new Cat(white)cat1.fuck(cat2)или ты на каждый цвет будешь делать наследника?И чистые функции с другой стороныboolean fuckTwoCats(cat1Color, cat2Color){}
>>1182236>Я не понимаю чем это лучше простого JdbcTemplateТем, что это не Spring?
>>1182256Не паясничай. Я привел тебе конкретные живые примеры. Могу привести еще.
>>1182252Ебать ты долбоеб, братишка. Земля тебе пухом.
>>1182252И отличная иллюзия того, что багов нет.
>>1182147>никуда без выгрузки всего графа объекта? Так делать нельзя в любом случаеORM не заставляет тебя выгружать весь граф объектов
>>1182258Что не так со спрингом? Отличные микрофреймворки для построения микросервисов и работы с конкретными доменными сферами.
>>1182259>Я привел тебе конкретные живые примерыпримеры наличия стейта в объектах?
>>1182265самое главное. Если есть заветная цифирка 100% - значит багов нет, блябуду
>>1182266он создан именно для этого. Для реляции объектов на базу и обратно. Т.е. на заполнение графа связей объектов
>>1182270За лишний стейт, и что ооп не про стейт, а про парадигмы ооп и про объектное представление данных тебя уже обоссали.Ты кукарекнул зачем создавать две создавать две кошки и какая этому причина и я привел конкретный пример стратегии доступа данным, объединенных одним кошачьим интерфейсом. >>1182274Еще один.Или ты один анон?
>>1182277>Ты кукарекнул зачем создавать две создавать две кошки и какая этому причина и я привел конкретный пример стратегии доступа данным, объединенных одним кошачьим интерфейсом. ты привёл пример необходимости стейта у объектов. Как ты будешь выражать цвет кошки?>а про парадигмы ооп и про объектное представление данных тебя уже обоссали.ты сам себя обоссал>Или ты один анон?таки да
>>1182269> микрофреймворки> микросервисовМожешь привести пример (дать ссылку) минимального приложения на спринг - опубликовать один маленький pojo как веб сервис?Хотелось бы сравнить с Baratine.
>>1182279шо оно делает?
>>1182278> ты привёл пример необходимости стейта у объектов. Да ты же сам с собой общаешься! Читаешь не то, что тебе отвечают, а то что тебе хочется читать. Впрочем, причины понятны - ты просто не понимаешь, в силу низости интеллекта, что тебе говорят. > ты сам себя обоссал> таки даХах, так и знал. Не понимает ООП, несет какую-то хуйню, отрицает необходимость и ограничения сферы использования ОРМ, мелкобуква. Надо было сразу послать необучаемого егорку-долбоеба нахуй и не тратить на тебя время. Сколько лет сижу на бордах, но ни разу правило не нарушалось - если он мелкобуква, значит он в итоге окажется идиотом. Никаких исключений за годы. Все начинается с мелочей. >>1182279Гугли spring data rest - пишешь модель и интерфейс репозитория и в рантайме будут тебе и реализация репозитория, и круд какахень реста.
>>1182281это саморефлексия такая?Я тебе уже пятое сообщение талдычу, что объекты это стейты, ради стейтов объекты и делаютНесколько кошек потому-что они разные кошки, разность выражается через стейт. Стейт можно менятьЧто тебе тут непонятно?
>>1182281>spring data restПогуглил.Хуйня какая-то.Где там публикация _pojo_ как веб-сервиса?В этом вашем спринге на каждый пук - тугая струя какой-нибудь бессмысленной хуйни. Очень напоминает гуглоподелия. Кстати, Гугол его не купил ещё?
>>1182299>spring data restэто очередная магия по генерации sql/hql из названия методов. Зачем это нужно? Хз как по мне. Очередная "крутая" хрень для хэллоуворлдов
>>1182301Не нужна. Но есть, раз анон просил. В продакшене если так уж нада существуют data api платформы, но с ними есть нюансы.
>>1182301>Очередная "крутая" хрень для хэллоуворлдовУ меня такое ощущение от спринга в целом, лол.Я понимаю, что я не совсем прав, наверное, но ощущение именно такое.Представляю, насколько это всё раздувается в реальных больших проектах.
>>1182279>минимального приложения на спринг - опубликовать один маленький pojo как веб сервис?Иными словами, hello world rest?https://projects.spring.io/spring-boot/Для реактивных хипстеров теперь еще есть webflux
>>1182274Таки а в слове весь тебе какая часть была непонятна?
Вряд ли смогу внятно описать, но хуй с ним. Я не программист по специальности\рабочему опыту, но лет 10 говнокожу по настроению всякие говномодики к играм выше уровня "заменить 10 единиц урона на 15", писал свои скрипты к арме и т.п. Есть небольшой опыт разработки на шарпе и яве. Есть общее понимание основ ООП за рамками академических задач. Но блядь, вот решил снова обновить знания по яве, попытаться перекатиться с текущей практически чисто менеджерской должности в более рабочую. Начал с сортировки пузырьком и обосрался сразу же. Нет, саму сортировку я написал за 15 минут без проблем, появилась идея визуализировать, сохранив все промежуточные варианты массива в лист и отрисовывать. Сохранял тупо через List<> array; array.add(currentSortArray) в конце каждой итерации сортировки. В результате я получил 86 одинаковых массивов и долго скреб тупую башку - почему. Потом вспомнил о такой замечательной фразе как "ссылочный тип". В чем вопрос - я постоянно проебываюсь не на незнании алгоритмов(хотя понятное дело там тоже не блещу), а на уровне понимания, как работает конкретный язык в целом, видимости, типизация, етс. Как это можно эффективно починить, кроме как поработать в разработке 2-3 месяца?
>>1182350Только практикой, как ещё?Читать теорию без практики - бессмысленно.Алсо, большинство вещей, обычно не понимаемых ньюфагами - не специфичны для конкретного языка.И да, не стоит слишком много и сразу от себя хотеть. То, что ты только что рассказал - совершенно нормально.
>>1182350Ты слишком строг к себе. Всё, что ты написал, нарабатывается практикой. Могу посоветовать использовать листик и бумажку с некоторыми алгоритмами, чтобы буквально видеть что должна вывести программа, и что она выводит на самом деле.
>>1182376Проблема была не в алгоритме, а в моем незнании, что массив является ссылочным типом, очевидно, что такой проеб на собесе = вылет с него нахуй. И при этом я наверняка смотрел видос с полгода назад, писал на это код, но снова забыл из-за неиспользования, а ведь типы это азы. Старый даун похоже, нихуя не запоминаю последнее время, даже что постоянно делаю.
>>1182393После определенной итерации проеба ты будешь вспоминать, почему он может возникнуть. Просто больше пиши и, что самое главное, постоянно.
>>1182393Так чего ты так зациклился на ссылочных типах, все что не примитив - ссылка. Если метод не возврщает объект, то это может быть мутатор и тд.
сап, джавач! Есть вопрос, но сначала ввводная: есть две сущности, отношение oneToMany, есть два CrudRepository для них(стандартные jpa.repository просто интерфейсы). Возникла такая задача - удалить последнюю сущность(из тех, которых м.б. много). Как это лучше сделать? В том месте в коде, где возникла задача удалить - брать первый репозиторий, вытаскивать всю коллекцию элементов(которые Many), узнавать размер коллекции и удалять? Или логичнее расширить интерфейс, добавить метод и в нем уже делать все эти операции? Или вообще возможно написать код на HQL?
>>1182828Орнул чет. Яркий пример встречи с реальностью человека для которого орм это серебряная пуля и избавление от sql.order by id desclimit 1;
>>1182849Ну вроде не осталось на планете людей, которые топят за ненужность знания хоть каких-то основ sql даже при работе с орм. Но этот и правда совсем макакен.
Сап анонПодскажи пожалуйста, можно ли реализовать запись Key + Value в Hashmap через scanner?Например каждый .put будет разделяться ";" (один put == одной книге)Вначале я записываю имя книги(String) -> Enter -> true или false(Boolean) -> ; -> следующая книга -> когда список книг закончился, то пишу ключевое слово STOP(константа EXIT_KEYWORD) и мне выводится список книг с true\false (прочитана\нет)на пике мой говнокод, работает через жопу public static void main(final String[] args) { Hashtable<String, Boolean> books = new Hashtable<String, Boolean>(); ArrayList<String> bookArray = new ArrayList<String>(); Scanner in = new Scanner(System.in); while (in.hasNext()) { String bookName = in.next(); if (EXIT_KEYWORD.equals(bookName)) { break; } bookArray.add(bookName); boolean isCompleted = in.hasNextBoolean(); books.put(bookName, isCompleted);// in.useDelimiter(";"); } for (Map.Entry<String, Boolean> entry : books.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); } }
Сап, погромиздач, подскажите, пожалуйста, хорошую библиотеку для построения графиков на джаве яве. Смотрел jfreechart, но инфе по ней ноль.
>>1182901Если формат типа такого:Book1;trueBook2;falseТо бери от сканнера nextLine, а потом split по ;
>>1182901А какой в этом смысл?Почему бы не набрать всё в файл, а потом прочитать?
>>1182901Используй хэшмап вместо хэштейбла. Загугли причину.Ты добавляешь книги в свой bookArray, но не используешь его. Зачем?Пикрил.
>>1183006
>>1182931Вот это годнота https://canvasjs.com/
>>1183055Огромное тебе спасибо.
Как вы помните, такие модули, как CORBA и Java EE, стали устаревшими с выходом Java Standard Edition 9. Oracle планировала их убрать из Java, и в 11-ой версии эта идея станет реальностью.В декабре 2016-го была представлена Java SE 6, которая включила в себя стек web-сервисов и 4 технологии Java Enterprise Edition, среди которых оказались JAF, JAX-WS, Common Annotations for Java и JAXB. Время шло, и версии EE стремительно развивались, так что возникало несоответствие данных технологий, а техническая поддержка двух редакций только усложнялась. Вскоре, когда появились автономные версии Java Enterprise Edition на независимых ресурсах, было объявлено об отсутствии надобности включать их в JDK и Java SE.Даже сейчас некоторые ПО, разработанные на базе JDK для API и инструментов Java EE, не запускаются и даже не компилируются. 6-8 версии повлияли на усиление несовместимости. В итоге представители Oracle сделали заявление о том, что разработчики могут развернуть альтернативные версии Enterprise Edition.А вот архитектура CORBA и вовсе признана пережитком прошлого, так как ее истоки лежат в далеких 90-х. Oracle не выявила интереса к созданию современных приложений на базе CORBA, да и стоимость поддержки перевешивает получаемые преимущества.На данный момент не существует версий CORBA, которые бы поддерживались независимыми разработчиками, да и вряд ли кто-то захочет взять на себя бремя поддержки API.Что же касается JavaFX – модули будут удалены, и в дальнейших планах обновления, которое производится раз в 6 месяцев, они не появляются.Нихуя не понял, java ee официально отдана эклипсу и больше не будет поддерживаться? Объясните на пальцах, что это значит вообще.
>>1183212Эти модули выкидывают из jdk. Даже интерфейсы. Ну и да, с подключением.
>>1183216Так и как теперь интерпрайз делать? Грузить все лабы с левых репозиториев? Старый интерпрайз код на новой джаве не взлетит? И нахер это все делать, если джава только на ее и выживала.
>>1183217>джава только на ее и выживалаОхуительные истории, браток.Хочешь поддерживать ЕЕ легаси - не меняй версию на проекте.
>>1183217>Грузить все лабы с левых репозиториев? Старый интерпрайз код на новой джаве не взлетит?Из Java SE (jdk) выкидывают куски Java EE, которые там зачем-то были. Из самих EE-серверов они никуда не денутся. В любом случае с репозиториями в чем проблема? Грузи не с левых.>Так и как теперь интерпрайз делать?Как и раньше, на спринге.
>>1182078>но в большинстве крупных проектов без orm никудаТы понимаешь, что это убогая попытка адаптировать реляционные отношения и реляционную алгебру к объектам в Джаве? Типа, в начале удобно, точнее, иллюзия удобства, а потом огребаешь кучу багов, многие из которых еще и хуй найдешь.
>>1182147Погугли про lazy load что-ли. Хибернейт ему выгружает весь граф видите ли, ну охуеть
>>1183304Вначале подключаешь инструмент, а потом блокируешь его функциональность. Очень удобно.Добавлю, что с этой лэйзи очень много ебли. Думаешь просто-так по-умолчанию стоит игер?
>>1183315>Думаешь просто-так по-умолчанию стоит игер?Думаю, просто так. С дефолтным lazy было бы гораздо лучше
>>1183007Благодарю анон!
>>1183301>попытка адаптировать реляционные отношения и реляционную алгебру к объектам в ДжавеЭто всего лишь маппинг результатов выполнения запросов в объектную модель. Внезапно, реляционная модель хорошо вписывается в ОО.>огребаешь кучу багов, многие из которых еще и хуй найдешьНе было значимых проблем ни на одном проекте. Возможно потому, что читали доки и понимали, что вообще происходит, а не пытались наговнять что-то работающее. Попробуй, рекомендую.>>1183315Если для тебя орм - это хуяк хуяк и наконецта появились какие-то объектики в выполнении - да, конечно, отключение lazy loading'а может выглядеть как >подключаешь инструмент, а потом блокируешь его функциональность
>>1183337>Это всего лишь маппинг результатов выполнения запросов в объектную модельвсезапно, это решает один написанный маппер. ОРМ снова не нужна>Не было значимых проблем ни на одном проектезначит это галера с гостевыми досками. Нахуячили что-то работающее, сдали, а дальше хоть трава не расти>Если для тебя орм - это хуяк хуяк и наконецта появились какие-то объектики в выполнении - даа для чего ещё?
Аноны, которые тут хейтят хибернейт (и вообще ORMы), поделитесь опытом, как вы без него живете. С одной стороны, понятно, сложный и опасный инструмент, нужно уметь обходить грабли, и это подзаебывает. С другой стороны, в этом нашем ынтерпрайзе бывают OLTP-системы, которые жонглируют огромным количеством связанных сущностей; допустим, есть у меня сущность типа "заказ", N связанных сущностей с фактами об этом заказе и дохера бизнес-логики, в которой в разных местах нужно вытаскивать этот заказ и что-то из этих N в разных комбинациях и по разным условиям.И вот смотрю я на это и думаю - если писать каждый необходимый запрос на голом SQL (или даже на jooqе), не заебусь ли я еще больше, чем от хибернейта. Вы делали что-то подобное без ORM? Жив ли брат?
>>1183347Хэйтящие инструмент, при этом даже не спрашивая область применения и проект - это либо фанатики, либо студентики, у которых споры на тему самого лучшего языка программирования уже стихли, но мозги пока не проклюнулись. Спорить бесполезно что с одними, что с другими, один хуй ничего из себя не представляют.
>>1183340>а для чего ещё?Больше вопросов нет, откланиваюсь.
>>1183347> N связанных сущностей с фактами об этом заказе и дохера бизнес-логики, в которой в разных местах нужно вытаскивать этот заказ и что-то из этих N в разных комбинациях и по разным условиям.а хибернейт думаешь магией оперирует? Он либо достаёт все связанные объекты (на каждую связанную сущность отдельный запрос) и помещает это в память (тут главное не проебаться, чтобы он не начал тащить лишнего), либо опять-же надо писать запросы на hql, который хуже чем голый sql
>>1183349скатертью по жопе
>>1183350>Он либо достаёт все связанные объекты (на каждую связанную сущность отдельный запрос)Отличная история. Если ты не нахуевертил с конфигом, то запросы будут оптимизироваться, исходя из того, что один большой запрос выгоднее сотни мелких.
>>1183353нихуя. У меня оно хуячило сотнями мелких
>>1183355Ты бы хоть книжку почитал, понял бы почему.Хотя, не уверен, что ты умеешь читать.
>>1183360т.е. надо читать книжку, чтобы заставить "инструмент" не косячить. А баги там исправлять случайно не нужно?
>>1183212>Что же касается JavaFXНу, я ещё хуй знает когда говорил, что Оракл слил это дело.Формально они это заопенсорсили, типа - кому надо - пишите. Ни компонентов нормальных, ни хуя вообще нету. И в опенсорсе такие вещи не появляются, это слишком дорого. Короче - пизда FX'у. Да и хуй с ним. Мертворожденная хуета.Кому оно нравится, те просто не пробовали писать ничего серьёзного на нём.Зато Swing будет поддерживаться минимум до 26 года.И дальше будет, я думаю, куда эти бляди денутся, лол.
>>1183362Если ты себе в ебло лопату вколачиваешь, то это не вина инструмента.Такие потом и кричат, что орм - это сложна, поэтому нинужна.
>>1183367мартышки плакали, кололись, но продолжали жрать кактус
>>1183362> т.е. надо читать книжку, чтобы использовать инструмент
>>1183350>а хибернейт думаешь магией оперирует?Хибернейт вполне реально заставить вытаскивать только то, что тебе нужно в данный момент (если не ставить везде изначально eager), причем джойном. Но да, для этого надо не быть дебилом и читать книжку, отсюда оговорка про сложность инструмента. По своему опыту я скорее склоняюсь к тому, что для многих проектов эту сложность оправдывает отсутствие необходимости писать руками миллиард sql-запросов, но послушал бы success story полностью отказавшихся от ORM.
>>1183304> lazy loadЛютая хуита. Если мне и надо будет использовать ORM, я всегда буду отключать эту хуйню и загружать данные исключительно ручками (оно же eager loading).
>>1183377>загружать данные исключительно ручками>eager loadingСлишком толсто
>>1183381Что толсто? Конкретно в жаве я с ORM дело не имел, однако в EF можно было либо загрузить только основные данные, а косвенные данные (например ссылка на другой замапленный объект) он загружал по первому запросу (что и есть ленивая загрузка), либо ещё при загрузке начальных данных указывать какие косвенные данные надо сразу загрузить (это и называлось eager loading). И ленивую загрузку я всегда отключал, ибо нинужно.
Почему в javafx нельзя использовать обычные css-свойства? Тупо сделали, так лень свою тему под приложение пилить.
>>1183388В контексте >>1182147 на которые ты отвечал, lazy относилось к описанию связей на уровне сущностей, а не на уровне конкретного запроса. Это нужно, чтобы случайно не вытянуть полБД в нагрузку к одному объекту. Т.е. в хибернейте "загружать данные ручками" (а это единственный здоровый вариант) означает поставить для всех связей lazy и описывать на уровне запроса, какие связи подтягивать, о чем и шла речь.
>>1183374>но послушал бы success story полностью отказавшихся от ORMНачинал проект на хибернейте. Как вышло в прод - полезли пиздецы.Например : оператор открывает карточку заказа, в это время водитель берет заказ, меняя у него статус. Оператор нажимает сейв, и объекту ставится старый неактуальный статус. Водила жалуется, что у него пропал взятый заказ.Ставить блокировку при открытии карточки заказа? Нельзя, водилы будут жаловаться, что приложение зависло.Как решил? Сделал отдельный метод для операторской правки - оно правит только нужные поля, и метод для взятия заказа - оно правит другие поля.Как это сделать хибернейтом? Я не знаю. Хибернейт апдейтит все поля разом.Дальше. Перед отправкой объект надо преобразовать из entity формата бд в dto формата клиента. Я делал это через конвертер.Т.к. запросов было много, это преобразование кушало очень много памяти. Сделал jdbc маппер, чтобы оно конвертило сразу в dto внешней системы. Потребление памяти упало вдвое.Постоянные запросы сущности по ид. Хуй знает кто их вызывает, и они были в огромном количестве. Избавился от них только отказавшись от хибера, написав все запросы руками. Тоже упало количество запросов к бд вдвое, снизилась загрузка цп.Как нормально делать? DAO для каждой сущности, внутри методы получения этой сущности по определенным полям.Если сервис методу нужны какие-то сущности, то он через эти dao их получает
>>1183315Не блокируешь, а корректируешь. Дефолтные настройки подойдут для сэмплов и небольших проектов, а дальше уже тюнишь постепенно, сперва lazy load, потом 2nd level cache, потом и до чистого sql доходит в критичных местах
>>1183453Всё правильно.Explicit is better than implicit и всё такое.Но школоте и мамкиным сеньёрам похуй, разумеется.Особенно интересным такое кино становится, когда тебе надо одновременно работать с двумя физическими БД в одной транзакции, например.>DAO для каждой сущностиСейчас набегут модные девелоперы на гироскутерах из кофешопа и, расплёскивая смузи, расскажут, как сильно ты отстал от моды.Недавно только читал такое в одной книжке.DAO is old fashion, suka bljad.
>>1183453Спасибо. Собственно, самый интересный вопрос тут - что в конечном счете оказалось бы эффективнее по трудозатратам, научиться готовить хибернейт (к примеру, апдейтить не все поля в нем можно, но в hello world примерах, конечно, об этом не пишут, надо копать) или писать все на jdbc.
>>1183453> Оператор нажимает сейв, и объекту ставится старый неактуальный статус. Водила жалуется, что у него пропал взятый заказ.> Ставить блокировку при открытии карточки заказа?Открой для себя оптимистичную блокировку. И с прямым sql проблема будет, кстати та же самая.> Хибернейт апдейтит все поля разом.Открой для себя удивительный мир dynamic update.> Перед отправкой объект надо преобразовать из entity формата бд в dto формата клиента. Я делал это через конвертер.> Т.к. запросов было много, это преобразование кушало очень много памяти. Это может косвенно свидетельствовать, что у тебя не очень с реляционным дизайном и сущности слишком большие. Но так или иначе, запрос только конкретных колонок никогда не был плохой идеей и orm тут не при чем. Если ты запрашиваешь всю сущность, а нужно тебе треть колонок, то это просто вейстинг памяти, никакой магии тут нет. > Постоянные запросы сущности по ид. Хуй знает кто их вызывает, и они были в огромном количестве.Так и не увлекайся запросами сущностей по id. В половине случаев можно сразу апдейтить с допиленным where. > Как нормально делать?Персистенс слой дао/репозиториев, сервис, работающий с ним. Остальное работает только с сервисом. Никакого неконтролируемого доступа всего ко всем. И важно понимать, что orm это инструмент для круда и сохранения графа объектов. Для всего остального есть прямое написание sql (не важно через билдеры или напрямую юзать jdbc). И в реальных высоконагруженных проектах используется и орм, и прямой sql, а не как обычно бывает - начинают юзать орм, нихуя его не понимают, начинают лепить аналитические запросы, хуйню-говно, все тормозит, орут, что орм говно, все запросы переписывают руками и сидят в говне довольные.
Анончики, бытует мнение, что на джаву сейчас стараются не брать как основной язык для стартапов. Берут всякие Nodejs и прочее. Так ли это ?
>>1183480Нет, не так. Все как и всегда зависит от компетентности и отмороженности того, кто принимает решение.Инструменты выбираются по назначению, под конкретную задачу. Серебрянной пули нет и не было. веб-фулстек разработчик с 15+ стажем
>>1183480>для стартаповДля стартапов язык не так важен.Важнее краудфандинг через ICO смарт-контрактов на Ethereum.Гироскутер у тебя есть?А макбук?Ближайший кофешоп далеко?Смузи любишь?Вот об этом надо думать, а не о языках.Serverless architectures.Languageless development.Вот это вот всё.
>>1183500Кек, а на деле обычно берут то, что вся команда умеет.
>>1183527>команда https://www.youtube.com/watch?v=XRPUoz1TYro
>>1183538Это в тред it-неудачников в воркаче.
Анончики, посоветуйте почитать по аспектам в спринге, чтоб с хорошими примерами кода для копипаста.
>>1183485Легенды о золотых молотках живут в наших сердцах.
>>1183569Смотри Spring-потрошитель на ютубе, более чем достаточно
>>1183480для стартапов на первом этапе очень важна скорость разработки чтобы выкатить что-нибудь в прод как можно раньше. для этого подходит какой-нибудь nodejs и прочие. т.е. для прототипирования. потом при необходимости можно уже переписывать на что-то серьёзное
>>1183353хуй там плавал. от n+1 можно избавиться только с помощью jpql
>>1183453>Например : оператор открывает карточку заказа, в это время водитель берет заказ, меняя у него статус. Оператор нажимает сейв, и объекту ставится старый неактуальный статус. Водила жалуется, что у него пропал взятый заказ.Я или не понял проблему, или ты сделал какую-то хуйню. Разве это не случай optimistic lock. Вводишь версионную колонку и всё. В твоём случае когда оператор нажимает сейв, у него выкинется optimistic lock exception, можно предложить в этом случае обновить данные. Это же базовый сценарий
Анон, поймал себя на том, что все еще пишу на 8 джаве и на 9 и 10 не обращаю внимания. Подскажите каких-то источников, гле подробно(желательно с примерами) показывают что нового завезли в этих версиях
>>1183590Нет, не много. Зато много сломали. Жди 11 жаву и уже после её выхода думай о перекате.
>>1183590У меня аналогично. Жди LTS осенью
>>1183587Это может быть и случай, когда реально никто ничего одновременно не апдейтит, т.е. lock не нужен, но хибернейт перетирает поля просто потому что может. Спас бы @DynamicUpdate, как тут уже писали.
>>1183590То же самое.Оракл решил позаниматься хуйнёй и попилить бюджет и наши нервы.
>>1183590Jshell завезли для автотестов, и все в общем-то. Половина библиотек на 9 и 10 не работает.
В контроллере, RequestParam и PathVariable лучше принмать как примитивы или врапперы? Я такой, что лучше б примитивы получил, но увидел что очень многие именно врапперы принимают и подумал, а вдруг там изначально враппер и оно аутобоксить будет
>>1183666Смотря что у тебя за фронтНа перформанс оно не влияет особо
>>1183652> JshellИ какой в нём смысл, если есть груви?
>>1183453А на чём у тебя сделан интерфейс?
>>1183709Смартфоны для водил и делфи (молчать) для диспетчеров. И тем и тем отдаю json по http
>>1183453Т р а н з а к ц и я
>>1183721А на смартфонах? Веб?
>>1183745нет, программа
>>1183725Я не он, но спрошу - каким хуем здесь замешана транзакция?Тут или блокировки/версии на уровне БД (как пишут выше), или блокировки на уровне логики приложения.Выбор зависит от задачи.Например, блокировки на уровне БД не подходят, если мы не хотим, чтобы набив форму строк на 300 человек вдруг увидел, что не может её сохранить, и должен набить заново. Людям такое не нравится.Или ты хочешь, чтобы транзакция висела открытой неопределённо долго?
>>1182350>List<> array; array.add(currentSortArray) Ты там List<Integer[]> array = new ArrayList<>() наговнякал что ли? о_ОПиздец у тебя насрано в голове, земля пухом. Читай блядь любой базовый гайд по жабе, ты букваря считай не знаешь.
Sup джавачЕсть господа с ебрама, которые могут пояснить недоджуну за з/п на L1?
>>1183721>делфиАХАХАХАХАХАХА
>>1183780делфи лучше современной веб-параши, с точки зрения бизнеса. Да и разработки.Если именно десктоп нужен
>>1183337>Внезапно, реляционная модель хорошо вписывается в ОО.Доставь примеры наследования из реляционной модели.
>>1183794Таблица ссылающаяся на таблицу базовой сущности. Наследуемые поля пишутся в базовую, специфичные для дочернего класса - в новую.
>>1183340>это решает один написанный мапперНу да, MyBatis например. А эта хуйня кривая, которая что-то там без твоего ведома подгружает или сохраняет/удаляет, нахуй не нужна.
>>1183347>если писать каждый необходимый запрос на голом SQL (или даже на jooqе), не заебусь ли я еще больше, чем от хибернейтаПроблема современных кодеров в том, что они не могут в SQL. Поэтому для них Hibernate кажется чем-то охуенным. А все дело в кривых руках, на самом-то деле.
>>1183353>Если ты не нахуевертил с конфигом, то запросы будут оптимизироваться, исходя из того, что один большой запрос выгоднее сотни мелких.Ты, братишка, даже основы баз данных не осилил, поэтому для тебя SQL и реляционная модель - эта сложна. Тебе привычнее и понятнее пердолиться с объектиками. Поэтому ты и возбудился на критику Hibernate. Ну да ладно, земля тебе пухом.
>>1183367>то это не вина инструментаНет ни одной задачи, для которой подходит Hibernate. Следствие --> он не нужен.
>>1183453>Оператор нажимает сейв, и объекту ставится старый неактуальный статус.Optimistic locking.
>>1183799>Таблица ссылающаяся на таблицу базовой сущности.Вот ведь хуйня какая: в реляционной модели эти две таблицы будут разными типами, а в объектной - coercible.
>>1183810да, только сейчас об ней прочитал.Но всё-равно это плохое решение: у диспетчеров зарплата зависит от скорости работы. А тут постоянно будет вылетать ошибки и постоянно нужно заново заполнять поля данными, которые они уже забыли.DynamicUpdate хибернейтовское лучше бы подошло. Тоже только сейчас об нём узнал.При этом главное - следить, чтобы поля для водилы и для диспа не пересекались.
>>1183801>Проблема современных кодеров в том, что они не могут в SQLЕсли кто-то может в SQL, обязательно ли это значит, что ему нужно, как покорной макаке, соглашаться набивать на нем руками 145 однотипных джойнов и апдейтов? Может ему лучше приберечь свои охуенные знания SQL для чего-то более стоящего вроде развесистых аналитических запросов?
>>1183843>145 однотипных джойнов и апдейтов?что за мифы. Лор например написан без хибернейта. Можешь посмотреть, есть ли там 100500 однотипных джойновhttps://github.com/maxcom/lorsource
Аноны, как мне вытащить именно 10 строку из файла ("file.txt")?
>>1183868попробуй такhttps://ideone.com/JDHBy5
>>1183847>что за мифыЭто реалии жирного ынтырпрайза, с которым мне приходилось иметь дело. Для коментов на сайте может быть и не 100500, да.Но вот возьмем даже этот lorsource. Там около 25 dao, открываем PollDao и видим штук 15 строк типаprivate static final String updateMultiselect = "UPDATE polls SET multiselect=? WHERE id=?";25 умножаем на 15... Уже достаточно работы для SQL-эксперта.
>>1183878точно такие-же запросы придётся ебашить на ублюдочном hql
>>1183882Как минимум большую часть (но не все, да) апдейтов не придется ебашить, будешь вместо этого сеттеры сущностей вызывать. А простые селекты с джойнами писать на criteria сильно приятнее, чем на sql.
>>1183843>как покорной макаке, соглашаться набивать на нем руками 145 однотипных джойнов и апдейтов?Про то, что код, особенно однотипный, можно генерировать, ты слышал когда-нибудь? Попробуй - понравится.
Как сделать чтобы BufferedReader readLine не блочил все ? У меня оно только одну строчку с клиента принимает и все
>>1183786Ничего плохого в дельфи нет.Если речь идёт о формошлёпстве.Но, как быть с деплойментом?Свинг в виде апплета или вебстарта - это несколько другой уровень.Хотя, если у тебя одна точка, и приложение лежит на сетевой шаре, то похуй, конечно но, всё равно неудобно.И, в случае java-java, можно использовать Hessian в качестве протокола, а это совсем уже другой уровень. Для андроида, он вроде-бы, тоже есть, я просто не пишу под андроид.
>>1183908>Hessian бинарный проприетарный.Спасибо, не надо>Но, как быть с деплойментом?В ярлыке было прописано автообновление из шары. Не знаю, это виндовая фишечка или дельфовая>Свинг в виде апплета или вебстарта - это несколько другой уровень.свинг сыроватый. Я все эти веб-аппликухи, они медленные по сравнению с десктопом. И сыроватые
>>1183877>https://ideone.com/JDHBy5Спасибо!
Сап ентерпрайзач. Есть два glassfish'а, один локальный, другой на серваке. Также есть две JRE, обе 1.8.., локально приложуха показывает нормальное время в нужной таймзоне, а на серваке на час позже. Я не будь дурак, запилил кусок с Calendar.getInstance().getTime(), залил на сервак и скомпилил его той же явой. И он, сука, показал правильное время и ТЗ, получается дефолтная ТЗ jvm правильная. Т.о показывает неправильно только если задеплоить приложение на удаленный GF. Но в глассфише нет таких настроек, которые влияли бы на время. Что за хуйня? Хотя бы примерное направление может подскажете, гугл нихуя толком не выдал.
>>1183902Ну дык вот мне ORM по мере сил и генерирует. Посоветуешь какие-нибудь еще подходы к генерации SQL?
>>1183921проверь системное время на удалённом серваке
>>1183911>бинарный проприетарный.Опенсорсный. И ему лет триста уже.Что до бинарности - это плюс, а не минус - он компактный.У них есть то же самое, но текстовое - Burlap.Но, он редко нужен.На самом деле - охуенная вещь.Ты пишешь код так, как будто никаких веб-сервисов просто нет, и всё локально. Просто вызывешь методы интерфейса сервиса, остальное делает прокси. Асинхронность, естественно, руками делается - SwingWorker etc.В спринге тоже поддерживается, кстати.>веб-аппликухиСвинг это десктоп.>свинг сыроватыйЛол.Староватый он, это да.Но, всяко помоложе дельфи.Компоненты - JIDE.Понятно, что ты не будешь переписывать своё дельфи на свинг.Это я скорее о том, как вообще делаются такие вещи.
>>1183927Само собой все ок.
>>1183931"неправильное время" при записи в базу? В БД тоже есть настройка часового пояса
>>1183921Если считать, что все упирается во встроенные в жабу таймзоны, то сравнивай для начала версии jdk/jre; именно на чем запускаешь, а не на чем компилируешь, компиляция тут вообще не при чем.
>>1183924>Посоветуешь какие-нибудь еще подходы к генерации SQL?Примерно, как и в ORM - аннотации, потом рефлекшн и генерация SQL и прочего. Можно находить свойства - геттеры-сеттеры и без аннотаций.Руками или через Commons BeanUtils (PropertyUtils).Если у аннотаций retention policy = class, или просто надо работать с class-файлами, то надо использовать что-то типа ObjectWeb ASM (http://asm.ow2.io/) вместо рефлекшн.Так же можно, например, генерить код интерфейсов на TypeScript (для сериализации Java-объектов в JSON и использовании на клиенте в JS/TS), чтобы были подсказки в IDE, и т.п.
>>1183932Если б из базы бралось.>>1183934Походу единственный вариант разгадать магию. Машинки в одной подсети, все бля одинаковое, даже ОС. Ява тоже, только ревизии, или что там, на пару циферок отличаются.
>>1183951>на пару циферокЭтого достаточно, лол.Сделай простейший класс, который печатает текущее время. И запусти там и там.
>>1183945>Примерно, как и в ORM - аннотации, потом рефлекшн и генерация SQL и прочего.Звучит как написать свой более правильный и легковесный ORM. Тоже вариант наверное.
>>1183967Я так генерирую xml для iBatis SqlMap.А также прочее подобное, напр. XSD.Можно и свой ORM написать, конечно, но, если только для общего развития.Ещё можно написать тонкий слой поверх JDBC, чтобы не писать весь этот бойлерплейт каждый раз. С лямбдами это стало вообще интересно.Я имею в виду создание PreparedStatement, задание параметров, обработку ResultSet, автоматическое закрытие и т.п.
>>1184003>Ещё можно написать тонкий слой поверх JDBC>создание PreparedStatement, задание параметров, обработку ResultSet, автоматическое закрытиеЭто ты сейчас спринговый JdbcTemplate описал. С этим все понятно, но от написания запросов не спасает.
А причем Элвис Пресли к яве? Это ребус какой-то? Никак не могу разгадать.
>>1184004> но от написания запросов не спасает.Ну, от этого спасает ORM, лол.На самом деле, если приложение проектируется с нуля в 2018, если там одна БД, если всё под контролем, то, конечно, имеет смысл использовать ORM, заранее учитывая все его особенности.Просто не всегда всё так радужно.Java EE существует уже очень много лет.Гораздо дольше, чем нормальные ORM или тот же спринг.Также, бывают легаси БД, параллельно работающие с какой-нибудь хуетой, написанной на дельфи в середие 90-х, и т.п.Поэтому и DAO на JDBC и iBatis и прочее.
>>1184010Я бы предположил, что это от того, что на яве пишут те, чья молодость пришлась на
>>1184022Те, чья молодость пришлась на, те на яве не пишут, те на яве катаются.
>>1184011Но ведь ORM должны использоваться как раз там, где нет четкой привязки к БД. Сегодня PG, завтра оракл.
>>1184011Не очень прослеживаю, как соображения про легаси противоречат ORM, ну кроме того, что сами ORM раньше были хуже.И те, кто кричит, что хибернейт нинужен, они же явно не от того это делают, что на J2EE 1.3 сидят.
>>1183921Зачем ты продолжаешь кушать кактус Date/Calendar? Есть JodaTime, есть новое апи времени, есть бекпорт новго апи в конце концов.
>>1183930>Свинг это десктоп.>>>свинг сыроватый>Лол.>Староватый он, это да.>Но, всяко помоложе дельфи.>Компоненты - JIDE.>Зачем лезть в джава-онли протокол когда есть куча других, клиент может быть не только на ведре, но и веб, и гейос, почему нельзя просто пользоваться протобафом/жсоном....
>>1184101Ну ты еще спроси, зачем он glassfish кушает. Явно же не по своей воле.
>>1183951> только ревизии, или что там, на пару циферок отличаютсяhttp://www.oracle.com/technetwork/java/javase/tzupdater-readme-136440.html
почему на Java так неудобно сайты делать? Взять сайт или форум, например пикабу. Дык он на ПХП написан. Почему Java ничего не может предложить?
>>1184179Что конкретно неудобно?
>>1184189клиентскую логику на JS писать
>>1184192Что конкретно неудобно? Я прямо сейчас делаю курсовой проект с Реактом на клиенте и Спрингом на сервере. И они прекрасно дружат. Не знаю, может, есть какие-то критические неудобства, которые всплывают в настоящих проектах, но я пока ни с чем подобным не сталкивался.
>>1184062>Сегодня PG, завтра оракл.В 99,99% случаев переезда на другую БД никогда не будет.
>>1184231у нас хотели с файрбёрда перейти на постгрес. Но останавливало огромное количество хранимок, которые надо переписывать и как-то тестировать
>>1184231Был один клиент, настойчиво просил перекатить все на постгрес. Перккотили. В итоге купил столько часов, что хватило бы лет на 5. Вроде бы и похуй, но это ещё с учётом того, что было написано с хибернейтом.
>>1184231В случае отдельного продукта имеет смысл не делать привязку к конкретной СУБД. У каждого пользователя БД менять не будет, но абстракция позволяет загнать такое ПО большему числу компаний.
>>1184179Начнём с того, что на джава-бэкенде можно писать сайты на ПХП (Quercus).И что?А есть ещё JSF и просто море всякой разной другой хуеты.Чем это тебя не устраивает?Есть Grails.Ещё и jRuby есть (и рельсы тоже), и даже jython + Django, для совсем уж тонких ценителей.Улавливаешь мысль?
>>1183806Мартыхан пытается угадывать. Чего только не сделаешь, лишь бы доку читать не пришлось!
>>1183945>Примерно, как и в ORM - аннотации, потом рефлекшн и генерация SQL и прочего. >Можно находить свойства - геттеры-сеттеры и без аннотаций.>Руками или через Commons BeanUtils (PropertyUtils).А можно не писать велосипеды и использовать орм. Дисциплинированное использование любого вменяемого орм фреймворка даст то, что ты описал без каких-то подводных. Я понимаю, что всегда хочется наговнять своё решение, заточенное под конкретную задачу, но всегда ли это хорошая мысль?
>>1184347Я не понял, что генераторы кода не нужны?Все в спячку?
>>1183652И какой кейс использования джейшелла? Есть же груви. А вообще> 20!8> не писать тесты на груви котлине> 20!8> не писать все на котлине
>>1183748Никаким. Это поможет только если изоляция repeatable read, это путь к дедлокам и гробам в лодке с пидором через реку. Правильное решение - дайнемик апдейт и статус заказа вынести в отдельную 1 к 1 сущность (а лучше 1 ко многим, чтобы была история статусов). Водила принял заказ, версия статуса заказа обновилась. Оператор изменил дескрипшн заказа, версия заказа обновилась. А вот если они одновременно изменяют статус заказа - ну тут кому повезет первым, чтобы не было объебанного водителя или оператора.>>1183775Ты мы не в той ситуации, чтобы торговаться.>>1183813Так ведь проблема лост апдейтов осталась - два оператора изменят заказ и данные первой транзакции затрутся второй. Ты просто ее под паркет спрятал, чтобы не пересекаться с водилами.>>1183907Гугли java non blocking io.>>1183921Обнови tzdata или джаву. Скорее всего на сервере восьмая джава еще до свистоплясок с изменением часовых поясов.>>1184062Полная глупость.
Есть желающие купить аккаунт на javarush 9 уровня с премиум подпиской до декабря 2018? По цене конечно же договоримся.[email protected] пишите
>>1184351Велосипеды не нужны, а не генераторы кода.
>>1184441Нихуя, ты телепат.Понятия не имеешь, о чём идёт речь.Даже не дал себе труда прочитать и понять пост (>>1183945), но спешишь поделиться своим сверхценным мнением.Иди на хуй, сынок.
>>1184487Не бомби, папка.
Нужно ли в джавадок описывать приватные поля класса?
Джавагоспода, пишет ли кто-то опенсорс проект на спринге? хотелось бы вкатится, и попробовать свои силы, может быть помочь кому-то
>>1184830Нет. Джавадок это документация на публичное апи. Приватные поля не должны на него влиять.
>>1184995Зачем, если можно то же самое сделать на работе?
>>1184830Я пишу на всё.
>>1185072Какова вероятность найти работу если яПрорешал 6 глав конкретной математики.Осилил Кормена но не решал.Могу в sqlЗнаю паттерны.Могу в многопоточность. Имутабельность. Асинхронность. Дедлоки. и тд.Чтение английского без проблем.Написал ll(1) парсер регулярных выражений.
>>1185090Велика.Где живёшь-то? Если в миллионнике, то не парься. Сегодня же начни составлять резюме. Погугли, как его правильно составить, это очень важно. И дерзай. Нечего засиживаться, этим многие страдают, хотя уже готовы к работе джуном.
>>1185090На Hibernate только ещё глянь
>>1185090Напиши гарантированный дедлок. Реальный вопрос с каждого второго собеса.
>>1185102В мухосранске в центральной части РФ.>>1185112Нужно один кусок кода контролировать двумя или больше мониторами. Бабахнет с высокой долей вероятности. Чтобы исправить нужно определить порядок синхронизации мониоров.
>>1173657 (OP)Уважаемые Java господа, реквестирую мнение про автоматизированное тестирование на java, сильный ли зашквар, сложно ли потом перекатиться в разработку?
>>1185195Да.Не получится.
>>1185200От чего так? Сильно интересная область или затянет как болото насмерть?
Навешивать аннотации для json/xml маппинга на теже объекты как и для orm мэппинга норм или лучше создать DTO?
С помощью javafx можно делать реально классные GUI?
>>1185305Однозначно DTO.Подумай, json-поля могут отличаться. Скажем, в базе дата со временем, а в json дата и время это разные поля. Если будет совмещать entity и маппинг json - получится нечитаемая каша
>>1185310Можно, но не нужно. Джава для десктопа не очень. Лучше использовать GTK и Qt
Рейтаните.https://github.com/Stingray42/tic-tac-toe
>>1185322ну хз, внешне говнокода нет
>>1185310IDEA
>>1185338Она на свинге.
>>1185067Так мне чтобы на работу устроится нужно опыт получить, так я коммитя в опенсорс хочу его заиметь
>>1185360Охуительные истории, конечно. Всем похуй на твой джуниорский опыт в опенсорсе. И так, и так будешь джуном. Ну, можешь тратить время впустую, вместо того, чтобы зарабатывать деньги и получать коммерческий опыт, дело твоё.
>>1185360Джуниором - не надо.Если есть вышка, знаешь CS (хотябы базовые структуры данных и сложность алгоритмов), можешь на бумажке развернуть односвязный список, и понимаешь чем inner join отличается от outer - пили контакты "мы с тобой свяжемся".
>>1185374Ах, да! ДС онли и гражданство РФ (требование СБ).
>>11851951. Сильно лучше чем ручное.2. По моему опыту: много народу пыталось, но в итоге никому не удалось. С другой стороны, а зачем? Из QA можно расти в релиз менеджеры, и продукт оунеры. Не говоря уж про началиника отдела QA.
>>1185379Зачем тестировать на Java? Это ведь неудобно наверно. На питоне же проще будет, не? А если нужна jvm, то на groovy.
Посоветуйте каких-нибудь видеокурсов по Java, чтобы по основным вещам типа как устроены коллекции, как работает компилятор и т.д., но не совсем для ньюфагов.
>>1185031Не слушай этого. Джавадок добавляется и на приватные поля/методы (смотри jdk). При генерации документации можно указывать, нужно ли включать приватную инфу, поэтому в документации её нет, но в коде есть.
>>1185173>НужноХуюжно. Код где?
Стыдно признать, но вообще не раздупляю многопоточность, не считая каких-то базовых вещей. Опыт почти 2 года. Практически всё это время хуярил на фреймворках вроде play и spring mvc, которые сами об этом заботятся. Я совсем потерян для общества? Как качественно заполнить пробелы? В какой момент я смогу сказать, что разбираюсь в многопоточности?
>>1185450Официальный туториал, Java Concurrency in Practice, придумай задачки с использованием нескольких потоков.А гуру нахуй не надо становиться, имхо. Если не используешь повседневно многопоточку, то всё равно забудется. Главное в общем представлять, что происходит и всё.
>>1185452Я писал несложные вещи на плюсах с использованием MPI, поэтому принцип понимаю, конечно, но как это в жабе работает - хуй знает вообще. Буду читать-писать, спасибо. Про Concurrency in Practice слышал хорошие отзывы.
>>1185453Вот здесь ещё всё изучиhttp://tutorials.jenkov.com/java-concurrency/index.html
>>1185373Блять, я учусь сейчас. Где-то через год-полтора буду искать работу. А это время хочу уделить на развитие.
>>1185374Эх.. я не из России. Может быть у вас есть какие-то опции удалённо поботрачить.
>>1185452Тащемта не нужно понимать именно на низком уровне для 95% задач многопоточности. Достаточно понимать что такое потоки, пулы потоков, почему форкджоинпул не годится для io, понимать что такое синхронизация и никогда ее не использовать, прочитать про мониторы, иметь представление как выполняется асинхронный код, в чем разница между блокирующими и неблокирующими серверами, что такое реактивность, что такое treadlocal переменные и причем тут контекст, и уметь использовать CompletableFuture и фреймворки для многопоточности и до кучи корутины в котлине. Этого достаточно для решения 95% задач. Если же возникает необходимость в низкоуровневой многопоточности, синхронизации, то в большинстве случае это значит, что активно проебывается дизайн и архитектура приложения и пора юзать евент дривен и евенчуал консистенси подходы.>>1185450Нет, это вполне нормально. Я когда пилил кровавый тырпрайз тоже почти не юзал многопоточность - это за меня делал контейнер сервлетов. Только один раз возникла необходимость в синхронизаци и мониторах, и то я бы сейчас уже сделал по другому.
>>1185490> в чем разница между блокирующими и неблокирующими серверамии io*
>>1185310 => >>1183363Классные гуи закончились, лол.Остались практичные - на свинге.
>>1185446void YOBA1(){ if(monitor1.lock()){ monitor1.enter(); if(monitor2.lock()){ monitor2.enter(); do(); } }}void YOBA2(){ if(monitor2.lock()){ monitor2.enter(); if(monitor1.lock()){ monitor1.enter(); do(); } }}
Есть менюшка, на каждый пункт мне надо кликнуть. Но почему то на 4 итерации вываливается IndexOutOfBoundsException, типа list.size() == 0. В чем может быть причина?
>>11853881. Использовать те же библиотеки. Например есть у тебя хитровыебанный формат, так ты берешь ту же библиотеку и парсишь. Иначе придется еще поискать ее для питона.2. Проще получить помощь от команды разработки. Мы например помогали писать QA фреймоворк для паралельного запуска тестов.3. Cами сценарии можно и на кукумбере писать.
>>1185312>Однозначно>могут отличатьсяТы, наверное, на каждый класс однозначно заводишь интерфейс, ведь может когда-нибудь понадобиться еще одна реализация.
>>1185556> Ты, наверное, на каждый класс однозначно заводишь интерфейсВсегда так делаю с почти каждым сервисом и компонентом с логикой.
>>1185561Не приходило в голову, что проще потом отрефакторить те 3% случаев, где оно действительно понадобится, чем постоянно захламлять код ненужными сущностями?
На каком уровне джуну нужно знать sql? Покидайте книжки или курсы, где этот уровень можно получить или хотя бы понять что надо. Пока знаю только всякие простые запросы, как я понял этого мало
>>1185570Нет. Интерфейсы помогают разграничивать функциональность и позволяют сосредотачиваться только на контрактах, их выполнении и тестировании выполнения.Сильная связность не нужна.
>>1185556Ты в реальных проектах вообще работал? Ты не выживешь без DTO в нехеллоуворлдном проекте.
>>1185572джойны, агрегирование. изучи, что такое индексы. больше особо ничё не надо
>>1185507Забыл free дописать.
>>1185507Во-первых, лок есть, а анлока нет.Во-вторых, где здесь ГАРАНТИРОВАННЫЙ дэдлок? Сначала отработал первый тред, потом - второй.Мы вам перезвоним.
>>1185588за базаром следи петушара
>>1185589я Вам вот сейчас честно скажу. что с компанией Epam у Вас теперь в жизни никогда ничего не получится.
>>1185511На кой хер ты каждый раз берешь список заново?
>>1185580>Сильная связность не нужна.До прямого вызова методов одного сервиса из другого ты, я надеюсь, тоже не опускаешься, ебашишь все на eventах и messageах
>>1185594Все через кафку.
>>1185595Овсяную?
>>1185584Ну ясен хер, что где-то dto понадобятся. А где-то у меня есть простая entity с тремя полями, и я хочу эти же три поля сейчас отдать наружу в том же виде. Ради какого профита тут заниматься копипастой?
Как писать автотесты на Java?Что для этого используется и можете ли посоветовать хорошую статью или видеоурок, где это объясняется?
Прошу дать оценочное мнение идеи для пет проекта.По халтуре приходится вручную распознавать одних и тех же людей на разных фотках. Хотелось бы автоматизировать. Чтобы создавалась папка с общими фотками, у нее подпапка с single фотками. И так, например, для 20 человек.С нуля мне такое, конечно, не сделать. Нашлась опенсорсная программа faint на java по распознаванию лиц 10 летней давности. Разработчик пишет, что ее можно подключить как библиотеку к своему проекту.https://faint.sourceforge.io/https://github.com/jeffrafter/faintСложность приемлемая для начального уровня или пока не трогать? Какие технологии могут понадобиться? Можно обойтись только java core?Или есть какой-то другой общеизвестный подход к решению такой задачи?
Что это за класс Logger и почему я не могу использовать LoggerFactoryхотя я беру код отсюдаhttps://github.com/iluwatar/java-design-patterns/tree/master/facade
>>1185592потому что после каждого клика кнопки на странице перерендериваются и если один раз найти нужные элементы, записать в список и просто кликать по ним в цикле, то вываливается - element is not attached to page document
>>1185642Нужна имплементация логгера. Log4j или slf4j
>>1185605У тебя есть одна entity. И есть rest, soap, ещё какие-нибудь кастомные представления данных. Ты на одну эту entity будешь пихать минимум 3 набора аннотаций, а то и больше, для каждого поля? Ты понимаешь, какая это каша? Завтра добавится вычисляемое поле в soap - всё равно переделывать. Как потом отличить при импорте, например, какие поля нужно заполнять? Если на каждое представление своё DTO, то всё кристально прозрачно становится, и занимает секунды для того, чтобы разобраться в структуре данных.По поводу 3 полей - ни разу не встречались такие entity. В любом случае, сегодня это 3 поля, а завтра 5, а послезавтра 7. Лучше делать всё сразу нормально и единообразно, чтобы был порядок в коде и в голове.
>>1185511причина в кривой верстке, решил проблему пропуском кривых страниц
>>1185657Ну вот я описал конкретную простую ситуацию, а ты в ответ "а вдруг завтра появится soap с вычисляемыми полями". А вдруг не появится? Вдруг я простой круд формошлеплю? Вот когда появится, тогда введу для него dto. А если ничего подобного на горизонте не видно, может все-таки не обязательно удваивать объем сущностей просто на всякий случай?
>>1185677>А вдруг не появится?Я потому и спросил про опыт работы. Не бывает такого на реальных проектах. Всегда что-то да появляется, и нужно заранее об этом думать.
>>1185679DRYНЕ ПЛОДИ СУЩНОСТИ БЕЗ НЕОБХОДИМОСТИ КО-КО-КО
>>1185683>When the DRY principle is applied successfully, a modification of any single element of a system does not require a change in other logically unrelated elements. Additionally, elements that are logically related all change predictably and uniformly, and are thus kept in sync.HTTP-, SOAP-, Database-представления скорее отнесу к logically unrelated elementsВыше писал, почему представления не подходят под logically related all change predictably and uniformlyНу иS R PRPВсё, я устал немного спорить.
>>1185685да все эти бест-практис противоречат друг другу и меняются каждый год, не принимай близко к сердцу
>>1185679>Не бывает такого на реальных проектах. Всегда что-то да появляетсяТ.е. у тебя ни разу не было такого, что, к примеру, rest-бэкэнд какой-нибудь внутренней админки оставался просто rest-бэкэндом админки?
>>1185689сходу могу вспомнить поле dateFormat, дата в форматированном виде.На клиенте почему-то не любят unix datetime
>>1185697Да я не об этом, а о разных представлениях типа rest и soap. Ладно, все, хер с ним.
>>1185697Не совсем понял в чем здесь проблема. Ставишь аннотацию для Джексона чтоб превращал в нужный формат и всё.
>>1185733Да даже если б и пришлось отдельный геттер для этого завести, не особенно это ужасно как по мне. Но тот анон настаивает, что низзя ничего такого делать, потому что вдруг через 5 лет понадобится добавить соап, и тогда для этого соапа будут отдельные dto, а для реста нет, о ужас. Гораздо лучше прямо сейчас начинать копипастить каждое новое поле в +1 место.
>>1185621Куда ты лезешь.
>>1185806Что значит в +1? Нужно же ещё маппер написать entity -> dto и dto -> entity по необходимости. И тестами их покрыть.
>>1185807А тебе бы не помешал урок пунктуации русского языка.
>>1185858Это было утверждение, а не вопрос. >>1185844> 20!8> не использовать орику, мапстракт, прямые автомапперы из реляционки в дто
>>1185621Берешь и гуглишь selenium, инфы море. Если что у тестеров свой тред: https://2ch.hk/wrk/res/1207555.htmlВидос что бы быстро вьехать:https://www.youtube.com/watch?v=N8Rr7rVf1RA&index=186&list=PLBoslWMlaSssPFxMtGr6iV-RgnQbXAYH2&t=413s
>>1185868Использовал мапперы в проде? Полная хуета, на то, чтобы разобраться чё куда мапится куча времени уходит. Пришёл к выводу, что ничего лучше вручную написанного мапперы из стены геттеров и сеттеров нет
>>1186021> Использовал мапперы в проде?И в крупных тырпрайзах, и в хипстосервисах. > Полная хуета, на то, чтобы разобраться чё куда мапится куча времени уходит.Ты просто тупой.> ничего лучше вручную написанного мапперы из стены геттеров и сеттеров нетЕбать ты дегенератище. Мапперы еще ладно, не все используют хорошее пока, но в 20!8 году не использовать генерала Де`Ломбока это или критическое повреждение головного мозга, или максимальная закостенелость, что в принципе то же самое. Небось еще на седьмой джаве пишешь. В любом случае, ты не стоишь и минуты моего времени.Пошел нахуй.
>>1186029чёта не понял при чём тут ломбок, он же генерит сеттеры с геттерами
>>1186029Как там ломбок на актуальной версии жабы? Когда я последний раз проверял, был никак.
Объясните ньюфагу, как сейчас в джаве работать с БД? Я пытаюсь освоить хибернейт + спринг, это правильный путь? Какие вообще ключевые слова технологии нужно иметь в виду? И еще вопрос - можно ли сразу учиться работать с анотациями, минуя xml? Мне например больше нравится грейдл и конфигурация через аннотации/пропертис. Или это от проекта зависит?
>>1186087jdbc>можно ли сразу учиться работать с анотациями, минуя xmlМожно, но не нужно. После xml с аннотациями разобраться легко, но неизвестно, насколько древние технологии будут использоваться там, куда ты устришься на работу.
>>1186088>jdbcЭто троллинг такой?
>>1186089>Объясните ньюфагу, как сейчас в джаве работать с БД?Да, ты троллишь сейчас.
>>1186091Иди нахуй, клоун блять. Я же сказал про хибернейт и спросил про то какие еще есть ключевые технологии, о которых ньюфаг может и не знать, учитывая зоопарк технологий/фреймворков джавы. Но нет, нужно спиздануть про jdbc.
сап, программач! почти запилил свой пет-проджект, который не стыдно показать людям(лол), ноо совершенно не секу в логгировании, мб есть у кого годный туториал - какой логгер использовать, что логгировать и т.д.
>>1186093Ты чё развыёбывался, дурачок? Всё он правильно тебе сказал. В идеале нужно потыкать и jdbc, и hibernate, несмотря на то, что в большинстве проектов используется orm.
>>1186163Где я выебываюсь, даун? Он мне предлагает потыкаться в jdbc, когда я спрашиваю про ключевые технологии и практики? В таком случае тоже иди нахуй. Одно дело сказать "начни с jdbc и потом то и то", другое просто ляпнуть не к месте про jdbc, когда СПРАШИВАЛИ О ДРУГОМ ВООБЩЕ. Вы вообще отбитые какие то блять, спрашиваешь их про технологии, так они выебываются тем что в jdbc потыкаться надо.
>>1186166Бля, пиздец ты тупой, съеби нахуй с треда.
>>1186167Сам съеби, говно. Может посоветуешь мне еще про модель OSI почитать? Ну а хуле, так же релейтед к моему вопросу как и JDBC
>>1186166Ты смешной))))
>>1186144>не стыдно показать людям>не знает про log4ji doubt it
>>1186144Да там особо не по чему и туториал делать. Посмотри log4j, буквально час-два потрать и всё. В пет проекте нахуй не надо какое-то логирование прикручивать
Зачем в классах делают пустые конструкторы? Тем более в абстрактном Toolkithttps://docs.oracle.com/javase/7/docs/api/java/awt/Toolkit.html
>>1186178Чтобы было.
Java написан на C++?
>>1186249JVM на Си, Си++, все классы на java
>>1186270>JVM на Си, Си++Какой позор...
>>1186271В чем тут позор?
>>1186278Почему нельзя все написать на Java?
>>1186271Есть https://github.com/oracle/graal JIT-конпелятор написанный на жаве. Но он всё ещё экспериментальных, хотя начиная с Java 10 его уже можно использовать, правда только на 64-битных Linux и macOS.
>>1186279Си больше подходит для всякой низкоуровневой хрени, плюс быстрее. У питона на нем целые библиотеки
>>1184391Спросил у прод-куна, тот ответил что 40к потолокепам-макака
>>1185591C o n d u c t
>>1186080Актуальная это 8 или 9?
>>1186178Потому что если в классе определен хоть один конструктор, конструктор по умолчанию не генерируется
>>118640110 же.
>>1186418Почему мы хотим, чтобы он не генерился?
>>1186166>>1186170Пиздец ты дегенерат.Одно хорошо - ты никогда не найдешь работу программистом.
>>1186434Сырое говно
>>1186437Потому что спецификация
>>1186453Зато var.
>>1186487Ещё одна возможность превратить код в говно, потому что мало кто будет пользоваться им дисциплинированно.
>>1186280Кстати, на днях грааль вышел 1.0 RC1. Так что он уже вполне стабилен. А твитор, вообще его больше года юзает.
В чём смысл GraalVM? Типа любые языки можно в ней запускать в том числе и LLVM IR, соответственно приложухи могут общаться друг с другом несмотря на то, что они на разных языках написаны. Так? В этом главный профит?Т.е. если приложуха чисто на джава как раньше, то юзаю JVM по-старому, а если хочу написать приложуху на джава + питон + js. то спокойно юзаю GraalVM? Зачем это может понадобиться не очень понимаю всё равно
>>1186492На ассемблере пиши, поехавший. Я регулярно пишу на котлине - и с валами и варами код понятный. А с другим добром котлина так и еще лучше и читаемее.>>1186548Нет. Граальвм состоит еще из другой дрисни, но по факту важен только конпелятор JVM говнеца. И этот самый конпелятор новый написали, потому стоимость поддержки и запила новых фич на C1 и С2 превзошла всякие пределы - для того, чтобы там можно было запиливать фичи, абстрактному разработчику нужно год-два медитировать чисто над исходниками, настолько все сложно и такполучилось.Поэтому решили хватит это терпеть и запилили грааль, который написан на нормальной джаве и который легко поддерживать и пилить новые фичи. В процессе запила сразу оптимизировали многие места и числодробить стало намного веселее.А компилировать JS, го, пифон под граальвм не нужно.
>>1186556А меня больше интересует AOT-конпеляция. Теперь можно будет распространять приложухи без рантайм-дрисни? Учитывая, что всё равно у почти каждого жава-приложения свой собственный рантайм на котором всё проверено, то эта фича была бы довольно удобна.
Слишком много всего начало происходить. А я даже модули ещё не курил. Помедленнее!
>>1186557Полный AOT без JRE, это только Excelsior JET.Все остальное только с JRE. В JRE будет встроенный AOT для ускорения старта, но не более.
>>1186559> А я даже модули ещё не курил.Это которые жигсо? Их много кто ещё не курил. Если твоя прога использует какую-нибудь стороннюю библиотеку могу дать 100% гарантию, что полноценно всё это работать не будет. Вот баттхёрт одного из перекатывальщиков: https://habr.com/post/354114/
>>1186562А жаль. "Статическая линковка" стандартной библиотеки была бы суперской фичей вместе с AOT.
>>1186563Надеюсь, что в LTS починят. А то кучу времени на это убили, обидно. И я не очень понимаю, как это всё сочетается с модулями maven/gradle. Ладно, ждём LTS
>>1186576> Надеюсь, что в LTS починят.Там не жаву чинить надо, а авторам библиотек перекатываться в модульность. Встаёт очевидный вопрос: а зачем, если и так (почти) всё работает. Впрочем жигсо умудрился сломать и простые jar'ы из-за чего куча библиотек перестала работать с девятой жавой и выше, и это проблема посерьёзней.
>>1186557Поясни в двух словах в доходчивом двощерском стиле нахуй всралась AOT-конпеляция. У меня так руки никогда не доходили поинтересоваться.>>1186559>>1186563Потому что жигсо нахуй не всрался. Его мучительно долго рожали, отодвигали из-за него релиз девятой джавы, наконец высрали ублюдка и так до сих пор в массе никто и не понял нахуй он всрался вообще. Возможность опубличивать только публичное апи толком не нужно - для чисто интернал хуйни всегда есть package level, а если нужно в нескольких пакетах, то в джавадоке написать for internal usage и на все проблемы, связанные с использованием непубличного апи отвечать "ди нахуй, пидрбля".Возможность хотсвапа модулей тоже толком не нужна - в проде она нахуй не нужна, бо никто не держит единственные серверы и давно уже изборетен АИБ деплоймент, а для девелопа всегда есть джававосставший. Да и по чесноку в тот момент когда монолит уже трещит по швам его не в модульный монолит надо перепиливать, а распиливать на микросервисы.А для всех остальных задач модульности есть гредл/мавен сабмодули.Для тех же случаев, когда модульность на уровне джарников необходима, там сложной десктопной херни (хотя тут можно поспорить), никто не отменял osgi. Смотрел краем глаза на Джейпоинте доклады про модули, включая той жирноватой немецкой тни, так и не увидел юзкейов нормальных.По факту получилось, что рожали-рожали, высрали наконец, коммьюнити посмотрело на получившегося выродка и спрашивает "и че?". И вот это "и че" в воздухе длится до сих пор. Это не говоря о том, что рождение жигсо сломало вообще.
>>1186585> Поясни в двух словах в доходчивом двощерском стиле нахуй всралась AOT-конпеляция. У меня так руки никогда не доходили поинтересоваться.Ну если без "статической линковки" (я не знаю как объяснить это в java-терминах), то действительно, особо и нинужно. Просто удобно было бы отказаться от JRE вообще и распространять самодостаточный бинарник.Я AOT в .NET-приложениях использовал только в десктопе и только для ускорения запуска. И стоит заметить, ускорение действительно было. Запуск крупного приложения, написанное с использованием WPF + контролы от telerik ускорился с полутора минут до десятка секунд.А вот на сервере (где жава обычно и живёт) я с этим никогда не заморачивался, наверное там оно и нинужно.
помогите нубу - есть спринг бут приложение, есть бин taskExecutor, он запускает отдельный поток@PostConstructprivate void initGenerator() { Generator.initialize(taskExecutor); }Вроде все работает как нужно, но как только пытаюсь завершить приложение - вылетает InterruptedException. У спрингбутовского TaskExecutora нет даже метода shutdown. Нагуглил, что нужно в аннотации добавить destroyMethod = "shutdown" (этот метод часть магии или нужно самому писать?). В общем не могу сообразить, выручайте, анончики
>>1186589Хуйня какая-то. Джава для десктопа вообще не оче, а джарник ты запускаешь в докере или экзешник просто-таки глубоко насрать, лишь бы работало. Хотя с экзешником в докере это да, кхм :3> Просто удобно было бы отказаться от JRE вообще и распространять самодостаточный бинарник.Ну тащемта в пределах graalvm была какая-то дрисня, которая вроде позволяла без костылей типа запакованного в экзешник джарника и jre собирать в экзешники приложухи, ты о об этом говоришь. Помнил, но забыл.Надо будет все-таки не полениться и прочитать про AOT-дрисню.
>>1186590Не лезь в многопоточность по нубству, она тебя сожрет.> вылетает InterruptedExceptionОткрой джавадок этого класса и внимательно прочитай первое предложение, разбери его по частям и сделай соотвествующие выводы для себя.
>>1186596С докером действительно проблем не будет. Просто было бы удобней чтобы сразу бинарник был со всеми библиотеками и не надо было ничего больше настраивать. Опять таки все равно у каждого приложения свой собственный рантайм.
>>1186601С дивана вижу только бесписечный запуск десктопных приложений под винду. Писать десктоп на джаве не оч, как уже писал - то ли дело на шарпе или заговниться электроном на js. И вообще, талостые клиенты нинужны.
>>1186602Я десктоп на жаве не пишу. Пытался вкатиться в JavaFX, но вышла хуйня. Qt куда лучше, даже несмотря на привкус C++. Жалко, что связка Qt+Java сдохла и вместо этого продвигают Qt+Python как альтернативу плюсам.
перекатhttps://2ch.hk/pr/res/1186670.htmlhttps://2ch.hk/pr/res/1186670.htmlhttps://2ch.hk/pr/res/1186670.htmlhttps://2ch.hk/pr/res/1186670.htmlhttps://2ch.hk/pr/res/1186670.html
>>1186567Скачай триал Excelsior JET и посмотри на размер получающихся исполняемых файлов.
>>1187127> Excelsior JETНу, поставил свой небольшой pet-project на котлине + spring конпелироваться. Через пару часов посмотрю что получится.
>>1187139Итак, всё сконпелировалося. Вышло 181Мб (при этом само приложение занимает 74Мб, всё остальное опять таки рантайм). FatJar занимает около 40Мб.
>>1186562Хотя прочитал https://www.graalvm.org/docs/reference-manual/aot-compilation/Там написано:> GraalVM allows you to compile your programs ahead-of-time into a native executable. The resulting program does not run on the Java HotSpot VM, but uses necessary components like memory management, thread scheduling from a different implementation of a virtual machine, called Substrate VM. Substrate VM is written in Java and compiled into the native executable. The resulting program has faster startup time and lower runtime memory overhead compared to a Java VM.Так что да, это полноценная AOT-конпеляция. Вместо HotSpot используется Substrate VM, который правда не поддерживает некоторые фичи жавы и позволяет делать статически слинкованные бинарники.
>>1187174Т.е. по сравнению с простой джаркой у тебя размер вырос более чем в 4 раза. понятно, что сейчас на такие мелочи обычно забиваютНо надо понимать другое, ты лишаешься оптимизации по профилю исполнения. Для десктоп приложений это коночно не критично, но для высоконагруженного сервера - критично.
>>1187317> ты лишаешься оптимизации по профилю исполнения.У Excelsior JET есть PGO, правда профиль придётся делать заранее самому.
>>1187325Появился? Круто!А как его собирать?
>>1187363А мне откуда знать? А его только сегодня поставил. Да и лучше уж грааль подожду. Он хоть бесплатный.
>>1187363А вообще, у них же на сайте написано: https://www.excelsiorjet.com/profile-guided-optimization
Где можно найти development tasks? Типо сделать калькулятор, спарсить джсон, утилиту для линукса. Придумывать самому тяжко. То есть не просто решить задачку, а написать программу для какой-то цели.