Этого треда уже нет.
Это копия, сохраненная 4 июля 2018 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Java thread 1173657 В конец треда | Веб
прошлый https://2ch.hk/pr/res/1165567.html (М)

Q: Поздно ли вкатываться в айти в 20/30/40/100 лет?

А: Нет, не поздно.

Q: Cобираюсь учить джаву по 2/5/20 часов в день. За сколько дней я выучу достаточно, чтобы зарабатывать фрилансом?

A: На джаве фриланса нет. Хочешь фрилансить — дуй в ПХП/раби/1С тред.

Q: Хули все книги на английском?

A: Без английского ты не нужен и можешь смело идти нахуй. Ну или в 1С-тред.

Q: Что скажете за джавараш?

Если вкатываешься с нуля, то можешь написать пару "хеллоу ворлдов" до 10 лвла. Дальше курс рассчитан на ленивых и не умеющих читать книжки людей. Количество говнокода зашкаливает, годных задачек пару штук на весь курс. В любом случае решать тебе.

https://github.com/qqqlll/Java-Thread/wiki
2 1173679
а чё вы этого пидараса в хедер не поставите?
3 1173705
>>73679
Потому что он только на словах АХУЕННЫЙ кодер.
Помню как-то показали код сатаниста, так он проебался в двух строках, не поставив точки с запятыми.
4 1173706
аноны
я написал код который поднимает сервер с потоками. Как я могу обезопасить свой комп, когда на пару часиков буду включать серв?
5 1173708
>>73706
а как ты сделал так что из инета можно к нему подрубаться?
6 1173711
>>73708
включил в настройках роутера определенный порт для онли моего компа.
7 1173715
>>73711
охуеть. мне тоже так надо. А где про это можно по читать?
image.png57 Кб, 1236x535
8 1173716
>>73715
Если у тебя тп-линк, то напике показан пример. Если другой роутер, погугли "как открыть порт в настройках роутера"
9 1173720
>>73716
дак и по какому IP к тебе можно зайти?
10 1173727
Вроде разобрался немного с языком, решаю задачи на кодварс 4лвла, дальше особо не получается, хочу как-то дальше развиваться, подскажите че смотреть, куда двигаться
11 1173732
>>73720
а зачем ко мне заходить? Я просто для интереса тут спрашиваю про настройку безопасности сервера
12 1173761
>>73706
Ну, если у тебя только один порт проброшен наружу, то что тут ещё можно обезопасить?
13 1173764
>>73761
я просто заядлый параноик. В дальнейшем хочу сделать для себя небольшой постоянный сервер, для данных и прочего. Где я могу почитать про его безопасность и прочее? (буду писать на джаве)
14 1173778
>>73764
В гугле, видимо.

Нет особой разницы - на джаве, не на джаве.
Лишние порты должны быть закрыты и т.п.
Это если выставляешь весь сервер наружу.

Если же изнутри, и проброшен 1 порт (http) - то и хорошо.
Используй SSL.
Сделай порт с нестандартным номером >1024.
Остальное зависит от сервера и его уязвимостей, если они есть.
А также от уязвимостей в твоём коде.

Если у тебя index.jsp с параметром zalupa=true форматирует диск, например, то это не очень хорошо.
И логи пиши. А потом - читай.
В том числе автоматически, с поиском подозрительных строк.

Система аутентификации должна банить клиента после N неудачных попыток.
И т.д. и т.п.

Если хочешь как у взрослых - гугли как сделать сервер в DMZ.
Хотя, не представляю, зачем.
15 1173780
>>73778
спасибо!
16 1173782
Чуваки, посоветуйте годный ресурс для изучения небольших экзепляров чужого кода в целях повышения своих навыков.
17 1173787
>>73727
А у меня другая проблема: у меня не получается писать маленькие тесты. У меня одна функция тестирования может занимать несколько сотен строк кода и я понятия не имею как разбить это на несколько тестов, поскольку вызов одной функции в тестируемом объекте может изменить поведение другой. Правда из хорошего получается почти 100% покрытие кода тестами, однако сами тесты выглядят отвратительно.

И ещё не понятно: нужно ли писать дополнительные проверки на возвращаемое значение из библиотеки, если эта проверка (в случае правильности выполнения кода в библиотеке) никогда не будет выполняться.
18 1173882
>>73782
Гитхаб.
>>73787
Открой для себя инкапсуляцию.
19 1173884
>>73882

> Открой для себя инкапсуляцию.


Это ты спизданул просто так, потому что не знал что ответить, но очень хотелось?
20 1173886
>>73884
Тупой пидорок, я тебе ответил, но ты слишком тупой, чтобы его понять. Хорошо, смилостивюсь над идиотом и поясню на пальцах для таких тупорылых идиотов как ты.

Тесты, неважно, юнит это или интеграционные (немного иначе с bdd, но суть та же) должны иметь три блока - подготовить запрос. Осуществить тестируемое действие. Проверить результат.
Если тестируется бизнес-логика, то действий и проверок результатов может быть много. При этом действие это действие над блекбоксом и проверка результата, а не хуйня с внутренней реализацией тестируемого компонента.
Впитывай, долбоеб.
21 1173889
>>73886
Ого какой агрессивный. Это ты, шизопомидорка с собеседованиями?

> . При этом действие это действие над блекбоксом и проверка результата, а не хуйня с внутренней реализацией тестируемого компонента.


Так ты ещё и читать не умеешь. Для проверки корректности работы блекбокса НУЖНО учитывать внутреннюю реализацию. Не будешь же ты тестировать функции объекта ниже исключительно по-отдельности?

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;
}
}
22 1173896
>>73889

> Для проверки корректности работы блекбокса НУЖНО учитывать внутреннюю реализацию.


Не нужно. Твердо и четко.

Представь себе тестируемый класс, компонент или систему как китайскую комнату. На вход подаются таблички на китайском, на выходе их перевод на английском. Контракт соблюдается, тесты крутятся, бабло мутится, и вообще поебать сидит ли внутри комнаты китаец или что вообще там происходит.

> ниже


Ниже у тебя отвратительный пример мутабельного класса, чья внешняя функциональность зависит от совершенно не очевидного для окружающих внутреннего стейта. Не говоря уже о том, что не тредсейф нихуя. Это как если бы иногда вместо таблички с переводом, китайская комната отдавала табличку с джастин бибером потому что потому.
На вход такой комнаты нужно подать ведро мочи, поджечь комнату и повесить ее архитектора.
23 1174118
В чем смысл приватных полей класса, когда есть геттеры и сеттеры?
24 1174121
>>74118
В том, что в геттерах и сеттерха ты можешь провести валидацию\обработку значений, прежде чем положить его в поле или прежде чем отдать его из поля.
25 1174123
>>74121
А с чем, по-твоему, работают эти геттеры и сеттеры?
Или ты что-то другое имел в виду?
26 1174124
>>74123
Это было вот сюда: >>74118
27 1174128
>>74121
Это можно сделать независимо от модификатора доступа. Но если поле приватное, то, по идее, оно не должно как-то выходить за пределы класса, и изменяться, но гет/сет обходят это. Можешь пример ситуации привести, когда это необходимо?
28 1174129
>>74123
Другое. Поле private. Но при использовании экземпляра класса я, по сути, имею доступ к этому полю по гет/сет методам.
29 1174148
Анончики, есть у кого-нибудь опенсорс проекты, чтобы для опыта поботрачить
30 1174149
>>74128

>Но если поле приватное, то, по идее, оно не должно как-то выходить за пределы класса, и изменяться, но гет/сет обходят это.


>Но при использовании экземпляра класса я, по сути, имею доступ к этому полю по гет/сет методам.



Смысл модификатора private не в этом.
Смысл его в том, что другие классы не могут иметь к нему _непосредственного_ (не контролируемого твоим классом) доступа.
А доступ через методы - не обязательно get/set - это нормально.
Потому, что это _контролируемый_ доступ, _специально_ сделанный, с некоей целью.

А то, что ты пытаешься сказать - просто не имеет смысла.
По такой логике приватные поля просто были бы бесполезны, т.к. не могли бы изменяться вообще.
31 1174177
>>74129
>>74149
Более того - снаружи никто и не знает, что у тебя там есть какое-то приватное поле, и что геттер-сеттер меняют именно его. Там может быть что угодно - вычисления, обращение к бд, и т.п.
Так что приватное - оно и есть приватное.

Т.е. паблик методы - это внешний интерфейс класса.
А внутренние приватные поля - это детали реализации, которые могут меняться, но это никак не скажется на работе клиентов (внешних классов).
смущение.gif300 Кб, 350x464
32 1174203
Какую БД использовать в программе?
33 1174204
>>73705
Зато он Scala знает.
34 1174207
>>74203

>Какую БД использовать в программе?


Охуенный вопрос.
Самую лучшую, конечно.
35 1174219
>>74203
Ну и чего ты притих?
Требования какие?
Что хранить?
36 1174270
>>74121
это плохая практика - размазывать бизнес-логику по куче классов.
А так геттеры и сеттеры - если внезапно понадобиться многопоточная работа с этим классом - просто повесить syncronized на геттер и сеттер
37 1174271
>>74148
https://github.com/cray33/jnom

получение базы данных адресов из osm данных
38 1174302
>>74204
пруфы?
39 1174312
>>73720
127.0.0.1
40 1174347
У меня есть две координаты, X и Y. И есть куча других координат, которые я получаю из интернета.
Как более удобней будет полученный лист отсортировать по наиболее подходящим к первоначальным координатам?
41 1174362
>>74347
сравниваешь дельту между x и элементом листа
42 1174379
>>74203
Подходящую.
43 1174387
>>74118
Смысл нет - это просто культ Карго.
44 1174388
>>74362
Не совсем понял
45 1174502
>>73657 (OP)
Пасаны, расскажите, как устраивались джуниками. Какие вопросы, какая зп, какие первые задания были?
46 1174513
>>74502
Никакие, никакая, никакие. Иди дальше, добрый человек.
47 1174520
>>74513
Ну зачем ты здесь напердел?
48 1174533
>>74271
ты пишешь ?
49 1174548
>>74388
Отсортируй по расстоянию, наркоман. В чем проблема?
50 1174553
>>74520
Тебе в лицо.
51 1174575
>>74347
Две координаты - это точка.
Сделай функцию для вычисление расстояния между двумя точками на плоскости.
Сделай компаратор (на базе исходной точки), который в своём compare(p1, p2) сравнивал бы расстояние от обеих точек до исходной, и выдавал бы соотв. результат.
Отсортируй список с этим компаратором.

Можешь использовать для всего этого стрим, если умеешь.
Someone someone 52 1174731
>>74129
private поле используется для переменных, которые ты не хочешь показывать за пределами класса. Не обязательно подразумевается, что кто-то может запрашивать его через геттер/сеттер, или через оба.
53 1174777
54 1174798
Книжка Хабибулина хороша?
55 1174896
>>74502
Бамп вопросу
56 1174946
Ответьте одним словом про Бугаенко. Он пиздобол?
Снимок.PNG35 Кб, 660x278
57 1174949
Зачем обрамлять в скобки со static куски кода со статичскими переменными? Что это дает ?? Там же и так статические переменные
58 1174950
>>74946
Егорка-долбоеб.
59 1174961
>>74949
Почему джавапитухи любят так делать скобки, что они открывающая и закрывающая не находятся друг под другом?
60 1174965
>>74961
Потому что это прерогатива сиопущенцов
61 1175095
>>74949
Это static initializers. Можешь погуглить.
Это не "переменные", а _исполняемый_ код.
Там может быть что угодно.
Например, сложная инициализация переменных, создание списков или map и т.д.

Этот код выполняется при первом обращении к классу.
Можешь думать, что это такой конструктор, но для класса как модуля (статические члены), а не для экземпляра объекта этого класса.
62 1175100
>>74965
Да даже на си так нормальные люди не пишут.
Это, скорее, плюсоёбы так онанируют.
63 1175163
>>75095
конструкторы вызываются в последнюю очередь, поэтому такая аналогия будет губительной для понимимания
64 1175177
>>75163
В смысле?

Это статический инициализатор (или несколько).
Конструктор - тоже инициализатор.
Но, инициализируют они разные вещи (и по-разному).

Java класс - это два в одном - модуль (набор переменных и функций) и класс (шаблон объекта).

Модуль - это статическая часть. Просто набор переменных и функций, имеющих что-то общее.
Класс - то, что определяет поведение создаваемых (new) объектов-экземпляров.

Общее у них то, что в статической части класса есть доступ ко всем не-статическим членам класса, в том числе приватным. Т.е. если в статический метод класса передать экземпляр объекта этого класса, то там можно с ним сделать то, что "снаружи" сделать нельзя.

Больше ничего общего у этих двух частей нет.
65 1175181
>>75177
И да, из "классовой" части, естественно, есть доступ к статическим членам. И, вполне логично, что они должны быть проинициализированы до того, как будет создан первый экземпляр класса.

И, если первым обращением к классу является вызов конструктора (new), то статические инициализаторы будут выполнены перед тем, как будет выполнен конструктор.
И это логично и интуитивно понятно.
66 1175271
>>74961
Чтобы не тратить строчку ни на что и не делать зрительный разрыв между сигнатурой функции и ее телом, сисярподебил.
67 1175351
repo.spring.io забанили, пацаны. Сидим в опенспейсе с пацанами рофлим.
68 1175397
Зачем нужны лямбда выражения в Java?
Ведь строго говоря это просто синтаксический сахар,
69 1175399
>>75397
следование за модой
70 1175418
>>75397

>Ведь строго говоря это просто синтаксический сахар,


Мы вам перезвоним.
71 1175434
Посоветуйте хороших статей или видео о проектировании на Java.
Что б отвечать на вопросы типа: как бы вы спроектировали Убер
72 1175454
>>75418
почему на эту фразу у собеседующих бомбит?
73 1175557
>>75434
«Этот вопрос не относится к списку профессиональных навыков, заявленных в тексте вакансии. Имею право не отвечать».
74 1175561
>>75557
мы вам перезвоним
75 1175584
Зачем люди создают коллекции вот так?

List<Person> nums = new ArrayList<>();

Почему нельзя писать так:

ArrayList<Person> nums = new ArrayList<>();
76 1175589
>>75584
Так можно писать.

Но, объявив это как более общий тип, ты можешь в дальнейшем поменять реализацию.
Или использовать Collections.emptyList(), или ещё что-нибудь.

В простых программах это кажется избыточным.
Но, это вопрос стиля.
Или его отсутствия.
77 1175592
Вы просто сборище даунов, вы на элементарный вопрос ответить не можете "Какую БД брать?".
78 1175593
>>75592

>Какую БД брать?



Бери такую, чтобы в руке хорошо лежала.
79 1175642
Здрарова, джаваны. Посоветуйте, как или хотя бы с какой стороны подойти к решению задачи.

Нужно считать и создать объекты класса из JSON файла.
Объекты классов bigCar и smallCar, унаследованные от абстрактного Car. Проблема в том, что в JSON могут быть объекты обоих этих классов и какой это класс решат сочетание значений полей maxPassengers и trunkSize.
Надеюсь, понятно расписал. То есть мне в процессе парсинга джейсона надо как-то смотреть на значения этих полей и в зависимости от них создавать уже нужный объект.
Прошу совета.
80 1175646
>>75642
Не надо делать наследование классов данных, прежде всего.

>в процессе парсинга джейсона надо как-то смотреть на значения этих полей и в зависимости от них создавать уже нужный объект.


Вот так и делай, лол.

А нормально - надо делать свой протокол поверх json - с типами и дженериками.
Чтобы не ебать мозги ни себе ни людям.
81 1175660
>>75642
Алсо, такая объектная модель - это вообще пиздос.
Так в принципе делать не надо, и дело даже не в наследовании.

Такие вещи надо свойствами как-то делать, а не выдавать тугую струю классов на каждый пук.
82 1175667
>>75642
В таком формате никак. Во-первых, в жсоне никаких типов нет, сериализатор в душе не ебет, что там надо создавать. Во-вторых, с хера ли у тебя семейство типов базируется на значении атрибута? Нужен всего один класс с двумя методами isBig()\isSmall()
83 1175668
>>75660
>>75646

Сорян, я пока учусь. Можешь все-таки что-то посоветовать в моём случае? Сейчас читаю про gson, но в большинстве статей описывается типичная изи десериализация из двух строчек кода. Думаю, надо официальную документацию почитать, но реализуемо ли вообще то, что мне нужно с gson или что-то другое смотреть?
84 1175674
>>75660
Два чаю. Если нужно сериализовать Json с неизвестными заранее полями (например если список нужных полей отправляется в качестве аргумента для API), то пихаю Map<String, Object>. Но вот такого, что заранее неизвестно что при вызове вернёт Json ещё не было. Правда у меня Java приложения Json особо и не получают, в основном всё на xml.
>>75668
Jackson можно использовать в качестве токенайзера. Тогда ты сам, ручками проверяешь каждый токен и строишь нужный объект. А вообще лучше десериализуй Json в HashMap<String, Object> и уже его передай в фабрику, которая и отдаст нужный элемент.
85 1175675
>>75589

Это не вопрос стиля. Нас не интересует конкретная реализация списка, нас интересует обобщенный список, который, допустим, позволяет итерировать по содержимому. Объявляя конкретный тип, ты связываешь себе руки, так как завтра выяснится, что ArrayList тебе не подходит, а нужен например стек или очередь, и ты будешь две недели вылавливать все места с конкретной реализацией, а потом еще две недели хавать баги.

А обобщенный тип позволяет менять реализацию безболезненно. Поэтому лучше завести себе привычку и постоянно повторять "детали реализации должны быть скрыты от клиента".
86 1175676
>>75675
так конкретная реализация остаётся. Но она становится неизвестна
87 1175677
>>75676

> Но она становится неизвестна


С чего бы это? Есть же рефлексия.
88 1175680
>>75677
неизвестна для тебя. Ты добровольно выкидываешь из кода важную информацию
89 1175682
Ещё пример - из ConcurrentHashMap делать Map. И пойди догадайся, что это за мапа и потокобезопасна ли она
90 1175684
>>75676

об этом и речь. для кода, где этот список используется, достаточно знать, что это какой-то там список, больше этого ему знать не следует.
91 1175685
пошли все на хуй, уёбки
92 1175687
>>75680

> выкидываешь из кода важную информацию



Важную в контексте чего?

> Ещё пример - из ConcurrentHashMap делать Map. И пойди догадайся, что это за мапа и потокобезопасна ли она



Тут надо задать вопрос, насколько релевантна тебе потокобезопасность. Если это обязательно, то разумеется сигнатуры надо объявлять так, чтобы потоконебезопасный тип передать было невозможно. А если требуется просто словарь, то ограничиваться ConcurrentHashMap не стоит, т.к. клиенту лишняя работа, не относящаяся к делу. Ну и если это чужой код тебе передает, то следует исходить из потоконебезопасности и может даже явно копировать в ConcurrentHashMap, т.к. сегодня они тебе передали одно, а завтра что-то другое, и оправдания типа "оно упало, потому что меня вызвали с не тем типом" звучат как-то неубедительно.
93 1175689
>>75687

>Важную в контексте чего?


в контексте реализации и свойств. Сортируются ли значения. Выкидываются ли дубликаты. Допустимы ли null значения
94 1175697
>>75689

Это важно в конкретных контекстах, см. выше пример с ConcurrentHashMap, в таких случаях да, указывай конкретный тип. А List используй так же, как interface.
95 1175698
>>75675

>Поэтому лучше завести себе привычку


Это и называется "стиль", лол.
96 1175700
>>75682
Смысл в том, что ты используешь абстрактные List или Map в тех случаях, когда тебе именно что _не_важно_, какой там будет конкретный класс.
А когда важно - используешь более специализированные объявления.
Что тут непонятного?

В общем случае - нужно стараться максимально скрыть детали реализации и ограничиться абстрактным интерфейсом.
97 1175702
>>75698

Ну ок, пусть будет стиль.
98 1175704
Аноны, только начал изучать многопоточность. Столкнулся с такой проблемой:
https://pastebin.com/pRcV1amm
Вот какого хуя оно так работает?
99 1175707
>>75704
Потому что главный поток не ожидает завершения всех остальных и сразу выходит из программы. Сохрани все msSecondThread в массив, а потом после цикла с вызовами вызови у всех метод join.
100 1175708
>>75704
а что ты хочешь? Оно выполняется параллельно, а не последовательно
101 1175710
>>75707
что значит все в msSecondThread? Переменную i, или что?
102 1175711
>>75710
Массив сделай для потоков. Стартани каждый. Потом сделай join на каждом.
103 1175712
>>75710
Сами объекты Thread. Если тебе просто нужно ожидать окончание работы треда, то нужно вызвать метод join у него. Но делать это надо после того как стартанёшь все треды, иначе смысла в многопоточности не будет. Потому все запущенные треды и надо сохранить в массив, а после того как все запустил уже и можно их ждать.
104 1175714
>>75704

>class AffableThread extends Thread


Вместо этого - implements Runnable.

Каждый раз - новый AffableThread.
А лучше - просто используй лямбду:
new Thread(() -> {...});

В конце надо бы подождать завершения потоков, наверное (не обязательно).

И что тебе не нравится?
Что выполняются не по порядку? Это нормально.
Для этого есть приоритеты, но, и они не гарантируют. Так что, если действительно важен порядок - придётся поебстись. И это хороший повод задуматься - правильно ли ты поставил задачу?
105 1175722
>>75714
Чето типо такого?:
new Thread (() -> {System.out.println("Привет из побочного потока!"+Thread.currentThread().getName());});
>>75711
>>75712
>>75707
Я почитал про это, я в будущем хочу что-бы кол-во тредов можно было вводить в строке. Наверное это мне не подоходит
106 1175724
>>75722

> Наверное это мне не подоходит


Вместо массива можно использовать ArrayList.
107 1175726
>>75714
Анон, я понял как через лямбду:
new Thread (() -> {System.out.println("Привет из побочного потока!"+Thread.currentThread().getName());}).start();
Но у меня все равно "Главный поток завершен..." в начале высвечивается

Главный поток завершён...
Привет из побочного потока!Thread-2
Привет из побочного потока!...
>>75724
То есть ты имеешь ввиду, что нужно записывать .getName() в список?
108 1175733
>>75726

> То есть ты имеешь ввиду, что нужно записывать .getName() в список?


Тут видимо легче показать, чем объяснить.
https://ideone.com/wIQ7wZ
109 1175744
>>75726

> Но у меня все равно "Главный поток завершен..." в начале



Так и должно быть. Про лямбду я не к этому написал, а вообще.
Потоки - они выполняются _параллельно_.

Главный поток отрабатывает очень (очень!) быстро, и сразу завершается (запустив другие).
Сам он ждать не будет - ты же не просил его ждать. См. в примере выше про join.

Для натуральности - добавь Thread.sleep(50) в лямбду (придётся засунуть в try|catch). Т.к. реальные потоки у тебя же что-то делать должены, в течение некоторого времени (или постоянно).
110 1175754
>>75584
Потому что программируйте на уровне интерфейсов, а не реализаций.
111 1175757
>>75726
И да, "if ( i== 5) " там совершенно лишнее.
IDEA тебе бы подсветила это место с комментарием типа "здесь i всегда = 5".

Также, могу тебе посоветовать посмотреть в сторону более высокоуровневых инструментов для многопоточности в java - пакет java.util.concurrent и т.п.
Потому, что работа с голыми потоками - это может быть довольно заёбисто, если делать что-то сложнее хелловорлда.

И особенно - CompletableFuture.
Очень возможно, что именно это тебе и нужно.
112 1175758
>>75757

> И особенно - CompletableFuture.


Лучше уж пусть изучает Reactor. Тот же Mono в сто раз удобней.
113 1175771
>>75758
Одно другому не мешает.

И для относительно простых вещей CompletableFuture - просто охуенно.
И если научился - потом переход на всякие Rx'ы и реакторы будет простым и естественным.

Иначе - можно сразу ничего не понять и дропнуть.
114 1175793
>>75674
>>75667
А что, если мб так. Создать pojo класс, стандартными методами gson десериализировать все в массив объектов этого pojo класса. А потом пройтись циклом по этому массиву и создать уже нормальные объекты.
115 1175797
>>75793
Ну, так >>75674 тебе и написал:

>А вообще лучше десериализуй Json в HashMap<String, Object> и уже его передай в фабрику, которая и отдаст нужный элемент.

116 1175800
>>75797
Ага, спасибо. Только, честно говоря, не совсем понимаю, зачем HashMap тут. Думал обычным списком или массивом обойтись.
117 1175804
>>75800
HashMap<String, Object> - это твои объекты, вместо PoJo.
Какой смысл делать ещё какой-то pojo, если, по сути, сырой json-объект - это Map?
118 1175815
>>75804
Можешь объяснить, что куда должно замапиться?
Весь JSON записывается в String? Или String - это название поля, а Object - это значение? Что, если у меня много объектов в JSONе? Честно не могу врубиться и не получается этот подход нагуглить.
119 1175819
>>75815

> Честно не могу врубиться и не получается этот подход нагуглить.


Используй кастомный десериализатор (регистрируй его для интерейса) и не парься. https://www.google.com/search?q=java+gson+custom+deserializer
120 1175820
>>75815
Объект - это набор свойств.
Свойство - это имя (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 используй или своё что-то сделай на рефлекшн.
121 1175821
>>75820

> Но, любой парсер json, как мне кажется, по умолчанию тупо парсит json как Map


Не. Сейчас все парсят сразу в объекты, а если что-то не получается уже созданные объекты выбрасываются и вываливается ошибка. Так максимально пирформансно же.
122 1175822
>>75821

> Так максимально пирформансно же.


Т.е. надо заранее знать типы?
В рантайме определять не получится?

Я вообще мало json использую, и у меня есть своя библиотека, с блекджеком и шлюхами. Смотрел gson и нашёл его бессмысленным. Хотя, возможно, он и высокопроизводительный, но мне нужно другое.
123 1175825
>>75822

> Т.е. надо заранее знать типы?


Там все объекты атрибутами развешивают, чтобы парсер мог понять что и как. Если атрибудтов недостаточно, то пишут свой десериализатор для конкретного класса. Когда встречается этот класс, то этот десериализатор и вызывается.
124 1175829
>>75825

>Когда встречается этот класс


А как узнать, когда он встречается?
Что вот эта вот хуета - это именно это класс?
В json добавляются метаданные?

Приведу пример:
Есть такой json - {"tuple": [1, "a", 33.3]}.
Я хочу, чтобы это стал объект Tuple3<Integer, String, Double>.
А не List<Object>, как может кому-то показаться.
И что?
125 1175833
>>75829

> А как узнать, когда он встречается?


Рефлексия. Там где рефлексия не работает (контейнер), то атрибуты.
126 1175836
>>75829

> В json добавляются метаданные?


Ты изначально даёшь класс, который определяет каким образом надо десериализовать root-элемент.
127 1175840
>>75836
Да, я так и понял.
И это, в общем случае, нормально.

Но, мне нужно было сделать так, чтобы тип определялся в рантайме - чтобы можно было восстановить список разнотипных сложных объектов, включая коллекции с дженериками.
Единственный способ это сделать - добавить данные о типах в json, и затем в десериализаторе с этим работать.

И, насколько я понял, gson для таких вещей бесполезен.
128 1175904
Подкиньте где максимально понятно написано про геттеры/сеттеры?
129 1175929
>>75904
Если ты не можешь так понять про геттеры и сеттеры, то либо ты слишком имбецил, либо программирование просто не твое.
130 1176038
>>75904
ненужны
131 1176164
Там это самое, maven репозиторий заблокировали!
132 1176175
точнее сайт
133 1176227
>>76164
>>76175
Ну как проголосовал за Пыню?
134 1176259
>>76227
Вот у нас не понимают, что заблокировали половину адресов Амазона в России США и госдепартамент... Этого не понимают... Думаю, что это сделал Путин!
S80419-07400861.jpg22 Кб, 512x333
135 1176453
>>73657 (OP)
Сап, программач. Толи я тупой, толи аффтор учебника что-то не договаривает. Объясните мне пожалуйста зачем тут переприсваевается переменная. Разве не легче сразу i использовать?
136 1176454
>>76453
Попробуй переписать код с использованием переменной i. Конечно, если тебя не смущает, что она доступна только в конструкторе.
Снимок.PNG16 Кб, 641x344
137 1176546
Можно спокойно создавать дженерик классы без даймонд оператора?
Зачем он тогда вообще нужен??
138 1176548
>>76453
Это конструктор для формирования экземпляра класса NonGen,
в него поступает переменная i и после она присваиватся полю num
139 1176554
Актуальная ли еще эта книга
Гранд М. - Шаблоны проектирования в Java - 2004
если она 2004го года?
140 1176577
>>76546
Добавь строчку
SimpleTriple<String> b = a;
Снимок.PNG22 Кб, 532x486
141 1176612
>>76577
ну добавил
и чего?
142 1176661
>>76612
А то что у тебя варниг с какого хуя слева стринг, а справа хуй знает что.
143 1176664
>>76612
Странно, что компилятор не показывает ошибку, а только предупреждение. Может от версии java зависит, а может я уже просто забыл о таком поведении.

У тебя переменая a имеет тип SimpleTriple<Object>, а не SimpleTriple<String>.
Даймонд нужен, чтоб не писать тип, когда с лева он уже определен:
SimpleTriple<String> s = new SimpleTriple<>(...);
Снимок.PNG24 Кб, 587x582
144 1176769
>>76661
>>76664
у меня даже варнинга нет, это было просто выделение текста в нет бинс,
а вообще я когда кожу никогда на варнинги не смотрю, нах надо, главное что б запускалось и выдавало что нужно
145 1176816
>>76546
он нужен для проверки типов, без него у тебя фактически SimpleTriple<Object>, т.е. можешь не только String добавлять, а все что угодно
146 1176838
>>76546

>Зачем он тогда вообще нужен??



Даймонд - это не для создания, а для объявления типов.
147 1176864
>>76554
Дженерики в джаве появились как раз в 2004-м - в Java 5.
И автобоксинг/анбоксинг тогда же.
Это принципиальные изменения, в том числе с точки зрения паттернов.
После этих изменений джава стала нормальным языком.

Так что, если у тебя _русское_ издание 2004 года, то там, скорее всего, этого нет. Посмотри год издания оригинала и какая версия джава используется.
148 1177127
Аноны, кто разбирается в Swing, помогите, плиз.
Мне нужно написать программу,
рисующую 12 фигур разного цвета с разными координатами. Тип фигуры (эллипс, прямоугольник, линия), цвет и расположение выбираются случайным образом. Всякий раз, когда вы изменяете размер фрейма, картинка меняется на новую. Линии должны быть толстенькие.

Ограничение: Вызов метода g2.draw() в тексте программы написан только один раз. Массивы и прочие коллекции не применяйте.

Должно быть что-то типа 1го пика,
во-первых я так и не понял как менять backgroundcolor для JPanel, там какие-то сложности с прозрачностью итд,
потом я не очень понимаю, почему мой код вместо того чтобы рисовать 12 рандомных фигур рандомного цвета выдает 4ый пик,
пусть даже пока что я не поставил им рандомные координаты, но каждый раз стабильно рисуется 1 черная линия и всё,

https://pastebin.com/zA1GuCtM
149 1177156
>>77127
рисователь вкатился в тред.
рекомендую поковырять Processing
оч пиздатая рисовалка
150 1177159
>>77156

>Processing


а что это вообще и как это найти?
151 1177162
>>77159
постить сюда ссылки это моветон. просто пишешь в гугле и методом логической дедукции попадаешь на нужный ресурс.
что там хорошо - там уже всё подготовлено для рисования и узнаешь базовые принципы по обработки иветов етк
152 1177340
>>77162

>постить сюда ссылки это моветон.


с каких пор?
153 1177341
Почему нельзя в одном file.java объявлять 2 публичных класса, но можно с любым другим модификатором доступа?
И еще, я видел видео на ютубе, которое запостили в 2013м году, где человек как раз создает публичный класс в одном файле с уже имеющимся публичным классом,
получается в предыдущих версиях Java так делать было можно?
154 1177403
>>77341

>в одном file.java объявлять 2 класса


Не надо так делать.
Независимо от публичности-приватности.

Ньюфагам это, обычно кажется хорошей идеей.
Ну так, на то они и ньюфаги, лол.

Если очень надо - сделай один модуль (публичный класс, имеющий только статические члены), и в нём объяви другие (вложенные) статик классы, с нужными модификаторами доступа.
155 1177600
>>77403
Так почему не надо так делать-то?
Какие в пользу этого аргументы?
156 1177625
>>77600
Потоу что в итоге все равно будут разные класс-файлы и выгоды от этого нет.
157 1177648
Актуальна ли еще лекция 15го года про многопоточность?

https://www.youtube.com/watch?v=dLDhB6SRXzw
158 1177672
>>77648
Актуальна.
159 1177680
>>77600
Структурирование кода.
По тем же причинам рекомендуют разбивать большой метод на несколько функций и т.д.

Близкие по смыслу классы помещаются в один пакет (а не файл).
Иерархия пакетов может быть сколь угодно сложной, но злоупотреблять этим не нужно.

А ньюфагу кажется, что несколько мелких файлов - это сложнее, чем один большой.
Но, на то он и ньюфаг.
160 1177779
Поясните за @Override. Есть класс Car, в нем несколько переменных которые я хочу вывести с помощью println(). Переопределил метод toString(), откуда println() знает что в классе Car есть overrided метод и нужно юзать его а не тот что в классе Object?
161 1177800
>>77779

> @Override


Указывает конпелятору, что метод под ним должен переопределять виртуальную функцию. По факту переопределение происходит по совпадению сигнатуры (т.е. должны совпадать название, типы и количество аргументов и тип возвращаемого значения), а @Override нужен только для контроля и его можно не указывать вообще.
162 1177801
Поясните за жопаэль.
163 1177861
>>77779

>откуда println() знает


Он ничего не знает.
Он вызывает метод toString() данного объекта.
При этом срабатывает именно переопределённый метод.

Почему?
Потому, что так устроена Java и вообще ООП.
https://www.geeksforgeeks.org/dynamic-method-dispatch-runtime-polymorphism-java/
164 1177863
Почему я такой тупой и не могу запрограммировать алгоритм минимакса для игры в крестики-нолики?
165 1177864
Я нюфаг и мне дали задание на первой лекции тренингов, почти все сделал, но осталось последнее задание, которое реализовать не получается:
Имплементировать метод, с помощью которого в армию добавляется новый отряд. Если армия уже укомплектована, должно выводится соответствующее сообщение на экран. Необходимо убедится, что отряды не повторяются, в противном случае вывести сообщение.

Мю у кого-то идеи есть, как это сделать? Как вообще дать возможность клиенту добавлять отряды? Пока наткнулся на 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;
}
}
166 1177867
>>77864
Если проще, то клиент может собрать армию из списка отрядов и потом подсчитывается стоимость армии, но дублировать отряды нельзя.
168 1177928
>>77863
Бляя, еще и на паттернах не смог. Почему же я такой тупой.
169 1177937
>>77928
Решение от балды: проверяешь все четыре направления перебором. Если нет вражеского символа на линии - вставляешь свой в свободную ячейку
170 1177940
>>77937
Да алгоритмы то я уже придумал. Но что-то никак в них не въеду.
171 1178081
>>77863
А я сделал минимакс без проблем. Наверное просто программирование не твое.
>>77937
А если есть, то выбрасывать исключение и завершать работу? Писать тик так то для чего-то, кроме минимакса, это простая всрача времени.
172 1178174
>>73657 (OP)
Подскажите, как создать персонажа с характеристиками взаимодействия с виртуальной средой, какие надо бубны практиковать? Как дописывать, если я что-то по ходовой придумал и как эту ебалу запилить, чтобы она заработала?
173 1178193
>>78174
Чоблять? Ты там движок игори пишешь что ли? На джаве? Ты там совсем ебанулся, или совсем ебанулся?

Пиздуй юнити трогать.
174 1178221
Замечали ли вы, что программисты на Java более инфантильны, чем разработчики на других языках? Это объясняется тем, что в Джаве сделано за вас все, что бы вы не могли "выстрелить себе в ногу", то есть вас , как детей, изначально отгораживают от потенциально совершенных ошибок, думают за вас, потому что разработчикам языка виднее.
Готовы ли вы с этим смириться?
175 1178240
Костыль это лучше, чем ничего, или хуже?
176 1178244
>>78240
Готов, ведь так лучше для меня.
177 1178245
178 1178251
>>78221
Да. На то мы и используем java. Любители стрелять в ногу. Сидят в других тредах
179 1178264
>>78221
Я замечал, что люди, не разбирающиеся в джаве обожают нести дикую хуйню про нее.
1.jpg85 Кб, 1000x1000
180 1178348
>>73657 (OP)
Можете кинуть ссылку на хороший сервис по изучению Java. В смысле бесплатный и для начинающих. Без видеоуроков. Был бы очень благодарен
181 1178372
Не знаю, шарит ли хоть кто нибудь здесь, но решил начать пилить свой сервер minecraft с плагинами и модами, и при этом запилить свои. в одном моде Placeable Items приглядел классные 3d модели мечей и кирок, которыми хотел бы заменить основные, но столкнулся с тем, что не могу никак открыть файл мода. Пробовал сделать это в eclipse и intellij. Или же я чего-то не знаю?
182 1178398
Аноны, почему оно не работает?
if (i/2 == Double){}
/Хочу сделать проверку целого числа, после деления на 2/
183 1178402
>>78348
Нет, не можем.
>>78372
У тебя скорее всего джарник. Считай это выполняемым кодом. А чтобы изменить программу, тебе нужен исходный код. Иди на страницу своего плагина и ищи там ссылку на гитхаб. Если нету, то все.
184 1178405
>>78402

>Если нету, то декомпиляция и ковыряние с охуевшим видом в нагромождении говна без комментов


Фикс
185 1178427
>>78405

> декомпиляция


> очевидно мимокрокодил, а не видевшее некоторое дерьмо повидло


Ну ты хоть немного думай, когда фиксишь чужие поста, ебоклак.
186 1178432
>>78427

> речь о модах для майнсруфта, которые декомпилируются человеком, у которого из знаний только английский, за полчаса-час (в первый раз, потом за пару минут)


Я первый свой мод (или лаунчер, не помню) для майна декомпильнул именно с такими вот исходными условиями.
А потом всё удолил, потому что не умел в жабу.
187 1178465
>>78432
Разархивировать джарник и получить java-файлы из class-файлов не сложно. Вопрос что ты с этим будешь делать.
188 1178470
Мучаюсь уже часа 2, как мне из этого:
String[] arr = {"aa", "bb", "cc", "dd"};
String gg="";
for (int i = 0; i != arr.length; i++){
gg+=arr+" ";
}
System.out.println(gg);

Переделать в лямбду?
189 1178473
>>78470
ArrayList<String> arr;
190 1178474
>>78473

>ArrayList<String> arr;


Спасибо! Но что делать если у меня в коде, допустим, уже есть Arrays.sort(arr); ?
191 1178486
>>78470
Редьюсь.
192 1178540
>>78398

String s; //введенное юзером значение

try {
if((s.toLowerCase().contains('e') || s.toLowerCase().contains('.'))
double d=Double.parseDouble(s); //вещественный тип
else
long l=Long.parseLong(s); //целый тип
}
catch(NumberFormatException nfe) {
//строчный тип
}
193 1178603
>>78474
Либо заменить на Collections.sort(list), либо сделать из массива список с помощью Arrays.asList(array).
194 1178668
>>78470
Ну где вас таких тупых берут.
Stream.of(arr).reduce("", (s, acc) -> s+" "+acc);
195 1178670
>>78470
вот еще одно решение
Stream.of(arr).map(s -> s).collect(Collectors.joining(" "));
от >>78668
196 1178671
>>78470
Могу еще тебе рекурсивное решение ебануть
197 1178677
>>78671
>>78470
public String join(List<String> arr, String acc){
if (arr.isEmpty()){
return acc;
} else {
return join(arr.subList(1,arr.size()), acc+arr.get(0)+" ");
}
}
198 1178778
Есть ли какие нибудь сайты по изучению Java с нуля, кроме платного JavaRush? На подобие learn.javascript для Js или pythontutor.ru для Питона? Чтоб прям для дошкольников было объяснено
199 1178879
>>78670

>.map(s -> s)


oh boy
200 1179001
>>78778
Дебилы не задерживаются. Иди дальше, идиотский человек.
201 1179032
202 1179436
Почему в жабе не сделать свойства, как в решетке?
203 1179526
>>79436
нинужна
204 1179597
Бля, вот я тупой. Мучался с этим минимаксом, придумал костыльное решение, исправил на нормальное, почти доволен. А оказывается это не костыльное решение было и все норм. Эх.
205 1179610
>>74203
Как вариант - одну из тех, которую поддерживает JDBC.
206 1179618
>>75593

>Бери такую, чтобы в руке хорошо лежала.


БД "Дуня Кулакова"?
207 1179625
Сап двач, тут такое дело ..
Вобщем мне надо написать лаб по яве. Нужно добавить класс, представляющий единицу, описанную в динамическом векторе основного класса. Я особо не понял данную задачу поэтому реквестирую помощь
1004121257.jpg171 Кб, 906x1200
208 1179631
Сап аноны. Есть у кого Кэти Сьерра "Изучаем Java" в fb2, epub, mobi формате? Скиньте плес. А то пиздец везде только в пдф. И вообще можно любые книги по джаве в этих форматах. Или хотя бы подскажите где скачать
Вложенные try-catch 209 1179638
Привет, аноны!

Понадобилось сделать четыре вложенных друг в друга try-catch. Понял, что мой редактор joe мало чем может помочь.
В каком редакторе/IDE легко и просто делать вложенные try-catch?
210 1179640
>>79638

> В каком редакторе/IDE легко и просто делать вложенные try-catch?


А что мешает без задней мысли написать их ручками?
211 1179642
>>79640

>А что мешает без задней мысли написать их ручками?


Отступы для удобочитаемости и можно по невнимательности упустить/добавить фигурную скобку
212 1179644
>>79642
Попробуй intellij idea.
213 1179667
>>79625
аноны подскажите плес хотябы что надо гуглить
214 1179678
Ананас, я засунул Try-Catch в Do-While цикл (крутится пока валится эксепшн) и теперь у меня нарушается порядок System.err.println (он в блоке catch) и System.out.println (он в начале Do-while). Flush потока не помогает.
Проблема в разных потоках. Вопрос в том, как это по-хорошему должно решаться.
215 1179683
>>79625
Дичь какая. Подпишусь на трэд.

мимо-вкатывальщик
216 1179685
>>79625

>поэтому реквестирую помощь


"В общем" пишется раздельно.

Не благодари.
217 1179686
>>79644
Спасибо, анон.
218 1179687
Есть игра. В ходе игры надо возвращать либо место для нового хода, либо результат игры, если после последнего хода игра закончилась. Какой возвращаемый тип лучше использовать? Массив int или новый класс забабахать?
219 1179695
>>79687
enum байтов.
220 1179720
>>79625
Чё блядь? Чё за динамический вектор? Имеется ввиду java.util.Vector, что ли? А чё за "основной класс"?
221 1179728
>>79683
Насколько я понял, надо в отдельном классе создать нужые обьекты. А в основном классе создать ArrayList где будут использоваться данные обьекты. Как-то так.
222 1179732
>>79720
вот >>79687

Я просто задание перевел с другого языка, да и само задание туповато сформулирована
223 1179733
>>79728
точнее >>79732
я уже плавленый
224 1179734
>>79733
почему нельзя едитить сообщения на дваче блядь
225 1179741
>>79638
Нахуя? Нельзя обработать всё в одном по разным типам эксепшонов?
226 1179792
>>79732
Ах ты, сука.
"Единица" - это unit наверное?
И всё равно текст остаётся загадочным.

"Единица в динамическом векторе основного класса" - хорошо звучит.

В России такое любят.
С таким названием мог бы быть доклад на форуме "Территория смыслов", например.
227 1179849
>>79644

>Попробуй intellij idea.


Попробовал, вещь супер!
1. Пишу:
PreparedStatement

IDE дописывает:

import java.sql.PreparedStatement;

PreparedStatement

Раньше, чтобы узнать, что писать после слова "import" я тратил кучу времени.

2. Выделил несколько строк, нажимаю Ctrl+Shift+T, IDE предлает упаковать в try-catch, как в сказке!
image.png2,7 Мб, 1920x1080
229 1179945
Кто-нибудь пробовал сабж? Это типа наш ответ Unity. Можно делать игоря для Windows, Linux, MacOS, iOS, Android и браузеров с поддержкой WebGL.

https://libgdx.badlogicgames.com/
http://www.libgdx.ru/
https://habr.com/post/243471/
230 1179959
>>79945

>ответ юнити


Ну ты кек вообще. Пробовла его на мобилки. Если коротко то более-менее он подходит для 2д, в 3д не лезь блять. А еще там хуйня с iOS, так как пидорские майкрософт купили купили и закрыли RoboVM, что бы не мешал Xamarin'у, и было два варианта, мутный Intel ME, или старый молумертвый форк RoboVM - BugVM.
231 1179968
>>79959
Я хочу написать RPG типа Fallout 1-2 или Arcanum, но с вращаемой/перемещаемой камерой (как в Neverwinter Nights и WarCraft 3). Вид от 3-го лица, бои пошаговые. Подойдет ли оно для этого?
232 1179972
>>79968
Теоретически да, но я так и не смог заставить нужные мне модельки работать, постоянно то ли текстуры, то ли нормали отклеивались, а из готовых из интерента вроде норм. Но опять же с 3д он так себе. А у тебя именно что 3д.
233 1180020
Нужно получить указатель на int.Но напрямую сделать это не получается.Есть какие либо способы это сделать кроме как привести к long?
234 1180032
А чё в треде одни вкатывальщики? Или так во всём программаче?
235 1180039
>>80032
Во всём.
236 1180070
>>80032
Я профессионал.
237 1180071
>>80070
Профессиональный вкатывальщик.
238 1180123
5 лет промышленного опыта-кун
Задавайте свои ответы. На глупые вопросы не отвечаю
240 1180150
>>80145
эксепшен ты сам кидаешь? Если да, то не надо так. Эксепшен это дорогая операция, плюс это должно быть что-то исключительное, эксепшенов не должно быть при корректной работе.

Сделай функцию, возвращающую boolean, и дёргай это функцию
241 1180168
>>80150
Я проверяю на некорректный ввод. Если ввод некорректный, кидаю сам кастомный эксепшен и прошу пользователя повторить снова (для этого цикл). это учебное приложение, один из пунутов задания придумать кастомные эксепшены
242 1180177
>>80168
тогда пиши только в System.out
243 1180183
>>80177
Так в итоге и сделал. Просто думал, мб есть способ это нормально хэндлить. Спасибо за ответ.
244 1180494
Поясните за таимеры.Я почитал примеры но это не совсем то.Там показано как запускать тред через каждые n секунд.А мне не нужен весь тред.Я хочу выполнять один цикл строго до определенного времени через каждые x сек.Как мне это сделать?
245 1180499
>>80494
```
final long deadline = ...;
while (System.currentTimeMillis() < deadline) {
// do stuff
}
```
246 1180571
посоветуйте движок / фреймворк для полнотекстового поиска
247 1180586
>>80571
Elasticsearch
248 1180677
Привет, мираноны!
Возник вопрос, до какой степени джуну надо знать Хибернейт, Спринг(и что именно надо знать)?
249 1180694
>>80677
Не надо, пиздуй так - все равно перезвонят.
250 1180748
>>80694
А че так можно было? А я то сидел ждал пока пригласят.
251 1180867
>>80748
А ты думал мы вам перезвоним просто так сто сорок пятый тренд идет?
252 1180910
Читаю спринг экшон и у меня возник вопрос, почему для моего бина без интерфейса нормально работает аспект, хотя @EnableAspectJAutoProxy у меня стоит без proxyTargetClass=true?
253 1180937
>>80910
proxyTargetClass=true означает: использовать cglib-прокси, даже если есть интерфейс. Если нет интерфейса, будет cglib как единственный возможный вариант.
254 1181009
>>80937
спасибо
255 1181056
Что написать на яве, чтобы было интересно? Без ui. Киньте идей каких нибудь плез. Может кто то уже что то пилит, я бы скоопился.
257 1181140
У меня проблема с jframe.Я вывожу на jframe скриншот другого окна через jlabel.Но рисовка происходит только в том случае если мое окно активно.Как сделать чтобы jframe обновлялся постоянно?
scrin2.png129 Кб, 1241x984
258 1181146
Читаю и параллельно перевожу concurrency in practice. Благое дело?
tsbfail.png232 Кб, 658x910
259 1181156
Нахуй так жить, жабаны?
260 1181163
>>81156
спринговый эксепшен? Чот не помню такого
261 1181244
Анон, очень нужна помощь.
Суть такова:
обмазываюсь видеокурсом про спринг (тру-посоны в комментах на рутрекере поливают автора и курс говном, но ничего лучше т.е. просто ничего на русском не нашёл), там нужно поставить 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 в глассфише теперь лежит этот файл, перезапустил и всё равно ничего не получается. Может быть кто-то сталкивался с подобной проблемой или может просто указать мне на ошибочные действия, которые приводят к подобному результату?
262 1181245
>>81146
Правильно, что читаешь.

А переводить не нужно.
Учись понимать английский без того, чтобы переводить его при чтении. Иначе - это тупик.
263 1181281
>>81244

>т.е. просто ничего на русском не нашёл


Умри

>ошибочные действия, которые приводят к подобному результату


Ошибочные действия - пытаться что-то делать с glassfish, он не нужен (как и другие ASы)
 .jpg61 Кб, 598x300
264 1181296

> java

265 1181380
Джаверы такой вопрос. Прочитал полностью Шилдта для начинающих. Какие еще темы нужно освоить из полного Шилдта или других учебников прежде чем начать учить Spring?
266 1181409
Не ставь жабу, бро, там вирусы, у меня от этого брат умер.

https://computer76.ru/2018/04/16/javac-cmd-error/

Установка Java не относится к насущной проблеме при работе в любой операционной системе, причём при некоторых условиях даже НЕ РЕКОМЕНДУЕТСЯ.
267 1181411
>>81380
желательно сначала освоить хотя бы Шилдта не для начинающих, ну или его альтернативы
268 1181412
>>81411
Шилдт сам пишет на крестах. В своих книгах про Java и C# он тупо пересказывает содержимое сайтов Oracle и MSDN. Иногда даже с ошибками.

>>81380
Spring in Action. Даже у нас выпускали с хорошим переводом (есть в VK в поиске по документам).
269 1181415
>>81412
ты думаешь он что-то поймет в спринге после Шилдта для начинающих? не знаю, не знаю
270 1181423
>>81415
Ну, мне в свое время хватило общих знаний языка (по какой-то вузовской методичке) + AWT & Swing.
В той книге все хорошо разжевано для начинающих.
271 1181425
Вот тут надо все штидировать - API, спецификацию, tutorial'ы:
https://docs.oracle.com/javase/10/
273 1181433
>>81380
>>81411
могу еще посоветовать Murach Servlet and JSP, кроме собственного говоря сервлетов и jsp, там еще есть работа с бд (jdbc, jpa), основы html/css, объясняется как это все вместе работает, есть даже пример разработки готового веб-сайта
274 1181436
>>81433
Кстати, нужно ли еще что-то знать из Hibernate, кроме использования его как реализации JPA?
Там есть какой-то свой встроенный язык запросов - его спрашивают на собеседованиях?
275 1181441
>>81436
sql учить придется в любом случае, всякие jpql на нем основаны и не особо от него отличаются; думаю ты должен уметь выполнять crud операции в hibernate/jpa, знать основные аннотации и подобные базовые вещи
276 1181445
>>81436
Именно язык запросов там практически тот же самый, что в JPA. Есть свой criteria api, который ныне объявлен deprecated, несмотря на превосходство над ущербными JPA criteria.
В реальном мире скорее всего придется столкнуться со спецификой Hibernate, но для собеседований должно хватить и JPA.
277 1181574
>>81445
можно ли говорить на собеседовании, что я предпочитаю не использовать hibernate и jpa?. Ибо от них одни проблемы без заметной пользы
278 1181577
>>81574
Мне jooq больше нравится. Но в каждой вакансии Hibernate и Spring.
279 1181627
>>81574
Можно, если сумеешь аргументировать. Адекваты понимают, что hibernate/jpa как минимум хороши не во всех ситуациях.
280 1181635
>>81627
в простых проектах проще руками пару запросов накидать.
В сложных уже нельзя доверять автогенерации и нельзя выгружать весь граф объектов.

Итого нет применения
281 1181667
>>81635
Так может просто и не ходить туда, где важен hibernate? Не так уж и в каждой он вакансии. Но в любом случае, на собеседовании в адекватной конторе умение осмысленно и по существу раскритиковать hibernate вполне может заменить его глубокое знание.
282 1182078
>>81574
Сходу выдашь свой отсутствующий опыт. В узких местах запросы пишутся ручками, но в большинстве крупных проектов без orm никуда - другой вопрос, что некоторые умники сперва пердолят свой запрос на каждый чих, а со временем всё это обрамляется в тот же orm, только хуёвый.
>>81635

>в простых проектах проще руками пару запросов накидать.


Внезапно, тебя не будут нанимать ради хелловорлдов с "парой запросов".

>В сложных уже нельзя доверять автогенерации и нельзя выгружать весь граф объектов.


Ты не понимаешь технологию, если не видишь ей применения.
283 1182085
>>81574

>предпочитаю не использовать hibernate и jpa?



А MyBatis (бывший iBatis)?
Это хороший компромисс.
284 1182088
>>82078

>Ты не понимаешь технологию, если не видишь ей применения.


У меня есть технология изготовления фигурок из говна, найдёшь ей применение?
Если нет, видимо ни ты ни я просто не понимаем её.
285 1182099
>>82088
Попробуй ещё раз и без использования говна. Уверен, у тебя получится.
И как ты думаешь, если тысячи зрелых специалистов используют технологию, а ты "не видишь ей применения", то у кого проблемы с пониманием - у тебя или у них?
286 1182101
>>82099

>если тысячи зрелых специалистов используют технологию,



Миллионы мух не могут ошибаться, да.

Люди чего только не делают.
И на джаве в том числе.
И что?

Я другой анон, если что.
И тоже не считаю jpa и hibernate хорошим делом.
Как и спринг.
Всё это ненужная монструозная хуйня.
287 1182103
>>82101

>Миллионы мух не могут ошибаться, да.


>>82088

>технология изготовления фигурок из говна



/pr зафиксирован на кале, лол.

>>82101

>Всё это ненужная монструозная хуйня.


Для хеллоуворлда вообще мало что нужно.
288 1182107
>>82103
Сынок, чтобы тебе было понятно, о чём я - посмотри на продукты Caucho, например.
Или на тот же MyBatis.
Это примеры несколько иного подхода, нежели обычно принятый в джава-разработке.

А коммерческий успех, в наше время, далеко не всегда свидетельствует о качестве продукта.

И да, 95% чего угодно - говно, но, оставшихся 5% мне вполне достаточно.
289 1182118
>>82107
Щень пытается общаться снисходительно - какая прелесть. Чешет о монструозных продуктах и приводит в пример майбатис - один аргумент лучше другого.
У тебя есть что-нибудь по делу, или ты так, попечатать зашёл?
290 1182121
>>82118
По делу тебе уже всё сказали, и даже не один раз, лол.
А суть твоей аргументации - все так делают.
Охуенно.

И да, у тебя совсем не бомбит, как я погляжу.
291 1182129
>>82121
Перечитай посты ещё раз.
Да-да, вызывай пожарных.
292 1182140
>>82129
Перечитал.
Вызвал.
Жди.
293 1182147
>>82078

>но в большинстве крупных проектов без orm никуда


никуда без выгрузки всего графа объекта? Так делать нельзя в любом случае

>Ты не понимаешь технологию, если не видишь ей применения.


глупость. Есть куча "технологий" без применения
294 1182156
>>82107

>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
295 1182165
А что пацаны про Ebean скажут?
296 1182169
>>82165
Лучше ебатис.
297 1182177
>>82165
Ну давайте, серьёзный вопрос-то.
 .jpg52 Кб, 600x597
298 1182182
>>82177
Хибернейт выебал жука и высрал ебин :)))
299 1182185
>>73896
Бля, как же я хочу научиться излагать мысли так как ты. Ты это тренировал или впитал с окружением? Сколько времени ты писал этот пост? Исправлял что-нибудь или тупо поток мыслей записал?
1438288833.gif6 Кб, 345x239
300 1182188
301 1182191
>>73896

>Ниже у тебя отвратительный пример мутабельного класса, чья внешняя функциональность зависит от совершенно не очевидного для окружающих внутреннего стейта.


так мы дойдём до ненужности ооп. Ибо основа ооп это внутреннее состояние объектов, что есть плохо по современным критериям
302 1182201
>>82185
Чоблять? Я просто ответил на пост без задней мысли. Я тебе такое и ирл с наскока высру, только без двощесленга про жопы и ссанину.

> Ты это тренировал или впитал с окружением?


Книжки в детстве читал и потом сидел в психотронной тюрьме. Не рекомендую.
>>82191
Egorka-dolboeb, eto ti? Ни одна из парадигм ООП ничего говорит про стейт объектов. То, что сущность заявляет, что она кошка и умеет мяукать с пруфами ничего не говорит о внутренней реализации кошки. Лишь о том, что она умеет мяукать и к ней можно спокойно обращаться как к кошке.
Если на девятое по счету мяуканье кошка взрывается нахуй и осколками посекает погладившего лишь говорит, что эта кошка говно. Хотя тут главное не дойти до нужности чекд экспепшнс и ненужности анчекд, но тут тонкая грань - внутренний стейт приносит неочевидность для внешнего наблюдателя и кучу других проблем, а анчекд экспепшнес стейтлесс каках это заебись.
303 1182204
>>82201
сам объект "кошка" предполагает, что это отдельный объект с отдельным стейтом. Иначе зачем вообще делать это объектом?

Итого сама концепция стейта (и ооп) это нарушение инкапсуляции - стейт может поменять кто угодно, в том числе всякие наследники. В отличие от функции с ограниченным и заранее определённым набором входных параметров.
ооп нарушает инкапсуляцию и порождает ворох проблем из-за стейта
304 1182209
>>82204
Егорка, ты что тут делаешь?

> сам объект "кошка" предполагает, что это отдельный объект с отдельным стейтом.


Додумываешь. Объект кошка предполагает, что он умеет мяукать, жрать и срать - удовлетворение контракта кошки. Всё.

> Итого сама концепция стейта (и ооп) это нарушение инкапсуляции - стейт может поменять кто угодно, в том числе всякие наследники.


Чоблять? Стейт, может быть, может не быть и может быть недоступным наследниками. И если у конкретной кошки есть стейт, доступный наследниками, то расширив эту конкретную реализацию кошки и поменяв в наследнике стейт, то это лишь станет стейтом новой наследной реализации кошки и никуда он торчать не будет. Икапсуляция схоронена. И тут мы подходим к мысли, что стейт это неочевидно, хуйова, хуйова тестируется, не тредсейф и вообще неидемпотентная ссанина говна червя.

> ооп нарушает инкапсуляцию


Ты упорот там? Инкапсуляция это один из столпов ооп.

> порождает ворох проблем из-за стейта


Еще раз. ООП ничего не говорит про стейт. Стейт привносят говнокодеры там, где он не нужен, а потом задаются вопросом КАК ЖЕ ЭТО НАЗЫВАЕТСЯ ТЕСТИРУЕТСЯ?
Вот типа такой хуйни
>>73889
305 1182217
>>82209

> Объект кошка предполагает, что он умеет мяукать, жрать и срать - удовлетворение контракта кошки. Всё.


тогда хватит статик методов, без создания объектов.
А если нужна кошка1 и кошка2, и они должны отличаться в один момент времени - это значит внутри стейт.
Так вот, создание объектов, создание кошки1 и кошки2, предполагает наличие у этих объектов состояния. Иначе нет смысла создавать объекты, можно просто статик методы хуячить.

>Стейт, может быть, может не быть и может быть недоступным наследниками.


наследник может сломать метод своего предка. Т.е. нарушена инкапсуляция, метод можно сломать извне

>Ты упорот там? Инкапсуляция это один из столпов ооп.


Скорее это столп функциональщины. Только функциональщина предполагает чёткий контракт и чёткий набор входных параметров

>ООП ничего не говорит про стейт. Стейт привносят говнокодеры там, где он не нужен


ООП это стейт. Пчёлы это мёд. Не бывает пчёл без мёда
306 1182221
>>82185
Он написал хуйню.
Не стоит этому завидовать.
307 1182223
>>82221
отличная аргументация
308 1182225
>>82156
Не надо использовать аннотации.
Там есть xml маппер.

И да, если ты не понимаешь, зачем всё это, и чем это лучше хибернейта, то тебе это просто не надо.

Речь шла не о том, что хибернейт не нужен, а о том, что не стоит его использовать повсеместно.
309 1182226
>>82217

> тогда хватит статик методов, без создания объектов.


Ебать у тебя отрицание пошло, уже до процедурщины скатился.

> А если нужна кошка1 и кошка2, и они должны отличаться в один момент времени


Да што ты? Кошка1 и кошка2 это кошки и обращаться с ними можно как с кошками. Если кошка2 требует для работы ниибацца стразы как у того кузнеца, то она должна быть реализована отдельным сортом кошки. Или вообще не кошкой, если не тянет. Стейт тут не при чем.

> наследник может сломать метод своего предка. Т.е. нарушена инкапсуляция, метод можно сломать извне


А-а-а, нихуя. Это лишь будет сломанный сорт наследника. К нему по-прежнему можно обращаться как к предку, вот только хуйова он будет все делать. Ну такой наследник, щито поделать, ничего неожиданного в рантайме.

> Скорее это столп функциональщины.


Вот тут ты спалился, что вообще нихуя не разбираешься в ООП и ФП. Сейчас ты открываешь википедию и читаешь про ООП. Подумай почему инкапсуляция является первейшей парадигмой.
Потом открываешь статью про ФП и неожиданно узнаешь, что оно про функции, а не про объекты.

> ООП это стейт


Повторение аргумента не усиливает его. Особенно если он некорректен. Пиздуй читать википедию.

И когда устроишься на свою первую работу - не увлекайся стейтфул дрисней, бо обоссут нормальные программисты.
 .jpg49 Кб, 600x604
310 1182230
>>82221

> ебанаты в зк


> на острие отрицания классических практик юнит-тестирования

311 1182233
>>73657 (OP)
Хочу программить на джаве, но у меня ХР стоит и ни чего с оф. сайта не устанавливается, подскажите что от куда скачать надо что бы на хрюшу установилось. Спс.
312 1182234
>>82230
юнит-тестирование это далеко не абсолютное добро
313 1182236
>>82225

>Там есть xml маппер


тоже текстом?
Я и говорю, что лучше код чем текст

>И да, если ты не понимаешь, зачем всё это, и чем это лучше хибернейта, то тебе это просто не надо.


Я не понимаю чем это лучше простого JdbcTemplate
314 1182237
>>82234

> Сам сказал очевидность - сам с собой согласился.


Как там, солнце еще встает на востоке?
315 1182240
>>82226
окей. Зачем тогда создавать две кошки? Может есть какая-то причина?
Если они совершенно одинаковые, то хватит и одной кошки

>Это лишь будет сломанный сорт наследника. К нему по-прежнему можно обращаться как к предку, вот только хуйова он будет все делать. Ну такой наследник, щито поделать, ничего неожиданного в рантайме.


т.е. нужно повторно тестировать все методы предка в наследнике? Это и есть нарушение - оттестированные методы можно сломать, и нужно постоянно проверять на работоспособность старый оттестированный код
316 1182242
>>82237
адепты почему-то думают, что любое тестирование это абсолютное добро. И чем больше тестирования тем лучше
317 1182250
>>82234
У нас есть что-то получше? Можно, конечно, просто взять и договориться писать без багов.
318 1182251
>>82240

> окей. Зачем тогда создавать две кошки? Может есть какая-то причина?


Нужны разные кошки. Одна серая, другая красивая, третья мяукает охуенно.
Например стратегия доступа к данным. Одна к кассандре, другая к жбод какахе. Обе реализуют один интерфейс. Не стоит делать один объект с двумя по сути одинаковыми методами. Это чтобы ближе к телу аналогия.

> т.е. нужно повторно тестировать все методы предка в наследнике?


Нужно тестировать выполнение ожидаемого от объекта контракта. Выполнение контракта происходит - заебись, погнали дальше. Нет - ti okhuel blyat.
>>82242

> тестирование не нужно


Иди нахуй.
319 1182252
>>82250
покрытие 100% это зло например.
Многократное дублирование логики, затруднение правок
320 1182256
>>82251

>Одна серая, другая красивая, третья мяукает охуенно.



cat1 = new Cat(grey)
cat2 = new Cat(white)
cat1.fuck(cat2)

или ты на каждый цвет будешь делать наследника?

И чистые функции с другой стороны
boolean fuckTwoCats(cat1Color, cat2Color){
}
321 1182258
>>82236

>Я не понимаю чем это лучше простого JdbcTemplate



Тем, что это не Spring?
322 1182259
>>82256
Не паясничай. Я привел тебе конкретные живые примеры. Могу привести еще.
323 1182263
>>82252
Ебать ты долбоеб, братишка. Земля тебе пухом.
324 1182265
>>82252
И отличная иллюзия того, что багов нет.
325 1182266
>>82147

>никуда без выгрузки всего графа объекта? Так делать нельзя в любом случае


ORM не заставляет тебя выгружать весь граф объектов
 .png6 Кб, 360x360
326 1182269
>>82258
Что не так со спрингом? Отличные микрофреймворки для построения микросервисов и работы с конкретными доменными сферами.
327 1182270
>>82259

>Я привел тебе конкретные живые примеры


примеры наличия стейта в объектах?
328 1182272
>>82265
самое главное. Если есть заветная цифирка 100% - значит багов нет, блябуду
329 1182274
>>82266
он создан именно для этого. Для реляции объектов на базу и обратно. Т.е. на заполнение графа связей объектов
330 1182277
>>82270
За лишний стейт, и что ооп не про стейт, а про парадигмы ооп и про объектное представление данных тебя уже обоссали.
Ты кукарекнул зачем создавать две создавать две кошки и какая этому причина и я привел конкретный пример стратегии доступа данным, объединенных одним кошачьим интерфейсом.
>>82274
Еще один.

Или ты один анон?
331 1182278
>>82277

>Ты кукарекнул зачем создавать две создавать две кошки и какая этому причина и я привел конкретный пример стратегии доступа данным, объединенных одним кошачьим интерфейсом.


ты привёл пример необходимости стейта у объектов. Как ты будешь выражать цвет кошки?

>а про парадигмы ооп и про объектное представление данных тебя уже обоссали.


ты сам себя обоссал

>Или ты один анон?


таки да
332 1182279
>>82269

> микрофреймворки


> микросервисов


Можешь привести пример (дать ссылку) минимального приложения на спринг - опубликовать один маленький pojo как веб сервис?
Хотелось бы сравнить с Baratine.
333 1182280
>>82279
шо оно делает?
334 1182281
>>82278

> ты привёл пример необходимости стейта у объектов.


Да ты же сам с собой общаешься! Читаешь не то, что тебе отвечают, а то что тебе хочется читать. Впрочем, причины понятны - ты просто не понимаешь, в силу низости интеллекта, что тебе говорят.

> ты сам себя обоссал


> таки да


Хах, так и знал. Не понимает ООП, несет какую-то хуйню, отрицает необходимость и ограничения сферы использования ОРМ, мелкобуква. Надо было сразу послать необучаемого егорку-долбоеба нахуй и не тратить на тебя время.

Сколько лет сижу на бордах, но ни разу правило не нарушалось - если он мелкобуква, значит он в итоге окажется идиотом. Никаких исключений за годы. Все начинается с мелочей.
>>82279
Гугли spring data rest - пишешь модель и интерфейс репозитория и в рантайме будут тебе и реализация репозитория, и круд какахень реста.
335 1182284
>>82281
это саморефлексия такая?
Я тебе уже пятое сообщение талдычу, что объекты это стейты, ради стейтов объекты и делают
Несколько кошек потому-что они разные кошки, разность выражается через стейт. Стейт можно менять
Что тебе тут непонятно?
336 1182299
>>82281

>spring data rest



Погуглил.
Хуйня какая-то.
Где там публикация _pojo_ как веб-сервиса?

В этом вашем спринге на каждый пук - тугая струя какой-нибудь бессмысленной хуйни.
Очень напоминает гуглоподелия.
Кстати, Гугол его не купил ещё?
337 1182301
>>82299

>spring data rest


это очередная магия по генерации sql/hql из названия методов. Зачем это нужно? Хз как по мне. Очередная "крутая" хрень для хэллоуворлдов
338 1182309
>>82301
Не нужна. Но есть, раз анон просил.

В продакшене если так уж нада существуют data api платформы, но с ними есть нюансы.
339 1182312
>>82301

>Очередная "крутая" хрень для хэллоуворлдов



У меня такое ощущение от спринга в целом, лол.

Я понимаю, что я не совсем прав, наверное, но ощущение именно такое.
Представляю, насколько это всё раздувается в реальных больших проектах.
340 1182325
>>82279

>минимального приложения на спринг - опубликовать один маленький pojo как веб сервис?


Иными словами, hello world rest?
https://projects.spring.io/spring-boot/
Для реактивных хипстеров теперь еще есть webflux
341 1182328
>>82274
Таки а в слове весь тебе какая часть была непонятна?
342 1182350
Вряд ли смогу внятно описать, но хуй с ним. Я не программист по специальности\рабочему опыту, но лет 10 говнокожу по настроению всякие говномодики к играм выше уровня "заменить 10 единиц урона на 15", писал свои скрипты к арме и т.п. Есть небольшой опыт разработки на шарпе и яве. Есть общее понимание основ ООП за рамками академических задач. Но блядь, вот решил снова обновить знания по яве, попытаться перекатиться с текущей практически чисто менеджерской должности в более рабочую. Начал с сортировки пузырьком и обосрался сразу же. Нет, саму сортировку я написал за 15 минут без проблем, появилась идея визуализировать, сохранив все промежуточные варианты массива в лист и отрисовывать. Сохранял тупо через List<> array; array.add(currentSortArray) в конце каждой итерации сортировки. В результате я получил 86 одинаковых массивов и долго скреб тупую башку - почему. Потом вспомнил о такой замечательной фразе как "ссылочный тип". В чем вопрос - я постоянно проебываюсь не на незнании алгоритмов(хотя понятное дело там тоже не блещу), а на уровне понимания, как работает конкретный язык в целом, видимости, типизация, етс. Как это можно эффективно починить, кроме как поработать в разработке 2-3 месяца?
343 1182354
>>82350
Только практикой, как ещё?
Читать теорию без практики - бессмысленно.
Алсо, большинство вещей, обычно не понимаемых ньюфагами - не специфичны для конкретного языка.

И да, не стоит слишком много и сразу от себя хотеть. То, что ты только что рассказал - совершенно нормально.
344 1182376
>>82350
Ты слишком строг к себе. Всё, что ты написал, нарабатывается практикой. Могу посоветовать использовать листик и бумажку с некоторыми алгоритмами, чтобы буквально видеть что должна вывести программа, и что она выводит на самом деле.
345 1182393
>>82376
Проблема была не в алгоритме, а в моем незнании, что массив является ссылочным типом, очевидно, что такой проеб на собесе = вылет с него нахуй. И при этом я наверняка смотрел видос с полгода назад, писал на это код, но снова забыл из-за неиспользования, а ведь типы это азы. Старый даун похоже, нихуя не запоминаю последнее время, даже что постоянно делаю.
346 1182397
>>82393
После определенной итерации проеба ты будешь вспоминать, почему он может возникнуть. Просто больше пиши и, что самое главное, постоянно.
347 1182439
>>82393
Так чего ты так зациклился на ссылочных типах, все что не примитив - ссылка. Если метод не возврщает объект, то это может быть мутатор и тд.
348 1182828
сап, джавач! Есть вопрос, но сначала ввводная: есть две сущности, отношение oneToMany, есть два CrudRepository для них(стандартные jpa.repository просто интерфейсы). Возникла такая задача - удалить последнюю сущность(из тех, которых м.б. много). Как это лучше сделать? В том месте в коде, где возникла задача удалить - брать первый репозиторий, вытаскивать всю коллекцию элементов(которые Many), узнавать размер коллекции и удалять? Или логичнее расширить интерфейс, добавить метод и в нем уже делать все эти операции? Или вообще возможно написать код на HQL?
349 1182849
>>82828
Орнул чет. Яркий пример встречи с реальностью человека для которого орм это серебряная пуля и избавление от sql.

order by id desc
limit 1;
350 1182877
>>82849
Ну вроде не осталось на планете людей, которые топят за ненужность знания хоть каких-то основ sql даже при работе с орм. Но этот и правда совсем макакен.
hash.PNG22 Кб, 573x358
351 1182901
Сап анон
Подскажи пожалуйста, можно ли реализовать запись 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());
}
}
hash.PNG22 Кб, 573x358
351 1182901
Сап анон
Подскажи пожалуйста, можно ли реализовать запись 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());
}
}
Построение графиков 352 1182931
Сап, погромиздач, подскажите, пожалуйста, хорошую библиотеку для построения графиков на джаве яве. Смотрел jfreechart, но инфе по ней ноль.
353 1182937
>>82901
Если формат типа такого:
Book1;true
Book2;false
То бери от сканнера nextLine, а потом split по ;
354 1182940
>>82901
А какой в этом смысл?
Почему бы не набрать всё в файл, а потом прочитать?
355 1183006
>>82901
Используй хэшмап вместо хэштейбла. Загугли причину.
Ты добавляешь книги в свой bookArray, но не используешь его. Зачем?
Пикрил.
357 1183055
>>82931
Вот это годнота https://canvasjs.com/
358 1183086
>>83055
Огромное тебе спасибо.
359 1183212
Как вы помните, такие модули, как 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 официально отдана эклипсу и больше не будет поддерживаться? Объясните на пальцах, что это значит вообще.
360 1183216
>>83212
Эти модули выкидывают из jdk. Даже интерфейсы. Ну и да, с подключением.
361 1183217
>>83216
Так и как теперь интерпрайз делать? Грузить все лабы с левых репозиториев? Старый интерпрайз код на новой джаве не взлетит? И нахер это все делать, если джава только на ее и выживала.
362 1183222
>>83217

>джава только на ее и выживала


Охуительные истории, браток.
Хочешь поддерживать ЕЕ легаси - не меняй версию на проекте.
363 1183254
>>83217

>Грузить все лабы с левых репозиториев? Старый интерпрайз код на новой джаве не взлетит?


Из Java SE (jdk) выкидывают куски Java EE, которые там зачем-то были. Из самих EE-серверов они никуда не денутся. В любом случае с репозиториями в чем проблема? Грузи не с левых.

>Так и как теперь интерпрайз делать?


Как и раньше, на спринге.
364 1183301
>>82078

>но в большинстве крупных проектов без orm никуда


Ты понимаешь, что это убогая попытка адаптировать реляционные отношения и реляционную алгебру к объектам в Джаве? Типа, в начале удобно, точнее, иллюзия удобства, а потом огребаешь кучу багов, многие из которых еще и хуй найдешь.
365 1183304
>>82147
Погугли про lazy load что-ли. Хибернейт ему выгружает весь граф видите ли, ну охуеть
366 1183315
>>83304
Вначале подключаешь инструмент, а потом блокируешь его функциональность. Очень удобно.

Добавлю, что с этой лэйзи очень много ебли. Думаешь просто-так по-умолчанию стоит игер?
367 1183331
>>83315

>Думаешь просто-так по-умолчанию стоит игер?


Думаю, просто так. С дефолтным lazy было бы гораздо лучше
368 1183335
>>83007
Благодарю анон!
369 1183337
>>83301

>попытка адаптировать реляционные отношения и реляционную алгебру к объектам в Джаве


Это всего лишь маппинг результатов выполнения запросов в объектную модель. Внезапно, реляционная модель хорошо вписывается в ОО.

>огребаешь кучу багов, многие из которых еще и хуй найдешь


Не было значимых проблем ни на одном проекте. Возможно потому, что читали доки и понимали, что вообще происходит, а не пытались наговнять что-то работающее. Попробуй, рекомендую.

>>83315
Если для тебя орм - это хуяк хуяк и наконецта появились какие-то объектики в выполнении - да, конечно, отключение lazy loading'а может выглядеть как

>подключаешь инструмент, а потом блокируешь его функциональность

370 1183340
>>83337

>Это всего лишь маппинг результатов выполнения запросов в объектную модель


всезапно, это решает один написанный маппер. ОРМ снова не нужна

>Не было значимых проблем ни на одном проекте


значит это галера с гостевыми досками. Нахуячили что-то работающее, сдали, а дальше хоть трава не расти

>Если для тебя орм - это хуяк хуяк и наконецта появились какие-то объектики в выполнении - да


а для чего ещё?
371 1183347
Аноны, которые тут хейтят хибернейт (и вообще ORMы), поделитесь опытом, как вы без него живете. С одной стороны, понятно, сложный и опасный инструмент, нужно уметь обходить грабли, и это подзаебывает. С другой стороны, в этом нашем ынтерпрайзе бывают OLTP-системы, которые жонглируют огромным количеством связанных сущностей; допустим, есть у меня сущность типа "заказ", N связанных сущностей с фактами об этом заказе и дохера бизнес-логики, в которой в разных местах нужно вытаскивать этот заказ и что-то из этих N в разных комбинациях и по разным условиям.
И вот смотрю я на это и думаю - если писать каждый необходимый запрос на голом SQL (или даже на jooqе), не заебусь ли я еще больше, чем от хибернейта. Вы делали что-то подобное без ORM? Жив ли брат?
372 1183348
>>83347
Хэйтящие инструмент, при этом даже не спрашивая область применения и проект - это либо фанатики, либо студентики, у которых споры на тему самого лучшего языка программирования уже стихли, но мозги пока не проклюнулись. Спорить бесполезно что с одними, что с другими, один хуй ничего из себя не представляют.
373 1183349
>>83340

>а для чего ещё?


Больше вопросов нет, откланиваюсь.
374 1183350
>>83347

> N связанных сущностей с фактами об этом заказе и дохера бизнес-логики, в которой в разных местах нужно вытаскивать этот заказ и что-то из этих N в разных комбинациях и по разным условиям.


а хибернейт думаешь магией оперирует? Он либо достаёт все связанные объекты (на каждую связанную сущность отдельный запрос) и помещает это в память (тут главное не проебаться, чтобы он не начал тащить лишнего), либо опять-же надо писать запросы на hql, который хуже чем голый sql
375 1183351
>>83349
скатертью по жопе
376 1183353
>>83350

>Он либо достаёт все связанные объекты (на каждую связанную сущность отдельный запрос)


Отличная история. Если ты не нахуевертил с конфигом, то запросы будут оптимизироваться, исходя из того, что один большой запрос выгоднее сотни мелких.
377 1183355
>>83353
нихуя. У меня оно хуячило сотнями мелких
 .webm1,1 Мб, webm,
720x480, 0:05
378 1183360
>>83355
Ты бы хоть книжку почитал, понял бы почему.

Хотя, не уверен, что ты умеешь читать.
379 1183362
>>83360
т.е. надо читать книжку, чтобы заставить "инструмент" не косячить. А баги там исправлять случайно не нужно?
380 1183363
>>83212

>Что же касается JavaFX


Ну, я ещё хуй знает когда говорил, что Оракл слил это дело.

Формально они это заопенсорсили, типа - кому надо - пишите.
Ни компонентов нормальных, ни хуя вообще нету.
И в опенсорсе такие вещи не появляются, это слишком дорого.
Короче - пизда FX'у.

Да и хуй с ним.
Мертворожденная хуета.
Кому оно нравится, те просто не пробовали писать ничего серьёзного на нём.

Зато Swing будет поддерживаться минимум до 26 года.
И дальше будет, я думаю, куда эти бляди денутся, лол.
381 1183367
>>83362
Если ты себе в ебло лопату вколачиваешь, то это не вина инструмента.
Такие потом и кричат, что орм - это сложна, поэтому нинужна.
382 1183369
>>83367
мартышки плакали, кололись, но продолжали жрать кактус
383 1183373
>>83362

> т.е. надо читать книжку, чтобы использовать инструмент

384 1183374
>>83350

>а хибернейт думаешь магией оперирует?


Хибернейт вполне реально заставить вытаскивать только то, что тебе нужно в данный момент (если не ставить везде изначально eager), причем джойном. Но да, для этого надо не быть дебилом и читать книжку, отсюда оговорка про сложность инструмента. По своему опыту я скорее склоняюсь к тому, что для многих проектов эту сложность оправдывает отсутствие необходимости писать руками миллиард sql-запросов, но послушал бы success story полностью отказавшихся от ORM.
385 1183377
>>83304

> lazy load


Лютая хуита. Если мне и надо будет использовать ORM, я всегда буду отключать эту хуйню и загружать данные исключительно ручками (оно же eager loading).
386 1183381
>>83377

>загружать данные исключительно ручками


>eager loading


Слишком толсто
387 1183388
>>83381
Что толсто? Конкретно в жаве я с ORM дело не имел, однако в EF можно было либо загрузить только основные данные, а косвенные данные (например ссылка на другой замапленный объект) он загружал по первому запросу (что и есть ленивая загрузка), либо ещё при загрузке начальных данных указывать какие косвенные данные надо сразу загрузить (это и называлось eager loading). И ленивую загрузку я всегда отключал, ибо нинужно.
388 1183390
Почему в javafx нельзя использовать обычные css-свойства? Тупо сделали, так лень свою тему под приложение пилить.
389 1183414
>>83388
В контексте >>82147 на которые ты отвечал, lazy относилось к описанию связей на уровне сущностей, а не на уровне конкретного запроса. Это нужно, чтобы случайно не вытянуть полБД в нагрузку к одному объекту. Т.е. в хибернейте "загружать данные ручками" (а это единственный здоровый вариант) означает поставить для всех связей lazy и описывать на уровне запроса, какие связи подтягивать, о чем и шла речь.
390 1183453
>>83374

>но послушал бы success story полностью отказавшихся от ORM


Начинал проект на хибернейте. Как вышло в прод - полезли пиздецы.
Например : оператор открывает карточку заказа, в это время водитель берет заказ, меняя у него статус. Оператор нажимает сейв, и объекту ставится старый неактуальный статус. Водила жалуется, что у него пропал взятый заказ.
Ставить блокировку при открытии карточки заказа? Нельзя, водилы будут жаловаться, что приложение зависло.
Как решил? Сделал отдельный метод для операторской правки - оно правит только нужные поля, и метод для взятия заказа - оно правит другие поля.
Как это сделать хибернейтом? Я не знаю. Хибернейт апдейтит все поля разом.

Дальше. Перед отправкой объект надо преобразовать из entity формата бд в dto формата клиента. Я делал это через конвертер.
Т.к. запросов было много, это преобразование кушало очень много памяти. Сделал jdbc маппер, чтобы оно конвертило сразу в dto внешней системы. Потребление памяти упало вдвое.

Постоянные запросы сущности по ид. Хуй знает кто их вызывает, и они были в огромном количестве. Избавился от них только отказавшись от хибера, написав все запросы руками. Тоже упало количество запросов к бд вдвое, снизилась загрузка цп.

Как нормально делать? DAO для каждой сущности, внутри методы получения этой сущности по определенным полям.
Если сервис методу нужны какие-то сущности, то он через эти dao их получает
391 1183472
>>83315
Не блокируешь, а корректируешь. Дефолтные настройки подойдут для сэмплов и небольших проектов, а дальше уже тюнишь постепенно, сперва lazy load, потом 2nd level cache, потом и до чистого sql доходит в критичных местах
392 1183473
>>83453
Всё правильно.
Explicit is better than implicit и всё такое.
Но школоте и мамкиным сеньёрам похуй, разумеется.

Особенно интересным такое кино становится, когда тебе надо одновременно работать с двумя физическими БД в одной транзакции, например.

>DAO для каждой сущности


Сейчас набегут модные девелоперы на гироскутерах из кофешопа и, расплёскивая смузи, расскажут, как сильно ты отстал от моды.

Недавно только читал такое в одной книжке.
DAO is old fashion, suka bljad.
393 1183478
>>83453
Спасибо. Собственно, самый интересный вопрос тут - что в конечном счете оказалось бы эффективнее по трудозатратам, научиться готовить хибернейт (к примеру, апдейтить не все поля в нем можно, но в hello world примерах, конечно, об этом не пишут, надо копать) или писать все на jdbc.
394 1183479
>>83453

> Оператор нажимает сейв, и объекту ставится старый неактуальный статус. Водила жалуется, что у него пропал взятый заказ.


> Ставить блокировку при открытии карточки заказа?


Открой для себя оптимистичную блокировку. И с прямым sql проблема будет, кстати та же самая.

> Хибернейт апдейтит все поля разом.


Открой для себя удивительный мир dynamic update.

> Перед отправкой объект надо преобразовать из entity формата бд в dto формата клиента. Я делал это через конвертер.


> Т.к. запросов было много, это преобразование кушало очень много памяти.


Это может косвенно свидетельствовать, что у тебя не очень с реляционным дизайном и сущности слишком большие. Но так или иначе, запрос только конкретных колонок никогда не был плохой идеей и orm тут не при чем. Если ты запрашиваешь всю сущность, а нужно тебе треть колонок, то это просто вейстинг памяти, никакой магии тут нет.

> Постоянные запросы сущности по ид. Хуй знает кто их вызывает, и они были в огромном количестве.


Так и не увлекайся запросами сущностей по id. В половине случаев можно сразу апдейтить с допиленным where.

> Как нормально делать?


Персистенс слой дао/репозиториев, сервис, работающий с ним. Остальное работает только с сервисом. Никакого неконтролируемого доступа всего ко всем.

И важно понимать, что orm это инструмент для круда и сохранения графа объектов. Для всего остального есть прямое написание sql (не важно через билдеры или напрямую юзать jdbc). И в реальных высоконагруженных проектах используется и орм, и прямой sql, а не как обычно бывает - начинают юзать орм, нихуя его не понимают, начинают лепить аналитические запросы, хуйню-говно, все тормозит, орут, что орм говно, все запросы переписывают руками и сидят в говне довольные.
395 1183480
Анончики, бытует мнение, что на джаву сейчас стараются не брать как основной язык для стартапов. Берут всякие Nodejs и прочее. Так ли это ?
396 1183485
>>83480
Нет, не так.
Все как и всегда зависит от компетентности и отмороженности того, кто принимает решение.
Инструменты выбираются по назначению, под конкретную задачу. Серебрянной пули нет и не было.

веб-фулстек разработчик с 15+ стажем
397 1183500
>>83480

>для стартапов



Для стартапов язык не так важен.
Важнее краудфандинг через ICO смарт-контрактов на Ethereum.

Гироскутер у тебя есть?
А макбук?
Ближайший кофешоп далеко?
Смузи любишь?

Вот об этом надо думать, а не о языках.
Serverless architectures.
Languageless development.
Вот это вот всё.
398 1183527
>>83500
Кек, а на деле обычно берут то, что вся команда умеет.
400 1183557
>>83538
Это в тред it-неудачников в воркаче.
401 1183569
Анончики, посоветуйте почитать по аспектам в спринге, чтоб с хорошими примерами кода для копипаста.
402 1183572
>>83485
Легенды о золотых молотках живут в наших сердцах.
403 1183582
>>83569
Смотри Spring-потрошитель на ютубе, более чем достаточно
404 1183584
>>83480
для стартапов на первом этапе очень важна скорость разработки чтобы выкатить что-нибудь в прод как можно раньше. для этого подходит какой-нибудь nodejs и прочие. т.е. для прототипирования. потом при необходимости можно уже переписывать на что-то серьёзное
405 1183586
>>83353
хуй там плавал. от n+1 можно избавиться только с помощью jpql
406 1183587
>>83453

>Например : оператор открывает карточку заказа, в это время водитель берет заказ, меняя у него статус. Оператор нажимает сейв, и объекту ставится старый неактуальный статус. Водила жалуется, что у него пропал взятый заказ.


Я или не понял проблему, или ты сделал какую-то хуйню. Разве это не случай optimistic lock. Вводишь версионную колонку и всё. В твоём случае когда оператор нажимает сейв, у него выкинется optimistic lock exception, можно предложить в этом случае обновить данные. Это же базовый сценарий
407 1183590
Анон, поймал себя на том, что все еще пишу на 8 джаве и на 9 и 10 не обращаю внимания. Подскажите каких-то источников, гле подробно(желательно с примерами) показывают что нового завезли в этих версиях
408 1183592
>>83590
Нет, не много. Зато много сломали. Жди 11 жаву и уже после её выхода думай о перекате.
409 1183593
>>83590
У меня аналогично. Жди LTS осенью
410 1183594
>>83587
Это может быть и случай, когда реально никто ничего одновременно не апдейтит, т.е. lock не нужен, но хибернейт перетирает поля просто потому что может. Спас бы @DynamicUpdate, как тут уже писали.
411 1183613
>>83590
То же самое.
Оракл решил позаниматься хуйнёй и попилить бюджет и наши нервы.
412 1183652
>>83590
Jshell завезли для автотестов, и все в общем-то. Половина библиотек на 9 и 10 не работает.
413 1183666
В контроллере, RequestParam и PathVariable лучше принмать как примитивы или врапперы? Я такой, что лучше б примитивы получил, но увидел что очень многие именно врапперы принимают и подумал, а вдруг там изначально враппер и оно аутобоксить будет
414 1183683
>>83666
Смотря что у тебя за фронт
На перформанс оно не влияет особо
415 1183707
>>83652

> Jshell


И какой в нём смысл, если есть груви?
416 1183709
>>83453
А на чём у тебя сделан интерфейс?
417 1183721
>>83709
Смартфоны для водил и делфи (молчать) для диспетчеров. И тем и тем отдаю json по http
418 1183725
>>83453
Т р а н з а к ц и я
419 1183745
>>83721
А на смартфонах?
Веб?
420 1183747
>>83745
нет, программа
421 1183748
>>83725
Я не он, но спрошу - каким хуем здесь замешана транзакция?

Тут или блокировки/версии на уровне БД (как пишут выше), или блокировки на уровне логики приложения.
Выбор зависит от задачи.

Например, блокировки на уровне БД не подходят, если мы не хотим, чтобы набив форму строк на 300 человек вдруг увидел, что не может её сохранить, и должен набить заново. Людям такое не нравится.

Или ты хочешь, чтобы транзакция висела открытой неопределённо долго?
422 1183762
>>82350

>List<> array; array.add(currentSortArray)


Ты там List<Integer[]> array = new ArrayList<>() наговнякал что ли? о_О
Пиздец у тебя насрано в голове, земля пухом. Читай блядь любой базовый гайд по жабе, ты букваря считай не знаешь.
423 1183775
Sup джавач
Есть господа с ебрама, которые могут пояснить недоджуну за з/п на L1?
faggot.jpg29 Кб, 367x451
424 1183780
>>83721

>делфи


АХАХАХАХАХАХА
425 1183786
>>83780
делфи лучше современной веб-параши, с точки зрения бизнеса. Да и разработки.
Если именно десктоп нужен
426 1183794
>>83337

>Внезапно, реляционная модель хорошо вписывается в ОО.


Доставь примеры наследования из реляционной модели.
427 1183799
>>83794
Таблица ссылающаяся на таблицу базовой сущности. Наследуемые поля пишутся в базовую, специфичные для дочернего класса - в новую.
428 1183800
>>83340

>это решает один написанный маппер


Ну да, MyBatis например. А эта хуйня кривая, которая что-то там без твоего ведома подгружает или сохраняет/удаляет, нахуй не нужна.
429 1183801
>>83347

>если писать каждый необходимый запрос на голом SQL (или даже на jooqе), не заебусь ли я еще больше, чем от хибернейта


Проблема современных кодеров в том, что они не могут в SQL. Поэтому для них Hibernate кажется чем-то охуенным. А все дело в кривых руках, на самом-то деле.
430 1183806
>>83353

>Если ты не нахуевертил с конфигом, то запросы будут оптимизироваться, исходя из того, что один большой запрос выгоднее сотни мелких.


Ты, братишка, даже основы баз данных не осилил, поэтому для тебя SQL и реляционная модель - эта сложна. Тебе привычнее и понятнее пердолиться с объектиками. Поэтому ты и возбудился на критику Hibernate. Ну да ладно, земля тебе пухом.
431 1183807
>>83367

>то это не вина инструмента


Нет ни одной задачи, для которой подходит Hibernate. Следствие --> он не нужен.
432 1183810
>>83453

>Оператор нажимает сейв, и объекту ставится старый неактуальный статус.


Optimistic locking.
433 1183812
>>83799

>Таблица ссылающаяся на таблицу базовой сущности.


Вот ведь хуйня какая: в реляционной модели эти две таблицы будут разными типами, а в объектной - coercible.
434 1183813
>>83810
да, только сейчас об ней прочитал.
Но всё-равно это плохое решение: у диспетчеров зарплата зависит от скорости работы. А тут постоянно будет вылетать ошибки и постоянно нужно заново заполнять поля данными, которые они уже забыли.

DynamicUpdate хибернейтовское лучше бы подошло. Тоже только сейчас об нём узнал.
При этом главное - следить, чтобы поля для водилы и для диспа не пересекались.
435 1183843
>>83801

>Проблема современных кодеров в том, что они не могут в SQL


Если кто-то может в SQL, обязательно ли это значит, что ему нужно, как покорной макаке, соглашаться набивать на нем руками 145 однотипных джойнов и апдейтов? Может ему лучше приберечь свои охуенные знания SQL для чего-то более стоящего вроде развесистых аналитических запросов?
436 1183847
>>83843

>145 однотипных джойнов и апдейтов?


что за мифы. Лор например написан без хибернейта. Можешь посмотреть, есть ли там 100500 однотипных джойнов

https://github.com/maxcom/lorsource
437 1183868
Аноны, как мне вытащить именно 10 строку из файла ("file.txt")?
438 1183877
>>83868
попробуй так
https://ideone.com/JDHBy5
439 1183878
>>83847

>что за мифы


Это реалии жирного ынтырпрайза, с которым мне приходилось иметь дело. Для коментов на сайте может быть и не 100500, да.
Но вот возьмем даже этот lorsource. Там около 25 dao, открываем PollDao и видим штук 15 строк типа
private static final String updateMultiselect = "UPDATE polls SET multiselect=? WHERE id=?";
25 умножаем на 15... Уже достаточно работы для SQL-эксперта.
440 1183882
>>83878
точно такие-же запросы придётся ебашить на ублюдочном hql
441 1183893
>>83882
Как минимум большую часть (но не все, да) апдейтов не придется ебашить, будешь вместо этого сеттеры сущностей вызывать. А простые селекты с джойнами писать на criteria сильно приятнее, чем на sql.
442 1183902
>>83843

>как покорной макаке, соглашаться набивать на нем руками 145 однотипных джойнов и апдейтов?



Про то, что код, особенно однотипный, можно генерировать, ты слышал когда-нибудь?
Попробуй - понравится.
443 1183907
Как сделать чтобы BufferedReader readLine не блочил все ?
У меня оно только одну строчку с клиента принимает и все
444 1183908
>>83786
Ничего плохого в дельфи нет.
Если речь идёт о формошлёпстве.

Но, как быть с деплойментом?
Свинг в виде апплета или вебстарта - это несколько другой уровень.

Хотя, если у тебя одна точка, и приложение лежит на сетевой шаре, то похуй, конечно но, всё равно неудобно.

И, в случае java-java, можно использовать Hessian в качестве протокола, а это совсем уже другой уровень.
Для андроида, он вроде-бы, тоже есть, я просто не пишу под андроид.
445 1183911
>>83908

>Hessian


бинарный проприетарный.
Спасибо, не надо

>Но, как быть с деплойментом?


В ярлыке было прописано автообновление из шары. Не знаю, это виндовая фишечка или дельфовая

>Свинг в виде апплета или вебстарта - это несколько другой уровень.


свинг сыроватый. Я все эти веб-аппликухи, они медленные по сравнению с десктопом. И сыроватые
446 1183913
447 1183921
Сап ентерпрайзач. Есть два glassfish'а, один локальный, другой на серваке. Также есть две JRE, обе 1.8.., локально приложуха показывает нормальное время в нужной таймзоне, а на серваке на час позже. Я не будь дурак, запилил кусок с Calendar.getInstance().getTime(), залил на сервак и скомпилил его той же явой. И он, сука, показал правильное время и ТЗ, получается дефолтная ТЗ jvm правильная. Т.о показывает неправильно только если задеплоить приложение на удаленный GF. Но в глассфише нет таких настроек, которые влияли бы на время. Что за хуйня? Хотя бы примерное направление может подскажете, гугл нихуя толком не выдал.
448 1183924
>>83902
Ну дык вот мне ORM по мере сил и генерирует. Посоветуешь какие-нибудь еще подходы к генерации SQL?
449 1183927
>>83921
проверь системное время на удалённом серваке
450 1183930
>>83911

>бинарный проприетарный.


Опенсорсный. И ему лет триста уже.
Что до бинарности - это плюс, а не минус - он компактный.
У них есть то же самое, но текстовое - Burlap.
Но, он редко нужен.

На самом деле - охуенная вещь.
Ты пишешь код так, как будто никаких веб-сервисов просто нет, и всё локально. Просто вызывешь методы интерфейса сервиса, остальное делает прокси. Асинхронность, естественно, руками делается - SwingWorker etc.

В спринге тоже поддерживается, кстати.

>веб-аппликухи


Свинг это десктоп.

>свинг сыроватый


Лол.
Староватый он, это да.
Но, всяко помоложе дельфи.
Компоненты - JIDE.

Понятно, что ты не будешь переписывать своё дельфи на свинг.
Это я скорее о том, как вообще делаются такие вещи.
451 1183931
>>83927
Само собой все ок.
452 1183932
>>83931
"неправильное время" при записи в базу? В БД тоже есть настройка часового пояса
453 1183934
>>83921
Если считать, что все упирается во встроенные в жабу таймзоны, то сравнивай для начала версии jdk/jre; именно на чем запускаешь, а не на чем компилируешь, компиляция тут вообще не при чем.
454 1183945
>>83924

>Посоветуешь какие-нибудь еще подходы к генерации SQL?



Примерно, как и в ORM - аннотации, потом рефлекшн и генерация SQL и прочего.
Можно находить свойства - геттеры-сеттеры и без аннотаций.
Руками или через Commons BeanUtils (PropertyUtils).

Если у аннотаций retention policy = class, или просто надо работать с class-файлами, то надо использовать что-то типа ObjectWeb ASM (http://asm.ow2.io/) вместо рефлекшн.

Так же можно, например, генерить код интерфейсов на TypeScript (для сериализации Java-объектов в JSON и использовании на клиенте в JS/TS), чтобы были подсказки в IDE, и т.п.
455 1183951
>>83932
Если б из базы бралось.
>>83934
Походу единственный вариант разгадать магию. Машинки в одной подсети, все бля одинаковое, даже ОС. Ява тоже, только ревизии, или что там, на пару циферок отличаются.
456 1183960
>>83951

>на пару циферок


Этого достаточно, лол.
Сделай простейший класс, который печатает текущее время. И запусти там и там.
457 1183967
>>83945

>Примерно, как и в ORM - аннотации, потом рефлекшн и генерация SQL и прочего.


Звучит как написать свой более правильный и легковесный ORM. Тоже вариант наверное.
458 1184003
>>83967
Я так генерирую xml для iBatis SqlMap.
А также прочее подобное, напр. XSD.

Можно и свой ORM написать, конечно, но, если только для общего развития.

Ещё можно написать тонкий слой поверх JDBC, чтобы не писать весь этот бойлерплейт каждый раз.
С лямбдами это стало вообще интересно.
Я имею в виду создание PreparedStatement, задание параметров, обработку ResultSet, автоматическое закрытие и т.п.
459 1184004
>>84003

>Ещё можно написать тонкий слой поверх JDBC


>создание PreparedStatement, задание параметров, обработку ResultSet, автоматическое закрытие


Это ты сейчас спринговый JdbcTemplate описал. С этим все понятно, но от написания запросов не спасает.
460 1184010
А причем Элвис Пресли к яве? Это ребус какой-то? Никак не могу разгадать.
461 1184011
>>84004

> но от написания запросов не спасает.



Ну, от этого спасает ORM, лол.

На самом деле, если приложение проектируется с нуля в 2018, если там одна БД, если всё под контролем, то, конечно, имеет смысл использовать ORM, заранее учитывая все его особенности.

Просто не всегда всё так радужно.
Java EE существует уже очень много лет.
Гораздо дольше, чем нормальные ORM или тот же спринг.
Также, бывают легаси БД, параллельно работающие с какой-нибудь хуетой, написанной на дельфи в середие 90-х, и т.п.
Поэтому и DAO на JDBC и iBatis и прочее.
462 1184022
>>84010
Я бы предположил, что это от того, что на яве пишут те, чья молодость пришлась на
463 1184024
>>84022
Те, чья молодость пришлась на, те на яве не пишут, те на яве катаются.
464 1184062
>>84011
Но ведь ORM должны использоваться как раз там, где нет четкой привязки к БД. Сегодня PG, завтра оракл.
465 1184096
>>84011
Не очень прослеживаю, как соображения про легаси противоречат ORM, ну кроме того, что сами ORM раньше были хуже.
И те, кто кричит, что хибернейт нинужен, они же явно не от того это делают, что на J2EE 1.3 сидят.
466 1184101
>>83921
Зачем ты продолжаешь кушать кактус Date/Calendar? Есть JodaTime, есть новое апи времени, есть бекпорт новго апи в конце концов.
467 1184102
>>83930

>Свинг это десктоп.


>


>>свинг сыроватый


>Лол.


>Староватый он, это да.


>Но, всяко помоложе дельфи.


>Компоненты - JIDE.


>


Зачем лезть в джава-онли протокол когда есть куча других, клиент может быть не только на ведре, но и веб, и гейос, почему нельзя просто пользоваться протобафом/жсоном....
468 1184103
>>84101
Ну ты еще спроси, зачем он glassfish кушает. Явно же не по своей воле.
sage 469 1184116
>>83951

> только ревизии, или что там, на пару циферок отличаются


http://www.oracle.com/technetwork/java/javase/tzupdater-readme-136440.html
470 1184179
почему на Java так неудобно сайты делать? Взять сайт или форум, например пикабу. Дык он на ПХП написан. Почему Java ничего не может предложить?
471 1184189
>>84179
Что конкретно неудобно?
472 1184192
>>84189
клиентскую логику на JS писать
473 1184199
>>84192
Что конкретно неудобно? Я прямо сейчас делаю курсовой проект с Реактом на клиенте и Спрингом на сервере. И они прекрасно дружат. Не знаю, может, есть какие-то критические неудобства, которые всплывают в настоящих проектах, но я пока ни с чем подобным не сталкивался.
474 1184231
>>84062

>Сегодня PG, завтра оракл.


В 99,99% случаев переезда на другую БД никогда не будет.
475 1184234
>>84231
у нас хотели с файрбёрда перейти на постгрес. Но останавливало огромное количество хранимок, которые надо переписывать и как-то тестировать
476 1184283
>>84231
Был один клиент, настойчиво просил перекатить все на постгрес. Перккотили. В итоге купил столько часов, что хватило бы лет на 5. Вроде бы и похуй, но это ещё с учётом того, что было написано с хибернейтом.
477 1184285
>>84231
В случае отдельного продукта имеет смысл не делать привязку к конкретной СУБД. У каждого пользователя БД менять не будет, но абстракция позволяет загнать такое ПО большему числу компаний.
478 1184338
>>84179
Начнём с того, что на джава-бэкенде можно писать сайты на ПХП (Quercus).
И что?

А есть ещё JSF и просто море всякой разной другой хуеты.
Чем это тебя не устраивает?

Есть Grails.

Ещё и jRuby есть (и рельсы тоже), и даже jython + Django, для совсем уж тонких ценителей.

Улавливаешь мысль?
479 1184343
>>83806
Мартыхан пытается угадывать. Чего только не сделаешь, лишь бы доку читать не пришлось!
480 1184347
>>83945

>Примерно, как и в ORM - аннотации, потом рефлекшн и генерация SQL и прочего.


>Можно находить свойства - геттеры-сеттеры и без аннотаций.


>Руками или через Commons BeanUtils (PropertyUtils).


А можно не писать велосипеды и использовать орм. Дисциплинированное использование любого вменяемого орм фреймворка даст то, что ты описал без каких-то подводных. Я понимаю, что всегда хочется наговнять своё решение, заточенное под конкретную задачу, но всегда ли это хорошая мысль?
481 1184351
>>84347
Я не понял, что генераторы кода не нужны?
Все в спячку?
482 1184386
>>83652
И какой кейс использования джейшелла? Есть же груви. А вообще

> 20!8


> не писать тесты на груви котлине


> 20!8

> не писать все на котлине

483 1184391
>>83748
Никаким. Это поможет только если изоляция repeatable read, это путь к дедлокам и гробам в лодке с пидором через реку. Правильное решение - дайнемик апдейт и статус заказа вынести в отдельную 1 к 1 сущность (а лучше 1 ко многим, чтобы была история статусов). Водила принял заказ, версия статуса заказа обновилась. Оператор изменил дескрипшн заказа, версия заказа обновилась. А вот если они одновременно изменяют статус заказа - ну тут кому повезет первым, чтобы не было объебанного водителя или оператора.
>>83775
Ты мы не в той ситуации, чтобы торговаться.
>>83813
Так ведь проблема лост апдейтов осталась - два оператора изменят заказ и данные первой транзакции затрутся второй. Ты просто ее под паркет спрятал, чтобы не пересекаться с водилами.
>>83907
Гугли java non blocking io.
>>83921
Обнови tzdata или джаву. Скорее всего на сервере восьмая джава еще до свистоплясок с изменением часовых поясов.
>>84062
Полная глупость.
484 1184425
Есть желающие купить аккаунт на javarush 9 уровня с премиум подпиской до декабря 2018? По цене конечно же договоримся.
ast3r`6cionANUSrambleVB8rPUNCTUMr:YYu пишите
485 1184441
>>84351
Велосипеды не нужны, а не генераторы кода.
486 1184487
>>84441
Нихуя, ты телепат.
Понятия не имеешь, о чём идёт речь.
Даже не дал себе труда прочитать и понять пост (>>83945), но спешишь поделиться своим сверхценным мнением.
Иди на хуй, сынок.
487 1184497
>>84487
Не бомби, папка.
488 1184830
Нужно ли в джавадок описывать приватные поля класса?
489 1184995
Джавагоспода, пишет ли кто-то опенсорс проект на спринге? хотелось бы вкатится, и попробовать свои силы, может быть помочь кому-то
490 1185031
>>84830
Нет. Джавадок это документация на публичное апи. Приватные поля не должны на него влиять.
491 1185067
>>84995
Зачем, если можно то же самое сделать на работе?
492 1185072
>>84830
Я пишу на всё.
493 1185090
>>85072
Какова вероятность найти работу если я
Прорешал 6 глав конкретной математики.
Осилил Кормена но не решал.
Могу в sql
Знаю паттерны.
Могу в многопоточность. Имутабельность. Асинхронность. Дедлоки. и тд.
Чтение английского без проблем.
Написал ll(1) парсер регулярных выражений.
494 1185102
>>85090
Велика.
Где живёшь-то? Если в миллионнике, то не парься. Сегодня же начни составлять резюме. Погугли, как его правильно составить, это очень важно. И дерзай. Нечего засиживаться, этим многие страдают, хотя уже готовы к работе джуном.
495 1185104
>>85090
На Hibernate только ещё глянь
496 1185112
>>85090
Напиши гарантированный дедлок. Реальный вопрос с каждого второго собеса.
497 1185173
>>85102
В мухосранске в центральной части РФ.
>>85112
Нужно один кусок кода контролировать двумя или больше мониторами. Бабахнет с высокой долей вероятности. Чтобы исправить нужно определить порядок синхронизации мониоров.
498 1185195
>>73657 (OP)
Уважаемые Java господа, реквестирую мнение про автоматизированное тестирование на java, сильный ли зашквар, сложно ли потом перекатиться в разработку?
499 1185200
>>85195
Да.
Не получится.
500 1185225
>>85200
От чего так? Сильно интересная область или затянет как болото насмерть?
501 1185305
Навешивать аннотации для json/xml маппинга на теже объекты как и для orm мэппинга норм или лучше создать DTO?
502 1185310
С помощью javafx можно делать реально классные GUI?
503 1185312
>>85305
Однозначно DTO.
Подумай, json-поля могут отличаться. Скажем, в базе дата со временем, а в json дата и время это разные поля. Если будет совмещать entity и маппинг json - получится нечитаемая каша
504 1185314
>>85310
Можно, но не нужно. Джава для десктопа не очень. Лучше использовать GTK и Qt
506 1185336
>>85322
ну хз, внешне говнокода нет
507 1185338
508 1185344
>>85338
Она на свинге.
509 1185360
>>85067
Так мне чтобы на работу устроится нужно опыт получить, так я коммитя в опенсорс хочу его заиметь
510 1185373
>>85360
Охуительные истории, конечно. Всем похуй на твой джуниорский опыт в опенсорсе. И так, и так будешь джуном. Ну, можешь тратить время впустую, вместо того, чтобы зарабатывать деньги и получать коммерческий опыт, дело твоё.
511 1185374
>>85360
Джуниором - не надо.
Если есть вышка, знаешь CS (хотябы базовые структуры данных и сложность алгоритмов), можешь на бумажке развернуть односвязный список, и понимаешь чем inner join отличается от outer - пили контакты "мы с тобой свяжемся".
512 1185376
>>85374
Ах, да! ДС онли и гражданство РФ (требование СБ).
513 1185379
>>85195
1. Сильно лучше чем ручное.
2. По моему опыту: много народу пыталось, но в итоге никому не удалось. С другой стороны, а зачем? Из QA можно расти в релиз менеджеры, и продукт оунеры. Не говоря уж про началиника отдела QA.
514 1185388
>>85379
Зачем тестировать на Java? Это ведь неудобно наверно. На питоне же проще будет, не? А если нужна jvm, то на groovy.
515 1185431
Посоветуйте каких-нибудь видеокурсов по Java, чтобы по основным вещам типа как устроены коллекции, как работает компилятор и т.д., но не совсем для ньюфагов.
516 1185438
>>85031
Не слушай этого. Джавадок добавляется и на приватные поля/методы (смотри jdk). При генерации документации можно указывать, нужно ли включать приватную инфу, поэтому в документации её нет, но в коде есть.
517 1185446
>>85173

>Нужно


Хуюжно. Код где?
518 1185450
Стыдно признать, но вообще не раздупляю многопоточность, не считая каких-то базовых вещей. Опыт почти 2 года. Практически всё это время хуярил на фреймворках вроде play и spring mvc, которые сами об этом заботятся. Я совсем потерян для общества? Как качественно заполнить пробелы? В какой момент я смогу сказать, что разбираюсь в многопоточности?
519 1185452
>>85450
Официальный туториал, Java Concurrency in Practice, придумай задачки с использованием нескольких потоков.
А гуру нахуй не надо становиться, имхо. Если не используешь повседневно многопоточку, то всё равно забудется. Главное в общем представлять, что происходит и всё.
520 1185453
>>85452
Я писал несложные вещи на плюсах с использованием MPI, поэтому принцип понимаю, конечно, но как это в жабе работает - хуй знает вообще. Буду читать-писать, спасибо. Про Concurrency in Practice слышал хорошие отзывы.
521 1185455
>>85453
Вот здесь ещё всё изучи
http://tutorials.jenkov.com/java-concurrency/index.html
522 1185476
>>85373
Блять, я учусь сейчас. Где-то через год-полтора буду искать работу. А это время хочу уделить на развитие.
523 1185478
>>85374
Эх.. я не из России. Может быть у вас есть какие-то опции удалённо поботрачить.
524 1185490
>>85452
Тащемта не нужно понимать именно на низком уровне для 95% задач многопоточности. Достаточно понимать что такое потоки, пулы потоков, почему форкджоинпул не годится для io, понимать что такое синхронизация и никогда ее не использовать, прочитать про мониторы, иметь представление как выполняется асинхронный код, в чем разница между блокирующими и неблокирующими серверами, что такое реактивность, что такое treadlocal переменные и причем тут контекст, и уметь использовать CompletableFuture и фреймворки для многопоточности и до кучи корутины в котлине.

Этого достаточно для решения 95% задач. Если же возникает необходимость в низкоуровневой многопоточности, синхронизации, то в большинстве случае это значит, что активно проебывается дизайн и архитектура приложения и пора юзать евент дривен и евенчуал консистенси подходы.
>>85450
Нет, это вполне нормально. Я когда пилил кровавый тырпрайз тоже почти не юзал многопоточность - это за меня делал контейнер сервлетов. Только один раз возникла необходимость в синхронизаци и мониторах, и то я бы сейчас уже сделал по другому.
525 1185491
>>85490

> в чем разница между блокирующими и неблокирующими серверами


и io*
captcha8888.png20 Кб, 364x150
526 1185501
>>85310
=> >>83363
Классные гуи закончились, лол.
Остались практичные - на свинге.
527 1185507
>>85446
void 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();
}
}
}
image.png37 Кб, 909x387
528 1185511
Есть менюшка, на каждый пункт мне надо кликнуть. Но почему то на 4 итерации вываливается IndexOutOfBoundsException, типа list.size() == 0. В чем может быть причина?
529 1185548
>>85388
1. Использовать те же библиотеки. Например есть у тебя хитровыебанный формат, так ты берешь ту же библиотеку и парсишь. Иначе придется еще поискать ее для питона.
2. Проще получить помощь от команды разработки. Мы например помогали писать QA фреймоворк для паралельного запуска тестов.
3. Cами сценарии можно и на кукумбере писать.
530 1185556
>>85312

>Однозначно


>могут отличаться


Ты, наверное, на каждый класс однозначно заводишь интерфейс, ведь может когда-нибудь понадобиться еще одна реализация.
531 1185561
>>85556

> Ты, наверное, на каждый класс однозначно заводишь интерфейс


Всегда так делаю с почти каждым сервисом и компонентом с логикой.
532 1185570
>>85561
Не приходило в голову, что проще потом отрефакторить те 3% случаев, где оно действительно понадобится, чем постоянно захламлять код ненужными сущностями?
533 1185572
На каком уровне джуну нужно знать sql? Покидайте книжки или курсы, где этот уровень можно получить или хотя бы понять что надо. Пока знаю только всякие простые запросы, как я понял этого мало
534 1185580
>>85570
Нет. Интерфейсы помогают разграничивать функциональность и позволяют сосредотачиваться только на контрактах, их выполнении и тестировании выполнения.

Сильная связность не нужна.
535 1185584
>>85556
Ты в реальных проектах вообще работал? Ты не выживешь без DTO в нехеллоуворлдном проекте.
536 1185585
>>85572
джойны, агрегирование. изучи, что такое индексы. больше особо ничё не надо
537 1185587
>>85507
Забыл free дописать.
538 1185588
>>85507
Во-первых, лок есть, а анлока нет.
Во-вторых, где здесь ГАРАНТИРОВАННЫЙ дэдлок? Сначала отработал первый тред, потом - второй.

Мы вам перезвоним.
sage 539 1185589
>>85588
за базаром следи петушара
540 1185591
>>85589
я Вам вот сейчас честно скажу. что с компанией Epam у Вас теперь в жизни никогда ничего не получится.
541 1185592
>>85511
На кой хер ты каждый раз берешь список заново?
542 1185594
>>85580

>Сильная связность не нужна.


До прямого вызова методов одного сервиса из другого ты, я надеюсь, тоже не опускаешься, ебашишь все на eventах и messageах
543 1185595
>>85594
Все через кафку.
544 1185597
>>85595
Овсяную?
545 1185605
>>85584
Ну ясен хер, что где-то dto понадобятся. А где-то у меня есть простая entity с тремя полями, и я хочу эти же три поля сейчас отдать наружу в том же виде. Ради какого профита тут заниматься копипастой?
546 1185621
Как писать автотесты на Java?
Что для этого используется и можете ли посоветовать хорошую статью или видеоурок, где это объясняется?
15246692238610.jpg107 Кб, 700x975
547 1185636
Прошу дать оценочное мнение идеи для пет проекта.

По халтуре приходится вручную распознавать одних и тех же людей на разных фотках. Хотелось бы автоматизировать. Чтобы создавалась папка с общими фотками, у нее подпапка с single фотками. И так, например, для 20 человек.
С нуля мне такое, конечно, не сделать. Нашлась опенсорсная программа faint на java по распознаванию лиц 10 летней давности. Разработчик пишет, что ее можно подключить как библиотеку к своему проекту.

https://faint.sourceforge.io/
https://github.com/jeffrafter/faint

Сложность приемлемая для начального уровня или пока не трогать? Какие технологии могут понадобиться? Можно обойтись только java core?
Или есть какой-то другой общеизвестный подход к решению такой задачи?
Снимок.PNG7 Кб, 821x156
548 1185642
Что это за класс Logger и почему я не могу использовать LoggerFactory

хотя я беру код отсюда
https://github.com/iluwatar/java-design-patterns/tree/master/facade
549 1185649
>>85592
потому что после каждого клика кнопки на странице перерендериваются и если один раз найти нужные элементы, записать в список и просто кликать по ним в цикле, то вываливается - element is not attached to page document
550 1185656
>>85642
Нужна имплементация логгера. Log4j или slf4j
551 1185657
>>85605
У тебя есть одна entity. И есть rest, soap, ещё какие-нибудь кастомные представления данных. Ты на одну эту entity будешь пихать минимум 3 набора аннотаций, а то и больше, для каждого поля? Ты понимаешь, какая это каша? Завтра добавится вычисляемое поле в soap - всё равно переделывать. Как потом отличить при импорте, например, какие поля нужно заполнять? Если на каждое представление своё DTO, то всё кристально прозрачно становится, и занимает секунды для того, чтобы разобраться в структуре данных.

По поводу 3 полей - ни разу не встречались такие entity. В любом случае, сегодня это 3 поля, а завтра 5, а послезавтра 7. Лучше делать всё сразу нормально и единообразно, чтобы был порядок в коде и в голове.
552 1185668
>>85511
причина в кривой верстке, решил проблему пропуском кривых страниц
553 1185677
>>85657
Ну вот я описал конкретную простую ситуацию, а ты в ответ "а вдруг завтра появится soap с вычисляемыми полями". А вдруг не появится? Вдруг я простой круд формошлеплю? Вот когда появится, тогда введу для него dto. А если ничего подобного на горизонте не видно, может все-таки не обязательно удваивать объем сущностей просто на всякий случай?
554 1185679
>>85677

>А вдруг не появится?


Я потому и спросил про опыт работы. Не бывает такого на реальных проектах. Всегда что-то да появляется, и нужно заранее об этом думать.
555 1185683
>>85679
DRY
НЕ ПЛОДИ СУЩНОСТИ БЕЗ НЕОБХОДИМОСТИ КО-КО-КО
556 1185685
>>85683

>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 P
R
P

Всё, я устал немного спорить.
557 1185687
>>85685
да все эти бест-практис противоречат друг другу и меняются каждый год, не принимай близко к сердцу
558 1185689
>>85679

>Не бывает такого на реальных проектах. Всегда что-то да появляется


Т.е. у тебя ни разу не было такого, что, к примеру, rest-бэкэнд какой-нибудь внутренней админки оставался просто rest-бэкэндом админки?
559 1185697
>>85689
сходу могу вспомнить поле dateFormat, дата в форматированном виде.
На клиенте почему-то не любят unix datetime
560 1185709
>>85697
Да я не об этом, а о разных представлениях типа rest и soap. Ладно, все, хер с ним.
561 1185733
>>85697
Не совсем понял в чем здесь проблема. Ставишь аннотацию для Джексона чтоб превращал в нужный формат и всё.
562 1185806
>>85733
Да даже если б и пришлось отдельный геттер для этого завести, не особенно это ужасно как по мне. Но тот анон настаивает, что низзя ничего такого делать, потому что вдруг через 5 лет понадобится добавить соап, и тогда для этого соапа будут отдельные dto, а для реста нет, о ужас. Гораздо лучше прямо сейчас начинать копипастить каждое новое поле в +1 место.
563 1185807
>>85621
Куда ты лезешь.
564 1185844
>>85806
Что значит в +1? Нужно же ещё маппер написать entity -> dto и dto -> entity по необходимости. И тестами их покрыть.
565 1185858
>>85807
А тебе бы не помешал урок пунктуации русского языка.
 .png86 Кб, 268x268
566 1185868
>>85858
Это было утверждение, а не вопрос.
>>85844

> 20!8


> не использовать орику, мапстракт, прямые автомапперы из реляционки в дто

567 1185948
>>85621
Берешь и гуглишь selenium, инфы море. Если что у тестеров свой тред: https://2ch.hk/wrk/res/1207555.html (М)
Видос что бы быстро вьехать:
https://www.youtube.com/watch?v=N8Rr7rVf1RA&index=186&list=PLBoslWMlaSssPFxMtGr6iV-RgnQbXAYH2&t=413s
568 1186021
>>85868
Использовал мапперы в проде? Полная хуета, на то, чтобы разобраться чё куда мапится куча времени уходит. Пришёл к выводу, что ничего лучше вручную написанного мапперы из стены геттеров и сеттеров нет
569 1186029
>>86021

> Использовал мапперы в проде?


И в крупных тырпрайзах, и в хипстосервисах.

> Полная хуета, на то, чтобы разобраться чё куда мапится куча времени уходит.


Ты просто тупой.

> ничего лучше вручную написанного мапперы из стены геттеров и сеттеров нет


Ебать ты дегенератище. Мапперы еще ладно, не все используют хорошее пока, но в 20!8 году не использовать генерала Де`Ломбока это или критическое повреждение головного мозга, или максимальная закостенелость, что в принципе то же самое. Небось еще на седьмой джаве пишешь. В любом случае, ты не стоишь и минуты моего времени.
Пошел нахуй.
570 1186042
>>86029
чёта не понял при чём тут ломбок, он же генерит сеттеры с геттерами
571 1186080
>>86029
Как там ломбок на актуальной версии жабы? Когда я последний раз проверял, был никак.
572 1186087
Объясните ньюфагу, как сейчас в джаве работать с БД? Я пытаюсь освоить хибернейт + спринг, это правильный путь? Какие вообще ключевые слова технологии нужно иметь в виду?
И еще вопрос - можно ли сразу учиться работать с анотациями, минуя xml? Мне например больше нравится грейдл и конфигурация через аннотации/пропертис. Или это от проекта зависит?
573 1186088
>>86087
jdbc

>можно ли сразу учиться работать с анотациями, минуя xml


Можно, но не нужно. После xml с аннотациями разобраться легко, но неизвестно, насколько древние технологии будут использоваться там, куда ты устришься на работу.
574 1186089
>>86088

>jdbc


Это троллинг такой?
575 1186091
>>86089

>Объясните ньюфагу, как сейчас в джаве работать с БД?


Да, ты троллишь сейчас.
576 1186093
>>86091
Иди нахуй, клоун блять.
Я же сказал про хибернейт и спросил про то какие еще есть ключевые технологии, о которых ньюфаг может и не знать, учитывая зоопарк технологий/фреймворков джавы.
Но нет, нужно спиздануть про jdbc.
577 1186144
сап, программач! почти запилил свой пет-проджект, который не стыдно показать людям(лол), ноо совершенно не секу в логгировании, мб есть у кого годный туториал - какой логгер использовать, что логгировать и т.д.
578 1186163
>>86093
Ты чё развыёбывался, дурачок? Всё он правильно тебе сказал. В идеале нужно потыкать и jdbc, и hibernate, несмотря на то, что в большинстве проектов используется orm.
579 1186166
>>86163
Где я выебываюсь, даун? Он мне предлагает потыкаться в jdbc, когда я спрашиваю про ключевые технологии и практики? В таком случае тоже иди нахуй.
Одно дело сказать "начни с jdbc и потом то и то", другое просто ляпнуть не к месте про jdbc, когда СПРАШИВАЛИ О ДРУГОМ ВООБЩЕ. Вы вообще отбитые какие то блять, спрашиваешь их про технологии, так они выебываются тем что в jdbc потыкаться надо.
580 1186167
>>86166
Бля, пиздец ты тупой, съеби нахуй с треда.
581 1186170
>>86167
Сам съеби, говно. Может посоветуешь мне еще про модель OSI почитать? Ну а хуле, так же релейтед к моему вопросу как и JDBC
582 1186172
>>86166
Ты смешной))))
583 1186173
>>86144

>не стыдно показать людям


>не знает про log4j


i doubt it
584 1186176
>>86144
Да там особо не по чему и туториал делать. Посмотри log4j, буквально час-два потрать и всё. В пет проекте нахуй не надо какое-то логирование прикручивать
585 1186178
Зачем в классах делают пустые конструкторы? Тем более в абстрактном Toolkit
https://docs.oracle.com/javase/7/docs/api/java/awt/Toolkit.html
586 1186180
>>86178
Чтобы было.
587 1186249
Java написан на C++?
588 1186270
>>86249
JVM на Си, Си++, все классы на java
589 1186271
>>86270

>JVM на Си, Си++


Какой позор...
590 1186278
>>86271
В чем тут позор?
591 1186279
>>86278
Почему нельзя все написать на Java?
592 1186280
>>86271
Есть https://github.com/oracle/graal JIT-конпелятор написанный на жаве. Но он всё ещё экспериментальных, хотя начиная с Java 10 его уже можно использовать, правда только на 64-битных Linux и macOS.
593 1186282
>>86279
Си больше подходит для всякой низкоуровневой хрени, плюс быстрее. У питона на нем целые библиотеки
594 1186370
>>84391
Спросил у прод-куна, тот ответил что 40к потолок
епам-макака
595 1186394
>>85591
C o n d u c t
596 1186401
>>86080
Актуальная это 8 или 9?
597 1186418
>>86178
Потому что если в классе определен хоть один конструктор, конструктор по умолчанию не генерируется
598 1186434
>>86401
10 же.
599 1186437
>>86418
Почему мы хотим, чтобы он не генерился?
600 1186442
>>86166
>>86170
Пиздец ты дегенерат.

Одно хорошо - ты никогда не найдешь работу программистом.
601 1186453
>>86434
Сырое говно
602 1186456
>>86437
Потому что спецификация
603 1186487
>>86453
Зато var.
604 1186492
>>86487
Ещё одна возможность превратить код в говно, потому что мало кто будет пользоваться им дисциплинированно.
605 1186499
>>86280
Кстати, на днях грааль вышел 1.0 RC1. Так что он уже вполне стабилен. А твитор, вообще его больше года юзает.
606 1186548
В чём смысл GraalVM? Типа любые языки можно в ней запускать в том числе и LLVM IR, соответственно приложухи могут общаться друг с другом несмотря на то, что они на разных языках написаны. Так? В этом главный профит?
Т.е. если приложуха чисто на джава как раньше, то юзаю JVM по-старому, а если хочу написать приложуху на джава + питон + js. то спокойно юзаю GraalVM? Зачем это может понадобиться не очень понимаю всё равно
607 1186556
>>86492
На ассемблере пиши, поехавший. Я регулярно пишу на котлине - и с валами и варами код понятный. А с другим добром котлина так и еще лучше и читаемее.
>>86548
Нет. Граальвм состоит еще из другой дрисни, но по факту важен только конпелятор JVM говнеца.

И этот самый конпелятор новый написали, потому стоимость поддержки и запила новых фич на C1 и С2 превзошла всякие пределы - для того, чтобы там можно было запиливать фичи, абстрактному разработчику нужно год-два медитировать чисто над исходниками, настолько все сложно и такполучилось.

Поэтому решили хватит это терпеть и запилили грааль, который написан на нормальной джаве и который легко поддерживать и пилить новые фичи. В процессе запила сразу оптимизировали многие места и числодробить стало намного веселее.

А компилировать JS, го, пифон под граальвм не нужно.
608 1186557
>>86556
А меня больше интересует AOT-конпеляция. Теперь можно будет распространять приложухи без рантайм-дрисни? Учитывая, что всё равно у почти каждого жава-приложения свой собственный рантайм на котором всё проверено, то эта фича была бы довольно удобна.
609 1186559
Слишком много всего начало происходить. А я даже модули ещё не курил. Помедленнее!
610 1186562
>>86557
Полный AOT без JRE, это только Excelsior JET.
Все остальное только с JRE. В JRE будет встроенный AOT для ускорения старта, но не более.
611 1186563
>>86559

> А я даже модули ещё не курил.


Это которые жигсо? Их много кто ещё не курил. Если твоя прога использует какую-нибудь стороннюю библиотеку могу дать 100% гарантию, что полноценно всё это работать не будет. Вот баттхёрт одного из перекатывальщиков: https://habr.com/post/354114/
612 1186567
>>86562
А жаль. "Статическая линковка" стандартной библиотеки была бы суперской фичей вместе с AOT.
613 1186576
>>86563
Надеюсь, что в LTS починят. А то кучу времени на это убили, обидно. И я не очень понимаю, как это всё сочетается с модулями maven/gradle. Ладно, ждём LTS
614 1186580
>>86576

> Надеюсь, что в LTS починят.


Там не жаву чинить надо, а авторам библиотек перекатываться в модульность. Встаёт очевидный вопрос: а зачем, если и так (почти) всё работает. Впрочем жигсо умудрился сломать и простые jar'ы из-за чего куча библиотек перестала работать с девятой жавой и выше, и это проблема посерьёзней.
615 1186585
>>86557
Поясни в двух словах в доходчивом двощерском стиле нахуй всралась AOT-конпеляция. У меня так руки никогда не доходили поинтересоваться.

>>86559
>>86563
Потому что жигсо нахуй не всрался. Его мучительно долго рожали, отодвигали из-за него релиз девятой джавы, наконец высрали ублюдка и так до сих пор в массе никто и не понял нахуй он всрался вообще.

Возможность опубличивать только публичное апи толком не нужно - для чисто интернал хуйни всегда есть package level, а если нужно в нескольких пакетах, то в джавадоке написать for internal usage и на все проблемы, связанные с использованием непубличного апи отвечать "ди нахуй, пидрбля".

Возможность хотсвапа модулей тоже толком не нужна - в проде она нахуй не нужна, бо никто не держит единственные серверы и давно уже изборетен АИБ деплоймент, а для девелопа всегда есть джававосставший. Да и по чесноку в тот момент когда монолит уже трещит по швам его не в модульный монолит надо перепиливать, а распиливать на микросервисы.
А для всех остальных задач модульности есть гредл/мавен сабмодули.

Для тех же случаев, когда модульность на уровне джарников необходима, там сложной десктопной херни (хотя тут можно поспорить), никто не отменял osgi. Смотрел краем глаза на Джейпоинте доклады про модули, включая той жирноватой немецкой тни, так и не увидел юзкейов нормальных.

По факту получилось, что рожали-рожали, высрали наконец, коммьюнити посмотрело на получившегося выродка и спрашивает "и че?". И вот это "и че" в воздухе длится до сих пор. Это не говоря о том, что рождение жигсо сломало вообще.
616 1186589
>>86585

> Поясни в двух словах в доходчивом двощерском стиле нахуй всралась AOT-конпеляция. У меня так руки никогда не доходили поинтересоваться.


Ну если без "статической линковки" (я не знаю как объяснить это в java-терминах), то действительно, особо и нинужно. Просто удобно было бы отказаться от JRE вообще и распространять самодостаточный бинарник.

Я AOT в .NET-приложениях использовал только в десктопе и только для ускорения запуска. И стоит заметить, ускорение действительно было. Запуск крупного приложения, написанное с использованием WPF + контролы от telerik ускорился с полутора минут до десятка секунд.

А вот на сервере (где жава обычно и живёт) я с этим никогда не заморачивался, наверное там оно и нинужно.
617 1186590
помогите нубу - есть спринг бут приложение, есть бин taskExecutor, он запускает отдельный поток
@PostConstruct
private void initGenerator() {
Generator.initialize(taskExecutor); }
Вроде все работает как нужно, но как только пытаюсь завершить приложение - вылетает InterruptedException. У спрингбутовского TaskExecutora нет даже метода shutdown. Нагуглил, что нужно в аннотации добавить destroyMethod = "shutdown" (этот метод часть магии или нужно самому писать?). В общем не могу сообразить, выручайте, анончики
618 1186596
>>86589
Хуйня какая-то. Джава для десктопа вообще не оче, а джарник ты запускаешь в докере или экзешник просто-таки глубоко насрать, лишь бы работало. Хотя с экзешником в докере это да, кхм :3

> Просто удобно было бы отказаться от JRE вообще и распространять самодостаточный бинарник.


Ну тащемта в пределах graalvm была какая-то дрисня, которая вроде позволяла без костылей типа запакованного в экзешник джарника и jre собирать в экзешники приложухи, ты о об этом говоришь. Помнил, но забыл.

Надо будет все-таки не полениться и прочитать про AOT-дрисню.
619 1186598
>>86590
Не лезь в многопоточность по нубству, она тебя сожрет.

> вылетает InterruptedException


Открой джавадок этого класса и внимательно прочитай первое предложение, разбери его по частям и сделай соотвествующие выводы для себя.
620 1186601
>>86596
С докером действительно проблем не будет. Просто было бы удобней чтобы сразу бинарник был со всеми библиотеками и не надо было ничего больше настраивать. Опять таки все равно у каждого приложения свой собственный рантайм.
621 1186602
>>86601
С дивана вижу только бесписечный запуск десктопных приложений под винду. Писать десктоп на джаве не оч, как уже писал - то ли дело на шарпе или заговниться электроном на js. И вообще, талостые клиенты нинужны.
622 1186603
>>86602
Я десктоп на жаве не пишу. Пытался вкатиться в JavaFX, но вышла хуйня. Qt куда лучше, даже несмотря на привкус C++. Жалко, что связка Qt+Java сдохла и вместо этого продвигают Qt+Python как альтернативу плюсам.
624 1187127
>>86567
Скачай триал Excelsior JET и посмотри на размер получающихся исполняемых файлов.
123454.PNG26 Кб, 1139x188
625 1187139
>>87127

> Excelsior JET


Ну, поставил свой небольшой pet-project на котлине + spring конпелироваться. Через пару часов посмотрю что получится.
626 1187174
>>87139
Итак, всё сконпелировалося. Вышло 181Мб (при этом само приложение занимает 74Мб, всё остальное опять таки рантайм). FatJar занимает около 40Мб.
627 1187187
>>86562
Хотя прочитал 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, который правда не поддерживает некоторые фичи жавы и позволяет делать статически слинкованные бинарники.
628 1187317
>>87174
Т.е. по сравнению с простой джаркой у тебя размер вырос более чем в 4 раза. понятно, что сейчас на такие мелочи обычно забивают

Но надо понимать другое, ты лишаешься оптимизации по профилю исполнения. Для десктоп приложений это коночно не критично, но для высоконагруженного сервера - критично.
629 1187325
>>87317

> ты лишаешься оптимизации по профилю исполнения.


У Excelsior JET есть PGO, правда профиль придётся делать заранее самому.
630 1187363
>>87325
Появился? Круто!
А как его собирать?
631 1187365
>>87363
А мне откуда знать? А его только сегодня поставил. Да и лучше уж грааль подожду. Он хоть бесплатный.
632 1187367
>>87363
А вообще, у них же на сайте написано: https://www.excelsiorjet.com/profile-guided-optimization
633 1196955
Где можно найти development tasks? Типо сделать калькулятор, спарсить джсон, утилиту для линукса. Придумывать самому тяжко. То есть не просто решить задачку, а написать программу для какой-то цели.
Тред утонул или удален.
Это копия, сохраненная 4 июля 2018 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски