Ответы пользователя по тегу Java
  • Java ( с либами ) против Node.js, что выбрать для вебсервиса?

    Foror
    @Foror
    Графоман
    Покажите ему вот это https://www.techempower.com/benchmarks/#section=da... - еще там табы пощелкайте и по моему всё сразу становится ясно.

    >Nginx + Apache + Spring 5 + REST + AKKA ( или Vert.X) + NIO
    Nginx + Apache выкиньте. Используйте Undertow или Jetty
    Ответ написан
    Комментировать
  • Какой ЯП использовать для кросплатформенной разработки в 2015 году?

    Foror
    @Foror
    Графоман
    >необходимо тащить JRE
    Сейчас она разбита на 3 профиля, первый занимает 15 мб. В 9 версии можно будет создавать собственный дистриб jre положив в него только нужные классы. Тем самым можно меньше 15 мб уложиться.
    Ответ написан
  • Куда расходуется память в веб-приложении на Java?

    Foror
    @Foror
    Графоман
    Какая версия JVM? Попробуйте другой коллектор, например -XX:+UseG1GC
    Ответ написан
    Комментировать
  • Профи Java! Поможите составить программу самостоятельного изучения этого языка?

    Foror
    @Foror
    Графоман
    Начните с JavaFX, его метят на замену как HTML5, так и Swing. По самому языку читайте Философия Java. Если хотите Android, то ставьте сразу Android Studio от Google. В противном случае Eclipse, либо IDEA.

    Сразу разберитесь с template-ами в этих IDE, типа sysout, который делает подстановку на System.out.println, или main -> public static void main(String[] args) {}. Не забудьте про hot keys, они серьезно облегчают работу в IDE. Можете еще мой твиттер прошерстить, я там иногда делюсь всякими полезными, не очевидными штуками по работе с Eclipse.

    Обязательно разберитесь с GC и аргументами запуска JVM. Это место, где возможен гибкий тюнинг. Вот можете оценить масштабы тюнинга docs.oracle.com/javase/8/docs/technotes/tools/unix... А здесь можете почитать про GC docs.oracle.com/javase/8/docs/technotes/guides/vm/...

    А вообще начать можно отсюда docs.oracle.com/javase/8
    Ответ написан
    Комментировать
  • Как сделать сервер для игры на Java?

    Foror
    @Foror
    Графоман
    Копайте в сторону NIO. Можете здесь на русском поискать www.youtube.com/user/KharkovITCourses/videos

    Если подвисает раз в 20 сек., то скорее всего срабатывает GC. Можно попробовать добавить опцию -Xmx 1G при старте JVM, тем самым выделив 1G оперативки, тогда GC будет реже срабатывать.

    Можно еще и сам GC потюнить, гуглите на тему GC CMS tuning или Java GC types для смены GC на какой-нибудь другой.
    Ответ написан
    Комментировать
  • Есть ли аналог twill (python) для java?

    Foror
    @Foror
    Графоман
    Думаю тут нужно смотреть https трафик, но вот не подскажу как, не сталкивался. Для http обычно использовал wireshark. Погуглите "https wireshark". Можно еще в хроме дебаг открыть и посмотреть по каким урлам ходят данные, там тоже есть http трафик.

    Вообще, если хотите эмулировать браузер есть HtmlUnit. Но это конечно жрет ресурсы. Есть HttpClient, если разбретесь с https трафиком.
    Ответ написан
    Комментировать
  • В чем недостатки Java для веб-разработки?

    Foror
    @Foror
    Графоман
    Хороших фреймворков для веба маловато, а так вполне можно пилить и на java, рекомендую глянуть tapestry5.4, лучшего веб-фреймворка для java пока не видел.
    Ответ написан
  • Какие инструменты выбрать для создания web-приложения на java?

    Foror
    @Foror
    Графоман
    С GWT намучаетесь, да и гугл на него уже как забил, сделав GWT 2.0 - Dart, у которого также сомнительное будущее. В Wicket - кривая реализация, сделано рукожопами, в сессию юзера пихают, что попало, хотя как сейчас у них не в курсе.

    Tapestry более-менее, вот-вот даже выйдет новая версия, в которой Prototype.js заменили на JQuery. А также Bootstrap из коробки по дефолту jumpstart.doublenegative.com.au/jumpstart7 Еще один плюс это изменение классов/шаблонов и отображение результата без перезагрузки контейнера. Хотя конечно не всё так гладко и через какоё-то время контейнер тупо закрешится и нужно поднимать его заново.

    Но проблема в том, что фреймворк постоянно изменяется и переход на новые версии может быть проблемным. Например, в 5.3. Prototype.js, а в 5.4 все дефолтные компоненты на JQuery и Bootstrap. Из 5.2 в 5.3 полностью переделали URLRewrite сервис, сделали хуже, чем было. Но с другой стороны плюс в том, что фреймворк очень гибок и если не нравится новый URLRewrite, можно сделать override через IoC и вернуть старый.

    Использовать Tapestry 5 + Spring особого смысла нет, в Tapestry 5 собственный IoC и модуль для Hibernate. А если поискать на гитхабе можно найти и другие модули. Но в целом, руками придется многое пилить самому. По формам есть дефолтный компонент, генерирующий форму автоматом из модели, но он конечно слабоват, для сложных форм может и не хватить.

    Я сейчас тоже планирую делать веб-приложение и склоняюсь к Angular.js Т.к. хочу полный аджакс, чтобы юзер вообще не видел переходов на другие страницы. Отчасти из-за того, что он напоминает Tapestry 5. А вот на сервер-сайде, думаю просто использовать какой-нибудь простенький контроллер (Undertow, например) и какой-нибудь фреймворк JSON-POJO + может подключу IoC из Tapestry 5. Или попробую разобраться в Spring, в последних версиях все можно конфигурить через аннотации, но тут тоже надо смотреть, что он мне даст, может также все нужно будет пилить руками, а в этом случае Tapestry IoC выглядит проще.

    По формам можно использовать, что-нибудь такого плана https://github.com/dobtco/formbuilder А вообще, можно на гитхабе поискать что-нибудь на angular form, может что есть kelp404.github.io/angular-form-builder
    Ответ написан
    Комментировать
  • Какой фреймворк более актуален на сегодняшний день - Play!, Struts или Spring?

    Foror
    @Foror
    Графоман
    tapestry 5
    Ответ написан
    Комментировать
  • В чем суть интерфейсов в программировании?

    Foror
    @Foror
    Графоман
    Для начала нужно сразу понять, что интерфейс это частный случай класса. Но в Java оно имеет отдельное ключевое слово, а в C++ это просто класс без реализации. Поэтому интерфейс просто задает некий стандарт для работы с кучей разнообразных реализаций.

    Например, интерфейс Iterable говорит, что классы реализующие данный интерфейс имеют элементы и их можно перебирать в цикле вызывая метод next(). А значит, если создаете какой-то контейнер или коллекцию, то можно реализовать Iterable. Не выдумывая свои методы для работы с контейнером. Тем самым появляется некий общий стандарт - интерфейс для работы с контейнерами.

    А если вы делаете игру, то можете создать интерфейс Unit, тем самым задав классам определенное поведение. Например, unit должен обязательно иметь метод atack(), isDead() и т.д.

    А дальше, в цикле делаете проверку всех юнитов:
    loop(...) {
    if (unit.isDead())
    removeFromMap(unit);
    }

    Ну и конечно Unit может быть и просто классом или абстрактным классом, в котором реализованы atack и isDead, а может быть только isDead, потому что attack у каждого типа юнита индивидуально и требует собственной реализации. Т.е. приходим к тому, что интерфейс это также частный случай абстрактного класса.

    Т.е. тут уже вступает в действие полиформизм, т.е. интерфейсы по сути дают полиформизм. Ну, а в Java они еще позволяют делать множественное наследование или другими словами задать классу несколько свойств поведения, например Unit может быть также и Iterable, тем самым можно дать юнитам инвентарь и перебирать элементы в нем.

    И соответсвенно если Unit у вас будет классом или абстрактным классом, то унаследовав Unit в Java, вы просто не сможете дать наследнику еще и Iterable поведение, если Iterable будет тоже классом.

    OrcWarrior implements Unit, Iterable - так можно

    OrcWarrior extends Unit, Iterable - так в Java нельзя, но можно в С++, а Unit и Iterable тогда всегда будут объявляться как class...

    Из-за этого, в Java приветствуется не наследование, а композиция. Т.е. нафига каждый раз реализовывать Unit.isDead, если он стандартный? Поэтому, создается скажем класс UnitAI и делается следующее:

    class OrcWarrior implements Unit, Iterable {
    UnitAI ai;

    UnitAI getAI(){
    return ai;
    }
    }

    class UnitAI {

    boolean isDead() {
    ....
    }
    }

    interface Unit {
    void attack();
    UnitAI getAI();
    }

    Вот это называется композиция, т.е. в OrcWarrior, HumanWarrior вы подмешиваете UnitAI, в котором уже реализовано isDead, и тем самым не нужно каждый раз его реализовывать одним и тем же кодом. В С++ такого можно не делать, там есть поддержка множественного наследование, но оно имеет свои минусы. Впрочем, как и композиция имеет плюсы/минусы.
    Ответ написан
    Комментировать
  • Пару слов о моем коде Java

    Foror
    @Foror
    Графоман
    Все close() методы - хорошая практика добавить это в try {юзаем inout ресурсы} finally {close()}, тем самым будет гарантироваться, что ресурсы закроются

    pklServer() - должен зарефакторен в конструктор Client, иначе этот криво и небезопасно, ну или назвать это connect() и проверять, что если сокет уже законектен, то кидать exception

    System.exit(0); - так обычно не делается (это очень криво вот так взять и резко завершить всю систему в банальном методе), лучше бросить исключение, что-нить типа FileNotFoundException (такой класс даже есть наверно в стандр либе), а тот кто его будет ловить решит - красиво обработать данный эксепшен или тупо бросить на консоль стектрейс без обработки
    Ответ написан
  • Почему востребован Java?

    Foror
    @Foror
    Графоман
    >причина популярности Java
    Как-то так:

    - простой синтаксис, без лишних сложностей - я лет 8 на С++ не програмил, но в последнее время, бывает гляну на С++ код и просто тихий ужас :) А альтернатив С++ просто нет, только Java. Нет, конечно есть всякие Rust, D, но это пока для гиков поиграться.

    - удобная организация библиотек и качественные инструменты для управления зависимостями (остальные только-только начинают догонять) => без головняков собирать большие проекты и подключать сторонние либы

    - проработанная и шустрая многопоточность, в том числе так называемые goroutine, особенно в последних версиях (7-8)

    - JVM, на которой можно легко програмить на Scala, Groovy, Python, Ruby, JavaScript, Kotlin, Ceylon и т.д. и т.п. Если не нравится синтаксис Java. При этом то, что запрограмил на Python будет доступно из Java, и наоборот. Это очень круто. Но все еще высок порог входа, чтобы управлять всем этим хозяйством. Я вот, как раз пилю кое-что в данном направлении, чтобы обрушить этот порог :)

    - Android

    - (Инди) игры (Minecraft, Delver, Lineage - тысячи их)

    На десктопах Java нет, лишь из-за C# и Windows, а так посмотрите InteliJ IDEA 13 это пример насколько может быть сексуальным десктопный интерфейс на Java.

    И еще, те кто пытался писать на Ruby, затем переделывали на Java/Scala, т.к. 1 сервер на Java, проще, чем 10 серверов на Ruby при той же нагрузке.

    >скорость выполнения программ крайне низкая
    Это миф, тянущийся из бородатых 90-х. Современные HTTP серверы построенные на Java по производительности на уровне C/C++ реализаций. Но памяти конечно жрут больше, но это отдельная тема и в наше время это не такая уж и проблема.
    Ответ написан
    1 комментарий
  • Где найти простые задачки для изучения java?

    Foror
    @Foror
    Графоман
    У Эккеля в Философии Java есть к каждой главе примеры, которые можно набирать в редакторе и выполнять или просто запускать в голове.
    Ответ написан
  • Почему Fork/Join из JDK7 медленно работает?

    Foror
    @Foror
    Графоман
    И еще попробуйте поиграться с new ForkJoinPool(nThreads), сделайте nThreads = 2, например.
    Ответ написан
  • Почему Fork/Join из JDK7 медленно работает?

    Foror
    @Foror
    Графоман
    А вообще, если хотите добиться оптимальной скорости, то нужно вручную управлять нитями. Создаете фиксированный пул нитей (например, по одной на ядро), а дальше в этот пул закидываете ваши расчеты, которые выстраиваются в очередь и последовательно обрабатываются. Давно уже с этим не работал, так что не смог вам прям здесь пример накидать…
    Ответ написан
    Комментировать
  • Почему Fork/Join из JDK7 медленно работает?

    Foror
    @Foror
    Графоман
    Если надо быстрее, попробуйте такую штуку habrahabr.ru/post/149552
    Ответ написан
    Комментировать
  • Порекомендуйте ORM для Java-приложений?

    Foror
    @Foror
    Графоман
    В целом не видел стоящих замен hibernate. Думаю есть смысл поискать их в более легких ORM, более приближенные к SQL, как пример ibatis, но в 2008 году мне он не очень понравился. Может сейчас там лучше.

    P.S. Смотрю сейчас ibatis, а он почему-то restricted from apache.org
    Ответ написан
  • Порекомендуйте ORM для Java-приложений?

    Foror
    @Foror
    Графоман
    ObjectDB выглядит интересно, но огорчает отсутсвие внешнего кеша, как в hibernate. Например, в EhCache 2.5 можно будет указать объем памяти для кеша и забыть обо всех остальных настройках. А также подлюкчить EhCache BigMemory, на больших объемах кеша. Или подлючить шустрый пул BoneCP.

    Сайт зарегистрирован с 2003 года, но почему-то об ObjectDB так и не слышно, хотя я в своё время перерыл кучу фреймворков, но даже и не сталкивался с упоминанием данного ORM.
    Ответ написан
    Комментировать
  • Фундаментальная литература по веб-разработке на JAVA?

    Foror
    @Foror
    Графоман
    Фундамент веба в java — servlet'ы, как раберётесь, считай знаешь фундамент, дальше можно по spring документацию или книжки читать.
    Ответ написан
    Комментировать
  • Выбор Java фреймворка для веб-разработки?

    Foror
    @Foror
    Графоман
    grails, а лучше вообще python+django или ror, если нужно быстро что-нибудь сделать, что-нибудь шаблонное.

    tapestry5 — если разобраться, то у вас в руках окажется очень мощный и гибкий инструмент для разработки веб-сайтов и веб-приложений любой сложности. Но нужно многое самому пилить. Хотя с плагинами там сейчас получше стало. Есть уже стандартные наборы библиотек, можно на сайте найти.

    Еще как вариант wicket+spring посмотрите
    Ответ написан
    Комментировать