• Как в Elasticsearch проверить, что массив содержит определенное количество значений?

    @void_phoenix
    Если количество элементов массива известно во время индексации, то проще всего проиндексировать это значение как отдельное поле с числовым значением. И затем просто фильтровать обычным term запросом по нужному количеству элементов.
    Ответ написан
    Комментировать
  • Как происходит преобразование с участием параметризованных типов?

    @void_phoenix
    Дженерики существуют на этапе компиляции, все правильно, и в вашем случае действительно будет происходить преобразование Object в Object.

    В вашем случае случилось так, что в массиве хранятся только объекты типа String поэтому для java на является проблемой сделать так
    String s = strings.pop();
    поскольку возвращается по факту String.
    Однако, если, например, сделать метод для добавления таким

    public void put(Object object){
    storage[index++] = object;
    }

    то можно будет добавить в коллекцию Object

    FixedSizeStack < String > strings = new FixedSizeStack<>(2);
    strings.put(new Object());

    то когда вы начнете забирать значения из коллекции, ваша программа упадет с ClassCastException в попытке привести объект к строке. То есть метод pop сработает нормально и вернет Object, и уже в строке
    String s = strings.pop();
    у вас получится String s = Object
    и программа упадет.
    Ответ написан
  • Где посмотреть что-то на уровне Java Core Advanced?

    @void_phoenix
    Effective Java (2nd Edition) by Joshua Bloch
    Java Generics and Collections By Maurice Naftalin, Philip Wadler
    Ответ написан
    Комментировать
  • Как устроено типовое Java EE приложение?

    @void_phoenix
    Обычно Java EE представляет собой набор компонентов, разворачиваемых на Java EE сервере.
    Ответ на ваш вопрос - да и нет, сам сервер представляет средства для управления загруженными в него компонентами, так же как и вы можете запустить или остановить весь сервер целиком.
    Важно понимать, что Java EE это набор спецификаций, реализуемых сервером. Если вам нужен REST - нет проблем. Определенным образом аннотируете классы, загружаете приложение на сервер и он заботится обо всем остальном, так как он реализует спецификацию Java EE. Нужна база данных - то же самое. Java EE - это просто стандарт, выбираете фреймворк - реализацию, определенным образом аннотируете классы и все происходит само.
    "базовый класс Application" - такого, насколько я знаю (могу ошибаться) в Java EE нет. Каждый компонент, будь то веб сервис, слой взаимодействия с базой или что-то иное, управляется сервером через который уже можно управлять всем приложением. Но, если речь идет о Spring, который является главной альтернативой классическом EE, то там можно сделать главный класс - точку входа в приложение, плодить потоки, останавливать и т.д.
    Ответ написан
    Комментировать
  • Почему выводить логи через System.out.print плохо?

    @void_phoenix
    Для фреймворков логирования есть конфигурация, управляющая фреймворком, которая позволит вам, например, выводить только ошибки, или изменить место в которое выгружаются логи. Более того, можно сделать так чтобы часть логов выгружалась в одном место, а часть в другое. Если у вас логи пишутся в стандартный вывод и и вдруг вы решили хранить их как-то по другому вам нужно будет не поменять пару строк в конфиге, а искать все вызовы System.out и заменять на что-то другое. В конченом итоге вы переизобретете что-то похожее на log4j, только потратив кучу времени и сил.

    P.S. Еще log4j, например, может записывать логи в другом потоке, а сам вызов логирования будет асинхронным. Если у вас критичная к скорости выполнения часть программы, то System.out может замедлять ее работу.
    Ответ написан
    Комментировать
  • Стоит ли изучать Java после прекращения разработки EE?

    @void_phoenix
    А в чем проблема? В 95% энтерпрайзных проектов вообще используется Spring, который очень даже развивается и прекращать не собирается. Скорее всего прекращается поддержка EE потому что она особо никому не нужна была.
    Ответ написан
    2 комментария
  • Как вообще работает stackoverflow в java?

    @void_phoenix
    Чтобы в твоем случае починить переполнение нужно Lois и Pitter создавать только по одному разу.
    В первую очередь поменять
    Pitter husband = new Pitter();
    на
    Pitter husband;
    Для Pitter сделать то же самое с Lois.

    После этого нужно убедить что объекты создаются только по одному разу. Например устанавливать свойства из вне.

    main() {
    Pitter pitter = new Pitter();
    Lois lois = new Lois();
    pitter.setWife(lois);
    lois.setHusband(pitter);
    }

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

    А stackoverflow работает во всех языках одинаково.
    Ответ написан
  • Что не так с внедрением зависимостей?

    @void_phoenix
    В общем вам уже правильно ответили выше. От себя добавлю. Чтобы что-то внедрялось в ваш класс, этот класс должен создаваться фреймворком, который реализует внедрение зависимостей. То есть вы должны из контекста получить нужный объект, и тогда Spring перед передачей объекта вам подставит туда нужные поля.

    Класс Starter в вашем случае создается не через фреймворк внедрения зависимостей, это обычный класс с методом main, то есть он вызывается при старте приложения. И естественно java ничего в @Autowired не подставляет, потому что это аннотация спринга, а спринг у вас инициализируется уже после, через contxt.

    Если подытожить. Чтобы срабатывал @Autowired, объект должен быть создан фреймворком (получен из контекста), например спрингом. class Starter не создается спингом, так что никакое внедрение зависимостей в нем не работает.
    Ответ написан
    Комментировать
  • Как сохранять состояние программы?

    @void_phoenix
    Если предполагается что эту информацию нужно будет читать не только из java приложения, то лучше xml или любой текстовый формат.

    Если объект отображает именно состояние системы и не предполагается что его нужно будет читать не из java или писать что-нибудь туда руками, то можно и сериализовать.
    Ответ написан
    Комментировать
  • Как исправить конкретный cлучай со stackoverflow? Как понять java?

    @void_phoenix
    У вас скорее всего при создании Lois Вызывается new Pitter, при создании которого вызывается new Lois, при создании которого вызывается new Pitter... Повторять до переполнения стека.
    Ответ написан
    Комментировать
  • Как работают языки программирования?

    @void_phoenix
    Java, C# также запускают процесс, который будет работать пока не остановишь, что позволяет сохранять значения переменных между запросами. Или не сохранять, если поместить объявление переменной в функцию-обработчик, тогда будет как в PHP.
    Ответ написан
    1 комментарий
  • Какой GUI framework на Java под Windows выбрать?

    @void_phoenix
    Ответ написан
    Комментировать
  • Для каких задач используется OpenJDK, а для каких Oracle JDK в чем принципиальное различия?

    @void_phoenix
    Всегда, если есть выбор лучше использовать Oracle JDK. OpenJDK - проект с открытым исходным кодом, который сама Oracle берет за основу своей JDK, потом еще правит там баги, добавляет проприетарные оптимизации и выпускает. То есть по факту Oracle JDK это такая улучшенная версия. Плюс к этому хоть обе JDK и проходят тесты на соответствие стандарту и должны работать одинаково с точки зрения API, на практике я встречался со случаями когда что-то не работало на OpenJDK и работало на Oracle JDK. Так что повторюсь, если есть выбор - берите OracleJDK.
    Ответ написан
    Комментировать
  • Правда ли что без хорошего знания математики (или какой-то отдельной темы) не стать хорошим программистом используя функциональную парадигму?

    @void_phoenix
    Если хотите пойти работать скала разработчиком, то лучший вариант - посмотреть требования для скала разработчиков, наиболее часто встречающиеся в интересующих Вас вакансиях. В основном все зависит от области применения. Сам язык, для того чтобы научиться его приемлемо использовать, не потребует знания математики, как и многие другие языки программирования, если они не заточены специально на решение математических задач.

    В остальном все решает предметная область. Если Вы пойдете работать веб разработчиком, нужно учить все что связано с web, если хотите делать делать data mining, то нужна будет и математика и статистика, причем совершенно независимо от используемого языка. Навыков, помимо знания программирования, требует предметная область. Если те задачи, которые Вы будете решать будут связаны с математикой - учите, если не будут, то вряд ли пригодится.
    Ответ написан
    Комментировать
  • Возможна ли переквалификация в разработчики после 30 без профильного высшего образования?

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

    Я видел как люди на сеньоров приходили сразу, до этого или фриланся или свои проекты делая.

    P.S. Я исхожу из того что вы работали в сфере близкой IT и знакомы с методологиями разработки и принципами командного взаимодействия. Иногда это тоже бывает важным фактором. Позволяет гарантировать что человек быстро вольется в работу. Но если вы были аналитиком, то наверняка в курсе что там и как.

    P.P.S Я сам где-то в 29 перешел из автоматизации в разработку. До этого тоже немного поработал аналитиком. Сначала несколько собеседований не прошел, но запомнил вопросы и подтянул навыки в этих областях. После проблемы со специфическим опытом в трудовой были только в нескольких компаниях, куда меня опять хотели только на автоматизацию. Но обычно если нормально проходишь техническое интервью, то проблем нет.
    Ответ написан
    Комментировать
  • Как "разогреть" метод в Java?

    @void_phoenix
    Java использует счетчик вызовjd метода, чтобы понять как часто он используется и нужно ли его компилировать.
    Регулируется флагом
    -XX:CompileThreshold=N.
    Значение по умолчанию для N - 1500 для клиентской VM (32 битные системы и, скорее всего для tiered compilation, которая наверняка у вас и используется).
    Нужно еще учесть, что скорее всего именно ваш метод компилироваться не будет. Будут компилироваться действительно часто используемые методы, типа toString, equals и т.д.

    Вопрос в том, действительно ли у вас есть методы, которые за 2 запроса вызываются 1500 раз?
    Может быть просто вы используете библиотеку для HTTP запросов, которая кеширует какой-нибудь контекст при первых вызовах? Обычно в сетевых приложениях время запроса намного превышает время работы самого кода, так что я бы в эту сторону копал.

    UPD: Вообще, если проект не коммерческий, возьмите java mission control и посмотрите на что у вас там реально тратится время.
    Ответ написан
    Комментировать
  • Не работает цикл в php, в чем проблема?

    @void_phoenix
    $userHours = 16;
    $hours = 1;

    1 итерация
    $userHours = $userHours + $hours; // 17
    $hours ++; // 2

    2 итерация
    $userHours = $userHours + $hours; // 17 + 2 == 19
    $hours ++; // 3

    и т.д.
    Вряд ли так задумывалось
    Ответ написан
    Комментировать
  • Как правильно использовать умножение матриц в clojure?

    @void_phoenix Автор вопроса
    Вообще все выглядит так, как будто переопределили оператор умножения с математического, на простое перемножение элементов матриц, как в сложении. Только я не очень понимаю, зачем это было сделано.
    Ответ написан
    Комментировать