Предыдущий: >>3229037 (OP)
Вот общался с 5 собеседующими. 4 из них спрашивали по многопоточке. Спрашиваю, а вы в работали с многопоточкой на практике? Все 4 отвечают - нет, никогда. В анкетах перед собесами тоже спрашивают про многопоточку наравне с микросервисами - работали ли вы.
Сейчас вот перед еще несколькими грядущими собесами вспоминаю что раньше читал по многопоточке и новое узнаю.
Но есть ощущение, что это просто ради собеса. Даже бесполезнее в реальной работе, чем с литкодами.
Раньше было желание прочитать книгу с поездами и добить какими то главами из более свежих книг, чтобы преисполниться. А теперь кажется, что чисто голову себе забью и забуду что-то полезное.
1. Проект на который ты попадёшь будет работать в нескольких потоках. В таком случае пригодится каждая буква из книги с поездами. Либо придётся не спать ночами из-за неадекватных багов, даже если многопоточность ограничивается одним классом.
2. Проект, на который ты попадёшь будет работать только и только в одном потоке. В таком случае тебе придётся решать только те многопоточные баги, что можно решить однопоточной логикой. Сравнить это можно с тем, что в динамикодрисне ошибок типов мало, но многие баги можно было бы свести к ошибкам типов. Также и там, тебе придётся решать однопоточные баги что решились бы пониманием многопоточки.
Может он бы и перекатил через некоторое время. Я просто решил побыстрее перекат сделать чтобы щитпост перекат на петухлин не висел долго слишком.
Понимаю что их много, но мне не совсем это интересно.
Вот у меня есть идея сделать сервис, что бы можно было демонстрировать свой экран(вести стрим).
Или мне нужно сделать какое либо тестовое задание, ума не приложу как начинать его делать.
Может есть книги какие ни будь про архитектуру ? (Кроме Чистой Архитектуры )
>Вот скажите мне, на собесах на крудошлепа на спринге/жаба ее вопросы на многопоточку вообще имеют какую-то практическую ценность?
Наибольшую.
Какие у меня бывали проблемы на проде не из-за конкарренси багов: васе пупкину или сервису васи пупкина показали ошибку, он побухтел, принес лог, всё починили
Какие бывали проблемы на проде из-за конкарренси багов:
- послали две машины на объект вместо одной
- вася пупкин каким-то образом попал в сессию коли жопина
- по ошибке отправилось 2 письма "срочно продавайте алюминий нахуй". Алюминий продали дважды нахуй
- ручку дернули 1 раз, в кафку записалось трижды, в базу дважды
Только результаты, что-то, не особо впечатляющие. 58 мс инпут лаг, пиздец. Это на каком мониторе on next frame? 15 герц?
Так держать, cumrad!
Мысли, мнения коллеги?
У меня сложилось впечатление, что никакого байт-кода не существует, а есть лишь набор таблиц:
1) таблица с двумя столбцами, где в каждой строке первый элемент есть условный номер, а второй - строка, соответствующая классу, простому типу или методу.
2) таблица из двух столбцов, где в первом столбце есть какая-либо строка с командой в стиле ассемблера(mov, cmp, jmp), а во втором столбце строка(номер) из первой таблицы.
Я не понял.
Байткод есть, и описание инструкций например описаны здесь https://docs.oracle.com/javase/specs/jvms/se17/html/jvms-6.html
javac компилит каждый класс в такой байткод
>Проект на который ты попадёшь будет работать в нескольких потоках
С которыми ты НИКОГДА не будеш взаимодействовать. Тебя нужно отмудохать по пальцам молотком, если попытаешся.
>>47532
>вася пупкин каким-то образом попал в сессию коли жопина
КАК. ТЫ. ЭТО. ДЕЛАЕШЬ. СКОТИНА.
>послали две машины на объект вместо одной
>по ошибке отправилось 2 письма "срочно продавайте алюминий нахуй". Алюминий продали дважды нахуй
>ручку дернули 1 раз, в кафку записалось трижды, в базу дважды
Тебя должны отпиздить ногами два византийских генерала.
>>47680
IPv6 (Internet Protocol version 6) — это следующая версия интернет-протокола, которая была разработана для решения проблемы дефицита IP-адресов, вызванной стремительным ростом числа устройств, подключённых к интернету. В отличие от IPv4, использующего 32-битные адреса, IPv6 предлагает 128-битные адреса, что позволяет значительно расширить количество доступных адресов и поддерживать большее количество подключений. Ключевые преимущества IPv6 включают усовершенствованную маршрутизацию, улучшенную безопасность и более стабильную работу в мобильных сетях. Поэтому понимание «что такое IPv6» важно для дальнейшего развития глобальной интернет-сети. Смотри здесь больше: https://www.rapidseedbox.com/ru/blog/what-is-ipv6
Что ты высрал, чмо?
Чёт какая-то хуйня без задач.
>>47376
Еще раз напоминаю - сейчас речь про тех, кого берут писать обычные круды на фреймворке.
Как сказал другой анон выше, многопоточный код всегда хорошо инкапсулирован в фреймворках и внешних сервисах(базы, брокеры, объектные хранилища, етк).
Я ни разу не слышал про протекшую оттуда абстракцию.
А писать самому многопоточный код внутри фреймворка противоречит флоу его использования.
И когда у тебя спрашивают какие-то особенности примитивов синхронизации или работы forkjoinpool, то не ты, ни собеседующий никогда руками в продакшен коде их не писали. Это типа той самой базы, которую должен знать всякий уважающий себя программист.
У идеи проблемой не инпут лаг является, а просто лаг, от нескольких секунд до получаса когда тебе нужно переустановить идею из-за очередного неисправимого бага.
>юзать идею, когда есть эклипса
А 11 издание по жава 11 было по 900 и уже было дохуя. Еле дочитал.
Интересно как 1700 страниц в томе может в бумаге выглядеть?
Не, гоню. Это в идиотском киндловском формате. В бумаге там даже уменьшилось 840 и 900 страниц. Что же убрали то. Может свинг?
Волшебная обезьяна предлагает тебе купить за 25050 рублей книгу на 25 тысяч страниц, после вдумчивого прочтения которой ты гарантированно найдёшь работу сеньором. Согласишься?
Мне и так сегодня работу ведущим! разработчиком предложили.
За 190тысяч. Почет! Уважение! Деньжищи!
960x632, 0:02
>Вот вы все смеётесь, пока не придётся вместо джавоёбства Zigовать.
Я в Германии живу, тут так принято.
что такое горизонтальный рост? и в чем разница между просто зп и с выходом на проект?
Какие-то галерные изъебства. Наверно про смену проекта и бенч. Даже спрашивать не стал. С суммы и должности кекнул и отказал.
2.5 года опыта на спрэнг фреймворке.
>>галерные изъебства. Наверно про смену проекта
В галерах часто это не смена, а совмещения.
Тебе говорят ну ты там работай 4 часа на одном проекте 4 на другом. При этом ПМ каждого будет думать что ты должен работать на его проекте по 8 и че то валоебишь. а продавать тебя будут как фултайм на каждом все равно
Потом переведут на третий, а первый типа в поддержке, баги иногда поправить. А там багов будет дохуя, и на тебя будут переводить даже если сломал кто то другой. Фичу ж ты пилил - ну вот и чини. А заодно и добавь чутка функционала (переписав полпроекта)
В аутсорсе у нас так было. Вот особенно хуйня с багами. Кранч на текущем проекте, а там критический баг на завершенном, который на поддержке. И пиздарики. Тебя менеджеры мозг выносят. Но так как все свои это не особо большая проблема.
А на аутстафе думаю еще хуже. А та галера как раз аутстаф.
Не придется, Zig это говно сырое.
Блять, а меня заебало другое. Разбираешь глубоко во всей этой хуйне, пересмотришь несколько роликов, почитаешь хабр. Узнаешь про разные необычные штуки: sequential consistency, safe publication, cache coherence. А потом через месяц забываешь нахуй всю эту неиспользуемую пиздолу и сидишь такой додик на собесе и не можешь вспомнить как синхронизаторы работают.
Сегодня Idea и DataG.Rip снова вспомнили о санкциях и не обновляются в РФ (без применения насилия).
С десятого раза запомнится, не парься.
@
ВСЕ РАБОТАЕТ
@
ТЕСТЫ ПРОХОДЯТ
@
СОБИРАЕШЬ JAR
@
ДЕПЛОИШЬ
@
НИХУЯ НЕ РАБОТАЕТ
>write once run everywhere
Пиздец жопа сгорела. Как блядь достать произвольный список папок из ресурсов чтобы это работало везде?
Кладу в src/main/resources папку pisya.
В нее кладу папки popa1 и popa2.
В них кладу какие-то еще файлы.
Компилироваю.
Хочу достать папки popa1 и popa2 из класспаса и все их содержимое (не вперемешку, а по очереди, потому что мне нужны имена папок popa1 и popa2).
Ты имеешь в виду все файлы из папок popa1 и popa2 ложатся в корень? Попробуй попердоль мавен ресурс плагин.
Нет, собирается все правильно.
Я использую PathMatchingResourcePatternResolver с паттерном "classpath:pisya/" и локально это работает.
При запуске из джарника это не работает, и надо указывать "classpath:pisya//".
Можно искать просто "classpath:pisya", если у полученного таким образом ресурса получить InputStream и прочитать, там вернется список вложенных файлов, то есть "popa1\npopa2\n". Но опять же, это работает только локально, в джарнике возвращается пустая строка.
Ой блядь, все звездочки попердолило. В первом случае должно быть так, дальше очевидно уже: "classpath:pisya/*"
> только локально
Что значит только локально? Ты в любом случае компилируешь джарник чтобы его запустить.
Ну и каким образом разделённые ресурсы противоречат write once run everywhere, еблан?
>разделённые
Нихуя не понял про что ты, но речь о том, что надо написать два разных метода если код запускается из тестов или из джарника, что вообще не имеет смысла, потому что тесты нихуя не тестят в итоге.
Ты бы хоть конкретный код принёс, вместо того чтобы просто кукарекать, петушара. Сдаётся мне ты просто долбоёб, потому что я никогда не сталкивался с различным поведением в тестах и вне, помимо очевиднейшего.
Чё ты мне один файл кидаешь? Ты весь проект пости, вместе с этими несчастными ресурсами.
Я не собираюсь это говно заново создавать, потом ещё ныть будешь что не так всё создал. Зип архив запакуй и шли мне.
имплементацию ты создаешь на основе интерфейса
А на скрине ты ничего не создаёшь, ты объявляешь ссылку в никуда, в которую можно записать адрес любого объекта, имплементирующего этот интерфейс
Там у него даже не интерфейс, а класс, с которым он пишет implements
Спасибо большое, теперь понятно
Ты спрашиваешь такие вещи, которые есть в каждом учебнике по core. Иди читай, бездельник
Я не за срусскость борюсь, а за некосноязычность. Имплементация звучит отвратительно, чистый каргокультизм.
Например?
>array - массив
>boolean - логическая (переменная)
>int - целочисленная (переменная)
>if-else branching - если-то разветление
>void - пустая (функция)
>exception throwing - выбрасывание исключений
Как минимум. Конечно, те же свитчи зовут свитчами, функции процедурами функциями, матрицы матрицами, но твой ряя каргокульт не так силён, как ты думаешь.
Порридж мог сказать "класс, реализующий интерфейс" и ни одно ебало не раскрыло бы своё хлебало, потому что всем насрать на то, что реализация - не русское слово. Вместо этого всех ебёт, как поток дерьма изо рта звучит и читается.
>>boolean - логическая (переменная)
>>void - пустая (функция)
>>if-else branching - если-то разветление
точно нет, хватить коупить уже
Грубо говоря:
1) интерфейс - это просто правило, какие функции(методы) должны быть внутри того класса, который реализует интерфейс.
2) класс - это уже тип.
У классов бывают объекты, а потому можно делать переменные типа класса.
Интерфейс означает, что тот или иной класс должен иметь определенные функции(методы).
Но есть некоторое исключение - функциональные интерфейсы.
Если делать более конкретное сравнение, то:
Класс содержит описание методов(код, что будет выполняться при вызове метода) и какие-либо переменные, а интерфейс лишь объявляет, что должен содержать тот класс, который реализует тот или иной интерфейс. Так как взаимодействие с содержимым объекта с точки зрения ООП нужно делать через методы, то выходит так, что интерфейс лишь задаёт правило, которое состоит в наборе обязательных к описанию внутри класса методов.
Я, увы, не так крут для такого, но дам лишь несколько идей:
1) посредством сокетов реализовать взаимодействие виртуальных машин(процессов) и через эти сокеты вызывать и передавать результат.
2) посредством нативных методов(тут уже нужны знания c/c++) сделать общую память, в которой должно быть место для семафора, аргументов метода и результатов, и вызывать через семафоры.
> Я не за срусскость борюсь, а за некосноязычность. Имплементация звучит отвратительно, чистый каргокультизм.
Причем тут «косноязычие» и то, как тебе там что-то не звучит? Это вопрос только стиля и твоих ощущений. На второе всем насрать по-умолчанию, первое в айти значения не имеет.
> На второе всем насрать по-умолчанию. Яскозал!
> первое в айти значения не имеет. Яскозал!
Ясн.
>Это нерусское слово хорошее, потому что я привык к нему
>Это плохое, потому что я не привык к нему
Дебил бля...
> >boolean - логическая (переменная)
> >int - целочисленная (переменная)
> >if-else branching - если-то разветление
> >void - пустая (функция)
> >exception throwing - выбрасывание исключений
Так никто не говорит и звучит это плохо.
> Но есть некоторое исключение - функциональные интерфейсы.
В чем исключение? Метод просто один
Я отвечаю на посты, в которых утверждается, что консноязычие определяется субъективной оценкой одного конкретного долбоеба
> Я не за срусскость борюсь, а за некосноязычность. Имплементация звучит отвратительно, чистый каргокультизм.
Так что твой пост больше подходит в ответ ему. Хотя любой образованный человек (и не промытый совковым прескриптивизмом) понимает, что аппелировать к словарю и определениям не имеет смысла, потому что в высказывании определение истиннонстью или ложностью не обладает. Грубо говоря, высрать универсалию для конкретного термина можно любую.
Такая кринжевая языковая заносчивость от быдла сразу должна порицаться, потому что поправлять людей, когда всем все понятно и когда речь о сфере, где это нормально, будет только конченный мудак
> Так что твой пост больше подходит в ответ ему. Хотя любой образованный человек (и не промытый совковым прескриптивизмом) понимает, что аппелировать к словарю и определениям не имеет смысла, потому что в высказывании определение истиннонстью или ложностью не обладает. Грубо говоря, высрать универсалию для конкретного термина можно любую.
Что блядь?
> Такая кринжевая языковая заносчивость от быдла сразу должна порицаться, потому что поправлять людей, когда всем все понятно и когда речь о сфере, где это нормально, будет только конченный мудак
Одно дело понять, а другое дело понять без отвращения. И порицаться должно как раз извращение слов без практической пользы из мотивов каргокультизма.
Ну а где исключение, лямбда позволяет тебе использовать меньше слов для описания этого класса, да и всё
> Одно дело понять, а другое дело понять без отвращения. И порицаться должно как раз извращение слов без практической пользы из мотивов каргокультизма.
Отвращение это не объективный критерий. Объективным может быть только вывод частотности употребления из уже сложившейся привычки. Так мы можем сказать, вошло ли какое-то слово в привычку, или нет. Имплементация используется по аналогии с прямыми кадьками других предикатов, ничего особенного тут нет, нет и потери информации, и прочех негативных с лингвистической точки зрения эффектов. На этом разговор о практическом можно закончить.
Если говорить о субъективном, то в языке довольно многие явления могут раздражать. Например, редукция фразы «пока до свидания» до простого «пока» в начале прошлого столетия, что явно кринж. Но все теперь используют это слово в новом значении не задумываясь. Субьективное восприятие красоты тех или иных оборотов зависит только от моды, для одного поколения что-то будет звучать хуево, для другого — уже органично. Когда-то и слово кринж станет словарным и это процесс настолько неизбежен, что «бороться» с этим невозможно, и в общем-то не нужно. В любом случае, сейчас мы говорим даже не о таком диком примере, а о нормальной кальке, которая по какой-то причине смутила только тебя
В изначальном посте, на который я отвечал, косноязычность была определена через восприятие "звучания" слова, что зависит только от привычки и не является объективным критерием. Это так сложно для понимания?
> что зависит только от привычки и не является объективным критерием. Яскозал!
Приходи, когда будут аргументы посерьёзнее.
Ну и нахуй ты говном обмазался, клоун?
Хорстманн chapter 3 p.4 variables
Че искать то, иди читай, бездельник. Совсем уж основы не спрашивай у ребят, че ты как этот
Интерфейс не может иметь объектов так как является лишь набором каких-то обязательных функций(методов), но при этом интерфейс с одним единственным методом может быть чем-то вроде типа, для которого можно объявить переменную. В этом и исключение.
Функциональный интерфейс тоже никаких объектов не имеет, фактически тип объекта, который ты создал лямбдой, будет другим, как и в случае с анонимным классом, просто поскольку метод всего один, с лямбдой ты можешь использовать меньше слов для описания имплементирующего класса (или даже просто передать ссылку на метод).
Тут никаких исключений нет
В этом и есть исключение, что для обычного интерфейса нельзя объявить переменную такого типа, а для функционального можно. И это есть то самое исключение: для интерфейса вроде бы и нет возможности сделать переменную(ссылку), но есть частный случай, когда можно.
Можно сделать тоже самое и с не функциональным интерфейсом, когда ты имплементируешь его анонимным классом, фактически создается новый тип, имеющий неявное название. Переменная типа интерфейса содержит такой объект, но его фактический тип, конечно, не тип интерфейса.
Когда ты делаешь это анонимным классом, тебе надо указать названия методов, это очевидно. Если метод один, то можно указать только параметры и реализацию (что ты и делаешь с помощью лямбды)
Как видим, это не исключение.
(Я не совсем понимаю твою формулировку "сделать ссылку для интерфейса". Можно сделать ссылку типа интерфейса, но нельзя сделать объект типа интерфейса. Это правило работает без исключений)
Я не могу сделать ссылку на интерфейс ни с несколькими методами, ни с одним. Я могу обьявить ссылку типа интерфейса и посместить в неё объект типа, реализующего этот интерфейс, при этом не важно, сколько методов описано в этом интерфейсе. Если их много, я использую анонимный класс, если один — более короткую форму записи, лямбду
Принцип этих действий олинаков, создаётся новый тип с неявным названием
public interface i1{
public int number(int a);}
public interface i2{
public int n1(int a);
public int n2(int b);}
public main{
public static void main (String[]args){
i1 in1;
i2 in2;
}
}
С кодом всё нормально? javac у меня ругается на попытку сделать переменную(ссылку) типа i2
За исключением имени класса ни на что не ругается твой код. Ну учитывая, что публичные интерфейсы в других файлах
И что это ? Скинул какю-то хуйню , потому что сам не понимаешь. Вот ты и иди читать, бездельник!
На скрине прикол для тех, кто в теме. Это не для тебя. Ну ты вообще тупой какой-то если честно, нечего тебе делать в джаве, не трать время
Мамку твою ебал
- С какими версиями джава работали?
- 8, 11, 17 ,21
- Ого!!! Ничего себе, какой у Вас большой опыт
Нафиг они вообще это спрашивают? Что им с того, что я в копролите с брейками в свичах ковырялся или рекордами под хвост баловался? По сути никой разницы в разработке - на чем проект на том и пишешь
https://www.reddit.com/r/java/comments/1eso5dg/modern_gui_photo_editor_in_java/
>Нафиг они вообще это спрашивают?
Потому что посимвольно сверяют с тем что у них на бумажке в требованиях написано
Щас напишу, что работал с 8, 11, 16, 17, 18, 19, 20, 21 и 22, отбоя от HR не будет...
Мозг HR с однозначным уровнем IQ будет гораздо больше впечатлён девятью цифрами, чем двумя.
Не, я имею ввиду прямо перечислить 8, 9, 10...
А это что вы скакали по версиям, нам прыгунки не нужны, мы вам перезвоним
Идеальное резюме:
Работал с html, http, json, xml, yaml, yml, xml, soap, scratch, xsd, wsdl, rest, cookies, spring web dispatcher servlet, ide, keyboard, keycloak, java 1.8, java 8, java 11, java 14, java 17, java 21
Ты не поверишь, они реально считают по буквам.
Я работаю с дотнетом с 2006 года, видел взлет и падение всех фреймворков, кроме геймдева. В резюме написано просто .NET и MSSQL. Мне как-то девочка заявила: вы нам не подходите, потому что у вас указано мало технологий. Вакансия была в днищенскую галеру, куда я подался просто освежить знания перед другими собесами.
именно так
это звучит бредово, но при мне одному чуваку чуть не отказали, потому что у нас в требованиях стояла java 8, а он написал java 1.8
ну и требование знать java, java 8 и java 21 не думаю что кого-то удивляет уже
Использование твоего слова.
>+ свич по булину
Ура, наконец-то полноценный паттерн матчинг! Надеюсь, еще и с null-ом?
>- ансейф
>- стринг темплейты
Нинужна.
> ну и требование знать java, java 8 и java 21 не думаю что кого-то удивляет уже
А нужно знать javac, javap? Знание jshell будет плюсом? jar?
Если им напишут на бумажке - будь добр ответь, владеешь ли и сколько лет коммерческого опыта
Кетс
Назовите хоткей, чтобы авто импортировать класс по первым буквам в shell
Напишите на листочке команду, чтобы установить vscode как редактор для jshell
Назовите хоткей, чтобы создать jshell черновик в идее
Перечислите все ключи jshell по алфавиту
Что? Ага, мням мням... Понятно... Мы вам перезвоним....
У меня давно был разговор с ХРом на какой-то реверс инжиниринг, спрашивает:
- Нам нужен человек, который понимает как программа работает внутри, вы знаете как именно программа работает внутри?
- Ну, вы упомянули знание системы контроля версий, программ сборки, то есть у вас есть исходный код?
- Я не знаю, это вам ответят тех специалисты, вы просто скажите - вы знаете как программа работает внутри?
- Да
Поговорил с баш скриптом
Сам блоха, гнида.
Книги не помогут и никогда не помогали. Чтобы почувствовать себя мидлом - тебе нужно походить по интервью, посмотреть что ожидают от мидла, чаще всего это не книжные знания.
Это ты еблан, если не можешь мысль уловить.
Дружок, это мало, накинь еще несколько фрейворков спринга - секьюрити, дата жпа, спринг тест и т.д., штук 5 баз данных, куда без докера, хибернейт, но он входит в спринг дата, будет желательно у них будет это знание сиай сиди, линукс, хтмл, си эс эс, джава скрипт, тайпскрипт базовый, немного ангуляра или других фронтенд фреймов
Пользуюсь жидеей и терплю постоянно её баги. Если бы я не был порриджем, которому важен дизайн, я бы писал в эклипсе, а есди бы сразу знал про баги жидеи и не привык бы к ней писал бы в вс коде.
> Вырвиглазно
Что там вырвиглазно? В эклипсе душевность какая-то есть, приятно в нее заходить, в отличие от бездушной идеи. Чувствуется, где хорошие ребята пилят, а где жиды последние
В РФ-то наверное, благо я из этого бродячего цирка с клоунами съебал к белым людям с адекватными собесами
Ты о чём?
Адекватные собесы это когда тебе предлагают литкод решать и абстрактные задачи на логику?
Фронтенд нельзя указывать, за те же деньги заставят задачи по фронту делать. Как в армии - кто не курит фронтенд в резюме указал задачи по фронту делает, у остальных - перекур
>а есди бы сразу знал про баги жидеи и не привык бы к ней писал бы в вс коде.
Я за неделю пересел на vscode, сложнее всего было привыкнуть к внешнему виду. Правда на расте пишу. Из минусов lsp сервер не такой отзывчивый (не знаю как там у вас работает), исправляя ошибку надо ждать пока оно там подумает пару секунд и только потом перестает быть красненьким. Не хватает вменяемой поддержки sql, тут как-то все криво и запросы в строках не распознает. А в остальном все тоже самое, но не виснет когда набираешь текст и когда открываешь большой проект он открывается сразу и можно смотреть код, а не ждать индексации. Меня больше всего это бесили эти 2 момента
>>52626
>Комп купи, нищепидар.
Эта хуйня будет тормозить даже на суперкомпьютерах в лабораториях в Калифорнии
Нет, это когда спрашивают базовые вещи, потом просят посмотреть код что не так, передача по ссылке/значению, немного про ГЦ. Всё, принят, 1 тех интервью.
>Какие щас фреймворки или пакеты нужно учить и в каком порядке чтобы собес пройти?
Ну это же очевидно - Spring (Boot) Core/MVC/Data, Hibernate, плюс знать всю экосистему - JDBC, SQL, Postgres/Oracle DB, Gradle/Maven
Вот это прям базовая база, дальше вариации на тему могут быть
А есть в бекенде вот какой то проект который как бы если ты склепал то уже считай на собесы ходить можешь. Ну вот типо на ведре если ты там можешь сделать какой нибудь туду список с запросами в веб то уже для работы годишься. Есть какой то такой минимальный проект для бека чтобы знать что если тв его сделал то уже худо бедно шаришь?
Да, платежную систему с рест апи делаешь вместе с базой и ок
Меня вообще в этом треде не было, успокойся
Да, напиши упрощённый клон постгреса или кафки и можешь откликаться на вакансии
Теперь попробуй обернуть жпа репо запросы к базе в комплитабл фьюче и наблюдай как все рушится
>В Австрии
Много там технологических компаний? Я думал вся европейская разработка в Германии/Нигерландах сконцентрирована.
Зачем в oltp плодить асинк запросы, там надо чух чух чух быстро выполнять мелкие один за другим
У меня был кейс когда надо было сходить в одну базу,потом к полученным сджоинить данные из второй или третьей базы,в зависимости от того кто быстрее ответит. У меня все сломалось на первом же запросе
Сетевая фасоль - рекомендую.
зависит от баз и как храняться данные.
Создай новый яп и набери 1000 последователей, которые готовы работать на твоём языке
Меньше, но есть
он же не делает этого в показанном тобою скрине.
композиция с прайват полем это вообще случай не то чтобы уникальный, а важный в том плане, что никто не будет вмешиваться в твою синхронизацию. типа представь свое ебало, если кто-то поймает единственный Object#notify извне? а они липкие.
я вообще в ахуе с того как ты долго это читаешь и все также тупишь, лол.
Я переключался на тусовки и книжку по скл,от манеры изъясняться автора все ещё воротит,поэтому читать её тяжело
можешь попробовать другую: The Art of Multiprocessor Programming, 2e.
она вроде понятнее и там картинок больше)
45 страниц? Я эту дочитаю,у меня на очереди пособие епамовское. Книги-выжимки меня ещё ни разу не подводили
Шилдт, срыг в действии, многопоточко на практике. Хотя судя по опыту анона выше, для последнего, оказывается, нужен уровень интеллекта выше минимального.
Помогите, о великие джависты.
Что делать с этой хуйней? Она и в idea и в vs code. Никак не могу понять почему она появилась и как пофиксить
1. Если ты пользуешься внутренней системой сборки жидеи, переходи на мавен, можно будет хотя бы пытаться разбираться, в чём дело.
2. Перезапусти жидею полностью.
spring-core.pdf
Вот такая хуйня на мавене. Жидею переустановил на этой системе, даже установил на второй - ничего не работает
idea/vs code/eclipse/vim/сам написать можешь, вообще похуй. Это ни на что ни влияет особоё
Этот хуйню несёт. Среда разработки влияет на программирование как ботинки на бег. Основа — ноги, но в хуёвых ботинках натрёшь мозоли.
При наведении на "fasterxml" пишет "Cannot resolve symbol 'fasterxml'" И предлагает решение
Find JAR on web
После нажатия на которое высвечивается
No libraries found for 'com. fasterxml. jackson. annotation. JsonAutoDetect'
Она как в Idea, так и в vs code. Что на Windows, что на Linux. Переустанавливал все по несколько раз, ничего не помогает. Добавлял нужную библиотеку вручную - тоже самое. SDK man также наотрез отказывается устанавливать что-либо, выдает ошибку на этом этапе.
Даже нейросетку подрочил, ничего не получается
Впервые столкнулся с Maven, поэтому точно не могу понять, что надо сделать.Как отредактировать этот код (простите), чтобы все заработало?
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>root</groupId>
<version>1.0</version>
<artifactId>project</artifactId>
<packaging>pom</packaging>
<name>project</name>
<modules>
<module>projects</module>
<module>primary-source</module>
<module>servlets</module>
<module>ejbs</module>
<module>ear</module>
<module>site</module>
</modules>
<!-- Зависимости -->
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.0</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<unzipCommand>/usr/bin/unzip -o > err.txt</unzipCommand>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>root.project.projects</groupId>
<artifactId>logging</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>root.project</groupId>
<artifactId>primary-source</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>root.project.servlets</groupId>
<artifactId>servlet</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
<dependency>
<groupId>root.project</groupId>
<artifactId>ejbs</artifactId>
<version>1.0</version>
<type>ejb</type>
</dependency>
</dependencies>
</dependencyManagement>
<distributionManagement>
<site>
<id>site</id>
<name>project website</name>
<url>scp://local.company.com/websites/project.company.com/</url>
</site>
</distributionManagement>
</project>
При наведении на "fasterxml" пишет "Cannot resolve symbol 'fasterxml'" И предлагает решение
Find JAR on web
После нажатия на которое высвечивается
No libraries found for 'com. fasterxml. jackson. annotation. JsonAutoDetect'
Она как в Idea, так и в vs code. Что на Windows, что на Linux. Переустанавливал все по несколько раз, ничего не помогает. Добавлял нужную библиотеку вручную - тоже самое. SDK man также наотрез отказывается устанавливать что-либо, выдает ошибку на этом этапе.
Даже нейросетку подрочил, ничего не получается
Впервые столкнулся с Maven, поэтому точно не могу понять, что надо сделать.Как отредактировать этот код (простите), чтобы все заработало?
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>root</groupId>
<version>1.0</version>
<artifactId>project</artifactId>
<packaging>pom</packaging>
<name>project</name>
<modules>
<module>projects</module>
<module>primary-source</module>
<module>servlets</module>
<module>ejbs</module>
<module>ear</module>
<module>site</module>
</modules>
<!-- Зависимости -->
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.0</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<unzipCommand>/usr/bin/unzip -o > err.txt</unzipCommand>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>root.project.projects</groupId>
<artifactId>logging</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>root.project</groupId>
<artifactId>primary-source</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>root.project.servlets</groupId>
<artifactId>servlet</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
<dependency>
<groupId>root.project</groupId>
<artifactId>ejbs</artifactId>
<version>1.0</version>
<type>ejb</type>
</dependency>
</dependencies>
</dependencyManagement>
<distributionManagement>
<site>
<id>site</id>
<name>project website</name>
<url>scp://local.company.com/websites/project.company.com/</url>
</site>
</distributionManagement>
</project>
В идее в правом боковом пространстве есть вкладка мавен,выбери там clean и package это должно пересобрать твой проект и подгрузить все зависимости
Че за хуйня написана в дистрибьюшн менеджере,это ты написал или идея сама теперь так генерирует?
На мавен централе последняя версия Джексон датабайнда 2.17.2, попробуй её
Каждый день открываю, нихуя не лагает. Жирнейший монолит, утыканный плагинами. Посмотрел бы я как пердиксы разрабатывали это в пердикскоде.
Ты вообще тред читал? У него не баги жидеи, у него даже напрямую мавеном не собирается это.
Этот жеп https://openjdk.org/jeps/480 кто-то трогал уже? Вроде третье превью, интересно че там и как.
Привык просто постики писать, через вызов меню ответить кому-то. Невермайнд, спи иди.
Нет, зачем? В большинстве случаев это не нужно
https://practicum.yandex.ru/referrals/?ref_code=gAAAAABmyIjoAcSb1EEnTtWcbzNwEZBeJz64GSzyFgZZeu4nee3X65XmXFqBbOTaJzJUambd1gvbe4COwrOk-8FmRVhjDNidfg%3D%3D
Неопытным чубрикам тогда тоже скидку дадут если че.
Чтобы самому настраивать xml, кнопочки и прочее.
ты и в ide можешь их без проблем ручками создавать и настраивать
Command<R> - тип возврощаемого значения. Какой тип? R - это класс, его нет если что.
CommandHandler<C extends Command<R>, R> - вот тут я вообще даже в угадайку играть не буду
И вот, ебануться - public <C extends Command<R>, R> R handleCommand(C command) {
Еще - public class CreateCustomerCommandHandler implements CommandHandler<CreateCustomerCommand, Customer> { // (5)
Почитай про дженерики.
> CommandHandler<C extends Command<R>, R>
Это значит что при имплементации этого интерфейса ты можешь заюзать любые классы вместо C и R.
При условии что C наследуется от Command<R>
> public class CreateCustomerCommandHandler implements CommandHandler<CreateCustomerCommand, Customer>
Пример такой имплементации.
> public <C extends Command<R>, R> R handleCommand(C command) {
Метод, который будет вызывать этот интерфейс.
Смотри Спринг Потрошитель с Женечкой на ютубе, там сильно не менялись кишочки
Требуют проект уровня "три года нарисованного опыта в резюме"
У меня для всех конечных точек сервисов используется JWT и только перечисленные выше два сервиса без Spring Security. И стоит ли вообще их делать для них?
Мне кажется что Eureka Server обязательно, т.к. мы же можем там получить информацию о всех доступных репликах и натворить делов, но на ум приходит только какая-нибудь форма с логином и паролем.
А для Config Server пока не приходит в голову как реализовать авторизацию. Там же ничего нет, этот сервер просто раздает ресурсы. Или всё же можно как-то получить доступ к конфигурационным файлам и что-нибудь изменить?
Да
Да всем насрать, это школьники поддувают, аудитория видосиков python vs java на ютубе
Ты наркоман?
https://www.youtube.com/watch?v=IF9l8fYfSnI
СКУФЦ ВЕЩАЕТ О ВАЛЬХАЛЛЕ
СМОТРИМ ВМЕСТЕ
Шарписты все сдохнут а мы попадём в Elden!
быстрофикс
> Сериализация депрекейтед чел
Хм, ну я по книжке Хорстманна иду, там есть. В любом случае, эта тема на день была, просто один вопрос остался
Вот бы найти опытного джависта, чтобы помогал. Но я социопат
>эта тема на день была
Суббота докер
Воскресенье кубер
Понедельник спринг
Вторник готов в прод!!!
А мне просто нравится джава, я работать все равно не хочу
По воле случая пришлось параллельно брать руководство над java-командой и вкатываться в неё (сам дотнетчик бывший и вообще руковод angular-разработкой, такие дела), и что мне серьёзно не нравится, это куча проблем в проекте, среди которых:
1. Вообще не расписано нихуя в application.yml и application-local.yml. То бишь нет ни комментов, ни документации, ни даже общего набора свойств, чтобы их количество в обоих файлах сохранялось. Такое бесит до одурения
2. Сам maven, settings.xml и pom.xml. Дело даже не в том, что он многословен, а в том, что подход работы maven контринтуитивен тому же .net cli, npm и прочему, где одна команда делает только то, что в ней забито, а не выполняется куча ебучих целей по lifecycle, которые приходится скипать доп.аргументами. Может, конечно, я пока читал жопой и не до конца разобрался, как это конфигурировать правильно
3. Код нихуя почти не документирован, у меня прям жопа горит с этого. Как коллеги разрабатывают это уже который год я ума не приложу. Даже ебучий ман как запустить проект я писал самостоятельно, потому что это знание, словно, блядь, предание какое-то древнее передавалось исключительно из уст в уста
4. Легаси-легаси-легаси. А также охуеть какой техдолг. Только недавно провели миграцию на spring-boot 3.1.2 и java 17, но куча говен различной степени поршивости ещё присутствует в проекте. Нет, анончик, это не мой порыв просто всё взять и переделать, потому что так захотелось, это необходимость: когда у тебя в проекте error-code буквально генерится РАНДОМОМ -- это зашквар ебаный. Не говоря уже о проблемах с производительностью и том, что микросервисы даже порой взаимодействуют не только со своей схемой БД, а общаются между собой не через kafka, а простыми запросами по HTTP, в которых порой нарушается data contract
Короче, план действий у меня такой:
1. Возможно, провести миграцию с maven на gradle для облегчения конфигурации и настройки lifecycle
2. Дотьюнить набор необходимых --add-opens для старта проекта в связи с миграцией на java 17, чтобы исключить набор плавающих ошибок (банально, чтобы нормально работал и не падал ignite в рандомный момент времени)
3. Нормально прописать application.yml и application-local.yml
4. Перейти на OpenFeign для настройки httpclient, вместо resttemplate
5. Начать перепиливать кал на что-то более вменяемое одновременно с самодокументацией
По воле случая пришлось параллельно брать руководство над java-командой и вкатываться в неё (сам дотнетчик бывший и вообще руковод angular-разработкой, такие дела), и что мне серьёзно не нравится, это куча проблем в проекте, среди которых:
1. Вообще не расписано нихуя в application.yml и application-local.yml. То бишь нет ни комментов, ни документации, ни даже общего набора свойств, чтобы их количество в обоих файлах сохранялось. Такое бесит до одурения
2. Сам maven, settings.xml и pom.xml. Дело даже не в том, что он многословен, а в том, что подход работы maven контринтуитивен тому же .net cli, npm и прочему, где одна команда делает только то, что в ней забито, а не выполняется куча ебучих целей по lifecycle, которые приходится скипать доп.аргументами. Может, конечно, я пока читал жопой и не до конца разобрался, как это конфигурировать правильно
3. Код нихуя почти не документирован, у меня прям жопа горит с этого. Как коллеги разрабатывают это уже который год я ума не приложу. Даже ебучий ман как запустить проект я писал самостоятельно, потому что это знание, словно, блядь, предание какое-то древнее передавалось исключительно из уст в уста
4. Легаси-легаси-легаси. А также охуеть какой техдолг. Только недавно провели миграцию на spring-boot 3.1.2 и java 17, но куча говен различной степени поршивости ещё присутствует в проекте. Нет, анончик, это не мой порыв просто всё взять и переделать, потому что так захотелось, это необходимость: когда у тебя в проекте error-code буквально генерится РАНДОМОМ -- это зашквар ебаный. Не говоря уже о проблемах с производительностью и том, что микросервисы даже порой взаимодействуют не только со своей схемой БД, а общаются между собой не через kafka, а простыми запросами по HTTP, в которых порой нарушается data contract
Короче, план действий у меня такой:
1. Возможно, провести миграцию с maven на gradle для облегчения конфигурации и настройки lifecycle
2. Дотьюнить набор необходимых --add-opens для старта проекта в связи с миграцией на java 17, чтобы исключить набор плавающих ошибок (банально, чтобы нормально работал и не падал ignite в рандомный момент времени)
3. Нормально прописать application.yml и application-local.yml
4. Перейти на OpenFeign для настройки httpclient, вместо resttemplate
5. Начать перепиливать кал на что-то более вменяемое одновременно с самодокументацией
>1. Вообще не расписано нихуя в application.yml и application-local.yml.
Хуйли там тебе расписывать? Поищи классы которые маппятся на эту парашу по аннотации @ConfigurationProperties. Там по идее комменты могут быть. А могут и не быть, я хуй забил их писать.
>2. Сам maven, settings.xml и pom.xml.
>Может, конечно, я пока читал жопой и не до конца разобрался, как это конфигурировать правильно
Там уже скорее всего все настроено. CI/CD дернет clean verify, а дальше уже запихнет в докер.
>3. Код нихуя почти не документирован, у меня прям жопа горит с этого.
А хуйли там что-то писать если процентов 90% кода это бойлерплейт? Помечать докой геттеры? Единственный раз когда мне более менее пригодились комменты - это не в коде, а в тестах, когда дико заебистый алгоритм был.
>когда у тебя в проекте error-code буквально генерится РАНДОМОМ -- это зашквар ебаный
Это к легаси никакого отношения не имеет. Просто раздолбайство.
>микросервисы даже порой взаимодействуют не только со своей схемой БД
Это как? В чужую лезут?
>общаются между собой не через kafka, а простыми запросами по HTTP, в которых порой нарушается data contract
Нарушение контракта не хорошо, но если надо какую-то синхронную парашу протащить через несколько сервисов - другого выхода тупо нет.
>провести миграцию с maven на gradle
Градл хуита. Не трогал бы эту хуиту и 10 метровой палкой.
>Дотьюнить набор необходимых --add-opens
У тебя какая-то странная хуйня происходит в проекте. Мы на 21 перекатили и нихуя не дотюнивали.
>Возможно, провести миграцию с maven на gradle для облегчения конфигурации и настройки lifecycle
Перданул с подливой
>Возможно, провести миграцию с maven на gradle для облегчения конфигурации и настройки lifecycle
Возможно у тебя другой опыт, но грэдл - это пиздец и миграция на него не облегчение. Он настолько нестабильный, что любое обновление даже патч версии может тебе все нахуй сломать. А уж проблемы с совместимостью апи плугинов - это вообще стандарт
Не знаю что ты там делаешь мавеном, но обычно им можно делать куда боле простые и переносимые билды
>4. Перейти на OpenFeign для настройки httpclient, вместо resttemplate
Опять же, тяга все решать хайповыми фреймворками - это признак джуна или джсера. Нужно оценить не добавить ли сложности опенфейн, может там и ресттемплейта по горло хватает
>микросервисы даже порой взаимодействуют не только со своей схемой БД, а общаются между собой не через kafka, а простыми запросами по HTTP
Это действительно ужасно
Судя по твоему описанию, возможно там микросервисы там не такая уж удачная затея и возможно многие из них можно просто слить воедино
Это был сарказм. На кафке свет клином не сошёлся, HTTP вполне нормален
Нет
Декларативный http-клиент.
Ну т.е. принцип как в JPA - нарисовал интерфейсы, дальше оно само.
Смысл - меньше бойлерплейта.
В свежем спринге подобное уже из коробки, как выше заметили.
Существо рождённое больным умом одебилевшего от рефлексии анноташкошвайна которое для описания отправляемого запроса использует аннотации
Съебывай. Без агрессии, добрый совет.
Даже если в проекте настолько все плохо, насколько ты расказываешь, уже по твоему плану и бэкграунду видно что ты не тот человек который способен переломить негативную тенденцию. Ты сделаешь проекту только хуже - даже если бы ты просто взял, пустил всю команду по пизде, нахайрил дотнетчиков и переписал все нахрен на шарпы с нуля, а потом на дваче кичился бы тем, какой ты охуенный шарпей, и какие джаваны идиоты, это и то было бы продцуктивней. Ты же прицепился к градлу с фейном как к какой то панацее, при этом судя по тому что ты написал сам с ними никогда не работал. Доебы какие то детские до мавена опять... если тебе
мавен контринтуитивен, проблема в тебе, а не в мавене, миллионы мавеноюзеров не могут ошибаться на этот счет. Ты просто проебешь на этот переход кучу человекочасов и все станет контринтуитивно не только для тебя, но и для команды, и ничего ты этим не добьешься.
Просто съеби и уступи дорогу кому нибудь с джавовым бэкграундом, не мучай себя и людей. Или хотя бы найди в команде адекватного разраба на джаве, делегируй ему верховные техлидерские полномочия, а сам тюнь процессы.
Да это кстати траллинг какой-то я в жизне не поверю что в живой проект запустят человека со стороны еще и с тупо другим тех бэкграундом. Учитывая что там есть какая-то команда и легче назначить кого-то из них.
Сплошь и рядом такое. Особенно в местечковых артелях, которые не настолько гиганты чтобы скальпить всех синьоров с рынка.
Верно ли я понимаю, что все новые библиотеки/технологии сейчас продвигаются через агрессивный маркетинг большими или критически важными фирмами?
Плюсом для кого? Для твоего резюме - крайне маловероятно. Если твое поделие не собирает сотни звезд, всем насрать.
>Верно ли я понимаю, что все новые библиотеки/технологии сейчас продвигаются через агрессивный маркетинг большими или критически важными фирмами?
Не совсем. Скорее - современные анальники выродились в размякших омежек, и здравый смысл им заменила реклама и пропаганда дядек с деньгами.
Я поудалял лишние методы, типо добавить, обновить и прочее
Создал еще один проектик с нуля, по минимуму, пара моделей и минимум необходимых методов, чтобы проверить еще раз, та же хуйня, у меня почему то при гет запросе не мапятся связанные сущности по таблице, я и базу данных менял, хуй знает что я не так сделал, это пиздос, ладно, передохну и пойду гайды у индусов смотреть
И может подскажете, где поподробней про эту фигню прочитать, есть в официальной вики по спринг дата жпа?
Пиздец, наконец разобрался https://jpa-buddy.com/blog/lombok-and-jpa-what-may-go-wrong/
Не используйте ентити и дата вместе, потому что в дате есть аннотация @EqualsAndHashCode, которая ломает работу с спринг дата жпа и дженериком сет<>, наверное для здешних это очевидно, но я наступил на эти грабли
Когда следует запускать jvm с флагом -Xint?
База
Каждому по килограмму ключей от софта , кто поможет!
Еще делаю
Не помогло, а может я просто тупой и где-то накосячил. Как же я ненавижу томкат. Почему на ГОшке все интуитивно + встроено в язык, а тут через *опу
Спринг какой версии? спринг 5 вроде работает с 9 томкатом, а 6 - с 10+.
> Почему на ГОшке все интуитивно + встроено в язык, а тут через *опу
В спринг бут томкат встроенный и настраивать его не надо, как дойдешь до него, будешь кайфовать.
>В спринг бут томкат встроенный и настраивать его не надо, как дойдешь до него, будешь кайфовать
А я сразу со спринг бута начинал, ну то есть сначала разобрался с основой спринга, разобрался что такое депенденси инжекшен, научился через бины и спринг контекст это реализовывать и сразу после этого пошел крудошлепить, на реальных примерах намного легче и интересней сразу учеба пошла, а по ходу дела уже теорию изучал где не понимал
Вы абсолютно правы, если в методе `run()` имя потока отличается от потока, в котором работает бин, запускающий этот метод, это однозначный признак того, что метод был вызван асинхронно.
В этом случае Spring действительно использует прокси, но не в том виде, как вы могли бы ожидать.
Как Spring работает:
1. @EnableAsync: Эта аннотация включает асинхронное выполнение в Spring.
2. Проксирование: Spring использует CGLIB (Code Generation Library) для создания динамического прокси-объекта для ваших бинов, помеченных `@Async`.
3. Асинхронное выполнение: Когда вы вызываете `run()` через прокси-объект, Spring не выполняет метод `run()` непосредственно. Вместо этого Spring создает новую задачу и отправляет ее в пул задач, указанный в `@EnableAsync`.
4. Новый поток: Пул задач запускает задачу в новом потоке, и именно в этом новом потоке выполняется ваш метод `run()`.
Почему мы не видим прокси-класс:
- Spring использует CGLIB для создания прокси, а CGLIB работает с помощью расширения классов. Он не создает отдельный класс прокси, как это делает стандартный прокси-паттерн Java. Вместо этого он модифицирует существующий класс.
- В результате, вы не увидите в коде имя класса прокси.
Пример:
Представьте, что у вас есть класс `MyBean` с методом `myMethod()`, помеченным `@Async`.
1. Spring создает прокси-класс, наследующий от `MyBean`, с помощью CGLIB.
2. Когда вы вызываете `myBean.myMethod()`, Spring на самом деле вызывает метод `myMethod()` прокси-класса.
3. Прокси-класс перехватывает вызов, создает новую задачу и отправляет ее в пул задач.
4. В пуле задач задача запускается в новом потоке, и именно в этом потоке выполняется `myMethod()` оригинального класса `MyBean`.
Заключение:
Хотя вы не видите прокси-класс напрямую, он все равно существует и используется Spring для асинхронного выполнения. CGLIB работает "под капотом" и обеспечивает прозрачную асинхронную обработку ваших методов.
Вы абсолютно правы, если в методе `run()` имя потока отличается от потока, в котором работает бин, запускающий этот метод, это однозначный признак того, что метод был вызван асинхронно.
В этом случае Spring действительно использует прокси, но не в том виде, как вы могли бы ожидать.
Как Spring работает:
1. @EnableAsync: Эта аннотация включает асинхронное выполнение в Spring.
2. Проксирование: Spring использует CGLIB (Code Generation Library) для создания динамического прокси-объекта для ваших бинов, помеченных `@Async`.
3. Асинхронное выполнение: Когда вы вызываете `run()` через прокси-объект, Spring не выполняет метод `run()` непосредственно. Вместо этого Spring создает новую задачу и отправляет ее в пул задач, указанный в `@EnableAsync`.
4. Новый поток: Пул задач запускает задачу в новом потоке, и именно в этом новом потоке выполняется ваш метод `run()`.
Почему мы не видим прокси-класс:
- Spring использует CGLIB для создания прокси, а CGLIB работает с помощью расширения классов. Он не создает отдельный класс прокси, как это делает стандартный прокси-паттерн Java. Вместо этого он модифицирует существующий класс.
- В результате, вы не увидите в коде имя класса прокси.
Пример:
Представьте, что у вас есть класс `MyBean` с методом `myMethod()`, помеченным `@Async`.
1. Spring создает прокси-класс, наследующий от `MyBean`, с помощью CGLIB.
2. Когда вы вызываете `myBean.myMethod()`, Spring на самом деле вызывает метод `myMethod()` прокси-класса.
3. Прокси-класс перехватывает вызов, создает новую задачу и отправляет ее в пул задач.
4. В пуле задач задача запускается в новом потоке, и именно в этом потоке выполняется `myMethod()` оригинального класса `MyBean`.
Заключение:
Хотя вы не видите прокси-класс напрямую, он все равно существует и используется Spring для асинхронного выполнения. CGLIB работает "под капотом" и обеспечивает прозрачную асинхронную обработку ваших методов.
спасибо за инфо, анон, единственная причина обновляться.
Переключился, вроде полет нормальный.
>5к RPS 20kk DAU ten nines AVL
This phrase likely describes a high-performance, highly available system expected to handle 5,000 requests per second, support 20 million daily active users, and achieve an availability of 99.99999999%. This would be a system designed for extreme reliability and scalability.
>Перспективы для Java-разработчика или почему ты не хочешь вкатываться в джаву
Примерно с начала 2023 вкат в айти закрыт, и это, при ретроспективном наблюдении спустя два с половиной года после начала конца, будет с нами навсегда. ИИ пузырь лопнул, политические причины в России теперь мало влияют на рынок, но к тому, что было раньше рынок IT не вернулся даже близко. За всё время оттепели рынок вырос процентов на 10%, и, похоже, вышел на плато. Такими темпами мы даже к 2030 году, когда ИИ будет на самом деле заменять программистов полностью, не получим рынка, в который возможно вкатиться.
Если же, всё же, говорить про успешный вкат, то джава это в основном работа на визгливого менеджера, часто женщину с фетишем на фемдом, который она высовывает далеко за пределы секса, на помойных проектах со спрингом и говнокодом, иногда с легаси говнокодом. Годнота среди галер, тем не менее, тоже есть.
Фриланса на джаве за исключением майнкрафта нет, но в копрокубах деньги не водятся (анальник на спринге на одну свою среднюю зарплату может выкупить всю сферу), благодаря бесчисленным толпам школьников, готовым работать за едудонат на сервере: средняя цена за плагин для майнкрафта на весну 2024 года около 250 рублей.
"Чёт хуйня! Мне не нравится. Может, другой язык выбрать?", или почему ты, всё же, хочешь вкатываться в джаву
В других языках ещё хуже. Как по перспективам для вката, так и по качеству языка.
Школоло-аналитика подъехала: копрокубы в одном ряду с тырпрайзом и жыром про нейронки. Жги еще.
Это не я писал, это с шапки
>Спринг какой версии?
Да у меня никакой ни с чем не работает лол
Хоть и не помогло, но ,все равно, спасибо, Анонче, за твое время
Хорошее
Так вышло, что тут мне толком никто не ответил, однако сегодня путем эксперимента удалось выявить, что при jit-компиляции каких-то очень нагруженных методами классов java съедает чуть ли не в два раза больше памяти, чем при отсутствии jvm-компиляции(посредством использования флага -Xint)
Насколько я понял, Идея сейчас по подпис_очке, никаких ключей больше нет. Нужно либо EAP использовать, либо крякающий плагин от какого-то пиздоглазого лол. Если прям дохуя надо, могу скинуть сайт с этим говном, но на свой страх и риск.
Чувак, просто поставь эклипс
Ты херней занимаешься, что значит потребляет больше памяти? Кто потребляет: куча, служебные области, офхип? Сколько в хипе живых объектов? Ты просто увидел некий эффект от включения JIT и начинаешь фантазировать на тему причин этого, вместо того чтобы искать эти причины.
Размер объекта всегда один и тот же, тупо потому что один и тот же объект может использоваться как в скомпилированом коде, так и в интерпретируемом. Поэтому заголовок, размеры полей и их порядок фиксированы для всех экземпляров объекта.
Самое очевидное предложение почему так происходит: скомпилированный метод работает быстрее и производит больше мусора, потому JVM зарезервировала больше места под кучу. Но это надо проверять.
Папика искать, чтоб пристроил
Ты ебанутый? А где по твоему твоя скомпилированная параша должна храниться, м?
Без сильной мозгоебли - скорее всего нет. Потому что какие-то параметры например могут не работать из-за всяких if всередине темплейта или еще макросы / подгрузка темплейтов извне. Можно чисто ради интереса попытаться соорудить некий обьект который будет вести себя как контекст с переменными и кидануть его в темплейт чтобы он просто фиксировал обращения, но это может быть геморно и ты врядли поймешь какие типы нужны.
В текстовом файлике на рабочем столе хранишь и всё
Каких блэд токенов то, конекретно?
Секреты чтоли, типа JWT sign key? Тупо вынеси в спринг-конфиг, devops его значение на месте переопределит.
переменная окружения при запуске
чтобы использовать хибернейт надо знать sql в два раза лучше. Чтобы понимать что сгенеренные запросы говно и как заставить эту дрянь делать относительно нормальные запросы
Вот есть спринг фреймворк - это сама база, IoC контейнеры, депенденси инжекшен, вот это вот все, а спринг бут это уже современная реализация, где под капотом скрыт спринг фреймворк, собираюсь выучить сам спринг фреймворк, лучше это сделать сразу, или после того, как разобрался в спринг бут, создал пару крудов, как считаете?
Конечно же сначала обычный спринг,нахуя становиться макакой без понимания кишков с самого начала
Наверное ты прав, сам начал с кора, поделал пару бин контейнеров и пошел на спринг буте писать, начали появляться всякие баги, которые пофиксил кое как с чат гпт, последую твоему совету и полностью разберусь с кором, если надоест, буду чередовать с основным проектом на буте
99% всех вакансий требуют хубирнейт на уровне влэйда михулеску
Я имею ввиду, что там вирусы, и у тебя угонят аккаунты.
Про эклипс кроме дедов никто и не вспоминает даже. Альтернатива идее - вскод.
Мне вскод не нравится, эклипс лучше, все таки полноценная ide
Это вкатунское говно усирается, что у него тормозит на нетбуке за 10к. У нормальных людей все работает. А эклипс я в гробу видел, наработался уже в десятых на нем, спасибббба
Какая нахуй вскод альтернатива? Никто в нем не работает. Идея, эклипс, нетбинс в редких случаях встречается
Для вкатунов как раз и лучше сразу привыкать все руками писать в эклипсе, жидея много работы за тебя делает и толком ничему не научишься, а насчет багов, они не от железа зависят, в треде много раз писали, что баги в этой иде и приходится по 5 раз на дню перезапускать
Какие еще 15 дней, минимум 六个月!
>>58611
>>эклипс, нетбинс
Дизайн из девяностых, выглядит как говно, пользоваться просто неприятно. Уж лучше вскод.
>>58611
>>Никто в нем не работает
У лида видел. У фулстеков и тестировщиков попадается.
Экслипс не видел ни разу. Кроме джавистов про него никто и не знает даже.
>>58625
>>лучше сразу привыкать все руками писать в эклипсе, жидея много работы за тебя делает и толком ничему не научишься
Серега, как раз наоборот - идея терпеливо объясняет почему код не скомпилируется или плохо написан, расставляет точки с запятой, дописывает бойлерплейт и позволяет вкатуну не отвлекаться на это говна и сосредоточиться на самой логике.
На эклипсе он напишет говно код и будет рад, на идее увидит что все подчеркнуто варнигами и полезет читать что не так с его кодом.
> Дизайн из девяностых, выглядит как говно, пользоваться просто неприятно. Уж лучше вскод.
Нравится-не нравится, терпи, моя красавица. Нет таких проектов, где работают в вскоде, скажут сидеть в нетбинсе, будешь придрачиваться. А эклипс очень даже хорош
Вскод как по мне в мелочах всратее
> Экслипс не видел ни разу. Кроме джавистов про него никто и не знает даже.
Мейби потому что это иде для джавы?
Я не настолько избирательный, заплатят, буду джава 5 ковырять. Это педики всегда нос воротят от мужской работы
> иде для джавы это жидея
И вскод, судя по твоим постам
Где когда ??!?!?!
+15 дней подписки
https://docs.oracle.com/javase/specs/jvms/se17/html/jvms-2.html#jvms-2.5
ОТСУТСТВУЕТ !!!!
ТУПЫЕ ОРАКЛЕ МАКАКИ УБРАЛИ ЕЁ ИЗ СПЕЦИФИКАЦИИ, НО ЧАТ ГОПОТА ДОКАЗЫВАЕТ ЧТО ОНА ВСЁ ЕЩЁ ЕСТЬ !!!
Причина подрыва?
Ебанат пустоголовый,мне бургер и колу зеро и побыстрее
Нафига тебя нагрузили этим, если ты не специалист в Java ? Судя по тому что ты расписал, тебя ждет веселуха. Вот был бы я с вами, все б разрулили. В твоем плане есть прорехи, которые как раз от того, что с джавой и спрингом ты не работал. Вот смотри:
>2. Сам maven, settings.xml и pom.xml. Дело даже не в том, что он многословен, а в том, что подход работы maven контринтуитивен тому же .net cli, npm и прочему, где одна команда делает только то, что в ней забито, а не выполняется куча ебучих целей по lifecycle, которые приходится скипать доп.аргументами. Может, конечно, я пока читал жопой и не до конца разобрался, как это конфигурировать правильно
Он кажется тебе контринтуитивным, потому что ты с ним не работал.
Да, Maven староват, но вполне себе еще рабочее решение. Если ты сейчас начнешь переделывать все на gradle, потому что там build файл по размеру меньше, ты захлебнешься в работе. Поверь, это сложная миграция. Без супер нужды, я бы не стал этого делать, если только для нового проекта брать.
>3. Код нихуя почти не документирован, у меня прям жопа горит с этого. Как коллеги разрабатывают это уже который год я ума не приложу. Даже ебучий ман как запустить проект я писал самостоятельно, потому что это знание, словно, блядь, предание какое-то древнее передавалось исключительно из уст в уста
Ну здесь видимо потому что поленились. Они работали долгое время на проекте и лично им это было не нужно, они все из кода понимали, вот и не написали. Это классика) Остались контакты бывших разработчиков для консультаций?
>когда у тебя в проекте error-code буквально генерится РАНДОМОМ
Пхахахахахахаха! Пиздец!)
>что микросервисы даже порой взаимодействуют не только со своей схемой БД, а общаются между собой не через kafka, а простыми запросами по HTTP,
А вот здесь не очень понял? Что плохого, если микросервисы общаются по ресту? Ну да, там будет небольшое латенси из-за сети, но кафка только для асинхронного взаимодействия, а если тебе ответ нужен прямо здесь и сейчас ?
>2. Дотьюнить набор необходимых --add-opens для старта проекта в связи с миграцией на java 17, чтобы исключить набор плавающих ошибок (банально, чтобы нормально работал и не падал ignite в рандомный момент времени)
"Дотьюнить", ну насмешил. Напихать --add-opens это не решение ) Нужно переписывать код по-хорошему. Никто уже игнайт не использует, он написан для джавы версии "говно мамонта", поэтому пока не будет рефакторинга на нормальную альтернативу, у вас будет все на соплях держаться. Если Игнайт у вас как кэш идет, то надо менять на Hazelcast или Redis.
>3. Нормально прописать application.yml и application-local.yml
Чо значит "нормально прописать"? Чаще всего в пропертях стоят стандартные свойства, которые используются стартерами спринг бута, можно кликнуть на них и посмотреть исходник, там есть документация. Или там какие-то самописные свойства?
>4. Перейти на OpenFeign для настройки httpclient, вместо resttemplate
Зачем?? В Spring Boot есть WebClient, рекомендованный документацией, с помощью которого можно писать как синхронный, так и реактивный-асинхронный код.
>5. Начать перепиливать кал на что-то более вменяемое одновременно с самодокументацией
Spring Boot умеет сам себя документировать
если есть open api в проекте
https://springdoc.org/
или с помощью тестов, пишешь тесты, генерируешь документацию
https://docs.spring.io/spring-restdocs/docs/current/reference/htmlsingle/
Нафига тебя нагрузили этим, если ты не специалист в Java ? Судя по тому что ты расписал, тебя ждет веселуха. Вот был бы я с вами, все б разрулили. В твоем плане есть прорехи, которые как раз от того, что с джавой и спрингом ты не работал. Вот смотри:
>2. Сам maven, settings.xml и pom.xml. Дело даже не в том, что он многословен, а в том, что подход работы maven контринтуитивен тому же .net cli, npm и прочему, где одна команда делает только то, что в ней забито, а не выполняется куча ебучих целей по lifecycle, которые приходится скипать доп.аргументами. Может, конечно, я пока читал жопой и не до конца разобрался, как это конфигурировать правильно
Он кажется тебе контринтуитивным, потому что ты с ним не работал.
Да, Maven староват, но вполне себе еще рабочее решение. Если ты сейчас начнешь переделывать все на gradle, потому что там build файл по размеру меньше, ты захлебнешься в работе. Поверь, это сложная миграция. Без супер нужды, я бы не стал этого делать, если только для нового проекта брать.
>3. Код нихуя почти не документирован, у меня прям жопа горит с этого. Как коллеги разрабатывают это уже который год я ума не приложу. Даже ебучий ман как запустить проект я писал самостоятельно, потому что это знание, словно, блядь, предание какое-то древнее передавалось исключительно из уст в уста
Ну здесь видимо потому что поленились. Они работали долгое время на проекте и лично им это было не нужно, они все из кода понимали, вот и не написали. Это классика) Остались контакты бывших разработчиков для консультаций?
>когда у тебя в проекте error-code буквально генерится РАНДОМОМ
Пхахахахахахаха! Пиздец!)
>что микросервисы даже порой взаимодействуют не только со своей схемой БД, а общаются между собой не через kafka, а простыми запросами по HTTP,
А вот здесь не очень понял? Что плохого, если микросервисы общаются по ресту? Ну да, там будет небольшое латенси из-за сети, но кафка только для асинхронного взаимодействия, а если тебе ответ нужен прямо здесь и сейчас ?
>2. Дотьюнить набор необходимых --add-opens для старта проекта в связи с миграцией на java 17, чтобы исключить набор плавающих ошибок (банально, чтобы нормально работал и не падал ignite в рандомный момент времени)
"Дотьюнить", ну насмешил. Напихать --add-opens это не решение ) Нужно переписывать код по-хорошему. Никто уже игнайт не использует, он написан для джавы версии "говно мамонта", поэтому пока не будет рефакторинга на нормальную альтернативу, у вас будет все на соплях держаться. Если Игнайт у вас как кэш идет, то надо менять на Hazelcast или Redis.
>3. Нормально прописать application.yml и application-local.yml
Чо значит "нормально прописать"? Чаще всего в пропертях стоят стандартные свойства, которые используются стартерами спринг бута, можно кликнуть на них и посмотреть исходник, там есть документация. Или там какие-то самописные свойства?
>4. Перейти на OpenFeign для настройки httpclient, вместо resttemplate
Зачем?? В Spring Boot есть WebClient, рекомендованный документацией, с помощью которого можно писать как синхронный, так и реактивный-асинхронный код.
>5. Начать перепиливать кал на что-то более вменяемое одновременно с самодокументацией
Spring Boot умеет сам себя документировать
если есть open api в проекте
https://springdoc.org/
или с помощью тестов, пишешь тесты, генерируешь документацию
https://docs.spring.io/spring-restdocs/docs/current/reference/htmlsingle/
Даже быстрее.
>А также охуеть какой техдолг
>сам дотнетчик
Еще один "улучшатель" и тем более шарпомуха, лол. Не разобрался в проект и уже выдал свое "ценное" мнение. Такие улучшатели потом жидко дают в рейтузы и бегут обосранные менять работу, т.к. въебали 1.5кк человеко часов и нихуя не сделали
Многопоток может просрал?
А что убрали? Свинг?
Меня тоже бесило, что он есть. Но примеры на нем норм были, когда многопоточку демонстрировали.
Постите сами.
Бот сломался
В коде с var хотя бы не надо указывать типы по два раза. Впрочем я бы и рад вообще ровно ноль раз их указывать, пусть компилятор этой хуйней мается; он уже чекает сабтайпы и умеет находить наиболее общие типы.
>>60863
>Про дженерики сокращён раздел
Что типа среднему жавану нахуй не нада?
>>61748
22 и 23 жаба проходняк, что еще обсуждать?
У него есть РАБота и он жалуется
Вряд ли. Но в превью могут, теоретически.
))))
Мб string template вернут, в качестве превьюхи, но не более. Вот к 29, возможно что-то да допилят
Лум вот тоже долго пилили и быстро выкатили, в 19 превью, в 21 релиз. Но аналог 19 в цикле 21-25 это 23, и там вальхаллы нет, поэтому я говорю, что может быть превью только.
Как и с любым концом света - вальхала уже почти наступила, уже прям скоро, но не в следующей версии, но вы продолжайте верить.
Хотя лума дождались, мб и до вальхалы доживем.
540x960, 0:31
Правильно ли я понимаю, что спринг-работах довольно сложно себя проявить что-то оптимизировать, применить хитрый алгоритм и т.д., потому что все под толстым слоем магии.
Честное благородное, я не тролль :)
>> работах довольно сложно себя проявить
Так закрой больше всех тасок, за меньшее время, тебя и заметят
> настройщик Спринга
Настройщик срыга это больше шутка, чем реальность. Срыг-программист очень многое пишет сам как белый человек и около 30% времени тратит на пердолинг срыга для достижения того, на что без срыга было бы потрачено 5% времени.
Да, это так.
К сожалению, с этой работой - просто сделать хорошо, просто и быстро - большинство не могут справиться и начинают наворачивать микросервисы на кубернетисы.
Работа на джаве - это не проявление себя, это решение бизнес задач, а они в большинстве своём алгоритмически предельно тупые.
>Хотя лума дождались, мб и до вальхалы доживем.
Ну вот реально - зачем? У тебя конкретно был ботлнек на IO? Или ты в своем проекте вручную раскладывал байтики по массивам?
>около 30% времени тратит на пердолинг срыга для достижения того, на что без срыга было бы потрачено 5% времени
Точняк! Делов то
doPost(HttpServletRequest, HttpServletResponse)
написал, web.xml отредактировал и всё.
Лум это решение проблемы 10к. Теперь не надо ебаться в асинки и писать как раньше, в тупую создавая мириады тредов.
По поводу байтиков, лично ты этим не занимаешься, но хэшмапа, к примеру, занимается. Там ебать какая экономия выходит, если посчитать. Также и с LinkedList, возможно к нему наконец найдется применение. Ну и самое главное в вальхалле это даже не перфоманс, а возможность пихать примитивы в женерики и коллекции без накладных расходов.
>Теперь не надо ебаться в асинки и писать как раньше
Так и раньше не надо было, большинство ПО работало на обычных тредах без проблем, потому что такой нагрузки нет практически ни у кого
>такой нагрузки нет практически ни у кого
Ну тут хуй знает, статистика нужна, но на слово поверю. Мне тоже не кажется, что лум координально что-то поменял.
Вальгалла в этом плане для меня важнее, поскольку делает мост между примитивами и объектами. Но я бля вообще не верю, что через год она будет в превью, да даже в инкубаторе.
бесплатно может на торентах найдешь от фирмы ОТУС. А вообще нормальный курс по спрингу у них стоит больше 100 тыс, можешь чекнуть. Сам его покупал и это топчик.
алишев, дмдев
Он на сайте спринга, называется документация
>>сложно себя проявить
да, тебя будут закидывать рутинными тасками и тебе самому не очень будет хотеться брать что то сложное
>>что-то оптимизировать, применить хитрый алгоритм
Таких моментов дохуя, но они завязаны на бизнес логику. Дроченые литкоды не помогут, надо глубоко понимать куда код писать.
В целом нет правильного решения, есть много трейдофов и скил в том чтоб правильно подобрать вариант.
Ну и если времени дохуя - можешь запросы в базу пооптимизировать, но не всегда от этого реальный выхлоп будет заметен.
Наследника* быстрофикс
>List<T> может содержать одновременно и объекты класса Т и его наследников
Да.
>а List<? extends T> может содержать объекты только одного типа, либо Т либо наследники?
Нет. Сделать мономорфными списки сложно.
Этот вайлдкард подразумевает, что перед тобой список, который может быть как T, так и выше, а следовательно добавлять в него элементы нельзя. Иначе выражаясь, везде где будет в аргументах методов List указан T, с вайлдкардом extends их больше нельзя будет пихнуть, ибо небезопасно
А вообще забей ты хуй на это
Вот этого поддвачну.
Пиздос как тяжело в этом разобраться, самое главное это нельзя в такие списки что-то добавлять
Блять
Нуу... Как нельзя) Из этого есть два исключения. Первое очевидно null, поскольку это подтип всех типов. А вот второе очень интересно с т.з. системы типов, поскольку оно как бы берет и сжимает capture до переменной типа, как бы превращая это множество в некий тип.
Вот тебе пример наглядный: https://pastebin.com/pU16MSq4 изучи, где ошибки, а где все норм с т.з. компилятора
в том что там есть домашние работы, которые проверяет препод помогает тебе делать правильно, а не абы-как если ты сам делаешь домашки в одного по спиженым с торентов курсов.
Ну + еще в чате можно всегда у препода поинтересоваться, как сделать правильно то или иное решение.
Да уж, нагрузил ты меня, ну суть я вроде уловил, что при инициализации списка с вайлдкардс тип у списка может быть любой, он явно не указан, поэтому компилятор не разрешает туда добавлять элементы кроме null, а капчур конвеншен это как я понял приведение из неявного типа дженерика в явный, в общий, пошел я спать короче
Вроде все так.
Кстати, не стоит заостряться на контейнерах, типа хотя обычно дженерики только для всяких листов и используют, но они этим не ограничиваются. И мыслить онли в парадигме, producer = extends, consumer = super (PECS) не стоит.
Stream очень хороший тому пример.
Ты смотри на это не с точки зрения самого списка - так ты никогда не поймешь. Размышляй системой типов, и ссылками - так проще. Есть ссылка, есть ее значение. У ссылки есть тип, и у значения есть тип (на самом деле не совсем, но на время забудь о нулях, generics type erasure и прочих нюансах джавовой системы типов). А джаве надо гарантировать что тип значения типу ссылки соответствует. Все - это все что нужно держать в уме чтобы понять дженерики.
Вот есть у тебя ссылка типа List<T>. Это означает что значение у этой ссылки тоже - строго List<T>. Все чотко-ясно-понятно - ты берешь эту ссылку и начинаешь с ней работать , зная что у тебя она гарантированно указывает на лист объектов типа T. Читая по такой ссылке из листа объекты, ты знаешь что они будут типа T. И так как все чотко-ясно-понятно, нет никаких двусмысленностей с добавлением-удалением элементов такого листа по такой ссылке, и они возможны и разрешены.
А теперь представь что у тебя в руках хуй ссылка типа List<? extends T>. То есть ссылка на лист элементов T, либо лист наследников от элемента T (пусть для примера тип TT будет наследником T). А теперь подержи в руках хуй эту ссылку, пожамкай, и подумай:
- что произойдет, если по этой ссылке ты попытаешься добавить объект, скажем, типа T, но значением ссылки будет List<TT>? В лист по ссылке просочится объект, которому там быть не положено. Обсер - покоррапченный список.
- что произойдет, если по этой ссылке ты попытаешься добавить объект, скажем, типа TT, но значением ссылки окажется List<T>? Ну, в общем то, то же самое.
Причем учти - держа в руках хуй ссылку типа List<? extends T> ты заранее не знаешь, на List<T> она указывает или на List<TT>, и предположений на этот счет делать не имеешь права. По честному, через ссылку List<? extends T> добавлять в список ты ничего не имеешь права, потому что никто тебе не даст гарантии что там по ссылке сидит именно список List<T>, а не List<TT> или еще кто то. Такие пироги.
Про List<? super T> можешь провести такой же мысленный эксперимент сам.
Мимо
Ты смотри на это не с точки зрения самого списка - так ты никогда не поймешь. Размышляй системой типов, и ссылками - так проще. Есть ссылка, есть ее значение. У ссылки есть тип, и у значения есть тип (на самом деле не совсем, но на время забудь о нулях, generics type erasure и прочих нюансах джавовой системы типов). А джаве надо гарантировать что тип значения типу ссылки соответствует. Все - это все что нужно держать в уме чтобы понять дженерики.
Вот есть у тебя ссылка типа List<T>. Это означает что значение у этой ссылки тоже - строго List<T>. Все чотко-ясно-понятно - ты берешь эту ссылку и начинаешь с ней работать , зная что у тебя она гарантированно указывает на лист объектов типа T. Читая по такой ссылке из листа объекты, ты знаешь что они будут типа T. И так как все чотко-ясно-понятно, нет никаких двусмысленностей с добавлением-удалением элементов такого листа по такой ссылке, и они возможны и разрешены.
А теперь представь что у тебя в руках хуй ссылка типа List<? extends T>. То есть ссылка на лист элементов T, либо лист наследников от элемента T (пусть для примера тип TT будет наследником T). А теперь подержи в руках хуй эту ссылку, пожамкай, и подумай:
- что произойдет, если по этой ссылке ты попытаешься добавить объект, скажем, типа T, но значением ссылки будет List<TT>? В лист по ссылке просочится объект, которому там быть не положено. Обсер - покоррапченный список.
- что произойдет, если по этой ссылке ты попытаешься добавить объект, скажем, типа TT, но значением ссылки окажется List<T>? Ну, в общем то, то же самое.
Причем учти - держа в руках хуй ссылку типа List<? extends T> ты заранее не знаешь, на List<T> она указывает или на List<TT>, и предположений на этот счет делать не имеешь права. По честному, через ссылку List<? extends T> добавлять в список ты ничего не имеешь права, потому что никто тебе не даст гарантии что там по ссылке сидит именно список List<T>, а не List<TT> или еще кто то. Такие пироги.
Про List<? super T> можешь провести такой же мысленный эксперимент сам.
Мимо
Так мб ментора нанять просто? Намного дешевле ж выйдет.
>>62936
Вот этот анон кстати немного слукавил, ответив на твой вопрос "да". Формально он прав - в List<T> действительно могут быть наследники от T - в конце концов subtyping никто не отменял. Но прикол в том, что, держа в руках ссылку на List<T>, и, например, читая элементы списка по ссылке List<T>, ты также не имеешь права делать заранее предположения, что у тебя прочтется. Сигнатуры всех методов для чтения из такого списка будут возвращать тебе T, твердо и четко. А дальше уже сам разъебывайся, проверяя полученный объект на instanceof и прикащивая к чайлдовому типу, там уже полномочия дженериков - усе...
Забей хуй на это. Это ебала для разработчиков библиотек. 99% программистов просто пишут один тип без всяких супер и экстендс и в душе не ебет, что такое ковариантный и контрвариантный.
Так вышло, что есть очень крупная система классов.
Теперь сама суть вопроса: чтобы не появилось проблем с классами в одной иерархии будет ли логично сделать конструкторы, которые позволяли бы получать объект нужного класса из объектов суперкдассов или дочерних классов, или лучше использовать приведение типов и надеяться на то, что все пронесёт?
Хуйню несёшь, вкатун.
> что произойдет, если по этой ссылке ты попытаешься добавить объект, скажем, типа TT, но значением ссылки окажется List<T>? Ну, в общем то, то же самое.
Так это можно, главное, чтобы фактический тип объекта списка был таким же, как статический тип ссылки. У параметризованных типов нет наследования просто. ArrayList<Integer> как бы не подтип ArrayList<Number>. Хотя это все существует только для компилятора, после компиляции все стирается
Вот на картинке из книги все понятно
А, там анон уже про wildcard писал, я в глаза ебусь
База, а еще эти же 99% даже гордятся этим, мол ты че бля, самый умный. Вот бы найти тот самый 1% и общаться только с ними
Да.
Но так вышло, что те, кто делал проект до меня, реализовали огромную часть всего через набор статичных методов.
Проще говоря: виртуальные функции в проекте простые сеттеры, геттеры, штуки для сравнения содержимого.
Статичные методы делают основную работу. Они не изменяют содержимое объектов, однако их сигнатура была прописана только для основных классов в проекте. И теперь возникает мысль, стоит ли полагаться на приведение ссылочных типов или лучше реализовать конструктор для создания объектов основных классов из всех остальных, чтобы в случае чего не возникло неприятностей.
Я чет ничего не понял
>чтобы не появилось проблем с классами в одной иерархии
каких именно проблем?
>лучше использовать приведение типов и надеяться на то, что все пронесёт?
Ты можешь проверять через instanceof и не надеяться
Душнил которые в рабочее время доебываются до мелочей не по делу всегда найдешь.
А если тебе хочется просто пообсуждать теоретическую ебалу - то ты уже на месте.
>Обсер - покоррапченный список.
Вот я не могу понять - почему обсер и коррапченный список? Это же просто список ссылок, длина в памяти самого списка не изменится, каждая ссылка в списке гарантированно будет типа lower bound, конкретный тип можно проверить при чтении. В чем коррапт?
В <? extends T> можно передавать списки состоящие из наследников T, например тот же TT. И каждый get из списка будет кастить к TT, однако если ты туда запихнешь T, он никак не прикастится к TT. Это и есть типикал heap pollution. И никакая гарантия lower bound не спасет.
А всегда ли? Представь на минуту, что иерархия глубже.
Путь есть:
- базовый тип T,
- тип TT extend T,
- и тип TTT extends TT
У тебя на руках ссылка List<? extends T>. Ты добавляешь в нее TT. По факту, ссылка ссылается на List<TTT>.
Обсер? Обсер.
>ты твоё чсв слишком неуместно
Не замечал в себе чсвшности. А уж как ты его вычислил за пару постов так вовсе загадка.
>Это же просто список ссылок, длина в памяти самого списка не изменится, каждая ссылка в списке гарантированно будет типа lower bound, конкретный тип можно проверить при чтении. В чем коррапт?
Чтобы это осознать, надо смотреть на ситуевину глазами клиента.
Вот представью. Ты - клиентский код. Гришь:
var a = new List<TT>();
Получаешь уютный списочек, куда можешь докидывать элементы TT. И предположим что где то обьявлен метод:
void диджей_еблан(List<? extends T> arg) {
arg.add(new T());
}
И представим на минуту что джава этому еблангу дала скомпилироваться.
А теперь делаем так:
var a = new List<TT>();
a.add(new TT()); //Не обсер
Main.диджей_ебан(a); //Не обсер, коллекция под вайлдкард подходит
for(TT i : a) {
//похуй че в теле
}
И на цикле жрем говна в рантайме и ClassCastException, потому что один из элементов списка a не присваиваем типу TT переменной i.
>Это же просто список ссылок, длина в памяти самого списка не изменится, каждая ссылка в списке гарантированно будет типа lower bound, конкретный тип можно проверить при чтении. В чем коррапт?
Чтобы это осознать, надо смотреть на ситуевину глазами клиента.
Вот представью. Ты - клиентский код. Гришь:
var a = new List<TT>();
Получаешь уютный списочек, куда можешь докидывать элементы TT. И предположим что где то обьявлен метод:
void диджей_еблан(List<? extends T> arg) {
arg.add(new T());
}
И представим на минуту что джава этому еблангу дала скомпилироваться.
А теперь делаем так:
var a = new List<TT>();
a.add(new TT()); //Не обсер
Main.диджей_ебан(a); //Не обсер, коллекция под вайлдкард подходит
for(TT i : a) {
//похуй че в теле
}
И на цикле жрем говна в рантайме и ClassCastException, потому что один из элементов списка a не присваиваем типу TT переменной i.
Допустим.. Можешь тегнуть пост, где я чсвешил и тупоголовил? Хочу увидеть проделки этого мистера скретча.
Даже если щас не углубляться в тот факт что долгостартующие спринги на поверку оказываются тупо пиздежом либо чьей то некомпетентностьбю - какая разница? Докеру не похуй?
Отвечая на твой вопрос - докер спокойно используется на всех стадиях, начиная от написания кода (у нас к примеру докер используется для генерации JOOQовых классов по схеме данных, которая через докер развертывается во время билда из flyway миграций), продолжая тестированием (testcontainers - база) и заканчивая разверткой.
Эх, придется и дальше оставаться чсв мгхазью.
>Всякие Спринги же тяжелые, стартуют долго?
Если сравнивать с гоу, то да, очень долго. Обычно старт занимает в среднем минуту-полторы на среднем проекте, плюс пока там жэвиэм прогреется. Все это негативно сказывается на том же интеграционном и энд ту энд тестировании
а) не похер ли, если обычно делают rolling update, то есть практически всегда на время старта одного пода есть работающие другие
б) в основном инициализация пула коннектов к базе много занимает, это можно подтюнить
в) если это прямо сильно критично - есть Native image, но в подавляющем большинстве случаев это не настолько критично
Это правда, чистому спрингу нечего долго стартовать. Обычно старт замедляет все что связано с IO - инициализация пула коннектов к базе, накатывание изменений на базу, какие-нибудь рест запросы и т.д.
Плюс к тому можно делать то что раньше называлось "exploded jar", то есть просто папка с классами, тогда джвм не нужно тратить время на распаковку.
Так-то конечно реальных вычислений там и на 20 секунд нет.
У меня спринг бутовое приложение которое читает из одной кафки и пишет в другую,плюсом это хазелькаст нода которая требует времени для объедения в кластер,20-30 секунд это максимальные цифры которые я видел
Да это дебил-семен, легко палится по скуфиду, зумеры и т.д. Возможно шарпомуха
Все истории о том, что не могут добавить фичу по полгода или помидоры не могут найти баг -- это истории из джава-энтерпрайза. Разве не так?
>Если Спринг такой хороший, то почему никто из бигтеха его не использует, у кого есть реально большая нагрузка?
Немодно. Хорошо еще что мода на ДЖС/ТС потихоньку сошла, а то бы сейчас уплетали за обе щеки микросервисы на джс, удавляясь, почему серверов не хватает.
Банки и телеком,что ещё?
Последние лет 5 активно съезжают на гоулэнг, т.к. тупо писать быстрее, не нужны мощные сервера и нет приколов спрэнг фримверка с хубирнейтом, когда у тебя незнамо откуда лезет стэктрейс на 100500 строк и сервис падает, либо хубирнейт генерит запрос с N+1 и у тебя база раком встает
>Последние лет 5 активно съезжают на гоулэнг, т.к. тупо писать быстрее, не нужны мощные сервера и нет приколов спрэнг фримверка с хубирнейтом, когда у тебя незнамо откуда лезет стэктрейс на 100500 строк и сервис падает, либо хубирнейт генерит запрос с N+1 и у тебя база раком встает
Для этого не нужен отдельный язык, достаточно писать как инвалид на джаве 5й в процедурном стиле, что доступно уже 20 лет.
Я и говорю - клиповое мышление, переписываем каждый раз на current thing.
Да это ебланидзе местный, пытается троллировать и срет в каждом треде. подозреваю, что это безработная манька-шарпомкх
Ловите джуна, которого кинули на боевой проект в одну калитку.
Тебе нужно понимание, как работает инверсия зависимостей. Что такое бин и как работает IOC в спринге.
По сути тебе ручками бины нужно создавать в исключительных случаях, например:
- Зависимости в юнит- тесте через тестовый конфиг класс
- Создание объектов, которые необходимо сконфигурить определенным образом и тп
-
>При этом никак отдебажить ты его не сможешь, т.к. инструмнетов нет
Шарпей рот раскрыл - шарпей пиздит.
А java 22 не хочешь, фантазёр?
Полюбуйтесь на этого дегенерата повторяющего за говорящими головами из ютуба без малейшей личной обработки.
Это мое личное мнение. Bottom type по определению не должен быть получаем. Вот это истинный null https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html , а не то, что есть сейчас.
На твой?
Да и
>без малейшей личной обработки
>мое личное мнение
Бахнул без причины, настроение плохое что ли сегодня
Всё это мишура. Суть в том, что ты приволок хуйню без аргументов, попутно демонстрируя свою тупость.
Не у тебя точно тяжелый день был, что ты просто аргументы пропустил. Повторю еще раз более подробно.
Bottom type - это подтип всех типов. На данный момент под него подходит в основном null. Однако, для того, чтобы система типов была корректной, нижний тип не должен иметь экземпляра. Это прямая противоположность высшему типу(Object) экземплярами которого является вообще все типы.
Это нужно в основном только для одного, поскольку очевидно, что система типов есть формой логики, то вспоминаем пик1 формулу. Суть в том, что из абсурда можно получить все что угодно. Как ты думаешь, если такой тип будет существовать, то разве нельзя будет наебать систему типов подстроив правила так, чтобы из абсурда вывести любой другой тип? Обычно нет, но система типов жабы достаточно мощна для такого https://dl.acm.org/doi/10.1145/2983990.2984004
Это основная причина, почему это ошибка.
> нижний тип не должен иметь экземпляра. Яскооооозаааал!
Тебе стоит узнать, что является аргументами.
>такая реализация ломает систему типов, вот статья
>рррря где аргументы
Ясно, можешь больше не отвечать.
>>66243
Тебе не поможет профуйлер, если у тебя проблемы с медленным стартом приложения. Прфлейр нужен только когда у тебя есть реальный трафик и ты можешь собирать данные хотя бы полчаса-час. Так работают профулеры в джэве. В спринге кста нет никаких инструментов отладки медленного старта. Приложение поднимается несколько минут? А хуй знает почему))) Иди смотри все паст каустакрыт и что ты там ефтчишь)))
Удивляюсь как имбецилы берут уже реализованные идеи в других языках и делают откровенное говно. Ну посмотри как это сделано в котле, сишарпе или других нормальных языках. Ну нахуя ты выдумываешь свой особенный говносинтаксис и ломаешь устаявшуюся семантику? Вот поэтому бигтех и пишет на гоулэнге, а джавистов увольняет целыми отделами, а их помойные копролиты на спрэнг фримверке и хубирнейте тупо удадляет из репы и сворачивает поды в кубере
Ебло тупое не знает что просто так удалить нулл -- переделать пол языка и рантайм
Мимо language designer
Щас бы в жаба треде статьи кидать лол. По поводу soundness -- это решается проверками в рантайме с выбрасыванием ClassCastException и других. Если ты такой умный и хочешь за дизайнить статическую sound систему типов, то тебе точно не в промышленные языки, а в агду или lean.
Зачем ты нахрюкнул про null как зло в таком случае непонятно
Мимо >>66535
В джаве объективно уже давно ничего не надо делать, все эти потуги просто чтобы показать, мол мы тут что-то делаем
> Вот поэтому бигтех и пишет на гоулэнге
Блядь, сколько такого уже было, бигтех и пишет на хайп-язык-нейм
Сегодня популярна одна жвачка, завтра другая
Почему-то бигтехи решили, что лучше спрыгнуть на гоулэнг и не насиловать разрабов, которые должны заучить все приколдесы JMM как стихотворение и помнить 100500 припизднутых хуиток из спрэнга и хубирнейта, чтобы собрать ололо круд
>>как это сделано в котле, сишарпе
всякие скуфы типа гойца заворачивают такое, для них это недостаточно качественно и безопасно
>>Почему-то бигтехи решили, что лучше спрыгнуть на гоулэнг
Студента можно посадить на любой парашный стек, а потом он уже не уйдет, потому что работы нигде больше нет, а переучиваться ему будет лень.
Капчуешь из 2010? Какая нахуй разница, сколько он будет подниматься? Пускай выделят норм железо. Под приклада поднимается за минуту в среднем.
А если речь про локальный дебаг, то норм конторы обеспечили железом на аппле силикон/i7-i9 32 гб. И не тормозит ничего. Компилится быстро уася.
В 2010 году как раз было всем похуй сколько поднимается. А сейчас принято чем быстрее, тем лучше.
>спрыгнуть
С бетонными плитами на ногах из сотен тысяч строк джава кода они максимум на котлин медленно ползти могут
Я лично участвовал в увольнение отдела джава скуфидонов в банке. Мы с пацанами то говно быстро переписали на гоулэнг и навсегда наказали скуфиду
> Мы с пацанами то говно быстро переписали на гоулэнг и навсегда наказали скуфиду
А потом продленка закончилась и мамки повели вас домой делать уроки
Ты что вообще хочешь? Чтобы мы тут все оторвали жопу от стула и потопала голанг учить? Ну перейдут компании на голанг - пойдем учить, а может и не перейдут - дальше на жопе будем сидеть. Рядовой разраб на это мало влияет. В моменте сейчас у жавы как минимум больше вакансий, чем у го
>В спринге кста нет никаких инструментов отладки медленного
старта.
Все верно, потому что спринг - это просто еще одна джава программа, а инструменты в экосистеме. Так же как ты можешь понять почему долго работает любая джава программа - так же ты можешь и понять почему долго грузится спринг.
>Прфлейр нужен только когда у тебя есть реальный трафик и ты можешь собирать данные хотя бы полчаса-час.
Чел, частота самплинга настраивается. там не обязателен ни реальный траффик ни час работы.
Плюс, если уж тебе это действительно надо - есть JFR, записывай и смотри реальную нагрузку сколько угодно.
Кстати сам-то давно вкатился? Я ощущую у тебя примерно 5-6 месяцев реального опыта на джаве.
>частота самплинга настраивается
чел... это спрэнг фримервк, чел... что ты там собрался смотреть в профулере? как у тебя класспасс скрэнг сканирует? ну сканирует твои 100500 классов и че? ты на это повлияеть не можешь челл. это спрэнг и этим се сказкано. жди свои две минуты а потом лови эксепшен от сэрнга что контекст не окнтектс и бина не хнайте
Статья, где говорится, как существование экземпляра null разрушает систему типов, делая unsafe coerce, абсолютно никак не относится к теме про то, что null - это ошибка. Интересно.
Я вообще начинаю думать, что проблема в том, что я просто не способен понятно для людей доносить мысли. И злобные жаваны пользуются этим, издеваясь надо мной.
С тем, что от нулла есть некоторые проблемы никто и не спорил. Фактически же нулл отвечает за очень малый процент багов, а эфемерная неполноценность типовой системы по мнению неких Росс Тейт и Нады Амин стоящая за этими багами никого не ебёт. Есть задачи и поважнее.
> Я вообще начинаю думать, что проблема в том, что я просто не способен понятно для людей доносить мысли. И злобные жаваны пользуются этим, издеваясь надо мной.
Да нет, все всё прекрасно поняли. А вот ты как раз не понял за что тебя опускают в параше. Проблема не в изъяснении, а в понимании.
>Фактически же нулл отвечает за очень малый процент багов
Хорошо наверное из головы статистику выдумывать, ведь есть задачи поважнее, чем искать стастику, да?
Да и если это реально так, то нахуя сделали жеп решаюший симптомы существования null? Задач поважнее не нашлось?
>А вот ты как раз не понял за что тебя опускают в параше.
Чтобы испортить мне настроение.
> Да и если это реально так, то нахуя сделали жеп решаюший симптомы существования null? Задач поважнее не нашлось?
Потому что, наконец-то, дошли руки до этого 1% багов, очевидно.
> Чтобы испортить мне настроение.
"Чтобы" и "потому что" это ответы на разные вопросы. Портят тебе настроение потому что ты тупоголовый даун постоянно набрасывающий говна на вентилятор.
>Примерно с начала 2023 вкат в айти закрыт
Вкатился джуном в джэву без накрутки опыта весной 2023, отдыхай.
>наконец-то, дошли руки до этого
Ну значит им не похуй, следовательно твой тезис "никого не ебет" уже хуйня. Причем ведь и до этого были жепы завязанные на null https://openjdk.org/jeps/358 . Ты просто пиздишь и дышишь, что ну это хуйня, да и вообще у нас дела поважнее, хуяк хуяк и в продакшн.
>1% багов
Не люблю статистику из башки.
>постоянно набрасывающий говна
Ни разу такого не было. Я в освном говорю очевидные вещи, а вы почему-то рветесь на это, говоря да, анон ты прав, но сука какой же ты долбоеб все таки.
> Ну значит им не похуй, следовательно твой тезис "никого не ебет" уже хуйня.
Градации, слышал такое слово?
> Не люблю статистику из башки.
Да похуй что ты любишь.
> говоря да, анон ты прав
Галоперидольчик пробовал?
>Градации, слышал такое слово?
Ну а какие баги с более высоким процентом они решили в жепах?
>Да похуй что ты любишь.
Bastard...
>Галоперидольчик пробовал?
Да не шиз я блять, хватит.
Сам написал:
>от нулла есть некоторые проблемы никто и не спорил
Если от чего-то есть проблема, то это ошибка. И вот так каждый раз, я просто не понимаю нахуя вы со мной-то спорите и обзываете меня, если вам мои тезисы понятны. Что ты хочешь доказать? Что ты умнее меня?
>>66730
Так понятно, что они блять симпомы просто лечат. Убрать из джавы null просто невозможно без тотального нарушения обратной совместимости.
> Ну а какие баги с более высоким процентом они решили в жепах?
while (не надоело) {
look(--jepIndex)
}
> Bastard...
Очень аргументированно, додик.
> Если от чего-то есть проблема, то это ошибка. ЯСКККККОООООЗАААААЛ!!!!!
> И вот так каждый раз, я просто не понимаю нахуя вы со мной-то спорите и обзываете меня, если вам мои тезисы понятны.
Твой тезис был далеко не в том, что от нулла есть какие-то проблемы, опущ.
> Что ты хочешь доказать? Что ты умнее меня?
Больше на тебя похоже, мань.
> Так понятно, что они блять симпомы просто лечат.
То, что это симптом, а не проблема, ты должен доказать.
> Убрать из джавы null просто невозможно без тотального нарушения обратной совместимости.
Ну и нахуй ты высираешься?
Почему я должен искать за тебя подтверждение твоих же слов...
>Очень аргументированно, додик.
А как мне аргументировать то, что ты не хочешь перестать фантазировать? В ответку нафантазировать?
>Твой тезис был далеко не в том, что от нулла есть какие-то проблемы, опущ.
Я написал следствие, а ты причину.
>Больше на тебя похоже, мань
Даже если и так, я не делал это специально.
>То, что это симптом, а не проблема, ты должен доказать.
Ну смотри, исключение возникает после того, как кто-то обратится к null. Следовательно это следствие того, что кто-то запихнул null туды, куда не следует - исключение есть симптом проблемы. Дальше, причина почему это вообще возможно, в том, что null - это подтип всех типов и существование его экземпляра повзоволяет его пихать туда, куда не следует, следовательно опять же все сверху симптом того, что null существует.
>Ну и нахуй ты высираешься?
Да я просто мнение высказал блин. Что зря добавили, раз столько проблем в итоге приходится решать.
> Почему я должен искать за тебя подтверждение твоих же слов...
> >Очень аргументированно, додик.
> А как мне аргументировать то, что ты не хочешь перестать фантазировать? В ответку нафантазировать?
> >Твой тезис был далеко не в том, что от нулла есть какие-то проблемы, опущ.
> Я написал следствие, а ты причину.
> >Больше на тебя похоже, мань
> Даже если и так, я не делал это специально.
> >Ну и нахуй ты высираешься?
> Да я просто мнение высказал блин. Что зря добавили, раз столько проблем в итоге приходится решать.
Ты хоть сам-то понял, что высрал?
> Ну смотри, исключение возникает после того, как кто-то обратится к null. Следовательно это следствие того, что кто-то запихнул null туды, куда не следует - исключение есть симптом проблемы. Дальше, причина почему это вообще возможно, в том, что null - это подтип всех типов и существование его экземпляра повзоволяет его пихать туда, куда не следует, следовательно опять же все сверху симптом того, что null существует.
То есть перелом ноги это симптом возможности ходить человеком, ведь во время хождения можно поскользнуться и сломать ногу?
>То есть перелом ноги это симптом возможности ходить человеком, ведь во время хождения можно поскользнуться и сломать ногу?
Скорее симптом того, что мало кальция и витаминчиков ест, а возможно еще старый или гены плохие. А ну и аналогия это конечно прекрасно, но мы про null говорили.
>Ты хоть сам-то понял, что высрал?
Вроде да. Почему ты меня так ненавидишь?
> А ну и аналогия это конечно прекрасно, но мы про null говорили.
Это был намёк на то, что существование нулла хоть и имеет некоторые негативные последствия, имеет основания. Но для его осознания, видимо, нужно иметь >70 iq.
>имеет основания
Там основание только как дефолт значение. Массивчик заполнить, проблему курица и яйца решить. И вот ради таких, действительно стоящих вещей, надо бы перфоманс эдак на 20% заполнить очень полезными вычислениеми is null. Есть способы эти основания решить иным путем, не таким кривым.
Но решили как решили, надеюсь они хотя бы лучше чем котлин сделают nullable и not nullable типы.
> >70 iq.
Мне сверху писали, что у меня 85))
Ну и нахуй ты высираешься тогда, если сам понимаешь, что необходимость в нулле есть? А раз она есть, то просто его выкинуть нельзя, нужно именно делать так, как делают в джаве.
> И вот ради таких, действительно стоящих вещей, надо бы перфоманс эдак на 20% заполнить очень полезными вычислениеми is null.
Skill issue. При вычислении на этапе компиляции ничего не будет заполняться.
>нужно именно делать так, как делают в джаве.
Одно из другого не следует. Ты наверное как пограмист понимаешь же, что вот есть задача, а способов ее решить много. Разные издержки тут и там. Null это только одно из множества решений, есть другие, там издержка в требовании ссылочной прозрачности.
>При вычислении на этапе компиляции ничего не будет заполняться.
Я тоже очень надеюсь, что оракл смогут все это компилятору делегировать. Но судя по пику, все равно будут некоторые вставки тут и там.
> Одно из другого не следует. Ты наверное как пограмист понимаешь же, что вот есть задача, а способов ее решить много. Разные издержки тут и там. Null это только одно из множества решений, есть другие, там издержка в требовании ссылочной прозрачности.
Ну и конечно же эти решения не приведёшь.
> Я тоже очень надеюсь, что оракл смогут все это компилятору делегировать. Но судя по пику, все равно будут некоторые вставки тут и там.
Очевидно, без вставок это невозможно. Если у тебя от пользователя может прийти нулл ты должен проверить, что он тебе послал и послать нахуй в случае если этот пользователь еблан.
Суть в том, чтобы вставки были однократные, а не везде подряд, и как можно раньше.
Не надейся
Я уже вкатываюсь
Кстати, на первом курсе вуза единственные ребята, которые вообще пишут на чем-то, пишут на джаве
Я был удивлен, думал, кроме меня не будет таких
Ты специально это, да? Сначала просишь показать как без null это решают, а потом за это же критикуешь. Какое зло я тебе сделал...
На жаве, используя ленивость как-то так можно сделать. Хотя я думаю, возможно как-то исковеркая control flow через исключения, можно и без саплаеров обойтись. Но эт неточно.
>>66931
Удачи
>миллион строк говнокода нечитаемого напишу, зато без нуллов!
Блядь, какой же ты дегенерат. Пойди убейся, не порть статистику.
Каждый раз этот даун приходит в тред со своими шизофреническими высерами, каждый раз его макают в говно, но ему, похоже, это нравится, потому что он приходит снова и снова за порцией говна. Мазохист.
Я че блять виноват, что джава бойлерплейтный язык? У вас всю дорогу так было, есть и будет.
>вместо того, чтобы воспользоваться коротким способом, напишу кучу говна, и обзову джаву бойлерплейтным языком!
Блядь, ты же правда инвалид умственный.
Каким коротким способом? Ты используя null ровно на ноль строчек короче напишешь.
Лобок я не хочу использовать из принципа. Это просто говно, которое лезет туда, куда лезть не следует.
> Каким коротким способом? Ты используя null ровно на ноль строчек короче напишешь.
Задача какая?
> Лобок я не хочу использовать из принципа. Это просто говно, которое лезет туда, куда лезть не следует.
Проиграл с того, как дегенерат открыл ебальник, когда его не просили, чтобы ещё больше доказать, какой он дегенерат.
Создать класс Parent, содержащий экземпляр класса Children, которой в свою очередь содержит экземпляр Parent.
Ну и в качестве дополнения обоим сделать рабочий toString, чтобы они что-то осмысленное в консоль печатали.
Да-да. Лобок от этого лучше не станет, кста.
Ну ок, по строчкам может и то же самое будет, только вширь код будет короче. И быстрее, лол. Твою позицию это не сильно улучшает, а опозориться с "бойлерплейтным языком" ты уже успел.
Там вширь тоже нечего экономить. Пять символов что ли.
> а опозориться с "бойлерплейтным языком" ты уже успел.
Слушай, если для одной и той же задачи один язык требует 5 строчек, а другой 36 может ну.. Он бойлерплейтный?
Тем более это ты сказал, что чет строчек многовато. Мне-то похуй сколько их.
> 5 нещитово! Вот было бы 25 было бы щитово! А ещё я проигнорирую неудобное про скорость!
Пиздец...
> Слушай, если для одной и той же задачи один язык требует 5 строчек, а другой 36 может ну.. Он бойлерплейтный?
И сейчас ты принёс пример вместо своего гнилого пиздежа.
> Что JVM стоит заинлайнить все гетеры? Разницы в этом случае не будет. У вас там реально экономят на виртуальных вызовах?
Додик, если бы ты использовал сапплаер как простой геттер, ты бы этим от нулла не избавился. А в твоём говнокоде на каждый вызов создаётся новый объект. Блядь, какой же ты тупой.
Я даже блядь не говорю, что ты просто заменил нулл на бесконечный цикл. Это вообще пиздец какой-то. Пожалуй зарепорчу тролля. Нельзя быть таким тупым.
> 5 ( >>66759 )
> 36 ( >>66941 )
И что бойлерплейт который ты сам добровольно высрал доказывает?
Ну кстати да, надо добавить еще одну строчечку, где создание выносится.
>Я даже блядь не говорю, что ты просто заменил нулл на бесконечный цикл.
Ты понимаешь же, что это разные вещи? Именно это и есть, то чем изначально был botttom, расходимостью. Это тип, который ты просто не можешь достичь или создать. Бесконечный цикл или исключения идеально под это подходит, с чем согласен компилятор.
>Пожалуй зарепорчу тролля
Себя зарепорть. Я ни разу никого тут не оскорбил, причем общаюсь именно на тему джавы, то что тебе кажется это глупым, твои проблемы.
>И что бойлерплейт который ты сам добровольно высрал доказывает?
Ты сам сказал, что короче не напишешь. В чем проблема? Иначе напиши, продемонстрируй навыки.
> Ты сам сказал, что короче не напишешь. В чем проблема? Иначе напиши, продемонстрируй навыки.
То есть на вопрос не ответишь? Ок, слив засчитан.
> Себя зарепорть. Я ни разу никого тут не оскорбил, причем общаюсь именно на тему джавы, то что тебе кажется это глупым, твои проблемы.
Оскорбления на сосаче как раз разрешены, и слава богу, легче макать унтерменшей типо тебя в говно. А щитпост в тематике нет.
> Ты понимаешь же, что это разные вещи? Именно это и есть, то чем изначально был botttom, расходимостью. Это тип, который ты просто не можешь достичь или создать. Бесконечный цикл или исключения идеально под это подходит, с чем согласен компилятор.
Изначально видимо исключение написать тебе не хватило твоего скудного интеллекта. Ок.
> Ну кстати да, надо добавить еще одну строчечку, где создание выносится.
И как эта строчка хоть что-то из претензий отменяет? Она только увеличивает количество бойлерплейта, лол.
Не ворочайся, слитое.
Ну меня банили и за них.
>Изначально видимо исключение написать
Так просто короче, мы же тут все экономим на месте.
>И как эта строчка хоть что-то из претензий отменяет?
Создания экземпляров не будет при обращении. На виртуальные вызовы мне, да и всем поебать. Если бы это было бы не так, такой хуйни как спринг просто не существовало бы.
>Она только увеличивает количество бойлерплейта, лол.
Напиши короче.
> Так просто короче, мы же тут все экономим на месте.
А то, что это хуй отдебажишь, похуй. Пиздееееец.
> На виртуальные вызовы мне поебать.
Ок, приходи когда будет что-то поаргументированнее "мне поебать на производительность".
> Напиши короче.
Нулл использовать.
Пхпхп, ладно такая ошибка идеально подошла бы. Но вообще такое возможно отдебажить через профайлер, правда нужно ли это.
>что-то поаргументированнее
Мне за нее не платят. Вот начнут...
Не ворочайся, слитое.
Спасибо
Где ты тут срач увидел? Пока что только умалишённое говно забегает посрать в тред при попустительстве мочи.
в прошлом го треде знатно было и в этом немного видел
А пару лет назад я был единственным, кто писал на джаве в группе. Были питонисты, фронтендеры, еще чел писал игры на c#/c++
Сейчас брат поступил на первый курс и у него тоже одни питонисты, ну и все надрачивают на го.
>Я вообще начинаю думать, что проблема в том, что я просто не способен понятно для людей доносить мысли.
У меня тоже были такие мысли на работе. Потом я понял, что людям просто поебать, они все делают на отъебись.
У меня сейчас голова взорвется: как работает coerce()? Это статический типизованный по классам A и B метод. Он принимает на вход объект класса А и возвращает скастованный в класс B. Откуда он блин берет информацию о классе B, в который ему нужно кастануть?
>Откуда он блин берет информацию о классе B
Ниоткуда. Поэтому там желтым подчеркнуто и даже ворнинг кидает компилятор, что возможно друг ты какую-то хуйню творишь.
Фактический же кастинг происходит не во время вызова метода, а в момент, когда ты запрашиваешь объект этого типа. Конкретно там, это 8 строка. Это основная причина, почему кастить дженерики вообще говоря плохая идея.
Я вот не пойму - неужели в 2024м году на полном серьезе существуют люди, которые впрягаются за billion dollar mistake? Что вами движет?
> Откуда он блин берет информацию о классе B, в который ему нужно кастануть?
Эта штука называется type inference в джейве, компилятор видит, чтобы ты возвращаемое значение метода передаёшь параметром в другой метод. Компилятор предполагает что ты не дурак и это ДОЛЖНО работать, а значит тип возвращаемого значения такой же как у параметра, в который ты его передаёшь. Вот так он и получает информацию о типе.
Школоту просто на ЕГЭ надрачивают на питоне, поэтому там все питонисты. Это тоже самое, что "ни на чем не пишет", можно ставить знак равно
Не мое. Я не говорил про ненужность - просто мимопроходил и удивился что находятся какие то чмохи, так яростно оверреактящие на анонов, критикующих нулли.
Слив засчитан, лох.