Ответы пользователя по тегу Java
  • Как работать с большими json файлами, которые получаются по запросу в Андроид приложении?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В Андроиде насколько я помню есть API для работы с SQLite БД. Это в тех случаях
    когда тебе надо экономить память но и работать с данными тоже надо.
    Можно попробовать 1 раз скачать список станций и считая его достаточно
    стационарным - положить в БД
    и потом делать с ним joins из других запросов.
    Ответ написан
    Комментировать
  • Возможно ли написать так сказать кейлоггер на java если да то что использовать?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Для автоматизации тестирования - посмотри Robot
    https://docs.oracle.com/en/java/javase/21/docs/api...
    но его функционал в основном завязан на графические приложения
    созданные с java.awt.
    Ответ написан
    Комментировать
  • Как вычитать код страницы в Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Вот посмотри как тут пишут https://www.geeksforgeeks.org/selenium-with-java-t...
    Ответ написан
  • Как проверить, что строка содержит только цифры и символы?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    public static boolean isDotOrDigit(String s) {
            return s.chars().allMatch(c -> Character.isDigit(c) || c == '.');
    }
    Ответ написан
    2 комментария
  • Как замокать StringJoiner?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Тебе не нужно мокать StringJoiner. Это точно тестовый антипаттерн потому
    что сам по себе Стринг джойнер не является источником данных. Это все равно
    что мокать функцию синуса или квадратный корень. Это просто звучит как бред.

    А мокать тебе надо твою бизнес логику которая продуцирует данные для другой
    бизнес логики которая тестируется. Вот.
    Ответ написан
    Комментировать
  • Как транспонировать биты числа максимально быстро?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ищется функция вида

    def transpose(matrix uint16) : uint16 = {}

    Если она ДЕТЕРМИНИРОВАНА тоесть зависит от аргумента и все. То можно ее ускорить
    путем МЕМОИЗАЦИИ тоесть создания просто таблицы расчитанных значений.
    Это будет очень быстро.

    Это удобно поскольку таблица получается не очень большая и влезает в разумные
    рамки памяти. Если допустим мы говорим о 32х битах то можно изучать варианты.
    В реальном мире линейного распределения аргументов не бывает. Распределение
    всегда косит в какую-то сторону, и этим можно вользоваться, создавая кеши значений
    типа LRU или дисковые базы данных как делают например, для
    тяжелых расчетов или в вебе для медленных источников данных.
    Ответ написан
    Комментировать
  • Не запускается код из-за ошибки Process finished with exit code 1, почему?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    У тебя
    Tables.check();
    не обрабатывает исключение.
    Ответ написан
  • Как из базы данных MySQL в Java получить результат запроса в виде объекта?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    [maiorow, mWbs0yt, 3, [1,8], [8,9,10,11,12], dir_str, ZXC120, 3, [7], [13], DirLid, ZXC121, 3, [2], [1,2,3,4,5,6,7]]

    Это какая-то чепуха полученная методом toString. Спутались запятые и вообще непонятно где
    объекты начинаются и где заканчиваются.

    Распечатай отдельно чему у тебя равен direction_json и object_types. И я не уверен что они являются
    строками. Возможно на уровне БД это более сложный объект. Короче узнай его тип.
    Ответ написан
    Комментировать
  • Как научиться разрабатывать большие проекты на Java, если раньше писал на PHP?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я много писал веб на PHP (с фреймворками), но давно хотел перейти на Java, Spring и т.д.

    Поздравляю. Ты теперь откроешь для себя целую вселенную и поймешь что Java - очень разная.
    Например стоило-бы отличать Java Android и все остальное.

    По поводу процесса компилляции. Почитай про технологии JSP-страничек. Она очень похожа
    на PHP по своей задумке. И там реакция на изменения кода чуть быстрее чем в Servlet-приложении
    хотя JSP идеологически является макросом над сервлетом.

    Но в топике верно выше написали что от серверного рендеринга сейчас уходят. И современные Java-веб
    приложения обычно делают 2 команды. Первая делает только дизайн фронта. Вторая - обычно микросервисы
    которые с этим фронтом взаимодействуют. Почитай также про GraphQL. Это полезно для развития.
    И многие вещи в Java были добыты эволюционным путем. В частности такая мануфактура как
    дизайн и бизнес-логика имеют четкое разделение и это правильно. Это стабилизирует релиз
    и позволяет бизнесу делать и тестировать фичи независимо. Например фича нового REST сервиса
    может быть создана и оттестирована еще до того как готов дизайн и наоборот. Дизайн на моках
    можно показать заказчику пока сервис только в разработке.

    Оказалось, что приложению надо 3-4 минуты, только чтобы стартануть на машине разработчика.

    Это нормально. Мне попадались очень тяжелые монолиты которые на мощных машинах стартовали
    по 30-40 минут. Да и такое бывает. Это тяжелая приставка *enterprise. И конечно это идеологически
    отличает Java от PHP. Для корпоративных приложений в принипе неважно сколько они стартуют.
    Главное когад они уже стартовали и 30 минут прогревали кеши из БД например то биржа будет
    работать быстрее в runtime. Вот. А подготовку к работе можно делать и 30 минут - это тоже ОК.
    Главное что клиент это не замечает в силу закрытого опер-дня и Blue-Green deployment.
    Тоже почитай про это кстати. Полезно.

    Из-за долгих перезапусков (тем более на новом для меня проекте) разработка шла долго и мучительно.

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

    С точки зрения например корпоративного процесса разработки - любая фича разрабатывается 1 день. Это я меряю
    по себе. Беря во внимание чтение ТЗ. Разработку. Цикл тестирование. Деплойменты. Аксептенсы и прочее.
    И если тебя просят покрасить кнопочку с красного цвета на синий - ты спокойно сообщай что
    это занимает 1 день в конвейере процессов. И это нормально. Это корпоративная бюрократия.
    И Java - бюрократична. И ты главное не стрессуй а просто используй эту бюрократию в свою
    пользу. Пей кофе. Читай книги пока идет deploy pipeline.
    Ответ написан
    2 комментария
  • Можно ли демонстрировать или отображать программу .exe в окне своей же программы?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Да можно. Если речь идет например о том чтобы в HexEdit открыть сам HexEdit.
    Но некоторые ОС в момент исполнения файла могут накладывать на него блокировку
    поэтому редактировать его будет нельзя или перемещать тоже будет нельзя.
    Ответ написан
  • Как задать url pattern для фильтра в Spring Framework?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Предположительно это может реализовано в AntPathMatcher. Посмотри как там документация
    описывает

    https://docs.spring.io/spring-framework/docs/curre...
    Ответ написан
    Комментировать
  • Не запускается сервер Minecraft на ядре Forge, как это исправить?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Возможно такое. Серверная JDK поставляется без UI компонентов. Так называемая headless-версия.

    Проверить можно следующим тестом.
    assertEquals(true, GraphicsEnvironment.isHeadless());
    Ответ написан
    Комментировать
  • Куда двигаться дальше, чтобы создать web приложение?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Обязательно ли нужно уметь их писать? Я думал, что Spring будет автоматически создавать их, а от нас будет требоваться создавать контроллеры, модели и т.п.

    С точки зрения новых подходов к разработке backend (GraphQL) вообще нет смысла изучать
    методы DEL/GET/PUT. Все будет заменяться на POST, который делает всю работу и в нем-же будут
    коды ошибок и прочее.

    С этой точки зрения сервлет является таким-себе странным рудиментом. Вроде он существует.
    Обеспечивает команды HTTP-протокола. Но кому нужны эти все команды - непонятно?

    Можете запрограммировать приложение с сервлетом типа превед-мир чтоб понять как оно
    будет работать. Но вряд-ли в современном бизнес-программировани или промышленном
    программировании от вас кто-то этого потребует.
    Ответ написан
  • Почему возникает ошибка: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index -1 out of bounds for length 3?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ты думал что это функция которая исполняется каждый раз?

    boolean y = x>=0;

    А это просто переменная которая один раз присваивается и больше не меняется.
    Вот поэтому цикл - бесконечный и приводит к ошибке индекса символа в строке.
    Ответ написан
    Комментировать
  • Как улучшить код?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Так не делается.

    Согласно лучшим практикам (best practices), ты должен сначала покрыть
    свой код тестами.
    Тоесть представить на наше обозрение проект, который
    компилируется и тестируется. И после этого мы сможем предлагать различные
    improovements для кода базируясь на улучшении производительности
    и на уменьшении например метрик code complexity.

    При этом все изменения не должны ломать тесты. Это - очень важно.

    По коду. Непонятно, почему в методе swapCharacters ты применил StringBuilder
    и в то-же время в textModifier ты решил использовать replace и конкатенацию
    строк. По отдельности к каждому методу нет вопросов. Но есть вопрос по единообразию
    кода. Уж коли ты решился на суровые оптимизации скорости - то нужно выдерживать
    работу в таком ключе. Это - совет по конвенции кода по отношению к своим проектам.
    Договорись сам с собой. Тебе важен перформанс или просто ты делаешь POC и тебе нужен краткий код?
    Ответ написан
    Комментировать
  • Зачем нужны методы, считывающие или вводящие примитивы?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    RandomAccessFile, FileInputStream - это абстракции поверх системного I/O. В идеале они должны
    иметь всего 1 метод. Чтения блока байтов в буфер. Но идя навстречу разработчику они любезно
    добавили чтение примитивов чтоб читать двоичные форматы например JPG, MP3, SQlite и прочее
    в виде sequence из примитивов в правильном порядке.
    Ответ написан
    Комментировать
  • Почему общий размер папки равен нулю?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Надо этот total count учитывать внутри волкера.

    @Override
                public FileVisitResult visitFile(Path path, BasicFileAttributes attr) {
                    totalFiles.incrementAndGet();
                    totalCount.addAndGet(............); // Add file length
                    return FileVisitResult.CONTINUE;
                }
    Ответ написан
    2 комментария
  • Почему не подписывается приложение?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Тебе чтобы глянуть сертификат - безразлично какая версия JDK. Потому что стандарты
    криптографии - это вообще отдельная тема.

    Поставь себе временно JDK-21 и спокойно посмотри все подписи.

    Еще зайди внутрь apk файла и поищи саму подпись. Можно найти глазами.
    Ответ написан
  • Какой правильный класс коллекции для хранения сортируемого списка?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Задача : сделать так, чтоб при принудительном обновлении в первую очередь обновлялись объекты, которые не обновлялись дольше всего.

    Мне не очень понятно, что мешает их обновить сразу?

    Стоимость операций с HashMap, TreeMap достаточно дешевая чтобы этим вопросом вообще не
    беспокоиться.

    Если бы у тебя было очень много объектов и они не влазали бы в heap, то тогда я-бы предложил
    LRU Cache (Last Recently Used). Но у тебя 5000 объектов. Это мало для БД и кеша горячих объектов.
    Ответ написан
    Комментировать
  • Как исправить ошибку при установке Open JDK 17 Java на Ubuntu 22?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ubuntu 22 уже устарела. Релизнулся 24 LTS поэтому можно переходить.
    По поводу archive.ubuntu.com. Есть много причин почему у вас нет доступа
    в том числе и политические причины. Но попробуйте найти региональное зеркало
    этого репозитария и прописать его хотя-бы в /etc/hosts чтобы доступ шел туда.
    Протокол - не секретный. Без https. Тоесть никакой проверки домена не будет.
    Ответ написан