Вы видите копию треда, сохраненную 31 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Q: ЧТО СКАЖЕТЕ ЗА ДЖАВАРАШ?
A: Худшая инвестиция в твоей жизни. Огромное количество говнокода, оторванные от жизни задачки, 1000 заданий по выводу в консоль какого-то говна.
Сейчас все советуют Hyperskill. Более продуманный план обучения. Но, как и любой %COURSENAME% не гарантирует тебе успешного вката. Выучиться можно и самостоятельно, не отдавая свои кровные васянам-наставникам.
Q: Посоны, собираюсь учить джаву по 2/5/20 часов в день. За сколько дней я выучу достаточно, чтобы зарабатывать фрилансом?
A: На джаве фриланса нет. Хочешь фрилансить — дуй в ПХП/раби/1С тред. Но в последнее время увеличивается количество вакансий на удаленке в связи с ковидом. Но, возможно, как вся эта мракобесия закончится, всех обратно загонят в стойло.
Q: Значит, я должен буду всю жизнь сидеть в опенспейсе, конвертируя XML в эксепшны? Ура, мне подходит! С чего начать?
A: Книги: https://libgen.is
Q: Хули все книги на английском?
A: Без английского ты не нужен и можешь смело идти нахуй. Ну или в 1С-тред.
Q: Я не могу в книги. Наткнулся на джавараш, но в самом верхнем вопросе уловил нотки сарказма. С ним все правда плохо?
A: В наших тредах постоянно появляются люди, спрашивающие о джавараше. Громко объявляют, что начинают заниматься, задают пару тупых вопросов и куда-то пропадают. Похоже, большинство адекватов бросают джавараш из-за дебильных заданий типа "десять раз скопипасти этот кусок кода и выведи в консоль". Тем не менее, иногда появляются и люди, говорящие что прошли его целиком, и что дальше задания получше. Короче, хочешь - пробуй, первые десять занятий бесплатно же. Но, как минимум, лучше совмещать с обучением по другим источникам. На самом деле ты просто потратишь свое время на какой-то мусор.
Q: Пока читаю, все понимаю, а сам ничего сделать не могу. Что делать?
A: Практика, больше практики. Уровня laba1.pas: http://codingbat.com/java http://codehunt.com https://hyperskill.org все говно, есть литкод Примеры той-проектов: http://eax.me/programming-language-learning/
Q: Я выучил кор, достаточно ли этого, чтоб взяли на работу?
A: Лол, конечно нет. Вот майндмап с джава-технологиями: https://coggle.it/diagram/WqgTTNMJtPiHph_q/t/java-development-in-2018
Q: Слышал, SQL знать надо обязательно. Где его учить?
A: Начни с малого: http://www.w3schools.com/sql/default.asp Затем переходи к: http://www.sql-ex.ru/
Q: Всё это хорошо, но без алгоритмов меня на работу не возьмут.
A: Не все конторы дрочат на подход Яндекса который спиздил подход гугла. Но для крупных фирм знать алгоритмы маст хев уже на уровне джуна/трейни, вот курсы от Принстонского университета: https://www.coursera.org/course/algs4partI То же самое но в бумаге: Роберт Седжвик, Кевин Уэйн - Алгоритмы на Java
Q: Я готов к первому собеседованию.
A: Проверь свои знания здесь: http://www.quizful.net/test И здесь: http://www.careercup.com/
Q: Вопросы на собеседование.
A: http://jsehelper.blogspot.ru/2016/01/blog-post_59.html : куча вопросов с ответамине всегда правильными http://becomejavasenior.com/blog/2015/07/01/327-interview-questions-java-developer/
Перед тем, как задать вопрос Как вайти в айти?, ознакомься с вики:
https://github.com/qqqlll/Java-Thread/wiki
https://github.com/random76/Java-Thread/wiki
Зато без маняме.
Что-то слишком часто перекатывать стали, в надводном положении много мудаков набигает.
Да какая разница, в прошлом подводном уже вопросы про цикл for и конвертацию дат пошли.
Джависты нах вы так жоско пхп копируете?
Чтобы писать масштабируемые высоконагруженные приложухи, а то заебали одни cms и интернет-магазины.
>Последний из управляющих операторов — return. Его используют для выполнения явного возврата из метода
Что значит возврата? Что значит метод возвращает значение?
Это значение кто-то спиздил? Оно блять ушло куда-то, чтобы его возвращать? Сука, и уже кучу сайтов посмотрел - везде такая же непонятная чепуха написана. Ебучие копирайтеры и друг друга пиздят. Неужели это так сложно объяснить нормальным человеческим языком? Это что квантовая физика, задачки Перельмана? Вроде читаю русский язык, а смысл слов другой, ни как у людей.
Ты когда функцию пишешь, то указываешь что ты ПЕРЕДАЕШЬ на вход и что ожидаешь ПОЛУЧИТЬ на выходе. Функция после окончания работы обязана ОТДАТЬ что-то на выход. То есть функция ПОЛУЧАЕТ что-то на вход и ВОЗВРАЩАЕТ что-то как результат результат своей работы.
Спешу заметить, что ты можешь передать в функцию ничего, а еще ожидать, что функция вернет ничего (оно же void).
Вызова куда, чего? Пиццы к двери или что? ЧТо ты несешь?
Научитесь блядь выражать мысли понятно. Почему функцию команды нельзя нормально объяснить? Вы ваще сами понимаете что кодите там, программисты мамкины?
Вот че делает этот код? Он что создает переменную по имени метода, которому присваивается значение ретёрном?
public String getStatus()
{
return "Dead";
}
А какого хуя не написать по-нормальному? String x = "dead"
Вызов твоей мамки, пидор тупой.
Никаких переменных твой метод не создает. По имени метода он возвращает строку, в которой содержится некий статус. В конкретной реализации возвращает строку "Dead".
Написать String x = "dead" нельзя, потому что я, как сторонний разработчик, не хочу думать что твоя больная бошка подразумевает под полем с именем "х".
Это не терминология, это англицизм чистый. Я себе голову сломал пока понял что понимают под : классом, объектом (экземпляром класса), методом и тд.
Очевидно что на инглише это так и написано Class object method. Но эти уроды вместо объяснения через логику: что есть множество и в нём есть подмножества; просто повторяют как сектанты "нууу эээ классы это как схема для объекта нууу эээ а объект типа что-то делает и это метод".
Это как я буду объяснять русскому из 20-го века что означает LOL Батхерт Тролинг используя только эти слова.
Думаешь, на инглише эти термины сильно понятнее для простого Джона? Да нихуя, это узкоспециализированные смыслы, и знание самого популярного значения не помогает, разве что слово знакомое. Точно так же мучаются с циклически взаимосвязанными понятиями A -> B -> C -> A, и логика тут не поможет.
>>Я себе голову сломал пока понял что понимают под : классом, объектом (экземпляром класса), методом и тд.
Может тебе литературу попроще почитать типа пикрелейтед?
>>это англицизм чистый
Там половина терминов с советских времен, многие термины из математики. Может тебе еще и бинарную систему в целковые перевести?
Умерь свой батхерт и учи терминологию или иди нахуй.
Зависит от контекста.
и какая же тогда терминология из описанной в том посте существует со времен асм?
какой возврат блядь, не существует возврата в ассемблере
Как же хорошо что сдохла Sun Microsystems.
Как же плохо, что до того как сдохла Sun, она породила недоязык Java. Но всё же плохо, что умер Sparc - было всё же что-то хорошее у Sun. Лучше бы Java сдохла вместе с Sun, а Sparc бы жил.
Впрочем, говноC# всё вскоре похоронит Джаву.
Главное что Go очень скоро похоронит их обоих.
SPARC хуйня, настоящим продуктом от Sun был Solaris и поддержка для него. Вот где дух настоящего UNIX, а не поделки ламеров.
>>Типичная ситуация же
ситуация может и типичная, но описал ты ее очень абстрактно и непонятно, там вариантов куча.
Из-за этого страдают все, но никаких подвижек в эту сторону не осуществляется.
>которые до сих пор не могут определиться с тем, как правильно отсчитывать время?
The number of second that have elapsed since Unix epoch.
Use signed 64-bits integer value and be happy until Sun will fade.
Тепловая смерть вселенной успеет наступить 11 с копейками раз.
> А какого хуя не написать по-нормальному? String x = "dead"
Пиздуй в паскаль тред и пиши на здоровье
function myParabola(): string;
begin
result := "dead";
end;
А у нас тут тред для натуралов!
от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 это в секундах. Перевести в миллиарды секунд сможешь сам.
Упс.
А ту я нашел только на корень (через Add framework...) ко всему проекту, но мне нужно только к одной директории.
Ну например
/
/somefolder
/folder
/folder/src
Вот нужен maven, относящийся и работающий только в /folder/pom.xml
И именно через GUI IDEA чтобы потом там же запускать всякие clean, build и т.д.
>>не могут определиться с тем, как правильно отсчитывать время?
Консервативные слишком.
Инкубатор жерминаля 10 жерминаля им видите ли не нравится, им 30 марта подавай с ебанутой длиной месяцев.
Ну тогда напиши в нем что-нибудь.
Их принудительно что ли добавлять?
Хороший вопрос.
Я думал об этом долго.
Предлагаю их хранить отдельно.
Насчёт типа данных идей не имею.
хорошо бы время представлять в пикосекундах, но не помещаются в 32 бита. Короче, время меньше секунды это тема для обсуждания.
Блиа, такую интересную тему мусолим в треде про Java. Нехорошо это.
Ее я и так добавил, iml от pom то как добавить?
Видеокарта глючит.
Нет, но близкие вещи.
Ты мне 5 квартир должен после развода, мудак.
*.iml
если ты сам не открыл книжку по программированию и не прочитал её залпом - смысла нет
Лок это персонаж из сериала остаться в живых. Монитор это куда смотреть чтобы кодить. Мьютекс это презервативы вроде, не знаю, не пользовался.
А во что <T> превращается?
И вот еще говорят, что в джаве сделали такие вот дженерики, чтобы сохранить бэквард компатибилитю. Якобы чтобы скомпиленный класс из java 1.5 мог быть запущен в java 1.1
Но ведь если я сейчас возьму программу на java 11, скомпилирую, и попытаюсь запустить на java 8, то бросится UnsupportedClassVersionError Application has been compiled by a more recent version of the Java Runtime
Мне кажется их сделали такими, чтобы не изменять саму jvm на уровне байткода, чтоб наоборот скомпиленные классы из 1.1 работали в 1.5 жвм, а не наоборот. Иными словами, чтобы в .class файле все было как раньше: CAFE BABE и вся остальная его структура.
Ясно.
>Мне кажется их сделали такими, чтоб наоборот скомпиленные классы из 1.1 работали в 1.5 жвм, а не наоборот
Поздравляю, ты только что понял значение словосочетания "обратная совместимость".
mapstruct
А мужик говорил наоборот. Вот я и подумал неужели препод ошибся.
в сервисе прогоняешь через маппинг, потом руками делаешь вызовы и вставляешь значения
Нахуя тогда прогонять через маппинг вообще, если можно руками вставить значения?
Твой метод copy принимает другой объект и просто делает значения полей своего объекта равными значениям другого.
Спс
Вот так время хранит LocalTime, в LocalDate аналогично. А LocalDateTime - комбинация LocalDate и LocalTime. Понятно, что подход не байтоебский, но зато не будет никакой хуйни.
Разрешаю.
Запрещаю.
Уже хуёво, но изредка можно.
Если в проекте уже используется мапстракт, то даже для 5 ебано писать руками маппинг. Если еще не используется, то ради 5 его ебано прикручивать.
5 пиши, самый оптимальный вариант. 7 - это край уже.
Нет, copy не создаёт новых объектов вообще, он просто делает один объект таким же, как другой.
>он просто делает один объект таким же, как другой.
Даладно?
Я вижу что он делает, я спрашиваю КАК он это делает. Я раньше только всякие String и int в параметрах писал. А тут ссылка на класс и переменная y, она чего делает? Если бы я просто написал x = y мне бы выбило что разные типы данных, а если через точку то норм. Это что?
Я шизик с ломбоком.
Это первые главы любой книги по джаве.
Да кто ж знает, что там в спринге есть, Не удивлюсь, если даже обёртки над javafx найдутся.
И структура нифига не выровнена. Может быть у вас Java это считается нормальным, но не в классических языках.
Я помню, как какой-то шиз это советовал, тогда еще весь тред проигрывал.
так создай через идею да и все
Битовые поля когда в жабу завезут???
EntityManager em = entityManagerFactory.createEntityManager();
дальше, там же в DAO я делаю транзакцию, а вот тут я путаюсь. Как связать дао с контроллером? Может что-то можно читнуть на эту тему?
Ты из контроллера вызываешь нужный метод в дао а ещё лучше сделать сервис, который вызывает метод дао,а метод этого сервиса вызывается из контроллера
Очевидно - потому что время используется для разных целей. Кому-то нужно зафиксировать момент времени и потом его отобразить в привычном человеку формате. Кому-то нужна календарная дата кстати в мире используется не только григорианский календарь. Кому-то локальное время. Кому-то дата-время в конкретном часовом поясе.
Есть экзотика типа год-месяц/час-минута, но тоже встречается.
Ну все, работа встала.
Так вроде определились, <=7 полей - делаешь внутренний класс, как только больше, сразу подключаешь мапструкт, удаляешь внутренний класс и срешь аннотациями на сущность.
private final native public volatile static transient synchronized protected abstract class FactoryFactoryFactoryFacade extends AbstractBuilderIteratorBeanDecoratorInterceptorFactoryFactory implements AbstractFactoryStrategyIteratorProxy, AbstractFactoryFactoryListener {
SingletonDecoratorAdapter singletonDecoratorAdapter = new SingletonDecoratorAdapter();
AbstractFactoryFactorySingletonBuilderProxy abstractFactoryFactorySingletonBuilderProxy = new AbstractFactoryFactorySingletonBuilderProxy();
VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory visitorBeanSingletonProxyAdvisorBuilderFactoryFactory = new VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory();
IteratorListenerBean iteratorListenerBean = new IteratorListenerBean();
AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator abstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator = new AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator();
synchronized final private protected void setAdvisorFacadeObserverFactorySingletonBeanProxy(AdvisorFacadeObserverFactorySingletonBeanProxy advisorFacadeObserverFactorySingletonBeanProxy) {
this.advisorFacadeObserverFactorySingletonBeanProxy = advisorFacadeObserverFactorySingletonBeanProxy;
}
public synchronized static protected native volatile transient private void setAbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy(AbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy) {
this.abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy = abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy;
}
native public static synchronized protected private transient final void setAbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator(AbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator) {
this.abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator = abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator;
}
protected public native synchronized final void setAbstractBuilderFactoryFactory(AbstractBuilderFactoryFactory abstractBuilderFactoryFactory) {
this.abstractBuilderFactoryFactory = abstractBuilderFactoryFactory;
}
static private protected volatile transient SingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory getSingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory() {
return this.singletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory;
}
transient private final static public VisitorAdvisorFactoryAdapterProxy getVisitorAdvisorFactoryAdapterProxy() {
return this.visitorAdvisorFactoryAdapterProxy;
}
synchronized protected public final volatile private AbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener getAbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener() {
return this.abstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener;
}
public transient private AbstractListenerAdvisor getAbstractListenerAdvisor() {
return this.abstractListenerAdvisor;
}
public protected transient final synchronized volatile static native private AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter abstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter(ObserverDecoratorAdvisorAdapterBuilderSingletonFacade observerDecoratorAdvisorAdapterBuilderSingletonFacade, AbstractBeanInterceptor abstractBeanInterceptor, AdvisorFacadeSingletonDecoratorListener advisorFacadeSingletonDecoratorListener, AbstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder abstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder, AbstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver abstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver) {
decoratorProxyBean.setProxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter(this.proxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter);
return new AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter();
}
transient native private final synchronized volatile protected static DecoratorSingletonIterator decoratorSingletonIterator(ObserverSingletonListenerFactoryFactoryBuilder observerSingletonListenerFactoryFactoryBuilder, VisitorDecoratorSingletonObserverFactory visitorDecoratorSingletonObserverFactory, AbstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory abstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory, FactoryVisitorProxyDecoratorListener factoryVisitorProxyDecoratorListener) {
factoryInterceptorListenerSingletonFacadeDecoratorAdapter.setAbstractBuilderDecorator(this.abstractBuilderDecorator);
InterceptorProxyFacade interceptorProxyFacade = new InterceptorProxyFacade();
abstractAdvisorAdapterVisitorBean.setAbstractAdapterObserver(this.abstractAdapterObserver);
abstractInterceptorListenerBuilderSingletonAdapterStrategyFactoryAdvisor.setAdvisorStrategyDecorator(this.advisorStrategyDecorator);
return new DecoratorSingletonIterator();
}
synchronized volatile private final protected public static native transient AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade abstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade(ObserverListenerBeanFactoryFactoryAdvisor observerListenerBeanFactoryFactoryAdvisor, ProxyObserverVisitorFactoryBuilderDecoratorStrategy proxyObserverVisitorFactoryBuilderDecoratorStrategy, AbstractBeanInterceptorObserverAdvisor abstractBeanInterceptorObserverAdvisor) {
abstractStrategyFactoryFactoryBeanVisitorBuilderSingleton.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
AbstractListenerAdvisorSingletonObserver abstractListenerAdvisorSingletonObserver = abstractBuilderDecoratorVisitorFactoryBeanProxyFacadeSingleton.getAbstractAdapterProxyBuilderFacadeListenerAdvisorInterceptorFactory().getAbstractListenerAdvisorSingletonObserver();
return new AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade();
}
volatile static transient public native protected AbstractListenerBuilderAdvisorProxyVisitorFacade abstractListenerBuilderAdvisorProxyVisitorFacade(DecoratorSingletonAdvisorFactoryInterceptorListenerBuilder decoratorSingletonAdvisorFactoryInterceptorListenerBuilder, AbstractDecoratorBuilderBeanListenerSingletonObserver abstractDecoratorBuilderBeanListenerSingletonObserver) {
AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter abstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter = new AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter();
adapterAdvisorDecoratorFacadeProxy.setAbstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory(this.abstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory);
return new AbstractListenerBuilderAdvisorProxyVisitorFacade();
}
private final public static volatile transient synchronized protected InterceptorSingletonVisitor interceptorSingletonVisitor(AbstractDecoratorStrategyProxyObserverInterceptorBuilder abstractDecoratorStrategyProxyObserverInterceptorBuilder, AbstractVisitorAdvisorFacadeListener abstractVisitorAdvisorFacadeListener, VisitorFactoryFactoryBuilder visitorFactoryFactoryBuilder, VisitorProxyFacadeFactoryFactorySingletonAdvisorDecorator visitorProxyFacadeFactoryFactorySingletonAdvisorDecorator, AbstractAdvisorBuilderDecoratorInterceptor abstractAdvisorBuilderDecoratorInterceptor) {
AbstractProxyAdvisor abstractProxyAdvisor = abstractFactoryFactoryDecorator.getListenerInterceptorFactoryFactory().getAbstractProxyAdvisor();
AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory abstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory = new AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory();
abstractBeanAdvisorSingletonInterceptor.setAbstractFactoryFactoryAdvisorFacadeStrategy(this.abstractFactoryFactoryAdvisorFacadeStrategy);
AbstractAdvisorProxyStrategyIteratorVisitorObserver abstractAdvisorProxyStrategyIteratorVisitorObserver = new AbstractAdvisorProxyStrategyIteratorVisitorObserver();
if (abstractSingletonFacadeFactoryObserver.isInterceptorListenerFacade()) {
iteratorProxyListenerFacadeBean.setAbstractStrategyBean(this.abstractStrategyBean);
AbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor abstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor = abstractBeanInterceptorIteratorListenerFactoryFactoryStrategyProxyObserver.getAbstractObserverFacadeListenerSingletonProxyAdvisorStrategyVisitor().getAbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor();
abstractProxyBuilderVisitorSingleton.setIteratorAdvisorProxySingletonAdapter(this.iteratorAdvisorProxySingletonAdapter);
if (abstractDecoratorAdapterVisitorProxyObserverIteratorBuilderFactory.isDecoratorFactoryFactoryFacade()) {
visitorIteratorObserverProxyAdvisor.setAbstractObserverSingletonProxyAdvisorBuilderDecorator(this.abstractObserverSingletonProxyAdvisorBuilderDecorator);
singletonFacadeAdapterListenerFactory.setAbstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory(this.abstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory);
while (abstractFactoryAdapterSingletonFactoryFactory.isAbstractStrategyFactory()) {
abstractAdapterBeanStrategySingletonAdvisorBuilderListenerFactory.setAbstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver(this.abstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver);
abstractObserverAdapterFactoryFacadeDecoratorBuilderInterceptorFactoryFactory.setAdvisorIteratorFactoryProxyDecorator(this.advisorIteratorFactoryProxyDecorator);
while (abstractFacadeListenerStrategyIteratorAdvisorSingletonProxyObserver.isVisitorDecoratorInterceptorIteratorAdapter()) {
abstractProxyAdapterInterceptorObserverFactoryFactoryIterator.setSingletonFactoryFactoryProxyIteratorStrategy(this.singletonFactoryFactoryProxyIteratorStrategy);
singletonInterceptorDecorator.setAbstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade(this.abstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade);
visitorFactoryFactoryAdapterIteratorInterceptor.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
}
}
} else {
abstractListenerInterceptorStrategyVisitorBeanFactorySingletonIterator.setAbstractProxyStrategy(this.abstractProxyStrategy);
abstractProxyInterceptorSingletonFactoryFactory.setAbstractSingletonIterator(this.abstractSingletonIterator);
}
} else {
singletonListenerFactoryFactoryIteratorProxy.setAbstractObserverProxyIteratorVisitor(this.abstractObserverProxyIteratorVisitor);
}
return new InterceptorSingletonVisitor();
}
native volatile static final public AbstractSingletonObserver abstractSingletonObserver(AbstractBuilderFacade abstractBuilderFacade, ListenerBuilderVisitorFactoryStrategyAdvisorFacade listenerBuilderVisitorFactoryStrategyAdvisorFacade) {
builderObserverIterator.setAbstractProxyBuilder(this.abstractProxyBuilder);
AbstractInterceptorAdapterFactoryAdvisorStrategyProxy abstractInterceptorAdapterFactoryAdvisorStrategyProxy = abstractDecoratorInterceptor.getStrategyObserverListenerVisitorBean().getAbstractInterceptorAdapterFactoryAdvisorStrategyProxy();
AbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator abstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator = abstractFactoryIteratorStrategyVisitor.getAdvisorBuilderVisitorBeanIterator().getAbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator();
while (facadeStrategyObserver.isAbstractFactoryFactoryFactoryListenerVisitorIteratorSingletonBeanAdvisor()) {
abstractFactoryFactoryAdvisorFactoryInterceptorIteratorObserverProxyBuilder.setIteratorAdvisorBeanBuilderProxy(this.iteratorAdvisorBeanBuilderProxy);
AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter abstractIteratorFactoryFactoryFacadeObserverVisitorAdapter = new AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter();
abstractVisitorObserverBeanSingletonBuilderProxyFacadeIterator.setAbstractProxyFactoryAdapterFactoryFactoryInterceptorIterator(this.abstractProxyFactoryAdapterFactoryFactoryInterceptorIterator);
}
return new AbstractSingletonObserver();
}
transient volatile static private synchronized AbstractFactorySingletonFacadeProxyFactoryFactoryIterator abstractFactorySingletonFacadeProxyFactoryFactoryIterator(ObserverInterceptorAdapter observerInterceptorAdapter, AbstractInterceptorIteratorListenerFacadeDecoratorVisitor abstractInterceptorIteratorListenerFacadeDecoratorVisitor, FactoryDecoratorBeanAdapterProxy factoryDecoratorBeanAdapterProxy, SingletonAdvisorFacadeBuilderStrategy singletonAdvisorFacadeBuilderStrategy) {
AbstractBuilderIterator abstractBuilderIterator = new AbstractBuilderIterator();
iteratorSingletonDecoratorVisitorAdvisorFactoryFacade.setAbstractDecoratorAdapterListenerBuilderFacadeIterator(this.abstractDecoratorAdapterListenerBuilderFacadeIterator);
return new AbstractFactorySingletonFacadeProxyFactoryFactoryIterator();
}
synchronized volatile protected native private DecoratorStrategyBuilderListenerSingleton decoratorStrategyBuilderListenerSingleton(ObserverBuilderFactoryFactory observerBuilderFactoryFactory, AbstractStrategyDecoratorFacadeVisitor abstractStrategyDecoratorFacadeVisitor, AbstractAdapterIteratorListenerBuilderFactoryVisitor abstractAdapterIteratorListenerBuilderFactoryVisitor, AbstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator abstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator, AbstractStrategyFactoryFacadeVisitorListenerBean abstractStrategyFactoryFacadeVisitorListenerBean) {
advisorStrategySingleton.setAbstractSingletonObserverAdapterDecorator(this.abstractSingletonObserverAdapterDecorator);
return new DecoratorStrategyBuilderListenerSingleton();
}
}
private final native public volatile static transient synchronized protected abstract class FactoryFactoryFactoryFacade extends AbstractBuilderIteratorBeanDecoratorInterceptorFactoryFactory implements AbstractFactoryStrategyIteratorProxy, AbstractFactoryFactoryListener {
SingletonDecoratorAdapter singletonDecoratorAdapter = new SingletonDecoratorAdapter();
AbstractFactoryFactorySingletonBuilderProxy abstractFactoryFactorySingletonBuilderProxy = new AbstractFactoryFactorySingletonBuilderProxy();
VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory visitorBeanSingletonProxyAdvisorBuilderFactoryFactory = new VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory();
IteratorListenerBean iteratorListenerBean = new IteratorListenerBean();
AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator abstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator = new AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator();
synchronized final private protected void setAdvisorFacadeObserverFactorySingletonBeanProxy(AdvisorFacadeObserverFactorySingletonBeanProxy advisorFacadeObserverFactorySingletonBeanProxy) {
this.advisorFacadeObserverFactorySingletonBeanProxy = advisorFacadeObserverFactorySingletonBeanProxy;
}
public synchronized static protected native volatile transient private void setAbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy(AbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy) {
this.abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy = abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy;
}
native public static synchronized protected private transient final void setAbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator(AbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator) {
this.abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator = abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator;
}
protected public native synchronized final void setAbstractBuilderFactoryFactory(AbstractBuilderFactoryFactory abstractBuilderFactoryFactory) {
this.abstractBuilderFactoryFactory = abstractBuilderFactoryFactory;
}
static private protected volatile transient SingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory getSingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory() {
return this.singletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory;
}
transient private final static public VisitorAdvisorFactoryAdapterProxy getVisitorAdvisorFactoryAdapterProxy() {
return this.visitorAdvisorFactoryAdapterProxy;
}
synchronized protected public final volatile private AbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener getAbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener() {
return this.abstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener;
}
public transient private AbstractListenerAdvisor getAbstractListenerAdvisor() {
return this.abstractListenerAdvisor;
}
public protected transient final synchronized volatile static native private AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter abstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter(ObserverDecoratorAdvisorAdapterBuilderSingletonFacade observerDecoratorAdvisorAdapterBuilderSingletonFacade, AbstractBeanInterceptor abstractBeanInterceptor, AdvisorFacadeSingletonDecoratorListener advisorFacadeSingletonDecoratorListener, AbstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder abstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder, AbstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver abstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver) {
decoratorProxyBean.setProxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter(this.proxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter);
return new AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter();
}
transient native private final synchronized volatile protected static DecoratorSingletonIterator decoratorSingletonIterator(ObserverSingletonListenerFactoryFactoryBuilder observerSingletonListenerFactoryFactoryBuilder, VisitorDecoratorSingletonObserverFactory visitorDecoratorSingletonObserverFactory, AbstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory abstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory, FactoryVisitorProxyDecoratorListener factoryVisitorProxyDecoratorListener) {
factoryInterceptorListenerSingletonFacadeDecoratorAdapter.setAbstractBuilderDecorator(this.abstractBuilderDecorator);
InterceptorProxyFacade interceptorProxyFacade = new InterceptorProxyFacade();
abstractAdvisorAdapterVisitorBean.setAbstractAdapterObserver(this.abstractAdapterObserver);
abstractInterceptorListenerBuilderSingletonAdapterStrategyFactoryAdvisor.setAdvisorStrategyDecorator(this.advisorStrategyDecorator);
return new DecoratorSingletonIterator();
}
synchronized volatile private final protected public static native transient AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade abstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade(ObserverListenerBeanFactoryFactoryAdvisor observerListenerBeanFactoryFactoryAdvisor, ProxyObserverVisitorFactoryBuilderDecoratorStrategy proxyObserverVisitorFactoryBuilderDecoratorStrategy, AbstractBeanInterceptorObserverAdvisor abstractBeanInterceptorObserverAdvisor) {
abstractStrategyFactoryFactoryBeanVisitorBuilderSingleton.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
AbstractListenerAdvisorSingletonObserver abstractListenerAdvisorSingletonObserver = abstractBuilderDecoratorVisitorFactoryBeanProxyFacadeSingleton.getAbstractAdapterProxyBuilderFacadeListenerAdvisorInterceptorFactory().getAbstractListenerAdvisorSingletonObserver();
return new AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade();
}
volatile static transient public native protected AbstractListenerBuilderAdvisorProxyVisitorFacade abstractListenerBuilderAdvisorProxyVisitorFacade(DecoratorSingletonAdvisorFactoryInterceptorListenerBuilder decoratorSingletonAdvisorFactoryInterceptorListenerBuilder, AbstractDecoratorBuilderBeanListenerSingletonObserver abstractDecoratorBuilderBeanListenerSingletonObserver) {
AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter abstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter = new AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter();
adapterAdvisorDecoratorFacadeProxy.setAbstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory(this.abstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory);
return new AbstractListenerBuilderAdvisorProxyVisitorFacade();
}
private final public static volatile transient synchronized protected InterceptorSingletonVisitor interceptorSingletonVisitor(AbstractDecoratorStrategyProxyObserverInterceptorBuilder abstractDecoratorStrategyProxyObserverInterceptorBuilder, AbstractVisitorAdvisorFacadeListener abstractVisitorAdvisorFacadeListener, VisitorFactoryFactoryBuilder visitorFactoryFactoryBuilder, VisitorProxyFacadeFactoryFactorySingletonAdvisorDecorator visitorProxyFacadeFactoryFactorySingletonAdvisorDecorator, AbstractAdvisorBuilderDecoratorInterceptor abstractAdvisorBuilderDecoratorInterceptor) {
AbstractProxyAdvisor abstractProxyAdvisor = abstractFactoryFactoryDecorator.getListenerInterceptorFactoryFactory().getAbstractProxyAdvisor();
AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory abstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory = new AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory();
abstractBeanAdvisorSingletonInterceptor.setAbstractFactoryFactoryAdvisorFacadeStrategy(this.abstractFactoryFactoryAdvisorFacadeStrategy);
AbstractAdvisorProxyStrategyIteratorVisitorObserver abstractAdvisorProxyStrategyIteratorVisitorObserver = new AbstractAdvisorProxyStrategyIteratorVisitorObserver();
if (abstractSingletonFacadeFactoryObserver.isInterceptorListenerFacade()) {
iteratorProxyListenerFacadeBean.setAbstractStrategyBean(this.abstractStrategyBean);
AbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor abstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor = abstractBeanInterceptorIteratorListenerFactoryFactoryStrategyProxyObserver.getAbstractObserverFacadeListenerSingletonProxyAdvisorStrategyVisitor().getAbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor();
abstractProxyBuilderVisitorSingleton.setIteratorAdvisorProxySingletonAdapter(this.iteratorAdvisorProxySingletonAdapter);
if (abstractDecoratorAdapterVisitorProxyObserverIteratorBuilderFactory.isDecoratorFactoryFactoryFacade()) {
visitorIteratorObserverProxyAdvisor.setAbstractObserverSingletonProxyAdvisorBuilderDecorator(this.abstractObserverSingletonProxyAdvisorBuilderDecorator);
singletonFacadeAdapterListenerFactory.setAbstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory(this.abstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory);
while (abstractFactoryAdapterSingletonFactoryFactory.isAbstractStrategyFactory()) {
abstractAdapterBeanStrategySingletonAdvisorBuilderListenerFactory.setAbstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver(this.abstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver);
abstractObserverAdapterFactoryFacadeDecoratorBuilderInterceptorFactoryFactory.setAdvisorIteratorFactoryProxyDecorator(this.advisorIteratorFactoryProxyDecorator);
while (abstractFacadeListenerStrategyIteratorAdvisorSingletonProxyObserver.isVisitorDecoratorInterceptorIteratorAdapter()) {
abstractProxyAdapterInterceptorObserverFactoryFactoryIterator.setSingletonFactoryFactoryProxyIteratorStrategy(this.singletonFactoryFactoryProxyIteratorStrategy);
singletonInterceptorDecorator.setAbstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade(this.abstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade);
visitorFactoryFactoryAdapterIteratorInterceptor.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
}
}
} else {
abstractListenerInterceptorStrategyVisitorBeanFactorySingletonIterator.setAbstractProxyStrategy(this.abstractProxyStrategy);
abstractProxyInterceptorSingletonFactoryFactory.setAbstractSingletonIterator(this.abstractSingletonIterator);
}
} else {
singletonListenerFactoryFactoryIteratorProxy.setAbstractObserverProxyIteratorVisitor(this.abstractObserverProxyIteratorVisitor);
}
return new InterceptorSingletonVisitor();
}
native volatile static final public AbstractSingletonObserver abstractSingletonObserver(AbstractBuilderFacade abstractBuilderFacade, ListenerBuilderVisitorFactoryStrategyAdvisorFacade listenerBuilderVisitorFactoryStrategyAdvisorFacade) {
builderObserverIterator.setAbstractProxyBuilder(this.abstractProxyBuilder);
AbstractInterceptorAdapterFactoryAdvisorStrategyProxy abstractInterceptorAdapterFactoryAdvisorStrategyProxy = abstractDecoratorInterceptor.getStrategyObserverListenerVisitorBean().getAbstractInterceptorAdapterFactoryAdvisorStrategyProxy();
AbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator abstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator = abstractFactoryIteratorStrategyVisitor.getAdvisorBuilderVisitorBeanIterator().getAbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator();
while (facadeStrategyObserver.isAbstractFactoryFactoryFactoryListenerVisitorIteratorSingletonBeanAdvisor()) {
abstractFactoryFactoryAdvisorFactoryInterceptorIteratorObserverProxyBuilder.setIteratorAdvisorBeanBuilderProxy(this.iteratorAdvisorBeanBuilderProxy);
AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter abstractIteratorFactoryFactoryFacadeObserverVisitorAdapter = new AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter();
abstractVisitorObserverBeanSingletonBuilderProxyFacadeIterator.setAbstractProxyFactoryAdapterFactoryFactoryInterceptorIterator(this.abstractProxyFactoryAdapterFactoryFactoryInterceptorIterator);
}
return new AbstractSingletonObserver();
}
transient volatile static private synchronized AbstractFactorySingletonFacadeProxyFactoryFactoryIterator abstractFactorySingletonFacadeProxyFactoryFactoryIterator(ObserverInterceptorAdapter observerInterceptorAdapter, AbstractInterceptorIteratorListenerFacadeDecoratorVisitor abstractInterceptorIteratorListenerFacadeDecoratorVisitor, FactoryDecoratorBeanAdapterProxy factoryDecoratorBeanAdapterProxy, SingletonAdvisorFacadeBuilderStrategy singletonAdvisorFacadeBuilderStrategy) {
AbstractBuilderIterator abstractBuilderIterator = new AbstractBuilderIterator();
iteratorSingletonDecoratorVisitorAdvisorFactoryFacade.setAbstractDecoratorAdapterListenerBuilderFacadeIterator(this.abstractDecoratorAdapterListenerBuilderFacadeIterator);
return new AbstractFactorySingletonFacadeProxyFactoryFactoryIterator();
}
synchronized volatile protected native private DecoratorStrategyBuilderListenerSingleton decoratorStrategyBuilderListenerSingleton(ObserverBuilderFactoryFactory observerBuilderFactoryFactory, AbstractStrategyDecoratorFacadeVisitor abstractStrategyDecoratorFacadeVisitor, AbstractAdapterIteratorListenerBuilderFactoryVisitor abstractAdapterIteratorListenerBuilderFactoryVisitor, AbstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator abstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator, AbstractStrategyFactoryFacadeVisitorListenerBean abstractStrategyFactoryFacadeVisitorListenerBean) {
advisorStrategySingleton.setAbstractSingletonObserverAdapterDecorator(this.abstractSingletonObserverAdapterDecorator);
return new DecoratorStrategyBuilderListenerSingleton();
}
}
Это ж не пример, а набор псевдокогда, он не скомпилируется даже.
Возьмут тимлидом.
А я и не против.
И еще новые фичи вкрячивать в старого монстра, пул реквест с изменениями в 150 файлах, как нехер делать.
>с изменениями в 150 файлах
Наверное какой-то умник в глубинный метод checked exception засунул.
Знаешь, как еще проще? Пиздить палками коллегу, который кидает чекеды из своих методов.
getPersistenceProviderClassName() method, а что это и где это?
На баелдунге очень много мелочей упущено, о которых ты сам должен догадаться. Я очень классно поебался с этим в другой их статье, где надо было свой КРУДик написать.
Нет.
Поменять пяток енумов. Создать пару десятков классов евентов, линстенров и прочех экшонов. Десяток конфигов. Поменять десяток контроллеров заинкрементив версию. Ну и смазать все тестами.
Ладно, срешь аннотациями на интерфейс. INSTANCE блядь, как в 2004.
Обычно есть пачка легаси-,тестов с хмл-конфигами, они всё время падают, ибо всем лень прогонять их перед пуллреквестом.
Запустить мавен без -DskipTests и ждать полчаса.
Это ваще используется? Выглядит как не пришей собаке пятая нога, а не фича языка.
Да, каждый раз, когда пишешь лямбду, ты юзаешь функциональный интерфейс. Костыль, чтобы не добавлять в язык функции.
Корректировка: я скорее спрашивал про создание своих функциональных интерфейсов с использованием аннотации @FunctionalInterface
Это фича скорее для либ, как рефлексия или процессоры аннотаций. Но изредка и в обычном коде юзается.
assertThat(obj.getField()).isEqualTo("boobs")
А вы на работе такое пишете? Где <SELF, E> ? Я боюсь такое писать.
catch (final Exception e) {
RuntimeException ex = new RuntimeException("some info");
ex.initCause(e);
throw ex;
}
А я так делал. Значит можно и в конструхтор.
Баелдунг это говно. А mkyoung слишком хеллоуворлдно. Лучше джава тред.
Но их не любят хипсторы, потому что стримы уродует, либо ломбок вставлять со @SneakyThrows
Смысл тогда в этих тестах, если их скипают? Переписывать лень, а удалить нельзя, чтоб покрытие не похерить?
Или хоть как-то абстрагироваться от конкретных урлов?
>Охуеть от отсутствия тестов, ты хотел сказать.
Тут уж где как. В том проекте с количеством тестов все было более менее. Да были окаменелые куски которые были не покрыты тестами и их старались не трогать даже мертвые куски когда боялись выбрасывать. Но свежие наслоения функционала тестами покрывались и достаточно хорошо. И пайплайн гонялся на каждый мерж в релизный бранч. Но тесты проходили не стабильно и часто были красные, тогда QA ручками прогоняли упавшие тесты.
По ощущениям легаси, это как старая тачка, вроде едет. Но в пороге дырка, одна лампочка перегорела и третья включается через раз. Все можно починить, но денег уйдет столько что проще новую купить. Вот и латают в ожидании момента, когда скопят на новую.
>потому что стримы уродует
а вот меня калит, что с этими блядскими стримами отрабатывается только самый оптимистический сценарий. При негативном в лог ничего не пишут, ошибок не кидают. Дебажить - ебанёшься разворачивать эти 10 уровней лямбд
if (condition) {
} else {
log.warm("bad data");
}такое уже считается УСТАРЕВШИМ.
ты начинаешь понимать, что тесты это не абсолютное благо, что у них есть цена, цена поддержки, цена написания, процент эффективности
Их скипают только пока пилят фичу, ибо слишком долго каждый раз пересобирать с тестами, а хотсвап не всесилен. Когда фича готова, можно собрать с тестами, пофиксить сломанное и пушить. Но часто либо лень, либо забивают.
Вообще-то для такого придумали Either, Result и т.д.
У вас абстракция протекла.
Написать тесты по времени и усилиям может занять столько же, сколько саму фичу с нуля написать.
Пиздовсрационные.
Плохому танцору сам знаешь что мешает.
>Написать тесты по времени и усилиям может занять столько же, сколько саму фичу с нуля написать.
Два чая.
А еще проблема легаси - тесты это спецификация поведения класса или сервиса или эндпоинта или вообще сервиса в целом. Когда все это дело разрабатывается - спецификация ясна и ясно какие тесты надо писать.
Но для легаси спецификация не ясна, непонятно какое поведение надо тестировать. Что баг, а что фича.
Ну ты сам же написал: где как.
Зависит от компании сильно. У нас прям хардкорное легаси. Но пару лет назад мы начали распиливать один монолит на микросервисы. В новых сервисах все красиво. Да, это дорого. Но сейчас это вопрос выживания уже. Пользователи начали бежать из-за устаревшего интерфейса. И оказалось что написать интерфейс с нуля, с рестами и жс фреймворком, внезапно дешевле, чем воротить тоже самое на старом JSP. В итоге вложив сейчас, компания сэкономит в долгосрочной перспективе, плюс лояльность пользователей.
>>1982801
>>1982873
В нормальных конторах тесты руками не гоняют, как уже правильно написали. Есть пайплайны, которые запускаются на МРе. У нас все тесты минут 20-30 идут. Ебанешься ждать.
Ну да, я вот в понедельник пилил фичу, а весь вторник делал тесты на нее. Затратно, зато потом окупается сполна. И не страшно потом этот код трогать. А то у нас реально есть ебанутый код, ещё и без тестов. И вот его трогать откровенно страшно. Можно легко ошибиться, а потом пизды за это получать.
>Но для легаси спецификация не ясна, непонятно какое поведение надо тестировать. Что баг, а что фича.
У меня прямо эта проблема сейчас в написании тестов для старого кода.
Ну и нахуй шли тогда. Нет документации - нет кода. Я сначала тоже парился, а теперь забил. Пускай ПМ думает, документацию ищет, у заказчиков выясняет что надо. А то пиздец. Сделай то не знаю что
В одну строчку точно нет, но опущенные скобки в 2021 некоторые допускают. Хотя, поскольку 95% джавы держится на дедах, то тебя обоссут без скобок. И даже со скобками обоссут.
Я дед 22 года кста
>У нас прям хардкорное легаси.
Лол, давайте меряться у кого легаси хардкорней. У нас система пережила 3 пеерезда системы контроля версий CSV -> SVN -> GIT, а в GIT еще и историю в какой-то момент убили, потому что репа весила неприлично много. На момент смерти проекта репка снова разрослась до 25 гигов и чекаут с нуля занимал пару часов нет, бинарные файлы там не хранились. Билд без тестов занимает 5-10 минут, с юнит тестами 30-40 и там покрытие где-то 30% было.
>У нас все тесты минут 20-30 идут. Ебанешься ждать.
40к тестов, 4-8 часов, поэтому кто сломал билд не всегда ясно. В лучшем случае можно 2 раза за день прогнать пайплайн. Так что процесс подготовки релиза занимал 1-2 недели.
>>1983012
>у заказчиков выясняет что надо
Тебе с вероятностью 99% ответят, что надо так как сейчас работает.
Это фильтр от неосиляторов
Такое ощущение что вложенность ради вложенности.
Помню я попробовал взять эту книгу с наскока и жестко был обломан тем, что нигде не пояснялось оформление таймлифа в штмлке, а именно th:object.
Методом тыка удалось выяснить, что надо писать тип объекта с маленькой буквы, а не его имя внутри метода. И так много всяких интересностей по всей книге. Зато навсегда запомню теперь.
еще и метод не тот заскринил, пздц, нужен был пост
Кто с легаси работал в цирке не смеется.
>>надо писать тип объекта с маленькой буквы, а не его имя внутри метода.
это как раз таки имя переменной
Тогда почему у меня все с грохотом падает?
Это не имя переменной, это имя класса со всеми свойствами.
Thread и stream разные понятия. Правильный перевод thread - нить (по аналогии с ткацким станком), но лучше вообще не переводить и читать доку на английском.
Stream<String> stream = Files.lines(Paths.get(fileName))
ThreadUtils, ThreadFactory, DefaultExecutor и т.д.
по ссылке видео на результат и наш канал на YouTube https://www.youtube.com/watch?v=nxMwbap2bwM&t=19s
ЗП: 250 000 - 305 000 gross
Офис: СПб, Петроградская, "Ясная Поляна" (Льва Толстого, 1-3)
Формат работы: можно офис, можно полностью удаленка.
Нам неважно в каком городе Вы живете.
Языки: English В1-В2
Новый проект – Traceability, этап MVP: оцифровка, отслеживание, сбор и хранение всех данных каждой физической детали и набора событий цифровых объектов транспортных средств.
Нагрузка системы 80 млрд активных записей и до 1000 запросов в минуту.
Чем предстоит заниматься:
– участвовать в разработке проекта: написанного кода очень мало сейчас; будет возможность обсуждать и влиять на разработку;
– предлагать и использовать современные инструменты и технологии для решения задач: нет ограничений по инструментам, если их использование оправдано.
Stack:
- Microservices, event-driven architecture styles
- Kotlin/Java for core modules, other languages can be used if needed (e.g. NodeJS for BFF pattern)
- General instruments of JVM-stack: Maven, Gradle, JUnit, Mockito, Quarkus/Spring Boot, JPA
- SQL (CockroachDB, Postgres) and NoSQL (Redis, HBase, Cassandra)
- AWS, Kubernetes (EKS), Helm, Istio.
Perks:
– работаем строго по ТК РФ, полность "белая ЗП", оплачиваем отпускные и больничные 100%
– ДМС со стоматологией, страхованием жизни с 1 рабочего дня, после испытательного срока – можно включить семью, близких родственников и детей
– fix сумма на год для расходов на спорт, обучение, покупку книг, прохождение сертификатов, посещение конференций, курсов
– новое оборудование (Mac/Thinkpad)
Что забыл в РФ Эррайвал и почему они хайрят русню, а не индусов? Индусы же дешевле.
по ссылке видео на результат и наш канал на YouTube https://www.youtube.com/watch?v=nxMwbap2bwM&t=19s
ЗП: 250 000 - 305 000 gross
Офис: СПб, Петроградская, "Ясная Поляна" (Льва Толстого, 1-3)
Формат работы: можно офис, можно полностью удаленка.
Нам неважно в каком городе Вы живете.
Языки: English В1-В2
Новый проект – Traceability, этап MVP: оцифровка, отслеживание, сбор и хранение всех данных каждой физической детали и набора событий цифровых объектов транспортных средств.
Нагрузка системы 80 млрд активных записей и до 1000 запросов в минуту.
Чем предстоит заниматься:
– участвовать в разработке проекта: написанного кода очень мало сейчас; будет возможность обсуждать и влиять на разработку;
– предлагать и использовать современные инструменты и технологии для решения задач: нет ограничений по инструментам, если их использование оправдано.
Stack:
- Microservices, event-driven architecture styles
- Kotlin/Java for core modules, other languages can be used if needed (e.g. NodeJS for BFF pattern)
- General instruments of JVM-stack: Maven, Gradle, JUnit, Mockito, Quarkus/Spring Boot, JPA
- SQL (CockroachDB, Postgres) and NoSQL (Redis, HBase, Cassandra)
- AWS, Kubernetes (EKS), Helm, Istio.
Perks:
– работаем строго по ТК РФ, полность "белая ЗП", оплачиваем отпускные и больничные 100%
– ДМС со стоматологией, страхованием жизни с 1 рабочего дня, после испытательного срока – можно включить семью, близких родственников и детей
– fix сумма на год для расходов на спорт, обучение, покупку книг, прохождение сертификатов, посещение конференций, курсов
– новое оборудование (Mac/Thinkpad)
Что забыл в РФ Эррайвал и почему они хайрят русню, а не индусов? Индусы же дешевле.
>>Индусы же дешевле.
Индусы очень любят строить бюрократию. Вместо 3 программистов наберут 3 полных отдела и будут перекидывать таски друг на друга. В рашке опять же хорошее образование и много хороших и недорогих айтишников остальные профессии рыночек порешал Да и русня культурно гораздо ближе азиатских чурок.
AssertJ
Это сейчас не выгодно. Через годик за в 250к рублей это будет 100 баксов. И станет выгодно. Смотрят в будущее
Надо требовать зарплату в юанях? А то доллар тоже как то не кажется супернадежным с этими вашими блм, штурмовиками трумпа и дедушкой педофилом у власти.
Да, он ещё принимает значение из енума MurzilkaLanguage, значение по умолчанию определяется локалью.
Вот бы он еще умел искать видео-мурзилки с енум-модификатором акцента NOT_INDIAN.
Блядь, как можно запомнить все популярные аннотации спринга? Читаю туториалы и бошка взрывается. Тут такая аннотация, тут такая. Каждую вторую можно несколькими способами использовать, плюс обязательные/необязательные атрибуты.
И если гибернейтовские/жпашные как то логично устроены, спрингоКоровские тоже туды-сюды, то спринг
Ммвц/спрингДата/спрингСекьюрити мне мозг взрывают.
Дохожу до реста - там вообще пиздец.
Лол. Так уже 50 лет говорят, а доллар стабильнее всех стабильных. А вообще получаю зп в евро и не парюсь
>А то доллар тоже как то не кажется супернадежным с этими вашими блм, штурмовиками трумпа и дедушкой педофилом у власти
Забавно, что хорошо в России работает только пропаганда.
>Блядь, как можно запомнить все популярные аннотации спринга?
Использовать их в работе, очевидно. Зачем учить то, что не используешь?
Согласен.
Плюс если зеленую бумажку начнет лихорадить, как рубль например это будет следствием пиздеца уровня третьей мировой и приведет к таким последствиям, что нормальной мировой денежной системы вообще не будет на какое-то время и никак ты эти риски не уравновесишь.
А если пиндосики будут медленно сдавать позиции, как англичане 100 лет назад, то с долларом ничего страшного не случится, как с фунтом за эти 100 лет.
Ну я посмотрел несколько туториалов по одним и тем же темам - начал по ним же пилить с нуля собственный круд с авторизацией. И потом смотрю на некоторые аннотации, как на новые ворота, хотя я вроде в них немного копался неделю назад.
>Что забыл в РФ Эррайвал и почему они хайрят русню, а не индусов? Индусы же дешевле.
Дешевле всякие отбросы, а грамотные индусы нефига не дешевле. Потому что если Агарвал не дурак, то он и на США/Европу может работать, да и по L1B/H1B свалить в штаты.
Ну и да, курс решает. Я в 2014 работал в крупной международной компании и когда рубль рухнул, мне начальник сказал, что для компании мы стали дешевле китайцев, и сейчас стоим наравне с индусами.
> стали дешевле китайцев, и сейчас стоим наравне с индусами.
И что типа сразу штат российского отделения стали расширять и давать ему больше проектов?
Пили дальше, скоро все необходимое запомнится, а остальное будешь гуглить со скоростью мысли.
Нет конечно, это же крупный международный монстр из 20-ке FORTUNE 500 на тот момент.
Там вопросы какому офису даем проекты, это вопрос политики, а не экономической целесообразности потому сейчас они уже из на 50+ месте.
Ну тогда и что с этого повышения конкурентоспособности из-за цены?
Выиграли только владельцы самых донных бодишопов.
Изначально вопрос то был
>Что забыл в РФ Эррайвал и почему они хайрят русню, а не индусов? Индусы же дешевле.
Очевидно, что у Arrival другие приоритеты. У них нет многомиллиардных контрактов на десятки лет вперед, кучи компаний которые получили вендор лок и теперь не рыпаются.
Так что Arrival более дешевая рабочая сила важна. И в России они нашли хороший баланс стоимости разработчиков - их компетентности.
Пакет тоже хмурится от такой хуйни.
Пакет приклеен к бровям, видимо.
Зачем? Пили на спринг буте.
+15
Захвачен.
Сергей Немчинский ?
/тред
ты там вычитал какая у него точность?
@
@GETTER
@
@SETTER
@
@HUETTER
>contenteditable
А как значения из этих полей получить? Я их меняю в хтмл, а в контроллер передать не получается. Сейчас вот так у меня.
<input type="hidden" name="id" th:value="${item.getId()}" />
<input type="hidden" name="name" />
Если во второй строке написать "number", то это поле можно редактировать, но справа появляется полоса/поле ненужное..
<td>
<form th:action="@{edit}" method="post">
<input type="hidden" name="id" th:value="${item.getId()}" />
<input type="hidden" name="name" />
<input type="hidden" name="lastname" />
<input type="hidden" name="age" />
<input type="submit" value="Edit" class="btn btn-danger" />
</form>
</td>
Это обработчик кнопки Edit, он не работает, я не очень хорошо знаю html, что сюда надо дописать?
>Q: ЧТО СКАЖЕТЕ ЗА ДЖАВАРАШ?
>A: Худшая инвестиция в твоей жизни. Огромное количество говнокода, оторванные от жизни задачки, 1000 заданий по выводу в консоль какого-то говна.
Тем временем, собеседования в Яндекс на помидора: 1000 заданий по выводу в консоль оторванного от жизни говна.
https://habr.com/ru/post/550088/
Но html это другое.
Одного треда xml-программистов достаточно.
Ты зафейлил ещё на этапе выбора типа треда, а значит не умеешь в строгую типизацию == тебе в JS-тред.
Хуй знает.
> вся эта мракобесия закончится, всех обратно загонят в стойло
Рабы, работаете уже в своих кьюбиклах как животные или че?
Естественно лучше
Шапку писал мудак, у меня друг фрилансил на штаты еще в 2007 году. Клепал сайтики на JSP и прочих Velocity для американских компаний.
В сша java ee очень взлетела в начале нулевых как платформа. Но шапка про нынешние реалии.
Копался я тут на досуге в исходниках одной из смежных систем, это просто эпик. Там несколько модулей, одни билдятся антом, другие мавеном, мавен запускается антом, который в свою очередь запускается батником. Часть зависимостей лежит просто жарниками, а часть вообще распакована, будто это просто один из пакетов проекта. EJB, JAAS, JMS ещё ладно. В корне лежит doc-файл с инструкцией, как всё собирать, там нужно сначала скопировать руками какие-то файлы, установить несколько переменных среды и запускать. БД там DB2, итоговый ear-ник нужно заливать на вебсферу, похоже, вручную. Пишется на 7 жабе (я про SE). Пакеты из 50-100 классов, всё в кодировке windows-1251.
Андроид-тред два блока вниз.
===
Да просто нет ничего весёлого или лампового в древних технологиях, мир не от хорошей жизни от них отказывается. Легаси - это хоть и необходимое, но зло. Наверное, правы те, кто так любит всё самое новое и модное.
Появляется десяток новых технологий - 9 из них оказываются говном, десятая улучшает жизнь. Со временем те 9 забываются и кажется, что все, что новое - хорошее.
Пиши код в блокноте
Есть класс сущность. Нужно воткнуть поле экземпляр обычного класса. Можно конечно просто обычные поля использовать, но я хочу вынести их в отдельный класс. Как это огранизовать или как правильно загуглить, чтобы нормально работало?
А зачем тебе это? Поля, которые не пишутся в базу, помечаются @Transient, но обычно их существование говорит, что ты обосрался где-то в архитектуре.
>обосрался где-то в архитектуре.
Тут такой момент, что в плане архитектуры я даже как срать не знаю и обосраться было бы результатом.
>А зачем тебе это?
Ну вот например https://market.yandex.ru/offer/5kcx-5h7XE8rqK8A4ugOaA/spec
Тут десятки характеристик для удобства сгруппированы по классам. Хочу узнать как правильно такое представить в виде сущности. Делать сущность в которой 100 полей или сгруппировать часть полей в отдельных классах? Я хотел попробовать второе, но не знаю как правильно это организовать
Вим - нахуй, nano- best pick
У меня есть абстрактный класс Article и большое количество его наследников и их наследников и конца там нет. Все на одном столе.
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
Хочу чтоб с фронта по одному на всех маршруту "/update_article" прилетал json конкретного вида и апкастился в Article. Как такое провернуть?
Нормальная ли это идея или я делаю говнокод?
И доставь какой-нибудь годноты про проектированию, чтобы я не задавал тупых вопросов.
Да или просто проект на гитхабе jpa + spring boot сложнее тудутаски чтоб я постиг мудрости
но если серьезно, посоветуйте что-то для понимания ООП на очень примитивном, базовом уровне.
пилю кулстори, уже пару лет копаюсь во всём этом, обмазываюсь джавовскими библиотеками, что-то пилю, вроде никаких проблем.
Но я до сих пор не понимаю весь этот дрочинг на тему ООП, вообще не знаю с чего начать,
слишком много теории (наверное сказывается недостаток опыта), много воды в материалах, примеры также очень абстрактны.
Как перестать думать функционально?
Я понимаю, что в больших приложениях, со сложными взаимодействиями тысяч классов, наверное без ООП наступила бы жопа, но дальше этой мысли пока не продвинулся. С шаблонами тоже не очень. Анон, посоветуй что-нибудь. Не хочу быть быдло-макакой, которая только умеет настраивать базы на спринге.
Если серьезно, то большинство макак в ооп доростает только до транзакционных скриптов. На понимании, что бизнес логику нужно выносить из контроллеров в сервисы их развитие останавливается. Дальше в проекте идет тупое наращивание фич и постоянное переписывание, пока все время возрастающие трудозатраты на выполнения тасков не заставят кабанчика сказать, ну нахуй. Кабанчик увольняет всех и нанимает самых дешевых разработчиков, чтобы поддерживать получившееся говно.
Так это уже задача архитектора или хотя бы опытного сеньора, а кабанчик не хочет нанимать архитектора. Макаки вон каждый день фичи пилят, а этот бездарь неделю там уже свои диаграмки рисует и никакой пользы бизнесу еще не принес.
Делать свой voter или в сервисе проверять?
Читаю гайд по вкату и сразу 2 вопроса :
>A: Без английского ты не нужен и можешь смело идти нахуй.
>Q: Я не могу в книги.
Уровень англюсика ~ B2, читать могу, но больше простые статейки, и то процентов 20% слов или устоявшихся конструкций необходимо гуглить, с техлитературой просто немного нудновато и мозг просит попроще, чтобы сосредоточился на кодинге, а не языке.
Никаких волшебных таблеток и нужно задрочить тех.английский? Думал, чтобы какие-нибудь курсы на рутрекере купить да книжек.
И как быстро и насколько анально сложно вот так вот с нуля почти освоить джаву до уровня джуна гуманитарию?
>техлитературой
В душе не ебу какой у меня английский. Говорить вообще не умею, но техлит понимаю и какой-нибудь стек оверфлоу переводить мне не нужно. Статьи и доки понимаю почти полностью, ютуб по автосабам. Этого должно хватить, это тебе не художественный текст. Ты главное на незнакомые слова не забивай и вбивай их в гугл переводчик. Ты постоянно будешь натыкаться на одни и те же незнакомые слова и постепенно запомнишь.
И гугл переводчик на самом деле совсем не плох. Но если будешь все им переводить, ничему не научишься
Иногда перевожу им отдельные фразы, но целый абзац после перевода бывает сложно понять.
>>Без английского ты не нужен и можешь смело идти нахуй.
Английский нужен чтоб с барином разговаривать, больше актуально если ты хохол. Книги для уровня джуна и так давно переведены, а чтоб читать статейки уровня баелдунга или доки спринга много ума не надо.
С инглиша на русский яндекс лучше переводит, особенно целыми предложениями, когда грамматика чуть сложнее.
она же вроде и так на русском есть
Нет таких, чтобы прям вообще всем. Мне вот для 97% задач нужны только @Autowired, @Service и JdbcTemplate, которые ты и так знаешь.
За что мистеру Бернсу Ларри Элисону гугл должен платить? Что он хорошего сделал? И вообще он классический белый угнетатель
За то что бесплатно пользуется бесплатной джавой.
Майкросовту же платят за андроид, которым они не владеют.
На жаве только интелидж идея и градл (на груви). И то и другое не имеют прямого отношения ни к андроиду, ни гуглу, ни к ораклу. В андроидах ART, который ваще не jvm. Оракакл судился только из-за апи, типа апи это интеллектуальная собственность.
ооп так и не взлетело. Уже лет 10 считается зашкваром использовать наследование
предлагаешь всю транзакционную логику размазывать по десятку классов ради "трушности ооп"?
Мамка твоя не взлетела, после вписки с мажорами.
Логику не размазывают, а сосредотачивают в наборе сущностей. Ето ты на своей первой работе будешь размазывть права доступа по сервисам которые рандомно сперва наваяешь, охуевая от счастья что тебе дали проект с нуля писать.
у пользователя есть аккаунт, в котором есть деньги. Как ты через ооп это будешь выражать?
Сделаешь пользователя, в пользователе объект "деньги"?
Логику изменения денег в бд будешь в пользователя пихать? Или в деньги?
Если у тебя появяться 2 разных видов пользователя, будешь наследование и перегрузку делать?
1) Как там в бд хранится это вапще к бизнес логике не имеет отношения. Логику твой заказчик каждый день придумывает. Его не ебет что там у тебя в БД. БД инструмент, переферия забудь про него.
2) Две сущьности пользователь и аккаунт с полем деньги. Если у тебя бизнес процес затрагивает две сущьности, то обычно делают доменный сервис. Такая штука, которая тоже не зависит от проектируемой системы, как и сущности, но естественно зависит от сущностей. Система (юзкейсы) зависит от сущностей и доменных сервисов. Никакого наследования, только композиция.
где в библии ооп написано про доменный сервис и "никакого наследования"? Там наоборот - наследование это суть ооп
Задача нормального ООП как можно больше развязать части кода, а наследование этому противоречит.
Ну какнул же ты, когда сказал что ооп == наследование, а по тому ооп сосет. Хотя каждый школяр знает что наследуются в нормальном (идеальном, а не хуяк-хуяк) коде только от интерфейсов и абстрактных классов. И то основная цель наследования это инверсия зависимостей между абстрактной частью и более конкретной, а не переиспользование кода. Абстракция и полиморфизм, это вообще от языка зависит, как оно паботает. От этого язык менее ооп не становится, чтобы преподы не говорили. ООП это взаимодействие объектов через сообщния, модель предметной области. В хороших проектах используется как связующее звено между заказчиком и кодером, потому что модель в таких проектах отражает хотелки заказчика, а не особенности БД или еще какую частную хуйню.
>В андроидах ART, который ваще не jvm. Оракакл судился только из-за апи, типа апи это интеллектуальная собственность.
1. Когда суд начинался, никакого ART не было, была модифицированная Apache Harmony.
2. Суд признал, что API это тоже собственность Oracle, еще 5 лет назад.
3. Сейчас суд признал, что 9 ядрдов это слишком дохуя и мистер Ларри обойдется одной яхтой.
P.S. Не гоните меня в C++ тред пожалуйста, мне нравится Java, но я хочу узнать про вышесказанное.
моргать светодиодами - вобщем нет, не может.
Моргание светодиодами, 32кб оперативной памяти, самописные операционные системы - это си, область называется эмбеддед
Не умеет, джава - это безопасный высокоуровневый язык, максимально изолированный от системы, и непосредственно через джаву ты не то что до железа не достучишься - функции винапи не дёрнешь. Можешь обмазаться биндингами к нативным либам, то это почти ничем не отличается от того, чтобы сразу писать на сишке. На Андроиде то же самое, там джава только для высокоуровневых приложений, сама система, книга работает с ядром, не на джаве.
ну пилишь кусок на си - потом всё остальное суёшь в православную джаву... профит???
Глянь ансейфы и байтбуферы, по крайней мере байты ебать минуя ждк сможешь. Проще действительно запускать на жаве плюсокод, а не делать жаву плюсами.
Я не особо в курсе сегодняшних зарплатных рынков, поэтому поищу ответа тут.
Допустим у меня год опыта автоматизации тестирования на джаве в крупном проекте сбербанка.
Стек дефолтный, selenium, rest assured, sql и все сопутствующие. И плюс опыт составления ТК, работа в жире, алм и бла бла бла
Какая зарплата у меня должна быть?
Вряд ли здесь много автоматизаторов, но у них зарплаты не сильно от кодерских должны отличаться. Год опыта - это опытный джун, зп где-то 80-120.
Спасибо большое
Хорошо. Разузнаю - отпишусь
В смысле подключить? Сделать этот енум бином?
Это не я придумал. В одном из туториалов увидел. Даже удивился, потому что сложные енамы видел только в задачках на енамы. Так не используют такое в проде?
в смысле захочишь вызывать какой-нибудь метод у другого бина. Для этого его надо будет заинжектить. А инжектить в енамы нельзя
headhunter тебе в помощь
>В универе задали?
Ага
>Сейчас такое легче на жс делать.
На питоне это вообще две строчки, но мне нужно именно на Java используя Swing
public class Lab1 extends Canvas {
@Override
public void paint(Graphics g) {
super.paint(g);
// рисуем-рисуем
}
}
Там еще по-моему надо Graphics2D g2 = (Graphics2D) g;
Мой конвертер тоже с джейсоном работает, но только для специфичных сообщений, их можно отличить по содержимому. Как сделать так, чтобы для этих запускался мой конвертер, а для остальных стандартный? в контроллере какой-нибудь кастомный MediaType поставить?
>>1989297
https://pastebin.com/NsdD1gq3 я все вычисления сам проводил, но там и делать особо нечего. Вычисляешь точки, пишешь в pixels, потом отображаешь:
surface.fillSurface();
surface.repaint();
Привет ебланы, какой нахуй смысл оборачивать ваш говнокод в стотыщ интерфейсов, это такая подсознательная обфускация говна, чтобы оно казалось конфеткой на первый взгляд? какая глубинная мысль оверинженниринга ваших говновысеров?
Но этот же "Привет мир" отображается такими же ебаными иероглифами и в окне Swing.
Вот я значит создаю хелловорлд в NotePad++ с кодировкой UTF-8, то есть юникод. Родная кодировка для джавы - тоже юникод. Казалось бы - ничто не предваещает беды. Но я запускаю этот хелловорлд и получаю ебучие иероглифы вместо русского текста. КАК НАХУЙ?
Пошёл нахуй
Работает в 1.5 раза быстрее на лицензионной windows
https://www.microsoft.com/openjdk
а на нелицензионной?
Но все шарписты с хоть какой-то зп покупают JetBrains Rider. А вижуал студия живет засчет приколоченных к ней гвоздями компиляторов плюсов.
Да ты еблан.
VS Enterprise это лучшая IDE всех времён и народов.
В ней уже нечего улучшать, она достигла совершенства.
Всё остальное - жалкие тени, которые никогда даже близко не приблизятся ни по одному параметру.
Единственное, что можно поставить в укор Visual Studio Enterprise, это то, что она overblow. Но тут ничего не поделаешь, такой сейчас мир - всем похуй на компактность.
Но вышесказанное не относится к VS Code. Видел я её как-то сбоку. Мой вердикт простой - насколько VS Enterprise идеальна, ровно настолько же VS Code это мусор, который не заслуживает даже упоминания. Ни в каком контексте. Похоронить и забыть.
>Но все шарписты с хоть какой-то зп покупают JetBrains Rider
Ха ха ха. Мне бы так - пиздеть и не краснеть.
Или сам веришь в эту хуйню?
Тогда у меня для тебя плохие новости.
find usages тоже есть?
> VS Code
Он же имеет примерно такое Же отношение к вижуалке, какое джаваскрипт имеет к джаве.
сравнивать вижуал студию и вс код в джава треде. Это уже не троллинг, а реальная шиза.
Все джависты втайне фапают на студию. Но могут позволить себе лишь огрызок в виде вскода.
Я в курсе. Есть подозрение что это навалены скины на бывший Monodevelop от Xamarin. Но это неточно. С вероятностью 0.75.
Ну так чем биллибойское поделие лучше идеи?
Это говно, даже не поддерживает string interpolation для питона.
package com.test;
import org.junit.Test;
public class UnitTest {
@Test
public void test(){
Project.test();
}
В командной строке пикрил.
Что ему еще нужно от меня? Как скомпилировать это не внеся изменений в UnitTest.java? Причем самое забавное, когда я пропускаю его через Maven, он каким-то чудом все компилирует.
Раз прожекта нет в импортах, то он лежит в том же пакете. И джавак его не находит из-за того, сто ты не указал его -cp, мавен это делает сам.
>>1990319
Я тоже хеллоуворлды со спрингбутом пишу в виме, а то идея слишком жирная, не хочу закрывать браузер и другие процессы, запускать идею и ждать 15 минут, пока запустится.
А как указать?
javac -cp "junit-4.11.jar;Project.java" UnitTest.java?
Я так пробовал, он выдает ошибку:
error: no source files
В -cp указывается путь до папки с пакетом, он не догадается сам, что нужно искать в том же пакете, в котором компилируемый исходник.
Это я понимаю, но синтаксис то какой должен быть? Если я просто укажу один cp с папкой, содержащей Project.java, он будет ругаться на junit...
Ты жавапрограммист, но до сих пор не смог накопить обоссанные 150 долларов на срузен3600 и еще 50 на мамку для него? Хуево тебе.
Я для облегчения этот Project.java в ту же директорию скопировал, что и UnitTest.java
Когда URLClassLoader делегирует загрузку классов родителю? Пишу специфичный метод, который позволяет грузить классы с одинаковыми именами от разных классоадеров, и заметил, что когда вычитываю URLClassLoader'ом классы из ресурсов из папки ресурсов мавена, на локальной машине, то он, походу, не делегирует их родиетлю, хотя я ожидал обратного эффекта. То есть, получаю на тестах:
java.lang.AssertionError: expected: java.lang.Class<class plugin1.PluginA> but was: java.lang.Class<class plugin1.PluginA>
При загрузке одного и того же класса разными URLClassLoader'ами. Выходит, он ничего не делегирует родителю, и грузит класс исключительно самостоятельно? А в каких случаях он вообще что-то делегирует наверх?
Я хотел при загрузке новых классов и загрузках копии классов из одной и той же директории грузить всё URLClassLoader'ами, в надежде на то, что он заберет дубликат у родителя из их кэша, а повторы в разных директориях уже грузить своим кастомным класслоадером и переименовывать, что даст провернуть такой финт ушами и использовать все классы в одной системе. Но по итогу у меня и дубликаты из одной и той же директории не equals, потому что, по видимому, URLClassLoader ничего не делегирует родителю.
Понимаю, лень, ну продолжай жрать говно тогда, если у тебя комп даже браузер открыть не может, не выронив кал. Вопросов к себе не возникает никаких?
Если ты такой крутой и хочешь делать из консоли, то почему не юзаешь мавен? Ты реально будешь скачивать джарники в lib/ и прописывать вручную?
у тебя мавен собирает жарник без либ? Там есть плагин, чтобы оно все либы к тебе в жарник закидывало, и получался итоговый жирный самодостаточный жарник
Идея очень зависит от этого. Они даже внаглую написали в рекомендуемых системных требованиях - ССД. Это дурное требование на мой взгляд, даже ААА игры такое не пишут.
И в чем соль?
Сколько у тебя класс лоадеров? Какая у них иерархия? Как ты пытаешься грузить классы?
И при чем тут ресурсы, если у тебя классы грузятся?
Так почитай про синтаксис класспаса... еблан...
В итоге приходится изучать кучу всего по фронту примерно нихуя по спрингу. Иначе все выглядит как полнейшая параша.
Кто знает как это фиксить? Изучить фронтенд на уровне хтмл цсс основы жс жквери бутстрап?
Vaadin
Хватит хтмл, цсс и фримаркера.
> В итоге приходится изучать кучу всего по фронту примерно нихуя по спрингу. Иначе все выглядит как полнейшая параша.
Твоя цель спринг выучить, или чтобы было красивенько-модненько-SPA?
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.6</version>
</dependency>
http://localhost:8080/swagger-ui.html
И не еби себе мозги
изучал фронт сразу с реакта, строки жса видел только в мемах 2 + "3" = "23". Там вообще ничего сложного нет
А чому не таймлиф?
И если я например хочу выучить Спринг для клепания рестов под спа? Все таки жс-фреймворк придется учить.
Никому не всралась Windows fot ARM вот им и пришлось самим делать порт JDK. Плюс у них есть свое облако, там они тоже делают свою сборку JDK.
как же заебали с этими лицензиями, кучей разных версий
как было всё-таки лампово до 1.8.0.2
правильно ли я понимаю, что теперь гугл не будут ебать за использование джавовских jdkшек, и тем самым получается что и котлин им уже нахер не всрался, можно продолжать пилить \ улучшать нативную экосистему андроид?
Ну не на шарпоговне писать же
Как вообще для вката jetbrains academy + leetcode + petprojectы какие-нибудь? Плюс ещё Кормена наебнуть и что-нибудь по проектированию рестухи. Из опыта в ит стажировочка по системной АНАЛитике и 3 курс вузика по прикладной информатике. Плюс пара хаков выигранных. Хватит такого чтобы каким-нибудь джуном пойти или ещё чего-то наебнуть?
> более изящно реализовать удаление
как угодно, но блять не склеивай строки запросов никогда
если уже пишеш то вставляй параметр WHERE id = :id потом query.setParameter
Но это не точно.
Ну вообще если знаешь sql, там на литкоде что-то можешь решить обсираясь не сильно жидко, основы джавы и спринга, то можешь ходить по собеседованиям.
Как правило на работу берут тех, кто ходит на собесы, а не дрочит до посинения кормена или документацию спринга.
Мой одногруппник вообще пошел работать скала джуном, зная скалу около недели и не имея за плечами никакого опыта/хакатонов/олимпиад.
JdbcTemplate, сам коннекшен получается через JNDI с вебсферы.
Используй jooq.
Излишнее использование ORM приведет к тому, что приложение будет работать медленно даже на небольших данных.
Еще в шараге учил sql, ну и в крудах через ждбс общался с базой данных.
Планирую прямо сейчас подавать на всевозможные места для студентов, лохов, стажеров, говноедов, и т. д.
Какие подводные? Меня хоть куда-нибудь пригласят на собеседование с таким подходом? Хочу получить струю мочи в лицо, чтобы был стимул дальше развиваться. Ну или понять, чего я не знаю, чтобы в краткие сроки что-то получить и снова на собес.
Как вам план?
В принципе с точки зрения CQRS выглядит так
1) Для Query используем фасад за которым квери билдером делаем запросы к БД
2) Для Command используем ORM (для DDD в агрегате)
Но делаешь удаление и твоя оптимизация выглядит необоснованно. Тем более у тебя не bulk операция. С точки зрения правильного использования БД вообще избегают удалений. Тем более прямо из комманды пользователя
Да похоже у тебя десктопный helloworld и рассуждения что ORM тормозит на отдельной операции удаления еще смешнее
мимо шел
>Делаю тут програмку с запросами в базу данных и отображает данные в таблице и вроде бы все работает,но я понимаю что реализация ужасная и вообще недопустима. Подскажите пожалуйста,как бы мне более изящно реализовать удаление
Что в моем сообщении не относится к твоему воросу?
Спросил как нормально - ответил как нормально
>>С точки зрения правильного использования БД вообще избегают удалений.
Почему избегают удалений, если есть бэкапы, и как правильно делать?
It depends
В простых случаях не избегают
В более сложных нужно умное удаление вместе с отношениями или нужен аудит. Чтобы реализовать софт делит нужна нормальная архитектура иначе, ты утонешь в багах связанных с проверкой удалена ли запись в бд или только помечена как удаленная
В совсем сложных случаях используется event sourcing
Не учи.
1) Это тяжелая операция
2) Трудно не накосячить с каскадным удалением
3) Могут быть нужны всевозможные архивные данные или отчёты
4) Никто для тебя не будет хранить и накатывать бекапы
Поэтому делают либо булеан is_delete, либо таймстамп удаления
шаблонизаторы устарели лет на 10. Сейчас в моде SPA и общение с беком через рест запросы
в смысле создатель? Гослинг
Жаба - это не C++, в ней нет овердохуяллиона тонкостей, которые нужно обязательно знать. И нужды в таких книгах нет. Есть несколько популярных книг, пойдёт любая.
А по части продвинутых навыков? Есть какие-то финты ушами после алгоритмов Седжвика, Спринга и паттернов проектирования? Я про книжки.
мы тут работу работаем, а не выебываемся и не играем
Понадобилось состряпать форму на свинге, в Идее. Есть какие-то гайды как пользоваться встроенным туда менеджером компоновки? Таскаю эти чертовы кнопки и спейсеры туда-сюда, какая-то бесячая хуйня происходит, какие-то разделы на форме появляются и исчезают, все своей жизнью живет. Бесит пиздец. Помогите, плиз, пока я ноут не разъебал.
что за ебаный пиздец в этом вопросе вообще, почему все так сложно? В вижуал-студии на шарпе когда накидываешь компоненты, их можно как угодно таскать, как в фотошопе, почему здесь такой пиздец.
Потому что джава - худший выбор для десктопа, и все, кто пытается, должны страдать.
Ну, сама IntellijIDEA с тобой бы не согласилась, максимально красивое приложение (она насколько знаю запилена не только на жабе, но еще и на Свинге)
У меня и нет желания сделать что-то красивое. Уверен, дело в крайне хуёвой интуитивности, и стоит понять как все работает, запилить что-то не составит уже труда.
В идее конструктор ненужное говно, его вообще удалить надо.
Избавиться бы от моды на SOAP для начала.
А так GraphQL-параша доберётся до жабы лет через 5 после того, как она станет модна в хипстерских язычках, в которых тоже до сих пор рест-параша.
А все)
Неужели тот самый бекенд, который не энтерпрайз?
>>Поэтому делают либо булеан is_delete, либо таймстамп удаления
А почему просто автовакуум не отключить/сделать отложенное очищение, а в аудите хранить что конкретно удалялось? Мб переносить в отдельную базу удаленные данные, если что то критичное? Это ж ебанешься is_delete добавлять к каждой таблице, а потом еще и логику всю переделывать?
Полностью десктоп не умрёт никогда. Просто значительная часть приложений переехала в веб.
А зачем жаба пыталась долгие годы завоевать десктоп-нишу? Свинг и апплеты в конце 90-ых еще ладно, но JavaFX выпустили в 2008 непонятно зачем. К тому времени основной юзкейс был в jEE на серверах.
Специализированный энтерпрайз-софт тоже на мобилках?
>>1992220
Частично завоевать всё же получилось. Тогда пилить кроссплатформенный десктоп было почти не на чем, либо невъебенно сложные и небезопасные кресты, либо умирающий тогда делфи, либо жаба. Не то чтобы такого софта много, но попадается. Мне вот в универе на разных предметах по проектированию/моделирования всякой хуйни нужно было делать лабы в специальных программах, и достаточно много из них было на жабе.
Да + всякая IDEF/UML-параша, названия уже не помню.
есть такой josm для редактирования опенстритмапа - на жабе
для меня страусТРУП от мира джавы это Elliotte Rusty Harold, годно пишет
в плане финтов ушами, находил такую книженцию(пока не читал)
> Covert Java: Techniques for Decompiling, Patching, and Reverse Engineering
можешь глянуть, отпишись потом как оно.
Глянул. Прикольная темa, но она для челов из треда про асм. Тема сочная на самом деле
Запрограммировать такое поведение.
>Дефолтом не надо
Почему?
>при инсерте вызвать CURRENT_DATE можно
Я персистшу ентити менеджером.
> Почему?
Потому что это бизнес-логика в БД, работающая к тому же неочевидно, все привыкли к значению по умолчанию только для ID.
> Я персистшу ентити менеджером.
Тогда в сервисе делай.
Ок.
То есть вместо шаблонизатора нужно таки учить жс-фреймворк?
Смузи-долбоеб закукарекал, у которого верх понимания о программном приложении - это прогноз погоды и справка о котировках биткойна. Всякие убер-сложные пакеты, типа САПРов, сред трехмерной графики, движков разработки игорь, и вообще все то что юзает на 99% только локальный контент, еще лет 30 вряд ли переедут на веб, а то и никогда, по крайней мере пока каналы связи еще так на порядок не подрасширятся, и не изобретут интернет реально доступный всегда и везде. Нахуя делать в вебе то что на 100% локально по данным?
Хуй знает, зачем такое вообще нужно. Разве что для тех, кто сам дизайнит виртуальные машины, или оптимизирует какие-то мегатонны легаси-говен. Если обычному разработчику захочется такой глубины, то он скорее всего вообще не будет смотреть на джаву как на рабочий инструмент, а будет вариться где-то в сях
Ну что-то ясно, но зачем нужна часть прослоек не ясно.
Пытаюсь посмотреть другой тутор, чтобы закрепить и заполнить пробелы. Из плюсов - шаги примерно те же самые. Но там для той же самой задачи используются другие классы-прослойки. Причем тоже не особо комментируются.
Короче сделать каждое действие есть по 10 способов. И это как-то запутывает.
Короче научите курить доку. Реально нужно от корки до корки Reference Doc по всем часто встречающимся кускам спринга читать(оценил размер и 7 html-страничек по кускам с которыми я постоянно сталкиваюсь это где-то на две тыщи страниц)? Потому что пробовал по именам классов из середины читать и не очень понятно.
>>САПРов, сред трехмерной графики, движков разработки игорь, и вообще все то что юзает на 99% только локальный контент
Дохуя популярных движков на джаве видел, маня?
>>Нахуя делать в вебе то что на 100% локально по данным?
Думаешь банковский софт локальный по данным, долбаеб? Бекенд ммо тоже локальным по данным? Иди дальше байты свои еби, если не понимаешь где джаву вообще используют.
Ну так вообще десктоп девелопер это жалкие проценты от всего рынка труда разработчиков. И по тенденции их доля ещё сократится.
А джава десктоп это жалкие проценты от жалких процентов. Такие вакансии днём с огнём будешь искать.
Забыл про них.
>unique id
Но тогда у меня будет просто уникальное id,а мне нужно чтобы я не мог в таблицу reservation добавить две записи на один объект
Нет, unique не на revervation.id или revervation_objects.id, а на revervation.object_id. При инсерте/апдейте будет выполняться проверка, что в reservation нет других записей с таким же object_id, и двух записей с ссылкой на один объект не будет.
В чем твой пойнт?
Мне уже посоветовали создать докер-образ сетки и кастовать ПОСТ на этот контейнер из жавы, но я ни слова не понял. Как это гуглить?
Хуй знает, зачем тебе докер, для твоей задачи он, может, и не нужен.
Предполагается, что у тебя будет питоний скрипт с http-сервером (например, flask или bottle), который будет получать список твоих ссылок, дёргать "сетку" и результаты возвращать в виде ответа.
Или есть способ с питоним подпроцессом и общением с ним через пайп, но это сложнее.
Я использовал https://github.com/bcdev/jpy
Но нормально он только под линуксом работает, собрать его под винду мне не удалось.
на онли питоне я на изи бы уже все собрал, но я, извините, изучаю жаву и средства жавы, поэтому надо сделать так.
> извините, изучаю жаву и средства жавы
Пиши сетку на жаве, обрабатвай картинки и генери жсон на жаве, замени pom.xml на pom.java, бд пусть будет Apache Hive.
Тогда нахуя тебе питон тут?
>Дохуя популярных движков на джаве
конечно же нет. ведь на ней не пишут десктоп почти. Но при чем тут джава, душный долбоеб? ты (или какой-то дебил вроде тебя) высрал своё говно касательно десктопа вообще, а не роли в нем джавы. и при чем тут банки вообще, хуесос? банки потому и на вебе, потому что юзают сетевые данные. иди таблетку прими, выпиздок, чтоб в шары не долбиться.
>>джава тхред
>>при чем тут джава
Ты совсем ебанько? Возвращайся в свой петушиный угол, откуда ты выполз.
Как с чистого html через <form method="post"> отправить данные в spring mvc? А то везде жсп/таймлиф.
почему бы тебе просто не почитать что такое http протокол блеать?
Если у тебя бут, положи свой хтмл в src/main/resources/public, а в mvc-контроллерах делай return "index.html", либо в пропертис добавь "spring.mvc.view.suffix=.html" и возвращай просто "index". В пом.хмл должна быть зависимость spring-boot-starter-web. И будет работать без шаблонизаторов, зотя хуй знает, зачем тебе это.
Или @Bean как бы создает бин и сразу же, здесь же его автоварит в контекст?
@Bean вешается на метод, который должен создать объект бина, спринг вызовет метод и положит результат в контекст. Это так называемый java config. Обычно юзается с классами, которые ты пишешь не сам, а юзаешь готовые, создаёшь объект, настраиваешь нужным тебе образом и возвращаешь.
@Component и его производные вешаются на класс, спринг создаст объект этого класса сам и полодит в контекст. Это annotation config. Обычно для классов, которые пишешь сам.
Оба автовайрятся через @Autowired.
https://www.youtube.com/c/EugeneSuleimanov/videos
@dushnila
почему душнила не может быть хорошим человеком?
Видео с собесов норм, уроки не очень, имхо.
Пошел нахуй, дебил ёбаный. Будто в треде по джава любой контекст предполагает неявное наличие джавы в утверждении. Насрал тебе в рот так что из ушей полезло, чмо. Соси.
Все уже перепробовал - и джаву обновил, и в переменных среды указал ссылки на ту самую JDK, на которой идея работает, и в самом конфигураторе джавы оракловском нашел и подключил эту же ЖДК. Что не так может быть?
А что, никаких версий кроме той, дилетантской, что я сам выдвинул насчет ломаности, нет?
>>1994024
Я не юзаю идею профессионально, я можно сказать учусь но сам а не в учебном заведении чтоб вписываться во всякие там программы
>>1993971
олсо, по сабжу, когда в настройках проекта в модулях указываю 8 версию (а не 14 которая по дефолту), то все собирается и работает. Проблема только в том что у меня по проекту напихано всяких фич 14 версии, типа switch-экспрешенов, и перепиливать все под восьмую версию просто потому что я, долбоеб, не знаю как виндовс заставить запустить это все на 14 jre, я бы не хотел пока что
ты штаны снять забыл как и всегда, обтекай чмо
В треде html программистов, мне не смогли помочь, там обсуждают реакты какие-то, вуе, я вообще хуй знает что это. У меня должен быть простой html и thymeleaf
Потому шо 8 самая православная, остальное говнище
Анон, что там насчет ООП? Какие вопросики на собесах задают? В шапке какая-то хуита закреплена.
А из под IDE она тогда как запускается, если говнище, м?
Версия становится легаси, когда выходил следующая версия, а не когда у неё истекает срок поддержки.
Да.
Отбой, 2 дня ебался, оказалось забыл выпилить в аннотации к сущности листенер для автоматического сэта времени.
Как сделать, чтобы докер запускался автоматически перед такими тестами?
StreamAPI - это комплекс инструментов внутри дефолтной джавы, который для работы юзает лямбда-выражения. Сами по себе лямбда-выражения - это просто вариант синтаксиса (вне стрим-АПИ и даже любого конкретного языка), который позволяет реализовать функциональный подход к программированию. В джаве например лямбдавыражением можно инициализировать объекты функциональных интерфейсов или пихать их в любое место, где ожидается аргумент такого типа.
StreamAPI задизайнен таким образом, что все его методы принимают как аргументы функциональные интерфейсы, и возвращают либо снова объект стрима, либо целевой результат (если метод терминальный). Это позволяет пихать в аргумент лямбды (ну либо ссылки на статик методы, что делает синтаксис еще короче)
Все это позволяет писать краткие лаконичные вещи.
Проработал пару лет в ETL и вполне хорошо разбираюсь в том как Oracle субд работает, но что-то меня начинает напрягать узконаправленность скиллсета. Хочу нормальный ентерпрайз ЯП знать и вообще программистом стать.
Немножко хобби проектов на Шарпе делал в прошлом, но особо не продвигался, опыта software development считай нет.
Сижу и думаю, Жава или Шарп? Душа вроде больше к Шарпу, но по факту и там, и там нихуя не знаю толком.
Вопрос следующий: насколько ценными для разработчика Жавы будут глубинные знания работы Оракла? Или это больше незначительный бонус, и не должно оказывать значительное влияние на выбор языка?
Храни вместо пяти переменных один массив и текущий индекс в нём, сначала 0. Пр жмакании на кнопку записывай массив[индекс] = значение и инкремегтируй индекс. Разумеется, со всеми проверками.
Отговорите вкатываться в вашу хуйню. Почему-то именно джава для меня выглядит привлекательно, хотя я не сильно углублялся и дальше лямбда выражений нихуя не видел.
Есть шанс попасть на 10-летнее легаси, где придётся программировать на xml.
Что там нынче используют в эпоху микросервисов? Всякие MIcronaut/Helidon/Quarkus слишком сырые и глючные? Vert.x слишком низкоуровневый. Spring слишком тормозной и жрет память как в не себя.
Как что-то плохое.
Будешь бд-рабом, интересных задач чуть менее, чем нихуя, запредельный порог вхождения, заебешься на собесах разворачивать красно-черные деревья, как-то так... достаточно отговорил?
Сейчас жабистам вообще похуй на память, держу в курсе. У нас на продакшене есть часть кода, где в цикле создаётся объект для работы с вещественными числами и всем па ху ю
Пердак от твоего сообщения мне не слабо разорвало,спасибо
Я не могу,я этот курсач ебучий полтора месяца писал,мне осталось только добавить вот эту табу и еще одну и все
Чувак, я пошутил...
Бывает, мне один раз пришлось за ночь освоить borland C++ builder и написать на нём курсач но был небольшой бэкграунд с Qt.
Достаточно ли логировать только входные/выходные параметры + сообщения об ошибках? Не покрывать же код логами через строчку? Не получится ли что эти логи мешают читать собственно рабочий код? Может надо все это через АОП и аннотации писать?
Флаг Непала
Спасибо, анон!
двачую, намного удобнее свинга
Разве нельзя GroupLayout чем-нибудь безопасно заменить не переписывая весь код ?
Равно ли это
String s = "Двач";
System.out.println(s);
Этому
System.out.println("Двач"); ?
Одинаково ли оба способа потребляют ресурсы и как будет правильно писать?
В первом случае у тебя еще будет ссылка на строку на стеке, хотя возможно JIT ее и с оптимизирует.
Если именно по щелчку мышкой, то addMouseListener() и там в mouseClicked() методами rowAtPoint и columnAtPoint узнаешь куда кликнули и делаешь свои грязные дела.
Если тебе нужно именно событие что ячеку выделили можно, например, и с клавиатуры - то https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/events/TableListSelectionDemoProject/src/events/TableListSelectionDemo.java
Дай бог здоровья
Ну мне 8 гб мягко говоря маловато.
У меня на работе 16, хватает для всего. Для учебных хеллоуворлдов можно обойтись 8.
В банках скорее всего хуй. В конторах, которые пилят тырпрайз для банков и прочих возможно
и в требованиях написано это
"Постраничная загрузка, сортировка, фильтрация для запросов, возвращающих списки"
где про это почитать? гуглеж в интернете ничего не дал
спросил бы у них самих, но не знаю, насколько этот вопрос тупой и дискредитирует меня
java - только банки? в пицду банки...
Ты небось сырую джаву используешь.
Рекомендую зайти в свойства проекта и выставить уровень языка в 11.
Ну ты пидарас, я бы тебя не взял в свою контору.
> Незаконные изготовление, переработка, приобретение, хранение, перевозка или пересылка в целях сбыта, а равно незаконный сбыт сильнодействующих или ядовитых веществ, не являющихся наркотическими средствами или психотропными веществами, либо оборудования для их изготовления или переработки
Хм, я даже не знал, что за это есть статья.
Вся
хорошо, что все не ограничивается тобой и твоей конторой
На практике с вероятностью 99,9% это будет одно и то же на уровне исполняемого кода. Сам компилятор и среда выполнения десятилетиями отлаживались уберквалифицированными людьми. По этой причине, любые твои велосипеды скорее всего будут проигрывать встроенным в стандартную библиотеку инструментам.
Спасибо
Что происходит, почему я не могу сделать простой input в IDEA?
Код пикрелейтед. Когда build жму, выдает ошибку про null. Про это я в целом вроде нагуглил, пишут что так и должно быть.
Потом я открыл Groovy Console, вбил там другой пикрелейтед, и у меня ничего не происходит. Внизу вылезает эта консоль, но ввода НЕТ, текст НЕ набирается.
Я нагуглил, что нужно в VM прописать, но и это не помогает (даже с ребутом).
Что не так?
Всегда так. Никакой ты не гений, угомонись. Почитай еще про паттерны, и выяснится что почти любой возможный пердежь кодом - это какой-нибудь неебаться умный шаблон проектирования.
>т.к сделать все по паттернам никто не сможет)
не пизди, фабрика и синглтон частенько используются
ну и всякие рода MVC и миддлвейры (АОП) тоже своего рода паттерны.
Если я пишу консольное приложение, то я всегда могу просигнализировать себе о какой-то особой ситуации в коде тупо через System.out.print.
Но что делать, если я переношу всю логику в GUI? Я не увижу там сообщений из исходящего потока. Есть вариант выбрасывать Эксепшен, ловить его в UI и выводить там ex.message. Но это коряво, потому что при любом раскладе после броска исключения исполнение метода больше не идет, и я не получаю результат. Как надо поступать?
Вот он умеет сам считать цифры через своих операторов.
Т.е. например
def result = 5+5
println result
выдаст 10.
Я хочу передать ему 5+5, но как string. Т.е. грубо говоря, чтобы он этот string преобразовал в код, который потом исполнит.
Например
def input = "10+10"
println input
Но он просто выдает мне 10+10. Как заставить его поставить значение input после println не как string, а как "код", чтобы он посчитал сумму?
>>1996802
Че вы тут распизделись, молодежь. Я имел ввиду что большая часть этих т.н. "паттернов" это настолько очевидные вещи, что любой у кого есть мозги сам их будет использовать, без всяких учебников, даже не зная что использует их.
>фабрика
вот как раз типичный случай. даже долбоебу очевидно то, что собой представляет этот шаблон
Если тебе для отладочных целей, то это делается через логгирование, там у тебя пишутся сообщения в файл построчно, и можно потом прочитать.
Если для юзера - не кидай эксепшены, вместо этого показывай диалоговое окно или придумай какое-нибудь окошко с уведомлениями в углу.
https://www.jetbrains.com/help/idea/settings-keymap.html
Restore Defaults или ручками проверь, что там на бекспейс заасайнено.
Как я выведу окошко, если тот код, который является логикой, понятия не имеет о UI-оболочке?
Например я парсю какой-то кириллический текст, и обнаруживаю что по ошибке в него закрался иероглиф. Класс парсера написан отдельно от UI, и прямо в нем нельзя сделать что-то типа showMessage("pizdets!") (он тупо не знает ничего о том, кто его вызовет). Можно выбросить эксепшен, который ловит UI, но тогда я остановлю парсинг на иероглифе. Как сделать что-то вроде эксепшена, но не обрывающего дальнейшее исполнение?
Какие-нибудь стратегии через мапу бинов, например, красивая вещь, которую новичок сам вряд ли придумает.
Вот я и говорю, что ты не понимаешь суть паттернов. Это не какие-то алгоритмы, придуманные умными дядями и тётями и обязательные к изучению, а всего лишь распространённые способы решения архитектурных задач, когда кодеры сами придумывают решение, и наиболее популярные имеют название. Паттерны не придумывают, их обнаруживают. Конечно же они очевидные.
Как вариант, во время обработки ничего не выводить, записывая ошибки в некий объект-результат обработки, из логики этот объект вернуть гую, а гуй уже по факту покажет, были ли ошибки. Но это смотря что за задача.
Нет, это ты просто долбишься в шары похоже. Я и не говорю что это алгоритмы выдуманные дядями-тетями и обязательные. Я говорю что это все очевидно и так, в основном. И потому обнаружение того что ты чего-то там допер до того как узнал что это умный паттерн/алгоритм обозначает только то что ты не конченный овощ на питании через трубочку
Пчел
Я же тебе описал конкретную задачу. Нельзя что-то вернуть ГУЮ, кроме как через аутпут метода или эксепшен. Потому что тот кто работает на классом логики не знает ничего о том, что ГУЙ будет с этим работать. Поэтому хотелось бы иметь нечно, подобное механизму исключений, но не прерывающее выполнение. Например какой-то абстрактный Контейнер, который тоже можно бросить и поймать, но он не имеет семантики ошибки, выражающейся в том, что все обрывается в момент throw.
Ничего подобного в джаве нет, тебе придётся юзать существующие механизмы. Либо кидай эксепшен в конце логики, забив на семантику, либо добавляй возможность аозврата гую. Логика как не знала про гуй ничего, так и не будет, просто вернётся строка с сообщением, которую хоть передавай в гуй, хоть в out, хоть игнорируй.
Да в общем-то и сам уже понимаю. Довольно странно, что такой механизм не предусмотрен, выглядит довольно удобно.
Сложно было бы читать код, где кроме вызова методов и возврата из них ещё и постоянные прыжки туда-сюда по стеку вызовов. Некоторые даже на эксепшены из-за этого жалуются.
Гуглил - либо полная хуйня, либо ничего не понятно
ссылка на гитхаб репо: https://github.com/EugeniySichev/OnlineStoreEngine
У нас есть нестатический nested класс и в нём разрешены константы (static final), так почему это работает для примититвных типов и String, но не работает для Object и классов обёрток?
нодо именно с ветки master сделать коммит и запушить? Я просто с ветки dev это делал
попробуй на ветку dev переключиться, если есть такая возможность не у создателя репозитория
Ну, это были бы не прыжки, а как бы второй служебный слой исполнения поверх основного, который бы никак не влиял на основной. Прыжки у эксепшена как раз из-за того, что в любом месте откуда эксепшен прелетел, программа как бы разворачивается и больше не продолжится (кроме разве что блока финнали) вплоть до точки обработки. Опять же, в отличие от механизма исключений, перехват такого сообщения мог бы не быть обязательным - хочешь лови, хочешь игнорь.
В итоге придется сделать дополнительный аргумент в сигнатуре, int-код ошибки, либо строку, куда буду пихать лог. Опять же, дефолтный джава-String не подходит из-за иммутабельности, придется или делать оболочку, или юзать стрингбилдер. Почему нельзя было как в шарпе сделать дополнительный канал аутпута через модификатор вроде out. Джава местами каличная, короче.
Я не особо вникал, но у меня твой dev запустился, правда пришлось немного с конфигурацией поковыряться
во-первых твоя конфигурация для flyway просто не читалась, потому что для неё нужен префикс spring (на имя базы и пароль не обращай внимания, я свой поставил, что б запустить)
во-вторых, в pom.xml рекомендую в зависимостях использовать стартер для jpa , а не писать с версией, как у тебя было, потому что ты используешь spring boot и его менеджмент зависимостей (но это так, придирка больше)
в-третьих, у меня не запускалось приложение, пока я не закомментил твой тест в Main классе, запустил 1 раз приложение чтоб смигрировать flyewayем и не запустил снова раскомментировав
мне кажется, что оно первый раз не поднималось просто потому что твой тест лез в базу, которая еще не была создана
Я сейчас скажу банальность, но тесты лучше писать в папочке test отдельно, а не в Main классе.
Хэй, я сделал многое для коммьюнити, теперь ответьте на мой вопрос!!>>1996970
Получилось решить проблему?
Если да, то я рад.
> твою проблему решить не могу, так как еще совсем зеленый
Да не, к тебе претензий нет. Это больше для сидящих тут дофига синьёров помидоров. Часто вижу, что люди являются гуру фреймворков, но когда что-то их спросишь по фреймворку, то сразу нуу ээ сереньк и всё
Да, получилось, спасибо огромное
>теперь ответьте на мой вопрос
А что тут особо необычного?
Инстанс нестед-класса в принципе нужен для того, чтоб быть привязанным только к инстансу аутер-класса, и для него обычная семантика статика в принципе неприменима (разве что в каком-то особом случае, когда общей могла бы быть переменная для всех инстансов, принадлежащих одному внешнему инстансу). А то что модификатор static допустим для примитивов никак не нарушает "межобъектовой изолированности" по данным, потому что примитив все равно финальный, и изменить его нельзя. А вот внутреннее состояние любого объекта, кроме стринга, который тоже магически финальный в Java, можно менять, не меняя саму ссылку.
Короче, примитив хоть и static, он как бы избыточно статик, все равно у каждого он как бы свой собственный исходя из того что менять его нельзя. Разница только в том, что даже если такой примитив объявлен публичным, его все равно нет в доступе у инстанса. Может быть это позволяет экономить немного памяти, храня всего одну константу, хотя абсолютно никакого отличия от ситуации когда у каждого инстанса она своя - нет.
Забыл вставить цитату
> Inner classes may not declare static members, unless they are compile-time constant fields (§15.28).
Заворачивай ответ во врапер да и все. При вызове метода гуем проверяй врапер, есть ли там ошибки, если нет - то показывай результат выполнения. Все как в вебе. А работа на исключениях - плохой выбор.
А если тебе нужно выводить ошибки в процессе без прерывания - наверни асинхронности. Просто в другой поток засылай сообщения об ошибке и выводи их по мере появления.
1) На клиенте тоже можно делать лог и тоже можно в него писать. В свинге наверняка что-то стандартное есть. В javaFx точно есть.
2) На клиенте все вызовы бека оборачиваешь в обработчик, обработчик смотрит ответ, в случае ошибки показывает алерт с аккордеоном. В аккордеоне подробности или стектрейс. Не будешь же ты тётушек из бухгалтерии заставлять искать файл лога? А так нажали на подробности и отправили тебе скриншот
Потому что это и не надо. Ведь очевидно, что своего рода статиком для любого иннер класса являются нестатические поля объекта-владельца. и так до любой глубины вложенности. Так что явная статик-семантика тут нахуй не нужна.
Да ето все очевидно, просто это требует слегка более нетривиальной доработки как принимающей так и отсылающей стороны. С эксепшенами что легко, так это то что тебе сама среда подскажет как их прокинуть по цепочке вызовов до самого гуя. Ну а что они плохой вариант для организации стандартной работы это да.
вроде как тут джава, не?
Вообще нихуя не знаю про груви, да и вообще я не программист, но то что ты просишь это вообще какой-то малосовместимый с жизнью пиздец.
Ты хочешь чтобы язык считал фрагменты кода объектами первого класса, то есть мог манипулировать ими как данными. Даже поддержка функций как объектов первого класса в потомках Си реализована через костыли - функциональные интерфейсы, делегаты, и подобное. Сам подумай, любой код-фрагмент должен быть откомпилен, а у тебя он появится уже в рантайме, когда пить боржоми поздновато. И каким хуем он, справшивается, должен пройти компиляцию?
Вообще что-то такое есть, вроде на лиспах и прочих подобных, там код порождает код, порождающий код и так далее, но на то он и интерпретируемый.
Короче, вангую что это невозможно с вероятностью 99,5%
Груви - скриптоввй язык, в них невозможное распространено повсеместно.
Да и сделать такое вполне аозможно хоть на си, сами компиляторы же как-то компилируют "в рантайме". Достаточно притянуть компилятор в качестве библиотеки.
>>1997345
Это хуёвое, внеязыковое, решение. В языке нет средств таким способом оперировать такими сущностями. Подключение всякой внешней хуйни - это не часть языка. Пусть даже в его стандартной поставке есть готовая библиотека для таких развлечений. Я надеюсь ты различаешь средства языка и решения которые можно на нем реализовать вообще?
Очевидно мне не 5+5 надо будет в итоге складывать, а обрабатывать как минимум что-то типа 5+(102-2)5...
>>1997337
В целом вроде та же джава, но я тебя понял, боялся что так и есть. По сути рили сперва надо будет типа скомпилировать код, потом его декомпилировать и скомпилировать заново, звучит как бред.
Накрыло меня чет, придется логику все таки прописывать, массивы, if else и т.д.
И что, что оно внеязыковое? Косинус тоже нельзя вычислять, потому что это часть стдлибы, а не встроенный оператор? У тебя есть задача и есть инструмент, который эту задачу решает. И больше ничего не важно, часть это синтаксиса или не часть.
Чел, ты реально дегенерат?
>Очевидно мне не 5+5 надо будет в итоге складывать, а >обрабатывать как минимум что-то типа 5+(102-2)5...
def result = "5+(102-2)5..."
assert Eval.me(result) == ТВОЙ ОТВЕТ ДЕГЕНЕРАТИВНОЕ ХУЙЛО
Ассерт - это просто пример использования. В твоём случае будет передача пользовательских данных в Eval.me(), а его результат будет ответом.
> запуском абсолютно левого рантайма, который никак не связан с запускающим?
И что, в чём проблема? Числа и арифметика везде одинаковое. ОПу не нужно работать с данными запускающего рантайма, а если бы и нужно было, он бы их передал туда.
def input = "10+10"
println Eval.me(input)
Вместо "10+10" читаешь с клавиатуры, хз, как это в груви делается.
ошибки валидации тоже можно делать эксепшенами
идиот-кукаретик, ты хэлоу-ворлдов переписал что ли? Пиздец у тебя все просто. Ну напиши тогда прямо сейчас здесь программу, которая принимает листинг программы, вычисляющей пусть решения квадратного уравнения, компилит и запускает его в этой вашей ёбаной груви-песочнице, потом закинь туда объект уравнение и получи оттуда аутпут. Минут 10 хватит тебе написать? А потом спиздани еще мне что это охуеть какие штатные средства, все равно что вызвать Math.pow в джаве. Приступай, сучёнок
Шиз, я вообще этот твой груви впервые увидел, чты ты доебался-то бля?
Кстати то ли 15, то ли в 16 это ограничение уберут.
это чисто ограничение компилятора, технически эти классы идентичны
Увидит, но как юзер он хочет не копаться в мутных логах, а чтобы было в гуе и удобно.
ну потому что нет консоли, которая бы это вывела. ты там можешь сколько угодни писать system.out.println и ниче не увидишь
Точно, не увидит, там ведь не java.exe, а javaw.exe. Но это решается батником-запускатором.
А, теперь понятно про что ты. Ну может принтстрим как-то организовать туда, куда тебе надо.
СТМ?
Какие классы идентичны? И в чем тут ограничение? Зачем вложенному классу иметь статик-поля?
>>1997408
Да в итоге убрал нахуй оттуда все эксепшены, просто классу добавил публичное поле List<String> warningLog (у меня он не статический, каждый запуск бизнес-логики создает инстанс инструмента), и все месседжи ошибок туда записываю. Это никаких обязательств со стороны ГУЯ не создает (как было бы, если бы поменялась сигнатура метода с добавлением оболочки под лог). В итоге, после прогона метода тупо вывожу лог, записанный в объекте, через showDialog и порядочек, предварительно проверив obj.warLog.size() > 0
Спасибо. Что-то я начинаю подозревать, что именно такой вариант как у меня и есть дефолтный. Я просто на довольно долгое время переезжал в VisualStudio, и похоже у меня какие-то рефлексы сбились. По крайней мере, в новоустановленной идее на другой машине поведение точно такое же. Хотя мне почему-то кажется что иногда раньше я вручную удалял влево по одному табу бэкспейсом
Это что-то с мавеном связанное?
>>Это никаких обязательств со стороны ГУЯ не создает
Что за обязательство то? Ты по переведенным книгам чтоль учился?
это значит метод hello() класса com.company.task.helloworld должен вызывать методы твоей логики.
Наверное свитчер-юрист...
Вообще, посидев в этом треде, понимаешь что далеко не каждого погромиста-анальника можно понять, о чём он вообще говорит, у каждого свой понятийный аппарат, поэтому блджад описывайте подробнее вашу задачу. Вроде один язык, но каждый о своей хуйне думает.
Есть
1) Groovy
2) Структура:
src
main
groovy
Hello.groovy
3) Сам код:
class Hello {
static void main(String[] args) {
println "Hi"
}
}
4) Maven, у которого в pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>Hello</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
5) Я жму в Maven кнопку package, создается jar
6) Но при запуске jar ебанная ошибка:
Error: Could not find or load main class Hello
Caused by: java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
Почему он найти не может этот Hello класс? Я так понимаю, что он по умолчанию ищет в src/main/java, как ему прописать путь то до main/groovy?
Есть
1) Groovy
2) Структура:
src
main
groovy
Hello.groovy
3) Сам код:
class Hello {
static void main(String[] args) {
println "Hi"
}
}
4) Maven, у которого в pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>Hello</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
5) Я жму в Maven кнопку package, создается jar
6) Но при запуске jar ебанная ошибка:
Error: Could not find or load main class Hello
Caused by: java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
Почему он найти не может этот Hello класс? Я так понимаю, что он по умолчанию ищет в src/main/java, как ему прописать путь то до main/groovy?
Не шарю за груви, но наверняка jvm класс Hello нашла, но не видит классы самого груви. Нужно сделать так называемый fat jar, в котором все либы будут упакованы.
Ебанушка, ты хоть документацию груви почитай по настройке мавена и градла.
>Какие классы идентичны?
Статический и не статический классы.
>И в чем тут ограничение?
Ограничение в том, что не статический внутренний класс не может иметь статических мемберов кроме psf полей.
статический класс может
>Зачем вложенному классу иметь статик-поля?
Например фэктори метод для создания объекта.
Еще раз перечитал твой вопрос >>1996551 - да, это дефолтное поведение идеи и причем давно https://blog.jetbrains.com/idea/2014/07/the-backspace-key-gets-smarter-in-intellij-idea-14-eap/
Но можно отключить, поищи в настройках в backspace.
public final class Main {
public static void main(String[] args) {
String name = "Nikolay";
change(name);
System.out.println(name);
}
private static void change(String name) {
name = "Artem";
}
}
> Nikolay
Потому что ты меняешь саму ссылку, а не объект, на который она указывает. Правда, строку поменять не выйдет, она иммутабельна.
спасибо
public static void main(String[] args) {
int[] arr = {1,5,2,3,4,8,6};
int result = Arrays.binarySearch(arr,5);
System.out.println(result);
}
>Почему результат не 1, а -6???
https://music.youtube.com/watch?v=zjIxQQQ7r7U&feature=share
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch(int[], int)
>If it is not sorted, the results are undefined.
Это даже не UB. Могли бы добавить ассершн в начале метода, но тут видимо производительность важнее.
>Это даже не UB. Могли бы добавить ассершн в начале метода, но тут видимо производительность важнее.
Ахуенный план! И вместо O(log(n)) получить
O(n)!
Да тут никакой бинарный поиск не нужен, простой перебор уже получается.
А ну да)
Random r = new Random();
Arrays.sort(array, Comparator.comparingInt(a -> r.nextInt(3) - 1));
Какие бы сниппеты в этом треде ни постили - всё это уже есть в апацхе коммонс.
В метод передается копия ссылки. Но ты можешь передать ссылку на объект с полем и поменять это поле. Так будет работать
public class Main{
public static void main(String[] args) {
Name nameObject = new Name("Nikolay");
nameObject.change();
System.out.println(nameObject.nameField);
}
static class Name {
String nameField;
public Name(String name) {
this.nameField = name;
}
public void change() {
nameField = "Artem";
}
}
}
>>Artem
ну если копия ссылки, указывает то она один и тот же объект? может дело в том, что String не изменяемый?
Хорошо, вот здесь меняю объект. Все равно не изменяется та, первая ссылка.
public final class Main {
public static void main(String[] args) {
Car car = new Car("Toyota");
change(car);
System.out.println(car.brand);
}
private static void change(Car car) {
car = new Car("Mercedes");
}
static class Car {
String brand;
public Car(String brand) {
this.brand = brand;
}
}
}
хули тут непонятного-то? Если у гуя где-то есть вызов что-то вроде
doSmth(someObj)
а ты поменяешь сигнатуру на
doSmth(Obj obj, StringBuffer errLog)
то у тебя незамедлительно все развалится, потому что вызов больше не является допустимым.
А если ты просто добавишь в класс Class, где объявлен doSmth какой-нибудь public errLog, то не теряя способности ГУЯ работать здесь и сейчас, ты хоть через 5 лет в нем можешь написать в конце showMessage(clazz.errLog)
>свитчер-юрист...
чего блять?
>> может дело в том, что String не изменяемый?
>name = "Artem";
тоже самое что и
>name = new String("Artem");
поэтому стринг или любой другой класс не имеет значения - все равно ничего не выйдет.
Потому что стек.
Ты передал методу копию ссылки на объект, после чего привязал эту копию к новому объекту. А тебе надо воспользовавшись этой ссылкой манипулировать самим объектом.
car = new Car("Mercedes");
car.brand = "Mercedes";
Для этого враперы и делают. doSmth(Dto)
А что там внутри этого дто хоть каждый день меняй. Сегодня внутри есть лог, завтра нет. Сигнатура не изменится.
И это называется Слабое зацепление (Low Coupling)
>не статический внутренний класс не может иметь статических мемберов
Нет. Иметь он их может, просто неявно. Любое поле Класса-владельца по своей семантике - то же статик поле. Оно общее для любого объекта не статик иннер-класса, принадлежащего данному объекту. У класса верхнего лвла просто нет явного "владельца", потому ему нужно специальное объявление статика (которое помещает это поле в неявного владельца - объект класса Class, доступный через рефлекшн). Так еще раз - в чем ограничение?
>> фэктори метод для создания объекта
Хуектори. В чем проблема? Ну пусть тебе надо хуячить карточки разных банков под одного овнера:
Owner outer{
Name name;
BankCard getCard(name, Bank){
return this.new BankCard(name, Bank);
}
BankCard inner{
//constructor
}
}
>>1998224
Потому что в джаве НИЧЕГО не передается по ссылке. Только по значению. Ты просто записал в name новую ссылку на "Артём", с внешним объектом ничего не стало. Надо либо возвращать из метода новое значение через return, либо юзать мутабельную строку вроде стрингБаффера (только само собой без =new внутри метода. для дуракоупорности передавай его как финальный, тогда он тебе тупо не даст сменить ссылку, а литералом ее инициализировать и так нельзя)
чел ты
Деланье враппера это тоже определенный геморой. К тому же его делают если изначально несогласованы интерфейсы. А если исходить из того что что-то уже написано и работает без врапера?
Со вторым все и по названию понятно. А вот насчет первого я сначала не понял, что он про то же самое, затащил и теперь бугурчу. А ведь мне всего лишь хотелось писать список кафка топиков в application.properties, чтобы спринг сам их создавал...
Так что то я не пойму, все таки по ссылке или по значению передаются параметры в метод? Выходит что копируются по значению. Только в случае с объектным типом копируется ссылка на объект.
>Только в случае с объектным типом копируется ссылка на объект.
Копируется значение ссылки. То есть в джаве все передается по значению.
ну наконец-то ты допер до самых прописных основ, которые уже выше сказали тебе
Даже твоя мать шлюха.
Ну объект то объект, а на него еще и ссылка есть. Поэтому рекурсии не обнаружено.
пример:
public void myMethod(final String var1, final int var2){...}
Есть такой кодстайл - делать всё final, даже небо, даже Аллаха, и только в тех случаях, когда значение меняется, final убирать. Теоретически должно защищать от некоторых ошибок.
Изучи Java Core и дальше тыкай Android API. Вот тебе пара мурзилок по ним:
- https://startandroid.ru/ru/
- http://developer.alexanderklimov.ru/android/
>Нет. Иметь он их может, просто неявно. Любое поле Класса-владельца по своей семантике - то же статик поле. Оно общее для любого объекта не статик иннер-класса, принадлежащего данному объекту. У класса верхнего лвла просто нет явного "владельца", потому ему нужно специальное объявление статика (которое помещает это поле в неявного владельца - объект класса Class, доступный через рефлекшн). Так еще раз - в чем ограничение?
Нахуя ты пиздишь про вещи в которых не разбираешься, а? Ну завали хлебало, за умного сойдешь!
Открываешь Java Virtual Machine Specification: Chapter 4. The class File Format и обнаруживаем, что по спеке нет никаких статических и не статических классов, все разлииче в одном атрибуте класса, но он ни на что не влияет.
Что же касается твоего высера
>общее для любого объекта не статик иннер-класса
Мудило, пойми - иметь доступ к полю и быть классом в котором это поле определено - это две большие разницы. Хотя что еще ждать от человека который пишет
>У класса верхнего лвла просто нет явного "владельца"
но тут то и так копии идут в параметр. Это получается только для читателя кода (человека) пометка?
копай в kotlin
Если параметр помечен как final, то он не переопределен в теле метода
Если говорить не про легаси, джакарта, конечно же, полностью не умрёт, чтобы вот прям как апплеты. Хоть кто-то да будет её юзать. Это скорее будет как со всякими микронаутами и кваркусами, они же всерьёз нахуй никому не всрались, когда есть спринг, хотя отдельные хипсторки юзают, вот примерно так и будет с джакартой.
Чел... Микронаут и Кваркус это будущее Джейвы. Кому нужен тормозной спринг, который падает в рантайме, когда есть проверенные временем фреймворки, которые используют грааль. Твой спринг на старте отжирает по 600 мб, когда кваркус ест 20 мб. Фреймворки с компайл тайм DI и граалем - будущее клауд нейтив джейвы.
Иди свою блядюгу-мать поучи, сын дрисни. Тебе никто не утверждал что статики там есть на уровне JVM или вообще как-то утвержденные каким-то атрибутом. Я тебе сказал, тупой ты высерок, что есть очевидный способ реализовать их по смыслу просто отдав внешнему классу. И это, мудак ты безмозглый, идеально реализует семантику статика, как поля общего для всех инстансов.
>У класса верхнего лвла нет явного владельца
Так опровергни это, мразь. Во что вложен любой созданный тобой класс?? Надеюсь ты не настолько безмозглое хуйло, чтоб не отличать наследование и владение, и не начнешь тут сейчас пиздеть про Object своим молокососным ртом.
Культура дискуссий в Восточной Европе, хуле.
>А ведь мне всего лишь хотелось писать список кафка топиков в application.properties, чтобы спринг сам их создавал...
Это, кстати, был тонкий реквест.
1. Надо признать что ты пиздоглазое мудило, которое нихера не знает но лезет со своим никчемным мнение.
2. На уровне байткода внутренний класс отличаеься только InnerClasses attribute. Все остальное в том числе доступ к приватным полям магия компилятора.
3. Вложе и владелей это разные вещи, в спецификации вообще нет понятия владельца, это твоя больная фантазия выдумала.
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.7
нет... ты просто тупой пидор-кукаретик. не думаю что стоит с тобой разговаривать. Я ему про практическое применение того смысла, который закладывается в статик, он мне про спеки и байт-код. Густо и вонюче насрал тебе в рот напоследок, а теперь иди нахуй. предпочту чтоб ты больше мне не отвечал, сын больной шлюхи. хорошего тебе дня.
Фу, чмо ёбаное обосранное. Стриггерилось. Так и знал что слезешь сразу, только лазейку учуешь. На всякий случай досрал на тебя, обтекай, опущ.
Обсуждения крудошлёпской хуйни более близки к реальности, язык в чистом виде никому не нужен. На работе скорее столкнёшься с несработавшими аннотациями из спринга, чем с проблемами из-за статика.
Язык интересен лишь постольку, поскольку на нём есть работа. Как только работы не станет, тредов не станет тоже.
не пизди. мне язык интересен как формальная система, а работу вашу, тем более такую петушиную как крудло, я в гробу видал.
По твоему лингвисты естественных языков, которые изучают саму суть механизмов языка, и математики например, занимающиеся тем же самым над абстрактными объектами любой природы - все аутисты? А всякое офисное говно которое делает магазины на диване - ебать сверхлюди?
Как бы то ни было, лингвисты и математики работают и получают зарплату, в отличие от борщехлёбов на двоще.
>нравятся эндофункторы и монады.
О да, тащусь от всего этого. От всякой ко/контравариантности производных типов, различных вариантов систем типов, лямбда-исчислении, мммм...
Как это нет, есть - cglib. Отличное АПИ, любые аспекты, простой и понятный джава синтаксис.
Бери и ебись.
Ну что тут сказать... я бы пожалуй порекомендовал тебе "вон из профессии". Ибо любой программист который хотя бы немного не математик - это скам и мусор, и его судьба быть на задворках движухи. Вроде как уборщица в больнице тоже "в медицине", а бич который подметает аэродром тоже "в авиации"
Две ошибки в синтаксисе - конструктор без знаков контейнера аргументов, и необязательный в нем же параметризующий тип, который можно заменить даймонд-оператором начиная вроде с 8 версии. Вывод - рисовал какой-то залетный бездарь.
На тебя тут минимум двое ссут уже, а то и трое. Возможно, тебе стоит задуматься над своей позицией
на, отбивайся
чем больше союзников придумаешь, тем ты убедительнее, да сем?
И как там создать аспект, который перехватывает вызовы всех методов с аннотацией transactional?
На всякий случай напомню важное правило:
1) Если ты троллишь в тематике, на всякий случай проверь, что ты не пытаешься прикрыть этим свою обосранную жопу
с картиночками спорить начал не я
>3 пик снизу
> CPU 0%
> Memory 146%
Ну конечно джава виновата в том что у долбоеба наверное цикл в цикле в цикле по хуиллиарду элементов
Борщехлебы совсем обезумели, уже с учеными себя сравнивают
ну и оподливился же ты, даун
Ну мам!
На тебе свежий баелдунг https://www.baeldung.com/cglib
>>1999356
Обходишь все классы и методы, делов то. Я же сказал
>>1999271
>Бери и ебись.
Раз уж синтаксис AspectJ тебе сложно.
Я не говорил, что сложно. Я не понимаю, нахуй он нужен, когда все это можно выразить в виде джава интерфейсов, чтобы все возможности были зафиксированы и задокументированы.
А затем кто-нибудь добавит параметризованный конструктор, забудет добавить пустой, и рефлексия пойдёт нахуй.
Каждый ждун отправляет код на кодревью.
Многие популярные либы/фреймворки создают объекты через пустой конструктор, который находят с помощью рефлексии в рантайме. Если такого конструктора нет, они кидают эксепшены.
AspectJ может обрабатывать любые классы, в том числе и те куда у тебя нет доступа.
Например у тебя есть йоба REST библиотека и ты хочешь на каждый вызов добавлять в thread local - trace id, можешь спокойно обернуть ее в аспект.
Вот они, вкатывальщики по мурзилкам. Это же блять в первой главе любой книги по кору рассказывают.
Неймспейсы для слабаков
Вместо них пакеты. Если у тебя в двух разных пакетах определяется один и тот же класс, для разрешения неоднозначности имя класса везде в коде пишешь с указанием пакета: new java.lang.String();
Хорошо
Понял, принял. Премного благодарен
Какая-то упоротая книга, переменные spisok и mnozestvo, страниц всего 236.
А вот хер. Мне там с аргументами доказали, что шарп хуевей.
В основном, всем лучше, кроме того что джава простая как медный таз, а в шарпе хуиллиард всяких мелких фич. Разве что VS без решарпера сосёт у Intellij. Но давно уже есть Rider, так что это не плюс. Только у райдера нет комьюнити эдишена, но кого в этой стране когда это ебло?
Мимо и то и то
Тебе оно очень надо?
Из практики: примерно половину форичей в итоге переделываю на классический for(;;), потому что заранее не всегда удается понять что тебе нужен будет индекс, а заводить внешний индекс и вручную его дергать туда-сюда - впадлу и чревато ошибками по причине затупи.
Да мне вообще ничего не надо, я просто развлекаюсь.
Может быть, он ко мне прилетал чисто под решение некоторых задач (работа с SDK кое-каких гигантских шиндошс-приложений), да еще я немного кодил инди-игрули на Unity.
Если ты джавоблядь, то тебе практически никакого труда не будет туда свичнуться на простые вещи. Я сказал что он лучше, потому что практически все, что можно написать в джава, без изменений синтаксического "порядка" (с точностью до мест операндов, разделителей, етц) можно написать в шарпе, но не наоборот. Например в шарпе ты можешь объявить и реализовать метод прям внутри другого метода, в джава же ты будешь городить гроздья приватной нахуй ненужной прямо в теле класса служебной хуйни, которую дергают только паблик-члены. И даже если тебе в шарпе захочется сделать именно так, ты там можешь объявить #region и скрыть в нем вс. эту поебень. Для реализации функциональщины там есть не только лямбды, но еще и делегаты, для быстрой встроенной тасовки коллекций не только возможность подтянуть аналог Stream API (я хз как оно там зовется, не юзал), но и встроенный прям в язык псевдо-SQL (LINQ). Короче, там пездец всего, но можно и не знать и не юзать это, а писать как на джава.
Может имелось в виду перезагрузки?
Понял, принял.
Мне всем нравится, просто тот хэлоуволдщик-вкатыш 146% имел ввиду классический циклообразный форич. Ну и Stream это прямая как пиздец последовательность операций, на нем нельзя ничего такого сделать, что предполагало бы использование индексов, доступ к более раннему и более позднему члену потока "прямо сейчас"(get(i+1), get(i-1)). Короче, более узкоспециальная вещь
>объявить и реализовать метод прям внутри другого метода
Э, функциональный интерфейс+любмда, не?
В джаватредах хвалят щярп, в шарпотредах - джаву. Чудны дела твои, Господи...
>>имел ввиду классический циклообразный форич.
Просил форич - получил форич, который перебирает элементы, как и положено форичу.
Циклы, индексы - это уже к вайлу, ну или его сладкому аналогу.
А кто он, если даже поверхностный синтаксис не знает?
Двачую
Двачую.
При чем тут лямбда-то? Сам интерфейс при всем желании нельзя спрятать внутри метода, он будет либо вложен в классе, либо вообще отдельным файлом. Если только у тебя там не что-то настолько элементарное, что стандартные функциональные интерфейсы встроенные в джаву подойдут
>Если только у тебя там не что-то настолько элементарное, что стандартные функциональные интерфейсы встроенные в джаву подойдут
Скорее всего так и будет. Если в метод функционального интерфейса надо передавать сотню аргументов, то ты с большой вероятностью что-то делаешь не так.
По-моему, ты читаешь проблему как-то не так. Я тебе сказал, что бывают ситуации, когда какой-то метод нужен ТОЛЬКО для того чтоб вызвать его другим методом того же класса, и в этой ситуации вполне логично чтоб он лежал внутри этого самого вызывающего метода. При этом внутренний метод может быть гораздо сложнее метода-оболочки.
Например, мне надо переработать какую-то коллекцию элементов, которая передается на обработку классу, пусть попарно. Тогда я сначала напишу приватный метод private process (El el1, El el2), А потом метод public process (List <El> elList){foreach.... process(el(i), el(i+1))}. И такая цепочка вызова может тянуться не на два метода даже, а на несколько. Писать специально функциональный интерфейс и лямбду просто для того чтоб это организовать как ты сказал - это какое-то вливание говна в жопу, а не решение.
Не знаю, о чем ты, я не тот анон, с которым ты начал диалог, но что касается функциональных интерфейсов, то для твоего private process (El el1, El el2) есть BiFunction или BiConsumer.
Подключение к базе данных через JPA:
private static final EntityManagerFactory entityManagerFactory;
...
entityManagerFactory = Persistence.createEntityManagerFactory("wsbackup");
...
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
...
// работа с @Entity объектами БД
...
entityManager.getTransaction().commit();
Файл persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="wsbackup" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/__ora8</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.logging.level.sql" value="FINE"/>
</properties>
</persistence-unit>
</persistence>
Зависимости в pom.xml:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.7.0</version>
</dependency>
Что за хуйня тут написана? Где JDBC параметры подключения к базе, где имя пользователя и пароль? Как мне узнать, под какой именно учеткой подключается к базе данных?
Что это значит <jta-data-source>jdbc/__ora8</jta-data-source> как мне, блядь, логин-то узнать?
Тимлид сказал "сиди и разбирайся", я вообще не вдупляю.
Подключение к базе данных через JPA:
private static final EntityManagerFactory entityManagerFactory;
...
entityManagerFactory = Persistence.createEntityManagerFactory("wsbackup");
...
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
...
// работа с @Entity объектами БД
...
entityManager.getTransaction().commit();
Файл persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="wsbackup" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/__ora8</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.logging.level.sql" value="FINE"/>
</properties>
</persistence-unit>
</persistence>
Зависимости в pom.xml:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.7.0</version>
</dependency>
Что за хуйня тут написана? Где JDBC параметры подключения к базе, где имя пользователя и пароль? Как мне узнать, под какой именно учеткой подключается к базе данных?
Что это значит <jta-data-source>jdbc/__ora8</jta-data-source> как мне, блядь, логин-то узнать?
Тимлид сказал "сиди и разбирайся", я вообще не вдупляю.
persistence.xml: https://pastebin.com/Ayj20a9x
pom.xml, зависимости для JPA: https://pastebin.com/M7xYN4qN
Обычно логин задается в hibernate.connection.username, а тут такого нету.
>Там может быть еще хуиллиард аргументов-флагов и так далее.
>Если в метод функционального интерфейса надо передавать сотню аргументов, то ты с большой вероятностью что-то делаешь не так.
Пиздец ты дебил тупой. Это ты или кто-то еще высрали тут хуйню про функциональные интерфейсы свои. Просто иди нахуй, заебал.
Уволен нахуй
Чего рвешься-то? Я всего лишь процитировал свой пост чуть выше по цепочке, на который ты и отвечал хуйней с process (El el1, El el2)
Нет, я не писал.
Потому что ты доебал уже. Либо вникни в то о какой вообще проблеме речь, либо не пизди всякую хуйню еще и с менторским видом "задумайся может ты что-то делаешь не так"
Потому что аннотации снимают с программиста необходимость самостоятельно хуярить бойлерплейт. За счет этого повышается скорость разработки и снижается стоимость продукта. Заказчик рад, программист рад, все рады, кроме тех, кто не окунался в кровавый энтерпрайз.
Ещё не рады XML-программисты.
Это ломбок.
Синтаксически это больше не джава, там внедряются новые ключевые слова и принципы. Если отключить этот лобок, то код даже не будет компилироваться.
Написан то он на джаве. Процессор аннотаций, который дописывает код и наебывает компилятор. Если отключить процессор аннотаций, будь то ломбок или любой другой - то код не будет дописываться и компиляр соответственно выдаст ошибку. Почему ты считаешь использование инструментов встроенных в джаву не джавой?
>>потому что это не встроено в джаву
даже слф4ж и логбэк не встроен в джаву, а ломбок к тому же не самая стабильная библиотека.
>>сорт оф препроцессора
рефлексия - это кор джава.
>а сорт оф препроцессора
Это не сорт оф, это и есть препроцессор аннотаций.
>и до препроцессинга этот код с тз джавы не валидный - факт.
AspectJ может менять поведение кода, так что оно не будет соответствовать тому что в коде написано, ну и ничего всем норм.
И как тебе пикрилейтед йоба?
Может есть какой-нибудь пример толковый? А то чета пример с чатом нихуя не ясно
Вкатываться правильнее всего именно с легаси, чтобы потом не было разочарования "пидорасы, вы нахуя мне хмл суёте, я курсы по буту не для этого проходил!".
Интересно, много ли тут анонов, которые реально вкатились сразу на современный стек?
>Интересно, много ли тут анонов, которые реально вкатились сразу на современный стек?
Я пытался вкатываться через хмлы, но когда просил помощи здесь - меня посылали, в итоге психанул и пошел сразу в бут.
Ну я можно считать так вкатился. Сначала пришел в контору с легаси-говном в продукте 20 летней давности. Съебался в ужасе через месяц и через пару недель потом нашел нормальную работу.
>Интересно, много ли тут анонов, которые реально вкатились сразу на современный стек?
Я. И в целом вообще не представляю себе, что меня сейчас бы заставило копаться в говне мамонта, хмл в глаза не видел.
Умею в java core, spring на базовом уровне, sql, немного C++
Например базовый способ создать enum такой:
enum someEnum{
FIRST("First"), SECOND("Second");
public String number
someEnum(String number){...}
}
Все заебись, но что если мне нужно в энам через конструктор передать что-то не настолько простое, как строку? Хотелось бы где-то ниже создать эти объекты для каждого энама, а в конструкторе передать их уже готовыми. Вроде того:
enum someEnum{
FIRST(list1), SECOND(list2); //хуй! в этот момент аргументов еще нет
public List<String> numberList
someEnum(List<String> numberList){...}
List list1 = new...
List list2 = new...
}
Нет конечно никакой проблемы созавать что-то прям внутри вызова конструктора, но выглядит это по-уёбищному если создание сложное
Вопрос, в целом, снимается. Придумал такой способ:
public enum Patterns {
//было так
PAT0(Arrays.asList(" 10", " 20", " 40")),
PAT1(Arrays.asList(" 10", " 20", " 40", " 50", " 51")),
PAT2(Arrays.asList(" 10", " 20", " 11", " 21")),
//а можно так
PAT3(Values.list);
List<String> markList;
Patterns(List<String> markList) {
this.markList = markList;
}
//статический вспомогательный класс-контейнер
static class Values{
static List<String> list = new ArrayList<>();
}
}
Но может кто что покрасивее знает
да, мне нужно как-то обновлять инфу об актуальных объектах и следить за добавлением новых в бд. Поэтому посоветовали либо лонг-полингом через тригеры в бд, либо через вебсокет.
Я думаю что большинство скажет сейчас, что IDEA от жидбрэинс и я ей тоже пользуюсь. Но хотелось бы попробовать сменить IDE на текстовый редактор. А из текстовых редакторов все топовые на лагучем электроне, если не брать во внимание Sublime Text, который бесплатный 30 дней. Хотя IDE Eclipse вроде прикольный, но там чёт совсем нет такой же приятной чёрной темы, как у IDEA. Кстати, тоже самое и про текстовый редактор Notepad++ под винду можно сказать. Чёт как будто нет совсем альтернатив кроме продуктов от жидбрэинс. Только если вим или емакс, но я хз...
Типа статические классы, что не нравится?
>Но хотелось бы попробовать сменить IDE на текстовый редактор
Зачем?
Но в целом, если хочется, смени.
Да, они теперь вместо легаси итераторов.
PersonInterface john = new Person("John", 44);
PersonInterface tyron = new Person("Tyron", 54);
persons.add(john);
persons.add(tyron);
for (Iterator i = persons.iterator(); i.hasNext();) {
Object p = i.next(); // Какого хуя я не могу здесь написать PersonInterface p = i.next() ?
System.out.println(p.getClass()); // Person как и должно быть
}
Ух, спасибо!
Задачи на многопоточность есть в книге "Методы программирования" Блинова в конце соответствующей главы.
Я ее ебал + сосал.
Аноны, нужен совет. Есть вакансия программиста с требованиями:
>Требуемый опыт работы: 1–3 года
Сразу говорю, что опыт у меня 4 месяца верстальщика, но говорили, что
>Полная занятость, полный день
Высшее профильное образование;
Базовые знание Java или Delphi;
Опыт работы с Spring Boot, Hibernate приветствуется;
Опыт работы с СУБД PostgreSQL или FireBird;
Знание HTML, CSS, JavaScript, Angular приветствуется;
Знание языка SQL, умение писать и оптимизировать запросы;
Умения работать самостоятельно и в команде;
Умение читать и понимать чужой код;
Желание учиться и развиваться.
Короче из всего это у меня знания HTML, CSS. Еле как JS. Знаю основы SQL. Два с половиной года назад делал диплом на Java *там говнокод) и больше не программировал, следовательно Java забыл.
Вопросы:
1) Стоит рисковать и пытаться подготовиться к этой вакансии, если вакансия закроется 8 апреля?
2) Что нужно знать, чтобы быть уверенным, что ты знаешь Java на базовом уровне?
3) С такими требованиями они могут спросить алгоритмы?
4) Вообще Java программистам нужно знание математики и алгоритмов?
Вам в JS-тред.
Анон. Сейчас я тебе всё поясню, потом спасибо скажешь.
1. Нихуя не готовься.
2. Посылай собеседователя нахуй, если будет заставлять крутить деревья.
3. Доминируй @ Унижай
Я кончил.
https://twitter.com/ASFMavenProject/status/1332288204351934466
Надеюсь, версию жабы по умолчанию поднимут до 8, а то до сих пор 5.
Вообще, нагуглил такой чейнджлог: https://maarten.mulders.it/2020/11/whats-new-in-maven-4/
Когда она выйдет уже впору будет до 11 поднимать.
Расскажите про развитие мавена. Нахуй там вообще новые версии? Я вообще между 3.1 и 3.8 разницы не вижу. А это 7 лет.
Очень уж этот ваш грейдл любит ломать обратную совместимость, и заметно это даже не хеллоуворлдах. Иногда пытаюсь его тыкать, там если делаешь всё по туториалам, которым полгода, будут варнинги про депрекейтед, а если год, то и вовсе упадёт с ошибкой. Если тырпрайз на него и перейдёт, почти наверняка выберет какую-то конкретную версию и сидеть будет на ней 100500 лет, как с джавой 8. Ещё и отсутствие нужных плагинов, из-за них везде куча кастомных тасков, будто вернулись во времена анта, но с груви вместо хмл. По мне так хвалёные модули не стоят таких бед. И не осилил, да.
Прочитал эту >>2000278 - говнина лютая
Сейчас зашел начальник и предложил переучиться на джависта, потом набрать еще пару долбоебов ко мне и начать делать серьезное дерьмо.
Короче он предлагает мне оплатить курсы. Сказал чтобы я сам поискал, но я хуй знает что там менее зашкварное.
Я бы конечно и сам переучился, но если барин платит, то нахуй надо.
Посоветуйте курсы по жабе, короче. Спасибо
>Если тырпрайз на него и перейдёт, почти наверняка выберет какую-то конкретную версию и сидеть будет на ней 100500 лет
Так и делают, ни разу не видел грейдл билда без врапера.
Я дебил. Видимо в каких-то экспериментах что-то делал не так и получил такую уверенность ложную. Уже попробовал и все норм. Чая за внимание.
Легаси.
Ох щщи.
Это козуля чеки печатает?
Ебать ты дебс. Читать рандомный кал это надо иметь поистину массу времени. По сабжу - справочник Шилдта, ван лав.
Буквально неделю назад хуярил на Swing. Полет норм. Что такое вообще блять "актуален"? Это интерфейс ввода-вывода для глаз и кривых рук юзера. Если ты хочешь выступить с этим на соревнаваниях по визуальному дизайну - то отсосешь, если тебе надо чтоб просто работало - почему бы нет.
Ну, мне понадобился. Правда работа у меня несколько особенная, я просто решаю проблемы на пустом месте, без всяких там легаси и корпоративного стека. А если про мейнстрим то наверное неактуален. Кому нахуй нужна джава в десктопе, ты че хоть.
Приступай. Intillij написан на свинге, например. Правда наверное там у них ультрапряморукость на входе в команду разарабов.
>>по сетям
модель оси, чем отличается хттп от хттпс, что происходит с момента ввода адреса в строке браузера до входа на сайт - при желании все это с кишочками каждого шага.
Долбоеб, шел бы ты нахуй отсюда.
ДА, жавафх очень проста в эксплуатации, можно юзать контракты жавабинс, довольно-таки быстро запилил на ней небольшой пет-проект с многопоточкой, блекджеком и шлюхами.
У жет брейнс в вакансиях тонко намекают, что будут гонять по алгоритмам и просить крутить деревья, так что prepare ur anus, если что.
Можете объяснить как Kotlin будучи на JVM исполняется под Андроид, который вроде как на ART? Каким образом код исполняется на Ведроиде?
Котлин компилится в class-файлы, которые потом вместе с либами конвертируются в dex, dex пакуются в apk, попадают на андроид, а ART уже знает, что с этим dex делать.
Вроде понятно, спасибо что прояснил, анон.
Спасибо, добра
Есть для тех имплементаций, которые реализует интерфейс java.lang.Iterable.
А в чем сложности? Google Java Style и так стандарт для большинства проектов, идея автоматом форматирует.
Ну вот типа есть int, а есть Integer. И что мне когда использовать?
>>зачем нужны классы обертки для примитивных типов?
Ты не сможешь в коллекцию вогнать int, а Integer сможешь, тк он наследник класса Object.
Какой же ты еблан блядь сука. В спринге не Google Java Style, уебок тупой. И идея под спринговый стиль не автоформатирует никак. И эти ебланы изобрели свой мавен плагин, который также нихуя не форматирует, только сыпет ошибками в лог.
К примеру, многие стандартные методы принимают только ссылочные типы, типа методов коллекций, которые хранят только объекты. В обертках ещё есть всякие полезные методы, для работы со своим типом.
Тупой агресивный еблан тут только ты. Читай, уебище.
https://github.com/spring-projects/spring-framework/wiki/Code-Style
>>И идея под спринговый стиль не автоформатирует никак.
настрой по гайду, будет тебе скобочки переносить
https://github.com/spring-projects/spring-framework/wiki/IntelliJ-IDEA-Editor-Settings
>настрой по гайду
Охуеть блядь, сейчас буду сидеть неделю настраивать всю эту хуйню. Где .checkstyle файлик? Или че-то такое.
Есть несколько классов, у каждого из которых непустой конструктор, принимающий некоторое - разное - количество однотипных аргументов, пусть double. Например один класс принимает 2 аргумента, другой 3 и так далее. Все они маркнуты одним и тем же интерфейсом, чтоб можно было манипулировать ими как одним типом.
Так вот, можно ли через Reflection как то создать экземпляр произвольного из этих классов "общим способом", не меняя сами классы?
В методе-генераторе я легко могу получить конструктор любого из них, но как его вызвать универсальным способом, если newInstanse() принимает аргументы именно так же, по одному, как это делается через new? То есть нельзя написать, например
inst = constr.newInstance(double1, double2)
потому что у рандомного класса аргумента может быть и не два, и нельзя передать туда массив, потому что нет такой перегрузки метода. Как можно сделать?
Только повторюсь - не меняя классы напрямую. Так-то понятно, что можно добавить конструктор MyClass(double[] values). Может через рефлексию можно внедрить новый конструктор как-то?
Если уж уже написал гору текста, такой еще вопрос: может как-то через интерфейс можно указать необходимость реализовать потомкам конструктор определенного типа? Если пихать в интерфейс что-то вроде
<T extends MyInterface>T(int arg);
он нахуй меня посылает, говорит что нужен возвращаемый тип, думает что T это имя требуемого метода.
А сами аргументы ты откуда собрался брать?
Если у тебя есть все нужные параметры и можно модифицировать сами классы, я бы сделал так.
https://pastebin.com/zYQsvt0G
Слушай, а можешь построить график по количеству постеров за последнее время в языковых тредах?
А как он это сделает? Мы же не на пораше или ньюсаче. Тут айдишники не палятся.
По человечески как мне стрим получить?
Stream.of.
никогда не замечал. спасибо
Ты от созданного листа сразу к стриму переходишь и блять через лямды дальше ебашишь все что надо
Одна строчка
Зачем ты объект стрим создаешь шо ты как маленький
Тупая мысля или не очень?
Гуй на жабе непопулярен, потому что он медленный и прожорливый. На питоне тоже, поэтому питон не начали юзать для гуя после появления в нём асинка.
И какая разница, многопоточный асинк или нет? На питоне и жс убогие потоки, поэтому там асинк олнопоточный. На шарпе хз, вроде там задачи раскидываются по пулу потоков, а не в одном и том же.
Спасибо, конечно, что нахуевертил целый проект, но я наверное не зря сказал, и дважды, что нет, классы нельзя менять. Если можно менять было бы, ничто б не мешало впилить им всем конструктор на 2 строчки, принимающий массив, и вызвать в нем свой же конструктор через this(arg[0], arg[1], arg[2]) (сколько нужно столько и аргументов).
Пидорские как раз форичи. Если кто-то юзает итераторы то он понимает как это внутри работает, а не просто дергает мейнстрим-хуйню для долбоебов.
Тогда или писать руками эти Function что не большая проблема, если все классы заранее известны или тупо создать такой массив кодом - благо и количество и типы аргументов известны. Первый вариант быстрее и безопасней все проверки выполняются во время компиляции, второй универсальней и не требует переписывания если какой-то класс поменяется.
Вообще это выглядит так, будто ты пытаешься доморощенный DI запилить.
>тупо создать такой массив кодом
Речь идет о массиве который передается в Constructor.newInstance()
Нет, это просто своего рода фабрика разнородных примитивов. Все они принадлежат примерно одной предметной области, но все конструируются из разного количества однотипных аргументов.
>тупо создать такой массив кодом
да его как раз не надо создавать. от поставщика данных они и приходят упакованными в массив. Еще там же приходит тип, который надо сконструировать. Так вот, я не хочу свитчиться по всем возможным типам и для каждого вызывать именно его конструктор, потому что, как минимум, это предполагает ручное расширение этого свитча для новых типов. Я бы предпочел получить у пришедшего типа конструтор, и его вызвать. Массив данных по длине будет энивей точно подходить к типу, но будет всегда разным.
Потому я и говорю, что мне надо либо в каждом возможном типе иметь конструктор, который будет принимать массив (а такого контракта я даже через интерфейс не могу создать - я так понимаю, в джава интерфейсы никак не могут принудить создавать конструкторы определенной сигнатуры), либо как-то что-то еще найти в рефлекшене, чего я не знаю.
Я автор всего этого, и мне не сложно добавить в классы-примитивы нужный конструктор, это вопрос принципиального интереса исследовательского, можно сказать
Пробовал сносить, менять jdk - нихуя. В переменные окружения тоже дописана
проверь, что в project structure выбран корректный jdk и language level (или как там его). в 99% случаев причина такой проблемы как раз в этом
так вроде ж newInstance() vararg'и принимает.
а в джаве можно скормить массив там, где ожидается варарг (если я ещё не всю память пропил)
Constructor.newInstance() принимает массив Objekt[] в котором и передаются все аргументы по порядку класс не должен принимать массив аргументов, их развернет JDK. Но рефлексия это медленно и не надёжно, лучше фабрики.
Статистку прям по дням сложно собрать, для этого пришлось бы в течение нескольких месяцев каждый день мониторить счётчики. Построил за последние 5 тредов (если перекатили недавно, самый новый не учитывался), что не совсем верно, какие-то треды более активны, какие-то - менее, какие-то перекатывают после 500, а какие-то - после 1000, причём от случая к случаю перекатить могут то раньше, то позже. Странная статистика получилась.
Я ж говорю, его перекатывают слишком часто, после 500, много постеров просто не успевает "отметиться".
Спасибо, няша! Ну да, перекатывать каждые 500 постов - вообще жесть, обалдел с этого когда начал протекать в другие треды и доски.
У них так поддерживается активность тредов, больше вкатывальщиков видят тред на первой странице, заходят и задают вопросы о выводе фибоначчи в консольку.
Где-то год назад так сидели пару дней без треда, самый последний тред утонул, а новый не создавал никто.
У длинного треда только один минус - пиздец медленно грузится. Но мы джависты, нам не привыкать.
Мне только двачеров-вайтишников в индустрии не хватает, ну нахуй.
Да, именно так. Но почему-то если скармливать ему аргументы по одному, как в конструкторе указано, то все нормально. А если массивом, то он выбрасывает эксепшен какой-то там (то ли wrong count of arguments, то ли wrong type, че-то такое).
Да нихрена не так.
try {
Constructor<? extends Component> constr =
this.representationDataClass.getConstructor(double[].class);
Constructor<?>[] constructors =
this.representationDataClass.getConstructors();
//component = (Component) constructors[0].newInstance(argums[0], argums[1],
// argums[2]);
component = constr.newInstance((Object) argums);
} catch (SecurityException | InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
то что под комментом - работает если конструктор содержит ровно 3 аргумента. То что без коммента - работает только если есть конструктор принимающий массив, в остальных случаях - нет.
олсо, вторая запись с поиском конструктора, возвращающая ВСЕ конструкторы, была сделана раньше, чтоб найти уж точно все какие есть, если запись (double[].class) не являлась бы корректной. И единственный найденный конструктор не стартует с массивом.
Питонисты разумеется сразу зашипели и начали плеваться
Питон, конечно, говнище, но если мы будем набегать на чужие загоны, ничем не будем лучше шарпошизиков.
DispatcherServlet занимается маршрутизацией запросов которые приходят к веб серверу. Если к классическом JEE WEB приложении - ты сам писал сервлеты и процессил запросы, то в Спринге ты создаешь ресурсы с помощью Спринга, а DispatcherServlet занимается тем что принимает входящие запросы, находит нужный ресурс и вызывает его попутно делая кучу магии
Сервлеты придумали хоть и давно, но это фундамент, на котором всё работает, не думай, что они устарели. Спецификация сервлетов - это просто описание того, как должно выглядеть низкоуровневое API для работы с HTTP - хедеры, куки, чтение и запись байтиков из сокета. В спринге же предлагают не ебаться с этим вручную, а использовать специальные обёртки, и DispatcherServlet - их основа, это единый сервлет для всего, он инициализирует application context, ловит все запросы, передаёт их твоим контроллерам в соответствии с маппингами, разбирается с view и прочее.
Все нормально работает https://pastebin.com/GFNgJJRP
Это у тебя с руками что-то не то.
Если бы выкладывал полные примеры, а не огрызки, я мог бы сказать куда тебе надо выгнуть руки.
Про лобок не я писал, не юзаю его.
>куда надо выгнуть
ну на вот выгни
https://pastebin.com/GpuHmMmx
Срать кодом с работы не особо хочу, поэтому замутил микроаналог. Надо было про шлюх, здесь же принято на тему шлюх делать примеры
В таком виде, разумеется, все работает:
https://pastebin.com/Cg2b1B7B
переопределил еще там туСтринг, чтоб было видно в консоли факт что сработало
Спасибо, так работает. Но я нихуя не понимаю, почему то что вылезло из стрима это не то же самое, что исходный array
Потому что когда ты в newInstance() передаешь double[], то он конвертируется в Object[] {double[]} и значит первый аргумент конструктора должен быть double[]
А стрим возвращает Object[] {Double, Double, Double} - что интерпретируется как 3 аргумента типа Double или double.
Если там был не vararg метод, то проблему было бы сразу видно.
Потому что нет универсального стандарта, который бы описывал всё, что есть в современных СУБД. Есть только более общие стандарты, они описывают небольшую их часть, причём ни одна СУБД полностью эти стандарты не реализует, там много спорных мелочей.
Приучаться надо к постгресу, но на хеллоуворлдах радницы не заметишь.
Я так понимаю, компилятор не может определиться, требуется ли вызов vararg будто это массив элементов, либо это единственный аргумент-массив, и предпочитает считать что я передаю массив массивов с одним элементом?
Окей, но как ты понял, что он то же самое не сделает с аутпутом стрима? не обернет весь его в один объект?
Пусть даже это как-то ясно, но стримАПИ это просто библиотека, как сделать то же самое на голом языке?
Не совсем. double[] не приводим к Object[], только к Object.
Поэтому у компилятора единственная опция это считать его первым элементом в создаваемом Object[]. Вот если бы вместо double[] был бы Double[], тогда бы компилятор считал бы его как массив аргументов, а не первый аргумент.
Конвертануть кодом можно так
Object[] arguments = new Object[ingredients.length];
for (int i = 0; i < arguments.length; i++) {
arguments = ingredients;
}
return dishType.cast(constructor.newInstance(arguments));
Странно. Я вроде бы пробовал это когда-то раньше, заменить примитивные типы оболочками, и ничего не вышло. Попробую еще раз. Ладно, спасибо анон, все стало примерно ясно в этом вопросе.
Попробовал заменить везде на оболочки и все завелось. Я, дебил, наверное первый раз как-то на отъебись заменял, только в некоторых местах, не особо думая, что там как боксится и анбоксится. Все теперь понятно. Чая тебе и задач интересных.
И такой уж тогда вопрос. В целом, для реального проекта, делать так нормально или это тормозное говно и лучше через ветвление по типам? Я просто пока что кто-то вроде стажера, не особо понимаю как надо предпочитать в таких вещах.
Нет универсальных решений, везде свои плюсы и минусы.
Рефлексия универсальный подход, но он медленней и менее надежный - не проверяется во время компиляции. Надо делать обработку случаев когда конструкторов больше одного и искать подходящий. С другой стороны новые классы сразу начнут из коробки работать если им правильные аргументы дать.
С другой стороны тот метод который я вначале показал с фабриками - требует их писать на каждый новый класс. И при добавлении нового класса, надо его писать. Зато у тебя все проверяется на этапе компиляции.
И еще момент: делать так как в примере это плохая практика, когда у тебя передается в конструктор несколько даблов или любых других однотипных параметров - это прямой путь к ошибкам. Перепутал порядок water и alcohol и у тебя не коктейль для девочек, а ёрш для мальчиков. Используй микротипы или билдеры.
Вот скажем есть пара способов сделать поток : наследовать класс от класса тхреад или же имплементировать интерфейс раннабле
В первом случае если мы унаследуем наш класс от тхреад ну и оверрайдим там метод ран, то при создании двух потоков одинаковых и запустив их
Thread1.start();
Thread2.start();
(Это обьекты одного и того же нашего класса)
То они будут выполняться поочередно. Сначала будет работать тхреад1 а дальше уже после окончания заработает второй
Разумеется это хуйня какая то
Но есть второй способ, мы наследуем наш класс от раннабле и также оверрайдим метод ран. Далее создаются опять же два разных потока, только создаются они от класса тхреад и мы засовываем туда в качестве аргумента наш класс который имплементирован от раннабле.
Мы запускаем эти 2 потока также как и в 1 случае и вот они уже работают корректно. То есть поочередно/одновременно
Чому так?
Там задача специфичная - парсинг данных, которые всегда упорядочены правильно (их не человек генерирует). А все даблы там просто потому что это околоматематика.
Олсо, думаю просто нужный конструктор помечать самодельной аннотацией, и ее уже искать в том рефлекшен блоке
> То они будут выполняться поочередно. Сначала будет работать тхреад1 а дальше уже после окончания заработает второй
> Разумеется это хуйня какая то
Конечно хуйня, потому что неправда. Оба треда будут работать одновременно. С чего ты вообще взял, что поочерёдно? Только не говори, что у тебя в тредах принт в консольку и ты смотришь на порядок вывода.
Я проверял на выводе в консольку да
Интерфейс раннабле работает как и положено а вот первый вариант с наследием от класса тхреад работает не так
Попробуй в первом треде перед принтом воткнуть Thread.sleep(100), чтобы сделать небольшую задержку, тогда вывод сначала будет из второго треда, а потом из первого, это покажет, что второй тред не дожидается окончания работы первого. Почему именно с наследованием от Thread первый тред всегда начинает выполняться раньше второго - хз, скорее всего, это какие-то тонкости реализации. Это не настолько важно, главное что треды работают одновременно, как бы они ни запускались.
У тебя тред спит потому что
У меня в методе ран был просто цикл который выводил от 1 до 10
И когда я запускал оба треда одновременно без всяких задержек то вывод был такой
1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
Но вот когда я создавал тред с интерфейсом раннабле то вывод был примерно такой
1 1 2 2 3 4 3 4 5 5 6 6 7 8 9 7 8 9 10 10
Ну не прямо так но близко кароче
Было видно что в 1 случае не одновременная работа а во втором одновременная
у тебя эта задача наносекунды занимает. поставь в каждой итерации цикла задержку на 100мсек и тогда уже будешь судить
Я понимаю что это занимает очень мало
Я не понимаю почему при разном создании потока получается разный результат, если по логике должен быть одинаковый
По какой логике? Может у них там в ОС как-то разный приоритет или еще что-то, только заметно это на микромасштабах. Создай им нормальные условия для оценки, чтоб задача была реально объемная, на секунды, и там смотри. Я сам не шарю за модель потоков, но зато знаю по опыту насколько трудно нормально что-то бенчмаркнуть на таких масштабах времени, да и вообще.
>>почему при разном создании потока получается разный результат
Вывод к консоль синхронизируется - кто успел, тот и вывел значение.
Ну тогда рефлексия норм. Разве что стоит создать класс, для каждого типа, где как минимум закешировать конструктор, чтобы JIT смог это дело заоптимизировать.
Поподробнее?
>создать класс, для каждого типа
так и есть, и общий интерфейс для них всех.
>закешировать конструктор
мм... а что это значит? ну, там есть у каждого свой конструктор, с фиксированным количеством аргументов. вчера еще я замаркировал его аннотацией, которую сам запилил, чтоб уж точно не промахнуться при поиске (юзать всегда "нулевой" мне кажется очень ненадежно, а как получить простым способом "конструктор, принимающий как аргументы некоторое количество double", я так и не сообразил, разве что получать все аргументы и в цикле проверять, что они все дабл, но это громоздко, и я решил что маркерная аннотация лучше)
Речь идет о том, что когда ты делаешь dishType.getConstructors() ты каждый раз получаешь новый объект Constructor. Поэтому я и сказал, что надо его закешировать и не создавать каждый раз. Помимо того, что ты избегаешь лишнего выделения памяти, так еще JIT умеет оптимизировать такие вещи и черен несколько вызовов заменит рефлексию на сгенерированный код.
https://pastebin.com/4Mb53R7L
Head first показалась слишком простой, для совсем нюфагов. Effective Java базовые какие то языковые фишки не рассматривает.
А про Шилдта где то видел что его не советуют читать, типа говнокода дохуя.
Учился именно по Шилдту. Точнее, полировался после всяких детсадовских ХэдФёрстов. У него все нудно, зато исчерпывающе. Хз насчет говнокода, я не воспринимал никогда книжки как примеры заебатого кода, типа делай как мы, и будет заебись. Это вообще отдельная дисциплина. Код в книге для другого: описал какую-то языковую особенность - показал как работает. Все. Насколько знаю, обычно все тут дрочат на 2-томник хорстмана. Сам не читал.
А, ясно. Благодарю, добавлю такое.
https://www.youtube.com/playlist?list=PLvb7ivodu7oTNvzI00ABhl-LlwRQ0G1Lj
Пиздец... ролики 3...5 часов. Они там че делают все это время? За столько времени можно собаку научить плюсам и машкоду всех процессоров мира, заодно и схемотехнике цифровой.
@PostMapping( "/user")
public String pageAllUsers (Principal principal, Model model){
User user = userService.findByUsername(principal.getName());
model.addAttribute("user", user);
return "user";
}
В этом методе, если я меняю @PostMapping на @GetMapping, он выводит то что я хочу, если оставляю так то http - 405 error. This application has no explicit mapping for /error, so you are seeing this as a fallback. There was an unexpected error (type=Method Not Allowed, status=405).
help
>>Хорошие курсы
Это курсы уровня гикбрейнс и им подобных. Только тут еще и технологии десятилетней давности. Эклипс, свинг, авт и спринг на хмл в 2к20.
>>2007014
>>Они там че делают все это время?
Разговоры за жизнь, живое написание кода иногда с ошибками, тупые шутки препода - все как в говновузике. Это хорошо хоть на ютюбе х2 смотреть можно, а вживую это ж пиздец мучительно слушать.
анонимный пользователь подключиться пытался......правильно?......вот.......а метод защещен.....видите?......вот.....ребят понятно?
Понял, попробую и Шилдта и Хортсмана.
Хорстмана кстати пишут что лучше в оригинале читать, всё так? Говорят перевод на русский там более чем уебищен
Я дрочу на однотомник Хорстмана Java for impatient. Там надо сделать задания в конце, прокачивает кор люто, неистово.
Разумеется на пк уже установлен jre чтобы джава код работал
Пошел нахуй отсюдаа, хакер ебаный.
Если речь про какой-то конкретный ПК, надо на него поставить прогу (скорее всего, её тебе придётся писать самому), которая будет обрабатывать событие вставки флешки и искать на ней твою прогу.
А если любой ПК - надо, чтобы на нём был установлен Windows XP, и тогда можно через autorun.inf.
Что, блять, с моей идеей? Это ХеллоВорлд аппликейшн, ааааааааааааааааааааааааааааааааааааа!!!
Небось, на строчке про Hikari Pool долго висело? Хуй знает, что это, мне помогало изменить версию бута.
> 162.985 seconds
У меня на работе жирный монолит на вебсфере быстрее запускается.
Итератор - хипстерская хуйня? Земля тебе пухом, падаль малолетняя.
Так, короче ломбок отвалился. В новых проектах все ок, в этом даже после полной очистки хуйни, которую генерит идея, нихуя не работает. Пиздец.
Пиши бойлерплейт руками, всем на тебя похуй. Алсо, я не стал бы работать в проекте, в котором мне пришлось бы руками писать какую-нибудь хуйню вроде геттеров/сеттеров или конструкторов для final полей.
Бля, тред вкатунов.
Тебе на курсах сказали вести себя как дебил чтоб сойти за опытного?
Ну блять я же не знаю как у тебя класс ноде устроен
Вот ты сразу же создаешь новую ноду и туда засовываешь валью, а они сначала проверяют на нулл
В общем у тебя может все ошибками нахуй посыпаться
>IZalupa
Это для шарпоблядей
>ZalupaInterface
Это вообще хуй знает для кого.
Просто Zalupa и все. А сам класс - ZalupaImpl
Yep
При работе программы работают одновременно все классы, или только те, которые вызываются?
Например если я напишу все классы в одном .класс файле и там же будет меин, насколько это будет хуже чем если просто создать кучу .класс файлов под каждый класс?
У тебя какая-то путаница в терминах. Один class-файл всегда соответствует одному классу, не может быть такого, что class-файлов много, а класс один, и наоборот.
Джава-машина загружает классы при первом обращении, пока не обращаешься к классу, он не будет загружен в память с кастомными класслоадерами это не так, но неважно.
Понятно что не может быть много . класс файлов если класс один
Но вот в одном .класс файле можно написать несколько классов. Например вложенный класс или анонимный
Их жаба тоже грузит при первом обращении независимо от загрузки внешнего класса.
ты там че руками компилируешь что все в один засунуть хочешь?
Ты можешь даже независимо от "основного" класса добавить любой класс в конце (за закрывающей скобкой первого класса). Но такой класс не может быть объявлен как публичный, и извне пакета ты не сможешь иметь к нему никакого доступа.
ты всю задачу не мог что ли скинуть, а не только свой ньюфажный высер?
от епама десятилетней давности. По результатам меня не взяли кстати
firstvds например. Возьми дешевый, добавь хранилище, наверняка можно
Двачую firstvds, сейчас на нем сижу. Ранее в этом треде советовали ruvds, потому что там есть тариф за 240, но по факту на этом тарифе не хватит ресурсов, если будете настраивать нормальный автоматический деплой гитлаба со сборкой градлом. А вот тариф firstvds за 470 полностью закрывает все мои потребности.
Сейчас, если что, немного другие требования, вместо jsp и сервлетов спринг бут.
мимопроходил
Это джуновское? Пиздец, и как это все
Экеля не читал (спасибо за наводку, кстати), а Хорстманн очень прост, если есть опыт программирования на других языках. Сейчас как раз дочитываю первый том
Нихуя себе пидорство
Чтобы просто взяли на работу надо им блять за бесплатно целое приложение в одно рыло сделать?
Я даже не могу представить лоха который это напишет. Лол они просто скажут ему мы вам перезвоним, а сами просто заберут приложение себе. Допилят его для своих нужд за вечер и все
После таких статей https://ebanoe.it/2021/04/23/lazarev-agency-hr/ я вообще за тестовые стараюсь не браться, если там не уровень "напишите калькулятор"
Да нахуй кому нужно такое приложение, анон. Такая хрень элементарно пишется за несколько вечеров
Да никому нахер такое не уперлось, воровать его.
Там ничего сложного, просто трудоемко, напилить классы и таблички, нашлепать крудов, написать доку и т.д. Ну и все эти, GoF шаблоны, кастомные JSP теги, MVC во все поля. Тут реально несколько дней на фултайм сидеть надо.
Вот это ты вундеркинд. Я, если за два месяца прочитаю, это будет успех. Но у меня и опыта никакого нет.
У меня без опыта на два тома с перерывами ушло месяцев 8. Но я плоховато вкуривал, приходилось задачки искать и решать.
<form th:action="@{delete}" method="post">
<input type="hidden" name="id" th:value="${item.getId()}" />
<input type="submit" value="Delete" class="btn btn-danger" />
</form>
Есть вот такая кнопка, для удаления юзера, ее логика примерно такая же как мне нужна, для edit, в edit на данный момент я пишу все также и есть функция onclick, для модального окна, которое остается на экране, только если type="button", но id всегда одинаковый.
Так вот проблема в том, что мне нужно в модальное окно передать id юзера. Как поступить? Спасибо за любые советы
Такую чтоб НЕ БЫЛА ЗАБРОШЕНА в году эдак 2010-м или того раньше.
Запарился искать по всему интернету..
че нахуй)
Если тебя не устраивают заброшенные либы, почти наверняка тебе придётся брать одну из либ для C++ и ебаться с JNI самому.
Нужны ли чекед эксепшены - достаточно старый срач.
Чекед изначально задумывались для ошибок, которые в теории можно обработать на месте вызова, то есть ты ждёшь, что может произойти ошибка, и должен сразу её обработать, и из-за этого в чекед всё явно: ты либо сразу пишешь try-catch, либо указываешь, что твой метод кидает чекед, и нужно его обработать. а если забыл что-то из этого сделать - компилятор напомнит. Анчекед же наоборот пишутся в предположении, что данные пришли откуда-то сверху, и на месте их вряд ли обработаешь, поэтому компилятор и не заставляет.
Но со временем многие поняли (часть дедов до сих пор сопротивляется), что и для чекед данные часто приходят извне, и обработать на месте их невозможно, ибо причина где-то далеко. Из-за этого в try-catch чекед просто ловят, оборачивают в анчекед и кидают, чтобы компилятор не ругался.
Вроде понял, но не совсем.
Как лучше делать тогда? IDE помечает метод в котором может возникнуть исключение, и предлагает либо выкинуть исключение в сигнатуре, либо обернуть его в try-catch. Как лучше делать?
Задумался дальше брать реакт или вью.
За вью:
1. Анон или несколько тут его форсили.
2. По обзорным статьям проще, быстрее вкат.
3. На ютубе на русском есть разбор проекта спринг-бут/реакт, который можно будет форкнуть
За реакт:
1. В три раза больше вакансий
2. У меня есть приятель-реактодебил.
Какие еще есть аргументы? Что посоветуете?
В их тред не пойду. интересует мнение джависта.
Да меня бы устраивали и заброшенные, если бы они хотя бы работали.. (я их уже все перепробовал)
Прочитал в интернетах, что многие делают так: ловят чекед эксепш в try-catch и вместо него выбрасывают какое нибудь анчекед.
Так правда делают?
Try catch используют только неуверенные в себе омеги
В чем я не прав
Можно скринить и отправлять в /b/ с комментарием "айти В С Ё".
Напомнило, как один чеченец рассказывал, что у него тётка купила себе рабочее место фармацевта за эквивалент будущей годовой зарплаты.
Я не знаю, байты не ебал.
Предполагал что интерфейсы возможно для тестов, но ведь все рвано там все можно просто замокать, да и хуевая какая то идея писать тонну говнокода только ради тестов. Неужто это просто ради того чтоб показать что ты уважаешь паттерны и ООП?
Вот супер простой пример: у меня в инт записано какое то число допустим 7. Это в двоичной системе ....00111
Я хочу сдвинуть все биты влево, то есть получить ...01110. и это будет 14.
Core Java (Horstmann) v.1 p.60
Thinking in Java (Eckel) p.75
Beginner's guide (Schildt) p.166
Complete reference (Schildt) p.66
Побитовые операции самые лучшие
Любой уважающий себя погромист должен это знать и этим пользоваться. Только зумеры плюются от этого
Дед, таблетки выпей, там бигдецимал изобрели уже, хватит говно жрать, а то несет на весь тред.
Зумер, плез.
>бигдецимал
Это тот который работает супер медленно и занимает кучу памяти? Ок, я тебя понял
дык если ты знаешь, то что написал тебя в любую контору джуном возьмут
>>работает супер медленно
305мс вместо 301мс, из которых 300мс - время доступа к базе?
>>занимает кучу памяти?
несколько байт в гигабайтах хипа
Ебать твои байты обойдется куда дороже, когда в нагромождении скобочек ты сделаешь ошибку и вывалившись за пределы инта/лонга.
Ну так вкатывайся. Джава норм выбор для твоего аниме.
Я бы себя омегой не назвал, да и в Японию хочу не из-за аниме, а кухни скорее и природы.
начни с коры (любая книжка из трех - шилдт, хорстманн, thinking in java), потом concurrency in practice, потом алгоритмы и шаблоны проектирования, потом охуеешь сколько всего нужно прочитать нужно по спрингу и энтерпрайзу и забьешь.
Пособите пожалуйста источниками (ютубы, книги), где можно будет хотя бы для старта выучить базу по EE Если будет с примерами на эклипс, будет лучше конечно
> необходимо выучить Java EE
Беги оттуда.
https://metanit.com/java/javaee/ - самая базовая мурзилка, там только сервлеты и JSP.
Дальше книги, хотя сам читал только первую, она для начинающих:
- Java EE 6 и сервер приложений GlassFish 3
- Изучаем Java EE - есть две книги с таким названием.
- EJB 3 в действии
Ну и всякие плейлисты на ютубе по запросу "уроки java ee"
> null в ячейке array-листа тоже что ли считается значением?
Да. Потому что у нас тут не джаваскрипт.
Вакансии надо искать со спрингом. Если там пишут про EE, это почти всегда древний монолит на древнем стеке и с засильем xml. Хотя всякое бывает.
Монстр - это не сама ЕЕ, а проекты на старых её версиях. Есть современная джакарта, которая чуть ли не проще бута, но почти не юзается, и под ЕЕ обычно понимают говно мамонта с EJB/JMS/JNDI/JAAS/LTPA/Axis на вебсфере.
>concurrency in practice
Я слышал, что многопоточку в реальных проектах почти не используют, разве это не так?
мимо
При чем тут джаваскрипт? Хуёвость в том, что если ты например сделаешь чтото вроде:
list.add(0, item);
list.add(0, item2);
list.remove(0);
list.remove(0);
то size будет равен нулю.
А если ты занулишь те же самые объекты через set(i, null) то получишь size == 2, хотя состояние листа в точности такое же, как в первом случае. Логики в этом не очень много. Было бы норм, если бы он за size принимал индекс последнего объекта не равного null +1
все так, если ты про веб
на собесах разве что спросят про базовую хуйню типа volatile, synchronized, wait notify, semaphore, thread pool итд
ору
хуёвая логика.
потому что .size уж точно не должно возвращать разный результат для одинакового состояния листа. тогда уж надо все нулы считать до самого конца зарезервированного в памяти массива
> потому что .size уж точно не должно возвращать разный результат для одинакового состояния листа
И не возвращает, потому что состояния разные. Внутренний массив - это ещё не всё состояние, size - тоже часть состояния. Не надо путать внешний интерфейс и реализацию, тебя вообще не должно волновать, что там во внутреннем массиве хранится, ты даже не должен знать о его существовании.
> тогда уж надо все нулы считать до самого конца зарезервированного в памяти массива
А я хочу знать, сколько у меня нуллов реально используется, а не бесполезную инфу о том, что там arraylist себе нарезервировал.
Окей. Пожалуй согласен. Ты прав а я дебил, литр чая тебе с кофе и какао.
Как они работают - похуй, надо только уметь их юзать.
Главное что твоя с панели не сходит.
И добавят книги с упражнениями по кору.
Мне сказали что нужно знать сервелеты, и что работают на ЕЕ как раз.
Это всё под капотом фреймворков, на уровне логики максимум шедулеры/экзекуторы.
Да.
Например, когда я создаю экземпляр инпутстрима с файла, он где то повисает в памяти? Что будет если он будет открыт в течении всей программы и я никуда не буду его записывать?
И как лучше к примеру копирывать файлы, по байту, или создавать массив байтов? Какой размер тогда оптимальный?
К книгах вообще про стримы мало, на ютубе тоже хуйня какая то
> когда я создаю экземпляр инпутстрима с файла, он где то повисает в памяти?
Этим уже ОС занимается. Инпутстрим просит ОС открыть файл, та его открывает, сохраняет состояние где-то у себя и возвращает число-дескриптор, в дальнейшем можно вызывать функции чтения или записи, передавая туда этот дескриптор, ОС поймёт, для какого файла его возвращала, и будет работать с этим файлом. Сам инпутстрим хранит только этот дескриптор, остальным занимается ОС.
> Что будет если он будет открыт в течении всей программы и я никуда не буду его записывать?
Ничего не будет, просто открыт файл, и всё. Единственное - надо следить за количеством открытых файлов, если одновременно открыто слишком много файлов, при попытке открыть ещё один тебя пошлют нахуй. Но с разумным числом файлов такого не будет.
> И как лучше к примеру копирывать файлы, по байту, или создавать массив байтов? Какой размер тогда оптимальный?
Не принципиально, всё под капотом оптимально буферизуется и периодически само записывается.
> К книгах вообще про стримы мало, на ютубе тоже хуйня какая то
Потому что это достаточно низкоуровневые байтоёбские темы, про это скорее напишут в книгах по C/C++.
Я клал толстый и длинный хуй на ваши фреймворки, ебучие крудошлёпские макаки, идите в пизду.
У тебя нет выбора, ты обязан их юзать. Без них джава не тьюринг-полная.
Если я хочу сделать консольную мини игру чисто на ascii символах, то мне придется после каждой нажатой клавиши еще и энтер нажимать чтобы оно принималось?
И можно ли скажем парой строчек проецировать консоль на jframe какой нибудь? Тогда все трудности уйдут. Даже можно будет очишать все окно, в то время как консоль полностью и без костылей не очистишь
Подобные фокусы с консолью очень сложно сделать кроссплатформенными, всё сильно зависит от используемых ОС и эмуляторов терминалов, где-то это вообще не поддерживается. Из-за этого в большинстве языков нет подобных средств. Если так хочешь консольку, пиши обёртки над winapi/posix api, но лучше бы сделать всё через гуй.
почитай статью, там челик как раз пилил игру и выводил все на аски через какие то либы Jansi jLine - шаги 9 и 10
https://habr.com/ru/post/445278/
Больное малолетнее животное
Такой вопрос, может ли графическое содержимое как-то получено из панели и дполонено?
если я делаю
panel.add(graphComponent);
то он отрисовывает компонент, но если второй раз вызываешь с другим компонентом он не дополняет первый, а заменяет его целиком.
пытался получать у компонента Component член типа Graphics и пихать в методы панели типа paint и paintComponent - ничего не отрисовывается, видимо не то делаю.
Для практики
Чтобы размещать несколько компонентов в панели тебя нужно установить правильный LayoutManager.
Читай Портянкина https://ipsoftware.ru/books/swing_book_2/
Он шуткует так, типа вместо обычного веб-приложения ты должен юзать rest-клиент для ручного дёрганья эндпоинтов, который генерирует swagger. Это как предложить юзать curl, postman или soapui.
Ну постман я трогал, когда видос по спринг секурити смотрел. Норм инструмент промежуточный, но прям видно что на электроне написан.
Но я хочу сделать проект самому. Пока пет не заебашу даже ссусь начинать ходить по собесам. Точнее можно сказать - если я его сделаю и не сблюю, только тогда у меня появится уверенность, что это не просто хобби. Я типа конечно пидор-вкатывальщик, которых тут презирают. Но основная мотивация, что бы мне не было отвратительно заниматься работой, как на предыдущих трудоустройствах.
А для этого нужен фронт с фреймворком и еще и деплою потом научиться.
Там как раз подруга хотела попробовать интернет магаз с хендмейдом замутить.
Честно говоря после этого треда этот пост считай вода и трюизмы.
Кстати смотрел борисова у них в подкасте. Пиздец он душный и защищает галеры.
Ну и зачем же ты такой агрессивный? Я просто хотел советов по вкатыванию в жаву.
Качаешь
Jdk 11 и Intellij Idea Community
туториал
https://metanit.com/java/tutorial/
если мало глубины
https://rutracker.org/forum/viewtopic.php?t=5305854
если нужны задачи, чтобы хорошо усваивалось (но только задачи, лекции там говно)
https://stepik.org/course/10498/syllabus
https://stepik.org/course/187/syllabus
https://stepik.org/course/2403/syllabus
Лекции для закрепления
https://www.youtube.com/playlist?list=PLm2nrlGYLq1Uv1qYpqMC07JYoOXilEQZI
Спасибо!
Можешь пояснить ваще за движ? Чем люди занимаются с жавой? Что ты кодишь, где работаешь? Какие возможности?
https://www.youtube.com/watch?v=eF9AuxI43Dc
Вот у парня, как раз подробно и понятно для детей вышло. Он там свои уроки еще рекламит средней паршивости.
Пёрдну в ладошку.
На ютубе есть полные курсы разной степени подробности, они как раз для вкатунов. Найди какой-нибудь, который сможешь посмотреть полностью. Можешь посмотреть несколько.
Самые простые книги, известные мне - Head First Java (K.Sierra) и Java Beginner's Guide (Schildt). Вторая достойнее. Если получится, то лучше прочитать книгу, чем читать/смотреть васянов с ютуба и жавараша. Если не получится - наверни васянов и попробуй ещё раз.
В общем недавно я писал свою мини говнопрогу и в одном месте я отправлял гет и пост метод на кое какой ресурс, но мне в ответ присылалась ошибка от cloudflare. Загуглив на их сайте, эта ошибка означала что мой коннекшн заблокирован.
Прикол в том что когда я через браузер захожу на ту страницу, все нормально. Я даже посмотрел через браузерную консоль свойства того запроса который отсылает мой браузер и скопировал request headers, но ошибка не пропала.
То есть по сути я отсылал literally тот же самый запрос что и мой браузер, но лично я получал ошибку а браузер нет.
К слову это было лишь с одним ресурсом, я проверил на другом и все было нормально
Я использовал библиотеку джава.нет и класс HttpUrlConnection
У кого то было похожее?
Очевидно тебя забанил или их Web Application Firewall, решив что это DDoS атака или защита от Scraping.
Для начала удали все данные в браузере, запусти инструменты разработчика и открой страницу. И посмотри, что там происходит.
В некоторых случаях еще и капчу надо вводить. Но в целом, если браузер откроет страницу без необходимости ручками что-то делать, то просто возьми браузерный движок и отправляй запрос им. Погугли java webpage scraper на предмет какую библиотеку использовать.
запрос данных для лист вью и всякие неблокирующие фоновые операции. Для десктопа
Вопрос уже вряд ли актуален, однако я не упущу лишний повод поразвлекаться с рефлексией
Вы видите копию треда, сохраненную 31 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.