• Как быстрее работает приложение в цикле на Java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    В обоих случаях переменная user будет объявлена один раз, а объект типа User будет создан и присвоен этой переменной столько раз, сколько будет итераций цикла. Так что по скорости выигрыша никакого не будет, но второй вариант стилистически правильнее.

    Если уж очень хочется замеров, можно накидать бенчмарков на JMH:
    package com.example;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.concurrent.TimeUnit;
    
    import org.openjdk.jmh.infra.Blackhole;
    import org.openjdk.jmh.annotations.Benchmark;
    import org.openjdk.jmh.annotations.BenchmarkMode;
    import org.openjdk.jmh.annotations.Level;
    import org.openjdk.jmh.annotations.Mode;
    import org.openjdk.jmh.annotations.OutputTimeUnit;
    import org.openjdk.jmh.annotations.Scope;
    import org.openjdk.jmh.annotations.Setup;
    import org.openjdk.jmh.annotations.State;
    
    class User {
        private final String name;
    
        public User(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    }
    
    public class MyBenchmark {
        // Загрузка списка имён для инициализации объектов
        @State(Scope.Thread)
        public static class MyState {
            public List<String> nameList;
    
            @Setup(Level.Trial)
            public void setup() throws IOException {
                nameList = new ArrayList<>();
    
                ClassLoader classLoader = getClass().getClassLoader();
                
                try (BufferedReader br = new BufferedReader(
                                           new InputStreamReader(
                                             classLoader.getResourceAsStream("names.txt")))) {
                    String line;
                    while ((line = br.readLine()) != null) {
                        nameList.add(line.trim());
                    }
                }
            }
        }
    
        @Benchmark
        @BenchmarkMode(Mode.AverageTime)
        @OutputTimeUnit(TimeUnit.MILLISECONDS)
        public void outerVarDef(MyState state, Blackhole blackhole) {
            long counter = 0;
    
            // Если здесь оставить null, как у вас написано,
            // то получим NullPointerException на первой итерации
            User user = new User(state.nameList.get(0));
            // Конструкцию i++, user = new User(userListData.get(i)) можно и нужно сократить
            // так и короче, и красивее, и OutOfBoundException не получим
            for (int i = 0; i < state.nameList.size(); user = new User(state.nameList.get(i++))) {
                counter += user.getName().length(); // Чтобы избежать Dead Code Elimination
            }
    
            blackhole.consume(counter);
        }
    
        @Benchmark
        @BenchmarkMode(Mode.AverageTime)
        @OutputTimeUnit(TimeUnit.MILLISECONDS)
        public void innerVarDef(MyState state, Blackhole blackhole) {
            long counter = 0;
    
            for (int i = 0; i < state.nameList.size(); i++) {
                User user = new User(state.nameList.get(i));
                counter += user.getName().length(); // Чтобы избежать Dead Code Elimination
            }
    
            blackhole.consume(counter);
        }
    }

    Maven-проект полностью.

    Кроме того, с высокой долей вероятности JIT-компилятор оба цикла превратит в одинаковый код. У них байткод-то не сильно отличается.
    Ответ написан
    Комментировать
  • Как быстрее работает приложение в цикле на Java?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Чтобы наверняка попробуйте сами и найдите наиболее быстрый вариант примерно так:
    long start = System.currentTimeMillis();
    //цикл
    long result = System.currentTimeMillis() - start;

    Вариаций написания цикла в Jav'e очень много и все отличаются в производительности причем немаловажную роль играет то,какого типа сама коллекция(массив).
    Ответ написан
    2 комментария
  • Java: Чем заменить .replaceAll?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Ничем, надо просто включить голову и понять что у вас тут идет кошмарнейший оверхед по созданию куч строк что просто крайне медленно, кроме того каждый раз еще идет и компиляция регулярки что тоже дает оверхэд и воздь в гроб что все это еще и де то в компараторе что уже означает что это все дерается кошмарное число раз.
    Итого надо:
    1) Заранее единожды скомпилировать все регулярки.
    2) Подумать каким образом такие тяжелые операции оказались в компараторе.
    3) Возможно пересмотреть весь набор реулярок в 1 большую регулярку.
    Ответ написан
    3 комментария
  • Как правильно написать по бэм?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    Насколько я понимаю, правильнее будет так:

    <div class="menu">
        <div class="menu__icon">
                       <span class="menu__span"></span>
                       <span class="menu__span"></span>
                       <span class="menu__span"></span>
                   </div>
             </div>
    </div>
    Ответ написан
    Комментировать
  • Python or Java for immigration?

    @Dogrtt
    Qt/Python разработчик
    Почему-то, сложилось впечатление, что товарищ простой верстальщик, а не 'front-end developer'. Это база - 'HTML/CSS/JS'. А знание 'CSS' фреймворков? А препроцессоры к 'CSS'? А тестирование и сборка проектов? Да блин, Angular и React, он знает? Нет? Я так и думал... Так что же он хочет предложить зарубежным товарищам? Если он год работает 'front-end developer'(слава богу, что не 'senior front-end developer'), и не сумел во все вышеперечисленное, то какое время придется ему потратить на изучение 'Java'? В общем, я бы посоветовал, для начала стать специалистом в своем деле, а потом уже расширяться до 'full-stack'. Пускай попробует взять заказ на 'upwork', выполнит его, потом еще и еще, зарегистрирует ИП, а там уж и стоит призадуматься о иммиграции(да почему все думают, что их там ждут с распростертыми объятиями?). За бугром, как всем изестно, трава зеленее и пиво не разбавляют...
    Ответ написан
    Комментировать
  • Python or Java for immigration?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Уважаемый Дмитрий, сделайте первый шаг, откройте зарубежный сайт с вакансиями и посмотрите, какие профили там ищут. А далее, в соответствии с этими наблюдениями, адаптируйте свой багаж знаний.
    P.S.: Намеренно не даю ссылок на зарубежные сайты поиска вакансий, ведь, если вы собираетесь за рубежом искать работу, то эти сайты уже у вас в закладках.
    Ответ написан
    Комментировать
  • Как сделать Медиазапрос на проверку мобильного устройства?

    Vlatqa
    @Vlatqa Куратор тега CSS
    @media screen and (max-device-width: 600px) {
    
       }

    handheld объявлен устаревшим
    Ответ написан
    Комментировать
  • Битрикс: форма обратной связи на AJAX. Почему нет результата в ответе ссервера?

    babarun
    @babarun Куратор тега 1С-Битрикс
    Безумный план моих идей в руках больных людей
    Скорее всего компонент(не шаблон) не получает всех нужных параметров которые приходят обычным постом. Меня смущает почему у вас капча вылезает. Компонент стандартный - form.result.new?

    Попробуйте посмотреть разницу в запросах между обычным и ajax, дополнив код:
    echo json_encode(array(
                'arResult' => $arResult,
                'GET' => $_GET,
                'POST' => $_POST,
            ));
    Ответ написан
    6 комментариев
  • Почему блок не выводится на всю ширину?

    @architawr
    "Ok, Google" и все твои проблемы решены
    Вы явно не умеете правильно пользоваться бутстрапом, у Вас этот блок находится в .row (который, кстати, неимоверно исказился и съехал) он то и ограничивает ширину.
    Для ознакомления с принципами верстки по бутстрап: плейлист
    Ответ написан
    3 комментария
  • Как поставить ссылку внизу и по центру родительского div?

    petermzg
    @petermzg
    Самый лучший программист
    .publications-list .col-sm-4 {
      height: 400px;
      margin-top: 45px;
      position: relative;
    }
    
    .publications-list .col-sm-4 a{
       position: absolute;
       left: 50%
       bottom: 0;
      transform: translate(-50%, 0);
    }
    Ответ написан
    1 комментарий
  • Какой плагин jquery?

    @Robert_blk
    JS-программист
    Комментировать
  • Допускается ли использование шрифта Time New Roman в веб-дизайне (лендинг и тд.)?

    codingal
    @codingal
    Front end и не только
    Есть конвенция, что шрифты с засечками лучше для печати, а без - для веба. Поэтому times new roman можно встретить мягко говоря не часто.
    Ответ написан
    Комментировать
  • Как изменить полосу прокрутки браузера?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Без js можно, но ограниченно и не одинаково в браузерах.
    Для вебкитов (лучшие возможности, можно оч хорошо сделать)
    https://gist.github.com/delphinpro/266c7a76e614e1c...
    Для IE/EDGE тоже есть стили
    В FF нет возможности стилизации.

    js решения более кроссбраузерны и дают больше возможностей.
    лучшее из существующих решений, это https://github.com/Diokuz/baron
    Ответ написан
    1 комментарий
  • Почему люди уходят с фриланса в офис?

    Sanes
    @Sanes
    На фрилансе трудно прогрессировать. В офисе, если интересные проекты и сильная команда, прокачаешься гораздо быстрей.
    Ответ написан
    5 комментариев
  • Почему люди уходят с фриланса в офис?

    Фрилансер должен найти заказ, провести переговоры, согласовать все аспекты задачи, изучить клиента на предмет адеватности, взять на себя риски и еще куча всего и только потом может начинать кодить. А офисный работник начинает кодить сразу, а для решения остальных задач есть другие отделы.
    Ответ написан
    Комментировать
  • Почему люди уходят с фриланса в офис?

    zorro76
    @zorro76
    Ушел месяц назад, был в топ-100 как разработчик и в топ-15 как верстальщик на бирже, но получил оффер от американской компании и не устоял, а почему? надоело в одиночестве кодить:))
    Ответ написан
    10 комментариев
  • Как ускорить вёрстку?

    @architawr
    "Ok, Google" и все твои проблемы решены
    1) SASS и сетку для него(типа bootstrap)
    2) GULP для компиляции , а также его LiveReload и AutoPrefixer, и BrowserSync с его локальным сервером, и Bower (закачка либ)
    3) GIT
    4) Emmet
    5) BEM (БЭМ)
    6) Используйте gist от github
    Ну и прямые руки
    Ответ написан
    16 комментариев
  • Как обезопасить скрипт?

    Akdmeh
    @Akdmeh
    PHP, Yii2, Music
    ionCube и Zend Encoder чуть ли не единственный вариант. Часть кода с другого сервера - рано или поздно эта защита обходится даже для огромных проектов. Один с ярких примеров для меня - это взлом системы игры Assassin's Creed 2, где для обхода подобной системы подняли локальный сервер на Python и подменили IP серверов с помощью hosts-файла.
    А самый продвинутый вариант на сегодня - это предоставлять услугу без предоставления собственно исходного кода, то есть, SaaS-решения. Вплоть до того, что вы предоставляете скрипт-клиент бесплатно, но он работает по API, который будет отдавать нужную информацию, и без этого центрального сервера нет смысла в клиенте-обертке. Да, это техническое решение, к тому же требует своего сервера (а то и не одного), так что все зависит от конкретных условий проектов, которые вы хотите лицензировать
    Ответ написан
    3 комментария
  • Как операционная система понимает, сколько нужно очистить память?

    Выделяется не 256 байт, а служебная структура + 256 байт (а при страничной адресации так и вообще выделяется минимум 1 страница). Вот в этой служебной структуре и хранится перед выделенным блоком информация о самом блоке.
    Ответ написан
    3 комментария