Задать вопрос
Ответы пользователя по тегу Java
  • Имеется ли разница в мобильном Java приложении между double и int в JSON ответе?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Вобщем вики пишет по поводу самого стандарта JSON:
    Number: a signed decimal number that may contain a fractional part and may use exponential E notation, but cannot include non-numbers such as NaN. The format makes no distinction between integer and floating-point. JavaScript uses IEEE-754 double-precision floating-point format for all its numeric values (until later also supports BigInt[24]), but other languages implementing JSON may encode numbers differently.


    Вобщем получается что стандарту пофиг. И интерпретацию числа он отдает на откуп программным средствам.
    И мне кажется что Андроид здесь вообще не при делах. Это слишком общее понятие. Гораздо важнее какой JSON-парсер вы используете в коде. Всего парсеров - огромный вагон. Но я вот регулярно использую 2 из них.
    - Google GSON.
    - Jackson
    Вот попробуйте распарсить ваш документ с использованием г-сона и джаксона и посмотрите что будет на выходе. Там почти всегда рекурсивное дерево из таких шаблонов LinkedHashmap[String,Object] где вместо обжекта будет стоять то что вы ищете.
    Ответ написан
    4 комментария
  • В чем разница между HttpServer и HttpServlet?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Сервлет это Java-аналог cgi-скрипта. Сервлет - архаизм. Древний и достаточно бесполезный. Хотя в стеке технологий веба вы еще часто можете его видеть везде где есть такие контейнеры как JBoss, Tomcat, Web-Sphere. Все они понимают сервлет как актор который может обслуживать GET/POST/PUT запросы и что-то возвращать.

    В современных технологиях шаблонизаторов сервлет уже является ненужным звеном и его можно выбросить. Для асинхронного веб-сервера netty ЕМНИП сервлет тоже не нужен.
    Ответ написан
  • Существует ли какая- та тула, плагин или просто сервис который бы помогал улучшить код.?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я полностью поддерживаю использование УЛУЧШАТОРОВ типа SonarQube, PMD и прочие которые просто позволяют указать мне на явные ошибки типа potenrial null pointer de-referencing.

    Но вот в части - написать по другому - я-бы сказал что это открытый вопрос. Ставить ТЗ нельзя так чтобы "сделать на выходе хоть что-нибудь". При таких критериях мы получим просто рандомный шум который тем не менее компилируется. Типа "бей посуду - я плачу". Но автору такое не надо.

    Тогда давайте зададим вопрос. А что собсно надо автору? Приведу пример который я часто использую. Решения задач на codewars. Они разные. Но обычно в топе висят 2-3 штуки которые поражают своей краткостью и различностью парадигм. Например в топе висит одно решение с хвостовой рекурсией а другое с циклом. И я не могу решить которое мне больше нравится. Нравятся оба. Но скорее всего при разработке code beautifier я-бы не стал вообще копать 2 направления. Достаточно было-бы просто поставить задачу сделать код меньше. Я думаю что все согласятся что меньше строк - меньше надо будет скроллить вниз. Особенно эти дело любят Джависты. Как накидают своих бинов с геттерами-сеттерами ойойой. 80% кода - нечитаемый шлак. Ну да ладно. А насколько меньше? Есть обфускация. Это сознательне выпиливание смыслов из всех идентификаторов. Вобщем переменные можно называть $1,$2 e.t.c. и это тоже работает. Но ... согласитесь это путь в никуда.

    Поэтому. Чтобы улучшать мы должны САМИ задать вектор улучшения. Парадигмы например. Мы хотим код тяготеющий к функциям или к объектам с методами? Мы хотим код с детальным дебагом (каждый оператор в своей строчке) или нам пойдет исходник как у Джона Кармака. Весь С++ исходник в 1 длинную строку. Мы хотим код на конечных автоматах? Или на комбинаторах? Мы хотим больше перформанс но хуже читаемость (вспоминаем знаменитую Кривую Шипилёва) или наоборот?

    Вобщем думайте над вектором улучшения.
    Ответ написан
    Комментировать
  • Какой смысл команды dup в JVM байт коде? И что за индексы локальных переменных?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Какой смысл команды dup в JVM байт коде?

    Жаль что ты не программировал на калькуляторе МК 60. Это целая эпоха.

    Значит есть разные пути к вычислению арифметики. Например если тебе надо возвести в квадрат число 5 на регистровой машине - то ты должен загрузить регистр R1 числом. Потом регистр R2. И потом найти такую команду умножения которая свяжет регистры R1 и R2 и перемножит и сохранит еще где-то результат. В силу современного зоопарка процессоров практически нереально создать такой абстрактный байткод который бы эффективно отображался на опкоды разных железяк. Поэтому решили забить на регистровую машину. И использовать стек как хранилище операндов для операций. Разумеется в JVM есть и аналоги регистров но с ними не выполняются операции. ЕМНИП. Если хошь что-то сложить или вызвать функцию - то положи на стек и там-же получи результат. И если вернуться к возведению числа 5 в квадрат это может быть так

    положить 5 на стек.
    дублировать
    вызвать функцию умножения


    На каком-нибудь языке Forth это было-бы тремя командами
    5 DUP * .
    Результат - на вершине стека.

    Это кратко записывается. Но это несет абсолютно ту-же смысловую нагрузку для арифметики.

    Почему их только 256 может быть?

    А чорт его знает. Так решили. Решили что 256 регистров это капец какой максимум для процедуры или функции. Послушай ради интереса видосы про процессор Эльбрус. Там тоже интересно с регистрами сделано.

    о есть на этапе генерации байт кода, сюда можно было после команды, просто адрес сразу впихнуть. И скорость выполнения должна же быть быстрее.

    Я думаю что твое предположение о том какой код соберет JIT не совсем верное.
    Вместо спора я предлагаю взять какой-то тестовый сценарий и подсмотреть какой
    будет собран код. Я знаю что скептики Java обычно после изучения вопроса глубже
    меняют свою точку зрения. Ну по крайней мере перестают считать Java
    "медленным покемоном". Java действительно была слоупоком во времена Jdk 1.1.
    Но щас это не так.

    Несколько лет назад я мерял производительность floating-point вычислений на приложении
    которое рендерит зеркальные шары. И разница между С++ и Java была не сильно большая.
    10 секунд на сях и 12 секунд на втором языке соотв. Хотя этот тест узкий и он просто
    показывает частный случай.
    Ответ написан
    4 комментария
  • Возможно ли загрузить .jar файл в реальном времени с помощью JNI?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Автор посмотри системные переменные. System.getProperties() там полно всякой информации по текущему процессу. В том числе текущий директорий, и много другой полезной информации. Это поможет ответить на вопрос где лежит твой бинарник. А именно полный физический путь к файлу.

    Как скачать это - целая цепочка вопросов и ответов например КУДА качать и ОТКУДА. Ведь по вопросу непонятно где ты сам находишся в этом стеке технологий. Поэтому когда задаешь вопрос - дай хотя-бы обзор твоей технологии. Графическое приложение AWT/Swing/SWT/JavaFx. Веб-приложение. Stand-alone процесс. Апплет ( :)).
    Ответ написан
    Комментировать
  • Что случится после смерти кэша?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Я хочу закэшировать на 50 минут.

    Неправильно. Не ты определяешь это время. Если это JWT-токет то ты можешь просмотреть его тело. Парсеры есть. Там внутри будет указано точное время когда он сдохнет. Обычно за несколько минут до смерти ты снова дёргаешь сервер токенов и просишь новый токен.

    С guava cache я не работал. Но это не имеет значения. Основной flow не меняется. Хранить его в базе тыщу лет или убивать сразу - дело хозяйское. Для протокола не имеет значения что ты делаешь со старыми трупами токенов. Тут главное новый получить.
    Ответ написан
  • Какой язык или технологию осваить после Java Spring framework?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Имеет смысл расти вширь. Тоесть изучать технологии виртуализации Docker/Kubernetes, сети, протоколы и особенности ОС linux (на которой я предполагаю все что ты пишешь будет работать). Имеет смысл понимать как работает тонкая диагностика linux чтобы решать performance issues. Я убежден что большинству Java-разрабов этого знания не хватает.

    Kotlin изучать я считаю не имеет смысла. JSP процессы улучшают Java язык таким образом что Kotlin не сильно будет отличаться в будущем.

    Scala - язык с очень высоким порогом входа и вряд-ли для микро-сервисов тебе что-то новое принесет. Это - скорее к BigData или к специфичным фреймворкам (Play). Ну ... или нужно быть очень сильным фанатом ФП чтобы разрабатывать на Scala то что вобщем-то и так прекрасно разрабатывается на Java.
    Ответ написан
    Комментировать
  • Что значит описать встретившуюся геометрическую фигуру и определить положение точки в этой фигуре?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Задача решается довольно просто. Это булевы операции над углами и окружностями.
    В данной задаче сложностью является следующие вопросы
    1) Как ЗАДАНА окружность?
    2) Как задан угол?
    3) Как задан квадрант? Или прямая. Или полу-плоскость.
    После того как мы узнаем это - сможем легко описать цветовую область. Например голубой сегмент окружности описывается как:
    - пересечение окружности с полу-плоскостью
    или
    - пересечение двух полу-плоскостей
    Ответ написан
  • Стоит ли читать Философия Java в переводе на русский язык?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если это Брюс Эккель - то я читал ее в 2013 году. Тогда хорошо зашла. Но я не знаю насколько книга актуальна для современной Java. После того как сообщество перешло на такой бешеный темп создания релизов - то книги стали устаревать быстрее.
    Ответ написан
    6 комментариев
  • Как написать метод который принимает строку, преобразует ее и возвращет строку?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В задаче есть 2 смысла. Первое это собственно алгоритмизация. Показать преподавателю как вы умеете декомпозировать задачу на примитивные шаги. И показать оптимизации. StringBuilder к примеру. И второй смысл - просто решить задачу например используя JavaStreams. Это будет красивее. Компактнее. Но показать алгоритмизацию будет неудобно.
    Ответ написан
    3 комментария
  • Стоит ли использовать Object как тип возвращаемого значение метода в java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Что с этим Object будет делать вызывающий? Непонятно.

    Я-бы обсудил контракт этого метода. Если он должен вернуть заглушку которая просто символизирует пустой результат вызова - то можно использовать Optional и указать опциональный тип. Если пустой список - то Collection.emptyList().

    Я не вижу никакого смысла в бизнес-приложении использовать тип Object. Он - технический. А не прикладной.
    Ответ написан
    5 комментариев
  • Делаю changelog на pgsql выходить ошибка, как решить?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Что за вертикальная палочка? Зачем она?

    ALTER TABLE sl.lesson {
        DROP CONSTRAINT lesson_timetable_id_fkey |
        DROP COLUMN timetable_id
    }


    А это что?
    liquibase.exception.ValidationFailedException: Validation Failed:


    Изменял change-sets грязными руками? Этого нельзя делать. То что установлено в репо - маркируется контрольной суммой и нельзя фиксить задним числом. Создаёшь новый changeset который исправляет.
    Ответ написан
    Комментировать
  • Как анализировать Java процессы?

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

    Так не бывает. Если вы разрабатываете этот софт - то вы соотв. знаете какие changes заходили в последнем релизе.

    Если вы прям вообще-вообще невкурсе где у вас нагрузка или bottleneck - то это плохо, друзья. Вы не знаете свой код. И почему случилось так что вы раньше этого не знали - непонятно. Вобщем главный совет - будьте familiar to your code. И вам не понадобиться бегать и в день релиза искать профилировщики.

    +1 к тому что написал Владимир. Все верно.
    Ответ написан
  • Ка лучше использовать parallelStream() в Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Не все коллекции поддерживают параллелизм стримов.

    Какие BestPractices? Запускай анализ производительности под JMH и наблюдай. Не верь в рекламу.

    Пример с подсчетом среднего значения в List (кстати какой это List? Какая implementation?) - очень софистичесчкий
    и надуманный. Его любят преподаватели. Но в реальной жизни и в продуктовом коде тебе чаще придется вычислять среднее по ResultSet из JDBC или по какому-нибудь толстому JSON документу который льется из микросервиса.
    Ответ написан
  • Thymeleaf не видит атрибуты, что делать?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    А так?

    <p>${message}</p>
    Ответ написан
  • Как получить определенное число в цикле с шагом?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    @tailrec
    def getDrinksWithStep(g : Int, step : Int, i : Int = 1, r : Int = 0) : Int = 
      if (i <= g) getDrinksWithStep(g, step, i + step, r + i) else r
    Ответ написан
    Комментировать
  • Kafka Consumer re-consume незакомиченные сообщения?

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

    Покажи код консьюмера. Это твоя логика. И ты решаешь где тебе делать фиксацию пачки и где не делать.
    Ответ написан
  • Как можно реализовать получение имя вызывающего класса?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Посмотри что вернет

    Thread.currentThread().getStackTrace()

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

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Программирование Андроид весьма специфично. Там JVM не такая.
    Поэтому я тоже задам вопрос - под какую Java автор хочет разрабатывать.

    У современных IDE количество фич исчислятеся тысячами а если ставить плагины то еще на порядки. И вообще спор на тему IDE он не совсем технический а скорее - спор вкусов. Кому арбузы нравятся а кому дыни. Без конкретной аргументации ибо невозможно дать точное определение вкусам.

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

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    А как выглядит слово Ромич в hex-редакторе? Исходник я имею в виду.
    Ответ написан
    Комментировать