• Как создать функцию которая может принимать любые типы переменных?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Примерно так:
    <T> void genericMethod(T argument) {
            // argument extends object
            System.out.println(argument);
        }

    т.к. не понтяно какой тип будет у аргумента, он будет обладать только свойствами Object

    <T extends SomeType> void someMethod(T argument) {
            System.out.println(argument);
        }
    
        abstract class SomeType implements SomeInterface {
        }
    
        interface SomeInterface {
            //TODO :: some methods
        }

    Можно указать, что аргумент наследуют к.л. тип и тогдаможно вызывать методы этого типа.
    Ответ написан
    1 комментарий
  • Почему Java выводит список данных в таком формате?

    al_gon
    @al_gon
    Предположительно у Вас метод toString в Organization не переопределённ.
    Если Вы сделаете System.out.println(new Organization("ФАР", "4444-55555-1", "FAR@GMAIL.COM", 18)) , то тоже будет не очень.
    Ответ написан
    2 комментария
  • Где и как подтянуть теорию по некоторым темам Java Core?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    По Multithreading
    "Что выведет следующий фрагмент кода"

    Это - самый плохой класс задач на мультипоточку. Я видел много таких. Большинство из них основаны на Race Conditions и бывало и такое что негативный эффект не воспроизводится хотя и ожидается в задаче. А не воспроизводится по тесяче причин. По другой операционке или по другой версии JDK/JRE. Вобщем что
    выведет код
    нужно выкинуть и заменить его на какой-то модульный тест да и еще и под нагрузкой. И беря
    во внимание комплексность самого вопроса я-бы не стал такое выводить например в собеседования. Так
    можно и мидла макнуть головой в сортир. Попробуйте распознать в коде например задачу обедающих
    философов. Я готов спорить на коньяк что если вы никогда не слыхали - то не распознаете подвох.

    Где и как подтянуть теорию Multithreading(М). Ответ - нигде. Самый лучший вариант - начать писать много кода
    с мультипоточкой и наблюдать. Очень многие эффекты книги не объясняют. И 99% новичек нигде не прочитает
    про разницу между использованием synchronized и atomic.

    Вобщем берите код с нагрузкой и наблюдайте.
    Ответ написан
    2 комментария
  • Съезжает ли индексы после удаления записей?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Индексы, будучи созданными один раз - остаются навечно.
    Если из таблицы удалены данные (50%) - то примерно
    столько - же данных будет удалено соотвественно и из индекса.

    Дисковое пространство которое занимает индекс - обычно не освобождается.
    Тут надо читать документацию по конкретной БД. Oracle может вести себя так,
    Postgres - как-то иначе.

    P.S. Интересная терминология. Съезжает...
    P.P.S Лётчик?
    Ответ написан
    Комментировать
  • Как ускорить процесс получения большого объема данных?

    compilator
    @compilator
    Senior Data Engineer
    Сходу - это выглядит как обычная батчевая обработка данный. Легко реализуется с помощью spark.
    Ответ написан
    4 комментария
  • Как ускорить процесс получения большого объема данных?

    @rPman
    что именно занимает так много времени, проведи профилирование чтобы выяснить где больше всего проводит времени твой код - например внутренняя обработка данных или база данных?
    для 10 000 данных весь процесс занимает около 20-25 мин.
    для такого объема записей это слишком большой срок для базы данных

    Что за анализ выполняется для этих данных что так медленно? почти наверняка это сделано ОЧЕНЬ не эффективно, особенно если вылезает вот это:
    Если стрим записи в БД сделать параллельным (parallelStream()), то появляется проблема при записи в БД, так как некоторые потоки пытаются одновременно обновить одни и те же данные.

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

    Правильно - разделить свою задачу на три - анализ, обработка и сохранение данных. Затем анализ и/или обработку переделать на работу с одновременно большим количеством данных.. в оперативной памяти, а уже потом записать результат.

    Классический пример: для каждой записи ты делаешь запрос - найти соответствующий объект(ы) в базе, прочитать их, изменить и записать результат в базе. нужно сделать так - выгрузить сразу много записей (условно по 1000), изменить их с учетом того что это будет происходить в оперативной памяти, многократная запись одних и тех же объектов не будет занимать столько времени как запись в базу.

    Возможно у тебя этап загрузки из базы уже часть анализа, возможно придется переделать запрос с учетом того что он работает с большим количеством объектов, может даже больше информации выгружать.

    Современные даже десктопные машины с 16-32гб (а серверные с 128-256 легко) оперативной памяти позволяют вообще зхагрузить большую часть данных в оперативную память и обработать ее там эффективнее чем это получится делать через sql прослойку, которая рассчитана не на скорость обработки а на надежность хранения и многопользовательский доступ.
    Ответ написан
    4 комментария
  • Как ускорить процесс получения большого объема данных?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Сложно обсуждать перформанс-проблему без исходного кода.

    Я-бы предложил как всегда ударить кувалдой. Тоесть запустить по приложению JProfiler и просто посмотреть что он покажет. Проблемных мест может быть 3. Это чтение из базы. Второе это собственно проверки и валидации. Как они реализованы? Насколько качественно? И третье это собсно запись в БД. Используется ли JDBC-batch?

    SpringQuartz, cron, view здесь вообще непричем и их наличие только путает нас и вносит новые ненужные вопросы. Лучше решать проблему как одну java-функцию с входом и выходом.
    Ответ написан
    4 комментария
  • Как получить элементы ArrayList в другом классе?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Если в другом классе, то в Main надо было бы сделать метод-аксессор, но у вас не другой, у вас наследник, так что можно напрямую обращаться. Нули вы получаете потому, что JUnit запускает метод positiveTriangleCheckTest, а метод main никто не выполняет.
    Ответ написан
    2 комментария
  • Какой инструмент-конструктор выбрать для разработки UI для REST API?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Я тоже бэк :) Когда возник вопрос "для себя" делать простой фронт, попытался изучать React как самый популярный. Но чёт не осилил, какой-то он предельно странный. А вот Angular зашёл! Много слышал что он очень сложный, но я особых сложностей не узрел, по крайней мере для моих примитивных задач. Говорят, Angular заходит именно бэкам т.к. у нас нет проблем с основами ООП.
    Я думаю что фронт лучше делать именно на фронтовых фреймворках чем на Java-шаблонизаторах (таймлиф, мусташ и пр.). Во-первых, их (шаблонизаторов) несколько и непонятно какой учить. А на фронте 3 фреймворка и все популярны. Потом - ты получаешь ещё одну специальность, пусть и на примитивном уровне. Далее - тренируясь с "настоящим" фронтом, ты начинаешь лучше понимать что нужно фронту и, соответственно, лучше пишешь бэк.
    Я учил Angular по курсу Владилена Минина. Правда, он довольно старый (по 8-9 версии, а сейчас актуальна 14), но в целом актуальный. Плюс и минус этого курса - автор объясняет не "академично", а исключительно на примерах. Минус - тяжело потом что-то искать в официальных доках Ангуляра, просто не знаешь как формулировать запрос. Плюс - зная как должен выглядеть твой фронт, ты практически сразу начинаешь его писать (конечно, самые основы HTML/CSS знать надо).
    Удобно писать и отлаживать бэк и фронт отдельно. А запускать фронт "на проде" можно как на отдельном сервере (Nginx, Apache), так и "заэмбедить" в Jar-файл и тогда он будет работать на "встроенном" сервере (Tomcat, Netty).
    ЗЫ: да, учил "для себя", но активно использую по работе :))
    Ответ написан
    Комментировать
  • Какой дистрибутив java выбрать для обучения?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Берите любую lts.
    Ответ написан
    Комментировать
  • Как можно практически закрепить знания JAVA SE?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Мне кажется ты слега перегрел себя. Что там оттачивать в Enum? Какой вопрос тебя могут спросить на собеседновании на джуна и на который ты не знаешь ответ.

    В твоей ситуации я был. Это похоже на усталость. Ничего не надо делать. Надо просто отдохнуть.
    Для систематизации-же заведи себе в гитхабе проектик типа FAQ. И складывай туда code-samples
    по каждому вопросу.
    Ответ написан
    Комментировать
  • Преобразовать из Json в Java обьект?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    У вас на входе не класс Dev, а массив/список Device
    Ответ написан
    4 комментария
  • Почему не работает исключение JAVA?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Уговорили (но в следующий раз не нужно 10 вопросов на один код)
    public class Main {
    
        public static void main(String[] args)  {
    
            Scanner In = new Scanner(System.in);
            System.out.print("Введите a: ");
            int A = In.nextInt();
            System.out.print("Введите b: ");
            int B = In.nextInt();
    
            try {
               sum(A, B);
            }catch(ArithmeticException  e) {
                   System.out.println(e.getMessage());
            }
        }
        static int sum(int a,int b) /* не уверен, что нужно */ throws ArithmeticException {
                 if (a<0) {
                   throw new ArithmeticException("a меньше 0");
                } else if (b<0) { //  моя очепятка детектед.... чеккед и корректед
                    throw new ArithmeticException("b меньше 0");
                }
    
            return a+b;
        }
    Ответ написан
    5 комментариев
  • Почему не работает исключение JAVA?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Чтобы появился шанс что-то поймать, нужно это что-то сначала бросить.
    С уважением, ваш Кэп
    Ответ написан
    Комментировать
  • Как устранить ошибку CORS?

    @Wan-Derer
    Зобанели на Хабре, волки́ ;((
    Я у себя добавил такую конфигурацию:
    /*
    https://www.baeldung.com/spring-webflux-cors
    https://www.baeldung.com/spring-cors
     */
    
    package com.broadview.bvreportsgenerator.configuration;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.reactive.config.CorsRegistry;
    import org.springframework.web.reactive.config.EnableWebFlux;
    import org.springframework.web.reactive.config.WebFluxConfigurer;
    
    @Configuration
    @EnableWebFlux
    public class CorsGlobalConfiguration implements WebFluxConfigurer {
    
      @Override
      public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
      }
    }


    Это вариант для WebFlux. Если у тебя "обычный" web, будут немного другие вызовы, см. статьи в коменте.
    Ответ написан
    6 комментариев
  • Как подобрать паттерн?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Использовать полиморфную десериализацию с последующей передачей значения в перегруженный метод.
    Ответ написан
    2 комментария
  • Как упростить компиляцию и запуск?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Параметром java передаётся не имя файла, а имя класса. JVM как-то должна понять, где этот класс искать, для этого classpath и указывается. Можно конечно определить переменную окружения classpath, чтобы не указывать ключ в командной строке, но это считается плохой практикой.
    Ответ написан
    Комментировать
  • Spring или Asp.net core для будущей работы?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    сам тащусь от программирования

    Вот представьте вам говорят: бросай своё баловство это - иди в строительство / нефтянку / наркоторговлю / проституцию / пхп.
    Это стабильно, это надёжно, это приносит больше денег.
    И, допустим, это даже будет правда.

    Но я искренне не понимаю как это может хоть кого-то мотивировать.
    Занимайтесь тем что вам интересно. Тогда будет у вас и карьера и сытое будущее.
    Только так. Не наоборот.
    Сначала любимое дело - потом все вот это остальное.
    Ответ написан
    3 комментария
  • Как запускать тесты для ПО с микросервисной архитектурой?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Предлагаю использовать testcontainers - это в общем случае.
    Может быть, если поразбираться в вопросе, достаточно будет тестовых конфигов и профилей.
    Ответ написан
    3 комментария
  • Какую библиотеку посоветуете для свайпа на джава?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    А что за год свайп кардинально изменился? Там новые движения добавились? У пользователя пальцы стали другие?
    Как по мне берите вот эту https://github.com/yuyakaido/CardStackView
    Ответ написан
    Комментировать