• Как тестировать DAO слой на Java с Mockito?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мокают сам DAO, никто в здравом уме не мокает Connection/DataSource и т.д. поскольку поддерживать такие тесты выходит слишком дорого - проще написать простенький интеграционный тест, который использует реальную базу данных.
    Ответ написан
    Комментировать
  • Как добавить сущность в коллекцию со связью One-To-Many, не извлекая всю коллекцию из БД?

    @DmitriyLamzin Автор вопроса
    После некоторого количества медитации:

    На первый мой вопрос ответ - нет. Коллекция будет всегда доставаться, как только к ней попытаться обратиться. Выход хорошо описан здесь.

    Второй вопрос. Если все же делать через ассоциацию One to Many. То нужно делать не через JoinTable, что по умолчанию, а через @JoinColumn. Тогда sql для любой итерации добавления объекта будет выглядеть так:
    Hibernate:
    insert
    into
    SubCategory
    (subCategoryName, subCategoryId)
    values
    (?, ?)
    Hibernate:
    update
    SubCategory
    set
    subCategories_categoryId=?
    where
    subCategoryId=?
    Ответ написан
    Комментировать
  • Как вы понимаете, когда и какой метод необходимо использовать?

    В общем меня это сводит с ума и я не понимаю, неужели все сводится к тому,чтобы брать и гуглить?

    Данная методология программирования называется Stack Overflow Driven Development, и практикуется даже программистами экспертного уровня.
    Ответ написан
    Комментировать
  • Как вы понимаете, когда и какой метод необходимо использовать?

    shpaker
    @shpaker
    Вольный хлебопашец
    Апплетам Оракл уже поминки заказал - бросайте вы это дело. В девятой версии их поддержки уже не будет.
    Ответ написан
    Комментировать
  • Зачем дизайнер рисует сайт, если верстальщик всеравно описывает его на HTML?

    nalomenko
    @nalomenko
    Руководитель отдела разработок в студии «Lava»
    Зачем архитектор чертит чертёж дома, если строитель всё равно его потом строит?
    Ответ написан
    1 комментарий
  • Как реализовать проект на Java?

    aminought
    @aminought
    Изучай Spring и Hibernate - это основа почти всех веб-приложений Java.
    Ответ написан
    Комментировать
  • Варианты вектора развития IT-шника?

    sim3x
    @sim3x
    Тут такие вопросы обычно задают школьники
    От аспиранта, который "разработал алгоритмы непрерывной, численной оптимизации нового типа" такого не ожидал
    Ответ написан
    Комментировать
  • Объясните простыми словами что такое Java EE?

    LeEnot
    @LeEnot
    Енот-андроид
    Java EE это Java (как язык) и набор различных вспомогательных средств (фреймворков, библиотек) для нужд бизнеса. То есть, средства для написания надежных, переносимых, масштабируемых программ для работы с БД, веб и т.д. В противоположность, например, можно поставить Java ME, где масштабируемость, скажем, не нужна, а нужна компактность и скорость выполнения.
    Как итог: Java EE = язык Java + набор средств разработки для бизнеса.
    Ответ написан
    Комментировать
  • Что быстрее C++ или Java (вывод строк в консоль)?

    angry_cellophane
    @angry_cellophane
    Ребята, я вам покушать принёс. Открываем специальную олимпиаду.
    :~/src/cpp_time_test$ cat /proc/cpuinfo 
    processor	: 0
    vendor_id	: GenuineIntel
    cpu family	: 6
    model		: 23
    model name	: Intel(R) Core(TM)2 Duo CPU     T6600  @ 2.20GHz
    stepping	: 10
    microcode	: 0xa07
    cpu MHz		: 1200.000
    cache size	: 2048 KB
    physical id	: 0
    siblings	: 2
    core id		: 0
    cpu cores	: 2
    apicid		: 0
    initial apicid	: 0
    fdiv_bug	: no
    hlt_bug		: no
    f00f_bug	: no
    coma_bug	: no
    fpu		: yes
    fpu_exception	: yes
    cpuid level	: 13
    wp		: yes
    flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm
    bogomips	: 4389.29
    clflush size	: 64
    cache_alignment	: 64
    address sizes	: 36 bits physical, 48 bits virtual
    power management:
    
    processor	: 1
    vendor_id	: GenuineIntel
    cpu family	: 6
    model		: 23
    model name	: Intel(R) Core(TM)2 Duo CPU     T6600  @ 2.20GHz
    stepping	: 10
    microcode	: 0xa07
    cpu MHz		: 1200.000
    cache size	: 2048 KB
    physical id	: 0
    siblings	: 2
    core id		: 1
    cpu cores	: 2
    apicid		: 1
    initial apicid	: 1
    fdiv_bug	: no
    hlt_bug		: no
    f00f_bug	: no
    coma_bug	: no
    fpu		: yes
    fpu_exception	: yes
    cpuid level	: 13
    wp		: yes
    flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm dtherm
    bogomips	: 4389.29
    clflush size	: 64
    cache_alignment	: 64
    address sizes	: 36 bits physical, 48 bits virtual
    power management:

    :~/src/cpp_time_test$ lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 13.04
    Release:	13.04
    Codename:	raring

    ~/src/cpp_time_test$ java -version
    java version "1.7.0_51"
    Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) Server VM (build 24.51-b03, mixed mode)
    ~/src/cpp_time_test$ g++ --version
    g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3

    Замеры проводились всего по паре раз, ибо лень, так что присутствует некоторая погрешность. Прошу простить и понять.
    Java:
    time java Main
    real   5m38.489s
    user   0m30.184s
    sys   0m56.864s

    C++
    int main() {
    
        for (int i = 0; i < 10000000; i++) {
    
            printf("Number = %i \n", i);
        }
    
        return 0;
    }

    g++ -O2 origin_main.cpp -o origin_main.o
    time ./orinig_main.o
    real   5m54.260s
    user   0m7.700s
    sys   0m36.768s

    Надеваем мокасины скорости:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      for (int i=0; i < 10000000; i++)
        {
          cout<<"Number = "<< i << '\n';
        }
      return 0;
    }

    g++ -O2 main.cpp -o main.o
    time ./main.o
    real   5m35.629s
    user   0m8.424s
    sys   0m37.408s

    Пробуем магию:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      static char buffer[1024*1024*4] ;
      std::cout.rdbuf()->pubsetbuf( buffer, sizeof(buffer) ) ;
      ios_base::sync_with_stdio(false);
      for (int i=0; i < 10000000; i++)
        {
          cout<<"Number = "<< i << '\n';
        }
      return 0;
    }

    g++ -O2 main.cpp -o main.o
    time ./main.o
    real   5m35.555s
    user   0m3.568s
    sys   0m22.688

    Добавим в топку Java печки дровишек:
    public class Main {
        public static void main(String[] args) throws IOException {
            try (BufferedOutputStream bos = new BufferedOutputStream(System.out, 2 << 22)) {
                try (PrintWriter pr = new PrintWriter(bos, false)) {
                    int i = 0;
                    for (int j = 0; j < 10_000; j++) {
                        for (int k = 0; k < 1000; k++) {
                            pr.write("Number = " + i++ + '\n');
                        }
                        pr.flush();
                    }
                }
            }
        }
    }

    time java -XX:LoopUnrollLimit=42000000 -XX:+AggressiveOpts -Xmx512m -Xms256m  -XX:+OptimizeStringConcat -XX:CompileThreshold=200 Main
    real   5m35.963s
    user   0m4.408s
    sys   0m23.456

    На этом и остановимся, так как это может продолжаться бесконечно.
    Вывод: искусственный тест не показатель, и все сложно.
    Самый главный вывод: не пристало воспитанному джентельмену мериться скоростью, размером и количеством.
    Ответ написан
    Комментировать
  • Что используют для шаблонов JSP-приложения?

    @jkotkot
    режим сарказма
    Thymeleaf, например
    Вообще, если использовать какой-нибудь angularjs + сервисы, то jsp вполне хватает.
    Ответ написан
    Комментировать
  • Как реализовать вычисление булевой функции на Java?

    @MarkusD
    все время мелю чепуху :)
    Тебе поможет польская нотация, синтаксическое дерево и синтаксический анализ.

    Я бы сделал так.
    Прохожу по входной строке слева направо, разбивая ее на лексемы (токены, символы). Правило разбиения такое: если символ под кареткой просмотра является буквой - это операнд, иначе пробуем распознать оператор.
    Далее, получив список лексем, я прошелся бы по нему с целью построения дерева операций (польская нотаця, не забывай!). Этот шаг даст мне список операций и операндов. Дерево всегда будет бинарным, даже если там будет унарная операция, это все равно лишь один узел дерева.
    Далее я бы составил таблицу значений операндов и вычислил бы по ней значение получившегося дерева операций.

    Тебе может помочь вот этот репозиторий:
    https://github.com/FrankStain/c-script

    И, в частоности, вот этот код:
    https://github.com/FrankStain/c-script/blob/master...

    Это Object Pascal, но не стоит его чураться. Почитай, покури.

    Вноси уточнения в комментах, я буду дополнять свой ответ.
    Ответ написан
    1 комментарий