Ответы пользователя по тегу Java
  • Нынешние реалии стандарта Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Каковы нынешние реалии стандарта языка? Используются ли в каких-то моментах фишки новых версий (если это вообще возможно)? Ибо судя по всем статьям, практически большинство до сих пор сидит на восьмёрке.

    Да. Это отчасти правда. Основные заказчики Java разработки - это банки. А они не любят миграции версий
    без какой-то особой причины. Я работал с тремя банками и я могу сказать что большая часть кода - это
    легаси. И совершенно нет никакой надежды что будет bump версии языка. Product owner-ы в таком случае
    задают вопрос - "а что мы с этого будем иметь". И обычно для банка - ничего особенного. В некоторых
    случаях (использование CORBA или JAXb, com.sun.*) повышение версии чревато проблемами. Что-то
    может резко отвалиться в новой версии.

    Самые интересные новшества после JDK8 с моей точки зрения были не в языке а в других слоях JRE/JDK (GC, FFI, vectorization, unmanaged memory). Но вы еще попробуйте эти новшества продать бизнесу. Успехов вобщем.
    На какой версии лучше всего практиковаться в написании кода, да и обучаться в целом?

    Да. Ты можешь брать самую последнюю LTS-версию. Брать preview нет никакого смысла. Очень
    сомнительно что для учебы тебе кто-то даст в туториалах экспериментальные фичи. Скорее наоборот.

    Есть ли вообще предпосылки на переход большей части энтерпрайза в ближайшем будущем (ближе к 2030) на более современную версию? Почему тезис о дорогом переходе не нивелируется тем, что за 10 лет со времён восьмёрки завезли достаточно "контента", например, новый синт.сахар и обновленный GC?

    Никакого глобального перехода на самом деле нет. Потому что нет такой проблемы.
    По сути проблемой например для Java 21 может стать "end of extended support" а он условно отмечен
    например на 2031 год. Вы еще попробуйте доживите до этого года и попробуйте сидеть на одном проекте
    столько лет.

    Java может стать COBOL-ом XXI столетия. Но у нее будет даже меньше проблем чем у Кобола, потому что
    байткод и стек-машина имеет больший потенциал. Тоесть пока жива концепция байт-кода и пока существуют
    процессоры Фон-Нейман архитектуры, можно сказать что Java неубиваема.

    Вообще не стоит вам сильно циклиться только на языке. Параллельно существуют Scala, Kotlin, Groovy, Clojure
    и их само существование делает много альтернатив. Одна JVM - бесконечное число языков.
    Ответ написан
    3 комментария
  • Функция проходит по циклу, но не суммирует значения почему?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Во первых этот огрызок кода не компилируется. Ты уж постарайся публиковать самодостаточный код.
    Чтоб читатели могли собрать его и проверить самые базовые ошибки.

    Во вторых сумма

    res[i] = res[i] + #IN_STM_SUMM[j].doubleValue();

    будет зависить от нескольких проверок условий которые выше по коду не срабатывают. Разберись
    почему эти проверки не сработали и будет тебе ответ.
    Ответ написан
    Комментировать
  • С чего начать создание сервиса бронирования на java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    99% успеха зависит от того имеешь ли ты вообще опыт разработки веб-приложений во взаимодействии с БД
    например. Какой-либо методички по бронированию не существует. Потому-что все подобные задачи
    по своему уникальны и бизнес как раз хочет иметь всегда решение не похожее на конкурента.
    Поэтому и шаблоны таких решений не очень полезны.
    Ответ написан
    Комментировать
  • Почему не работает import java.util.Scanner?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    java.util.Scanner - начиная с версии 1.5.

    Надо проверить на какую версию среда настроена.
    Ответ написан
    Комментировать
  • Возможно ли соединить работающий java код и так же работающий скрипт python?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Самая простая интеграция - это pipe в Unix. Этому методу 100 лет в обед но обычно
    разработчики не помнят о нем.

    java app.jar | python3 app.py

    Из недостатков - это в одну сторону работает. Как MQ.

    Если запускается джоб на java который передает информацию к python-job то можно вызвать через
    ProcessBuilder. Здесь можно проверить код возврата и принять решение о том правильно
    ли Python отработал. Из недостатков - запуск процесса - не очень быстрое событие поэтому
    на высокую частоту не стоит расчитывать.

    Если взаимодействие - более быстрое и сложное типа RPC то тогда java может быть например REST
    клиентом а python - сервером.
    Ответ написан
    Комментировать
  • Как правильно возвращать значение из геттера?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Желательно возвращать либо иммутабельные объекты (LocalDateTime вместо java.util.Date)
    либо клонировать.

    Если вернуть сложный объект со связями, то дальнейшее использование этого может
    привести к сложным и трудно-воспроизводимым багам.

    Разумеется жизнь полна исключений и тут главное чтоб вся команда разработчиков ПОНИМАЛА что
    ты сделал и для чего. Иначе будут конфликты и война правок в коде проекта.
    Ответ написан
    Комментировать
  • Есть готовый EditText для ввода размеров изображение?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ты можешь сделать два edit box и поставить их рядом слева-направо.
    Ответ написан
  • Как создать exe из jar файла javafx приложения?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    С помощью исходников и Graalvm компиллятора можно собрать выполнимый файл для Java приложений.
    Но надо внимательно читать про стек технологий которые использованы в самом приложении.
    Graal компиллятор не гарантирует поддержку всех модулей Java. Для каждого конкретного случая
    надо смотреть и тестировать на месте.

    https://www.graalvm.org/

    С launch4j я не работал. Я подозреваю что это не компиллятор а просто упаковщик который собирает
    обертку для Java Runtime и нужного артефакта.

    Судя по доке есть опции вывода детальной информации по запуску. Смотрите там https://launch4j.sourceforge.net/docs.html

    --l4j-debug-all
    Ответ написан
    Комментировать
  • Как можно выкачать файлы с помощью java.rmi через удаленное соединение?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Скачивать можно без rmi.

    Вот пример простой качалки https://stackoverflow.com/questions/921262/how-can...

    RMI это сложная и крайне неудобная технология для Java разработчика. По хорошему
    вам надо знать хотябы еще один язык C или С++ чтоб продолжать разработку.
    Ответ написан
    Комментировать
  • Как определить способ запуска процесса?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Jconsole, JVisualVM поднимают очень много информации по Java-процессу. Посмотри.
    Ответ написан
    Комментировать
  • Что изучать для написания своего Javascript на Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    JavaScript на Java уже писали много раз. Поищи по ключевым словам Rhino, MVEL.

    Написание своего собственного языка может стать работой всей жизни. При этом
    тебе еще надо успевать делать игру. Поэтому доверь лучше языковые задачи
    тем людям которые уже тратят кучу лет времени на это.
    Ответ написан
    2 комментария
  • Как хранить данные при работе с Apache Lucene?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Apache Lucene вообще не знает что такое файлы. Он оперирует понятием документ
    (org.apache.lucene.document.Document) и поля документа (Field, StringField e.t.c).
    Поля могут быть Stored (просто храниться) или Indexed (участовать в генерации текстового
    индекса).

    Поэтому посмотри учебные примереы с Lucene и попробуй перезадать вопрос по другому.
    Ответ написан
  • Как правильно использовать внешние библиотеки на Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Тебе надо обязательно прочитать что такое манифест
    https://docs.oracle.com/javase/tutorial/deployment...

    Большинство ответов на твои вопросы лежит там. Существуют разные методики упаковки
    приложения в jar-артифакт. Можно делать зависимости внешними. А можно создавать
    так называемый fat-jar (толстый jar) куда будут перепакованы все внешние зависимости.
    Shade plugin, jar plugin и еще много плагинов этим занимаются для maven сборщиков.

    Почитай еще что такое Java9 modules. Это тоже полезно.
    Ответ написан
    Комментировать
  • Почему jar не проигрывает звук?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ты прикалываешся такие молчаливые выходы делать?
    System.exit(-1);
    Пиши println... там вышли с таким-то кодом ошибки. Вообще если тебе лень придумывать имена чекпоинтам
    - делай просто нумерацию. ":1", ":2" и по ним будешь понимать где вылет был.
    Ответ написан
  • Как часто используется Spring Security? Стоит ли его учить джуну?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ты пришел в хабр спрашивать что учить? У хабра нет учебного плана.
    План бывает на курсах которые обучают Spring. Найди любой курс и
    посмотри какую последовательность знаний о Spring они предлагают.

    Spring Security это не та тема с которой обязательно начинать.
    Ответ написан
  • Какой курс Java выбрать новичку с нуля?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Нужен ментор, который шпыняет каждый день и ставит сроки. Иначе ничего не будет. Через неделю
    у тебя энтузиазм прогорит и ты пойдешь шпилить в PUBG.
    Ответ написан
  • Как получить доступ к логическим дискам на выделенном сервере?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    С помощью Java

    ProcessBuilder.start()

    ты можешь вызывать скрипт операционной системы (bash или Windows CMD) и если
    у текущего пользователя хватит прав то ты можешь увидеть результат работы df например
    $ df
    Filesystem      1K-blocks      Used Available Use% Mounted on
    none              8061940         4   8061936   1% /mnt/wsl
    .....

    потом забрать этот результат через stdout и далее парсить результат в Java.
    Ответ написан
    5 комментариев
  • В каком контексте значение класса String является неизменяемым в отличии от StringBuilder?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Почему все методы StringBuilderнельзя было поместить в класс String, чтобы не плодить классы строк?

    Главный поинт при создании immutable String - безопасность кода. Когда компиллятор точно
    знает что value строки не изменится - то он может доказать много кейсов и гарантировать что
    разделяемая память не будет сломана. Особенно это важно для мультипоточки. Когда
    разные потоки владеют строкой и здесь сам вопрос доказательства вдруг становится очень важным.

    Язык С++ например такой защитой не обладает и для него строка как фундаментальный тип
    может иногда мутировать. Тоесть если вы старались писать правильно то она конечно не мутирует.
    Но в этом есть большая разница между C++ и Java. На уровне платформы гарантировано отсуствие
    какого-то класса ошибок.

    StringBuilder - это попытка улучшить перформанс для кумулятивных строк. Тоесть например
    если вы формируете текстовый файл-отчет в памяти то вы будете постоянно делать конкатенации
    строк. Это конкатенации вызовут аллокацию-уничтожение памяти. (в скобочках помним
    что строка - не мутабельная поэтому изенить ее можно только создав новую копию с добавлением
    чего-то нового. Причем с учетом роста самой строки , драматично будет расти эффект нагрузки на память.

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

    Immutable строки - это гениальное изобретение. Оно реализовано во многих языках и платформах
    и оно практически спасает разработчика бизнес-приложений от трудно уловимых ошибок.
    Ответ написан
    2 комментария
  • Как работают транзакции в Spring?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Не все режимы изоляции поддерживаются целевой DBMS.
    DEFAULT(-1),
        READ_UNCOMMITTED(1),
        READ_COMMITTED(2),
        REPEATABLE_READ(4),
        SERIALIZABLE(8);

    Перечисление Isolation взято из умных теоретических книжек. Но Oracle к примеру поддерживает
    только READ_COMMITED и SEAIALIZABLE.

    И что ему делать если вы заказали READ_UNCOMMITED ? Поэтому я-бы сказал что Spring делегирует
    гарантии по изоляции к целевой системе.
    Ответ написан
    Комментировать
  • Как правильно обрабатывать SQLException?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Скорее всего коды SQL ошибок зависят от DBMS. Например я по старой памяти помню что если
    в коде вы видите ORA-00001 то вы скорее всего используете Oracle и ваша ошибка
    связана с нарушением Primary KEY во время INSERT/UPDATE.

    Другие DBMS (Postgres/MySQL) будут иметь другие коды ошибок.
    Ответ написан
    3 комментария