Обновить
256K+

Java *

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

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

Как JVM аллоцирует объекты?

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

Как JVM создает новые объекты? Что именно происходит, когда вы пишете new Object()?


На конференциях периодически рассказывают, что для аллокации объектов используются TLAB'ы (thread-local allocation buffer): области памяти, выделенные эксклюзивно каждому потоку, создание объектов в которых очень быстрое за счет отсутствия синхронизации.


Но как правильно подобрать размер TLAB'а? Что делать, если нужно выделить 10% от размера TLAB'а, а свободно только 9%? Может ли объект быть аллоцирован вне TLAB'а? Когда (если) обнуляется выделенная память?
Задавшись этими вопросами и не найдя всех ответов, я решил написать статью, чтобы исправить ситуацию.


Перед прочтением полезно вспомнить как работает какой-нибудь сборщик мусора (например, прочитав этот цикл статей).

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

В разрезе: новостной агрегатор на Android с бэкендом. Вводная часть, идея, технологии

Время на прочтение2 мин
Охват и читатели6.2K
Так сложилось, что работу, которая мне нравилась и которую, как мне кажется, я делал хорошо, мне пришлось сменить на более стабильную и прибыльную, но уже не такую интересную – работу линейного менеджера в подразделении информатизации в крупном банке. Сказать, что эта работа полная противоположность прежней сложно, но в ней нет, того, что было в разработке: драйва, необходимость решения сложных задач, изучения новых технологий, что тут говорить – не было даже английского языка (знание которого терять не хотелось). Откровенно говоря, несмотря на заявляемую гибкость и передовые технологи, во многих банках царит IT-совок и ручной труд.

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

В связи с этим было принято решение об изучении новых технологий в области разработки на базе небольшого домашнего проекта (вычитываемые из книг и интернета знания без опыта применения улетучивались очень и очень быстро). Необходимые знания были, время выделить для своего развития я мог всегда.

В качестве проекта была выбрана идея реализации новостного агрегатора (с клиентом на Android) и его серверной стороны для сбора, обработки, хранения и представления данных.
Читать дальше →

Нетривиальные проблемы с generic'ами и возможные решения

Время на прочтение7 мин
Охват и читатели10K
Привет всем! Любой программист, хоть немного знающий Java работал с такой штукой, как generic. Эта фича появилась аж в 5-ой версии Java и сегодня я хотел бы рассказать о некоторых нетривиальных проблемах, связанных с обобщенными типами, с которыми я сталкивался, а также о том почему они возникают и как их можно решить. В этой статье также будут затронуты всеми (не)любимые Hibernate и Spring.

Но начну я с объяснения некоторых тонкостей generic'ов, которые не всегда понимают новички в мире Java. Если вы опытный разработчик, то можете не читать первые два пункта.
Читать дальше →

«Работаю над проектами, объединяющими книгу и интерактив»: Кей Хорстманн о книгах и не только

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

Есть гигантское множество книг о Java — а есть несколько «тех самых» книг о Java. В их число входит «Core Java» (в русском издании «Java. Библиотека профессионала») Кея Хорстманна и Гэри Корнелла. Она появилась лишь годом позже самого языка, сразу став одним из главных источников информации по теме. А за последовавшие двадцать лет выдержала целых десять изданий, скрупулёзно пополняясь информацией о новых версиях Java, так что на ней выросло уже не одно поколение Java-разработчиков.

Кей по-прежнему внимательно следит за нововведениями Java, и осенью на петербургской конференции Joker расскажет, что в Java 9 хорошего. А в ожидании его приезда мы расспросили его о многом: и о работе над книгами, и о том, могут ли их вытеснить онлайн-курсы, и об отличиях академического мира от индустрии, и о будущем Java.
Читать дальше →

Обратная сторона Spring

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

Неделя Spring на Хабре, судя по всему, открыта. Хочется сказать спасибо переводчику и комментаторам статьи "Почему я ненавижу Spring", которая не смотря на сильный негативный посыл в названии вызвала ряд интересных дискуссий, а так же тем, кто отреагировал на мою прошлую статью Как писать на Spring в 2017. Во многом благодаря комментариям к прошлой статье и появилась эта.


В этот раз мы погрузимся в пучины Spring фреймворка, разоблачим его магию, посмотрим как базовое веб приложение выглядит изнутри, и разберемся, какую-же задачу и как решает Spring Boot.

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

JetBrains MPS для интересующихся #2

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

Йо-хо-хо!


В прошлом посте мы остановились на том, что мы умеем добавлять массив входных погодных данных, а точнее данные "Время + температура", слегка попробовали использовать Behavior и разобрались с концептами.


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


Первым делом, введем ограничения на время. Сейчас мы ограничим его, чтобы часы были в пределе 0-24, а минуты 0-60, иначе будет выдаваться ошибка компиляции.


Constraints


Constraints это аспект языка, который отвечает за валидность реализации концепта. В нашем случае нам нужно ограничить property hours и minutes, поэтому мы создаем Constraints аспект концепта Time.


image


Здесь мы видим 3 пункта, которые отвечают за структуру AST.


  • can be child: получаем на вход данные об узле, родительском узле, дочернем и все, что только можно и решаем, может ли реализация концепта в данном контексте быть дочерней или нет
  • can be parent: то же самое, что и с child, только проверка на возможность быть родительским узлом
  • can be ancestor: все то же самое, что с parent, но более вложенно: в данном случае мы можем идти как угодно выше по AST, дословно — может ли узел быть предком
Читать дальше →

Автоматизация CI/CD для Java приложений с помощью Microsoft Visual Studio Team Services

Время на прочтение11 мин
Охват и читатели8.6K
Привет, Хабр! На первый взгляд название этой статьи может показаться вам странным: Java и Visual Studio – что между ними общего? Зачем вообще Visual Studio, когда есть множество других классных инструментов для разработки на Java: Eclipse, NetBeans, IntelliJ IDEA и прочих (холивар устраивать не будем). На самом деле, Visual Studio сейчас – это не просто среда для разработки, а целое семейство продуктов, где IDE Visual Studio лишь один из инструментов. Под катом мы поговорим о Microsoft Visual Studio Team Services (VSTS).


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

JetBrains MPS для интересующихся #1

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

Введение


Спасибо всем за критику в комменте под первым постом, где я хотел попробовать написать про MPS, не затрагивая важные темы, чтобы можно было потом более качественно начать писать по порядку.


Зачем нам нужен язык Weather?


В комментариях к 1 посту было следующее высказывание


С этой точки зрения, DSL — это как фреймворк, только с более удобным интерфейсом. Ясное дело, под один проект фреймворк делать никто не будет, за исключением совсем уж монструозных случаев. А сделать его под конкретную предметную область — почему бы и нет?..

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


Синтаксис


Язык Weather, который мы хотим реализовать, должен выполнять следующую задачу: мы должны уметь лаконично выражать условия (погода сегодня, например) и следствия (погода завтра, послезавтра...).
В языке Weather мы будем делать наши прогнозы отталкиваясь от 1 фактора: от температуры на сегодняшний день(массив объектов время + погодные условия).

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

Разбираемся с копированием и клонированием

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


Я наткнулся на статью Нареша Джоши о копировании и клонировании и был удивлён ситуацией с производительностью. У клонирования есть проблемы с финальными полями. А учитывая тот факт, что интерфейс Cloneable не предоставляет метод clone, то для вызова clone вам необходимо будет знать конкретный тип класса.

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

Dotty – будущее языка Scala

Время на прочтение17 мин
Охват и читатели20K
В конце мая я оказался среди слушателей конференции Scala Days в Копенгагене. Одним из ключевых спикеров был создатель языка Scala Мартин Одерски. Он рассказал о развитии языка и, в частности, о разработке компилятора, названного Dotty. Планируется, что на основе Dotty будет разработан новый компилятор для версии 3.0.

Мартин не раз выступал на эту тему, и я бы хотел собрать здесь всю актуальную информацию о Dotty – новые ключевые возможности и элементы, удаленные за ненадобностью.


Мартин Одерски. План развития Scala на ближайшие несколько лет

Этот пост будет полезен и знатокам, и совсем новичкам, для которых разговор о Dotty я предваряю рассказом об особенностях Scala, а также о том, что лежит в его математической основе.
Читать дальше →

JetBrains MPS — IDE для разработки проблемно-ориентированных языков программирования

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

Введение


MPS — это среда разработки языков программирования на платформе Intellij Idea. Она предоставляет возможность моделировать языки программирования, описывать структуры, сосредотачиваясь конкретно на дизайне и бизнес-логике, не отвлекаясь на парсеры, лексеры и различные сторонние фичи языка. Что нужно сразу обозначить: язык, который разрабатывается с помощью MPS, не компилируется в рабочую программу. Чаще всего он генерируется в модели других языков либо в текстовую форму.

Почему я решил написать этот пост? Я считаю, что это очень недооцененная возможность, а недооценена она потому что порог вхождения очень высок, плюс это один из самых непопулярных продуктов JetBrains.

Документация очень подробная, описывает все возможности, но если нет осознания «что я делаю и зачем мне это делать», то она вряд ли будет полезна. Также есть серия уроков от JetBrains на YouTube, но опять же, я более-менее начал понимать, что происходит, только после двух просмотров всей серии и досканального изучения предлагаемых sample проектов.

Я планирую написать серию постов об этой замечательной среде, чтобы по окончанию прочтения у энтузиастов оставалось как можно меньше вопросов «как сделать эту штуку», и как можно больше понимания структуры, чтобы можно было эффективно пользоваться документацией. Познавать MPS мы будем во время создания языка для описания закономерностей погоды. Почему, собственно говоря, и нет?
Читать дальше →

MMO с нуля. С помощью Netty и Unreal Engine. Часть 1

Время на прочтение58 мин
Охват и читатели56K
Всем привет! В нескольких статьях я хотел бы поделиться опытом создания подобия ММО игры используя Unreal Engine и Netty. Возможно архитектура и мой опыт кому-то пригодится и поможет начать создавать свой игровой сервер в противовес unreal dedicated server, который слегка прожорлив или заменить собой фреймворки для разработки многопользовательских игр такие как Photon.

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

Часть 1. Общая картина, сборка библиотек, подготовка клиента и сервера к обмену сообщениями
Часть 2. Наращивание игрового функционала + алгоритм Diamond Square


Как писать на Spring в 2017

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

В одной из классических статей для новичков, мелькавших недавно на Хабре, рассказывалось про создание базового Web приложения на Java. Все начиналось с сервлета, потом создания JSP страницы и, наконец, деплоймента в контейнер. Посмотрев на это свежим взглядом я понял, что для как раз для новичков это, наверняка, выглядит совершенно жутко — на фоне простых и понятных PHP или Node.js, где все просто — написал контроллер, вернул объект, он стал JSON или HTML. Чтобы немного развеять это ощущение, я решил написать "Гайд для новичков в Spring". Цель это статьи — показать, что создание Web приложений на Java, более того — на Spring Framework это не боль и мучительное продирание через web.xml, persistence.xml, beans.xml, и собирание приложения как карточного домика по кусочкам, а вполне себе быстрый и комфортный процесс. Аудитория — начинающие разработчики, разработчики на других языках, ну и те, кто видел Спринг в его не самые лучше времена.

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

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

Переход на embedded PostgreSQL в unit-тестах

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

В приложениях, работающих с базами данных, естественным образом возникает потребность в тестах, которые проверяют корректность результатов выполнения запросов. На помощь приходят различные встроенные (embedded) базы данных. В этой статье я расскажу о том, как мы перевели unit-тесты с HSQLDB на PostgreSQL: зачем это затеяли, с какими трудностями столкнулись и что нам это дало.

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

Что нового в IntelliJ IDEA 2017.2

Время на прочтение4 мин
Охват и читатели29K
Привет, Хабр! Мы рады сообщить о выходе крупного обновления IDE – IntelliJ IDEA 2017.2. Поскольку далеко не все следят за новостями в нашем официальном блоге (а также потому, что многим удобнее будет прочитать об этом на русском), в этом посте я расскажу что ждать от новой версии IDE. Кто спешит попробовать обновление самостоятельно, качайте с сайта JetBrains, либо из Toolbox App. Все остальные, добро пожаловать под кат.


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

Создание сервлетов для чайников. Пошаговое руководство

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

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

Итак.

Предположим, что Вы уже где-то скачали пример с применением maven и Вам удалось задеплоить Ваш код на Tomcat (с этого обычно начинается познание сервлетов) любым способом (WAR-архивом или прямо из среды разработки). Вы имеете структуру приложения, в которой присутствует файл web.xml. C него и надо начинать создание страниц.
Читать дальше →

Я являюсь причиной появления венгерской нотации в Android

Время на прочтение6 мин
Охват и читатели38K
Все из нас видели это:

private String mName;

Это из-за меня.

Я так и сказал — это моя вина.

Эта тема всплывает снова и снова, обсуждение на reddit напомнило, что я никогда не объяснял откуда взялась эта нотация, а также, насколько она неправильно понимается людьми. Поэтому мне бы хотелось воспользоваться возможностью, дабы прояснить некоторые вещи, и я сделаю это в двух частях:

  1. Как появилась m-нотация.
  2. Почему вы, вероятно, не понимаете, что такое венгерская нотация.
Читать дальше →

Применение преобразования Фурье для создания гитарного тюнера на Android. Часть 1

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

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

В первой части статьи мы рассмотрим принцип работы дискретного преобразование Фурье, а также возможность записывать звуковые данные с Android устройства с помощью класса AudioRecord.
Читать дальше →

Автоматическая сериализация Java-объектов в ASN.1

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

ASN.1 — стандарт описания протоколов передачи данных. Вот уже 8 лет не дает покоя тот факт, что существуют либо слабые попытки его использовать, практически не прибегая к его полному функционалу, либо же это монстры за большие деньги, используемые отнюдь не рядовым Васей.
Причем и те и другие наследуют одни и те же черты — неудобство, перегруженность дополнительными действиями и генерацией совсем бесполезных заглушек.
На хабре появлялось уже достаточно много статей с описанием всех прелестей ASN.1, рекомендую почитать их.


Вашему вниманию предлагаю альфа-версию библиотеки, позволяющей в стиле hibernate или jackson-databind сохранить ваши данные в бинарном виде. Пока поддерживаются только нотации BER(DER).

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

Вышел Upsource 2017.2 с поддержкой внешних инспекций кода, Python, NPM и многим другим

Время на прочтение2 мин
Охват и читатели4.9K
Всем привет! У нас отличные новости — вышел Upsource 2017.2! В этом релизе мы добавили ряд наиболее часто запрашиваемых возможностей, и, как обычно, улучшили уже имеющуюся функциональность. Давайте посмотрим, что попало в этот релиз.

Поддержка внешних инспекций кода

Если Вы используете встроенные в TeamCity инспекции кода на базе ReSharper или IntelliJ IDEA, или пользуетесь инспекциями SonarQube, теперь Вы сможете извлечь из них дополнительную пользу. Upsource 2017.2 умеет показывать результаты такого анализа в своем UI, наряду с результатами встроенных инспекций. Рецензирование кода становится немного проще, если сразу видно, какие новые потенциальные проблемы привнесло именно это изменение.

Инспекции ReSharper в Upsource
Читать дальше →