Чашечка Java
Открыть в Telegram
Лучшие материалы по Java на русском и английском Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels
Больше8 305
Подписчики
Нет данных24 часа
-227 дней
-6530 дней
Архив постов
8 305
Как мы спасали код-ревью
Я ведущий Java-разработчик в Яндекс.Деньгах.
Каждое рабочее утро в 2018 году меня встречали около 30 пулл-реквестов, ожидающих ревью, а у меня не хватало времени разобрать их все за день. В конце лета я ушел в отпуск, а когда вернулся, обнаружил очередь из 50 PR, назначенных на меня. Разгребать их не было никакого желания, а ведь это была лишь вершина айсберга, которую я видел своими глазами. В тот день я и решил, что пора что-то изменить.
Это история о том, как мы ускорили код-ревью, разгрузили ведущих разработчиков и улучшили инструменты, которыми пользуемся каждый день.
Читать: https://habr.com/ru/companies/yoomoney/articles/446654/?utm_campaign=446654
@a_cup_of_java | Другие наши каналы
8 305
Как мы реализовали непрерывную доставку обновлений на платформу заказчика
Мы в True Engineering настроили процесс непрерывной доставки обновлений на сервера заказчика и хотим поделиться этим опытом.
Для начала мы разработали онлайн систему для заказчика и развернули её в собственном кластере Kubernetes. Теперь наше высоконагруженное решение переехало на платформу заказчика, для чего мы настроили полностью автоматический процесс Continuous Deployment. Благодаря этому, мы ускорили time-to-market – доставку изменений в продуктовую среду.
В этой статье мы расскажем обо всех этапах процесса Continuous Deployment (CD) или доставки обновлений на платформу заказчика:
1. как стартует этот процесс,
2. синхронизация с Git-репозиторием заказчика,
3. сборка бекенда и фронтенда,
4. автоматическое развертывание приложения в тестовой среде,
5. автоматическое развертывание на Prod.
В процессе поделимся деталями настройки.
Читать: https://habr.com/ru/companies/true_engineering/articles/447812/?utm_campaign=447812
@a_cup_of_java | Другие наши каналы
8 305
Иллюзия иммутабельности и доверие как основа командной разработки
Вообще я C++ программист. Ну так получилось. Подавляющее большинство коммерческого кода, который я написал за свою карьеру, — это именно C++. Мне не очень нравится такой сильный перекос моего личного опыта в сторону одного языка, и я стараюсь не упускать возможности написать что-нибудь на другом языке. И мой текущий работодатель внезапно такую возможность предоставил: я взялся сделать одну не самую тривиальную утилиту на Java. Выбор языка реализации был сделан по историческим причинам, да я и не возражал. Java так Java, чем менее мне знакомо — тем лучше.
Помимо прочего возникла у меня довольно простая задача: единожды сформировать некий набор логически связанных данных и передать его некоему потребителю. Потребителей может быть несколько, и согласно принципу инкапсуляции передающий код (производитель) понятия не имеет, что там внутри и что оно может сделать с исходными данными. Но производителю надо, чтобы каждый потребитель получил одни и те же данные. Делать копии и отдавать их мне не хотелось. Значит, надо как-то лишить потребителей возможности изменять переданные им данные.
Читать: https://habr.com/ru/articles/447478/?utm_campaign=447478
@a_cup_of_java | Другие наши каналы
8 305
Reaktive — мультиплатформенная библиотека для реактивного Kotlin
Многие сегодня любят реактивное программирование. В нём масса плюсов: и отсутствие так называемого "callback hell", и встроенный механизм обработки ошибок, и функциональный стиль программирования, который уменьшает вероятность багов. Значительно проще писать многопоточный код и легче управлять потоками данных (объединять, разделять и преобразовывать).
Для многих языков программирования существует своя реактивная библиотека: RxJava для JVM, RxJS — для JavaScript, RxSwift — для iOS, Rx.NET и т. д.
Но что мы имеем для Kotlin? Было бы логично предположить, что RxKotlin. И, действительно, такая библиотека существует, но это всего лишь набор расширений (extensions) для RxJava2, так называемый «сахар».
А в идеале хотелось бы иметь решение, соответствующее следующим критериям:
* мультиплатформенность — чтобы иметь возможность писать мультиплатформенные библиотеки с использованием реактивного программирования и распространять их внутри компании;
* Null safety — система типов Kotlin защищает нас от «ошибки на миллиард долларов», так что значения null должны быть допустимы (например,
Observable<string?);
* ковариантность и контравариантность — ещё одна очень полезная особенность Kotlin, дающая возможность, например, безопасно привести тип Observable<string к Observable<charsequence.
Мы в Badoo решили не ждать у моря погоды и сделали такую библиотеку. Как вы уже могли догадаться, назвали мы её Reaktive и выложили на GitHub.
В этой статье мы подробнее рассмотрим ожидания от реактивного программирования на Kotlin и увидим, насколько им соответствуют возможности Reaktive.
Читать: https://habr.com/ru/companies/badoo/articles/447424/?utm_campaign=447424
@a_cup_of_java | Другие наши каналы8 305
Как мы делали облачный FaaS внутри Kubernetes и побеждали в Тинькофф-хакатоне
Начиная с прошлого года у нас в компании начали организовывать хакатоны. Первое такое состязание прошло весьма успешно, о нем мы писали в статье. Второй хакатон прошел в феврале 2019 и был не менее успешным. О целях проведения последнего не так давно писал организатор.
Участникам поставили довольно интересную задачу с полной свободой в выборе стека технологий для ее реализации. Было необходимо реализовать платформу принятия решений для удобного деплоя функций скоринга клиентов, которые бы могли работать на быстром потоке заявок, выдерживали большие нагрузки, а сама система — легко масштабировалась.
Задача нетривиальная и может быть решена множеством способов, в чем мы убедились на демонстрации финальных презентаций проектов участников. На хакатоне было 6 команд по 5 человек, у всех участников были хорошие проекты, но наша платформа оказалась наиболее конкурентоспособной. У нас получился очень интересный проект, о котором я хотел бы рассказать в данной статье.
Читать: https://habr.com/ru/companies/tbank/articles/446616/?utm_campaign=446616
@a_cup_of_java | Другие наши каналы
8 305
CUBA 7: что нового?
Три года назад мы объявили о выходе CUBA 6. Та версия стала революционной: вместо закрытой проприетарной лицензии мы стали распространять фреймворк свободно, по лицензии Apache 2.0. В то время мы не могли даже и близко представить, насколько это отразится на развитии фреймворка в долгосрочной перспективе. Сообщество CUBA стало расти в геометрической прогрессии, и мы столкнулись со всеми возможными (а иногда и невозможными) способами применения фреймворка. Сейчас мы представляем вашему вниманию CUBA 7. Надеемся, что эта версия сделает разработку ещё проще и приятнее для всех членов сообщества: от начинающих, которые только познакомились с CUBA и Java, до опытных разработчиков, за плечами которых не один завершенный проект уровня большой компании.
Читать: https://habr.com/ru/companies/haulmont/articles/447538/?utm_campaign=447538
@a_cup_of_java | Другие наши каналы
8 305
RBKmoney Payments под капотом — логика работы платежной платформы
Привет, Хабр! Продолжаю публикацию цикла про внутренности платежной платформы RBK.money, начатую в этом посте. Сегодня речь пойдет про логическую схему процессинга, конкретные микросервисы и их взаимосвязь друг с другом, как логически разделены сервисы, обрабатывающие каждый свой кусок бизнес-логики, почему ядро процессинга ничего не знает про номера ваших платежных карт и как внутри платформы бегают платежи. Также, чуть более подробно раскрою тему о том, как мы обеспечиваем высокую доступность и масштабирование для обработки высокой нагрузки.
Читать: https://habr.com/ru/companies/osnova/articles/447440/?utm_campaign=447440
@a_cup_of_java | Другие наши каналы
8 305
Помоги Дюку найти выход
Всем привет! Для каждой конференции по Java мы придумываем игру, чтобы любой желающий мог весело провести время на нашем стенде. На конференции Joker 2018 мы предлагали участникам вывести Дюка из лабиринта, подробную статью про игру прошлого года можно прочитать тут. В этом году мы продолжили традицию и сделали игру, где отвечая на вопросы по Java, нужно помочь Дюку найти спрятанный выход.
Читать: https://habr.com/ru/companies/odnoklassniki/articles/447252/?utm_campaign=447252
@a_cup_of_java | Другие наши каналы
8 305
With love from Stepik: образовательная платформа Hyperskill
Я хочу поговорить с вами о том, почему мы чаще чиним сантехнику, чем пишем про неё диссертации, о разных подходах к обучению программированию и о том, как мы пробуем применить один из них в нашем новом продукте Hyperskill.
Если вам не по душе длинные вступления, то переходите сразу к параграфу про программирование. Но так будет менее весело.
Читать: https://habr.com/ru/companies/stepic/articles/447434/?utm_campaign=447434
@a_cup_of_java | Другие наши каналы
8 305
IntelliJ IDEA 2019.1: Кастомизация тем интерфейса, switch-выражения из Java 12, отладка внутри Docker-контейнеров
Это – обзор нового в IntelliJ IDEA 2019.1. Ссылки в заголовках ведут на соотвествующие разделы на сайте, где всё описано детально, но на английском.
Читать: https://habr.com/ru/companies/JetBrains/articles/447430/?utm_campaign=447430
@a_cup_of_java | Другие наши каналы
8 305
Исключения в Kotlin и их особенности
Наша компания уже более двух лет использует Kotlin в продакшене. Лично я с этим языком столкнулся около года назад. Тут есть много тем для разговора, но сегодня поговорим об обработке ошибок, в том числе в функциональном стиле. Расскажу, как это можно делать в Kotlin.
(Фото с митапа по этой теме, проходившего в офисе одной из компаний Таганрога. Выступал Алексей Шафранов — лидер рабочей группы (Java) в «Максилект»)
Читать: https://habr.com/ru/companies/maxilect/articles/447380/?utm_campaign=447380
@a_cup_of_java | Другие наши каналы
8 305
Разбор задач JPoint 2019
Всем привет!
Закончилась одна из самых хардкорных конференций по Java – JPoint 2019, она проходила в седьмой раз и как всегда побила рекорд по посещаемости, в этот раз мероприятие привлекло более 1700 специалистов в области Java-разработки.
«Одноклассники» принимали участие во всех конференциях JPoint. Начиная с 2013 мы активно поддерживаем JPoint и на своих стендах устраиваем для участников различные активности по проверке знаний Java. В этом году у нас были знаменитые «нерешаемые» задачи от ведущих разработчиков OK.ru. Участники конференции, правильно ответившие на вопросы, получили призы.
Справедливости ради надо сказать, что из 600 листочков с задачами, которые мы раздали, обратно было получено менее 100, средний балл равен примерно 0.25.
Лучшим оказалось решение, набравшее 4 балла из 5 возможных.
Мы публикуем задачи и их решения, чтобы вы смогли проверить свои силы.
Читать: https://habr.com/ru/companies/odnoklassniki/articles/447218/?utm_campaign=447218
@a_cup_of_java | Другие наши каналы
8 305
(Не)официальное приложение Хабра — HabrApp 2.0: получение доступа
Одним томным и уже порядком надоевшим вечером, я, листая официальное приложение хабра, в который раз загибал пальцы, по одному за каждую нерабочую фичу. Тут, например, нельзя прокомментировать, здесь отказывают в праве голоса, и вообще, почему не видно формул на экране?
Было решено: нужно что-то удобное, приятное, своё. Что насчёт своего приложения для Хабра?
Читать: https://habr.com/ru/articles/447148/?utm_campaign=447148
@a_cup_of_java | Другие наши каналы
8 305
Не заставляйте слушателей рефлексировать
Введение
В процессе разработки очень часто возникает необходимость создать экземпляр класса, имя которого хранится в конфигурационном XML файле, или вызвать метод, название которого написано в виде строки как значение атрибута аннотации. В таких случаях ответ один: “Используй reflection!”.
В новой версии CUBA Platform одной из задач по улучшению фреймворка было избавление от явного создания обработчиков событий в классах-контроллерах UI экранов. В предыдущих версиях объявления обработчиков в методе инициализации контроллера очень захламляли код, так что в седьмой версии мы решительно намерились все оттуда вычистить.
Читать: https://habr.com/ru/companies/haulmont/articles/447022/?utm_campaign=447022
@a_cup_of_java | Другие наши каналы
8 305
Как я Scala учил
Месяца назад я получил свою первую работу и стал стажер-разработчиком, наша команда использует язык Scala. Мне кажется, все начинающие разработчики в первый день потерянные. одновременно наваливается куча новых имен, технологий, каких-то правил, да и мало ли что еще, абсолютно все для тебя ново, это же первая работа. В моем же случае я еще и не знал языка, на котором буду программировать, до момента собеседования я даже никогда о нем не слышал. Итог: в первый день я был в полном ауте. Спросите как тогда я вообще получил эту работу? Я знал Java, на собеседовании мне сказали что джависту перейти на скалу будет достаточно легко и можно не переживать. Но видимо чуть-чуть попереживать все же стоило, потому что первое время перед собой я видел просто экраны, заполненные текстом, в которых сходу была ясна едва ли половина.
Но больше дискомфорта приносило даже не то, что я чего-то не понимал, а то что там многое по-другому, да даже тип переменной идет после названия, а порой его вообще нет.
final String str = "abc"; //Java
val str = "abc" // Scala
Читать: https://habr.com/ru/articles/446988/?utm_campaign=446988
@a_cup_of_java | Другие наши каналы8 305
Трассировка сервисов, OpenTracing и Jaeger
В наших проектах мы используем микросервисную архитектуру. При возникновении узких мест в производительности достаточно много времени тратится на мониторинг и разбор логов. При логировании таймингов отдельных операций в лог-файл, как правило, сложно понять что привело к вызову этих операций, отследить последовательность действий или смещение во времени одной операции относительно другой в разных сервисах.
Для минимизации ручного труда мы решили воспользоваться одним из инструментов трассировки. О том, как и для чего можно использовать трассировку и как это делали мы, и пойдет речь в этой статье.
Читать: https://habr.com/ru/companies/srg/articles/446752/?utm_campaign=446752
@a_cup_of_java | Другие наши каналы
8 305
Криптография в Java. Класс Certificate
Привет, Хабр! Представляю вашему вниманию перевод заключительной статьи "Java Certificate" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.
Читать: https://habr.com/ru/articles/446888/?utm_campaign=446888
@a_cup_of_java | Другие наши каналы
8 305
39 новых фич, которые будут доступны в Java 12
Из замечательного интервью на Хабре: «Саймон Риттер — человек, который работал над Java с самого начала и продолжает делать это в роли заместителя технического директора Azul — компании, работающей над виртуальной машиной Zing JVM и одним из лучших сборщиков мусора, C4 (Continuously Concurrent Compacting Collector)»
Ниже — перевод его статьи о новых фичах JDK 12 и некоторых трудностях, с которыми вы можете столкнуться мигрируя на новую сборку.
Я написал несколько постов в блоге, в которых перечислены все изменения для каждого из последних выпусков Java (JDK 10, JDK 11). Сейчас я рассмотрю темную сторону JDK 12, сосредоточив внимание на некоторых подводных камнях, которые могут вызвать проблемы если вы захотите перенести приложение на эту версию.
Читать: https://habr.com/ru/articles/446590/?utm_campaign=446590
@a_cup_of_java | Другие наши каналы
8 305
Эволюция H2 — оконные функции, CTE, JSON/XML во встраиваемой базе данных
Есть open source проекты которые стали коммерчески успешным мейнстримом, как например PostgreSQL/Elasticsearch. Другие, к примеру RethinkDB, проиграли на рынке и остановили разработку. А проект H2 database встраиваемой базы данных, написанной на языке java, развивается и здравствует в своей нише.
Для демонстрации функционала SonarQube, Jira, Confluence при первом запуске используют H2 database. H2 является базой для запуска SQL тестов в памяти, почти в любом JVM проекте. Есть пример применения менее известный пользователям — это использование H2 в распределенном ignite-sql и это уже production ready сценарий использования встраиваемой базы данных как части другого решения. Меньше месяца назад вышла версия 1.4.199 в которой теперь можно писать достаточно сложные SQL запросы.
Читать: https://habr.com/ru/articles/446380/?utm_campaign=446380
@a_cup_of_java | Другие наши каналы
8 305
Как вы можете сделать Java лучше
Многие люди жалуются, что в Java чего-то не хватает, что-то глючит или медленно работает. Хорошая новость: у вас есть возможность не жаловаться, а своими силами сделать Java лучше. Java практически полностью открыта в виде проекта OpenJDK. У этого проекта есть свои особенности, но в целом вам ничего не мешает самим сообщать о проблемах, исправлять их и даже разрабатывать новую функциональность. В этой статье я немного расскажу, как это делать новичку.
Читать: https://habr.com/ru/articles/209876/?utm_campaign=209876
@a_cup_of_java | Другие наши каналы
