Java приложения, Java-программы, Java технологии и секреты, J2SE, J2EE, проект Jakarta


29
March
2011

Сертификация Oracle Certified Master, Java SE 6 Developer (SCJD)

Posted in: Java technologies, J2SE, Ваш досуг. Полезные советы | 18 Comments

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

Beginning August 1, 2011, Java Architect, Java Developer, Solaris System Administrator and Solaris Security Administrator certification path requirements will include a new mandatory course attendance requirement.

Для сдачи Sun Certified Java Developer после 1-го августа 2011 потребуется обязательное посещение одного (спасибо hkvd за уточнение) из следующих курсов:

  • Java Programming Language, Java SE 6
  • Fundamentals of the Java Programming Language, Java SE 6
  • Developing Applications With the Java SE 6 Platform
  • Object-Oriented Analysis and Design Using UML
  • Java SE Performance Tuning

Цены на посещение курсов просто сумасшедшие, а именно от 2250 до 3000 американских денег; посещение одного курса по времени займет 5 рабочих дней. Так что в прямом смысле “либо сейчас, либо никогда”…

Решил подробно посмотреть Certification path. SCJD и SCEA находятся на одном уровне (Oracle Certified Master), но SCEA состоит из трех шагов, тогда как SCJD - только из двух. Так как с Enterprise технологиями я последнее время особо не работал, а ограничение во времени достаточно серьезное, то выбор мне кажется очевидным. Сертификационные экзамены уровня Oracle Certified Expert пока что не требуют никаких обязательных посещений платных курсов, так что о них буду думать позже.

Теперь очень коротко о том, что нас ждет…
(more…)

27
March
2011

Запись денежной суммы словами (currency amount in words)

Posted in: Java open-source проекты, Java technologies, J2SE, Полезные программы | 8 Comments

Все же в финансовой сфере достаточно часто попадаются интересные вещи, что бы там не говорили.

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

Сейчас дошли руки переписать этот класс (теперь он называется AmountInWords), избавиться от дублирования кода и слегка расширить функциональные возможности.

В этой статье я приведу основные варианты использования класса, а именно:

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

Начнем…
(more…)

16
March
2011

Получение сертификата Sun Certified Java Programmer (SCJP)

Posted in: Java technologies, J2SE, Ваш досуг. Полезные советы | 20 Comments

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

Цель. Заинтересовало получение сертификата SCJD или чего-то в этом роде. Предусловием к сдаче таких экзаменов как раз и является SCJP. Кроме того, сертификационный экзамен - это достаточно хороший способ систематизировать свои знания (в данном случае по Java SE) и восполнить пробелы в них. Тем более стоимость сдачи экзамена на данный момент - всего лишь 125 американских денег, возможно из-за (благодаря / вопреки) скорому выходу Java 1.7.

Подготовка. Использовал 3 мануала:
- Sun Certified Programmer for Java 6. Study Guide
- Java Language Specification
- The Java Virtual Machine Specification
(more…)

8
March
2011

Многопоточность. Wait / notify и приоритеты при захвате монитора. Spurious wakeups. Starvation.

Posted in: Java technologies, J2SE | 13 Comments

Продолжаю разрушать мифы по поводу многопоточности в Java.

Миф: Предположим, что несколько потоков (threads) висят на мониторе (monitor) объекта A. Поток T1 захватывает монитор (допустим, входит в synchronized блок) и через некоторое время уходит в wait. Если затем некоторый поток вызовет notify на объекте A, то приоритет по захвату монитора будет иметь тот поток, который уходил в wait, то есть T1.

Попытка объяснения мифа: Поток, который уходил в wait, мог сделать некоторые действия с учетом синхронизации по объекту A. Поэтому, чтобы свести к минимуму влияние работы других потоков на консистентность данных/состояния необходимо сначала дать возможность потоку T1 завершить свою работу в пределах блока синхронизации, а потом уже предоставить монитор объекта на растерзание другим потокам.

Предлагаю такой регламент: для начала совсем чуть-чуть порассуждаем самостоятельно, потом посмотрим, что по этому поводу думают “Java Language Specification” и “The Java Virtual Machine Specification”, ну и наконец проведем ряд тестов, для подтверждения сомнительных высказываний из спецификаций :).
(more…)

15
February
2011

Собеседование на java-программиста (java-developer interview). Часть 2: Вопросы

Posted in: Java technologies, J2SE, Ваш досуг. Полезные советы | 17 Comments

Это продолжение цикла статей о собеседовании на java-программиста:
- Обзор процесса приема на работу в аутсорсинговых компаниях
- Вопросы для собеседования на java-программиста
- Прием на работу: основные действующие лица

Java-related технологии и фреймворки рождаются и умирают, а без знания java core далеко не уедешь. Как можно знать Hibernate, но не знать JDBC и SQL? Как можно разбираться в Spring MVC или Struts, но при это плавать в сервлетах? Как можно пользоваться блокирующими очередями, экзекьюторами и локами, но при этом не понимать, как работают wait/notify? Для меня это до сих пор остается загадкой.

С другой стороны, меня иногда удивляют вопросы сотрудников, которые они задают кандидатам. Зачем спрашивать о Vector и Hashtable - на дворе уже скоро 4-ое тысячелетие. Или “зачем нужен UNION”? Так и хочется ответить - для SQL-инъекций. На счет паттернов проектирования и UML я вообще молчу - неужели до сих пор не наигрались? Но это еще полбеды. Иногда интервьюеры сами допускают довольно грубые ошибки. Об этом чуть позже.

Ниже приведен список вопросов (точнее небольшая его часть), которые я задаю на собеседовании, с моими комментариями. Вся прелесть в том, что в зависимости от позиции (junior java developer, mid-level, senior developer) и специализации некоторые из вопросов превращаются в короткие либо более продолжительные диалоги с кандидатом и проверяют не только технические знания, но и умение мыслить и делать логические умозаключения.

[Disclamer: В статье выражается до безобразия субъективное мнение. Резкие выражения используются исключительно для донесения своих мыслей до читателя: никого обижать я не собирался и не собираюсь. Людям с расшатанной психикой или зашкаливающим ЧСВ читать, и тем более комментировать, категорически воспрещается. К спамерам и троллям это не относится: каждый ваш комментарий как лучик света в этом царстве тьмы, и дай вам бог всем здоровьечка.]

(more…)

14
February
2011

Собеседование на java-программиста (java-developer interview). Часть 1: Обзор

Posted in: Project Management, Java technologies, J2SE, Ваш досуг. Полезные советы | 9 Comments

Это обзорная статья из цикла, посвященного процессу приема на работу:
- Обзор процесса приема на работу в аутсорсинговых компаниях
- Вопросы для собеседования на java-программиста
- Прием на работу: основные действующие лица

В течении последних четырех месяцев мне довелось быть на достаточно большом количестве собеседований, к тому же “по обе стороны стола”. И, естественно, мне бы хотелось вставить свои 5 копеек по поводу того:

  • как сейчас обстоят дела с собеседованиями в аутсорсинговых компаниях;
  • какие вопросы стоит задавать на собеседовании (на java-девелопера);
  • каким образом должны действовать все вовлеченные в этот процесс люди.

Но для начала:

[Disclamer: В статье выражается до безобразия субъективное мнение. Резкие выражения используются исключительно для донесения своих мыслей до читателя: никого обижать я не собирался и не собираюсь. Людям с расшатанной психикой или зашкаливающим ЧСВ читать, и тем более комментировать, категорически воспрещается. К спамерам и троллям это не относится: каждый ваш комментарий как лучик света в этом царстве тьмы, и дай вам бог всем здоровьечка.]

(more…)

10
February
2011

Синхронизированные метод и блок (synchronized block, synchronized method)

Posted in: Java technologies, J2SE | 9 Comments

Уже не раз слышал от java-программистов, что синхронизированный метод это просто более удобный способ записи synchronized блока с синхронизацией по this.

То есть некоторые люди считают, что объявление

class A {
  synchronized void method() { }
}

равноценно следующему:

class A {
  void method() {
    synchronized (this) { }
  }
}

Давайте разберемся с этим раз и навсегда. А поможет нам в этом замечательная книжка, которую каждый человек не зависимо от рода деятельности наверняка носит с собой в бумажном или электронном виде, - “The Java Virtual Machine Specification” :).

(more…)

29
August
2009

Reflection в Java (java.lang.reflect API)

Posted in: Java technologies, J2SE | 17 Comments

Reflection API в Java используется для просмотра информации о классах, интерфейсах, методах, полях, конструкторах, аннотациях во время выполнения java программ.
При этом знать названия исследуемых элементов заранее не обязательно.

Все классы для работы с reflection расположены в пакете java.lang.reflect. Это метод (Method), конструктор (Constructor), массив (Array), поле (Field) и многие другие.
Вместо изучения каждого из этих элементов в отдельности, для знакомства с reflection я предлагаю вам небольшой пример. Мы попытаемся в runtime вывести всю возможную информацию о следующем java-классе:

package some;

public abstract class Test implements Serializable, Cloneable {
    private int field;

    public Test(Object field) { }

    @Deprecated
    protected static void method(String[] params) { }
}

Итак, приступим.

(more…)

22
March
2009

Сколько нужно потоков для обработки пользовательских запросов или крайности при использовании Singleton

Posted in: Java Web Design, J2EE, Java technologies, J2SE, Паттерны проектирования | 19 Comments

Более трех лет назад, когда я только пере?ел на Java, написал статью об использовании паттерна Singleton. Статья доступна по этой ссылке - Паттерн Singleton. Не смотря на про?ествие значительного промежутка времени, статью до сих пор читают и комментируют. Меня заинтересовала одна ссылка из комментариев, в которой довольно неплохо рассказываются нюансы реализации паттерна Singleton.

В статье говорится о том, что следующая реализация с lazy инициализацией является не оптимальной при достаточно частом обращении к getInstance():

public final class Singleton {
    private static Singleton _instance = null;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        if (_instance == null)
            _instance = new Singleton();
        return _instance;
    }
}

Давайте попробуем определить, что же такое “достаточно часто”. Так же в статье я хочу показать Вам одну достаточно сме?ную реализацию Singleton, идею которой рассказал мне мой друг.

(more…)

20
February
2009

Генерация Google Sitemap и нюансы его использования (googlesitemap)

Posted in: Интернет Маркетинг, SEO, Java technologies, J2SE | 16 Comments

Sitemap позволяет владельцам сайтов и веб-мастерам сообщить поисковым системам о структуре сайта и обновлении контента на его страницах. Таким образом при правильном использовании sitemap можно добиться луч?его индексирования страниц веб-ресурса поисковыми системами. Соответственно, при неправильном использовании данной технологии можно навредить самому себе (точнее своему интернет детищу).

В этой статье я хочу коротко рассказать вам о Google Sitemap, предоставить программный код на Java для простой генерации sitemap.xml, ну и открыть некоторые нюансы обнаруженные моим другом и мной, и о которых, как мне кажется, многие не знают.
(more…)