Задать вопрос
Ответы пользователя по тегу Java
  • Как строку или таблицу превратить Map?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Вот заготовка.
    Map<String, List<Integer>> list = new LinkedHashMap() {{
               put("Петя", Arrays.asList(1, 2, 3));
               put("Развитие", Arrays.asList(3, 4));
            }};
    
            String res = list.entrySet().stream().map(
                    entry -> entry.getKey() + " ; " + entry.getValue()
            ).collect(Collectors.joining("\n"));
    Ответ написан
    Комментировать
  • Как исправить программу для пирамидальной сортировки?

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

    И процедуру хипифай проверь отдельным тестом. Для всех i должен работать инвариант:
    heap[i] >= heap[i*2 + 1]
    heap[i] >= heap[i*2 + 2]
    Ответ написан
    Комментировать
  • Как проверить в регулярном выражение ip адрес на java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Мне кажется что если не решать эту задачу только регулярками а сделать такое.
    - проверить что строка состоит из 4х чисел разделенным точками
    - проверить что каждое число в диапазоне [2..255] (проверять уже как Integer)
    то тогда функция проверки будет простая и наглядная. Это для кейса 10.80.212.195.

    Для масок подсети и IPBlocks единая функция проверки все равно безсмысленна - ведь на следующем уровне API
    нам надо различать классы { IP, IP+Mask, IPBLock } и нам выгодно сделать 3 функции-предиката. Тем более что классы результата различны.
    Ответ написан
  • Как подключить hibernate к моему jar приложению?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    1. Без кода - непонятно. Без стектрейса непонятна ошибка. С чем вообще воюем.
    2. Загляни внутрь jar-ника. Там должны быть в полном составе все зависимости (в том числе и транзитивные).
    3. Начинай читать книгу Hibernate In Action.
    Ответ написан
  • Почему 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 - никакого массива не существует. Можно как получать различные аномалии в поведении приложения, (повредить другие структуры данных процесса), так и получать молчаливое поведение, что усложняет поиск ошибок.
    Ответ написан
    Комментировать