Java приложения, Java-программы, Java технологии и секреты, J2SE, J2EE, проект Jakarta
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…)
March
2011
Запись денежной суммы словами (currency amount in words)
Posted in: Java open-source проекты, Java technologies, J2SE, Полезные программы | 8 Comments
Все же в финансовой сфере достаточно часто попадаются интересные вещи, что бы там не говорили.
Когда-то заказчики поставили перед нашей командой следующую задачу: на чеке необходмо отображать сумму не только цифрами, но и словами. После непродолжительного гугления был обнаружен небольшой класс, написанный на Java еще в 2003 году (к сожалению оригинал больше найти не получается). Код был немного устаревшим и содержал пару мелких ошибок. Тем не менее, за короткий промежуток времени код удалось исправить и успешно внедрить в проект, за что автору кода большое спасибо.
Сейчас дошли руки переписать этот класс (теперь он называется AmountInWords), избавиться от дублирования кода и слегка расширить функциональные возможности.
В этой статье я приведу основные варианты использования класса, а именно:
- непосредственно использование класса для форматирования сумм;
- добавление новых валют;
- интеграция класса в уже написанную систему.
Начнем…
(more…)
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…)
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…)
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: В статье выражается до безобразия субъективное мнение. Резкие выражения используются исключительно для донесения своих мыслей до читателя: никого обижать я не собирался и не собираюсь. Людям с расшатанной психикой или зашкаливающим ЧСВ читать, и тем более комментировать, категорически воспрещается. К спамерам и троллям это не относится: каждый ваш комментарий как лучик света в этом царстве тьмы, и дай вам бог всем здоровьечка.]
February
2011
Собеседование на java-программиста (java-developer interview). Часть 1: Обзор
Posted in: Project Management, Java technologies, J2SE, Ваш досуг. Полезные советы | 9 Comments
Это обзорная статья из цикла, посвященного процессу приема на работу:
- Обзор процесса приема на работу в аутсорсинговых компаниях
- Вопросы для собеседования на java-программиста
- Прием на работу: основные действующие лица
В течении последних четырех месяцев мне довелось быть на достаточно большом количестве собеседований, к тому же “по обе стороны стола”. И, естественно, мне бы хотелось вставить свои 5 копеек по поводу того:
- как сейчас обстоят дела с собеседованиями в аутсорсинговых компаниях;
- какие вопросы стоит задавать на собеседовании (на java-девелопера);
- каким образом должны действовать все вовлеченные в этот процесс люди.
Но для начала:
[Disclamer: В статье выражается до безобразия субъективное мнение. Резкие выражения используются исключительно для донесения своих мыслей до читателя: никого обижать я не собирался и не собираюсь. Людям с расшатанной психикой или зашкаливающим ЧСВ читать, и тем более комментировать, категорически воспрещается. К спамерам и троллям это не относится: каждый ваш комментарий как лучик света в этом царстве тьмы, и дай вам бог всем здоровьечка.]
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” :).
August
2009
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) { }
}
Итак, приступим.
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, идею которой рассказал мне мой друг.
February
2009
Генерация Google Sitemap и нюансы его использования (googlesitemap)
Posted in: Интернет Маркетинг, SEO, Java technologies, J2SE | 16 Comments
Sitemap позволяет владельцам сайтов и веб-мастерам сообщить поисковым системам о структуре сайта и обновлении контента на его страницах. Таким образом при правильном использовании sitemap можно добиться луч?его индексирования страниц веб-ресурса поисковыми системами. Соответственно, при неправильном использовании данной технологии можно навредить самому себе (точнее своему интернет детищу).
В этой статье я хочу коротко рассказать вам о Google Sitemap, предоставить программный код на Java для простой генерации sitemap.xml, ну и открыть некоторые нюансы обнаруженные моим другом и мной, и о которых, как мне кажется, многие не знают.
(more…)