Обновить
128K+

Java *

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

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

Пятничная задача

Время на прочтение1 мин
Охват и читатели2.7K
Всех с пятницой!

Проверяем знания и своё внимание. Дан код на Java:

  1. public class Foo {
  2.  private static Foo instance = new Foo();
  3.  private static final int DELTA = 6;
  4.  private static int BASE = 7;
  5.  private int x;
  6.  private Foo() {
  7.   x = BASE + DELTA;
  8.  }
  9.  public static void main(String... argv) {
  10.   System.out.println(Foo.instance.x);
  11.  }
  12. }


Внимание вопрос! Что будет выведено? А главное — почему?

UPD Осторожно — в комментариях уже присутствует правильный ответ. Прошу провести тест в других ЯП и привести результаты в комментариях.

Покрытие кода для Maven проектов (code coverage)

Время на прочтение2 мин
Охват и читатели11K
Структура Java проектов с использованием Maven предполагает некоторое колличество Unit-тестов.
Но одних лишь тестов мало, хочется иметь более полную информацию насколько наши тесты охватывают код.

Для этих целей есть ряд библиотек из которых я использую Emma (офф. сайт).
Читать дальше →

Java как язык для параллельных вычислений. Установка, настройка, первая программа

Время на прочтение2 мин
Охват и читатели20K
Здравствуйте,

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

Содержание:
1) Имплементации MPI for Java; Что это? Где взять?
2) Как установить всё это? Как настроить?
3) Напишем свою самую-самую простую программу. Как её запустить?

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

Джеймс Гослинг объясняет, почему ушёл из Oracle

Время на прочтение3 мин
Охват и читатели6.2K
Джеймс Гослинг дал эксклюзивное интервью eWeek, где впервые подробно рассказал о причинах, заставивших его покинуть компанию Oracle.

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

Кроме того, в должностной иерархии Oracle не оказалось позиции такого уровня, которая была у Гослинга в Sun (fellow), так что ему фактически пришлось сильно спуститься по должностной лестнице.
Читать дальше →

Integer и int

Время на прочтение4 мин
Охват и читатели148K
В этом топике я хочу описать некоторые базовые различия между примитивными типами и соответствующими им объектными на примере int и Integer. Различия эти достаточно простые и, если немного задуматься, то вполне логичные, но, как показал опыт, программист не всегда над этим задумывается.

Основное различие, разумеется, в том, что Integer — это полнофункциональный объект, который занимает место в куче, а в коде вы пользуетесь ссылками на него, которые неявно преобразуются в значения:
int a = 1000// a - число
Integer b = 1000// b - ссылка на объект
При присваивании значения переменной типа Integer обычно выделяется память в куче под новый объект, как будто вы написали new Integer(1000) (так называемый autoboxing). Однако иногда переиспользуются старые объекты. Это иллюстрирует следующий код (JDK 1.6):
Integer a1 = 50;
Integer a2 = 50;
Integer b1 = 500;
Integer b2 = 500;
System.out.println(a1==a2);
System.out.println(b1==b2);
Результатом выполнения будет:
true
false
Читать дальше →

Загрузка классов в Java. Практика

Время на прочтение7 мин
Охват и читатели85K
Данная статья является продолжением статьи Загрузка классов в Java. Теория.

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

Код приложения не претендует на оригинальность, а лишь объясняет подходы и принципы написания пользовательских загрузчиков классов и методы инвокации динамического кода.
Читать дальше →

Загрузка классов в Java. Теория

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


Одной из основных особенностей платформы Java является модель динамической загрузки классов, которая позволяет загружать исполняемый код в JRE не перезагружая основое приложение. Такая особенность широко используется в серверах приложений, получивших последнее время высокую популярность.

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

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

Строковые классы Java. Сравнение производительности

Время на прочтение4 мин
Охват и читатели36K
Никогда не задавались вопросом насколько собственно отличается производительность строковых классов Java?

В данном топике я попытался сравнить производительность java.lang классов String, StringBuilder и StringBuffer.
Читать дальше →

Свое представление (view) в Spring MVC

Время на прочтение5 мин
Охват и читатели17K
Если вы работали с Spring MVC то наверняка обращали внимание, что он поддерживает множество различных представлений (view), которые позволяют генерировать pdf, excel, csv использовать jstl, freemarker, velocity и jasperReports. Но что делать если вам потребовалось заполнить какой либо документ в формате docx по шаблону и передать его пользователю? С одной стороны можно в методе воспользоваться доступом к стандартному response и если планируется использовать такую генерацию множество раз, то вынести ее в отдельный класс. Но такое решение не слишком изящно и нарушает MVC-паттерн.
Что можно сделать чтобы этого не происходило?

Database Connection Pool

Время на прочтение3 мин
Охват и читатели164K
Добрый день, хабралюди!
2 недели назад я начал работать juior java разработчиком, и, соответственно, получать много нового для себя опыта. Сегодня я решил совместить приятное с полезным и начать этот опыт оформлять в письменные мысли — в виде статей о тех технологиях, принципах и приёмах, с которыми я столкнулся на своём джуниорском пути. Нижеследующая статья — первая среди подобных, и выкладывая её здесь, я хочу, во-первых, понять, нужны ли хабрасообществу подобные вещи — рассказы не умудрённых опытом и сотнями проектов старожилов, а небольшие попытки поделится опытом от джуниора джуниору, — а во-вторых, как обычно, услышать замечания, исправления и критику.
Спасибо за внимание.


Подавляющее большинство современных веб-приложений использует базы данных для хранения информации. Приложение может обмениваться информацией с БД, используя соединение (database connection). Если создавать при каждом обращении к БД, получается проигрыш во времени: выполнение транзакции может занять несколько милисекунд, в то время как на создание соединения может уйти до нескольких секунд. С другой стороны, можно создать одно-единственное соединение (например, используя шаблон "Singleton") и обращаться к базе данных только через него. Но это решение чревато проблемами, в случае высокой нагрузки: если одновременно сто пользователей попытается получить доступ к базе данных используя одно соединение, образуется очередь, что также пагубно сказывается на производительности приложения.

Database Connection Pool (dbcp) — это способ решения изложенной выше проблемы.
Читать дальше →

Несколько слов об использовании перечислений в изменяющейся среде

Время на прочтение6 мин
Охват и читатели33K
Данный пост предлагает решение проблем с использованием перечислений при изменении состава констант или наличия дублирования кода при их использовании. В остальных случаях применение озвученного ниже подхода, как правило, нецелесообразно.

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

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

Spring в действии — пробуем opensource CMS на Java

Время на прочтение5 мин
Охват и читатели35K
В данной статье речь пойдёт о системе управления содержимым Riot, написанной на Java. Система основана на Spring Framework, использует Ajax.

web developer at work

Я приведу основные возможности системы и пошагово расскажу, как её установить. Статья адресована всем тем, кто интересуется системами управления содержимым на Java.
Читать дальше →

Сборка Java приложений при помощи Apache Ant, quick start

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

О чем эта статья


Одной из отличительных особенностей платформы Java является ее независимость от используемого инструментария. Вы можете разрабатывать сколь угодно большое Java приложение при помощи блокнота (vi) и командной строки. Понятно что так никто не делает и все используют какую-то IDE. Как следствие независимости от инструментов — IDE для Java много. Все это хорошо но есть одна особенность. Если Ваш коллега делал приложение и для сборки проекта использовал IDE_A то в IDE_B которая стоит у Вас — собрать приложение не получится.
В общем-то это давно уже не проблема. Хорошей практикой считается использовать систему сборки не зависящую от IDE. Для Java их две это Apache-Ant и Maven (тоже в общем-то Apache). Но тут есть один подводный камень. Если в Delphi или Visual Studio, чтобы создать и собрать приложение надо кликнуть в кнопку new пройтись по шагам визарда и нажать кнопку собрать, то написание ant скрипта для сборки например web приложения, особенно для начинающего разработчика, задача не тривиальная.
В статье рассматривается сборка и деплой Java web приложения шаг за шагом.

В целом задачу можно решить как с помощью ant так и с помощью maven, здесь будет рассмотрен ant. Для начинающих он проще и нагляднее.

Примечание 10 лет спустя

Решил посмотрел на свою статью написанную 10 лет назад. Звучит старомодно, в 2021 я в общем случае не рекомендую собирать Java приложения при помощи ant. НО если уж у вас возникла такая необходимость, то статья все еще может помочь. Пусть живет.

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

Кэширование данных в приложениях с Spring 3, размещенных в AppEngine

Время на прочтение7 мин
Охват и читатели6.6K
В этой статье я расскажу как можно кэшировать в memcache значения, возвращаемые методами bean'ов. Для этого не потребуется писать код, достаточно добавить конфигурации в xml файлы Spring'а и разметить код с помощью аннотаций.

Итак поредставим что у нас есть DAO с тремя методами — двумя для поиска сущностей и одним для сохранения сущностей. Для правильного функционирования нам нужен интерфейс и реализующий его класс (чтобы можно было добавить dynamic proxy на реализацию)
немного xml

Мемоизация в Java

Время на прочтение9 мин
Охват и читатели12K
Мемоизация — (Memoization, англ) вариант кеширования, заключающийся в том, что для функции создаётся таблица результатов, и будучи вычисленной при определённых значениях параметров результат заносится в эту таблицу. В дальнейшем результат берётся из данной таблицы.
Эта техника позволяет засчёт использования дополнительной памяти ускорить работу программы.Данный подход очень частно применяется в функциональных языках программирования, однако и в императивных ему так же можно найти применение. В данном топике рассматривается использование мемоизации в языке java приводятся различные примеры мемоизации и в конце производится небольшое сравнение производительности данных методов.
Читать дальше →

Декларативная система безопасности с помощью аннотаций и AspectJ в среде Java SE

Время на прочтение9 мин
Охват и читатели4.4K
Цель данной статьи — написание мини контейнера-фреймворка, который возьмет на себя задачи авторизации и аутентификации пользователя, позволяя писать минимум кода в клиентской программе. Сразу оговорюсь, в реальной жизни я использую Spring Security (ранее проект назывался Acegi).
Статья предназначена для тех кто хочет демистифицировать для себя магию работы подобных решений, либо для тех кто по каким либо причинам не считает целесообразным использование общедоступных решений и планирует создать собственную имплементацию системы безопасности. Одна из таких причин — ограниченный размер оперативной памяти и невозможность запуска «взрослых» фреймворков, например в такой Java среде как Android (у меня пока нет данных об успешном использовании AspectJ на платформе Android, но это лишь вопрос времени).
Читать дальше →

Автосканирование проекта в NetBeans 6.9

Время на прочтение1 мин
Охват и читатели4K
image В блоге NetBeans for PHP рассказано о возможности включения и отключения автосканирования проектов в NetBeans версии 6.9.

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

Особенно замедление было заметно при большом количестве папок в проекте. Так же NetBeans пересканировал проекты при изменении файлов извне.

Это было необходимо для поддержания актуальности автодоплнения и навигации по проекту.

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