Это копия, сохраненная 5 мая в 02:12.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
>Самый главный кек это написанный лично Владом меседжинг на базе постгреса. Естественно это всё тормозит неимоверно и его пытаются разогнать добавляя новые ноды. Причем этот ЧСВшный мудак и слышать ничего не желает про кафку.
>Рест самописный на базе sparkjava.com
>Для работы с базой Влад написал библиотеку которая выполняет jooq в одной транзакции. Тот ещё Франкенштейн.
>Пробовали Котлин, и даже написали на нём пару сервисов. Но Владу он не зашёл, плюс плохо работал с Франкенштейном и его запретили для новый сервисов.
>Влад лично пишет код, периодически смотрит пул реквесты. Однажды пришёл в мой пул реквест и высрал своё особо ценное мнение.
>В целом очень гоняться за фичами, поэтому качество кода очень низкое. Плюс народ работает год - полтора и сваливает.
Ебаааать. Впрочем, что ещё ожидать от кодомакаки из UBS, выпустившейся из шараги н-цатого эшелона.
Наоборот же, the best practices, класс данных не должен наследоваться, это буквально структура без поведения.
> Приватный геттер
Можно, только что проверил. Нельзя создавать getFoo() когда у тебя уже есть val foo, потому что геттер и так автоматически генерируется для каждой переменной.
>Через енум - совершенно точно НЕ надо.
Бля, какой енум, какие статик константы для референсных данных?
>А как это надо было реализовать, по-твоему?
Ну, есть же на худой конец стандартный java.util.Currency. Если уж так хотелось вписать своё имя как создателя, могли бы хотя бы тупо оттуда реализацию слизать:
...
private static ConcurrentMap<String, Currency> instances = new ConcurrentHashMap<>();
private static HashSet<Currency> available;
...
>Рест самописный на базе sparkjava.com
Самописный - значит не на спринге или что?
И что не так со спарком?
Так ты покажи результаты лучше, если это не предел. Там +-10 тулзов в топе, и все они имеют один и тот же результат в 7 миллионов с разницей в пределах погрешности. Объяснение этому феномену уже дали, это jit.
Весёлый человек. Всегда хотел быть таким, только наоборот, как рыцарь зла и рыцарь добра, оба весёлые, но первый делает хуйню, а второй нет.
>Так ты покажи результаты лучше, если это не предел.
Ну смотри, ты написал:
>>> предел железа на 7 миллионах ответов в секунду
Каких-ответов? Допустим, если у тебя процессор 3 ГГЦ и одна инструкция занимает один такт (для простоты возьмём 1 клок = 1 операция, хотя на самом деле сейчас это не так и десяток параметров влияет на скорость исполнения инструкций, может быть и десяток тактов, а может быть и несколько инструкций за такт).
Что в остатке? 3 000 000 000 / 7 000 000 = 428 инструкций.
Оппять же, это не ответы, а от балды прикинуте количество инструкций. Вот в них ты и должен суметь поместить ответ.
И всё это при условии что сеть, железо и операционная система не вносят свои задержки.
И того хуя, который ко всем доёбывался.
Как-то необычно тихо стало.
И градус ебанизма снизился до приемлемых значений.
Ну так посмотри сурсы бенчмарка течемповереда, какие там ответы. Не важно, сколько там инструкций на один ответ тратится, суть в том, что по диаграмме явно видно упирание в предел на 7 миллионах в самых разных языках.
>Самописный - значит не на спринге или что?
Там поверх него накручена авторизация и ещё некоторые плюшки.
>И что не так со спарком?
Кроме того, что Спарк это просто сахар поверх джетти - ничего.
>Спарк это просто сахар поверх джетти
Да, я уже почитал.
Джетти - вещь.
Я на нём делал разное, когда слова REST ещё даже в проекте не было, лол.
Нахуя, а главное нахуя?
Регулярками парсят данные.
Чтобы затем с ними работать не как с текстом, а как со структурами.
А в чём смысл вопроса? Ты сомневаешься в практической полезности этого колдунства или что?
Ты забыл, что у каждого процессора куча ядер, а в сервере может быть куча процессоров.
>Ты забыл, что у каждого процессора куча ядер, а в сервере может быть куча процессоров.
Знаю. И ждал этого коммента.
Ну умножай на общее количество ядер и поправочный коэффициент.
Можно ещё несколько сетевух поставить.
>И девки из бухгалтерии
Ну возможно когда тебе будет 45+ они в твоих глазах станут девками, на перспективу думаешь
https://robota.ua/ru/zapros/java-programmyst/kyiv - 121 вакансия
https://jobs.dou.ua/vacancies/?category=Java - 46 вакансий
Advent of code входные данные.
Причём тут хуев?
Я понимаю, что вопрос глупый, но он есть
Я знаю, что есть как минимум одна игра на java, однако у меня возник вопрос, где происходят вычисления и через что это может быть отрисовано.
Если кратко: Работа любого интерпретора( а виртуальная машина и есть интерпретатор, но в случае java это байт-код) занимает больше времени, чем аналогичная работа напрямую на железе(это даёт прирост в скорости одинаковых алгоритмов на c/c++ в сравнении с java/python/js/p4gl...). Я правильно понимаю, что для большого числа вычислений ради скорости используют нативные методы? Да и для работы с видеокарты тоже используются нативные методы, которые реализованы на си с использованием каких-либо vulkan/opengl?
>есть как минимум одна игра на java
Есть хуева туча игр на java. В том числе в стиме.
Как это отрисовывается - долго рассказывать.
Сама по себе джава вовсе не медленная. Стартует медленно, это да. А потом - всё ОК.
Работа с видеокартой в наше время всегда происходит через драйвер. Который тоже многослойный сам по себе. И нет вообще никакой проблемы дёргать нативные C/C++ библиотеки из джавы. 3d графика в OpenGL на джаве была ещё хуй знает когда вообще.
На практике сейчас игры делают на libGdx.
Пиздуй по ссылке и наслаждайся:
https://libgdx.com
> И нет вообще никакой проблемы дёргать нативные C/C++ библиотеки из джавы.
Фишка в том, что нативные C/C++ библиотеки можно дёргать из всего. Практичкски любой язык это позволяет.
Но чего бы тогда не писать игру на том же языке, на котором написаны эти библиотеки?
>Но чего бы тогда не писать игру на том же языке, на котором написаны эти библиотеки?
А сам-то как думаешь, сынок?
Или ты реально считаешь всех тех, кто пишет на джаве + libgdx глупее себя? Тебе годиков-то сколько? На ассемблере писал когда-нибудь? А opengl на си дёргал?
>А сам-то как думаешь, сынок?
Папа, я думаю что ты не пишешь на плюсах.
>На ассемблере писал когда-нибудь?
Какой конкретно тебя интересует? Для какой архитектуры?
>opengl
Не интересуюсь 3D графикой.
Это всё фигня. Деньги можно заработать, если есть мозги.
Но, как раз с этим-то у тебя и не очень.
>Но чего бы тогда не писать игру на том же языке, на котором написаны эти библиотеки?
Редуцируя твоё утверждение, мы приходим к тому, что писать игры (и вообще что либо) нужно исключительно в машинных кодах (т.е. даже не на ассемблере). Что есть натуральный кретинизм. Что и требовалось доказать.
прежде чем отвечать - подумай как следует
Если не хочешь переезжать и тебе ОК 1С, то почему бы и нет?
> Java
> Интерпретатор
> Занимает больше времени чем аналогичная работа на железе
Во-первых, жаба использует JIT, который компилирует байт-код в машинные инструкции, тем самым практически нивелируя разницу между жабой и С++. Хотя при холодном старте программы JIT потратит какое-то время на компиляцию.
Во-вторых, любой код выполняется на железе. Хоть пайтон, хоть луи, хоть баш. Разница между интерпретируемыми языками и компилирируемыми состоит в том, что первые не оптимизируются компилятором, а вторые оптимизируются. Что такое оптимизация компилятора? Например, банальное удаление инструкций из кода, которые ни на что не влияют. В интерпретируемом языке каждая инструкция будет выполнена. В компилируемом только необходимые. Тоже самое касается циклов, тоже самое касается условий и так далее. Фактически компилятор переписывает твою программу в другую программу, которая будет делать самый минимум операций, чтобы достичь того же результата. Это и есть секрет почему компилируемые языки быстрее интерпретируемых, а не то что у одних инструкции выполняются на железе (CPU), а у других нет.
В-третьих, если не хватает производительности на жабе, то действительно могут писать бинарники на С и их вызывать через Java API в жабовской программе. Но здесь ровно та же история, что до этого. Ты можешь запустить на С компиляцию с аргументом О1, что даст тебе сверх-оптимизированный код для текущей платформы (и возможно не корректный, так как это уже игра в угадайку со стороны компилятора). На жабе ты настолько оптимизированный код не получишь.
>это и есть секрет
Такое слово как "оверхед" ты когда-нибудь слышал, теоретик мамкин? Интерпретируемый кал медленнен именно из-за него, а не из-за маняоптимизаций. Спарсить строку инструкции, превратить в машинные инструкции и отправить эти инструкции процессору медленнее, чем отправить инструкции процессору сразу.
Нет, неправильно. Нативные методы медленные и каждый вызов занимает микросекунды, а джавовский код легко превращается в нативный житом. Используют их из-за того, что а) уже много кода написано нативно и нет смысла его переписывать на джаву б) мамкины теоретики на менеджерах, вместо того, чтобы спросить у умных людей, заставляют программистов страдать и писать код на нативной говнине, руководствуясь своими личными манявыводами о скорости нативного кода
Расскажи нам, как ты будешь JIT'ом работать с видеокартой.
И чувакам из libgdx тоже расскажи, а то они там ебутся с нативным кодом, как дурачки.
Ну это проблемы реализации. В теории ничего не мешает связать джаву и видеокарту напрямую. Вот вальхалла же как раз про что-то в этом роде.
А нет, перепутал, это панама про это.
Что значит, блять, "связать джаву и видеокарту напрямую"?
Ты вообще понимаешь, что такое джава и что такое видеокарта?
Вот с помощью libgdx и подобных вещей их и "связывают".
Была, в своё время, официальная Java3D. Ставилась как расширение виртуальной машины. Т.е. работало это на уровне VM. Но, оно так толком не взлетело. Хотя, даже что-то большое и энтерпрайзное на ней делали. Типа визуализации большого склада и т.п.
>Деньги можно заработать, если есть мозги.
А с чего ты решил, что ты богаче? Может у тебя машина новее/мощнее или там... домик в Испании, которого у меня нет?
> мы приходим к тому, что писать игры
Не, моё утверждение гораздо проще - игры писать не надо, их уже написали столько, что даже половину не пройти, если только играть.
И ещё мы приходим к тому, что кто-то всё равно будет писать игры, поэтому у анона всегда будет во что поиграть.
Ах да, тред же про Java. Она хороша там, где похуй на потребление ресурсов, но важны малое время разработки, безопаность и полный контроль над ошибками.
> Папа, я думаю что ты не пишешь на плюсах.
Писать на плюсах это все-равно что жрать с помойки - хуйпойми какой синтансис разбавлен "вкусняшками" std++, qt, boost, а компиляторы это вообще отдельная песня.
Хочу посмотреть на ебальнички дурачков связавших свою жизнь с технологиями M$, когда такое покажет студия, венда, ms sql, azure.
>>32852
Ребяты, С++ это такой ассембьер на стероидах с блэкджеком и шлюхами.
Как бы в соседнем треде не изъёбывались с новомодными стандартами и синтаксическим сахаром, но если программист не представляет какой код ему скомпилирует компилятор, то абсолютно до пизды на его знание стандартов - он хуёвый программист.
А вот про другие языки так сказать нельзя. В других языках это знание не обязательно (но приветствуется).
>>32477
>>32510
Мало того что куча игр на джаве, так еще больше игр на Юнити, который C#, который по сути та же джава и это почему-то никого не смущает.
Если кратко, то после старта программы виртуальная машина обнаруживает часто используемые участки кода и держит кэш его машинного представления, по сути в моменте являясь программой на С.
Посмотри например как быстро работает Rust (игра) - вот это игра на виртуальной машине.
Да да оптимизировать все goto как вы любите и кичиться этим "какой я крутой программист".
На самом деле был охуенный фремворк. Но он уже помер вроде. На замену Javalin.
Mah respectung. Мастером себя не считаю, но хватило силушек забыдлокодить регулярку чтобы детектить один спецефический формат скушек.
Аналитик данных в одном красном банке (не том, что первое место в рейтинге работодателей, скорее, на последнем), стек - python (pd + np + sns + scipy) / excel (vba / прочая ересь) / sql. Хочу свичнуться в джуву, начав с самых низов (и потеряв процентов 50 в ЗП) - ибо тут развития нет, да и загорелся что-то мыслью.
Штудирую Хорстмана - "базовый курс java se 8", потом в планах - Крейг Уоллс : "Spring в действии". Думаю, для попадания на стажировку достаточно.
Сегодня наткнулся на рекламу Javarush, где со всеми скидками предлагают год за 30% от фулл прайса. Как считаете, аноны, оно того стоит? Или лучше не терять время и деньги, идти тем путем, что распланировал выше? Спасибо)
Конечно покупай, лучше всего кредит возьми под это потребительский))) Пото станешь 600к на изичах после курсов зарабатывать)))) Сам после такси сразу на сеньку устроился))))))
Курсы редко стоят своих денег. Я бы продолжал двигаться в том направлении, что ты выбрал + начал бы выполнять слитые тестовые задания на Java разработчика в Sping, чтобы применять теоретические знания на практике.
Имхо быстрее будет взять питоний джанго/фласк/фастапи и попробовать перейти в бэкенд внутри компании.
Не, компания деревянная в плане разработки - своей команды магов-программистов нет, всё исполняется на аутсорсе. Поэтому развития в компании и не вижу.
Спасибо за ответы, буду придерживаться прежнего пути + добавлю практики из заданий с собесов
У джавараша стоит покупать только курс по мавену. И Collection API. Тонкостей оптимизации конструкций вроде linkedList += ("Hello, world") тебе нигде больше не объяснят. А на собесе спросят.
Вот хороший пример, как это делается:
https://github.com/CaffeineMC/sodium-fabric
Это не пример хорошего кода и практик, тупая чсв пизда на разработчике в последнее время только гадит, практически не улучшая или даже ухудшая перформанс и ломая совместимость со всем, с чем только можно, но это пример того, как в принципе можно рендерить очень много и сложного на чистой джаве.
>>Аналитик данных в одном красном банке
Красный это типа подментованый? втб что ли?
>>Хочу свичнуться в джуву
Внутри конторы свичайся. Пока мидлом не станешь будешь наравне с тысячами таксистов после курсов биться за вакансию.
>>Думаю, для попадания на стажировку достаточно.
ты студент чтоб на стажировку попадать? алгосы еще порешай, чтоб не обосраться на конкурсе.
>>Как считаете, аноны, оно того стоит?
знание языка это от силы 20% из того что тебе надо для вката в джаву.
>>33206
>>компания деревянная в плане разработки - своей команды магов-программистов нет, всё исполняется на аутсорсе.
фарми стаж пока учишься, без опыта ты нахуй не нужен даже с знаниями. С годом опыта уже сможешь дойти до техсобеса.
Прочитай шапку, там вся инфа.
Затем, что целевые цифры могут быть приемлемы для того, кто их нарисовал, но вызывать налезание глаз на жопу у всех остальных, или у некропукашеров, или у триллионзапросоввнаносекундщиков, или у 360-герцмониторщиков.
Тогда это косяк манагера или кто там рисовал цифры в ТЗ. Тратить время на оптимизацию если по ТЗ всё ОК это тратить время в пустую задерживая сдачу проекта.
Нахождение программистов в капиталистическом рабстве и невозможность ими высрать хоть какое-то своё мнение на большинстве оплачиваемых должностей вообще много чего портит. Я говорю про подход, зачем нужна сильная оптимизация.
Я понимаю тебя и уважаю твой подход. Тем не менее при разработке ПО нужно выбирать или качество или скорость разработки. И то и другое задаётся техническим заданием, согласовывается всеми сторонами работы и если с той стороны оказался некомпетентный человек, то это его проблемы. Если его проблемы это ваши проблемы (например, при разработке продукта), то тогда с вашей стороны менеджеры должны вписать требования к качеству.
В общем, когда разработчик на стендапе докладывает о работе, которой его никто не просил заниматься и при этом его таски никуда не двигаются, это повышает шанс того, что сроки будут профуканы, клиенты уйдут в другое место и вся команда не получит премию/пойдет на улицу.
Так я и не спорил со всем этим. Ты сказал, что нет смысла пересекать планку по оптимизации, но во-первых само по себе наличие планки не совсем правильно и скорее артефакт строгих сделок чем что-то к чему надо стремится, во-вторых большинство высеров про ненужность оптимизации идут в ответ на претензию в использовании медленных подходов которые и в скорости разработки никакого преимущества не дают и просто являются тупыми оправданиями.
> во-первых само по себе наличие планки не совсем правильно и скорее артефакт строгих сделок чем что-то к чему надо стремится
Не стремится, но использовать как индикатор нужно/не нужно выделять время на работы по оптимизации решения.
> во-вторых большинство высеров про ненужность оптимизации идут в ответ на претензию в использовании медленных подходов которые и в скорости разработки никакого преимущества не дают и просто являются тупыми оправданиями
Они дают преимущество в скорости разработки, потому что разработчик пишет как хочет один раз алгоритм и идёт дальше. Он не тратит ни секунды времени на то, чтобы обдумать как написать алгоритм оптимизированным и это есть экономия времени.
Если ты решал когда-нибудь задачки на литкоде, то тебе должно быть это знакомо когда придумываешь какой-то алгоритм, так чтобы он просто корректно работал, получаешь результаты перформанса и видишь, что даже в топ 50 % не попал. Напрягает мозги, и через 30 минут рождаешь алгоритм, который входит по перформансу в топ 10 %.
Вот эти 30 минут помноженные на каждую фичу за год просуммируются в недели работы. Никакой проджект менеджер подобное не может позволить разработчику. Поэтому не важно оптимизированный или не оптимизированный алгоритм был написан, главное что он корректный, что он был написан быстро и что он попадает в требования по перформансу. Это оптимальный подход в разработке коммерческого продукта.
> Не стремится, но использовать как индикатор нужно/не нужно выделять время на работы по оптимизации решения.
Есть ещё такая вещь как последствия изначально неверно сделанного вывода. Часто нельзя руководствоваться планкой, т.к. ещё никаких результатов цельной работы программы нет, а алгоритмы уже пишутся, и если будет написано говно, оно будет вонять вечно.
> Они дают преимущество в скорости разработки, потому что разработчик пишет как хочет один раз алгоритм и идёт дальше. Он не тратит ни секунды времени на то, чтобы обдумать как написать алгоритм оптимизированным и это есть экономия времени.
> Если ты решал когда-нибудь задачки на литкоде, то тебе должно быть это знакомо когда придумываешь какой-то алгоритм, так чтобы он просто корректно работал, получаешь результаты перформанса и видишь, что даже в топ 50 % не попал. Напрягает мозги, и через 30 минут рождаешь алгоритм, который входит по перформансу в топ 10 %.
Я скорее про более глобальные выборы, что не суммируются и прошивку человека, сразу задумывающегося про комплексити и долбоёба, шлёпающего поиск по еррей листу вместо хешмапы. При выборе языка нет оправдания "зато нашлёпаим быстра)))" скриптопараше, и в любом случае время на выбор языка тратится. Когда человеку говорят поменять лист на хешмапу, не надо копротивляться за маняскорость разработки и заявлять про то, какая ты верная псина своему кабану и как много фич успеваешь нашлёпать, или ещё чё-нибудь нерелейтед придумывать, а просто произвести оптимизацию дела 5 секунд.
> Вот эти 30 минут помноженные на каждую фичу за год просуммируются в недели работы. Никакой проджект менеджер подобное не может позволить разработчику. Поэтому не важно оптимизированный или не оптимизированный алгоритм был написан, главное что он корректный, что он был написан быстро и что он попадает в требования по перформансу. Это оптимальный подход в разработке коммерческого продукта.
Ну и нахуй тут эти передёргивания? Неделя в год не стоит умножения скорости в десяток раз? И я уже говорил если т.н. бизнес требует здесь и сейчас и ему неделя не стоит, это проблема самого подхода бизнеса, когда программистов заставляют делать хуйню, и это не оправдание по теме.
> Не стремится, но использовать как индикатор нужно/не нужно выделять время на работы по оптимизации решения.
Есть ещё такая вещь как последствия изначально неверно сделанного вывода. Часто нельзя руководствоваться планкой, т.к. ещё никаких результатов цельной работы программы нет, а алгоритмы уже пишутся, и если будет написано говно, оно будет вонять вечно.
> Они дают преимущество в скорости разработки, потому что разработчик пишет как хочет один раз алгоритм и идёт дальше. Он не тратит ни секунды времени на то, чтобы обдумать как написать алгоритм оптимизированным и это есть экономия времени.
> Если ты решал когда-нибудь задачки на литкоде, то тебе должно быть это знакомо когда придумываешь какой-то алгоритм, так чтобы он просто корректно работал, получаешь результаты перформанса и видишь, что даже в топ 50 % не попал. Напрягает мозги, и через 30 минут рождаешь алгоритм, который входит по перформансу в топ 10 %.
Я скорее про более глобальные выборы, что не суммируются и прошивку человека, сразу задумывающегося про комплексити и долбоёба, шлёпающего поиск по еррей листу вместо хешмапы. При выборе языка нет оправдания "зато нашлёпаим быстра)))" скриптопараше, и в любом случае время на выбор языка тратится. Когда человеку говорят поменять лист на хешмапу, не надо копротивляться за маняскорость разработки и заявлять про то, какая ты верная псина своему кабану и как много фич успеваешь нашлёпать, или ещё чё-нибудь нерелейтед придумывать, а просто произвести оптимизацию дела 5 секунд.
> Вот эти 30 минут помноженные на каждую фичу за год просуммируются в недели работы. Никакой проджект менеджер подобное не может позволить разработчику. Поэтому не важно оптимизированный или не оптимизированный алгоритм был написан, главное что он корректный, что он был написан быстро и что он попадает в требования по перформансу. Это оптимальный подход в разработке коммерческого продукта.
Ну и нахуй тут эти передёргивания? Неделя в год не стоит умножения скорости в десяток раз? И я уже говорил если т.н. бизнес требует здесь и сейчас и ему неделя не стоит, это проблема самого подхода бизнеса, когда программистов заставляют делать хуйню, и это не оправдание по теме.
> неделя в год
Недели в год. Помноженные на 10 разработчиков и уже будет полгода разработки потраченного на оптимизации того чего никто не просил оптимизировать.
> поиск по листу вместо хэшмапа
Я про это по сути и говорил. Если у тебя этот список используется для хранения 10 элементов, то абсолютно всё равно какую структуру используешь. Аргумент, что хэшмапа ускорит алгоритм на 50 % когда латенси 2 микросекунды интересен лишь в спортивном программировании, но не в коммерческой разработке.
> требование здесь и сейчас это проблема бизнес подхода
И как твои успехи в объяснении этой мысли кабану/менеджеру/тимлиду?
Я каждую финтех парашу еще по логотипу что ли должен знать?
Напиши прямо че за банк или вообще не пиши. А то ебать нагнал таинстсвенности "красный банк".
>>Недели в год. Помноженные на 10 разработчиков и уже будет полгода
10 недель это 2 с небольшим человеко-месяца, а не полгода. Просто одна фича из сотни ненужных.
К тому же в энтерпрайзе это не выбор между оптимизация vs фича, это выбор между оптимизация vs дунасинг.
> Недели в год. Помноженные на 10 разработчиков и уже будет полгода разработки потраченного на оптимизации того чего никто не просил оптимизировать.
А если подсчитать, сколько все жители планеты стоят на светофоре...
> Я про это по сути и говорил. Если у тебя этот список используется для хранения 10 элементов, то абсолютно всё равно какую структуру используешь. Аргумент, что хэшмапа ускорит алгоритм на 50 % когда латенси 2 микросекунды интересен лишь в спортивном программировании, но не в коммерческой разработке.
Ну ты даун значит, что сказать, раз копротивляешься за говнокод из-за своей спеси.
> И как твои успехи в объяснении этой мысли кабану/менеджеру/тимлиду?
Может по делу что-то высрешь?
Дауну уже объяснили, что всё что он высирает вытекает из того, что его кабан тупое дегенеративное хуйло, а он рабская скотопидорашка, которая делает всё чтобы побольше фич ему запилить, и что все аргументы основанные на этом никакого отношения к теме необходимости оптимизации и программирования в целом не имеют, но он продолжает талдычить одно и то же, барин сказал, барин сказал. Энтерпрайз головного мозга, хули.
>Сап двач, сегодня я пришёл к очевиднейшей и непоколебимой истине вселенского масштаба: оптимизация не нужна. Вот мой аргумент: мой кабан сказал, что оптимизировать не надо.
А зачем?
Нихуя себе аргументированный ответ энтерпрайз господина.
Смотрю на твою картину и вспоминаю что ноги Windows NT растут из VAX и OpenVMS.
Интерполирую в "Все на VAX, ибо NT это мутировавший VAX".
Ни к чему, если уж нужен действительно продвинутый инструмент, есть божественная скала.
Там больше вроде OS/2 чем VMS.
Жвт токены, корсы, csrf.
Только в оф доку не надо слать. Она большая, много лишнего и примеры такие себе.
Эти задачи только на меня одного. Общий бэклог я не знаю какой.
>>34511
Тимлид, который накидывает следующую порцию после того как сделаю текущую. Пока делаю текущую появляется ещё парочка в бэклоге. Молодой продукт - горе разработчику. Я бы хотел как работники банка сидеть на каком-то древнем легаси и пилить одну тачку в месяц. Но я работаю на технологическом острие в моей заднице в молодом стартапе.
Просто на созвонах говоришь что "задача в процессе, пока разбираюсь" или "жду ответа от другой команды, пока не приходили". У нас так полкоманды делает.
>Эти задачи только на меня одного. Общий бэклог я не знаю какой.
Ничего себе у тебя команда. Вы никогда общий бэклог не просматриваете, не грумите?
Смотрим, но достаточно редко, чаще всего я сам выбираю себе из него задачи + выбирает тимлид. На планинге задачи тимлиду засовывается в спринт + пара моих задач если лид считает, что его задач мало.
Затем, чтобы получить лучший язык по сумме всех качеств, и просто лучший по возможностям и выразительности.
А причём тут я или тот кто спрашивал про изучение джавы вообще?
Два блока вниз.
Учи сам язык, спринг бут, мавен/грэдл, гит и старайся как можно быстрее начать работать где-угодно чтобы нарабатывать опыт
Сделано, что дальше?
Ни в чём. Говно нахрюки.
>>3037091
Судя по тому как шарподауны ежедневно разрываются у нас в треде на ровном месте, именно их нервы попорчены, и я даже знаю чем. ГЕТСЕTNНNТ
если профильная вышка - учи алгосы + сисдиз и вкатывайся в скотомяс на большие сотыги
Тем, что под кнопочкой может находиться любая взбредшая в больную голову идеи команда вместо слин инсталла, ну или взбредшая тебе в голову, если ты настроишь это.
"Обратите особое внимание проблемам при работе в конкурентной среде (1000 RPS по
одному кошельку). Ни один запрос не должен быть не обработан (50Х error)"
Запросы сохранять в кафку, а потом из кафки их забирать?
Классическая "экзектли ванс",сначала пишешь в базу,потом из базы пушишь,на успешную фиксацию от брокера вешаешь колбек на удаление из базы, ещё идемпотентный режим на продюсере включи чтобы о дублировании при ретраях не думать
Это откуда? Какое-то тестовое на работу? Дай ссылку. Жажду вкатиться.
Браток, можешь все таки рассказать? Вот хочется что-то выучить, кроме джавы. Но не хочется учить и потом никогда не использовать.
Из того что я сам представляю. Ну это
1. Жс и тс с фреймворками. Ну фрон для бека мочь написать. Но фулстеком быть не хочется.
2. Котлин. Есть вакансии где часть сервисов на котлине. Но выглядит, как просто свистоперделка.
3. Питон. Ну это для сиайки вместо баша использовать или руками запустить скрипт на виртуалке или на локальном линуксе. Такие кейсы были у коллег, но у меня пока не было, чтобы нагугленного скрипта баша не хватило.
Первое можно, а вот 2 и 3 совершенно юзлес навыки.
Бесплатный граальВМ сосет у хотспота.
>@Transactional это спринговское понятие или нет?
Сейчас уже добавили и Jakarta EE.
>>38935
>Если транзакция валится ее нужно роллбекнуть,а ведь не для всех операций можно сделать обратную. Мы ведь не можем вешать жту аннотацию на методы где внутри не происходит доступ к бд. Как это работает?
Это работает, только для тех операций которые поддерживают JTA. Обычно речь идёт только о базах, но может быть и меседжинг который подтверждает получение сообщения.
Не знаешь в каком классе происходит проверка на "поддержку jta"? И что если не поддерживает,просто не создаётся прокси?
Kommentarii na dvache tozhe nado pisat na angliyskom yazike.
Драйвер реализует поддержку XAResource, и тогда JTA может управлять транзакциями. https://www.progress.com/tutorials/jdbc/understanding-jta
Херня какая-то. Не могли петшоп потестить и убидится, что постгре сосёт у оркала, а на джаву вообще похер.
Комментарии на любом языке пишутся. Это названия классов и методов на производном английского.
Ты пупуня
Давай,таску на тебя перевел
Здравствуйте, а какие преимущества Java перед C# в 2024 с точки зрения разработчика?
Дохуя. Система сборки, меньше бойлерплейта (с лобком только правда), скорость, библиотек много, майнкрафт, обратная совместимость, ещё туева хуча всяких более мелких вещей, которые записаны в моей пасте, от которой шарподебилов жопа на луну высылает, но которая у меня на компе, а я с телефона печатаю щас.
Но, как тебе уже сказали, иди нахуй, порвакатор. Для языкосрачей отдельный тред есть.
Я не могу. Надо распарсить аргументы функции из java сурс кода. Ту часть что между скобками. При этом аргументом может быть строка, символ, обычное число или переменная. Строки могут быть с конкатенацией и аргументы могут быть на нескольких строках.
Какая-то наркомания, хотя не звучит как что-то сложное. Проверяешь типа аргумента и засовываешь его в соответствующий парсер если я правильно понял проблему
Закинул в бесплатную чатгопоту, он расписал вроде. Завтра на работе буду пробовать. В твоей помощи я НЕ НУЖДАЮСЬ.
>А какие еще компании помимо Тинькофф начали переходить на сишарп с джавы?
При Олеге такой хуйни не было.
Жавистов уже который год не могут под свой днищебюджет найти, вестимо. Не пойму только, почему они думают, что с шарпом такого не будет. Днищебюджет он и в Африке дно, даже шарпомухи на такое говно вряд ли сядут.
То что у них появились проекты или сервисы на шарпе значит что они от джавы отходят?
У них до сих пор куча конф и блогов по джаве. На Хабре ведут дайджест по новинкам джавы.
А вот то, что озон именно переписывал огромную часть логики что была на шарпе на го, они сами много раз писали.
Пришёл я к такому выводу, прикидывая наилучшие входные данные для генератора чисел в распределении weibull-length и заметив, что на большом разрешении программка для семплирования подлагивает нехило. Решил добавить небольшой бенчмарк, и оказалось, что сама генерация занимает тут считанные мгновения, а время в основном тратится внутри javafx.
Здравствуйте, преимущество в том что создатель языка не начал от него избавляться
https://www.theregister.com/2024/01/31/microsoft_seeks_rust_developers/
Создание сверточной нейронной сети (CNN) без использования сторонних библиотек с использованием картинки включает в себя несколько шагов. В данном примере я использую Java для простоты, но реализация без сторонних библиотек может быть сложной, особенно в реальных проектах. Пример ниже включает в себя один сверточный слой и подвыборку:
java
Copy code
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.Arrays;
public class SimpleCNN {
public static void main(String[] args) {
// Загрузка изображения
BufferedImage image = loadImage("path/to/your/image.jpg");
if (image != null) {
// Преобразование изображения в трехмерный массив
double[][][] input = imageToMatrix(image);
// Параметры сверточного слоя
int inputSize = image.getHeight();
int kernelSize = 3;
int numKernels = 2;
// Создание сверточного слоя
ConvolutionalLayer convLayer = new ConvolutionalLayer(inputSize, kernelSize, numKernels);
// Прямой проход через сверточный слой
convLayer.forward(input);
// Получение выходных данных
double[][][] outputs = convLayer.getOutputs();
// Вывод результатов
System.out.println("Outputs after convolution:");
for (int i = 0; i < numKernels; i++) {
System.out.println("Kernel " + (i + 1) + ":");
for (int j = 0; j < inputSize - kernelSize + 1; j++) {
for (int k = 0; k < inputSize - kernelSize + 1; k++) {
System.out.print(outputs[j][k] + " ");
}
System.out.println();
}
System.out.println();
}
}
}
// Загрузка изображения
private static BufferedImage loadImage(String filePath) {
try {
return ImageIO.read(new File(filePath));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
// Преобразование изображения в трехмерный массив
private static double[][][] imageToMatrix(BufferedImage image) {
int height = image.getHeight();
int width = image.getWidth();
double[][][] matrix = new double[3][height][width]; // 3 канала для RGB
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int rgb = image.getRGB(x, y);
matrix[0][y][x] = (rgb >> 16) & 0xFF; // Красный канал
matrix[1][y][x] = (rgb >> 8) & 0xFF; // Зеленый канал
matrix[2][y][x] = rgb & 0xFF; // Синий канал
}
}
return matrix;
}
}
// Класс сверточного слоя
class ConvolutionalLayer {
private int inputSize;
private int kernelSize;
private int numKernels;
private double[][][] kernels;
private double[][][] outputs;
public ConvolutionalLayer(int inputSize, int kernelSize, int numKernels) {
this.inputSize = inputSize;
this.kernelSize = kernelSize;
this.numKernels = numKernels;
this.kernels = initializeKernels();
this.outputs = new double[numKernels][inputSize - kernelSize + 1][inputSize - kernelSize + 1];
}
// Инициализация весов (ядер)
private double[][][] initializeKernels() {
// Реализуйте ваш метод инициализации весов
// Здесь просто случайные значения для примера
double[][][] newKernels = new double[numKernels][kernelSize][kernelSize];
for (int i = 0; i < numKernels; i++) {
for (int j = 0; j < kernelSize; j++) {
for (int k = 0; k < kernelSize; k++) {
newKernels[j][k] = Math.random();
}
}
}
return newKernels;
}
// Прямой проход (применение свертки)
public void forward(double[][][] input) {
for (int i = 0; i < numKernels; i++) {
for (int j = 0; j < inputSize - kernelSize + 1; j++) {
for (int k = 0; k < inputSize - kernelSize + 1; k++) {
double sum = 0;
for (int l = 0; l < kernelSize; l++) {
for (int m = 0; m < kernelSize; m++) {
sum += input[0][j + l][k + m] * kernels[l][m]; // Используем только один канал (например, красный)
}
}
outputs[j][k] = sum;
}
}
}
}
public double[][][] getOutputs() {
return outputs;
}
}
Этот пример загружает изображение, преобразует его в трехмерный массив, применяет сверточный слой и выводит результаты. Заметьте, что этот код предназначен для иллюстративных целей и может потребовать доработок и оптимизаций для использования в реальных приложениях.
Создание сверточной нейронной сети (CNN) без использования сторонних библиотек с использованием картинки включает в себя несколько шагов. В данном примере я использую Java для простоты, но реализация без сторонних библиотек может быть сложной, особенно в реальных проектах. Пример ниже включает в себя один сверточный слой и подвыборку:
java
Copy code
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.Arrays;
public class SimpleCNN {
public static void main(String[] args) {
// Загрузка изображения
BufferedImage image = loadImage("path/to/your/image.jpg");
if (image != null) {
// Преобразование изображения в трехмерный массив
double[][][] input = imageToMatrix(image);
// Параметры сверточного слоя
int inputSize = image.getHeight();
int kernelSize = 3;
int numKernels = 2;
// Создание сверточного слоя
ConvolutionalLayer convLayer = new ConvolutionalLayer(inputSize, kernelSize, numKernels);
// Прямой проход через сверточный слой
convLayer.forward(input);
// Получение выходных данных
double[][][] outputs = convLayer.getOutputs();
// Вывод результатов
System.out.println("Outputs after convolution:");
for (int i = 0; i < numKernels; i++) {
System.out.println("Kernel " + (i + 1) + ":");
for (int j = 0; j < inputSize - kernelSize + 1; j++) {
for (int k = 0; k < inputSize - kernelSize + 1; k++) {
System.out.print(outputs[j][k] + " ");
}
System.out.println();
}
System.out.println();
}
}
}
// Загрузка изображения
private static BufferedImage loadImage(String filePath) {
try {
return ImageIO.read(new File(filePath));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
// Преобразование изображения в трехмерный массив
private static double[][][] imageToMatrix(BufferedImage image) {
int height = image.getHeight();
int width = image.getWidth();
double[][][] matrix = new double[3][height][width]; // 3 канала для RGB
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int rgb = image.getRGB(x, y);
matrix[0][y][x] = (rgb >> 16) & 0xFF; // Красный канал
matrix[1][y][x] = (rgb >> 8) & 0xFF; // Зеленый канал
matrix[2][y][x] = rgb & 0xFF; // Синий канал
}
}
return matrix;
}
}
// Класс сверточного слоя
class ConvolutionalLayer {
private int inputSize;
private int kernelSize;
private int numKernels;
private double[][][] kernels;
private double[][][] outputs;
public ConvolutionalLayer(int inputSize, int kernelSize, int numKernels) {
this.inputSize = inputSize;
this.kernelSize = kernelSize;
this.numKernels = numKernels;
this.kernels = initializeKernels();
this.outputs = new double[numKernels][inputSize - kernelSize + 1][inputSize - kernelSize + 1];
}
// Инициализация весов (ядер)
private double[][][] initializeKernels() {
// Реализуйте ваш метод инициализации весов
// Здесь просто случайные значения для примера
double[][][] newKernels = new double[numKernels][kernelSize][kernelSize];
for (int i = 0; i < numKernels; i++) {
for (int j = 0; j < kernelSize; j++) {
for (int k = 0; k < kernelSize; k++) {
newKernels[j][k] = Math.random();
}
}
}
return newKernels;
}
// Прямой проход (применение свертки)
public void forward(double[][][] input) {
for (int i = 0; i < numKernels; i++) {
for (int j = 0; j < inputSize - kernelSize + 1; j++) {
for (int k = 0; k < inputSize - kernelSize + 1; k++) {
double sum = 0;
for (int l = 0; l < kernelSize; l++) {
for (int m = 0; m < kernelSize; m++) {
sum += input[0][j + l][k + m] * kernels[l][m]; // Используем только один канал (например, красный)
}
}
outputs[j][k] = sum;
}
}
}
}
public double[][][] getOutputs() {
return outputs;
}
}
Этот пример загружает изображение, преобразует его в трехмерный массив, применяет сверточный слой и выводит результаты. Заметьте, что этот код предназначен для иллюстративных целей и может потребовать доработок и оптимизаций для использования в реальных приложениях.
Ты хочешь реализовать распознавание изображений на жабе не используя сторонних библиотек?
Для твоей задачи есть OpenCV, но он тяжёлый. Думаю проще найти на гитхабе какую-нибудь обученную сетку на распознавание цифр, с бэкэндом в виде тензорфлоу, и жаба апи.
>хочешь реализовать распознавание изображений на жабе не >используя сторонних библиотек?
Именно.
Неужели настолько сложно переписать свёрточную нейронную сеть в обычный алгоритм ?
Вот например перцептрон -
If (x == 0) {
//then
} else if (x == 1){
//else
}
ChatGPT:
Алгоритм работы сверточной нейронной сети (CNN) можно разделить на несколько этапов: ввод данных, прямой проход (прямое распространение), обратный проход (обратное распространение) и обучение. Давайте рассмотрим каждый из этих этапов подробнее:
Ввод данных:
Изображение: Входные данные для сверточной нейронной сети часто представляют собой изображения. Изображение представляется трехмерным тензором, где размерности соответствуют высоте, ширине и количеству каналов (RGB, например).
Батч данных: Обычно данные передаются в сеть в батчах (наборах из нескольких примеров), что позволяет ускорить обучение и улучшить обобщение.
Прямой проход (Прямое распространение):
Сверточные слои: Сначала входные данные проходят через сверточные слои, в которых применяются фильтры (ядра) к локальным областям данных. Это помогает извлечь различные признаки из изображения.
Активации: Результаты свертки подаются через функции активации (например, ReLU), чтобы добавить нелинейность в сеть.
Подвыборка: Чтобы уменьшить размерность данных и выделить наиболее важные признаки, применяется подвыборка.
Полносвязные слои:
Вытягивание (Flattening): После сверточных слоев данные вытягиваются в одномерный вектор, чтобы передать их в полносвязные слои.
Полносвязные слои: В полносвязных слоях каждый нейрон связан со всеми нейронами предыдущего слоя. Эти слои позволяют модели объединять признаки и делать выводы на основе всего входного пространства.
Выходной слой:
Финальные прогнозы: Выходные данные с полносвязных слоев передаются в выходной слой, который генерирует прогнозы модели (например, для задачи классификации).
Обратный проход (Обратное распространение):
Вычисление градиентов: На этом этапе вычисляются градиенты функции потерь по всем параметрам сети с использованием метода обратного распространения ошибки.
Обновление весов: Веса сети обновляются в направлении, противоположном градиенту, с использованием метода градиентного спуска или его вариаций.
Обучение:
Итерации: Процесс прямого и обратного прохода повторяется на нескольких итерациях (эпохах) с новыми батчами данных.
Минимизация функции потерь: Целью обучения является минимизация функции потерь, чтобы модель могла делать точные прогнозы на новых данных.
>хочешь реализовать распознавание изображений на жабе не >используя сторонних библиотек?
Именно.
Неужели настолько сложно переписать свёрточную нейронную сеть в обычный алгоритм ?
Вот например перцептрон -
If (x == 0) {
//then
} else if (x == 1){
//else
}
ChatGPT:
Алгоритм работы сверточной нейронной сети (CNN) можно разделить на несколько этапов: ввод данных, прямой проход (прямое распространение), обратный проход (обратное распространение) и обучение. Давайте рассмотрим каждый из этих этапов подробнее:
Ввод данных:
Изображение: Входные данные для сверточной нейронной сети часто представляют собой изображения. Изображение представляется трехмерным тензором, где размерности соответствуют высоте, ширине и количеству каналов (RGB, например).
Батч данных: Обычно данные передаются в сеть в батчах (наборах из нескольких примеров), что позволяет ускорить обучение и улучшить обобщение.
Прямой проход (Прямое распространение):
Сверточные слои: Сначала входные данные проходят через сверточные слои, в которых применяются фильтры (ядра) к локальным областям данных. Это помогает извлечь различные признаки из изображения.
Активации: Результаты свертки подаются через функции активации (например, ReLU), чтобы добавить нелинейность в сеть.
Подвыборка: Чтобы уменьшить размерность данных и выделить наиболее важные признаки, применяется подвыборка.
Полносвязные слои:
Вытягивание (Flattening): После сверточных слоев данные вытягиваются в одномерный вектор, чтобы передать их в полносвязные слои.
Полносвязные слои: В полносвязных слоях каждый нейрон связан со всеми нейронами предыдущего слоя. Эти слои позволяют модели объединять признаки и делать выводы на основе всего входного пространства.
Выходной слой:
Финальные прогнозы: Выходные данные с полносвязных слоев передаются в выходной слой, который генерирует прогнозы модели (например, для задачи классификации).
Обратный проход (Обратное распространение):
Вычисление градиентов: На этом этапе вычисляются градиенты функции потерь по всем параметрам сети с использованием метода обратного распространения ошибки.
Обновление весов: Веса сети обновляются в направлении, противоположном градиенту, с использованием метода градиентного спуска или его вариаций.
Обучение:
Итерации: Процесс прямого и обратного прохода повторяется на нескольких итерациях (эпохах) с новыми батчами данных.
Минимизация функции потерь: Целью обучения является минимизация функции потерь, чтобы модель могла делать точные прогнозы на новых данных.
>То что у них появились проекты или сервисы на шарпе значит что они от джавы отходят?
Это большая копрорация - там будет всё. Есть вещи которые они купили. Условно это для примера, у меня нет инфы купили они права на некий сервис телефонии на .Net и теперь развивают свой телефонный спам на его базе. Понятно же что не будут переписывать на Java, а будут развивать и дальше.
Но дальше будет бодание между .Net и Java командами, на чем начинать писать проект Х. Но в реальности это больше административные вещи, у кого больше аппаратный вес. На технологические преимущества платформ руководству похуй.
Тут еще такой аспект, что на джаве работы много и зп высокие, шарписты подешевле будут, а тинек контора невероятно жадная
Щас любой анальник копеечная шлюха.
>If (x == 0) {
>//then
>} else if (x == 1){
>//else
>}
Перцептроны-то в реальных нейросетях не с бинарными значениями работают, а с диапазонами от 0 до 1
А теперь тебе нужно написать N-слоёв таких ifelse'ов, по M перцептронов в каждом слое, и каждый перцептрон соединить со всеми другими следующего слоя и хранить коэффициенты для каждой связи.
Потом еще такие штуки как LSTM в дело вступают
>Неужели настолько сложно переписать свёрточную нейронную сеть в обычный алгоритм ?
Ну явно сложнее чем взять либу, хотя как говорится бешеной собаке семь верст - не крюк, так что всё можно написать самому.
Ты пупуня
Это случайно не ты письма на балабановскую спичечную фабрику пишешь?
Какова вероятность найти работу на удаленке, если у меня нет профильного образования?
Не знаю, я как устроился после вуза, так там и работаю.
Какие есть видеоуроки норм на английском?
Хотел курс с юдеми найти самый популярный, а на торрентах нету.
Книги это конечно хорошо, но не хочется буковы читать. Хочется картинки смотреть.
>нерелевантная подзалупина
>>43412
https://www.youtube.com/playlist?list=PLd3UqWTnYXOlajg28XqDGfGnxGS8fOuaF
Звучит несложно, но это своего рода зависимость. Если я правильно понимаю суть вопроса, вы проверяете тип аргумента и помещаете его в соответствующий парсер!
Ты ебанулся индусов смотреть?
Уважается, по сути.
А есть ещё и другие способы? Какие-то новые утилиты ставить нельзя, терминалов куча, а ресурсов у каждого терминала мало.
В 2024-м Котлин стал бессмысленным языком. Всё тоже самое есть в Java. Впрочем, они пилят сейчас Kotlin Script (на замену Groovy). Как допилят - тогда может смысл появится его использовать. И то, иногда.
Я бы так не сказал. Например, очень не хватает возможность использования именованных параметров при вызове метода, вместо фиксированного жесткого порядка (как в Groovy или петоне).
В груви это просто мапа передаваемая первым параметром, делай так же
>В 2024-м Котлин стал бессмысленным языком. Всё тоже самое есть в Java.
И как мне заменить 100500 перегруженных методов, на один с дефолтными параметрами?
Ехидно отвечаю во всех подробностях, ведь я тоже ехидный (почти) 15-летний тимлид.
Отвечаю что пятая,но в ближайшее время планируем переехать на 21,твои действия?
Отвечаю, что я программист на скрэтче, но в рабочее время планирую выучить спринг и начать приносить велью кабану.
Круто!!! Желаю тебе достичь своей цели,мв вам перезвоним
Расскажем после интервью
При чем не тот который у них по подписке, а тот который обещает "За 12 месяцев до Junior" ?
>дефолты
Как правило это хуевый подход.
В питоне на большом проекте сейчас много боли из-за возможности в питончкие дефолты повесить.
Ну и у нас еще DI через декораторы, это ужас полный.
Кафка на скале.
У них же бесплатные статьи и приложения. Да и в целом, только идиот лоботомированный будет платить за то чтобы за него структурировали информацию
Почему же хуёвый-то?
>Как правило это хуевый подход.
Любую технологию можно довести до абсурда, так что это будет треш.
Дефолтные параметры хорошо подходят для случаев когда есть много аргументов большая часть из которых опциональная. Например конфигурирование гсон парсера:
var gson = new GsonBuilder().serializeNulls().setDateFormat("yyyy-MM-dd").create();
в джаве приходится использовать билдеры. А в котлине можно создать один метод или просто конструктор.
>>в джаве приходится использовать билдеры. А в котлине можно создать один метод или просто конструктор.
Дефолтные значения нужны чтоб не создавать несколько перегруженных методов. Билдеры не про это.
Челик, челибосик, реализуй один метод, а тот говнокод с крушением поезда "крушение поезда".
Чееееел ты не понимаешь.
1. Дефолтные параметры без именованных аргументов - говно без задач.
2. И перегрузка методов и билдер могут использоваться для того чтобы инициализировать объект в ситуации когда часть параметров опциональна, но есть свои ограничения. Перегрузку нереально сделать если у тебя десяток параметров тупо все комбинации не перебрать или у тебя есть параметры одного и того же типа. У билдера таких проблем нет, но там сложнее указать какие параметры обязательные. А с дефолтными и именованными параметрами всё просто: обязательные параметры оставил без дефолта, рациональные с и всё.
Ехидно спрашиваю как вы это используете в повседневной разработке
Только шарпидора выгнали, так жопоскриптер завелся.
Так ты и завтра будешь тут
Обрати внимание на логотип справа над текстом "гарантированное трудоустройство...".
JavaScript?
>method(Object... args)
И весь API переписать в стиле:
>methodA(Object... args) Object
>methodB(Object... args) Object
>methodC(Object... args) Object
Ну можешь шаблон Стоитель применить, только ты его нихуя не знаешь. А выёбываешься.
Спокуха ретард. Билдеры уже обсуждили.
>шаблон строитель
>ты низнаешь!!!!
>будто в этом костыльном говне вообще надо разбираться
Проиграл
мимо фп господин спокойно, но решительно пишет свой функциональный код на скале
А в чем проблема с гарантией?
Предлагаешь лоху ученический договор. Должен отработать 3 года за зп 50к. Если не справляется с тасками или хочет уволиться досрочно - платит штраф в 3кк (официально - полная стоимость обучения, которую якобы покрыла контора, так что все законно).
Затраты придется доказывать, обучение проводить реальными оплатами, какая то квалификация должна появиться после обучения. Не все так просто.
Но для гарантии, действительно, достаточно предложить ООО Рога и копыта с переездом в Зажопинск за МРОТ, но и такого не будет.
Ты совсем что-ли даун? Кто-то про гарантию что-то говорил? Оно использовано лишь для того. чтобы показать, куда смотреть.
в прошлом году даже скрины кидали как такие лохи жаловались во всяких твитерах что их кинули, но осознали они это слишком поздно
>Предлагаешь лоху ученический договор. Должен отработать 3 года за зп 50к.
Так тут кругом орут что вката нет, поезд ушёл, 40 тысяч откликов на вакансию, а ты тут на такую манну небесную нос воротишь, пиздец, Первые несколько лет 500 долларов - нормальная зп, в регионах так мидлы уже получают.
Ну не хотите перегружать методы, не хотите билдеры - пожалуйста
Я думаю мы оба дегенераты. Иначе не воняли бы на двощах
Вот именно из-за таких ебланов, которые бегут жаловаться херкам после того, как их унизили на сосаче айти и в пизде (в том числе).
На гитхабе нет коммитов до 2020 год ( значит начал интересоваться ит только после освящения в СМИ)
>освящения
Какое освящение, чел, Бог с тобой. Айтишка проклята нахуй, в ней нет ничего святого.
Учитывая что херкам поголовно похуй на гражданскую позицию анальников, и анальники это знают не понаслышке, унижаешься на сосаче только ты, коли так смешно порвался и не выкупил откровенный стеб анона выше.
Мимо
Ну и что за перефорс, обиженка?
А ктл сказал, что он обычный анальник? Ну и вообще классическое "yes, epic troll! Im not retard, i was only pretending!"
ИМХО в 2024 полезнее всего Molotok и Sverlo.
Если нихуя не знаешь - Head First норм, он именно как учебник написан, а не просто справочник. Даже двачер поймет.
Но если это не первый ЯП - будет слишком много воды.
Терпи, скоро еще текстовые шаблоны подъедут с non null типами.
Хорстман Java в первом томе мнопоточка, во втором стримы.
Параллельное программирование в JAVA на практике. Брайан Гоетс при участии Тима Перлса, Джошуа Блоха, Джозева Боубира,
Дэвида Холмса и Дага Ли
Ну так задай
Не, я понял идею, но не понимаю, нахуя?
Какой-то костыль на вид. Не понимаю, почему его так помпезно анонсировали как крутую фичу.
https://youtu.be/hrQBVwqq9cI
https://www.youtube.com/watch?v=zJNkIJCQohU
Как в скале наверное, можно экстендить его только в том же файле
Мне в принципе не нравится гуй писать.
https://github.com/jOOQ/jOOQ/blob/main/jOOQ/src/main/java/org/jooq/GroupField.java
Ну например в библиотеке использовать. С одной стороны даешь своим библиотечным классам наследоваться, а пользователю не даешь.
А что уже не пишем? На петухлине уже ведь давненько компиляция в жопаскрипт есть. Опять кто-то где-то петухлинщикам в штаны насрал?
Дегенерадл для тупой школоты.
Единственный случай использования что я пока увидел - это использование таких классов в switch-е непосредственно, по сути как энум из классов
Какой то ноунейм пукнул что гойтлин лучший для ноунейм технологии htmx в котором обычно используется гойланг или пхп
))
Слив принят.
>>58331
Так вы объясните нахуя нужно запрещать пользователю наследоваться? Для меня силеды это просто енум++, который поддерживает разные наборы данных при разном значении и смысл я в нём вижу только со свичами вместе. Во всех остальных случаях силед-пидорахизм только закладывает бомбу замедленного действия, которую придётся потом в будущем решать другими средствами, например, акцессвайденером.
мимо
К слову, енумы тоже сами по себе бомба замедленного действия. Сколько раз сталкивался с болью от нерасширяемого енума.
>Так вы объясните нахуя нужно запрещать пользователю наследоваться?
Например чтобы никто не строил библиотек поверх твоих библиотек и не ебал бы тебе потом мозг, что ты не можешь выпилить метод из интерфейса, потому что у них все на тебя завязано.
>>58340
>закладывает бомбу замедленного действия
И в чем же бомба и будущие проблемы?
А в чём проблема библиотек поверх библиотек? Как бы все библиотеки поверх стандартной либы. А они поверх операционки, только которая уже работает напрямую с процессором.
>в чём же бомба
Когда понадобиться необходимость расшириться, это будет невозможно.
У тебя всегда есть доступ к изменению используемых библиотек, да?
Объясняю на дваче. Написал ты свою либу для двача, например вот такую
Либа v1:
interface Dvach {
fun sendMessage()
}
class Mailach : Dvach {
override fun sendMessage() {
println("Спасибо Абу!")
}
}
class Sosach : Dvach {
override fun sendMessage() {
println("Двач, есть одна тян...")
}
}
Клиент:
fun main(year: Int) {
val dvach = when {
year < 2009 -> throw IllegalArgumentException("Вы молодые, шутливые, лучше сюда не лезьте.")
year < 2016 -> Sosach()
year < 2024 -> Mailach()
else -> MyDvachWithBlackjackAndWhores()
}
welcomeAgain(dvach)
}
fun welcomeAgain(dvach: Dvach) {
dvach.sendMessage()
}
class MyDvachWithBlackjackAndWhores : Dvach {
override fun sendMessage() {
println("МЯУ")
}
}
___
А потом понадобилось добавить капчу, а то набегают боты.
Либа v2:
interface Dvach {
fun sendMessage()
fun enterCaptcha()
}
class Mailach : Dvach {
override fun sendMessage() {
println("Спасибо Абу!")
}
override fun enterCaptcha() {
println("2 + 2 = 4")
}
}
class Sosach : Dvach {
override fun sendMessage() {
println("Двач, есть одна тян...")
}
override fun enterCaptcha() {
println("666666")
}
}
Клиент:
fun main(year: Int) {
val dvach = when {
year < 2009 -> throw IllegalArgumentException("Вы молодые, шутливые, лучше сюда не лезьте.")
year < 2016 -> Sosach()
year < 2024 -> Mailach()
else -> MyDvachWithBlackjackAndWhores()
}
welcomeAgain(dvach)
}
fun welcomeAgain(dvach: Dvach) {
dvach.sendMessage()
}
// Class 'MyDvachWithBlackjackAndWhores' is not abstract and does not implement abstract member public abstract
// fun enterCaptcha(): Unit defined in ord.example.Dvach
class MyDvachWithBlackjackAndWhores : Dvach {
override fun sendMessage() {
println("МЯУ")
}
}
___
Поздравляю, ты сломал обратную совместимость своей либы и теперь юзеру на той стороны нужно переписывать свою имплементацию, чтобы соответствовать новому интерфейсу. И ему похуй, что в документации ни слова про этот интерфейс и что ты не предполагал его поддержку. Ты дал возможность его имплементировать? Дал. Ты обещал обратную совместимость либы? Обещал. Какого хуя анон тогда? Мы тебе бабки вообще-то платим и не маленькие, а ты такую хуйню учедил.
Как выглядит этот же код при использовании sealed интерфейса. Код либы не изменился кроме добавления модификатора, а у клиента ещё в версии v1 будет такое сообщение:
// Inheritor of sealed class or interface declared in package my.client but
// it must be in package org.example where base class is declared
class MyDvachWithBlackjackAndWhores : Dvach {
override fun sendMessage() {
println("МЯУ")
}
}
И он не сможет прострелить себе ногу, а тебе не придется трястись каждый раз когда нужно изменить интерфейс предназначенный только для имплементации внутренними классами.
Объясняю на дваче. Написал ты свою либу для двача, например вот такую
Либа v1:
interface Dvach {
fun sendMessage()
}
class Mailach : Dvach {
override fun sendMessage() {
println("Спасибо Абу!")
}
}
class Sosach : Dvach {
override fun sendMessage() {
println("Двач, есть одна тян...")
}
}
Клиент:
fun main(year: Int) {
val dvach = when {
year < 2009 -> throw IllegalArgumentException("Вы молодые, шутливые, лучше сюда не лезьте.")
year < 2016 -> Sosach()
year < 2024 -> Mailach()
else -> MyDvachWithBlackjackAndWhores()
}
welcomeAgain(dvach)
}
fun welcomeAgain(dvach: Dvach) {
dvach.sendMessage()
}
class MyDvachWithBlackjackAndWhores : Dvach {
override fun sendMessage() {
println("МЯУ")
}
}
___
А потом понадобилось добавить капчу, а то набегают боты.
Либа v2:
interface Dvach {
fun sendMessage()
fun enterCaptcha()
}
class Mailach : Dvach {
override fun sendMessage() {
println("Спасибо Абу!")
}
override fun enterCaptcha() {
println("2 + 2 = 4")
}
}
class Sosach : Dvach {
override fun sendMessage() {
println("Двач, есть одна тян...")
}
override fun enterCaptcha() {
println("666666")
}
}
Клиент:
fun main(year: Int) {
val dvach = when {
year < 2009 -> throw IllegalArgumentException("Вы молодые, шутливые, лучше сюда не лезьте.")
year < 2016 -> Sosach()
year < 2024 -> Mailach()
else -> MyDvachWithBlackjackAndWhores()
}
welcomeAgain(dvach)
}
fun welcomeAgain(dvach: Dvach) {
dvach.sendMessage()
}
// Class 'MyDvachWithBlackjackAndWhores' is not abstract and does not implement abstract member public abstract
// fun enterCaptcha(): Unit defined in ord.example.Dvach
class MyDvachWithBlackjackAndWhores : Dvach {
override fun sendMessage() {
println("МЯУ")
}
}
___
Поздравляю, ты сломал обратную совместимость своей либы и теперь юзеру на той стороны нужно переписывать свою имплементацию, чтобы соответствовать новому интерфейсу. И ему похуй, что в документации ни слова про этот интерфейс и что ты не предполагал его поддержку. Ты дал возможность его имплементировать? Дал. Ты обещал обратную совместимость либы? Обещал. Какого хуя анон тогда? Мы тебе бабки вообще-то платим и не маленькие, а ты такую хуйню учедил.
Как выглядит этот же код при использовании sealed интерфейса. Код либы не изменился кроме добавления модификатора, а у клиента ещё в версии v1 будет такое сообщение:
// Inheritor of sealed class or interface declared in package my.client but
// it must be in package org.example where base class is declared
class MyDvachWithBlackjackAndWhores : Dvach {
override fun sendMessage() {
println("МЯУ")
}
}
И он не сможет прострелить себе ногу, а тебе не придется трястись каждый раз когда нужно изменить интерфейс предназначенный только для имплементации внутренними классами.
> Так вы объясните нахуя нужно запрещать пользователю наследоваться?
Сокрытие внутренней реализации. Чтобы стабилизировать апи, и менять реализацию, как угодно не завися от обратной совместимости.
1. Нахуй ты на котлине написал? Чтобы никто ничего не понял?
2. В большинстве случаев писать sealed чтобы запретить имплементировать интерфейс никто не будет.
> 1. Нахуй ты на котлине написал? Чтобы никто ничего не понял?
Если ты джавист и не понимаешь базовый котлин, то ты какой-то неправильный джавист.
> 2. В большинстве случаев писать sealed чтобы запретить имплементировать интерфейс никто не будет.
Сколько библиотек написал?
>Сколько библиотек написал?
0 не считая тех что на работе, но кода библиотек прочитал достаточно. Показывай где там используют sealed.
Да
Дегенераты зачем-то решили дюпнуть стандартную библиотеку, и дюпнули её очень хуёво. Плюс дополнительные фичи медленные.
Нахуя так делать,в джаве же кучу всего можно оптимизировать если не поддерживать обратную совместимость и делать язык с чистого листа,я сначала думал они наоборот облегчили джаву и нативных приколов завезли
Ну во первых они не ломали обратную совместимость, у них наоборот было целью её сохранить. Но
>нахуя так делать
Задача стояла не в решении наболевших проблем джавы, а в САЗДАТЬ СВОЙ ЕЗЫГ ПАНРАМИРОВАНИЯ. Как школьники видят шутки в тиктоке и повторяют их, постя другое видео с точно такой же шуткой. Если бы хотели решить проблемы джавы, то оставили бы оригинальный синтаксис джавы. Всё то, что авторы петухлина называют преимуществами, является вторичным и появилось уже после постановки цели создания своего говнеца.
Блядь,а как же бетер джава,понятно что джава бессмертна,но нахуя делать ее кастомную сборку вместо полноценного ремейка
Я уже другой анон, хотя похуй. Вокруг тебя одни слитые, шизоид, продолжай срать под себя.
Попробуй видеокурсы на Udemy, по спрингу там точно видел годноту.
inb4 сделать его final
Нет, практической задачи нет. Я даже не вкатун, просто интересно.
Как для обычного final класса. Класс потомок должен переопределить equals и сначала вызвать equals родителя, если он true, то запускать свои сравнения полей. Если equals родителя выдает false, то возвращать false.
Кури принцип подставки Барбары Липсков.
https://pastebin.com/ZZ7HET8c
Угадай, что будет, если попытаться сделать так:
A a = new A(0);
B b = new B(0, 1);
System.out.println(a.equals(b));
System.out.println(b.equals(a));
По моему в equals должна быть проверка на идентичность классов.
Антон, ну что за пиздец у тебя со стилем? Используй линтеры по полной, не ограничивайся дефолтыми настройками.
Насчет твоего вопроса, ты не сравниваешь классы в equals из-за этого появляется ошибка:
https://pastebin.com/vXufpuL4
p.s.
Вообще погуглил я твой вопрос меченый и выглядит всё так что есть два решения:
1) Сделать как я в прошлом посте, то есть нарушить принцип Липсков, что не есть гуд
2) Не нарушать принцип Липсков и сделать equals final в базовом классе (я лично ставлю лайк этому способу, так как никогда не наследуюсь от классов, только от интерфейсов)
https://pastebin.com/AsXRNQ76
Зачем в 2к24 нужны C# и Котлин если есть Java?
Зачем вместо нуля писать К? Какой смысл? Или у петлинистов всё через жопу?
Ну очевидно с основ программирования, переменные/функции/ циклы
Очевидно потому что главное в дажве - это огромная инфраструктура и наработки сделанные за все время ее существования. Сделай они отдельный язык - был бы еще один никому не нужный раст.
Ну раст так-то активно используется в новых проектах. Но я бы все же выбрал джаву, попривычнее она мне.
>Ну раст так-то активно используется в новых проектах.
Тут главное почаще это вслух повторять, как манифестации, тогда точно станет реальностью
>коммерческих
А вот манька и заднюю дала, ведь запруфать использование в клозед сурс параше сложновато.
Лол, ну так и знал что порвешься, никому не интересно что ты там корябаешь для души в свободное время.
Щас бы гавнадином с платными модулями пользоваться. Да и это вообще другая вещь, она основана не на компиляции джавы в жопу.
Слив принят, манюнь.
А потом мы таких кадров попускаем на незнании спрэнг сакурити или кишочках спринг фримверка
То есть ты взял одну единственную фичу языка: корутины. И в искусственном сценарии обнаружил, что они работают хуже чем треды. После чего ты заявил, что котлин принципиально медленнее чем жаба и срешь этим в треде уже хуй знает сколько времени?
Иди к психотерапевту.
Container a1=...,
a2=...;
a2.add(a1);
И теперь вопрос: если использовать строку a2.remove(a1);, то
1) Будет ли существовать объект, на который изначально была ссылка a1? Ведь не было строки вида a1=null;
2) Что будет с объектами, вложенными в a1? Они будут удалены?
Почитай про GC. Объект существует до тех пор, пока ты до него тем или иным образом можешь добраться.
Ну расскажи тогда вот чего - деструктор когда вызывается? Когда сборщик мусора собирсет объекты без ссылок или когда число ссылок на объект обнуляется? Между этими событиями можнт быть значительный интервал времени.
Из C++ что-ли пришёл?
> Когда сборщик мусора собирсет объекты без ссылок
Это. Поэтому финализаторы deprecated и в принципе не рекомендуются к использованию.
> 1) Будет ли существовать объект, на который изначально была ссылка a1? Ведь не было строки вида a1=null;
Да.
> 2) Что будет с объектами, вложенными в a1? Они будут удалены?
Нет.
1. Ссылка существует на стеке, сам объект в куче.
2. Пока ты не сделаешь a1 = null ссылка всё также будет существовать как и объект.
3. Когда ты добавляешь ссылку в список, то создаёшь вторую ссылку на объект. Теперь даже если ты сделаешь a1 = null, то объект никуда не исчезнет, так как осталась ссылка в списке.
4. Когда ты удалишь ссылку из списка и занулишь переменную a1, тогда GC сможет очистить кучу от объекта, так как на него больше нет ссылок.
При этом GC не факт, что сделает это сразу. Это может вообще никогда не произойти, но тебя как разработчика это не должно беспокоить, так как это уже детали реализации GC.
p.s. Если тебе нужно освободить используемые ресурсы объекта в Java/Kotlin, то используй AutoClosable интерфейс
https://pastebin.com/PYq7Sxy4
Зарепортил котлиношизика.
Так это троллинг.
хз это все проекции комунити что где-то там что-то умерло итд, пишу код на скалке, ФП стек cats effect, http4s не представляю как вообще перекатываться на что-то другое теперь. Хайп безусловно ушел, но в любой технологии так.
Котлин выглядит как костальная поделка после скалы. Мало какой язык сравнится с экспресивностью и элегантностью скалы. Правда порог вката высокий.
Котлин мне видится Го в мире жвм лол, сделали простой удобный язык, но джава догоняет и хз нахуй он нужен по итогу.
Это нинужно или врёти? В целом по языку можешь посмотреть на течемповереде, как все это замедления вместе влияют.
Ну так скажи конкретно чем скала лучше котлина, в чем скала хороша то?
Назови что-нибудь, что есть в скале, но нет в котлине.
Такое чувство, что ты не пробовал котлин и просто воздух гоняешь
Самое главное в джаве 22 — стрим газонюхи. Наконец-то можно будет использовать стримы для операций длиннее 2 строк. А ещё выражения до super().
сильная система типов, high kinded типы, имплиситы, нормальный паттерн матчинг, иммутабельность по дефолту, в целом поддержка ФП лучше чем в котлине (не в ущерб ООП). Я правда не понимаю зачем котлин нужен, когда есть современная джава. Корутины, лол?
На джаве мобильные приложения не попишешь никак.
Я к чему спрашиваю: мне предлагают по книге скалу выучить и вкатиться, наверное, в гос контору в бэк джуном
Тебе только дворником работать,косолобый
> Я правда не понимаю зачем котлин нужен, когда есть современная джава.
Ну начнём с
> Корутины, лол?
А что, джавистов корёжит от моих базированных корутин?
Дальше по тексту:
- Nullable типы (нет, @NonNull не подходят, не врите себе)
- Дефолтные значения для аргументов методов
- Нормальные, не кастрированные лямбды
- Scope-функции
- Свойства (ну зачем же нам нужна такая бесполезная штука, у нас в современной джаве есть ломбок)
- Нормальный : вместо дурацких extends и implements
- Отсутствие дурацкого throws
- Не нужно создавать отдельный класс, в который ты будешь писать статические методы
- Уже много лет как есть интерполяция строк
А нахуя я собственно это пишу, джависты всё равно скажут, что нинужно.
Нинужно
На реакте.
Смысл в uint если всё равно на входе будут int, которые ты для своей части программы будешь также конвертит в uint с проверкой на положительность входного int?
Всё ещё раньше чем шарподебилы с нет фреймворка сдриснут.
А хули не ноешь, что нет even и odd? Разных ограничений числового пространства можно дохуя понапридумывать. На все типы не понаделаешь. Разве что нормальную компайл-тайм типизацию ебашить, но такого пока ни в одном языке не сделали.
> А что, джавистов корёжит от моих базированных корутин?
Твоих? Ты к их созданию ни пальца не приложил. Ты просто залётный школьник, потребитель контента, уровня зрителя тиктока.
> нет, @NonNull не подходят, не врите себе. Яскозал!
> - Дефолтные значения для аргументов методов
Доказывай, что нужно.
> - Нормальные, не кастрированные лямбды
А что в джаве кастрированное? Явность лямбд? Пиздец, наглость перефорса на уровень шарпопетушни.
> - Свойствгетсетинитгет сет коко ко гет сет гет сет гет сет гет сет гет сет
Ясн. Приходи когда хоть лучше чем в петушарпе будет, я даже не говорю про достижение уровня лобка (что сам не идеален).
> - Нормальный : вместо дурацких extends и implements
> - Отсутствие дурацкого throws
> - Не нужно создавать отдельный класс, в который ты будешь писать статические методы
> - Уже много лет как есть интерполяция строк. Питухлиноссия — родина слонинтерполяций!
Ну тут вообще шизофрения попёрла, долбоёб начал сгребать в кучу все отличия языков чтобы только побольше пунктов в своём говне было. Буквально всё это сделано разработчиками джавы специально в отличии от того, что было в древних плюсах, например, и что петухлинщики возродили из говнопепла, и является преимуществом.
А теперь что есть у джавы, чего нет у петухлина, даже учитывая его паразитирование на jvm:
1) Скорость
2) Нормальный синтаксис extends и implements вместо ебучего :
3) Нормальный синтаксис в принципе, а не обмазанное сокращениями говно с лишними словами
4) Универсальная интерполяция строк, а не нашлёпанное за 5 секунд говно не поддерживающее что-то больше дебаг мессаджей
5) Нормальный синтаксис лямбд
6) Проверяемые исключения
5) Как и в сравнении с петушарпом, отсутствие гетсет-клоунады
> А что, джавистов корёжит от моих базированных корутин?
Твоих? Ты к их созданию ни пальца не приложил. Ты просто залётный школьник, потребитель контента, уровня зрителя тиктока.
> нет, @NonNull не подходят, не врите себе. Яскозал!
> - Дефолтные значения для аргументов методов
Доказывай, что нужно.
> - Нормальные, не кастрированные лямбды
А что в джаве кастрированное? Явность лямбд? Пиздец, наглость перефорса на уровень шарпопетушни.
> - Свойствгетсетинитгет сет коко ко гет сет гет сет гет сет гет сет гет сет
Ясн. Приходи когда хоть лучше чем в петушарпе будет, я даже не говорю про достижение уровня лобка (что сам не идеален).
> - Нормальный : вместо дурацких extends и implements
> - Отсутствие дурацкого throws
> - Не нужно создавать отдельный класс, в который ты будешь писать статические методы
> - Уже много лет как есть интерполяция строк. Питухлиноссия — родина слонинтерполяций!
Ну тут вообще шизофрения попёрла, долбоёб начал сгребать в кучу все отличия языков чтобы только побольше пунктов в своём говне было. Буквально всё это сделано разработчиками джавы специально в отличии от того, что было в древних плюсах, например, и что петухлинщики возродили из говнопепла, и является преимуществом.
А теперь что есть у джавы, чего нет у петухлина, даже учитывая его паразитирование на jvm:
1) Скорость
2) Нормальный синтаксис extends и implements вместо ебучего :
3) Нормальный синтаксис в принципе, а не обмазанное сокращениями говно с лишними словами
4) Универсальная интерполяция строк, а не нашлёпанное за 5 секунд говно не поддерживающее что-то больше дебаг мессаджей
5) Нормальный синтаксис лямбд
6) Проверяемые исключения
5) Как и в сравнении с петушарпом, отсутствие гетсет-клоунады
Преимуществ у петухлина перед джавой? Ну по сути серьёзных нет, хотя я конечно бы методы расширения потрогать хотел нативно, без лобка.
Раньше на джаве не писали, а говнокодили, это разные вещи
>А что, джавистов корёжит от моих базированных корутин?
я не джавист, я на скале пишу же
всё что ты описал в скале есть только лучше, потому что её не пидорашки делали из жидбрейнс, а учёные в говне мочёные из швейцарского института.
Но несмотяр на всё то, что ты высрал - котлин это всего лишь надмножество джавы которое фиксит её проблемы, понимаешь? Когда джава реализует всё что ты написал (а она частично уже это сделала), то что будет делать котлин потом? Какая будет его selling-feature?
А лонг использовать не пробовали?
>Какая будет его selling-feature?
Компиляция под WASM/Native/JS/iOS
Тут к сожалению скала и джава дрищут в штанишки
Дрищут разве что тебе в ебальник жиденьким непереваренным. Грааль вм всё это делает и даже больше.
Хуй там, покажешь как там грааль в WASM компилирует? Под iOS? В JS?
Только без верчения жопой пожалуйста
> Хуй там, покажешь как там грааль в WASM компилирует?
https://www.graalvm.org/latest/reference-manual/wasm/
> Под iOS?
https://github.com/MobiVM/robovm
> В JS?
https://github.com/google/j2cl
Ебальник к осмотру.
>пруфы
я опущу глупые вещи типа пропертей, дефолтных значений и прочий говносахар и кейворды лол которые есть тупо везде уже, вот тебе самое главное, петух:
> Nullable типы (нет, @NonNull не подходят, не врите себе)
наллабл типы это хуйня на постном масле которая делает систему типов менее sound
Инт это инт, никакого null там быть недолжно, null вообще быть недолжно, сам Hoare это признал. Скала использует Option. java интероп понимает нулы ибо jvm, но в скале они не используются
>- Нормальные, не кастрированные лямбды
в скале ультра лямбды которые поддерживают Eta expansion, это когда ты метод можешь сделать лямбдой например, использовать их взаимозаменяемо
- Scope-функции
какой-то сахарок бессмысленный, в скале есть мощные implicits, которыми можно добавить этот сахар через extension methods, но это самый простой юзкейс, вся мощь имплиситов раскрывается в либах типа cats, библиотеке тайпклассов (которые в котлине нормально и не сделать к слову)
Мне продолжать? Или может погуглишь сам, чмондельс?
Что вообще на петухлине хорошего написано? погугли либы в скалке типа cats, zio, shapeless, akka есть что-то подобное у вас? Или хоть что-нибудь кроме КОРУТИН лол
Котлину далеко до скалы, а скоро будет и до джавы далеко
Просил без верчения жопой, а сам вертится как уж. Петухлинщики что-ли как шарподебилы не принимают всё что не с лопаты скормлено, а сделано комьюнити?
Я просил показать где грааль это делает, но жопа у тебя завертелась со страшной скоростью и из 3х ссылок на грааль была только одна.
Почему так?
Ну мало ли ты что там попросил показать, ты ещё попроси показать как твоя мамаша не блядует, я тоже не смогу. По теме что-то будет или сливаешься?
Почему на жаве выходит такой многословный код? Банальные вещи требуют тысячи строк кода, которые выдавливаешь из себя целый месяц, а потом два месяца дебажишь нюлы..
Хваленные фримверки делают только хуже и код мало того что сложно читать (его дохуя выходит) так еще он и тормозит. Смешно говорить, но дернуть хатэтэпе ручку через спрэнг - 100-150 мс на локалхосте, лал))
Толстовато,вряд ли наберёт много ответов
Много кода, потому что жаба - старый язык, а если менять его кардинально, то сломается совместимость.
Скорость у жабы нормальная, не пизди
>>Инт это инт
>>null вообще быть недолжно
>>Скала использует Option.
А в чем принципиальная разница? Что опцион, что нул - все равно надо проверить есть ли там содержимое или нет.
мимо
мимо нищий кодер, даже не программист
сброс триалки офк.
идею комьюнити
Почитай про type safety и type system soundness. Если у тебя каждый тип может быть наллбл сложнее рассуждать о программе как о типобезопасной. Но котлинмакакам думаю не до таких материй, у них же есть КОРУТИНЫ!
Кряк с рутрекера
Функция которая умеет принимать сколько угодно параметров вида int, string, int, string ....
Например, dup(1, std::string("aboba"), 2, std::string("xyz"), 3, std::string("a"))
выведет abobaxyzxyzaaa
Нинужна?) Ладно, я шучу. Меня с теоретической точки зрения возможность написания такого интересует. Так можно или нет?
Через объекты. Принмаешь список объектов/рекордов, хуячишь туда свои инты, строки, небо и Алллаха.
Догадайся
у тебя например record YobaObjectRecord (int n, String s)
и ты передаешь List<YobaObjectRecord>
Если захочется оопшно - можно даже метод dup засунуть в сам рекорд и вызывать его
list.stream().map(YobaObjectRecord::dup).collect(Collectors.joining())
Ненене. Это уже другое. Суть моего плюсового кода в том, что в момент вызова тип T определяется. В Java так нельзя получается?
%%или в джава дженерики както иначе работают?%
Пупуня соскуфилась😭
жабадебилам уже over 99999 раз объясняли почему...
Нет смысла, одни и те же маняврирования. Одно "нинужна", другое "уже есть в жабе, жаль только, что с хуевым синтаксисом и только с n-ой версии, когда в котлине сразу всё есть с нулевой"
Я готов согласиться с единственным аргументом - жаба побыстрее.
ахах, ебать ты дегенерат, мда
Типа это не параметр типа варарга, а параметр типа типа варарга? Ну это хуйня какая-то, в джабе нет такого. Только Object args...
Забыл упомянуть про то, что любят оправдывать отсутствие свойств ломбоком, который не является частью джавы. Это просто костыль, который можно для любого языка запилить, но никто этого не делает, т.к. там блять ЕСТЬ эти самые свойства и всякие хуёмбоки и guava там просто без надобности, всё это есть в самом языке.
Когда мне пришлось в говне ковыряться на джаве, я охуел с того, что для нормальной работы с языком нужно минимум 3 библиотеки добавлять, это пиздец
Типо T... != список аргументов типа T. Оно буквально раскрывается в другие типы
Ну и конечно кайфанул с того, что я не могу нормально с коллекциями работать, т.к. версия жабы старая, и её нельзя было поднимать. Плюс проблемы были с тем, что нет опциональных параметров именованных и нормальной проверки null. Какой же кайф везде проставлять аннотации, писать без экстеншнов в 2 раза больше кода, чем обычно, вот это копиум.
И в этом же проекте можно было писать на котлине без проблем, с лямбдами, экстеншнами, коротким синтаксисом, со всеми удобствами...
В Java нельзя. В котлине можно через reified, но это котлин.
Никого не слушай, в джаве так можно через вот такие штуки https://www.javadoc.io/doc/com.google.code.gson/gson/2.6.2/com/google/gson/reflect/TypeToken.html
Почитал про этот параметр пак, по-моему такого в джаве нет
Я так понимаю, суть в том, что опцион прилетает редко и там, где чётко заявлено в сигнатуре метода, в рамках стандартной логики программы, а нулл вылезает как прыщ на жопе там где его не ждёшь совершенно. В этом есть по сути логика, хоть и опционы имеют опасность той же проблемы, что и проверяемые исключения, со временем оказаться renundant.
А нахуя? Это как минимум нарушение сингл респонсибилити. На джаве просто делаешь dup(1, "aboba")+dup(3, "govno") немного не так будет, на джаве строки иммутабельные и такое совмещение перформанс убъёт, надо это через стринг билдер делать, но для примера сойдёт.
Плейлист скуфа же
>>любят оправдывать отсутствие свойств ломбоком, который не является частью джавы
Частью джавы являются рекорды, где можно получать поля по одноименному методу.
А писать гет/сет для каждого класса в джаве - это и есть костыль и каргокульт.
Петушарперы прибили это гвоздями к языку и считают себя не говноедами теперь.
Повторяют ошибки джавы из 90-х, когда в нее тащили хайповое говно типа гоф паттернов. Мода на гет/сет пройдет, а у них останется этот кусок говна в языке.
Или сломают обратную совместимость, чем обрекут код на легасность. Переписывать надо будет так много, что проще будет остаться без обновлений а если переписывать - то уже на го.
>>63569
>>не могу нормально с коллекциями работать, т.к. версия жабы старая, и её нельзя было поднимать
Версии меньше 8 сейчас уже не найдешь, а там все это есть.
Можешь еще поискать паскаль и жквери для полноты ощущений программирования начала 00-х
А то что тебе дали ковырять какой то копролит и не позволили что то менять - многое говорит о тебе как о специалисте.
Студент омежка отложил кирпичей, когда его попросили пояснить за ревью?
Поищи проблемы в прокладке между монитором и сидушкой.
Да ты просто сравни чатик котлина (kotlin_lang) и чатик javastart с залетной гречневой быдлятиной. Хуже я видел только в чате начинающих питонистов.
Зашёл в калфу петухлина, увидел анальные правила для утешения чувства собственной неполноценности у пидорашей мочерации, в которых даже запрещено спрашивать вопросы если они имеют хоть какое-то отношение к джаве (лол) и ещё простыню всяких запретов и нипущаний, посмотрел на аву главпетуха, увидел заплывшего скуфа-чурку, пролистал безмерный список всяких субчатов, увидел "флудилку-курилку", лол, блядь, ахаха.
Зашёл в калфу джавы, сразу открылся чат, в котором идёт адекватная дискуссия, и из информации о чате никаких правил и только совет как правильно задавать вопросы чтобы на них можно было ответить.
Что сказать-то хотел?
ну да, когда надо, так ломбок дохуя крутой и нужен, КРУЧЕ ШАРПА, но когда вас ткнули носом в то, что ломбок - костыль для джавы, так сразу ломбок говно и вообще "НИНУЖНА", вот это маняврирования, ещё скажи, что guava никто не пользуется.
Рекорды в джаву завезли, вот это да. Угадай откуда спиздили, и напиши версию, с которой я смогу этим пользоваться плиз.
>А то что тебе дали ковырять какой то копролит и не позволили что то менять - многое говорит о тебе как о специалисте.
Хуя ты высрал. Даа, именно поэтому...
Кого ты там ткнул, маня? Что за маняфантазии? Ломбок продолжает ебировать в рот и в жопу петушарпоговно.
Вот петухлинщик бы за нечитаемость не высирался, ей-богу.
пофиксили, щас имплиситы делаются через given/using
но в целом да, проблема такая была во второй скале
>который можно для любого языка запилить
но почему-то ни для шарпоговна, ни для петухлина не запилили, и шарподебилы продолжают шлёпать бойлерплейт...
@kokdilla
Ну так ломбок сейчас нужен, а потом станет не нужен.
С появлением рекордов уже от многих его фич отказался.
>>guava никто не пользуется.
У нас апач комонс вместо гуано. В петушарпе выбора не дадут - жри что дали.
>>Угадай откуда спиздили
Взяли @Value из ломбок и довели до ума. Никаких гет/сет там уже нет.
>>версию, с которой я смогу этим пользоваться плиз.
17+. Если на завязан на специфичных либах - то 11 легко апается до 17 или 21. С 8 - могут быть проблемы (а могут и не быть)
>>Хуя ты высрал. Даа, именно поэтому...
Любой джавист просто апнет версию хотя бы до 11. А шарпомухе видимо по кайфу ковыряться в протухшем говне.
А что жирного? Ответ прост: потому что макаки не могут в архитектуру.
Надо читать Буча, GoF и другие умные книги, как правильно писать код с использованием ООП.
Для сокращения кода есть все необходимое в Lombok (а чего нет, можно самому описать аннотациями).
Посмотрел в википедии:
>После произошедшей эпидемии огромная часть населения округа заразилась неизвестным вирусом и превратилась в зомби
Когда сценарий писали анальники, у которых абсолютно отсутствует фантазия...
У меня бы, например, в зомби превращались зумеры под влиянием соцсетей.
А. ну да, неудобная тема, тогда как раз стартанула повесточка с геймергейтом и #MeToo.
Хотя Стивен Кинг писал про что-то похожее (зомби-мобилодрочеров) в 2006 году:
https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA_(%D1%80%D0%BE%D0%BC%D0%B0%D0%BD)
>>Надо читать Буча, GoF и другие умные книги, как правильно писать код с использованием ООП.
другое дело, так намного тоньше
Асинхронность в Спринге включается @EnableAsync
https://pastebin.com/AA9ZAnZ5
В методе readResponse, когда убираю вызов readBodyData (59 строка) и раскомментирую строки 49-58 - не хочет выводить тело Web-страницы. Как исправить, чтобы работало корректно с учетом нужной кодировки?
Да, это со 2й джавы.
На самом деле это дефолтные методы - костыль. Интерфейсы должно задавать правила взаимодействия с объектом, а не логику.
> Интерфейсы должно задавать правила взаимодействия с объектом, а не логику.
Потому что тыскозал?
Да. Вопросы?
1. Тем, что теперь твой интерфейс это и интерфейс и абстрактный класс
2. Любишь вместо существующего языка использовать выдуманный язык? Потому что именно так это выглядит со стороны когда разработчик вместо конвенционального способа проектирования программы начинает изобретать свои собственные. И конвенция говорит, что интерфейсы не содержат в себе имплементацию.
Я так понимаю твой код никто никогда не ревьюрил, потому что такие вещи не знают только программисты-одиночки.
> и интерфейс и абстрактный класс
Ты еблан, лол? По такой логике кроссплатформенность тоже нарушает мантру, ведь и шинду поддерживает и пердоликс. Или там иерархия классов, и Shape и Rectangle и Square.
> Любишь вместо существующего языка использовать выдуманный язык? Потому что именно так это выглядит со стороны когда разработчик вместо конвенционального способа проектирования программы начинает изобретать свои собственные. И конвенция говорит, что интерфейсы не содержат в себе имплементацию.
> Я так понимаю твой код никто никогда не ревьюрил, потому что такие вещи не знают только программисты-одиночки.
То есть из твоих аргументов только "здесь так принято" и "ты не программист"?
>>разработчик вместо конвенционального способа проектирования программы начинает изобретать свои собственные.
спринг так и поступает, за чистым ООП на джаве - это к бугаенке.
> Ты еблан, лол? По такой логике кроссплатформенность тоже нарушает мантру, ведь и шинду поддерживает и пердоликс. Или там иерархия классов, и Shape и Rectangle и Square.
Ты хуйню какую-то лишённую логики спизданул. Попробуй ещё раз.
> То есть из твоих аргументов только "здесь так принято" и "ты не программист"?
Почему ты пишешь на русском языке? Говори на идише, иди против системы. В коде же ты идёшь против "здесь так принято", так давай, здоровайся с людьми носом, переходи дорогу на красный и ходи задом - следуй своему инженерному чувству анон, нахуй эти правила.
> Ты хуйню какую-то лишённую логики спизданул. Попробуй ещё раз.
Слив принят.
> Почему ты пишешь на русском языке? Говори на идише, иди против системы. В коде же ты идёшь против "здесь так принято", так давай, здоровайся с людьми носом, переходи дорогу на красный и ходи задом - следуй своему инженерному чувству анон, нахуй эти правила.
То есть ты подтверждаешь что аргументов у тебя помимо "здесь так принято" нет и объяснить зачем это нужно ты не в состоянии?
Иди нахуй просто, ещё на говнодебилов время тратить
Пиздец порвало беднягу в клочья от открытия принципов организации программ
Ты используешь BufferedReader для паркинга хедера. Но проблема в том, что BufferedReader буфферизирует чтение кто бы мог подумать, да?. Соответственно он почти гарантированно вычитает лишние байты из SocketInputStream. И дальше твой ридер для тела запроса будет читать его с середины.
Тебе надо отказаться от ридера для заголовка. Читай побайтово пока не встретишь \n дальше байты в строку и парсить. Когда закончишь с заголовком, можно будет создавать ридер поверх того стрима из которого ты читал.
Мне кажется это Влад Яценко, СТО Революта
>>здоровайся с людьми носом, переходи дорогу на красный и ходи задом
Тебе скажут что это нерушимые принципы - и ты будешь так делать. Адекваты пошлют нахуй эти правила и будут делать так как удобно им, пока ты будешь визжать что это неправильно и так делать нельзя, ведь бог накажет!!!!
> и будут делать как удобно им
> буквально первое, что написано в любом руководстве как писать хороший код: пишите так, чтобы другие легко могли понять написанное
Что ты забыл в программаче?
>>первое, что написано в любом руководстве как писать хороший код: пишите так, чтобы другие легко могли понять написанное
Я про это и написал, принципы идут нахуй если они идут вразрез с удобством и понятностью. Иногда они просто устаревают, но долбоебы вроде тебя продолжают дрочить на какую то книжку из 90-х.
Как профилировать джаву? Вот например у меня есть игра на джаве (копрокубы), и при рендеринге каждый 5-10 кадр рендерится в 4 раза дольше, чем нормальные кадры. Меня это немного доебало и я хочу избавиться от этого. Я могу например найти метод рендера кадра, и после сборки данных профилировки фильтровать результаты, чтобы сравнить, чем занят движок в те микростататтеры, и чем при нормальном рендеринге, и попытаться это как-то распараллелить. Но как собрать данные профилировки, чтобы была выдача, что подметод залупа тратит 70% времени исполнения профилируемого метода, говно 25%, анус 5%?
ПЕРЕКАТ >>3066497 (OP)
ПЕРЕКАТ >>3066497 (OP)
ПЕРЕКАТ >>3066497 (OP)
ПЕРЕКАТ >>3066497 (OP)
Самый распространенный профайлер - VisualVM
В IDEA можно запускать в профилированием
Саму джаву можно запускать с FlightRecorder
Нет, ты сказал если тебе конвенции становятся неудобными, то и пусть тогда идут они нахуй. Про других ты ничего не говорил.
Это копия, сохраненная 5 мая в 02:12.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.