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

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Не существует объективной методики сравнения языков. Но вам, с точки зрения денег, можно просто поискать местный сайт по трудоустройству и за пару дней принять решение.

    С моей точки зрения, если вам интересно работать в банках и делать backend - то java лучше заходит. Если десктоп приложения, или unity игры - то c#
    Ответ написан
    3 комментария
  • Что не так в коде Java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    А распечатай чему равно month.

    System.out.println("Input = " + month);
    Ответ написан
  • Как запустить готовый проект в VS с библиотекой libGDX?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Вопрос звучит так. Где находится класс ApplicationListener.class ?

    Его надо подключить к проекту. Ищи его.
    Ответ написан
    Комментировать
  • Правильно ли я использую исключения в java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Не очень понятно какая решается задача. Если это школьная лабораторная на тему изучения Exceptions - то нормально.

    Но обычно на исключения строятся такие кейсы которые неудобно ловить проверкой условия. Например ошибки I/O. И логика обработки этих ошибок обычно глобальна. Например целая процедура завершается когда нет доступа к сети. И безразлично где конкретно процедура упала. Нет сети - сразу на выход.

    И тут надо не 2 попытки делать а цикл do-while:

    do {
       input = askForInput();
    } while(input < 0);


    Кроме того sc.nextInt() бросает 3 вида исключений которые ты как-то не заметил. Их тоже надо отработать.
    Ответ написан
    Комментировать
  • Какие есть Книги про ООП где максимально подробно рассказано о теории?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Поскольку ты тегнул вопрос "JAVA" то имеет смысл просто начать изучение сразу по книгам Брюса Эккеля и Хостмана.
    Вот в разрезе того как они описывают ООП - тебе будет достаточно. Еще посмотри на книгу Шаблонов проектирования (от Банды четырех) и Рефакторинг с шаблонами от Джоша Кериевски.

    Читать чистую ООП - теорию я тебе не советую. Там нет того что тебе понадобиться.
    Ответ написан
    1 комментарий
  • Проблема вывода кириллицы?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    У Java из коробки нет проблем с поддержкой национальных кодовых страниц. Все строки - поддерживают диапазон Unicode. Проблема может быть у Visual Studio Code и у ваших исходников.
    Ответ написан
    Комментировать
  • Как строку или таблицу превратить 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
    Ключевая фраза

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


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