• Новые возможности java 8, использовать или нет?

    Можно начать с малого, если боитесь стримов. Скажем, такой фрагмент кода на Java7:

    Map<String, List<Item>> items = new HashMap<>();
    
    public void addItem(String key, Item item) {
      List<Item> list = items.get(key);
      if(list == null) {
        list = new ArrayList<>();
        items.put(key, list);
      }
      list.add(item);
    }


    Нечто подобное встречается очень часто. В Java 8 это выглядит так:
    Map<String, List<Item>> items = new HashMap<>();
    
    public void addItem(String key, Item item) {
      items.computeIfAbsent(key, k -> new ArrayList<>()).add(item);
    }


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

    Эм…
    var obj = {};
    obj[vertice] = 123;

    Если я правильно понял вопрос.
    Ответ написан
    Комментировать
  • Алгоритм решения выражений?

    Ещё можно написать синтаксический анализатор на специальном языке — ищите по словам yacc (для Си), javacc, jjtree (для Java), bison (для Си, Си++ и Java). Вот, к примеру, простенькая JJTree-грамматика, которая разбирает примерно такие выражения, как вам нужно, с поддержкой переменных, шестнадцатеричных чисел, комментариев и т. д. И всего сто строчек. Используя JavaCC+JJTree вы по файлу грамматики автоматически можете создать Java-классы, которые позволят легко превратить выражение в абстрактное синтаксическое дерево (AST). По этому дереву уже можно сделать что угодно — выполнить вычисления, скомпилировать в машинный код, перевести в любой другой язык (скажем, MathML), красиво отрендерить на экране с многоэтажными дробями и т. д. Файлы грамматик обычно гораздо проще поддерживать и расширять, чем ковыряться с рекурсивным спуском.
    Ответ написан
    Комментировать
  • Есть ли возможность дать мне небольшую задачу реального проекта?

    Идите в любой опенсорсный проект на Java, который вам по вкусу. В https://bugs.eclipse.org/bugs/ , например, тысячи открытых багов. Выбирайте любой, пытайтесь исправить и шлите пулл-реквесты. Есть довольно простые штуки, до которых просто ни у кого руки не дошли. Даже просто разобравшись в инфраструктуре большого проекта, вы получите ценнейший опыт, да и в резюме будет что написать. Если Eclipse пугает своим размером, есть много проектов попроще. Можно повыбирать, например, на mvnrepository.com . Конкретную задачу сложно посоветовать, не зная ваш уровень и интересы. Может, вы алгоритмы любите, может, интерфейс рисовать, может, графику, может, с базами данных поковыряться.
    Ответ написан
    1 комментарий
  • Почему ID в БД идут не по порядку?

    Я не наблюдаю эффекта ни с myisam, ни с innodb (версия сервера 5.0.45-community-nt MySQL Community Edition):
    mysql> create table mytable(id bigint auto_increment primary key,name varchar(32) unique);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert ignore into mytable(name) values('aaa'),('bbb'),('ccc'),('aaa'),
    mysql> ('ddd'),('eee'),('bbb'),('fff');
    Query OK, 6 rows affected (0.02 sec)
    Records: 8  Duplicates: 2  Warnings: 0
    
    mysql> insert ignore into mytable(name) values('aaa'),('bbb'),('ccc'),('aaa'),
    mysql> ('ddd'),('eee'),('bbb'),('ggg');
    Query OK, 1 row affected (0.00 sec)
    Records: 8  Duplicates: 7  Warnings: 0
    
    mysql> select * from mytable;
    +----+------+
    | id | name |
    +----+------+
    |  1 | aaa  |
    |  2 | bbb  |
    |  3 | ccc  |
    |  4 | ddd  |
    |  5 | eee  |
    |  6 | fff  |
    |  7 | ggg  |
    +----+------+
    7 rows in set (0.00 sec)


    Аналогично при вставке из файла:
    C:\>type test.txt
    aaaa
    bbbb
    bbbb
    cccc
    dddd
    bbbb
    aaaa
    eeee
    
    mysql> create table mytable(id bigint auto_increment primary key,name varchar(32) unique);
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> load data local infile 'c:\\test.txt' ignore into table mytable(name);
    Query OK, 5 rows affected (0.00 sec)
    Records: 8  Deleted: 0  Skipped: 3  Warnings: 0
    
    mysql> select * from mytable;
    +----+------+
    | id | name |
    +----+------+
    |  1 | aaaa |
    |  2 | bbbb |
    |  3 | cccc |
    |  4 | dddd |
    |  5 | eeee |
    +----+------+
    5 rows in set (0.00 sec)


    Какая у вас версия MySQL и как конкретно вы вставляете?
    Ответ написан
    6 комментариев
  • Что не так с чтением из консоли?

    Без исходника приходится проявлять телепатические способности. Скорее всего кто-то где-то закрывает BufferedInputStream, который в System.in. Поставьте брейкпоинт на вход в метод BufferedInputStream.close() и посмотрите, как вы там оказываетесь. Если туда попадаете слишком часто, сделайте брейкпоинт условным по this == System.in.
    Ответ написан
    Комментировать
  • Как программно создать jar?

    В JDK есть стандартный класс JarOutputStream, который вам поможет. Вот тут пример записи в JarOutputStream вместе с манифестом.
    Ответ написан
    Комментировать
  • Куда вкладывать деньги?

    Прямо сейчас — в датские кроны.
    Ответ написан
    Комментировать
  • Почему на Java не разрабатывают операционные системы?

    Ну таки разрабатывали в разное время: JavaOS, JX, SavaJe, Vino. Все эти разработки свернули по разным причинам, но принципиальных проблем, абсолютно мешающих разрабатывать OS на Java как будто бы нет.
    Ответ написан
    3 комментария
  • Как "это" можно сократить?

    Код изначально кривой, но можно как-нибудь так:

    function getMod(m1, m2, m3) {
        var map = {'#a1':m1, '#a2':m2, '#a3':m3}
        for(var id in map) {
          $(id)[map[id]?'show':'hide']();
        }
    }
    Ответ написан
    2 комментария
  • В чем разница new ArrayList() и new ArrayList()?

    Конкретно в данном случае в Java 1.7 и старше вы не получите никаких видимых отличий кроме наличия или отсутствия двух предупреждений при компиляции. Но, конечно, угловые скобки лучше писать. Отсутствие угловых скобок означает «сперва я конструирую непараметризованный вообще объект, а котом присваиваю его в переменную, используя небезопасное приведение типов», а наличие их означает «подбери подходящие параметры для объекта на основе контекста». Разница может проявиться, например, в таком коде:

    class NumberList<T extends Number> extends ArrayList<T> { ... }
    
    public static void main(String... args) {
        List<String> list = new NumberList();
        ...
    }


    Этот код компилируется (с предупреждениями), но у вас могут возникнуть странные проблемы в рантайме. Если же вы поставите две угловые скобки, тут же будет ошибка компиляции: подходящий тип вывести нельзя.
    Ответ написан
    Комментировать
  • Плакаты на java тематику для офиса, где взять?

    Если у вас не всё пространство перед глазами занято мониторами, купите второй (третий, четвёртый) монитор. Я в офисе работаю с тремя мониторами, а вокруг голые стены. Продуктивность нормальная.
    Ответ написан
    Комментировать
  • Правила объявления интерфейсов. "I" или "!I"?

    В нашей команде префикс «I» не используют. Все правильно говорят: это соглашение имеет плюсы и минусы и в целом дело личного вкуса. Есть много очень хороших проектов, где I используют, и где I не используют. Главное, чтобы это не превращалось в религию. Если вас на работе смешивают с дерьмом, подумайте, нужна ли вам такая работа :-)
    Ответ написан
    Комментировать
  • Какую программу использовать для резервного копирования MySQL большого объема без лока базы?

    Можно решать вопрос на уровне файловой системы с помощью snapshot'ов
    en.wikipedia.org/wiki/Snapshot_%28computer_storage%29#File_systems
    en.wikipedia.org/wiki/Shadow_Copy
    Принцип copy-on-write: когда вы делаете копию файла, он ссылается на те же блоки, что и исходный, но если какой-то блок файла начинает модифицироваться, этот блок реально копируется.
    Ответ написан
    1 комментарий
  • Как youtube считает количество просмотров?

    Сейчас свежезалитое мной же видео открыл и после третьей секунды просмотра (длина видео больше 4 минут) нажал F5 в браузере. Повторил 10 раз. Итог: 10 просмотров. Я залогинен под тем же аккаунтом, под которым заливал. В общем, не всё у них так очевидно.
    Ответ написан
    1 комментарий
  • Способ присваивания переменным дефолтных значений?

    В Perl 5.10+, кстати, есть специальный оператор для этого: $arg // «value» — правая часть вычисляется не при булевой ложности, а при неопределённости (undef) левой части. Соответственно есть и такая конструкция: $arg //= «value»; — короткий и корректный способ решения проблемы.
    Ответ написан
    Комментировать
  • Способ присваивания переменным дефолтных значений?

    Оба варианта опасны, если их применять, не подумав. Во многих языках условие проверяет аргумент не только на «неопределённость», но и на равенство числу 0, пустой строке или даже строке «0». Я бы писал медленно, но верно:
    if(argument == undefined) argument = "value";

    Иногда подобную конструкцию оборачивают в простенькую функцию:
    function default(val, defval) {
      return val == undefined?defval:val;
    }
    ...
    argument = default(argument, "value");
    Такая функция, к примеру, встроена в скриптовый язык AviSynth. В Java у класса Properties (надстройка над хэш-таблицей) есть метод getProperty(key, defValue) (вернёт defValue, если в таблице отсутствует запись с ключом key).
    Ответ написан