Это копия, сохраненная 7 апреля в 01:42.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вики по вкатыванию в джаву: https://github.com/java2ch/java-thread/wiki
Предыдущий: >>2970953 (OP)
Надо тред в медач перенести
Претензии к тому кто картинку выбирал. Не мог что ли аи генератором воспользоваться?
Не из-за выбирающего картинку бекграунд у прозрачной пикчи на сосаче чёрный, а не соответствующий цвету поста.
или
новая компания джава 17, сотни рпс, свистелки-перделки, кликхаузы, сыкулее и ноу сыкулее, но за 250к/мес без премии
я просто мидоль и на синьора меня не зовут, да я и не знаю особо ничего, 4 год уже сижу в легостане этом. Деньги или крутой опыт? Конвертнется ли крутой опыт в еще большие деньги в РФ?А?
Пишем Ваши мнения, это важно, потому что январь это месяц нереста сберунов, после годовой премии в декабре.
Очень важный пост >>2994977 этого ИТТ треда. Глубокие философские рассуждения, страхи, надежды, реальность. Не проходите мимо.
вырасти на нем
Остаться конечно. 17 джава это тоже легаси, плюс и на новом стеке пиздец может быть и даже часто бывает. Обмен не стоит того.
Остаться работать в Сбербанке параллельно ища работу где бы платили бы столько же. Зачем добровольно себя даунгрейдить?
В плане перспектив в РФ не знаю. Такое чувство, что банки и безопасность это и есть все перспективы. Халявные заграничные деньги кончились.
>Остаться работать в Сбербанке параллельно ища работу где бы платили бы столько же
Если так подумать, то это очень разумно. Но я боюсь я потом никуда не устроюсь, потому что у меня опыт только с монолитом и задачи которые я решаю однотипные и скорее для кодерка, чем программиста. Что на это скажешь? Или типа циферки в стаже везде меня пристроят, сейчас 4 года опыта, станет 5, 6 я то понимаю, что это только циферки и все равно дадудт 300к+ и в коммерции? Пездец сложно, почему просто нельзя во всех компаниях использовать нормальный стек
Не знаю, я уже давно забил на изучение нового стека. Я читаю книжки написанные пердунами в нулевых и это всё моё повышение квалификации.
Я бы выбрал стабильность и там где меньше работать.
Опасно, в один момент все перейдут на го и вместо переписывания монолитов сразу начнуть писать микросервисы на гохе, для этого дела естественно позовут тех кто держал нос по ветру, кто не успел еще все на котлин переписать и уже переписывает на го, а мне и тебе скажут сиди пока на поддержке, а потом укажут на выход
>>2995315
На последнем курсе вуза
Да пофиг если честно. Ну, уволят и уволят. Деньги счастья не принесли, чего за них сильно держаться. 100 к, 300 к, 500 к - однохуйственно. Лишь стены квартир меняются на посвежее, да всякую фигню не заморачиваясь покупаешь. При этом просто взять и уйти денег не хватает и никогда не хватит. Ловушка Джокера. Хочется просто, чтобы мозги поменьше трахали и работы поменьше подкидывали.
>>2993851 →
Ну так, спиай, хуйпиай мастер что нибудь ответит? Как нам обустроить Россию JDBC?
А то сейчас, когда подключаешь к последней JDK старый драйвер и пытаешься использовать новое API получаешь NoSuchMethodError. Всё из-за дурацких интерфейсов! А вот был бы полноценный API&SPI вот бы житуха была!
Ответит, но не сегодня и не завтра, надо таски закрыть. Твой вопрос помню, мне самому выгодно понять не хуйню ли я делаю, так что будет свободное время разобраться отвечу
Я думаю, что скоро все поумнеют, и перестанут делать микросервисы вообще. Ну, кроме тех 1.5% случаев, где они действительно нужны.
Алсо, чего именно тебе лично не хватает в 8-й джаве, из того, что есть в 17-й?
17 джава приближает меня к грин потокам в 21, и спринг буту 3. А еще там более понятный стектрейс, наллпоинтер пишется не в какой строке, а в какой переменной. Да и вообще, в 11 есть вары и куча всего
Спринг вообще не нужен, ни бут, ни ебут. Это дичайший bloat.
Когда я вижу, во что превратилась современная джава, то вижу только 2 пути - или продолжать сидеть на 8-й, или перекатиться в Go.
Ох уж эти мамкины достигаторы, которые говорят, что основывают все свои действия на выгоде, но при более близком рассмотрении классические пидорюндели с принципами. Правда извращёнными уж слишком.
> к грин потокам в 21
У меня есть подозрение, что лум как реализация провалился. Переключение контекста всё ещё дорогое, кал беки быстрее. Более правильным подходом была бы глубокая автогенерация методов с калбеками по любому байткоду, бьющихся по тем местам, где сейчас стоят лумовские блокеры + дать возможность самому ставить синтаксические блокеры и читать их для кастомной реализации разбивалки методов. Не так, как сделано в петухлине, с оверхедом в 10 раз, а по джавовски. И не как в шарпоговне, а чтобы все синхронные библиотеки разом стали асинхронными.
>>Это недоязык на котором невозможно приличную систему писать
А я тебе что написал?
Для хуйни энтерпрайз уровня - жаба/шарп на фреймворках.
Для примитивных вещей - го и питухон.
Если б на го хотели писать что то сложное - то там появился бы свой спринг.
подскажите имеются ли какие-то бест практисы для следующего кейса:
имеется микросервис, который принимает жсонину, и на основании данных в этой жсонине отправляет запрос на другой микросервис, по сути гейтвей такой. каким лучше образом определять, что за жсон прилетел, через некий json path/spring expression language? очевидно, хочется, чтобы не уходило дохуя времени на определение типа жсона, всякие regexpы наверное будут сжирать много проца, да и если огромный пейлоад, то будет только хуже
ну типа того, да. допустим, жсон на регистрацию пользователя нужно отправить на юзер-сервис, а жсон на получение хуй его знает его кредитной истории на какой-нибудь пейментс-сервис. очевидно, что эти два жсона абсолютно разные
Вообще задача интересная,сейчас глянул,у нас используется зуул для таких целей. Абсолютно не знаю как он работает,но в гейтвее даже контроллера нет,там пишешь класс фильтров и прописываешь роуты в ямлике
ну он по сути облегчает саму настройку роутов, куда конкретно пробрасывать, сам же механизм определения как и куда в любом случае придется писать самому, о чем, собственно, и был вопрос - юзать какие-то json path или есть что-то более производительнее/удобнее
JSONPath.
>Если б на го хотели писать что то сложное - то там появился бы свой спринг.
Это не говей. На Го просто пишут много кода, а если проект сложный то очень много.
>Покажите им сервлеты и вебсокеты,они сразу полюбят джаву
Сервлеты это ± уровень фреймворков го.
>имеется микросервис, который принимает жсонину, и на основании данных в этой жсонине отправляет запрос на другой микросервис
А схуяли все шлют запросы на один и тот же урл? По нормальному надо разные урлы для разных запросов.
Потому что HTTP это транспортный протокол, и роутинг должен делать веб-сервер. Так как веб-сервер не умеет в динамический роутинг, то все такие запросы должны должны приходить на один и тот же url.
А ещё надо всегда 200 возвращать.
тут, кстати, я проебался и не написал дополнительных условий. сообщения могут приходить откуда угодно (kafka/mq/rest) и уходить куда угодно
При чём здесь транспортный протокол?
Я думаю, там дело в том, что клиенты просто не знают (не могут или не должны знать), куда это должно пойти. Именно для этого и нужен тот сервис, который знает, и, после анализа контента, маршрутизирует это туда или сюда.
Но ведь нужно всегда возвращать 200, а Service Unavailable вернуть в String errors.
200 коллеги?
>потому что такие требования
Чел, не может быть бизнес требований всё слать на один и тот же урл. Это какой то не очень умный техлид придумал. И это говно надо менять.
роутинг это транспорт, значит возвращаешь http коды.
Если мессага дошла куда надо и была успешно обработана (даже если сработала бизнес-валидация) - возвращаешь 200
>>Это не говей. На Го просто пишут много кода
Они поэтому туда пыхеров берут, чтоб те не были испорчены фремворками, архитектурой и прочими бест практисами?
Нет, просто Дюк.
А ещё из-за реализации лума теперь все синхронайзеды обратно задепрекейчены, да.
Здесь половины треда в 1990 ещё даже в мыслях не было.
Как правильно обновлять сущности?
Сейчас обновляю путом со всеми полями. Ну или дтошкой с почти всеми полями. Ну то есть фронт читает гетом все поля, что ему доступны, меняет те, что поменял пользователь, а какие не поменял - передает без изменения. И я обычно все без каких-то проверок, кроме валидаций апдейчу в бд. Ну или иногда там что-то есть в дто, но обновлять это в некоторых случаях нельзя. Ну и тогда или игнорирую поле или эксепшон выкидываю.
Но мне кажется это тупо, особенно если в дто 30-50 полей, а измениться может только одно или два. Гонять туда-сюда лишние сотни килобайт не ясно зачем. Особенно если некоторые поля могут быть побольше. Не огромные, но пару тысяч знаков. Но патчем это надо по одному полю передавать? 50 эндпоинтов это тупо.
На первой ссылке в гугле нашел вот такую статью на баелдунге:
https://www.baeldung.com/spring-rest-json-patch
У этого подхода есть даже стандарт:
https://datatracker.ietf.org/doc/html/rfc6901
И свой Content-Type: application/json-patch+json
Выглядит неплохо:
- Получаем список операций. Меня интересует replace. Ну и remove, чтобы занулять поля, потому что вроде бы в replace null запрещены. Список операций лежит в JsonPatch
- Достаем сущность по ид и иерез apply делаем мердж нужных полей с нужными операциями.
- Полностью сохраняем сущность в бд.
Но вот вопросы:
1. Реально ли таким подходом пользуются? На гитхабе у библиотеки https://github.com/java-json-tools/json-patch всего 700 звездочек и <groupId>com.github.java-json-tools</groupId> какой-то васянский.
2. Норм все будет с валидациями? У меня на 50 полей 40 валидаций раскидано, чисто с содержимым связаны, не просто ненулевое. Ну вот допустим они будут применяться во время apply. И так же все схватится адвайсами и выкинется правильная ошибка. Но валидации они не на сущности, а на дтошки, потому что в разных эндпоинтах валидации могут быть разные. Это получается нужно мапииь сущность в дтошку и уже ее мерджить и потом обратьно мапить?
3. В бд все сохраняется все равно скопом. И нужно делать предзапрос с селектом по ид. Чтобы сделать upate запрос с произвольным количеством полей через jdbc эта библиотека не подойдет, придется самому что-то похожее на список ReplaceOperation городить. Самому валидировать есть ли все пришедшие поля, самому доставать валидации на поля, а потом уже строить запрос.
Как правильно обновлять сущности?
Сейчас обновляю путом со всеми полями. Ну или дтошкой с почти всеми полями. Ну то есть фронт читает гетом все поля, что ему доступны, меняет те, что поменял пользователь, а какие не поменял - передает без изменения. И я обычно все без каких-то проверок, кроме валидаций апдейчу в бд. Ну или иногда там что-то есть в дто, но обновлять это в некоторых случаях нельзя. Ну и тогда или игнорирую поле или эксепшон выкидываю.
Но мне кажется это тупо, особенно если в дто 30-50 полей, а измениться может только одно или два. Гонять туда-сюда лишние сотни килобайт не ясно зачем. Особенно если некоторые поля могут быть побольше. Не огромные, но пару тысяч знаков. Но патчем это надо по одному полю передавать? 50 эндпоинтов это тупо.
На первой ссылке в гугле нашел вот такую статью на баелдунге:
https://www.baeldung.com/spring-rest-json-patch
У этого подхода есть даже стандарт:
https://datatracker.ietf.org/doc/html/rfc6901
И свой Content-Type: application/json-patch+json
Выглядит неплохо:
- Получаем список операций. Меня интересует replace. Ну и remove, чтобы занулять поля, потому что вроде бы в replace null запрещены. Список операций лежит в JsonPatch
- Достаем сущность по ид и иерез apply делаем мердж нужных полей с нужными операциями.
- Полностью сохраняем сущность в бд.
Но вот вопросы:
1. Реально ли таким подходом пользуются? На гитхабе у библиотеки https://github.com/java-json-tools/json-patch всего 700 звездочек и <groupId>com.github.java-json-tools</groupId> какой-то васянский.
2. Норм все будет с валидациями? У меня на 50 полей 40 валидаций раскидано, чисто с содержимым связаны, не просто ненулевое. Ну вот допустим они будут применяться во время apply. И так же все схватится адвайсами и выкинется правильная ошибка. Но валидации они не на сущности, а на дтошки, потому что в разных эндпоинтах валидации могут быть разные. Это получается нужно мапииь сущность в дтошку и уже ее мерджить и потом обратьно мапить?
3. В бд все сохраняется все равно скопом. И нужно делать предзапрос с селектом по ид. Чтобы сделать upate запрос с произвольным количеством полей через jdbc эта библиотека не подойдет, придется самому что-то похожее на список ReplaceOperation городить. Самому валидировать есть ли все пришедшие поля, самому доставать валидации на поля, а потом уже строить запрос.
Проблемы спрингодебилов. Новые поля в нормальной архитектуре устанавливаются дефолтным значением/инициализатором, удалённые отбрасываются/передаются в сокращатель.
Неправда, роутинг динамики это уже уровень приложения, поэтому на неправильный урл надо возвращать 200 с текстом, что урл неправильный.
Причем тут новые поля?
Я о том, как лучше и правильнее частично обновлять значения полей.
Там где я работал/стажировался/читал чьи то проекты всегда обновляли все полностью. Или писали эндпоинт для одного поля.
Да, пример на баелдунге на спринге, но на жаваее или на микронафте будет все тоже самое.
я пишу разные ручки для разных сценариев обновления. И в каждой ручке обновляются только возможные для этого сценария поля
Тише шиз
По задачам. Если там числодробилка то 4, если дохуя конкурентного I/O то десятки-сотни грин тредов, если скрипутха какая-нибудь то один поток, если программа состоит из нескольких подсистем то можно сделать по одному потоку на подсистему, ну или на какую-нибудь подсистему несколько потоков выделить а на остальные по одному. В чём не прав?
насколько частей делится процесс программы, столько бы и сделал. Числодробилки в большинстве нет смысла делить, но лучше измерять
>колько потоков стоит использовать для системы с четырьмя ядрами?
потоки создаются под конкретные задачи, а ты должен был рассказать что будет при создании малого колва потоков и большого, поэтому мы тебя и не взяли джун
N потоков
Если это все условия и вопросов больше задавать нельзя, то ответ: один. Если можно задавать вопросы, то конечно же: для какой конкретной задачи?
>>на собесе
Если это простые ядра с гипертредингом - то 2n-1
Если это всякая ебала с разными ядрами типа экономичных - то хз как оно там распределяться будет на практике, наверное 2n-1 + k
виляние жопой - "по задачам" - принимается как незнание
Что значит частично обновлять значения полей? Entity#yoba(newValue) и dto.upsert(entity).
>виляние жопой - "по задачам" - принимается как незнание
А что не так? Если потоки загружены на 100% задачами от контролируемого кода то равное количеству логических процессоров. Если есть взаимодействие с чужим кодом, если часто блокируется на I/O, и т.д. то цифры (и подход) будут различаться. А ты вообще программист, уважаемый?
Дебильный вопрос. Это ты в епам ходил, что ли? На десктопе нужен один поток для гуи и по потоку на каждую тяжелую задачу уровня проверить орфографию или скомпилировать и показать ошибки. Для серверов нужны асинки, а количество потоков в пуле задается параметром в настройках.
Это стандартный вопрос, на который ожидается стандартный ответ. В лучшем случае уточнят что это числодробилка, в худшем - поставят крестик и пойдут к следующему вопросу.
>>А ты вообще программист, уважаемый?
Тебя это ебать не должно.
Так а хули ты высираешься про какие-то манякрестики, если сам ещё егэ не сдал, дегенерат?
Чтобы поумнее чем 2n формула выглядела. Нашёл кого спросить за базар, это же школота голимая. Он даже не знает что в джаве ничего умножать не надо, потому что рантайм сразу логические процессоры возвращает.
Четыре.
Предполагается равномерная непрерывная нагрузка на потоки.
Больше - толко если задача этого явно требует, т.к. увеличения скорости это не даст.
Смысл такого вопроса - понимает ли человек, как это вообще работает. И что если сделать 100 параллельных потоков, это не будет работать в 100 раз быстрее.
Если с гипертредингом - то 8, я думаю, смысл понятен - столько, сколько в процессоре физических потоков вычислений.
Гипертрндинг не про физические потоки вычислений. У тебя остаётся один армфметически-логическмй блок в ядре, но дублируется всё остальное, что нужно для работы с потоком. В итоге переключение контекста потоков занимает минимальное время, но инструкции продолжаются выполнятся в одном калькуляторе.
И дополню, твой ответ и ответы остальных про 2n неверные, потому что у вас всё также остаётся 4 физических ядра даже с гипертредингом, то есть выигрыша в производительности вы не получите при условии отсутствия IO операций. Если в алгоритме есть IO операции, то тут вопрос уже как часто они вызываются.
https://stackoverflow.com/questions/1718465/optimal-number-of-threads-per-core
36-40
Но от тебя хотят услышать или 4, или 5.
Чувак, на этот вопрос есть только 2 правильных ответа:
1. Четыре
2. Хуй его знает, зависит от задачи
Добавлю, что по твоей ссылке примерно это и написано.
1. Никто не мешает дальше слои инкапсуляции наращивать. Почитай про слои в протоколе mtproto у телеграма. Сколько их там.
2. Эта RFC не про написание поддерживаемых программ. Поэтому буквально ограничиваться ей невозможно. Иначе у тебя клиент будет слишком много знать как устроен сервер приложения.
мимо
https://core.telegram.org/mtproto
Transport component: defines the method for the client and the server to transmit messages over some other existing network protocol (such as HTTP, HTTPS, WS (plain WebSockets), WSS (WebSockets over HTTPS), TCP, UDP).
Я по делу и сказал, ты высрал хуйню, не в минимальном времени переключения контекста преимущество.
Вспоминаем схему CPU. Вот у тебя ALU стоит (в центре, красная штуковина, которая занимается выполнением инструкций), вот файл-регистр, вот кэши, вот блок управления и где-то там главная память.
Каким образом дублирование контекст-релейтед блоков, но не дублирование ALU даёт большую производительность для параллельного алгоритма без IO операций?
Никак, потому что блять калькулятор как был один так и остался
Да пофиг, схематично та же самая байда.
Какая ещё байда?
application-level protocol если у тебя апликейшен это гипертекстовая страница
В контексте обсуждаемой проблемы - это транспортный протокол.
Надо своей головой думать, а не волшебные слова в интернетах выискивать.
По умолчанию в пустом документе ворда нес стиля для ссылок.
Он появляется, как только в документе появляется ссылка.
Стиль называется Hyperlink.
Если вставить ссылку и тут же ее выпилить - стиль останется
То есть это нормальное поведение? Нельзя как-то автоматически включить этот стиль в документ при генерации?
И это программисты, блядь, вообще охуеть.
https://www.youtube.com/shorts/RG-DLbmsr3A
>Вот, кстати, отличный образец того, что называется днище ёбаное.
>И это программисты, блядь, вообще охуеть.
>shorts
Действительно.
Анон, у меня аналогичный опыт, я решил перейти на современный стек и более сложные задачи(надеюсь осилю). В банке уже несколько лет делаю однотипные бизнес задачи, деградирую. Правда на новой работе зп повыше хоть и не сильно, при уходе предлагали контоффер по которому я получал бы больше. Решил, что сам я учиться не буду (учусь только для собесов), а на новой работе придется. Если б мне платили 650к в месяц ,я б наверное не дёргался, с премиями получаю меньше 400
Прочитал в доках, вроде никак это не обойти. Ну ок, сделал синий текст с подчеркиванием, пойдет.
Еще вопрос: когда я открываю сгенерированный документ, он начинает перестраиваться на ходу. Там большая таблица, которая начинает сжиматься, как я понял из-за того что что ворд расставляет переносы строк в ячейках. С этим можно что-то сделать?
Даже если так, остаётся уёбищный, интернал и копрософта.
например?
Котлин - не нужен.
Груви - просто охуенен для скриптования джавы, для тестов, для утилит.
Можно встроить груви веб-консоль прямо в свой сервер, и пилить скрипты, дёргая бины, выполняя запросы к бд и т.п. прямо на живом сервере.
Писать большие программы на нём вместо джавы не нужно.
А, чуть не забыл - скала - это академический язык.
Для повышения квалификации - хорош, для реального программирования - нет.
нескучный синтаксис. Забывают что они нужны чтобы приносить велъю кабану, а не чтобы играться в свои игрушки
Ну, если синтаксис жабы тебе нравится больше чем синтаксис котлина, то кажется ты переболел ковидом. В остальном, та же байда только в профиль.
Там скуф энтерпрайзный судя по постам. Он просто не может осознать выразительность языка после убогой джавы.
А на чем я буду получать больше анончики?
1. Подучить вротенд и стать фулстекером?
2. Подучить скалу и стать разрабом на скале?
Забудьте про скалу, она мертва, это пет-проект одного профессора. Получать больше ты будешь на голанге.
Где мне 400к за три года опыта получить в джаве? А вот в го это изи, чел просто устроился в вб.
Жир.
Потому то программистишки, когда разговор заходит о стоимости поддержки, техническом долге и легаси, как правило за деревьями леса не видят.
Вместо того чтобы честно уже признать, что единственная обьективная причина существования легаси - это прокладка между сиденьем и монитором, они сваливают вину на язык, технологии - что угодно. Ложные суждения ведут к невменяемым потугам - программистишки бросаются переписывать "все с нуля(тм)", с закономерным итогом. Обнуляют язык, обнуляют коммьюнити и экосистему, и все равно получают среду, где бывшие джависты пишут такое же легаси, как и раньше.
То есть ты хочешь сказать, что поломка обратной совместимости от языка не увеличивает количество и проблематичность легаси?
Как вы побороли это чувство, как задушили в себе желание сделать как надо и просто съебали на нормальный стек?
Какая разница что делать? Если тебе интересно этим заниматься, то идёшь к тим лиду и говоришь, что теперь вместо фич, хочешь заниматься рефакторингос, но тебе для этого нужно, например, 1-2 месяца выделить и не трогать другими тасками.
Если тим лид согласен, будешь делать то что нравится. Если он против, будешь искать работу в новом месте.
Так они только двумя руками за, лид, продукт, потому что постоянно все падает, работы больше чем на 2 месяца.
Но есть один существенный ньюанс - зп маленькая и бюджета на повышение нет.
Значит проект ни при чем. Ты просто хочешь больше денег. Начинай искать работу, смысл себя через силу заставлять что-то делать.
С того что петухлин кал с убогим синтаксисом, но он живее всех живых, как минимум в андроиде.
Угу, такой нулл сейфти, что все нуллы приходящие из джавы падают в рантайме. Ух как безопасно.
Как это противоречит хоть чему-то из мной сказанного?
Если ты про нулл-рестриктед типы, то, насколько я помню, они только для валью типов. То есть условный стринг сделать ! не получится.
>A normal class type can be converted to a null-restricted type, and vice versa, much like the type Integer can be converted to and from the type int. When converting to a null-restricted type, a null check occurs at run time.
Никогда не будет, для этого необходимо перелапачить кучу либ, а самое главное исчезнет обратная совместимость
>A null-restricted type is a reference type expressed with the name of a value class followed by the ! symbol. It asserts that the value of a given variable or expression will not be null.
Сервера? На котлине?
Это язык для gui.
От оттуда появился. И поэтому он так популярен на андроиде. Зачем писать на нём серверы?
Их надо писать на Go, лол.
Ты так говоришь, как будто подавляющее большинство релизов, которые ты пофейлил в своей жизни по срокам, пофейлились из-за того, что какой то чел тебе обратную совместимость в языке сломал.
То что делают разработчики ЯП с обратной совместимостью языков, на фоне пиздеца, творимого прикладными даунами под ярмом кабанов в конечных продуктах - детская хуйня.
Как объяснить уважаемому Кабан Кабанычу, что команде нужна подписка на Intellij IDEA? Кабан Кабаныч говорит санкции и что платежи не проходят, а у всей команды идея краснит код...
Триалками пользуйся, лол.
>Почему у меня бесплатная идея ничего не краснит?
Потому что ты ничего сложнее хеллоу ворлда не разрабатывал
Да что ты говоришь. А может это вы просто идеей пользоваться не умеете нихуя? Равно как и обосновывать перед кабанычем нужду в дополнительных расходах?
Её можно делать в компайл тайм, как делает тот же Котлин. Т.е. в твоем коде у тебя будет null safety, а как начинаешь вызывать библиотеки - все гарантий нет.
прям как дженерики
Ну вот те и ответ на твой вопрос. Ты просто чмо с говном во рту и обиженным ебалом - такому ни баба не даст, ни кабаныч идею не оплатит.
Мальчик, бесплатная идея - это только джава, груви и котлин.
Если тебе нужен фронтенд или энтерпрайзные фреймворки - ты соснёшь. Но, как уже заметили выше - ты школьник, и это тебе пока ещё рано.
Нет, не говорю так, хоть я и немало говна из-за отсутствующей обратной совместимости поел. Ты сказал, что проблема только в конечных программистах, я объяснил тебе, что это не так.
Например - зайди на сайт jb, и посмотри отличия ultimate от community.
Там довольно много всего. Включая возможность через плагины иметь в одной идее весь зоопарк - пичарм, голенд, вебшторм и т.д. И деньги они берут не просто так.
Жаль, что оплату прикрыли. Теперь хз как продлевать..
То есть ты даже сам не можешь ни одного примера привести, зачем конкретно тебе ultimate? Жалкий слив.
Создать почту, активировать, перелогиниться. Это не 5 минут, ежемесячная мозгоебля
И ты каждый 29 день, выходишь из аккаунта и логинишься на новый? Да и почты вроде по номеру создаются
А ты каждый 29 день видишь списание в 100 долларов за говно? Почты можно на разных сайтах создавать, если ты не знал, на некоторых (мыло.сру) не нужен телефон.
>Да и почты вроде по номеру создаются
Я не знаю ни одной почты где нельзя было бы использовать один и тот же номер для всех почтовых ящиков. Можно прям так и писать имена почт и аккаунтов jetbrains.free.ebka.january2024@
Я не ворую, просто использую пробную версию. Да и вообще они ушли из рф и напрямую вроде купить нельзя, а значит воровством это быть не может.
Go раскритиковал наш техлид, так что на нём мы не пишем.
> зачем писать на нем сервера
Потому что это та же самая жаба.
> Только в десятки раз медленнее го
Смеялись всей маршруткой. Не покажешь, где здесь говно? https://www.techempower.com/benchmarks/
Я не помню уже, это год назад было. Он переписал один из серверов на него и после этого сказал, что конечно интересно, здорово, но пожалуй мы остаёмся на жабе/котлине.
Эм, сейчас бы джависту давать переписывать сервисы на гоулэнге, чел... Идиоматичный код на год можно научиться писать минимум лет за 5-7. Вчерашний джавист, который всю жизнь круды лепил на спрэнг фримверке и настраивал муппинги в хубирнейте, чтобы запрос правильно собрался, в принципе не может называться инженером.
Тех. лид на С++ у нас пишет в основном. Жаба это так, процентов 20 от его работы.
Не покажешь где здесь настоящий индустриальный фреймворк для джавы, ну который в реальном мире юзают? А все сам нашел.
А посоветуйте хороших книг и ресурсов, чтобы привести знания к структурированному виду и посмотреть на так сказать лучшие практики, плез. Как не приду на проэкт, то вижу одну и ту же картину - деление на контроллер, сервис, репозиторий. Тонкий контроллер, раздутый донельзя сервисный слой где насрано по 2.5-3к строк и репозиторий в виде интерфейсов через спрэнг дэйту. По итогу это нихуя не покрыто тестами, а связи между сервисными слоями образуют огромный комок грязи..
Или это нормальный подход в джэве?
>А, чуть не забыл - скала - это академический язык.
https://yandex.ru/project/autoru/vac-scala
Эм...
Я так себе и представляю. Приходит тех лид к менеджменту и говорит: "Мы решили дальше писать на го. Но так как на го надо учиться писать 5-7 лет, мы на это время приостанавливаем выпуск фич, а будем писать экспериментальные штуки на выброс. Приходите через 5-7 лет."
Все проще. Нанимаются уже готовые спецы, а скуфидоны-джависты идут на мороз. Полно молодых ребят, которые заменяют целые отделы таких скуфов. Современная разработка это тебе не круды на спринге лепить, старичок, кхе-кхе
Меня не интересуют хобби-подделки вроде vertx. Речь шла об индустриальном стандарте для бэкенда в 2024 - голанге, я и пошел его по твоей ссылке сравнивать с используемыми в реальности фреймворками в мире JVM.
Так джавистов же заменили молодые спецы котлинисты еще несколько лет назад, переписав все на котлин-убийцу джавы
есть ещё вариант ActiveRecord - где вся логика по сущности складывается в эту сущность, в том числе доступ к бд.
А разделение на слои это база. В твоём случае в тестах надо поднимать базу и дёргать методы сервисов или контроллеров по максимуму
А причём тут твои интересы?
у меня в микрогалере джавистов переучивали на скалу. Где там щас эта скала и где эта галера?
Это ты как-то неудачно набросил.
Ну что такое хуяндекс, в самом деле? Это троечники.
Я буквально только вчера разрулил одну проблему, которая была вызвана тем, что один из самых известных их сервисов сделан с грубейшим нарушением общепринятых соглашений. Причём, сделать по стандарту - ничего не стоило бы, вообще ничего. Просто они тупые мудаки. Нет, подробностей не будет.
Что касается скалы - то на ней, вообще-то, Акка написана. Это и надо было привести в пример. Если ты, конечно, знаешь, что это такое.
И это совершенно не отменяет того, что это академический язык И что те, кто лет 10 назад ввязался в разработку реальных систем на нём, эпично соснули в итоге. Вот как хуяндекс.
Я бы начал с Code Complete, потом бы навернул Practical API, а дальше пока сам не знаю.
лол, алгоритмических секций уже одна, как же ебут яндексоидов, скоро как все конторы будут осуществлять найм за 1 собес в 1-1,5 часа с одной задачкой уровня изи
>Затем решим задачку на кодинг. Для подготовки подойдёт LeetCode.
>Никаких хитростей и вращения деревьев не будет, но мы ожидаем, что кандидат знает, что такое асимптотическая сложность, умеет ее оценить, и может написать примерно рабочий код без IDE.
Отказываюсь. Код писать буду только в идее, в ней же и работаю. Сложность только по циклу в биг О, никаких тета и подсчет по действиям +-= и */, а также никакой теории про сложность алгоритмов, p np проблему и прочую фигню ненужную в работе на джаве, МЯУ?
Эти дурачки продолжают нанимать олимпиадников.
Совершенно не понимая, что это немножко другое программирование. И что олимпиадник в принципе не понимает, как делать реальную энтерпрайзную систему.
Ты котик?
>рабочий код без ide
окей я начну: 0xCAFEBABE...
Уже.
Собираюсь уволиться со своей экономической хуйни, за 3 месяца подготовиться к собесам по жабе кор когда-то учил и устроиться на 200к. Там делать все с гпт, пока не догоню обучение
Тяжело совмещать обучение с работой, часто приходится задерживаться. В день час максимум получается, потом я становлюсь выжатым как лимон
Жаба не умеет в pem. Чем дальше, тем чудесатее.
MainClass: https://pastebin.com/wnuzg1Nn
MainFrame: https://pastebin.com/HHgfk8jb
GUIFrame: https://pastebin.com/mYJYVz8d (начало на 65 строке)
При запуске отдельно GUIFrame всё работает корректно, но если я запускаю весь проект, или создаю JAR файл - запускается просто серый прямоугольник 640:480. Как я понимаю, это из-за отсутствия указания что надо подтянуть данные из GUIFrame. Лучший результат что у меня вышел - GUIFrame и MainFrame запускаются при запуске проекта, но в разных окнах. Как заставить это говно работать?
Алсо дайте пожалуйста сурс по НетБину, чисто чтобы узнать самую базу, ибо в общем-то он мне нахуй не нужен, но придётся сдавать экзамен по этой залупе в скором времени. Английский понимаю, но в идеале на русском.
Тогда увольняйся с финансовой подушкой. У тебя должны быть деньги, чтобы прожить всё время обучения и время поиска работы. Учитывая твои требования (0 лет стажа и 200 к зарплата), то времени ты можешь потратить очень много.
>>3003110
Офигеть, кто-то ещё требует знать NetBeans? Да я про него только в книжках читал мол был такой фреймворк, да сгнил уже.
Чувак, NetBeans тут вообще не при делах.
Хотя, было бы лучше тебе использовать IDEA community.
Хотя, родной GUI дизайнер в нетбинсе, наверное, получше.
Но, ещё лучше использовать JFormDesigner, в виде плагина или как отдельное приложение. Он, правда, платный, но его можно крякнуть самому. Или найти кряк в интернетах.
По поводу твоего кода - такое ощущение, что ты вообще не понимаешь, что делаешь. Ну с какого хуя твой main должен что-то показать, по-твоему? Ты радуйся, что он тебя ещё нахуй не посылает.
В запускающем классе тебе надо создавать экземпляр GUIFrame.
А твой MainFrame тебе просто не нужен вообще, удали его.
Другой подход - форму в дизайнере надо делать не на JFrame, а на JPanel.
А затем вставлять её в contentPane твоего MainFrame.
Так будет более правильно.
Но, в любом случае, два JFrame тебе не нужно.
Не знаю
1. Будет неламповое спрингоговно если не будешь знать куда именно тебе надо перекатываться.
2. Выкатишься и не сможешь вкатиться из-за текущего состояния рынка, став безработным.
А вызов шедулера корутин дёшевый? А убитый стейт машиной флоу поднимает перформанс?
Я думаю правильная реализация корутин может избавиться от этих проблем.
А что такое с текущим состоянием рынка?
Просто лютая нехватка специалистов везде.
Если только ты не хочешь пинать хуи за 300KK/ns, конечно.
Я не греф. И я даже ещё не начинал, дружок.
По поводу рынка - вот я сейчас нанимаю, например.
Но, никто не нанимается, почему-то.
Подробностей не будет, ибо деанон.
И у нас есть условия - кандидат должен быть местным, а у нас немножко ебеня.
> Подробностей не будет
Ну вот и иди нахуй, долбоёб. Портфель собрать не забудь, а то видимая рука мамаши порешает.
Не в тамбове, лол. И не галера. И не 30к, хотя и не 300.
Но, суть в том, что везде людей не хватает.
Потому, что всех хотят очень много денег, а работать не хотят совсем. Соискатели - просто охуевшее быдло, которое ведёт себя так, как будто делает тебе одолжение. При этом видно, что человкек не умеет почти ничего. А денег хочет как в яндексе. Волки позорные, лол.
Правильная это на уровне JVM, а чисто на уровне компилятора сделать лучше чем в Котлине не получится.
Дай угадаю: вы требуете тестовое задание, на собесе ебете мозги литкодом и душните про сборку мусора и конкаренси, будто ваша сраная фирмочка пишет свою джава машину, а не перекладывает джейсоны.
Эта хуйня чисто для серверов, для десктопа не нужна. Суть в том, что в типичной микропенисной архитектуре код 95% тупо висит на сокете и ждет ответа от другого сервера. В то же время поток нехило так отжирает память. Если создавать по потоку на каждый реквест, можно легко заддосить сервер, у него тупо закончится память и пиздос. Поэтому придумали асинки, там таски не занимают по потоку каждая, а лежат кучкой и ждут, пока их обработают.
>ты вообще не понимаешь, что делаешь
Так и есть. Мне просто нужно сдать экзамен по этому говну и забыть как страшный сон.
Вообще я уже и сам разобрался, сделал MainClass как на пике. А изначально у меня MainFrame и GUIFrame раздельно, ибо делал по видосу индуса, ибо это было первое что я нашел на понятном мне произношении ангельского и с использованием JFrame Form, что является обязательным условием для сдачи экзамена.
Пик2 - то что мне нужно сделать. Просто пару пара полей ввода для имени и фамилии, выпадающий список выбора должности, а слева поле ввода количества знаков при генерации пароля, и чекбоксы касательно того, какие символы использовать. Нажимаешь генерировать пароль - высвечивается отдельное окно с паролем, нажимаешь "Подтвердить" - получаешь окно со всеми введёнными данными. Из этого мне непонятно следующее:
1. Как сделать белую обводку с закруглёнными углами для двух блоков?
2. Как сделать генератор пароля? Могу только на питухоне через библиотеку рандома. Важно учесть, что это должно быть реализовано на Java with Ant, ибо интернета на экзамене не будет.
3. Как сделать всплывающее окно при нажатии кнопки?
>сгнил
Да, вот на таких штуках готовят будущих 300ккк наносеков в загнивающей гейропе, из которой тащемта и капчую
1. Семантика.
1.1. Неймспейсы. Полный пиздец. Рассинхрон с пакетами, лишние отступы, проблемы с уникальностью названий - полный пиздец.
1.2. Перенос { на новую строку. Это уродливо. Читать код с кучей не пустых, а заполненных одним ебучим символом строк - неудобно.
1.3. Наследование интерфейса через :. Бесполезное сокращение.
1.4. IZalupa как название интерфейса по дефолту. Убивает семантику полиморфизма. Когда ты обращаешься в джаве к интерфейсу, ты чувствуешь, что обращаешься к живому объекту, а не к гондону между объектом и тобой.
1.5. Названия методов с большой буквы. В джаве после прочтения первого символа сразу понятно, что это не операция делегирования, а уже непосредственно вызов.
2. Функционал.
2.1. Наличие бойлерплейта (в джаве есть ломбок, который наглухо разъёбывает уродские попытки в избавление от бойлерплейта в петушарпе с помощью get; set;.).
2.2. Отсутствие record'ов (позорные структуры ни в какое сравнение с рекордами не идут).
2.3. Отсутствие виртуальных тредов.
2.4. Прибитость гвоздями к винде.
2.5. Отсталые енумы.
2.6. Отстутствие модулей.
2.7. Отсутствие системы сборки. Нугет/мсбилд - это посмешище, которое даже с антом сравнивать без смеха нельзя.
3. Экосистема. У петушарпа позорная экосистема.
4. Свобода и распределённость. На петушарпе половину всего кода пишут майки, водя за ручку петушарповых детишек и говоря им, что и как делать. Следствием из этого является пункт 3 и ограниченность петушарпа ровно на том, что нахуевертили майки. Пока на джаве ты волен, как барин, воротить нос и выбирать лучшую библиотеку под твои задачи, на петушарпе ты жрёшь то, что тебе с лопаты майки скормили. Пока на джаве ты выбираешь между жуком и queryDSL, на петушарпе ты жрёшь огромную кучу говна, слепленную из несовместимых вещей, что в здоровом Java мире даже никак не пересекаются, под названием LINQ.
5. Поддержка кода. Пока код с Java 1 работает на Java 19 и будет работать вплоть до Java 119, на петушарпе каждую версию ломается обратная совместимость, нельзя просто взять и заюзать библиотеку, в которую не было завезено апдейтов за последние несколько лет.
1. Семантика.
1.1. Неймспейсы. Полный пиздец. Рассинхрон с пакетами, лишние отступы, проблемы с уникальностью названий - полный пиздец.
1.2. Перенос { на новую строку. Это уродливо. Читать код с кучей не пустых, а заполненных одним ебучим символом строк - неудобно.
1.3. Наследование интерфейса через :. Бесполезное сокращение.
1.4. IZalupa как название интерфейса по дефолту. Убивает семантику полиморфизма. Когда ты обращаешься в джаве к интерфейсу, ты чувствуешь, что обращаешься к живому объекту, а не к гондону между объектом и тобой.
1.5. Названия методов с большой буквы. В джаве после прочтения первого символа сразу понятно, что это не операция делегирования, а уже непосредственно вызов.
2. Функционал.
2.1. Наличие бойлерплейта (в джаве есть ломбок, который наглухо разъёбывает уродские попытки в избавление от бойлерплейта в петушарпе с помощью get; set;.).
2.2. Отсутствие record'ов (позорные структуры ни в какое сравнение с рекордами не идут).
2.3. Отсутствие виртуальных тредов.
2.4. Прибитость гвоздями к винде.
2.5. Отсталые енумы.
2.6. Отстутствие модулей.
2.7. Отсутствие системы сборки. Нугет/мсбилд - это посмешище, которое даже с антом сравнивать без смеха нельзя.
3. Экосистема. У петушарпа позорная экосистема.
4. Свобода и распределённость. На петушарпе половину всего кода пишут майки, водя за ручку петушарповых детишек и говоря им, что и как делать. Следствием из этого является пункт 3 и ограниченность петушарпа ровно на том, что нахуевертили майки. Пока на джаве ты волен, как барин, воротить нос и выбирать лучшую библиотеку под твои задачи, на петушарпе ты жрёшь то, что тебе с лопаты майки скормили. Пока на джаве ты выбираешь между жуком и queryDSL, на петушарпе ты жрёшь огромную кучу говна, слепленную из несовместимых вещей, что в здоровом Java мире даже никак не пересекаются, под названием LINQ.
5. Поддержка кода. Пока код с Java 1 работает на Java 19 и будет работать вплоть до Java 119, на петушарпе каждую версию ломается обратная совместимость, нельзя просто взять и заюзать библиотеку, в которую не было завезено апдейтов за последние несколько лет.
1. Это реально сложно. Надо делать свой субкласс Border, со своим пайнтингом. Ты не сможешь, судя по тому, что ты тут пишешь. Хотя, можешь попробовать загуглить.
2. Это достаточно просто. Если не сможешь - иди крутить хвосты bydlu. Потому, что такие программисты не нужны.
3. Это зависит от того, какое окно. В общем случае - гугли JDialog.
>>3003505
Не угадал.
Постоянно попадаются вот такие вот деятели, как этот: >>3003700
Которым просто надо 300KK/ns, а "это говно" они хотят "забыть, как страшный сон". Причём, у многих ещё и хватает наглости бычить и качать права, и приходится жёстко озалупливать в прямом эфире.
Потому что тупорылый мочух не банит одебилевшее шарпоговно, которым дали выходной час между написанием гетсетов.
>Надо делать свой субкласс Border, со своим пайнтингом. Ты не сможешь, судя по тому, что ты тут пишешь. Хотя, можешь попробовать загуглить.
Уже есть готовый https://docs.oracle.com/javase/8/docs/api/javax/swing/BorderFactory.html#createLineBorder-java.awt.Color-int-boolean-
Блять, век живи - век учись.
А я в нищем техникуме числюсь. Впрочем это последний учебный год, дальше госэкзамен и на работку
>душните про сборку мусора и конкаренси
В смысле душите? Я мимокрокодил и ты знаешь мне знание как работает gc и какой для проекта выбрать, как его затюнить очень даже пригождается. Про многопоточку я вообще молчу, я не веру в существование реального проекта без нее.
Вывод: ты жулик.
Странно, что ваш техникум не выбил бесплатную учебную лицензию у jetbrains. А community, видимо, из каких-то соображений использовать не хотят.
А то, что у вас NetBeans - это благо.
Было бы в разы хуже, если бы была Eclipse. Вот это говно так говно. И оно вовсе не считается устаревшим, а регулярно дорабатывается и обновляется. Но, при этом, идеологически - это древний как говно мамонта IBM VisualAge for Java (на базе него сделано). Вот такой вот пердимонокль.
Ну, если коротко - в идее код на кончиках пальцев. А в эклипсе - код отдельно, а пальцы - отдельно.
Я же сказал - идеологически это основано на ide, которой четверть века, и которая сделана таким монструозным сумрачным гением, как IBM. Это пиздец просто.
Да, они там многое доработали, но, идеологию никуда не денешь.
Идея тоже появилась 20 лет назад.
И тогда она была как глоток свежего воздуха после IBM VisualAge и Borland JBuilder. И до сих пор остаётся.
предположу что у тебя иллюзия что твой "тюнинг gc" помогает
Kurwa ja pierdole! Polacy piszą na SWING!
Ну там тип аннотации,рефлексия хех мда хуе мое
>что конкретно из говна он сделал
сделал слишком многое, из-за чего джава-господину нужно писать меньше кода, в отличие от Си-Жжжжжж
А я предположу, что в многопотоке ты нихуя не знаешь. Хоть в спеку-то заглядывал?
Спринг всем хорош. Один из немногих проектов, который можно открывать и показывать как надо писать на жабе
>>3003434
В гошечке гетсетов нет, дуралей
Ты читал исходники? Я читал, они охуенные.
> которой четверть века, и которая сделана таким монструозным сумрачным гением, как IBM
Это максимум причина. Ты мне конечную разницу покажи. В чём эти кончики пальцев выражаются.
Так так все делают, чего ты? Приходишь потом в контору, а там геттер без чиф продукт архитекта не могут переименовать.
Можешь хейтить, можешь не хейтить, все равно у джависта на работе его спросят с вероятностью 95%
>Ты мне конечную разницу покажи.
Нихуя ты дерзкий, щенок.
Мне вообще похуй, в чём ты там будешь писать свой говнокод.
Нравится эклипса - пиши в ней, лол.
Потому что геттер в публичном API всё логично.
>Деньги или крутой опыт?
>Пишем Ваши мнения
В первую очередь всё зависит от того на что ты свои сотыги тратишь.
Если ты хорошо какашечку откладываешь или ипотеку почти закрыл, то добивай то красивой суммы/закрывай ипотеку и тогда спокойно перекатывайся на нужный тебе стек и на меньшие деньги.
Если же ты дебил, который спускает такие денжища в нулину в день зарплаты, то перекатывайся прямо сейчас, так как всё равно на говно тратишь.
Сам обдумываю вариант вкатиться в банк на гавно за дорого, лет 10 отработать складывая всё под матрас (как вариант прыгать из банка в банк для поднятия зэпки) и потом в вечный гэп дауншифтить.
Где ты собрался в банке так работать, лол? Может где-нибудь в провинциальном бандитском банке где будешь пахать за копейки. Современный финтех двигают упругие зумеры и там поганому скуфиндяю не место. Он лишь будет затягивать сроки и выбивать время чтобы "тщательно ознакомиться с техническим заданием", пока зумеры будут выкатывать сервис за сервисом, принося кабану вэлью
так они сами карты отключили, поэтому и вынудили бесплатно ей пользоваться, до этого я платил как честный гой
Ну и нахуй ты продолжаешь ворочаться, слитое?
>Современный финтех двигают упругие зумеры и там поганому скуфиндяю не место.
Сижу в банке с 40летними скуфами и скуфихами. Зумера видел один раз в соседней команде, но он съебал через два месяца потому что СЛОЖНА
мимо скуф 30 лвл
А ты приколист.
А вот и первые проблемы с виртуальными тредами. Интересно почему нет поддержки synchronized блоков? Кто нибудь слышал объяснения этому?
Я таких скуфов регулярно вижу в ленте линкедина где они плачутся что "внезапно" закончили работать на позиции сеньки, лида или хэд оф департмент, лул. Открываешь профиль, а там - ба! лысенькое говно в пинджаке и обвисшим ебалом)) Прямо сладко на душе)))
Скуфы мразотнее даже пидарасов, которые судят других людей по фото.
>>кряк
>>легаси 2021
ты че ебанутый?
как раз код нагуглить быстрее, чем эти твои ебучие триалы регистрировать
>зелёные потоки — это потоки выполнения, управление которыми вместо операционной системы производит виртуальная машина. Green threads эмулируют многопоточную среду, не полагаясь на возможности ОС по реализации легковесных потоков. Управление ими происходит в пользовательском пространстве, а не пространстве ядра.
Так что и горутины, и виртуальные треды, и процессы эрланга это всё зелёные потоки.
Имелись в виду горутины, я думаю.
Горутина = витруальный тред.
Они шедулятся на грин треды.
И т.д. и т.п.
Да зачем они нужны то! Чем не нравилось когда операционная система их реализовывала?
Если ты сделаешь миллион зелёных тредов, оно будет долго выполняться.
Если ты сделаешь миллион обычных тредов, у тебя всё упадёт.
>>3005223
Нет. Горутины это _не_ грин треды. Это то, что работает поверх грин
тредов:
Go’s mechanism for hosting goroutines is an implementation of what’s called an M:N scheduler, which means it maps M green threads to N OS threads. Goroutines are then scheduled onto the green threads. When we have more goroutines than green threads available, the scheduler handles the distribution of the goroutines across the available threads and ensures that when these goroutines become blocked, other goroutines can be run. We’ll discuss how all of this works in Chapter 6, but here we’ll cover how Go models concurrency.
Цитата из известной книги Concurrency in Go.
Чтобы обрабатывать миллион входящих запросов
Ну пришла тебе коллекция с n элементами, каждый из которых является входными данными для одной и той же подзадачи. Ты просто запускаешь n подзадач, каждую на своём зеленом треде, и ждёшь пока они все закончатся.
С обычным тредами тебе придётся писать дополнительный код, который берёт треды из тред пула и ждёт, если нет свободных. С зелёными тредам это всё за тебя делает рантайм, причём лучше, чем если бы ты это написал.
А если мне нужно выполнить работу только на двух ядрах, потому что они мощные, а остальные слабые (Big little architecture)? Рантайм будет таким умным, что догадается об этом или как?
>В моём очень специфическом случае этот инструмент бесполезен, поэтому он не нужен вообще
Так? Подавляющее количество кода исполняется на x86 и arm с равноправными ядрами.
Но я даже про твой случай могу сказать, что подзадачи не поровну делятся на ядра, а по мере освобождения. В этом случае мощные ядра просто сделают гораздо больше подзадач. Специфика планирования, конечно же, от рантайма зависит.
Хм, а это единственное преимущество использования зелёных потоков? Я имею ввиду то что мне не нужно будет писать код по дозагрузке данных в поток когда он отработал предыдущие? Звучит как большая работа разработчиков этих потоков ради маленького эффекта.
Ещё есть плюс в том, что неактивный зелёный тред (в котором вызван sleep) снимается с активного треда, а вместо него загружается работающий, а реальный тред в слипе просто висит и ничего не делает. Это может значительно увеличить пропускную способность, когда много IO операций.
Ну и это хорошо работает в шарпе, где уровень абстракции ещё выше и ты просто можешь у коллекции написать .AsParallel() или сделать .Select(x => Task.Run(...)), что экономит кучу кода, в то время как джаве тебе всё равно надо ебаться с бойлерплейтом создания тредов.
>экономит кучу кода
И делает то, не знаю что.
Вам, детишки, надо просто печатать научиться всеми пальцами, а не только хуем. И проблема экономии кода отпадёт сама собой.
>>экономит кучу кода
>И делает то, не знаю что.
Я тебе про любой ЯП такое могу сказать, даже про машинные коды x86, которые внутри в risc преобразуются.
Я лично знаю, что там под тасками происходит, и там ничего особо сложного нет.
>Вам, детишки, надо просто печатать научиться всеми пальцами, а не только хуем. И проблема экономии кода отпадёт сама собой.
Длина кода важна для чтения, а не для набирания. Когда у тебя бизнес-логика вперемешку с бойлерплейтом, её сложнее вычленять.
Если ты хочешь продолжать дискуссию, пиши в холивар-тред, а то опять всё потрут.
Хочешь сказать я могу совершать блокирующие IO операции на одном реальном треде не блокируя реальный тред и на нем же вычисления на CPU для другой задачи если используется зелёные потоки? Я правильно понял?
Мы вам перезвоним.
Дальше не читал.
>Нет. Горутины это _не_ грин треды. Это то, что работает поверх грин
>тредов:
Тред это наименьшая единица исполнения команд и в го это горутина. Поскольку горутины управляются рантаймом го, а не ос то это самый обычный грин тред. А то что там в низу, рантайм создаёт свои Грин треды на которые мапит горутины, это особенность конкретной реализации.
>А если мне нужно выполнить работу только на двух ядрах, потому что они мощные, а остальные слабые (Big little architecture)? Рантайм будет таким умным, что догадается об этом или как?
В обычной джаве у тебя будет пара нативных потоков которые молотят как не в себя и планировщик ос должен понять, что надо бы этих ребят перевести на big ядра.
Йеп, это на обычных потоках, а как на зелёных непонятно (мне по-крайней мере)
А понял, что ты имел ввиду. Я имел ввиду что если использовать для алгоритма больше тредов чем больших ядер, то тогда сработает закон Амдала и мы получим падение производительности из-за вовлечения медленных ядер в работу
p.s. конечно если мы говорим про алгоритм без IO операций
У тебя странное написано.
Видите, господа, какая путаница возникает, когда у вас треды поверх тредов?
Если ты запускаешь код в зелёных потоках, то когда у тебя планировщик увидит, что первый тред уснул, он сохранит его состояние до того, как он проснётся, а тем временем загрузит второй тред, который не спит.
Супер, спасибо, я понял теперь. Но чем это поведение отличается от использование обычных тредов? Я тоже могу создать 10 потоков и когда один уснет, то другой начнет выполнятся на физическом CPU, которое ранее было занято тредом, который уснул.
Хм, это видимо аналог корутин в котлине. Такая же идея, что можно создать миллион корутин, кинуть туда какие-то задачи и идти пить пиво. При этом реальных тредов будет штук 20 существовать и штук 8 работать (по количеству физических ядер) единовременно.
Окей, если зелёные треды это как корутины, тогда я понимаю в чем смысл их использовать.
>в то время как джаве тебе всё равно надо ебаться с бойлерплейтом создания тредов.
.parallelStream() ?
Ты на ходу сочиняешь правила и терминологию.
Я тебе процитировал авторитетный источник, но, тебя даже это не останавливает.
>в низу
Русского языка лучше выучи.
да и ладно, найду новую
Был бы я джавистом, я бы должен был это знать, так ведь?
>Опять шарподауна обоссали на его же высерах. Это уже не классика, это уже теорема.
Опять ты вылез, болезный? Это всё не отменяет того, что Task.Run и штуки типа Task.WhenAll короче, чем аналогичные штуки с фьючерами в джаве.
И опять же, если ты хочешь спорить, пошли в холивар тред.
С чего ты взял, что краткость сама по себе ценна?
Шарп - мусорный язык. С кучей "оптимизаций" на каждый пук.
Нормальных людей воротит от такого говна.
Плюс - этот стойкий запах микрософта с изрядным душком дельфи ничем не перебить.
>Task.Run и штуки типа Task.WhenAll
CompletableFuture.supplyAsync() и CompletableFuture.allOf() ? Ну на несколько символов короче, да, тут не поспоришь
Да на реальных проектах какой только низкопроизводительный кал не увидишь, но почему-то именно этого нет.
Результат - Future, который ждёт выполнения всех Future, то же самое что и в решётках
Нет, в решётках Task.WhenAll(Task<T> []) возвращает Task<T[]>.
То есть я могу написать
Data[] result = await Task.WhenAll(smallTasks); и иметь массив их результатов, а в джаве тебе придётся собирать эти результаты руками.
Ну как правило, когда у тебя n тасок, это одна функция с разным инпутом.
Эти WhenAll и allOf не нужны, если у тебя 3 разных функции с разными типами, можно просто сделать им всем await/get().
Они нужны, чтобы цикл не писать.
>таким монструозным
дык это идея такая. Понапихано говна телега, и работать в ней не возможно блять.
Ебал Идейку. На 8ой яве кодирую на НетБинсе, на 17ой - Эклипс.
Я ж не соевое гомочмо лизать марку. Мне для работы, а не по тому что какой-то говноютубер нализывает очелло ЖопоБрайнзу.
>Я имел ввиду что если использовать для алгоритма больше тредов чем больших ядер, то тогда сработает закон Амдала и мы получим падение производительности из-за вовлечения медленных ядер в работу
С чего бы это? Лучше чтобы работали 2 больших и 2 маленьких ядра, чем только 2 больших.
На каком нибудь Интеле с турбобустом, может быть ситуация когда лучше 2 ядра на 4 ГГц, чем 4 на 2 ГГц. Но тут надо бенчмарки гонять. Гадать смысла нет.
>Ты на ходу сочиняешь правила и терминологию.
>Я тебе процитировал авторитетный источник, но, тебя даже это не останавливает
Мудило пиздоглазое, просто загнули определение потока, там будет ± то что я написал. А то какая-то книжка хер пойми кого, у него авторитетный источник.
>Русского языка лучше выучи
Всё,ты подебил.
Ебать вы смешные. Это точно темя про Java?
Если у вас на Java пара потоков жестоко конкурируют за процессорное время, то с вероятностью близкой к единице вы выбрали не тот язык для своих задач или решаете не те задачи.
В тех областях, где требухается Java, задач, которые постоянно грузят CPU, практически нет. Это задачи вычислительной математики. Там до сих пор живёт и здравствует Fortran и деды с большим индексом Хирша. Изредка туда пробиваются плюсовики.
И остальные по мелочи.
В обчных же приложениях многопоточость позволяет оптимально загрузить ядра и позволяет во многих случаях писать более простые приложения, когда часть работы за вас сделает ядро ОС. Но это явно не средство выжать из процессора максимум. Я имею в виду многопточность.
> бенчмарки
Да, на практике так. На уровне теории же большое ядро выполняющее за 1 секунду задачу лучше чем 1 такое же большое ядро и одно маленькое выполняющее задачу за 10 секунд.
Например задач 5 штук. На одном большом ядре они будут обработаны за 5 секунд. На большом и малом за 10 секунд, потому что одна задача пойдет в малое ядро и будет обрабатываться 10 секунд.
Это закон Амдала, применимый для параллельных алгоритмов без IO операций.
Иксперт, спокуха! Помимо вычисления 100500 числа Фибоначчи есть другие практические задачи, которые CPU intensive. Например та же криптография, или архивация, да тупо агрегация данных в памяти. Не все задачи которые грузятся проц числодробилки.
>На большом и малом за 10 секунд, потому что одна задача пойдет в малое ядро и будет обрабатываться 10 секунд.
Ты опять гадаешь. Планировщик может и будет перекидывать задачи с ядра на ядро. Когда первая завершится на большой ядре он перекинет туда вторую задачу но это не точно, но при этом у неё уже будет некий прогресс.
>Это закон Амдала
Закон Амдала совсем не про это.
> Например та же криптография, или архивация,
Это хуйня, а не задачи.
Если тебе надо шифровать или архивировать большие объёмы данных, то можно и нативным кодом это делать
https://stackoverflow.com/questions/71685564/native-library-loads-but-calling-native-function-throws-unsatisfiedlinkerror
> да тупо агрегация данных в памяти.
Часто приходилось делать?
> не про это
Он про то что если в программе есть последовательный участок, то общее время выполнения в параллельной системе этой программы не может быть быстрее выполнения этого участка.
Да, возможно моя трактовка его на ядра некорректна.
> он перекинет её с малого ядра на большое
Перефразировал как понял твою мысль. Разве такое возможно? На ходу выполнения перекинуть выполнение треда на другое ядро?
Какие ещё таск ран? Ты высрался про AsParallel(), который в джаве выглядит короче, как parallel(), и даже он не обязателен, ведь можно сразу любую коллекцию превратить в параллельный поток данных через parallelStream(), и тебя обоссали, показав аналог в джаве.
Хочешь быть обоссаным ещё и по таскам? Показывай код на петушарпе, который якобы на джаве будет длиннее.
Слитое, так нахуя ты ворочаешься?
>Разве такое возможно? На ходу выполнения перекинуть выполнение треда на другое ядро?
А в чём проблема? Планировщик останавливает тред, сохраняет состояние, восстанавливает на другом ядре, запускает тред. Это абсолютно нормальная ситуация, вот заставить его на одном ядре исполнять задачу, как раз требует специальных усилий.
Интересно какая потеря производительности из-за того, что нужно загружать из главной памяти состояние треда на другое ядро. Наверное небольшие.
Зачем нужен gRPC если есть кафка стрим?
Судя по вопросу, ты вообще не понимаешь, о чём говоришь. Поэтому объяснить вряд-ли получится.
Прошу прощения, это конечно не такая интересная тема, как сраться с шарпистами у которых есть await. Но попробуй объяснить, покажи свои познания.
Задай себе вопросы:
- Что такое gRPC?
- Что такое Kafka streams?
- Есть ли между ними что-то общее?
- Логично ли их сравнивать?
>Есть ли между ними что-то общее?
С помощью них можно обмениваться бинарными данными
>Логично ли их сравнивать
Ну ты же не знаешь какую задачу я выдумал под их использования. Для чего стоит использовать gRPC а для чего Kafka streams?
Так бинарные протоколы же нетрадиционные. Традиционно это жсоны перекладывать.
> если это не древние ресты
Так-то в любом случае интернет кабель бинарный. "Бинарный протокол" другое означает.
Ты вообще понимаешь, что для кафка стримов нужна ещё кафка, как минимум? А gRPC - это просто протокол.
Ты решил до слов докапываться?
Для чего стоит использовать gRPC а для чего Kafka streams? А,
> Ты решил до слов докапываться?
Так это ты какую-то хуйню высрать решил. Зачем-то высрал про сжатие, которое протокол не изменяет.
> Для чего стоит использовать gRPC а для чего Kafka streams? А,
Для чего нужен int, а для чего interface?
Тебе уже ответили, оболдуй.
А я вам и не звонил
Потому что без face'а как-то не очень
Ну хз, мы вот пишем поисковик по петабайтам данных на джаве, с многопоточностью, перемалывает байты только вжух
>деятели, как этот
Ну вот зачем ты так? Подумаешь лично мне конкретно жаба не нужна. Я вообще попал не на то направление что хотел, и мне остался последний курс перед выходом в мир. Программировать учусь для себя, чтобы в свободное время игры делать, чем в общем-то и занимаюсь. Алсо 8 лет музыкального образования, и 6 хуйдожки, так что мне в кайф делать арт и саунд. А копаться в вебе или легаси энтерпрайзе меня и за 300ккк не затащишь (максимум кнопки красить, но там средняя зп по региону).
>такие программисты не нужны
Да чего тебя трясёт то так? Все с чего-то начинали, в том числе и ты. Я задавал вопрос не с позиции что это неебаться сложно. Просто спросил, ибо что б не спросить, раз уже пишу в тред.
Кафка - это как RabbitMQ, а gRPC - это как REST, грубо говоря. Одно - это очередь, другое - протокол обмена данными. Кафка стримс - это вообще потоковая обработка, она не нужна для связи между компонентами.
Конечно можно использовать очереди для связи между компонентами, но для простых случаев это перебор, оверинжинеринг и андерперформинг.
А, ну раз ты просто случайный пассажир на нашем корабле, тогда ладно.
Про генерацию пароля - мне кажется, это элементарно вообще.
У тебя есть списки: буквы, буквы + цифры, буквы + цифры + знаки. Ты генеришь случайное целое число в диапазоне от 0 до последнего индекса списка, и получаешь очередной символ пароля. Список выбираешь в зависимости от выбранного типа пароля.
Конечно, можно не делать явные списки, а просто работать с кодами символов, они идут подряд. Но, мне кажется, тебе с явными списками будет проще.
>Кафка - это как RabbitMQ
Но кафка это журналируемый реплицируемый лог, а раббит это протокол AMQP.
>а gRPC - это как REST
А почему тогда там соединение не сбрасывается как у сокетов и вместо вопрос ответ можно слать стрим ответов и обрабатывать стрим запросов?
>можно использовать очереди для связи между компонентами, но для простых случаев это перебор, оверинжинеринг и андерперформинг.
А если у меня лимит на соединение и мне нужно асинхронно получить ответы из нескольких внешних систем рестом, мне доставать кучку комплитаблфьюч и отправлять?
>Но кафка это журналируемый реплицируемый лог, а раббит это протокол AMQP.
Нет, кафка - это сообщения Avro, а рэббит - это брокер сообщений.
>А почему тогда там соединение не сбрасывается как у сокетов и вместо вопрос ответ можно слать стрим ответов и обрабатывать стрим запросов?
А ты думаешь там не сокеты используются?
>А если у меня лимит на соединение и мне нужно асинхронно получить ответы из нескольких внешних систем рестом, мне доставать кучку комплитаблфьюч и отправлять?
Да
>А ты думаешь там не сокеты используются?
Нет, а что они?
>Да
(( Я хочу отправить в разные топики и вычитав из них выполнять
>а раббит это протокол
Чувак, раббит - это не протокол. это кролик
>А почему тогда там соединение не сбрасывается как у сокетов
Я же говорил тебе - ты просто ничего во всём этом не понимаешь.
Тебе сначала надо разобраться, в чём разница между протоколом и системой, его реализующей, а потом уже вопросы задавать.
>случайный пассажир на нашем корабле
Так и есть, спасибо за понимание.
>генеришь случайное целое число
Дк не особо разница, выбрать рандомное значение из диапазона чисел, или из диапазона букв. Непонятно только как именно сделать этот выбор рандома. Писал такое в питоне через randint, а как на джаве да ещё и без интернета не знаю. ...или падажы, неужели импортируемые библиотеки вшиты в язык, и для импорта не требуют интернета? Во всяком случае не знаю как такое на жабе делать. Впрочем в гугле меня всё ещё не забанили, так что да.
Коллега, от твоих ответов зависит судьба проекта из двух трени и одного джуна уровня трени, завтра это может оказаться уже на проде, отнесись серьезней.
Дана ручка посчитать и ручка получить расчет, жмем посчитать и обращаемся в 8 разных сервисов рестом, запросы в сумме минут на 10, а ручка получить расчет вызывается раз в 30 секунд, пока не посчитается. Есть идея возвращать ничего, а когда посчитается вернуть сумму того что надо, реализовать это можно несколькими способами, какой сам выберешь?
Очевидно как только первый раз дернул ручку посчитать - кладешь результат в тайник в памяти и продолжаешь возвращать его пока не будет готов следующий результат, который ты опять кладешь в тайник.
https://stackoverflow.com/questions/20389890/generating-a-random-number-between-1-and-10-java
Интернет, конечно же, не нужен - это часть стандартной библиотеки.
Вообще, весь твой пример делается на стандартной библиотеке.
Поддерживаю вопрос
>пока не будет готов следующий результат
Но ведь можно отправить эти 8 запросов сразу асинхронно, это ведь сократит время расчета? Проблема только в том, что это 8 потоков из комон пулла, я конечно моку сделать бин с еще одним тред пуллом, но в арр их уже прилично. А сделать меньше я очкую, потому что по ощущением они все в работе в разных задачах. С другой стороны расчеты производятся ну раз 5 в день и выделять под них отдельный тред пулл жирновато... Коллега?
Дошло.
Я как-то упустил из виду, что эти вещи называются rest api handler.
Но, я бы заметил по этому поводу, что, на мой взгляд, это немножечко деградация. Ибо когда-то давно, ещё до появления node.js и до набега в индустрию полчищ долбоёбов, по-русски такие вещи так и назывались хендлерами. Но, видимо, зумерам современным инженерам такое непонятно.
Есть ли в NetBeans какой-то встроенный гайд/мануал доступный без интернета? Давеча сдавал экзамен по MySQL, так там некоторый синтаксис подсмотрел непосредственно на самом сайте через код элемента, да и встроенный мануал помог. Так что бы мне очень пригодился таковой, если имеется в NetBeans.
>доступный без интернета?
Ты имеешь в виду чтобы смотреть во время сдачи экзамена?
Насчёт NB - я его последний раз трогал лет 15 назад, примерно.
Но, я думаю, что там если что и есть (по F1) - то это подсказки по самой IDE, а не учебник по джаве.
Но, в любой IDE есть отображение JavaDoc - встроенной документации по классам, методам и т.п. из стандартной библиотеки, которые ты видишь в написанном коде. Например, тот же JFrame. Но, даст ли тебе это что-нибудь, я не уверен. В NB это отображается для выбранного объекта (где курсор) по Ctrl + Shift + Space. Или по правой кнопке, наверное, тоже должно быть в меню.
>ненужен NetBeans
Мне по нему сегодня сдавать экзамен в шараге. Иначе бы я к этому говну на пушечный выстрел не подошел бы.
З.Ы. Почему не применяется цвет?
Сам в ахуе. Благо при переводе из прошлой шараги годы засчитали так, что пошел на предпоследний курс (алсо мне так и так 2 года оставалось, так что ничего не потерял). Похуй, всего несколько месяцев этого цирка с конями осталось, если не завалю этот экзамен
>opaque
Уже и так стояло true.
Впрочем я выкрутился из ситуации добавив дополнительный Panel, и растянул на весь экран. Не думаю что кто-то реально полезет в код, во всяком случае надеюсь
Спасибо за помощь.
Ещё есть такой вопросик, а как применить к этому говну тему windows aero, в частности чтобы полоска со свернуть/закрыть была прозрачной аля пикрил?
> Эндпоинты
Однако же "ручка" это хендл или хендлер. Просто по смыслу.
А эндпойнт тогда уже "конец". Или даже хуец, лол.
>в этом контексте
Это не "контекст". Это просто значение.
А "контекст" - это, дословно, окружающий, сопутствующий текст.
Очевидные хэндлы же
Согласен с тем что жирновато, во всех смыслах.
С другой стороны чего ты мнешься как девочка, редко используешь - общий тред пул, боишься за производительность - смотри профайлером.
Нет
Хендлеры и раньше и сейчас называют обработчиками.
Как будто увидели глагол to handle (обработать) и перевели как существительное handle (ручка)
>>"ручка" это хендл
>>эндпойнт тогда уже "конец"
А bearer token у тебя это жетон медведетеля?
Как будто миллионы компаний не используют легаси
>Так джавистов же заменили молодые спецы котлинисты еще несколько лет назад, переписав все на котлин-убийцу джавы
Котлинисты уже соскуфились, а котлин уже протух. Так что теперь Go и gRPC. Колесо хайп-дривен-девелопмент сделало оборот.
>а котлин уже протух
Типа просто постепенно поутих энтузиазм и стали меньше использовть?
Или была какая-то громкая история?
Просто не хватило хайпа прорваться в мейнстрим. По моему опыту его сделали слишком гибким и люди в попытках использовать все фишки языка превращали код в не читаемое месиво.
Да, у меня такое же мнение. Именно - нечитаемое говно.
Причём, в отличие от той же Скалы - с не очень понятным профитом.
Вообще, это не "гибкость", это показатель плохой архитектуры.
Потому, что, как говорят умные люди, архитектура - это, прежде всего, ограничения.
Лозунг главного архитектора, кста
можно в резюме написать
Будешь не таким как все
>Типа просто постепенно поутих энтузиазм и стали меньше использовть?
Меньше хайпа, плюс в джаву немного улучшений завезли. Плюс то что хайп утих просто означает, что стали меньше переписывать существующие проекты. Но те что уже на Котлине, продолжают на нём пилить.
Ну, там есть удобная работа с монадическими конструкциями, например. Это очень большое дело. Есть нормальные литералы коллекций. Есть возможность делать развитые DSL. В котлине ничего этого нет.
И вообще, скала выглядит как достаточно продуманный самостоятельный язык (в отличие от котлина).
Серьёзный минус скалы в том, что Одерский и Ко её с самого начала позиционировали как полную замену джаве, как вещь в себе. А надо было - как дополнение. Потом они переобулись, где-то к версии 2.13, примерно, и начали петь другие песни, но, было уже поздно.
Короче - проблема скалы - в недостаточной интеграция с джавой, не позволяющая эффективно использовать скалу в гетерогенных проектах. А без этого она не нужна.
В котлине это сделано гораздо лучше. Но, котлин - безблагодатное говно, которое, кроме андроида (и внутренних проектов jet brains) нигде не нужно. Он, в общем-то, даже и полноценным языком не является.
>Но те что уже на Котлине, продолжают на нём пилить.
Это известная проблема.
Называется sunk cost fallacy. Можешь погуглить.
По русски это "ошибка невозвратных затрат" или "ловушка невозвратных затрат".
Я, например, этой зимой перестал так делать, и переписал один свой большой проект с перла на питон. Проект был не старый, года 3 всего. На перле был написан совершенно сознательно, но, потом выяснилось, что это себя не оправдало, и, при этом, затрудняет доработки.
Так вот - котлин - это сильно хуже, чем перл. Перл, хотя-бы, очень практичный и довольно забавный.
Как я тебе это объясню в рамках коммента на дваче?
Это вот как раз тот самый случай - если надо объяснять, то не надо объяснять.
Подрастёшь - сам поймёшь, лол.
Я уже говорил тебе, что ты очень предсказуем?
Это показатель невысоких умственных способностей, чтобы ты знал.
Выше - куча комментов, часть моих, часть нет - в которых написано, что не так с котлином. Если тебе всё ещё непонятно - значит не дорос.
И да, я рад, что ты принял мой слив.
Это было очень любезно с твоей стороны.
Теперь можешь проглотить.
>Это известная проблема.
>Называется sunk cost fallacy. Можешь погуглить.
>По русски это "ошибка невозвратных затрат" или "ловушка невозвратных затрат".
А нахер тебе переписывать работающий проект, с вполне нормального языка? У котлина нет никак фатальных недостатков: на нём удобно разработывать, поддержка ide и всех основных туловище есть, библиотеки есть и свои и все джавовские.
У котлина нет убер фишки, чтобы на него переходить в существующем джава проекте. Но и недостатков чтобы переходить с него на джаву, тоже нет.
Минус скалы, что Одерский хотел одной жопой усидеть на двух стульях. Он хотел, и better Java, и haskell for JVM. Как итог и то и то вышло не очень. ООП часть была переусложнена для среднего разраба, а функциональная часть была слабовата для хардкорных функциональщиков.
Помню когда учил скалу, натыкался на моменты когда нужно было явно писать типы и объяснение было, что система вывода типов не очень хорошо работает с ООП наследованием.
Да, всё так.
Ну, не знаю.
Вот, допустим, писали (фронтенд) на джаваскрипте.
Потом придумали кофе-скрипт. И довольно много на нём написали.
Было много хайпа. Учитиля и гуру учили и гурили.
И где он сейчас? И где те проекты?
А бэк живёт подольше. 20 лет - вообще не срок для энтерпрайзного проекта. Джава никуда не денется, как никуда не делся джаваскрипт. А вот насчёт котлина я совсем не уверен.
Ты думаешь, что народ всё бросит и побежит переписывать с Котлина обратно на джаву? Не будет такого. Только если жидбрейнс забросят Котлин.
Фронтенд другое дело, там за пару лет всё меняется и надо постоянно поддерживать код. Потому там переписать с кофе на тайп скрипт это ок.
Я могу в джава проекте сделать сервис на котлине и написать в рюземе что я джава/котлин разработчик вызвать его в контроллере написанном на джава и чтобы все это вместе работало?
Я могу сделать дто на котлине и передавать в джавовские сервисы и наоборот?
Вот отвечайте теперь, раз такие умные.
Вроде бы да? Там же туда обратно всё конвертируется под капотом если Kotlin/JVM, а не Kotlin/Native.
>Вроде бы да?
Зачем ты у меня спрашиваешь, я ни одной строке на котлине не написал, только стремлюсь накакать им в проект. Ждем опытного.
Еще интересует как работают корутины, они привязываются к основному потоку джавы или что вообще с потоками, жвм там их рулит сама
Да нет, на самом деле, я не думаю, что он куда-то денется.
Даже руби никуда не делся, и даже типа "развивается".
Но, у котлина есть одна очень серьёзная проблема - она называется "too much language". И чем дальше - тем больше, это идёт по нарастающей. Такое не бывает успешным в долгосрочной перспективе. Язык - для людей. И если он игнорирует человеческую природу - он исчезает. См. тот же руби, скалу, кложуру. Да тот же перл - где он сейчас? А ведь был популярнейшим языком в своё время. Или тот же C++ - сдулся на несколько порядков.
А джава - цветёт и пахнет. Потому, что простой язык. И именно поэтому мне не нравятся современные тенденции напихать в неё побольше разного говна.
Такое можно сделать даже на Clojure. Причём, несколькими способами.
И на любом другом jvm-языке, включая jruby и jpython.
А уж на котлине - без проблем вообще.
Про корутины - хз, я не залазил в эту клоаку так глубоко. Но, думаю, что этим рулит рантайм котлина. Который тебе придётся подвязывать к своему проекту, если ты будешь так делать. То же касается и любого другого jvm языка.
>The Kotlin plugin also bundles a Java to Kotlin converter (J2K) that automatically converts Java files to Kotlin. To use J2K on a file, click Convert Java File to Kotlin File in its context menu or in the Code menu of IntelliJ IDEA.
Ну все прод тобi пизда, я начинаю эксперемент
>Или тот же C++ - сдулся на несколько порядков.
>
То что в стандарты с++ несут всякую хуйню, это без_порно. Но никто не завставляет пользовать всю новую чушь. И по закону больших чисел некоторая часть "чуши" оказывается годной.
Сдулся С++? Это вряд-ли, просто он для решения специфических задач. Он не для всех. Это Си с классами и шаблонами. А ещё его синтаксис перекочевал в вашу Яву и Сишарп. Не в стиле Паскаля вы пишите, и не в стиле пролога. Если бегло издалека смотреть, Яву можно плюсами спутать. В первое мгновение.
Да можешь. Там могут быть тонкости типа вызова котлиновской функции не метода класса, а именно функции, но в целом все решаемо.
>просто он для решения специфических задач. Он не для всех.
Вот вот.
А был - для всех.
На нём делали всё то, что сейчас делают на джаве. Которую, собственно, и придумали, чтобы заменить это говно. И это получилось на все 100.
Это хорошо, но мне зададут вопрос: НАХУЯ ТЫ ТУТ НАПИСАЛ НА КОТЛИНЕ?. Что отвечать на это, есть какие-то аргументированные ответы (вариант для резюме и прост)0 не подойдет), я могу как-то козырнуть, что мол котлин делает Х лучше, чем джава, вот пруф?
А ты думаешь как я конвертил спринг, чтобы показать, что за 15 % стало меньше количество символов?
>>3008935
То что меньше кода пишешь?
spring-boot
https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/ConfigurationPropertiesTests.java
Жаба
3279 lines
94812 chars
2047 lines of code
Котлин
2161 lines (-34 😵
81549 chars (-14 😵
1816 lines of code (-11 😵
Напоминаю, этот обрыган так и не показал итоговый сокращённый код, хотя его ни раз просили за базар пояснить.
Дарю:
Maintaining poor legacy code, interpreting cryptic comments, and writing the same boilerplate over and over can suck the joy out of your life as a Java developer. Fear not! There's hope! Kotlin is an elegant JVM language with modern features and easy integration with Java. The Joy of Kotlin teaches you practical techniques to improve abstraction and design, to write comprehensible code, and to build maintainable bug-free applications.
"Это из аннотации Амазона к книжке The Joy of Kotlin, которую написал автор книги FP in Java. А ещё Рунар Бьярносон (который FP in Scala) тоже разродился книжкой FP in Kotlin. В общем - всё просто охуенно. Пока сам в это не нырнёшь, лол.
>меньше кода пишешь?
Это не пойдет, мне кабаныч пезды вломит, скажет и так на наши копейки идут работать только долбоебы такие как я, а ты еще котлин в него занес, теперь дурачков в команду искать станет еще сложнее. Тут нужно техническое обоснование, должно же оно быть, потому что писать часть кода на котлине только ради того чтобы строчек было меньше это тупо и отмазка что из-за одного сервиса из тысячи проект стал на долю секунды собираться быстрее не прокатит
Напоминаю, этот обрыган так и не показал итоговый сокращённый код, хотя его не раз и ещё один раз просили за базар пояснить.
Напоминаю, этот обрыган так и не показал итоговый сокращённый код, хотя его не раз и ещё два раза просили за базар пояснить.
Безопаснее, надёжнее, легче поддерживать, future proof - вот чем надо кормить кабана.
Не, ну безопасность - это основная идея котлина.
Остальное уже потом намотали. А исходным было null safety, контракты и вот это вот всё.
Цитата, возможно, неудачная. Надо было из предисловия в самой книге взять.
> А исходным было null safety
Да нихуя подобного. Ты их выступления вообще смотрел или просто из башки хуйню несешь?
Напоминаю, этот обрыган так и не показал итоговый сокращённый код, хотя его не раз и ещё три раза просили за базар пояснить.
Я вообще-то помню, с чего это начиналось давным-давно, задолго до v1.0.
А что они сейчас (или три года назад) говорят - это неважно.
>Безопаснее
это про нуллабл сейфти надо затирать?
>легче поддерживать
ну тут нет, теперь помимо джава разработчика нужен еще тот кто знает синтаксис котлина
>future proof
это еще что? кабаныч не дурак, он прочитал про голанг
Они это говорили как раз до v1.0. Где-то тут https://youtu.be/HE4yyPpUsy4?si=2Ga8ZZ7DNXn9sUq7
Мне щас искать впадлу, можешь потратить свои 50 минут)
Согласен. Как я ушел тред превратился в хер пойми что. Терпите, что ж.
Доклады шипилева глянь. Он про маняоптимизации часто затирает как раз.
Переходить на 17 при наличии 21 это преступление.
>много крутых фич для программистов
я не буду пользоваться рекордами, новыми свитчами, sealed классами. А больше там ничего в 17 нового нет, ну еще npe по перемееной. А в 21 вроде только грин потоки не?
Так а что "это" они говорили?
Я, обычно, не смотрю видео. Потому, что владею старинной магией чтения текстов. И вот, в каком-то из текстов я про безопасность и прочёл.
А, да то что эту фичу им предложили извне. И изначально ее даже не предвиделось. Но тааак она им понравилась. Подобное короче
> новыми свитчами, sealed классами
Вот это всё в 21 только из превью вышло.
А вот вошло:
🌟 Structured Concurrency - контроль асинхронности.
🔑 Scoped Value - гибкий ThreadLocal.
✨ String Interpolation - вставка переменных как ABC.
🚀 Unnamed Classes и Instance Main Methods - хелло-ворлд в одну строчку!
>Structured Concurrency - контроль асинхронности.
Надо будет глянуть что это, а я думал у нас и так есть котроль асинхронности комплитаблфьючами, видно это какой-то другой контроль, более расово верный. Все остальное выглядит как юзлес, разве что понять зачем мне Scoped Value
> И это получилось на все 100.
Я пишу на С, С++, C#.
Могу читать код на Java, но не пишу на ней.
Твоё мнение мне интерсно только с точки зрения статистики - в индустрии я 30 лет и забыл больше языков программирования, чем помню сейчас. Поэтому мне не интересно холиварить.
У меня так - С++ для души, C# - для прокорма. Конечно бы я мог найти высокооплачиваемую работу и для С++, но это не язык для зарабатывания денег. А вот Сишарп и, вероятно, Ява - это чтобы деньги зарабатывать. Ибо при одинкаовом вложении труда результат у Явы/Сишарпа достигается быстрее и проще, чем на плюсах. Напрягать мозги ради дяди - ой, да ну нвхуй.
>>Ты буквально на 10 % кода сможешь написать больше за год. Это тоже хуйня для кабана?
Может ему курсы слепой печати пройти, тогда он еще на 30% больше кода напишет, как думаешь?
>>попробую лучше с джавы 11 на 21 или 17 перейти
Это скучно, там ничего не ломается. Апни лучше спринг бут до 3.2, чтоб у тебя полпроекта отвалилась из за сломанной обратной совместимости.
Этот мусорный код на скорость разработки не влияет. Или ты прям 8 часов в день код пишешь и опшионалы хз что там еще сократишь в типичном сервисе тебя сильно тормозят?
Так довольно мало кода сокращается. И чем дальше джава развивается - тем меньше разница.
Выгода от его внедрения в бэкенд не превышает издержек на его изучение (не только себя, но и других разрабов).
Согласен. Мы в плену у жабы. Навсегда.
Да нихуя там не сокращается. Он ведь так и не показал итоговый якобы сокращённый код, че ты с ним разговариваешь?
Речь про ап с 2.х до 3.х или в 3.2 что-то дополнительно сломали?
public static void main — единственный способ запустить джава-программу.
>Maintaining poor legacy code, interpreting cryptic comments, and writing the same boilerplate
Все таки любят анальники перекладывать ответственность за свое говно на кого то другого. Неееет, это не вася-пупкин-пидарас наговнокодил - это все джава. Ну конечно.
Это копия, сохраненная 7 апреля в 01:42.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.