Pull to refresh
8
0
Максим Боговик @maxBogovick

User

Send message

Расширенный материал по Java 8

Reading time 4 min
Views 52K
Не секрет, что многие Java-программисты, начиная свой путь в индустрии, уделяют большое внимание «тяжелым» технологиям — OpenJPA, Spring, JAX-RS, EJB, WS-*,… Это дает возможность как скорее влиться в современные корпоративные проекты, так и максимизировать скорость роста зарплаты.

Многие из них в конце концов «спускаются» до технологий лежащих в основе указанных фреймворков — JDBC, Servlet API, NIO/NIO.2. Однако прискорбно, что зачастую не остается время на детальное изучение самого языка и возможностей платформы.

Речь идет не о тонкостях или экзотике, а о том, что составляет существенную часть работы фреймворка: Servlet-контейнер использует множественные ClassLoader-ы, JPA2-провайдер использует манипулирование байткодом, абсолютное большинство библиотек используют Reflection API, всеобщее использование Generics только «усугубилось» с появлением функциональных интерфейсов (java.lang.function.*) и лямбд.

На недопонимание изначальной платформы (ClassLoader, Reflection API) накладываются «новвоведения» Java 5 (Generics), а теперь еще и Java 8 (методы в интерфейсах, ссылки на методы, лямбды, Stream API, JSR 308: Pluggable Type Systems). Надо обратить внимание на то, что Generics + Java 8 — это не просто языковые фичи, это частично переход к функциональному стилю программирования.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

Я собрал определенное количество полезных (на мой взгляд) ссылок по следующим темам
  1. Методы в интерфейсах, ссылки на методы, множественное наследование
  2. Лямбды (Project Lambda)
  3. Stream API
  4. Функциональные алгоритмы
  5. Аннотации
  6. Генерики
  7. Reflection API
  8. Загрузка классов

Надеюсь кто-то сочтет их полезными.
Читать дальше →
Total votes 43: ↑34 and ↓9 +25
Comments 35

Открыто видео курса «Multicore programming in Java» на русском (30+30 часов)

Reading time 2 min
Views 59K
Добрый день.

Я занимаюсь IT-преподаванием. Читал Java Core (материалы тут).
Сейчас написал и продаю курс «Scala for Java Developers»

В этом посте решил открыть видео двух курсов (проходивших в режиме вебинаров) по многопоточности под JVM (это 16 + 16 двухчасовых лекций).

Больше о материалах (программа, полезные ссылки) можно прочитать в постах-объявлениях о вебинарах (Программа курса «Multicore programming in Java» (25 марта 2014), Программа и материалы курса «Multicore programming in Java» (31 июля)).

Курс рассчитан на слушателей, которые начинают изучать многопоточность с нуля (после крепкого курса Java Core, Middle Developer из чистого web-а или перешедшим из скриптовых/интерпретируемых языков программирования). Он не будет подходить тем, кто перешел из «суровых» С/С++ или ищет «академической высоты».

Детально рассматриваются темы Hardware, New Java memory Model, java.util.concurrent (atomics, blocking queues, thread pool, locks, synchronizers), message passing alternative, software transactional memory alternative, Java 7 Fork/Join, Java 8 Parallel Streams (+Lambdas, +Stream API), CSP/JCSP alternative

Читать дальше →
Total votes 26: ↑23 and ↓3 +20
Comments 1

Многомодульный Java-проект с Gradle. Шаг за шагом

Reading time 11 min
Views 186K
Очень много статей о Gradle написано. И со своей стороны хотелось бы добавить в копилку такую пошаговую инструкцию, прочтение которой, я надеюсь, позволит тем, кто плохо знаком с Gradle, “распробовать” и продолжить самостоятельно изучать этот инструмент.

Данная статья не будет подробно описывать такие темы, как плагины gradle (plugin), задачи (task), зависимости (dependencies), автоматическое тестирование и прочие прелести этого сборщика проектов. Во-первых, каждая тема заслуживает отдельной статьи или даже серии статей, а во-вторых, на эти темы уже есть статьи на хабре, например: Gradle: Tasks Are Code, Gradle: Better Way To Build. А еще на официальном сайте Gradle есть прекрасно написанный Gradle User Guide. Я же cфокусирую внимание на непосредственном решении поставленной задачи, и все сопутствующие темы будут описаны в рамках этой самой задачи.
Сначала определимся с целью, что же мы хотим получить на выходе? А цель указана в заголовке статьи. Мы хотим получить проект с несколькими модулями, который собирается с помощью Gradle. И так, приступим.
Читать дальше →
Total votes 25: ↑23 and ↓2 +21
Comments 18

Шпаргалка по шаблонам проектирования

Reading time 2 min
Views 1.4M

Перевод pdf файла с сайта http://www.mcdonaldland.info/ с описанием 23-х шаблонов проектирования GOF. Каждый пункт содержит [очень] короткое описание паттерна и UML-диаграмму. Сама шпаргалка доступна в pdf, в виде двух png файлов (как в оригинале), и в виде 23-х отдельных частей изображений. Для самых нетерпеливых — все файлы в конце статьи.

Под катом — много картинок.

Читать дальше →
Total votes 192: ↑179 and ↓13 +166
Comments 66

Почему SNMP это не очень просто?

Reading time 17 min
Views 159K
Давным давно, на Хабре была опубликована статья, рассказывающая о том, как использовать популярную библиотеку, для работы с SNMP из Java-приложения. Поддерживая, в целом, начинание автора, я хочу остановиться на тех сложностях, которые могут возникнуть в реальном проекте, использующем SNMP.
Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Comments 15

Ваш wi-fi расскажет мне, где вы живёте, где работаете и где путешествуете

Reading time 3 min
Views 145K

Москва вайфайная

Многие знают, что ваши мобильные устройства распространяют информацию об их предыдущих соединениях. Большинство не имеет об этом представления.

Пробы WiFi


Чтобы соединиться с уже известными сетями, которые не сообщают о своём присутствии, все ваши мобильные устройства отправляют пробные пакеты, чтобы найти известные им сети. Эти пакеты можно перехватить, когда телефон включается, или когда он отсоединяется от сети. Для этого используются обычные инструменты — airodump / tcpdump. Пример:

# airodump-ng -w wifi-dump wlan0
# tcpdump -n -l -e -r wifi-dump.cap |
    grep 'Probe Request ([^)]'


Вывод содержит время, MAC-адрес устройства и имя сети. Пример:

16:32:26.628209 BSSID:ff:ff:ff:ff:ff:ff DA:ff:ff:ff:ff:ff:ff SA:50:ea:d6:aa:bb:cc
    Probe Request (SUBWAY) [1.0 2.0 5.5 11.0 Mbit]


То бишь, устройство 50:ea:d6:aa:bb:cc проверяло, есть ли сеть SUBWAY в пределах доступности.

Ну и что тут плохого?


Ну испускают они эти пакеты с именами сетей. Подумаешь.
Читать дальше →
Total votes 64: ↑61 and ↓3 +58
Comments 51

Maven: ответы на вопросы

Reading time 3 min
Views 5.5K

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

Вопрос звучал примерно так:Как создать spring mvc проект, и подключить требуемые библиотеки например hibernate, задеплоить его на tomcat, а потом работать с этим проектом в eclipse?
Ответ на этот и другие вопросы
Total votes 18: ↑10 and ↓8 +2
Comments 4

Обзор DasKeyboard Ultimate S (Пожалуй, первый за несколько лет)

Reading time 2 min
Views 29K
Наконец дождался свою мечту :)

На фото — моя новенькая dasKeyboard (dasKeyboard.com). Их в России сейчас штучное количество, судя по тому, что не удалось найти ни одного сообщения о покупке или о продаже. Из Европы или США напрямую в Россию что-то никто не возит. eBay отказал по всем существующим предложениям. В США заказал через пересыльщика, полмесяца молчали, сейчас проснулись, но те, американские, еще летят. Американский вариант имеет несколько иную раскладку, насколько понятие раскладки может быть здесь применимо.



DasKeyboard производится в двух сериях — Ultimate и Professional. Каждая серия имеет одну стандартную модель и одну модификацию «Silent».

Серия Professional имеет нормальные надписи на кнопках (понятно, что кириллицы там нет). А вот серия Ultimate – самая интересная, все клавиши абсолютно и матово черны. Именно такую я себе и заказал (плюс еще для друзей есть :).

Итак, чем же она примечательна?

Читать дальше →
Total votes 150: ↑130 and ↓20 +110
Comments 270

Установка Windows 8 Developer Preview для ленивых

Reading time 3 min
Views 51K
Задача: поставить Windows 8 Developer Preview поиграться.

Условия: старая винда должна выжить, привода DVD нет, большой флешки на десять гигов тоже.

Классические решения:

  1. Поставить в виртуалку. Это медленно, нужен дополнительный софт и без хардварной виртуализации ничего не заработает.
  2. Поставить на другой жёсткий диск. Увы, в ноутбук второй винт не вставишь, да и нету его у меня.
  3. Выделить отдельный раздел на винте. А это ставить лишний софт, танцевать с бубнами вокруг разделов… Лениво!

К тому же последние два варианта обычно требуют физический DVD, которого нет. Выход? VHD!

Кроме ISO образа Windows 8 нам также понадобится установленная Windows 7 — более ранние версии не умеют работать с VHD. А из под Linux мы не сможем так просто запустить инсталлятор.

Читать дальше →
Total votes 216: ↑181 and ↓35 +146
Comments 139

Переход с Google Maps на OpenStreetMap

Reading time 2 min
Views 31K
В нашем проекте так сложилось, что мы для нашей гео-вики стали использовать OSM а не GM. В ходе написания мобильного клиента под андроид был использован стандартный компонент MapView. Но, в ходе тестирования выявились расхождения в координатах OSM и GM, которые, в некоторых случаях, достигали 30 метров. Таким образом было решено переходить с карт гугла на OSM для чего и была найдена соответствующая библиотека osmdroid. О том, как переехать на эту библиотеку, расскажу под катом.
Читать дальше →
Total votes 29: ↑25 and ↓4 +21
Comments 11

Время против памяти на примере хеш-таблиц на Java

Reading time 3 min
Views 18K
Эта статья иллюстрирует т. н. компромисс скорости и памяти — правило, которое выполняется во многих областях CS, — на примере разных реализаций хеш-таблиц на Java. Чем больше памяти занимает хеш-таблица, тем быстрее выполняются операции над ней (например, взятие значения по ключу).

Читать дальше →
Total votes 31: ↑27 and ↓4 +23
Comments 28

Новый синхронизатор Phaser

Reading time 5 min
Views 55K
Phaser (Этапщик) — мощная и гибкая реализация паттерна синхронизации Барьер. Включен в JDK 7 в составе пакета java.util.concurrent.

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

Читать дальше →
Total votes 38: ↑37 and ↓1 +36
Comments 4

Подготовка к экзамену Oracle Java SE 7 Programmer II (1Z0-804)

Reading time 14 min
Views 80K

Приветствую уважаемых хабражителей и Java-программистов!
Cтатья посвящена подготовке к сдаче экзамена Oracle Java SE7 Professional с кодовым номером 1Z0-804. Про это на Хабре уже было написано множество постов (например здесь, здесь, тут, здесь, здесь, тут, тут, и вот тут), поэтому постараюсь не повторяться и дополнить заметками о том что наиболее часто встречалось, важными нюансами, которые на мой взгляд были пропущены или недостаточно хорошо освещены в указанных статьях, и вообще в общедоступной литературе (сразу отмечу, что материал не претендует на полноту, здесь я лишь старался обозначить каверзные вопросы с экзамена и лаконично изложить некоторые сложные вещи). Так же поделюсь своими соображениями насчет того, по каким материалам лучше готовиться. С первого раза экзамен сдать не получилось, поэтому начал сохранять для себя различные заметки, где записывал всё что мне казалось сложным или трудно-запоминаемым. Которыми теперь и решил с вами поделится. Заранее прошу проявить понимание, если вы вдруг заметите ошибку, недочёт или очепятку — пишите в комментарии.

Читать дальше →
Total votes 24: ↑21 and ↓3 +18
Comments 23

JavaScript — полезные материалы

Reading time 2 min
Views 79K
Хочу поделиться набором ссылок на нексолько полезных, интересных и, возможно, не самых известных материалов по JavaScript. Из них вы узнаете немного больше об истории появления языка, о его настоящем, тонкостях реализации в различных браузерах, и о будущем развития стандарта ECMAScript. О различных способах наследования в том числе об эмуляции «классического» ООП, множественном наследовании и миксинах. О функциональном стиле программирования в JavaScript: чистые функции, map, reduce, частичное применение и композиции функций. И, наконец, что если бы Хемингуэй писал на JavaScript?
Читать дальше →
Total votes 137: ↑130 and ↓7 +123
Comments 29

Подводные камни JavaScript

Reading time 6 min
Views 149K
Мне очень нравится JavaScript и я считаю его мощным и удобным. Но для большинства начинающих JS-программистов, много проблем создаёт недопонимание аспектов языка. Часто конструкции языка ведут себя «нелогично». В данной статье я хочу привести примеры «граблей», на которые я наступил; объяснить поведение языка и дать пару советов.

Читать дальше →
Total votes 135: ↑115 and ↓20 +95
Comments 150

Функциональное программирование на Javascript

Reading time 15 min
Views 128K


Краткое содержание:

Возьмем немного функций высшего порядка, добавим частичное применение функций, приправим fold с map-ом и получим Javascript DSL для работы с DOM.

Человеческим языком:
Простое и понятное введение в функциональное программирование на чистом и понятном Javascript.

В отличие от «Через тернии к Haskell» все разжевано (возможно даже слишком) и разложено по полочкам.

Прочтение статьи развоплотит миф о неприменимости ФП в реальной жизни. Вы сможете смотреть на решение одной и той же задачи с разных точек зрения. Прямо как на картинке.

Читать дальше →
Total votes 123: ↑114 and ↓9 +105
Comments 54

Подготовка к OCEJPAD 6

Reading time 3 min
Views 8.7K
Хочу поделиться опытом прохождения Java EE 6 Java Persistence API Developer Certified Expert Exam (OCEJPAD 6).

Немного о OCEJPAD 6


OCEJPAD 6 один из новых(относительно новых) сертификатов, который охватывает Java Persistence API. Ранее Java Persistence API входил в состав SCBCD, но с добавлением Criteria API в JPA 2.0, было создано 2 экзамена вместо одного:
  • Java EE 6 Java Persistence API Developer Certified Expert Exam 1Z0-898(EE6 JPA or OCEJPAD 6)
  • Java EE 6 Enterprise JavaBeans Developer Certified Expert Exam 1Z0-895(EE6 EJB or OCEEJB 6)

Для кого предназначен этот сертификат? На мой взгляд, для всех Java Developer’ов, так как редкий проект обходится без использования доступа к базам данных, а пользоваться только JDBC уже давно не по фэн шую. Так что крепкие знания JPA будут как нельзя кстати. Одна из наиболее часто используемых имплементаций JPA — Hibernate.

Где взять mock тесты?


Единственные существующие mock тесты по этой сертификации (во всяком случае известные мне) — epractizelabs, но они платные, и говорят, что содержат много ошибок. Я не могу ничего сказать об этом ресурсе, так как не пользовалась ими.
Но, так как просто читая книгу достаточно тяжело подготовиться к экзамену, я составила для себя вопросы/ответы содержащие все важные моменты из книги Pro JPA 2: Mastering the Java™ Persistence API. Отвечая на них, я достаточно хорошо подготовилась к сертификации — сдала с 87%. Эти вопросы/ответы выложены здесь — http://www.examclouds.com/ для бесплатного пользования.

Что читать?


Я использовала для подготовки книгу Pro JPA 2: Mastering the Java™ Persistence API (ее можно скачать бесплатно в интернете), а также спецификацию JPA 2.0. На мой взгляд спецификацию нужно читать после тщательного изучения Pro JPA 2: Mastering the Java™ Persistence API или обращаться за разъяснением наиболее непонятных моментов. Следующие главы из этой книги содержат всю необходимую информацию для сдачи экзамена (все остальное можно смело пропустить):
Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Comments 4

Четыре паттерна вызова функций в JavaScript

Reading time 6 min
Views 45K
Язык JavaScript был представлен как язык функционального программирования. Причина заключается в том, что функции в JS не просто разделяют логику на операционные блоки, функции являются объектами первого класса, способными создавать другие объекты. Подобная зависимость от функций одновременно является как сильной стороной, так и настоящим проклятием этого языка. Сильная сторона заключается в том, что язык, обладая подобными особенностями, становится легковесным и быстрым (каким JavaScript изначально и видели его создатели). Однако если вы не знаете что делаете — однозначно ждите беды.

Я предлагаю посмотреть на паттерны вызова функций, а точнее на то, как значительно изменяется результат в зависимости от выбранного паттерна. Также мы рассмотрим как ведет себя this, в зависимости от способа вызова функции.

Итак, существует четыре пути вызова функций:

  • Вызов метода — Method Invocation
  • Вызов функции — Function Invocation
  • Вызов конструктора — Constructor Invocation
  • Вызов apply и call — Apply And Call Invocation

Читать дальше →
Total votes 63: ↑43 and ↓20 +23
Comments 51

Паттерны ООП в метафорах

Reading time 17 min
Views 557K
Большинство литературы посвященной паттернам в ООП (объектно-ориентированном программировании), как правило, объясняются на примерах с самим кодом. И это правильный подход, так как паттерны ООП уже по-умолчанию предназначаются для людей, которые знают что такое программирование и суть ООП. Однако порой требуется заинтересовать этой темой людей, которые в этом совершенно ничего не понимают, например «не-программистов» или же просто начинающих «компьютерщиков». Именно с этой целью и был подготовлен данный материал, который призван объяснить человеку любого уровня знаний, что такое паттерн ООП и, возможно, привлечет в ряды программистов новых «адептов», ведь программирование это на самом деле очень интересно.
Статья предназначена исключительно для новичков, так что «старожилы» ничего нового для себя не узнают. В основном статья описывает известные паттерны из книги «Приемы объектно-ориентированного программирования. Шаблоны проектирования.», но более популярным и простым языком.
Читать дальше →
Total votes 214: ↑201 and ↓13 +188
Comments 86

Information

Rating
Does not participate
Location
Тирасполь, Молдова, Молдова
Date of birth
Registered
Activity