Обновить
142.34

Java *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Одна маленькая оптимизация

Время на прочтение2 мин
Охват и читатели38K
Совсем недавно со мной поделились историей одной оптимизации (привет stanislaw), которая показалась мне довольно забавной.

Проект игровой и с постоянно растущей базой пользователей, но так как расширятся в ширь не хотелось — возникла задача оптимизировать существующий код в узких местах. После недолгого профайлинга, буквально сразу, удалось найти одно такое узкое место, которое на первый взгляд не вызвало бы ни у кого подозрений:

for (A a : arrayListA) { 
    // do something
    for (B b : arrayListB) {
        // do something
        for (C c : arrayListC) {
            // do something
        }
    }
}

Доступа к коду у меня нету, поэтому я передаю лишь суть повествования. Есть некий метод просчета ситуации на карте, в котором происходит много итераций по разного рода циклам. Причём, граф объектов уже создан и изменяется лишь его состояние. То есть новых объектов фактически не создается… Но тем не менее профайлер показывал приблизительно такую картину (картинка из предыдущего топика):

image

И при частых вызовах метода сборка занимала довольно большую часть времени работы метода.
Читать дальше →

Jelastic Cloud + Maven. Часть 1

Время на прочтение4 мин
Охват и читатели4.9K
Что такое Jelastic Cloud? это облачный java-хостинг, а с некоторых пор и php-хостинг, который поддерживает такие сервера приложений как Tomcat 6/7, Jetty 6, Glassfish 3, среду выполнения Java 6/7, а так же БД MariaDB 5.5, MySQL 5.5, PostgreSQL 8.4, MongoDB 2.0 и CouchDB 1.2 (версии указаны на момент публикации поста). Более подробно можно узнать у них на сайте.

Мы же поговорим про создание и загрузку java web-приложения в cloud-окружение посредством maven-плагина от Jelastic.

В первой части мы создадим окружение в облаке и создадим простой web-проект, который и установим в окружение.
Читать дальше →

Шифруются? Вытаскиваем байткод из JVM

Время на прочтение5 мин
Охват и читатели26K


Привет, хабр. Я пишу на языке Java, занимаюсь, преимущественно, работой с серверами MMORPG игр. Серверные «сборки» выпускаются многими командами, работающими в этой сфере. Некоторые платно, а некото
Читать дальше →

Курс программирования под Android для начинающих

Время на прочтение1 мин
Охват и читатели84K


Организация Linux Foundation открыла курсы программирования под Android для начинающих. Авторы курса постарались, чтобы можно было за пару часов усвоить навыки разработки под эту платформу.
Читать дальше →

Зимняя сказка в вашем Android'e

Время на прочтение1 мин
Охват и читатели11K
«Часто по ночам пролетает Снежная королева по городским улицам и заглядывает в окошки, вот от того-то и покрываются они морозными узорами, словно цветами.»


Читать дальше →

Анализ и оптимизация одного запроса в EclipseLink

Время на прочтение3 мин
Охват и читатели7.1K
В этой статье я решил собрать несколько полезных практик, которым я научился за два года работы с ORM фреймворком EclipseLink на основе реального примера.
Статья расчитана на тех, кто уже работал с фрэймворком основанным на JPA, будь то Hibernate или OpenJPA.

Читать дальше →

Многопоточность в Java

Время на прочтение14 мин
Охват и читатели1.1M
Здравствуйте! В этой статье я вкратце расскажу вам о процессах, потоках, и об основах многопоточного программирования на языке Java.
Наиболее очевидная область применения многопоточности – это программирование интерфейсов. Многопоточность незаменима тогда, когда необходимо, чтобы графический интерфейс продолжал отзываться на действия пользователя во время выполнения некоторой обработки информации. Например, поток, отвечающий за интерфейс, может ждать завершения другого потока, загружающего файл из интернета, и в это время выводить некоторую анимацию или обновлять прогресс-бар. Кроме того он может остановить поток загружающий файл, если была нажата кнопка «отмена».

Еще одна популярная и, пожалуй, одна из самых хардкорных областей применения многопоточности – игры. В играх различные потоки могут отвечать за работу с сетью, анимацию, расчет физики и т.п.

Давайте начнем. Сначала о процессах.
Читать дальше →

Рождественское приложение на Android

Время на прочтение1 мин
Охват и читатели18K
Новый Год 2013 приближается семимильными шагами, и все чаще хочется чего-то снежного, новогоднего на своем мобильном устройстве. Надеюсь, что мое приложение удовлетворит эти потребности :)

Скриншоты:
Читать дальше →

Мюнхгаузен-стайл, или один ненормальный способ запускать Java-программы на Android

Время на прочтение2 мин
Охват и читатели25K
image

В один прекрасный день меня одолело странное желание — пользоваться всей мощью моего андроид-смартфона в консоли. Очень удобный способ для всяческих утилитарных задач. В консоли — это ключевой момент моего повествования.
Как таковая разработка под Android (если мы говорим про стандартный Android SDK, а не NDK) не подразумевает консольного программирования. Активити, сервисы, интенты — в общем, на эту тему написан не один десяток статей, а моя — о другом.
Краткое пособие по вытягиванию себя за волосы

Погодник на java для начинающих и постарше

Время на прочтение10 мин
Охват и читатели22K
image

Приветствую всех в этот прекрасный день ожидания праздника, это моя первая статья на хабре, в которой я хотел бы рассказа про открытый API погоды Яндекса. Статья является продолжением серии Java для начинающих. Следует отметить, статья рассчитана на тех, кто недавно начал изучения язык или на тех, кто не знаком с данным сервисом, но в любом случае, рад я буду любым читателям (эх тавтология… ). Яндекс дает неплохую возможность для разработчиков, которым требуется в своей программе или на своем сайте разместить погоду, причем информации, которую Яндекс предоставляет более, чем достаточно.

Погоду Вы сможете выбрать за любой день на неделю вперед. Различные состояния (ясно, пасмурно и т. д.), множество языков (для городов, например русский и английский, для состояний все языки стран СНГ и не только: ясно, аяз, açık, ашық и т… д.), я не очень хорош в географии, но, кажется, информация там для всех стран, даже есть миниатюрные картинки состояния погоды, но самое главное, почему я выбрал этот сервис — простая и понятная структура. Сразу оговорюсь, за «рекламу» мне не платили.
Читать дальше

Java собеседование. Коллекции vs null

Время на прочтение3 мин
Охват и читатели134K
Всем привет!

В топике Java собеседование. Коллекции подробно изложен вопрос работы с Set & Map в Java. Но у меня ещё есть парочка любимых вопросов из этой области:

  1. Может ли null использоваться в качестве ключа в Map?
  2. Может ли Set содержать null?

подсказка (HashMap.java)
   public V get(Object key) {  
        if (key == null)  
            return getForNullKey();  
        int hash = hash(key.hashCode());  
        for (Entry<K,V> e = table[indexFor(hash, table.length)];  
             e != null;  
             e = e.next) {  
            Object k;  
            if (e.hash == hash && ((k = e.key) == key || key.equals(k)))  
                return e.value;  
        }  
        return null;  
    }  
    /** 
     * Offloaded version of get() to look up null keys.  Null keys map 
     * to index 0.  This null case is split out into separate methods 
     * for the sake of performance in the two most commonly used 
     * operations (get and put), but incorporated with conditionals in 
     * others. 
     */  
    private V getForNullKey() {  
        for (Entry<K,V> e = table[0]; e != null; e = e.next) {  
            if (e.key == null)  
                return e.value;  
        }  
        return null;  
    }  


Предполагается, что пытливый читатель самостоятельно поразмыслит над ответами и затем сравнит их с моими. Самые нетерпеливые могут сразу проследовать под кат.
Читать дальше →

Использование фильтров из Box2D в Libgdx

Время на прочтение3 мин
Охват и читатели11K
В прошлой статье рассматривалась работа с ContactListener. Вот только примеры, которые я использовал, были не совсем верно выбраны. В Box2D есть намного более удобные средства для фильтрации столкновений, а именно – фильтры. О них и напишу в этот раз.
Использование фильтров из Box2D в Libgdx
Читать дальше →

Запускаем консольные Java приложения на Android

Время на прочтение2 мин
Охват и читатели42K


Речь пойдёт о проекте-утилитке, который может пригодиться всякому кто изучает Java и не всегда имеет под рукой ПК для просмотра работы примера кода в полевых условиях (как-то — в метро, маршрутке, кафешке и т.д.).
Читать дальше →

Ближайшие события

Работа с JMS сообщениями и MDB в JEE

Время на прочтение4 мин
Охват и читатели84K
Работа с сообщениями подразумевает взаимодействие между компонентами системы посредством передачи сообщений. JMS позволяет реализовать это взаимодействие в java приложении, а MDB бины позволяют асинхронно обрабатывать получаемые сообщения на сервере приложений без дополнительных усилий по асинхронной обработке.

Ниже представлен простой пример обработки JMS сообщения с помощью MDB.
Читать дальше →

Вышел Kotlin M4

Время на прочтение3 мин
Охват и читатели5.6K
Вышел Kotlin M4, очередной milestone нашего языка программирования. Теперь Kotlin совместим с JDK7, научился еще лучше выводить типы, стал побыстрее. Сильно продвинулся отладчик, интеграция IDE с JUnit, поддержан новый механизм сборки, который со временем перерастет в инкрементальный компилятор… В этом посте я коротко расскажу о самом интересном, более подробно про M4 можно почитать здесь (по-английски).
Читать дальше →

Java собеседование. Коллекции

Время на прочтение10 мин
Охват и читатели926K
С недавнего времени у меня появилась настойчивая мысль, что профессиональное развитие сильно замедлилось и это хочется как-то исправить. Да, читаю книги, слушаю курсы, но в то же время приходит и понимание того, что возможно пришло время сменить работу, здесь вроде как все изучено, плавно уходим в рутину. Данная мысль сподвигла меня на рассылку своего резюме в несколько компаний — лидеров рынка. После прохождения собеседования в 3 из них, я решил, как водится внести свои 5 копеек в освещение обширной темы собеседования, а именно технических вопросов по Java коллекциям, с которыми приходится сталкиваться. Да, знаю, читатель скажет: «коллекции — избитая тема, сколько можно», но часть из приведенных ниже вопросов, я задавал своим знакомым разработчикам, которые занимают именно позиции разработчиков («крепких середнячков», по меркам недалекой от Москвы глубинки, которые уверенно справляются со своей работой на практике, а вот в теории скажем так есть пробелы, потому, что работа не требует решения каких-то нетривиальных задач, да и потому что не всем это интересно — изучать как внутри работает структура данных), вызывало растерянность. Думаю, что рассмотренный материал будет не очень интересен разработчикам выше уровня Junior (я попрошу их комментировать, дополнять и критиковать изложенный здесь материал), а вот Junior`ы уверен, найдут в этой статье интересное для себя.
Читать дальше →

Работа с ContactListener из Box2d в Libgdx

Время на прочтение3 мин
Охват и читатели18K
В продолжение прошлой статьи про использование Box2d в Libgdx решил рассмотреть работу с классом ContactListener.

Из наименования класса очевидно, что использовать его следует для обработки коллизий. Рассмотрим пару практических примеров.

image
Читать дальше →

Кофе, табак и bootstrap за 5 секунд

Время на прочтение4 мин
Охват и читатели32K
Опуская лукавство в заголовке, речь пойдет о моем свеженьком опен-сорс начинании, которое показано к употреблению вовнутрь и наружно всем Java программистам.

Встречайте Tobacco Bootstrap или просто в дальнейшем Табак, который cобрал все лучшее, что я видел в мире веб-проектов в один архетип для Maven.

UPD: Табак обновлен до 1.0.2 с Twitter Bootstrap 2.2.2 внутри, и кроме того этот релиз уже уйдет в центральный репозиторий, то есть инсталляция больше не нужна
Очередной велосипед?

Box2d и Libgdx

Время на прочтение9 мин
Охват и читатели59K
День добрый.

Не так давно начал изучать работу Libgdx и обнаружил, что не так много статей по сему фреймворку на русском языке. Встречал, конечно, статьи на русском, но они были лишь переводами офф. мануалов. Были правда и статьи, где разработчики пытались рассказать о своих творениях. Но в одной статье всё не обхватить, в итоге в подобных статьях было всего понамешано.

Я задался целью поэтапно писать статьи о различных аспектах/частях LibGDX, чтобы в итоге, любой человек мог более-менее работоспособную версию своей собственной игрушки сделать. В этой статье хотел бы рассказать про Box2D, который присутствует в LibGDX.
image
Читать дальше →

Продвижение мобильных приложений

Время на прочтение4 мин
Охват и читатели8.1K
Согласно статистике, 59% мобильных приложений не окупает затраты при его разработке.
Оригинальная идея и хорошая реализация — только половина пути к успеху.
Хорошее приложение, но без маркетинга, с большой вероятностью провалиться, а плохое при грамотном продвижении может окупить себя в десятки раз.

Далее разберем приемы продвижения приложения без вложения средств.

ASO оптимизация

Происходит в два шага и у каждого своя цель:
1. Непосредственно поисковая оптимизация (SEO),
2. Визуальная оптимизация.

Цель первого — повысить searching ranks. То есть сделать так, чтобы Ваше приложение могли найти как можно больше людей, используя поисковик.

Существует три основных бесплатных приема.
1) Название приложения. Очень важно выбрать правильное название. Именно от него в основном зависит, сколько людей найдут Вас, используя поиск. Старайтесь сделать так, чтобы название включало основные ключевые поисковые слова.
Пример: приложение на тему «Развлекательные игры для вечеринок» лучше назвать «Развлечения для вечеринок». Сразу 2 ключевых слова: развлечения и вечеринки. Не стоит называть, к примеру, «Развлекуха» или «Мимоза».
2) Описание. Большинство пользователей читает только первый абзац. Постарайтесь сделать его максимально информативным и привлекательным. Также используйте по максимуму ключевые слова в тексте.
Пример: приложение на тему «Кулинария». Используйте в описании примерно следующие слова: кухня, рецепты, вкусно, приготовление и тд.
3) Перевод. Прирост пользователей до 15%. Используйте основные языки (английский, немецкий, китайский и др). Постарайтесь обеспечить качественный перевод и не переводить текст в гугл переводчике, других программах.
Читать дальше →

Вклад авторов