Ответы пользователя по тегу Java
  • Почему StringBuilder.setLength(0) медленнее чем ожидается?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    А как вы измеряли? Методика бенчмарков в Java - нетривиальна. Тут надо попасть в прогретый код и в промежутки между паузами GC. Иначе ваш эскперимент будет выдавать вовсе не то время что вы хотите мерять.
    Ответ написан
    4 комментария
  • Можно ли принять get или post запрос?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Мобильный телефон как веб-сервер? В этом нет смысла по следующим причинам.
    Ненадёжна связь. Телефон часто попадает в зоны недоступности. Кому нужен сервер который периодически отваливается? Или какую логику должно иметь то приложение которое делает GET и получает SocketTimeout.

    Сложности с получением IP. Куда подключаться? Какой алгоритм обновления?

    Если нужно взаимодействие в обратную сторону от нормального сервера к телефону то уже много лет как создана технология веб-сокетов и всех устраивает. Сервер уведомляет телефон. Вот соцсети так работают.
    Ответ написан
  • Как JPA понимает, какую реализацию использовать?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ты можешь запустить процесс с опцией -verbose:class и в stdout будет видна загрузка классов ClassLoader. По namespace можно понять какие имплементации подгружаются в этот момент. Да Hibernate - это самая популярная реализация JPA. Вроде есть еще EcliplseLink но я с ним не работал.

    Вообще я не уверен что JPA и Hibernate имеют отношение "is a" / "has a". Современный Hibernate слишком сложен и я подозреваю что у него свои возможности уже давно перкрывают просто JPA. За деталями лучше идти на авторский сайт https://hibernate.org/
    Ответ написан
    Комментировать
  • Как отправить имя файла, а потом и сам файл в ByteBuffer Java NIO?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Имя файла с клиента обычно несёт мало смысла. Ну будет там 100500 файлов с именем Книга(1).xls. А тебе нужна какая-то уникальность.
    Ответ написан
    Комментировать
  • Как оформить все свойства книг не через константы?

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

    По поводу лесенки из if-else. Здесь можно два рефакторинга. Во первых убрать цепочку методов.
    Вот это
    if (backMessage.getCaption().contains(PZV_NAME)) {
                        whichBook(POD_COVER, POD_NAME, POD_DESC);
    } else if (backMessage.getCaption().contains(POD_NAME)) {

    заменить на
    val caption = backMessage.getCaption()
    if (caption.contains(PZV_NAME)) {
                        whichBook(POD_COVER, POD_NAME, POD_DESC);
    } else if (caption.contains(POD_NAME)) {

    И второе. Вот эта логика может быть сведена к вызову одной функции которая на вход получает атом и на выходе возвращает тройку атомов (tuple или triple). В этом случае логика if-else сводится к конфигурации таблички замен
    и к функции которая просто делает декодирование одного значения в другое.

    static final Map<String,Triple<String,String,String>> = new HashMap() {{
       put(PZV_NAME, ImmutableTriple.of(POD_COVER, POD_NAME, POD_DESC);
       put(POD_NAME, ImmutableTriple.of(KORR_COVER, KORR_NAME, KORR_DESC);
       .......
    }};
    
    Map<String,Triple<String,String,String>> transform(String arg) {
      return map.entrySet()
                    .stream()
                    .filter(x -> x.getKey().contains(arg))
                    .findFirst().get().getValue();
    }
    Ответ написан
    3 комментария
  • Как сделать уведомление на сайте для всех пользователей?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    liferay(который скоро будет заменен на spring boot) и сам spring mvc

    Я-бы тормознул с изменениями и подождал перехода на spring mvc. Кому надо дважды реализовывать одно и тоже?

    Технологий пуша существует наверное много. Коробочный вариант - это Push API. Но проблема в том что обычные пользователи сильно не любят любую постороннюю активность popup на landing page и всячески банят и закрывают этот функционал.

    Лучше всего не делать ни alert ни Push а просто - тихий мигающий символ конверта где-то в углу. Пользователь если увидит - прочтет.
    Ответ написан
    4 комментария
  • Как остановить бесконечный цикл?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Это - популярный вопрос на собеседованиях.
    if (saa == "Please exit")
    Обычно в Java строки сравнивают через equals() а данное условие выше может сработать а может и нет :)

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

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Вместо вот этой колбасы
    for (int c = zis.read(); c != -1; c++){
          out.write(c);
    }

    следует использовать из библиотеки Apache Commons IO
    import org.apache.commons.io.IOUtils;
    
       IOUtils.copy(zis, out);
    Ответ написан
    1 комментарий
  • Разница между if else и try catch?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    try-catch - это эволюционно развитый if-else. Вот те кто кодили на "C" знают как тяжело работать с файловыми операциями. Любой fopen,fread e.t.c. надо проверять на код возврата и обеспечивать аварийный выход с очисткой (!) всех ресурсов. И вот отслеживание всех ресурсов и их состояний это нетривиальная задача. Для этого создали try-with-resources. И вообще возврат в это тяжелое мракобесное время проверок errorcode - никому не советую.

    В случае с делением на 0 (ArithmeticException). Если вы рисуете на экране график функции - то возможна ситуация
    где будет много делений на нуль. Тогда обработка исключений может стать performance issue. Это правда.

    Может помочь декомпозиция формулы с делением на результат с Option[Int] (в Scala и Java это уже рабоатет) и возвращать неопределенное значение None в случае когда в знаменателе стоит ноль. Вообще в языках ФП данный подход очень рекомендуется т.к. в этих языках есть синтаксический сахар для быстрого сворачивания (flatMap) списков таких опциональных значений.

    Тоесть если вы из функции хотите вернуть пустоту - то возвращаете None вместо бросания прикладных исключений.
    Ответ написан
    8 комментариев
  • Как можно реализовать пагинацию в Java, в том случае, когда данные для фильтрации должны браться из двух разных микросервисов?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Ключевая фраза

    Если отфильтровать данные по пользователю а затем по работе, то пагинация сломается (записей будет меньше, чем мы ожидали бы увидеть)


    Мне кажется что здесь надо просто с бизнесом обсудить что собственно надо публиковать. С фильтрацией или без. А пагинация - это просто технический приём. К корректности результата вобщем то не имеет прямого отношения.
    Ответ написан
    Комментировать
  • Как хранить запросы mongodb?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Можно посмотреть стандартный туториал по Spring+Mongo https://spring.io/projects/spring-data-mongodb
    Ответ написан
    Комментировать
  • Как установить 0760 права на файл в java через smb?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если искать документацию по протколам SMB/CIFS то все дороги ведут в Microsoft.
    А у Microsoft вроде-бы нет концепции файловых битовых масок rwx. У них - больше ACL.
    Ответ написан
    Комментировать
  • Почему возникает ошибка Bad Base64?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если говорить языком фактов то в кодировке Base64 нельзя использовать символ "_", а можно только от буквы A до символа "/" в диапазоне ASCII. Где и как оказался символ подчеркивания - непонятно.
    Ответ написан
    Комментировать
  • Почему клиент на Java не может подключиться к серверу (на сокетах)?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Тут - какая-то обще-системная ошибка, и сообщение java.net.ConnectException: Connection refused: connect
    совершенно не несет никакой информации где искать проблему. Давайте переведем задачу из плоскости Java в плоскость сетей и протоколов. Вобщем для начала надо подёргать порт снаружи используя утилиты telnet или netcat и далее уже смотреть по ошибкам.

    nc -w 3 -zv tester17.com 33333

    когда получишь сообщение : "Connection .... succeded!" - то можно возвращаться в Java кодинг.
    Ответ написан
    Комментировать
  • Какие бессмысленные/раздражающие особенности байткода Java остались с древнейших времён?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Если посмотреть в историю - то JVM создавалась в 1996 году как платформа для встраиваемой техники. Холодильники. Кофеварки. Техзадание такое было. И разумеется в саму спеку были заложены ограничения которые позволят байткоду собираться даже на очень слабых машинах. Где мало регистров и мало разрядности. И мы имеем стековую машину (наподобие калькулятора МК-60) в которой принципиально нет регистровой адресации. В отличие от платформ .Net/clr где есть более современная адаптация к процессору. Вобщем если вы заходите написать код который будет friendly к SSE/AVX регистрам - то у вас ничего не выйдет. На уровне JVM - максимальная разрядность алгебраического типа - 64 бит (знаковые). Это как мне кажется наиболее сильное ограничение. И неизвестно когда спека будет расширена. Насколько я вижу Oracle и JCP очень консервативны в этом вопросе и неохотно вносят изменения в сам байткод.
    Ответ написан
  • Вопрос про массивы в Java, и понимание разницы между С++ и Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Основная разница - это контроль границ. В runtime, java не позволит вам выскочить вне диапазона индексов.

    В c++ runtime - никакого массива не существует. Можно как получать различные аномалии в поведении приложения, (повредить другие структуры данных процесса), так и получать молчаливое поведение, что усложняет поиск ошибок.
    Ответ написан
    Комментировать
  • Как сделать драйвер виртуального микрофона для подключения с JAVA?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Скорее всего эта задача выходит за рамки java разработок.
    Ответ написан
  • Как визуализировать графы в Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Посмотри утилиту graphviz. Она позволяет красиво оформлять текстовые файлы с вершинами и ребрами в картинки.

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

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    В базовой комплектации интерфейс Collection позволяет извлекать объекты через iterator(). Чуть позже в новых версиях jdk - появляется последовательный stream(), который вызывает iterator. И параллельный stream, который не всегда поддерживается для всех реализаций коллекций. Например файл класса STDIN - только последователен и обернуть его параллелизмом - принципиально невозможно.
    Все прочие магические методы - просто переходники или адаптеры над итератором.
    Ответ написан
    Комментировать
  • Jetty-maven-plugin классная тулза, или лучше его (*****) не использовать!?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Прежде чем ругать jetty - сравни работу своих сервлетов с Apache Tomcat. Может ты там боков наделал?
    Ответ написан
    Комментировать