• Как добавить параметры ядра в iptables?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    формат не предполагает всяких переменных и echo. это у вас скорее скрипт.... наверняка в файле где-то дальше будет "IPTABLES -A..."
    Ответ написан
    2 комментария
  • Как заполнить map через Stream api?

    @mipan
    IntStream.range(0, n).parallel().forEach(operand -> map.put(v, k));
    Ответ написан
    2 комментария
  • Как удалить одно значение из linkedHashMap?

    @zerninv
    Когда мы добавляем в linkedHashMap новый элемент с уже существующим в map'е ключем, то они образуют цепочку


    Нет, новое значение перезаписывает старое. Удаляется: map.remove(key).
    Ответ написан
    Комментировать
  • Какую структуру данных выбрать для хранения данных в памяти?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А зачем непосредственно в приложении это делать? Возьмите, к примеру, redis.io, в нем и храните. Там не только sortedset, но и hash и и сounters и еще кучу всего реализовано. Работает быстро, лежит в памяти, кластеризуется и шардируется.

    В вашем случае удобней было бы держать ваши атрибуты в sortedset, где имя коллекции = атрибут, а значениями - id пользователей.
    Ответ написан
    Комментировать
  • Какую структуру данных выбрать для хранения данных в памяти?

    Rou1997
    @Rou1997
    Всех пользователей сразу нужно вывести? А может все-таки не стоит их столько хранить в памяти?

    Какая из уже имеющихся структур данных java лучше всего подойдет для этих целей?

    Лучше, чтобы это не Java была, а C/C++, для этого используйте JNI, иначе ОЗУ будет много занимать, да и быстродействие вряд ли получится на высоте.
    Ответ написан
    6 комментариев
  • Для чего в Thinkpad'e P50/70 может понадобиться ECC RAM?

    Jump
    @Jump
    Системный администратор со стажем.
    Для чего в Thinkpad'e P50/70 может понадобиться ECC RAM?
    Ну у меня фантазии просто не хватает, чтобы представить для чего она там может понадобится.

    для чего именно(предметно) целесообразно брать именно ECC память и на сколько она уступает обычной?
    Для стабильной работы. По поводу насколько она уступает обычной - это в характеристиках конкретного модуля смотрите.

    cтоит ли столько переплачивать за нее?
    Если вы цените стабильность больше денег которые просят за модуль памяти - вполне целесообразно.

    Сказывает ли существенный эффект тип памяти на производительность работы с виртуализированными ОС и если да, то на что следует обратить внимание?
    Нет.

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

    С другой стороны когда у вас на множестве серверов развернута крупная инфраструктура, и одна ошибка способна ее положить это проблема. И в этой инфраструктуре тысячи планок памяти.
    Т.е вероятность возникновения ошибки вырастает в тысячи раз.
    Тут уже есть смысл подстраховаться.
    Не зря же на стройке всех заставляют каски одевать.
    Ответ написан
    Комментировать
  • Как отсортировать HashMap?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ответ написан
    Комментировать
  • Как освободить память в java?

    miraage
    @miraage
    Старый прогер
    offheap, например
    Ответ написан
    Комментировать
  • Как освободить память в java?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Самое простое. var = null; Если нужно ещё и мусорщика пустить — ну пусти, System.gc();
    2. Если нужно, чтобы объект не удерживался — WeakReference. Как только объект исчезнет, слабая ссылка перещёлкивается в null. Бывает нужно: 1) если объекты-дети переживают своих владельцев, и при этом потерять владельца — это несмертельно; 2) когда строим какой-нибудь временный список.
    3. Не выдавать безымянный объект наружу, если он переживает создателя. В безымянных объектах есть ссылка на создателя. Выдавать лямбду: если создатель не нужен, ссылки никакой не будет.
    4. Аналогично с внутренними классами — если он переживает создателя, делай его static.
    5. String.intern, если вы работаете с кучей мелких одинаковых строк. Ну или наладить свой кэш :)
    6. Использовать объектные пулы и прочие структуры, снижающие нагрузку на мусорщик.
    7. Разбивая строки на мелкие кусочки, использовать паттерн doSomething(String data, int start, int length), не вытягивая подстроку физически. Использовать StringBuilder.
    Ответ написан
    1 комментарий
  • Как сделать .collect() в лямбдавыражении?

    Collector.of(
        TreeMap::new,
        (map, e) -> map.put(e.getKey, e.getValue()),
        (left, right) -> {left.putAll(right); return left;}
        EnumSet.of(Collector.Characteristics.UNORDERED, Collector.Characteristics.IDENTITY_FINISH))

    как-то так.
    Ещё можно написать свой Collector
    Но можно проще так:
    NavigableMap<Integer, Items> result = new TreeMap<>();
    
    ...forEach(e -> result.put(e.getKey(), e.getValue())
    Ответ написан
    2 комментария
  • В чем может быть проблема деплоя на tomcat?

    DarkRaven
    @DarkRaven
    разработка программного обеспечения
    А как вы зависимости к проекту подключали? Maven не использовали?
    И второй вопрос, в чем создавали проект?

    Я обычно работаю с Maven-проектами, и WAR у меня собирается (как в STS, так и в Idea) со всеми зависимостями.

    Советую попробовать задеплоить ваш WAR на локальный tomcat и посмотреть что будет. Возможно, действительно не хватает либ.

    Касаемо, чем деплоить - мы обычно используем WinSCP/scp. Можно права пользователю настроить, поместив его в нужную группу, чтобы он мог напрямую копировать в папку с приложениями и, таким образом, через scp получить автодеплой. У нас же, вообще, копируется в папку пользователя, а потом, через консоль, копируется дальше, куда нужно. Не автодеплой, в общем-то.
    Ответ написан
    2 комментария
  • Как установить Android SDK в Intellij IDEA?

    Rou1997
    @Rou1997
    Кириллица, пробелы в пути, а точно ли ругается на несуществование, проверьте та ли папка, должна быть та, в которой SDK Manager и папки platforms, tools.
    Ответ написан
    Комментировать
  • Для чего используются "методы по умолчанию" на практике?

    @sirs
    В java 8 default methods были добавлены в первую очередь для того, чтобы добавить новые методы к старым интерфейсам и сохранить совместимость с уже существующим кодом.
    Самый яркий пример - интерфейс Collection и метод stream

    P. S. Очень хорошее обсуждение здесь
    Ответ написан
    Комментировать
  • Для чего используются "методы по умолчанию" на практике?

    @Mercury13
    Программист на «си с крестами» и не только
    Это приближает интерфейсы Java к примесям.

    1. Очень часто бывает, что у какой-то функции есть реализация, опирающаяся на другие функции — либо базовая неоптимальная, либо вообще единственно возможная. Чаще всего это избыточные функции-утилиты. Пишу на Си++
    class Stream {
    public:
      virtual void write(size_t length, const void* data) = 0;
    
      // пишет в поток word в машинном порядке байтов
      void writeW(uint16_t data) {
        write(2, &data);
      }
    };

    За что вообще так ненавидят множественное наследование? За дублирование данных! Вот у нас некая штука, без единого поля данных — почему в Java она класс, а не интерфейс?

    2. Какую-то функцию переопределяют настолько редко, что лучше сделать ей реализацию на месте. Опять Си++.
    class ErpConnector {
    public:
      // 80% модулей не могут экспортировать данные в систему управления
      //   предприятием — напишем базовую реализацию.
      virtual bool canExportData() const { return false; }
      virtual void exportData() const {}
    };


    3. И просто документирование, как оно должно себя вести :) Из реального проекта, снова Си++.
    void im::DateGrouper::toFirstDateOfPeriod(dt::Date& aDate, int aStart) const
    {
        aDate = toDate(toInt(aDate, aStart), aStart);
    }

    Класс служит для группировки дат в периоды (недели, месяцы, годы). aStart — это дополнительный int, позволяющий начать год с февраля или месяц с 15-го. Эта функция переводит дату «на месте» в первую дату периода. Она крайне неоптимальна (дату в число, затем число опять в дату) и потому переписана почти во всех в реализациях.
    void im::MonthGrouper::toFirstDateOfPeriod(dt::Date& aDate, int aStart) const
    {
        if (aDate.day < aStart)
            aDate.addMonthsMechanical(-1);  // механически вычесть 1 месяц; дата может стать неверной.
        aDate.day = aStart;
        aDate.fixupTo1();    // неверную дату привести к 1-му числу следующего месяца
    }


    Но по крайней мере понятно, как она должна работать.
    Ответ написан
    Комментировать
  • Для чего используется BindingResult в java?

    EugeneP2
    @EugeneP2
    Java Dev
    Из него мы можем узнать были ли ошибки валидации и какие при байденге http запроса на объект в контроллере

    Например, вот такой у нас контроллер
    @Controller
    public class SearchCommentController {
    
    	...................
    
    	@RequestMapping(method = RequestMethod.POST)
    	public String displayCommentAlert(@Validated FormParams params, BindingResult bindingResult, Model model) {
    		if (bindingResult.hasErrors() == false) {
    			List<CommentWithPeopleDetail> foundComments = commentDao.find(params);
    			model.addAttribute("foundComments", foundComments);
    		}
    		return "commentAlert";
    	}
    
    	...................
    }


    bindingResult инжектится спригом в метод контроллер

    вот валидатор
    public class SearchCommentParamValidator implements Validator {
    
    	@Override
    	public boolean supports(Class<?> clazz) {
    		return FormParams.class.isAssignableFrom(clazz);
    	}
    
    	@Override
    	public void validate(Object target, Errors errors) {
    
    		FormParams params = (FormParams) target;
    
    		if (StringUtils.isBlank(params.getRuleId()) && StringUtils.isBlank(params.getRef())) {
    			errors.reject(null, "Необходимо указать или 'ID правила', и/или 'Объект алерта'!");
    		} else if (params.getDateFrom() == null || params.getDateTo() == null) {
    			errors.reject(null, "Необходимо указать период поиска!");
    		}
    	}
    }
    Ответ написан
    Комментировать
  • Что такое "call back interface"?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Если речь о Java и интерфейсах, то пример - как-то так:

    interface IObserver {
      void notify(Event e); //I'm a callback  ;)
      ...
    }
    
    interface IObservable {
      void register(IObserver o);
      void unregister(IObserver o);
      ...
    }


    Это не столько свойство интерфейса, сколько паттерн (идея, шаблон) на тему того, как можно в программе организовать взаимодействие (обычно, асинхронное) между двумя сущностями. В данном конкретном примере callback - это метод notify() в первом интерфейсе.

    В простейшем случае экземпляр класса, имплементирующего этот интерфейс (наблюдатель) сначала должен зарегистрироваться у какого-нибудь экземпляра, имплементирующего второй (наблюдаемого). После этого, всякий раз, когда в наблюдаемом будет происходить что-то, интересующее наблюдателя, наблюдаемое будет вызывать метод notify() экземпляра наблюдателя (и, например, передавать в него информацию о произошедших изменениях, в виде Event... но это - уже частности, не существенные для понимания сути callback). И так - до тех пор, пока наблюдатель не "попрощается" с наблюдаемым, вызвав его метод unregister(). Кроме того, кто именно "познакомит" одного с другим, тоже не существенно: это может быть сам наблюдатель, или кто-то еще (например, какая-нибудь фабрика, брокер, менеджер и т.д.) Если говорить о "свойствах интерфейса", то суть паттерна состоит в договоренности: "я знаю, что у тебя есть метод, который я могу и буду вызывать, когда сочту нужным, и ты будешь знать, что этот вызов означает". Все остальное (в каком потоке вызывать, что конкретно должен делать этот метод и т.д.) обычно тоже регламентируется, но это, опять же, уже частности.

    Для сравнения и отграничения понятия callback (от банальной инкапсуляции и IoC) можно привести пример
    java.lang.Comparable<T> {
      int compareTo(T o);
    }

    Все, что обещает этот интерфейс/метод: "если ты меня вызовешь и передашь мне ссылку на экземпляр такого же класса, как я сам, я сравню себя (по некоему, только мне известному алгоритму) с этим экземпляром и верну результат". Кто его будет вызывать, когда, зачем, что он станет делать с результатом... все это самому имплементирующему классу не важно. Это, хотя и очень похоже, но, строго говоря, не укладывается в понятие callback, т.к. вызываемому методу и всему экземпляру класса, в общем, нет никакого дела до того а. кто его вызовет и б. что это будет означать. А понятие callback подразумевает, что предоставляющий этот метод класс а. знает, кто и зачем его вызовет и б. непосредственно заинтересован в этом.

    Ну и, для полноты картины, нужно также упомянуть, что в разных язакых есть много разных способов организации callback. В C# есть делегаты и события, в C можно передать указатель на функцию и т.д. В Java для этого удобно пользоваться интерфейсами. Но это ничего не меняет в самом понятии callback, заключаюшемся в том, что кто-то осознанно предоставляет другому определенный метод, а этот другой этот метод вызывает, и оба знают, что означает сам факт вызова.
    Ответ написан
    Комментировать
  • Что такое "call back interface"?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Для чего?

    Допустим ты пришел в мед.учреждение за справкой по какому-то там специалисту и к примеру справка будет делаться 4 часа. В конечном итоге ее можно будет забрать в регистратуре.

    У тебя две стратегии:
    1. Каждые 5 мин. подходить в регистратуру "А справка на фамилию Пупкина готова?"
    2. Оставить визитную карточку с телефоном на Пупкина и попросить позвонить, как будет готова справка.

    Какая стратегия более удобная? ;)

    Это принцип "Не звоните нам, мы сами вам позвоним".

    Так и в программировании есть некий код, который вызовут при наступлении некоторых условий(сеть доступна, файл появился, кнопку нажали, программа выключается и др.)

    Код, который вызывают это callback - "Обратный вызов". Некоторые условия - это событие.

    В примере выше callback-ом является Пупкин, а событием является "справка готова".
    Ответ написан
    Комментировать
  • Что такое "call back interface"?

    @Braidner
    Простой пример
    public interface InitCallback {
        void init();
    
        class Http implements InitCallback {
            void sendData(String url, SuccessCallback success, FailureCallback fail) {
                try {
                    //Делаем реквест
                    String httpResult = "200";
                    //Вызываекм коллбек
                    success.success(httpResult);
                } catch (Exception ex) {
                    //Вызываекм коллбек в случае ошибки
                    fail.fail("400");
                }
            }
    
            public void init() {
                System.out.println("Вызван init коллбек");
            }
    
            interface SuccessCallback {
                void success(String result);
            }
    
            interface FailureCallback {
                void fail(String error);
            }
    
            public static void main(String[] args) {
    
                Http http = new Http();
                if (http instanceof InitCallback) {
                    //Если это наш интерфес, то вызываем колбек
                    http.init();
                }
                
                http.sendData("/my/api", new SuccessCallback() {
                    @Override
                    public void success(String result) {
                        System.out.println("Успешный колбек: " + result);
                    }
                }, new FailureCallback() {
                    @Override
                    public void fail(String error) {
                        System.out.println("Колбек вернул ошибку: " + error);
                    }
                });
            }
        }
    }

    И по такому же принципу реализуются специальные интерфейсы в спринге. Он смотрит от чего унаследован твой бин и если он знает этот интерфейс, то дергает его.
    Ответ написан
    Комментировать
  • Как приостановить цикл в Java?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    По-хорошему, тяжелую логику (а вызовы sleep можно назвать тяжелой задачей, т.к. это тормозит поток, который не сможет обрабатывать события интерфейса) нужно выносить в отдельный поток (thread), GUI-поток должен вести себя пассивно и заниматься лишь взаимодействием с пользователем и запусками background worker'ов (для длительных операций).

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

    Если английский средней школы позволяет, советую пройти вот этот туториал.
    Ответ написан
    Комментировать