Java developer
JSR 133 (Java Memory Model) FAQ (перевод)
В рамках набора на курс «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» проблему?
Что если я пишу виртуальную машину?
Почему я должен беспокоиться?
Введение в RxJava: Жизненный цикл подписки
![image](https://habrastorage.org/files/d29/234/42c/d2923442c6d54c8e9e6b517d73ff978f.png)
Одна из главных идей, лежащих в основе Rx, заключается в том, что неизвестно когда именно последовательность выдаст новое значение или завершится. Однако, у нас есть возможность управлять временем в которое мы начнем или закончим получать эти значения. К тому же, если наши подписчики используют внешние ресурсы, то мы вероятно захотим освободить их по окончанию некой последовательности.
Конкурс по программированию на JS: Почтовые фильтры
Компания Hola снова объявляет конкурс по программированию на JS с солидным призовым фондом:
- Первое место: 1500 USD
- Второе место: 1000 USD
- Третье место: 500 USD
- Возможно, мы решим отметить чьё-то чрезвычайно оригинальное решение специальным призом в 350 USD.
- Если Вы отправите кому-то ссылку на этот конкурс, поставив наш адрес в CC, и этот человек займёт призовое место, Вы получите такую же сумму, как и он.
Мы ищем талантливых программистов, поэтому авторы интересных решений будут приглашены на собеседования.
![](https://habrastorage.org/files/fd5/99c/da2/fd599cda29ff4f8090af1e6f43523c27.jpg)
Правила
Некоторые из тех, кто помнит наши предыдущие конкурсы, были недовольны тем, что условия задач были сформулированы нечётко, и от участника требовалось «угадать», что мы имели в виду. На этот раз условие сформулировано предельно однозначно, а в распоряжении участников — эталонная реализация решения. Победит тот, чей код будет самым быстрым при условии прохождения тестов на корректность.
Условия конкурса на английском языке размещены на нашем сайте. Ниже — перевод на русский язык.
Подборка бесплатных инструментов для разработчиков
![](https://habrastorage.org/files/f00/304/501/f003045017d642bba80d4999a84b033f.jpg)
Big data от А до Я. Часть 3: Приемы и стратегии разработки MapReduce-приложений
![](https://habrastorage.org/files/375/fbc/7d5/375fbc7d5b104495a442e37638dddec1.jpg)
Высоконагруженное приложение на java
Платформа JEE
Конечно на стандартной java ваше приложение будет работать быстрее, потреблять меньше памяти, и вы можете сделать архитектуру именно такой, как вам нужно. Но это при том условии, что у вас неограниченное количество человеко-часов, и вы каждый день пишете такую ерунду как приложение на 100к клиентов. В противном случае для этого потребуется очень много времени и итераций, и в итоге все равно получиться чуточку хуже, чем то, как это реализовано в современных JEE серверах. Все промахи всплывут только под реальной нагрузкой, и архитектуру приложения придется переделывать не один раз.
Java Logging: история кошмара
Вступление
Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами. Я собираюсь рассказать столько, сколько возможно, об истории развития Java logging, а также о том, к чему все пришло и как жить дальше.
22 правила повествования от Pixar
![image](https://habrastorage.org/getpro/habr/post_images/4ab/7a1/f57/4ab7a1f57475777a88f2749ab4d9aede.jpg)
Эти правила впервые появились в твитах автора сценариев из Pixar, Эммы Коатс [Emma Coats]. Кстати, правило №9,– если вы застряли, сделайте список того, что не может произойти,- подойдёт для писателей, работающих в любых жанрах.
Разбор Java программы с помощью java программы
![](https://habrastorage.org/files/a24/d35/d88/a24d35d88a8d48b1834172661d8255c2.jpg)
Java программа, которая переваривает java программу, начинается с работы над абстрактным синтаксическим деревом (AST)…
Отладка шейдеров на Java + Groovy
![](https://habrastorage.org/files/602/ce8/00a/602ce800a93f4c2bb090f0b42a12259a.png)
Подсветка синтаксиса шейдеров. Связь между шейдерами и внешними структурами данных. Юнит-тесты для шейдеров, дебаг, рефакторинг, статический анализ кода, и вообще полная поддержка IDE. О том, как всё это получить, в чём подвох, и что прописать в мавене…
Введение в RxJava: Почему Rx?
Этот цикл статей предназначен для знакомства начинающего реактивного программиста с мощью библиотеки RxJava — реализации принципов реактивного программирования для JVM. Это перевод обширного туториала по RxJava Крисса Фруссиоса, основанного на IntroToRx для Rx.NET.
Для следования этой обучающей программе от вас не потребуются знания реактивного или функционального программирования, однако, предполагается наличие базовых знаний Java.
Материал этих статей расчитан на прочтение от начала до конца. Его обьем больше, чем среднего туториала, но меньше чем реальной книги. Мы начнем с самых основ и от раздела к разделу будем переходить к всё более продвинутым сценариям и концепциям. Каждый раздел задумывался самодостаточным и лаконичным для того, чтобы к нему можно было вернуться в будущем.
Oracle, типичные задачи SQL. Размножение строк таблицы в зависимости от значения числа в колонке
![image](https://habrastorage.org/files/b9c/a97/233/b9ca97233c7e4ad987936449fea05bea.jpg)
На носу зима, приближаются морозы, а это значит, что сегодня мы будем мариновать бананы. Для этого нам понадобятся следующие ингредиенты:
ID | INGREDIENT | MEASURE | QUANTITY |
---|---|---|---|
1 | Банан | Штука | 3 |
2 | Петрушка | Ветка | 2 |
3 | Вода | Литр | 3 |
4 | Соль | Ложка | 1 |
5 | Уксус | Ложка | 2 |
Модификация программы и что лучше менять: исполняемый код или AST программы?
- манипуляции с исполняемым кодом программы после компиляции или во время загрузки кода;
- изменение исходного кода перед компиляцией.
![](https://habrastorage.org/files/b41/afe/133/b41afe133ab646b48568f7b25d0f875c.jpg)
«Чтобы стать хорошим системщиком, нужно 5–10 лет опыта» — интервью с Алексеем Шипилёвым из Java Performance Team
С Алексеем мы подробно поговорили:
- про грядущие изменения в классе String;
- про то, кто же на самом деле разрабатывает OpenSource;
- про системных разработчиков и их карьеру;
- про обмен технологиями, «научную» и «продуктовую» разработку;
- про сложность низкоуровневых задач;
- про развитие Java-сообщества и бенчмарк-войны;
- про mutable vs immutable;
- про Unsafe;
- про JMH, бенчмарки и узкую специализацию.
Вот видео нашего разговора. Больше часа длиной, можно слушать в дороге.
Ниже под катом — расшифровка нашей беседы для тех, кто видео не очень.
Уязвимости веб-приложений: ситуация не улучшается
![](https://habrastorage.org/files/382/09d/12b/38209d12ba3e452d957b104800621e43.jpg)
В последние годы крупные организации все активнее используют разнообразные веб-приложения — официальные сайты компаний и системы управления ресурсами предприятий (ERP), электронные торговые площадки, системы дистанционного банковского обслуживания, порталы государственных услуг. Корпоративные приложения на основе специализированного клиентского ПО все чаще заменяются веб-версиями и облачными сервисами. Поэтому неудивительно, что именно уязвимости веб-приложений становятся одним из основных векторов атак на корпоративные информационные системы. В данной статье представлена статистика по наиболее распространенным уязвимостям, собранная экспертами Positive Technologies в процессе работ по анализу защищенности веб-приложений в 2014 году.
Документация разработчика Hibernate – Глава VI. Кэширование
Перевод статьи актуален для версии Hibernate 4.2.19.Final
Предыдущая глава — Документация разработчика Hibernate – Глава V. Блокировки
Что собой представляют кэш первого и второго уровня в Hibernate, показано на следующий диаграмме (прим. автора).
![image](https://habrastorage.org/getpro/habr/post_images/0f9/618/0aa/0f96180aa21a8a39665c3b3ad3bd2a31.jpg)
6.1. Кэш запросов
Если у вас есть запросы, выполняющиеся снова и снова, с одними и теми же параметрами, кэширование запросов предоставит выигрыш в производительности.
Кэширование вводит дополнительные накладные расходы в области выполнения транзакций. К примеру, если вы кэшируете результаты запроса по отношению к какому-либо объекту, Hibernate необходимо отслеживать, были ли закоммичены какие-либо изменения по объекту, и в соответствии с этим, аннулировать записи в кэше. В дополнение, плюсы от кэширования запросов ограничены, и очень зависят от шаблонов использования вашего приложения. По этим причинам, Hibernate по-умолчанию выключает кэширование запросов.
Как ABBYY Cloud OCR SDK помогает ловить дешёвые авиабилеты
![](https://habrastorage.org/files/b69/850/aa2/b69850aa2e4b41b3baf7d4e9d6170f1e.jpg)
Сегодня мы расскажем, как использует сервис один из наших клиентов — Aviasales. Это один из крупнейших поисковиков авиабилетов в мире (на зарубежных рынках компания работает под именем JetRadar), в месяц им пользуется около 10 миллионов человек, а количество поисковых сессий в сутки приближается к миллиону. Уже довольно давно Aviasales
Разграничение прав доступа в Jenkins
Задача: Организовать доступ к jenkins участникам разных команд разработки, таким образом, чтобы участники одной команды не имели доступа ни к задачам, ни к workspace задач других команд. Т.е. чтобы каждый в рамках своего проекта мог делать в jenkins чего душа пожелает, но не смог даже глазком взглянуть на исходные коды проекта, на которые ему смотреть не положено.
Информация
- В рейтинге
- 1 728-й
- Откуда
- Luxemburg, Luxembourg, Люксембург
- Дата рождения
- Зарегистрирован
- Активность