Как стать автором
Обновить
100
0.6
Slava Vedenin @vedenin1980

Java developer

Отправить сообщение

Пишем свой Spliterator

Время на прочтение11 мин
Количество просмотров52K
Многие из вас уже попробовали на вкус Stream API — потоки Java 8. Наверняка у некоторых возникло желание не только пользоваться готовыми потоками от коллекций, массивов, случайных чисел, но и создать какой-то принципиально новый поток. Для этого вам потребуется написать свой сплитератор. Spliterator — это начинка потока, публичная часть его внутренней логики. В этой статье я расскажу, как и зачем я писал сплитератор.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии34

JSR 133 (Java Memory Model) FAQ (перевод)

Время на прочтение25 мин
Количество просмотров148K
Добрый день.
В рамках набора на курс «Multicore programming in Java» я делаю серию переводов классических статей по многопоточности в Java. Всякое изучение многопоточности должно начинаться с введения в модель памяти Java (New JMM), основным источником от авторов модели является «The Java Memory Model» home page, где для старта предлагается ознакомится с JSR 133 (Java Memory Model) FAQ. Вот с перевода этой статьи я и решил начать серию.
Я позволил себе несколько вставок «от себя», которые, по моему мнению, проясняют ситуацию.
Я являюсь специалистом по Java и многопоточности, а не филологом или переводчиком, посему допускаю определенные вольности или переформулировки при переводе. В случае, если Вы предложите лучший вариант — с удовольствием сделаю правку.
Этот статья также подходит в качестве учебного материала к лекции «Лекция #5.2: JMM (volatile, final, synchronized)».

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

Ну и да, приходите учиться ко мне!


JSR 133 (Java Memory Model) FAQ


Jeremy Manson и Brian Goetz, февраль 2004

Содержание:
Что такое модель памяти, в конце концов?
Другие языки, такие как C++, имеют модель памяти?
Что такое JSR 133?
Что подразумевается под «переупорядочением» (reordering)?
Что было не так со старой моделью памяти?
Что вы подразумеваете под «некорректно синхронизированы»?
Что делает синхронизация?
Как может случиться, что финальная поля меняют значения?
How do final fields work under the new JMM?
Что делает volatile?
Решила ли новая модель памяти «double-checked locking» проблему?
Что если я пишу виртуальную машину?
Почему я должен беспокоиться?
Читать дальше →
Всего голосов 56: ↑51 и ↓5+46
Комментарии32

Введение в RxJava: Жизненный цикл подписки

Время на прочтение4 мин
Количество просмотров59K
image

Одна из главных идей, лежащих в основе Rx, заключается в том, что неизвестно когда именно последовательность выдаст новое значение или завершится. Однако, у нас есть возможность управлять временем в которое мы начнем или закончим получать эти значения. К тому же, если наши подписчики используют внешние ресурсы, то мы вероятно захотим освободить их по окончанию некой последовательности.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии5

Конкурс по программированию на JS: Почтовые фильтры

Время на прочтение4 мин
Количество просмотров47K
UPDATE: Опубликованы итоги конкурса.

Компания Hola снова объявляет конкурс по программированию на JS с солидным призовым фондом:

  1. Первое место: 1500 USD
  2. Второе место: 1000 USD
  3. Третье место: 500 USD
  4. Возможно, мы решим отметить чьё-то чрезвычайно оригинальное решение специальным призом в 350 USD.
  5. Если Вы отправите кому-то ссылку на этот конкурс, поставив наш адрес в CC, и этот человек займёт призовое место, Вы получите такую же сумму, как и он.

Мы ищем талантливых программистов, поэтому авторы интересных решений будут приглашены на собеседования.



Правила


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

Условия конкурса на английском языке размещены на нашем сайте. Ниже — перевод на русский язык.

Читать дальше →
Всего голосов 42: ↑28 и ↓14+14
Комментарии189

Подборка бесплатных инструментов для разработчиков

Время на прочтение28 мин
Количество просмотров186K
Сегодня мы представляем вашему вниманию адаптированную подборку инструментов (в том числе облачных) для разработчиков, которые позволяют создавать по-настоящему качественные проекты. Здесь представлены исключительно SaaS, PaaS и IaaS сервисы, предоставляющие бесплатные пакеты для разработчиков инфраструктурного ПО.

Читать дальше →
Всего голосов 96: ↑89 и ↓7+82
Комментарии38

Big data от А до Я. Часть 3: Приемы и стратегии разработки MapReduce-приложений

Время на прочтение7 мин
Количество просмотров83K
Привет, Хабр! В предыдущих статьях мы описали парадигму MapReduce, а также показали как на практике реализовать и выполнить MapReduce-приложение на стеке Hadoop. Пришла пора описать различные приёмы, которые позволяют эффективно использовать MapReduce для решения практических задач, а также показать некоторые особенности Hadoop, которые позволяют упростить разработку или существенно ускорить выполнение MapReduce-задачи на кластере.


Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии5

Высоконагруженное приложение на java

Время на прочтение4 мин
Количество просмотров28K
Хотелось бы добавить по поводу высоконагруженных систем на java относительно этой статьи. В комментариях писать слишком много, поэтому напишу отдельно. Подход не совсем программиста, но может кому пригодится. Это только мое мнение, возможно, оно где-то неверно.

Платформа JEE


Конечно на стандартной java ваше приложение будет работать быстрее, потреблять меньше памяти, и вы можете сделать архитектуру именно такой, как вам нужно. Но это при том условии, что у вас неограниченное количество человеко-часов, и вы каждый день пишете такую ерунду как приложение на 100к клиентов. В противном случае для этого потребуется очень много времени и итераций, и в итоге все равно получиться чуточку хуже, чем то, как это реализовано в современных JEE серверах. Все промахи всплывут только под реальной нагрузкой, и архитектуру приложения придется переделывать не один раз.
Читать дальше →
Всего голосов 30: ↑18 и ↓12+6
Комментарии36

Java Logging: история кошмара

Время на прочтение13 мин
Количество просмотров130K

Вступление


Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами. Я собираюсь рассказать столько, сколько возможно, об истории развития Java logging, а также о том, к чему все пришло и как жить дальше.
Вперед и с песней!
Всего голосов 148: ↑146 и ↓2+144
Комментарии89

22 правила повествования от Pixar

Время на прочтение2 мин
Количество просмотров45K
image

Эти правила впервые появились в твитах автора сценариев из Pixar, Эммы Коатс [Emma Coats]. Кстати, правило №9,– если вы застряли, сделайте список того, что не может произойти,- подойдёт для писателей, работающих в любых жанрах.
Читать дальше →
Всего голосов 46: ↑30 и ↓16+14
Комментарии8

Разбор Java программы с помощью java программы

Время на прочтение14 мин
Количество просмотров22K
Разобрались с теорией в публикации «Модификация программы и что лучше менять: исполняемый код или AST программы?». Перейдем к практике, используя Eclipse java compiler API.



Java программа, которая переваривает java программу, начинается с работы над абстрактным синтаксическим деревом (AST)…
Читать дальше →
Всего голосов 20: ↑17 и ↓3+14
Комментарии2

Отладка шейдеров на Java + Groovy

Время на прочтение5 мин
Количество просмотров11K


Подсветка синтаксиса шейдеров. Связь между шейдерами и внешними структурами данных. Юнит-тесты для шейдеров, дебаг, рефакторинг, статический анализ кода, и вообще полная поддержка IDE. О том, как всё это получить, в чём подвох, и что прописать в мавене…
Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии11

Введение в RxJava: Почему Rx?

Время на прочтение3 мин
Количество просмотров194K

Этот цикл статей предназначен для знакомства начинающего реактивного программиста с мощью библиотеки RxJava ˜— реализации принципов реактивного программирования для JVM. Это перевод обширного туториала по RxJava Крисса Фруссиоса, основанного на IntroToRx для Rx.NET.


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


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

Читать дальше →
Всего голосов 35: ↑23 и ↓12+11
Комментарии10

Oracle, типичные задачи SQL. Размножение строк таблицы в зависимости от значения числа в колонке

Время на прочтение3 мин
Количество просмотров43K
image

На носу зима, приближаются морозы, а это значит, что сегодня мы будем мариновать бананы. Для этого нам понадобятся следующие ингредиенты:
ID INGREDIENT MEASURE QUANTITY
1 Банан Штука 3
2 Петрушка Ветка 2
3 Вода Литр 3
4 Соль Ложка 1
5 Уксус Ложка 2
Читать дальше →
Всего голосов 21: ↑18 и ↓3+15
Комментарии14

Модификация программы и что лучше менять: исполняемый код или AST программы?

Время на прочтение11 мин
Количество просмотров15K
Принципы в заметке общие для почти любого языка программирования и системы исполнения, но акцент будет на jvm. Рассмотрим два основных подхода по модификации программы:

  • манипуляции с исполняемым кодом программы после компиляции или во время загрузки кода;
  • изменение исходного кода перед компиляцией.


Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии10

«Чтобы стать хорошим системщиком, нужно 5–10 лет опыта» — интервью с Алексеем Шипилёвым из Java Performance Team

Время на прочтение26 мин
Количество просмотров28K
В преддверии Java-конференции Joker 2015, которая начнется уже завтра, я публикую большое интервью с Алексеем Шипилёвым, инженером команды Java Performance Team из Oracle, одним из самых крутых и известных во всем мире специалистов по производительности. Ну и конечно, прекрасным спикером.

С Алексеем мы подробно поговорили:
  • про грядущие изменения в классе String;
  • про то, кто же на самом деле разрабатывает OpenSource;
  • про системных разработчиков и их карьеру;
  • про обмен технологиями, «научную» и «продуктовую» разработку;
  • про сложность низкоуровневых задач;
  • про развитие Java-сообщества и бенчмарк-войны;
  • про mutable vs immutable;
  • про Unsafe;
  • про JMH, бенчмарки и узкую специализацию.


Вот видео нашего разговора. Больше часа длиной, можно слушать в дороге.



Ниже под катом — расшифровка нашей беседы для тех, кто видео не очень.
Читать дальше →
Всего голосов 56: ↑52 и ↓4+48
Комментарии12

Уязвимости веб-приложений: ситуация не улучшается

Время на прочтение6 мин
Количество просмотров23K


В последние годы крупные организации все активнее используют разнообразные веб-приложения — официальные сайты компаний и системы управления ресурсами предприятий (ERP), электронные торговые площадки, системы дистанционного банковского обслуживания, порталы государственных услуг. Корпоративные приложения на основе специализированного клиентского ПО все чаще заменяются веб-версиями и облачными сервисами. Поэтому неудивительно, что именно уязвимости веб-приложений становятся одним из основных векторов атак на корпоративные информационные системы. В данной статье представлена статистика по наиболее распространенным уязвимостям, собранная экспертами Positive Technologies в процессе работ по анализу защищенности веб-приложений в 2014 году.
Читать дальше →
Всего голосов 17: ↑14 и ↓3+11
Комментарии10

Документация разработчика Hibernate – Глава VI. Кэширование

Время на прочтение7 мин
Количество просмотров34K
Представляю вашему вниманию перевод шестой главы официальной документации Hibernate.

Перевод статьи актуален для версии Hibernate 4.2.19.Final

Предыдущая главаДокументация разработчика Hibernate – Глава V. Блокировки

Что собой представляют кэш первого и второго уровня в Hibernate, показано на следующий диаграмме (прим. автора).

image

6.1. Кэш запросов


Если у вас есть запросы, выполняющиеся снова и снова, с одними и теми же параметрами, кэширование запросов предоставит выигрыш в производительности.

Кэширование вводит дополнительные накладные расходы в области выполнения транзакций. К примеру, если вы кэшируете результаты запроса по отношению к какому-либо объекту, Hibernate необходимо отслеживать, были ли закоммичены какие-либо изменения по объекту, и в соответствии с этим, аннулировать записи в кэше. В дополнение, плюсы от кэширования запросов ограничены, и очень зависят от шаблонов использования вашего приложения. По этим причинам, Hibernate по-умолчанию выключает кэширование запросов.
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии2

Как ABBYY Cloud OCR SDK помогает ловить дешёвые авиабилеты

Время на прочтение4 мин
Количество просмотров17K
Как знают наши постоянные читатели, некоторое время назад у нас появился ABBYY Cloud OCR SDK, сервис распознавания для разработчиков, «облачный брат» ABBYY FineReader Engine. Сервис работает настолько просто, что вашему редактору (тм) редко удаётся уговорить разработчиков написать про него пост на Хабр – технических подробностей не хватает на целую статью. Вот разве что был самый первый пост о бета-тестировании.

Сегодня мы расскажем, как использует сервис один из наших клиентов — Aviasales. Это один из крупнейших поисковиков авиабилетов в мире (на зарубежных рынках компания работает под именем JetRadar), в месяц им пользуется около 10 миллионов человек, а количество поисковых сессий в сутки приближается к миллиону. Уже довольно давно Aviasales, как и любой уважающий себя сервис, выпустил мобильные приложения для поиска и покупки авиабилетов.
Читать дальше →
Всего голосов 38: ↑36 и ↓2+34
Комментарии16

Разграничение прав доступа в Jenkins

Время на прочтение3 мин
Количество просмотров35K
В свое время перерыл много интернета, но подходящего решения найти не удалось. Решил поделиться рецептом решения.

Задача: Организовать доступ к jenkins участникам разных команд разработки, таким образом, чтобы участники одной команды не имели доступа ни к задачам, ни к workspace задач других команд. Т.е. чтобы каждый в рамках своего проекта мог делать в jenkins чего душа пожелает, но не смог даже глазком взглянуть на исходные коды проекта, на которые ему смотреть не положено.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии2

Информация

В рейтинге
1 728-й
Откуда
Luxemburg, Luxembourg, Люксембург
Дата рождения
Зарегистрирован
Активность