Обновить
128K+

Java *

Объектно-ориентированный язык программирования

158,31
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

[Перевод] Когда использовать параллельные stream-ы

Время на прочтение8 мин
Охват и читатели10K
Источник
Авторы: Doug Lea совместно с Brian Goetz, Paul Sandoz, Алексей Шипилёв, Heinz Kabutz, Joe Bowbeer, ...

Фреймворк java.util.streams содержит управляемые данными (data-driven) операции над коллекциями и другими источниками данных. Большинство потоковых (stream) методов выполняют одну и ту же операцию над каждым из элементов. С помощью метода коллекций parallelStream(), при наличии нескольких ядер, data-driven можно превратить в data-parallel. Но когда это стоит делать?

Читать дальше →

Эмуляция литералов свойств с Java 8 Method Reference

Время на прочтение6 мин
Охват и читатели6.6K

От переводчика: к переводу этой статьи меня подтолкнула обида от отсутствия оператора nameOf в языке Java. Для нетерпеливых — в конце статьи есть готовая реализация в исходниках и бинарниках.

Одна из вещей, которой часто не хватает разработчикам библиотек в Java, — литералы свойств. В этом посте я покажу, как можно креативно воспользоваться Method Reference из Java 8 для эмуляции литералов свойств с помощью генерации байт-кода.

Сродни литералам классов (например, Customer.class), литералы свойств позволили бы ссылаться на свойства классов-бинов типобезопасно. Это было бы полезно для дизайна API, где есть необходимость выполнять действия над свойствами или каким-то образом конфигурировать их.

От переводчика: Под катом разбираем как из подручных средств это реализовать.
Читать дальше →

Неочевидная проблема использования assert

Время на прочтение2 мин
Охват и читатели8.7K
Unit-тесты являются важной частью любого достаточно большого проекта. Хочу поделиться с вами небольшой детективной историей, связанной с неочевидным массовым их падением.

Начинается она с того, что в проекте в результате определенного безобидного коммита упало порядка 150 тестов, набор падающих тестов при этом не являлся стабильным. Тесты не были связаны между собой, выполнение тестов происходило последовательно. В качестве источника данных для тестов служит in-memory база данных h2. Падение подавляющего большинства из этих 150 тестов сопровождалось ошибкой в логе: «Cannot get a connection, pool error Timeout waiting for idle object». Следует сказать, что размер пула коннектов при выполнении тестов в проекте равен 1.
Читать дальше →

Мои любимые примеры функционального программирования в языке Kotlin

Время на прочтение5 мин
Охват и читатели31K

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


Мои любимые примеры функционального программирования в языке Kotlin

Читать дальше →

Иконка со счётчиком в верхнем тулбаре: пример разнообразия подходов к одной задаче

Время на прочтение13 мин
Охват и читатели8.8K

В жизни каждого разработчика бывает момент, когда, увидев интересное решение в чужом приложении, хочется реализовать его в своём. Это же логично и должно быть довольно просто. И наверняка заботливые люди из «корпорации добра» написали по этому поводу какой-нибудь гайд или сделали обучающее видео, где на пальцах показано, как вызвать пару нужных методов для достижения желаемого результата. Зачастую бывает именно так.

Но бывает и совсем по-другому: ты видишь реализацию чего-то в каждом втором приложении, а когда доходит до реализации того же у себя — оказывается, что лёгких решений для этого, как ни странно, до сих пор нет…

Так и случилось со мной, когда возникла необходимость добавить в верхнюю панель иконку со счётчиком. Я был очень удивлён, когда выяснилось, что для реализации такого привычного и востребованного элемента UI нет простого решения. Но так бывает, к сожалению. И я решил обратиться к знаниям всемирной сети. Вопрос размещения иконки со счётчиком в верхнем тулбаре, как выяснилось, волновал довольно многих. Проведя на просторах интернета некоторое время, я нашёл массу разных решений. В целом все они рабочие и имеют право на жизнь. Более того, результат моего исследования наглядно показывает, как по-разному можно подойти к решению задач в Android.

В этой статье я расскажу о нескольких реализациях иконки со счётчиком. Здесь представлено 4 примера. Если мыслить чуть шире, то речь пойдёт о практически любом кастомном элементе, который мы хотим разместить в верхнем тулбаре. Итак, начнём.
Читать дальше →

[Javawatch Live] История одного pull request. `os.version` в SubstrateVM

Время на прочтение12 мин
Охват и читатели5.2K
Прошел год с тех пор, как удалась предыдущая выходка: опубликовать вместо поста ролик на YouTube. «Стыдный разговор о синглтонах» набрал 7к просмотров на YouTube и вдвое больше на самом Хабре в текстовой версии. Для статьи, написанной в совершенно упоротом состоянии и рассказывающей о древнейшем баяне — это что-то вроде успеха.

Сегодня я всю ночь монтировал новый выпуск. На этот раз тема куда более свежая: история коммита в экспериментальную технологию — SubstrateVM. А вот градус упоротости поднялся на новый уровень.



Очень жду ваших комментариев! Напоминаю, что если вы хотите действительно что-то улучшить в этом посте, то лучше всего зафайлить ишшую на Github. Хотел бы сказать «ставьте лайки и подписывайтесь на новый канал, но ведь все его выпуски и так будут у вас в хабе Java?

Технически: в видео есть одна склейка ближе к концу. Просто я писал несжатое видео, и мой m2 ssd размером всего в пятьсот гигабайт быстро переполнился. А ни один другой жесткий диск не смог выдержать такого напора данных. Поэтому пришлось отключиться на полчаса и изголившись найти дополнительные пятьдесят гигов на запись последних нескольких минут. Это было достигнуто удалением файлов собранного GoogleChrome. Мнение о записывающем софте отписал в ФБ прямо в момент записи, там очень много боли.

Ещё из технически интересного: YouTube почему-то заблокировало мне live streaming. При этом на аккаунте нет ни единого страйка и клейма. Будем надеяться, что это просто косяк, и через 90 дней всё вернут назад.
Текстовая расшифровка хаброкаста

Как предотвратить перерасход памяти при использовании Java-коллекций

Время на прочтение7 мин
Охват и читатели14K
Всем привет!

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

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

Поехали!

Читать дальше →

История тестирования проекта «К»: Kotlin&Spek

Время на прочтение11 мин
Охват и читатели4.8K
Привет, Хабр!

В этой статье мы поговорим об автоматическом тестировании на одном из многочисленных проектов QIWI, получившим кодовое название «К».



Когда мы организовывали тестирование это проекта, то решили выбрать практичный и хайповый Kotlin, а также Spek, гласящий «Вы называете их тестами, мы называем их спецификациями» (You call them tests, we call them specifications). Возможно, такой подход подойдет и вам, если вы столкнетесь с похожими задачами.

Почему Kotlin, а не что-то еще? Kotlin был выбран разработкой, поэкспериментировать, так как конкретно этот продукт не был критичным, и можно было вживую потренироваться на нём, не опасаясь, что будут проблемы.

Официальная документация говорит нам, что «Spek написан на Kotlin, и спецификации, которые вы пишете, будут написаны на Kotlin» – это очень ясно отвечает на вопрос: «Зачем это нужно?».

Итак…

Что это и зачем это нужно?

Читать дальше →

[Перевод] Как работает Graal — JIT-компилятор JVM на Java

Время на прочтение24 мин
Охват и читатели23K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Understanding How Graal Works — a Java JIT Compiler Written in Java".


Введение


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


В этом выступлении я покажу некоторые механизмы работы используемого всеми вами языка — Java. Особенностью является то, что я буду использовать проект под названием Graal, который реализует концепцию Java на Java.

Читать дальше →

UI-автотесты: как делать не стоит

Время на прочтение11 мин
Охват и читатели82K
Здравствуй, Хабр. Меня зовут Виталий Котов, я работаю в отделе тестирования компании Badoo. Я пишу много UI-автотестов, но ещё больше работаю с теми, кто занимается этим не так давно и ещё не успел наступить на все грабли.

Итак, сложив свой собственный опыт и наблюдения за другими ребятами, я решил подготовить для вас коллекцию того, «как писать тесты не стоит». Каждый пример я подкрепил подробным описанием, примерами кода и скриншотами.

Статья будет интересна начинающим авторам UI-тестов, но и старожилы в этой теме наверняка узнают что-то новое, либо просто улыбнутся, вспомнив себя «в молодости». :)

Поехали!



Читать дальше →

Объяснение лямбда-выражений

Время на прочтение3 мин
Охват и читатели21K

Объяснение лямбда-выражений


У меня возникли вопросы о лямбда-выражениях и RxJava. Эти вопросы в основном касаются не полного понимания лямбда-выражений или RxJava. Я попытаюсь объяснить лямбда-выражения как можно проще. RxJava я опишу отдельно.

Читать дальше →

Книга «Алгоритмы и структуры данных. Извлечение информации на языке Java»

Время на прочтение10 мин
Охват и читатели15K
image Привет, Хабр! Изучите, как следует реализовывать эффективные алгоритмы на основе важнейших структур данных на языке Java, а также как измерять производительность этих алгоритмов. Каждая глава сопровождается упражнениями, помогающими закрепить материал.

  • Научитесь работать со структурами данных, например, со списками и словарями, разберитесь, как они работают.
  • Напишите приложение, которое читает страницы Википедии, выполняет синтаксический разбор и обеспечивает навигацию по полученному дереву данных.
  • Анализируйте код и учитесь прогнозировать, как быстро он будет работать и сколько памяти при этом потреблять.
  • Пишите классы, реализующие интерфейс Map, пользуйтесь при этом хеш-таблицей и двоичным деревом поиска.
  • Создайте простой веб-поисковик с собственным поисковым роботом: он будет индексировать веб-страницы, сохранять их содержимое и возвращать нужные результаты.
Читать дальше →

Интерфейсы командной строки Java: picocli

Время на прочтение6 мин
Охват и читатели11K
Всем привет!

Очередной старт группы «Разработчик Java», на котором мы всё продолжаем наш эксперимент того, что процесс обучения не обязан быть непрерывным («Контрамоция должна быть непрерывной?» ). То есть мы чуть переработали и перетасовали программу, и разбили её на три ступени, которые можно спокойно проходить с перерывом между ними. В общем интересно и для студентов, и для нас, лишь бы никто не расхолаживался, а то программа стала даже вроде чуть сложнее, хотя и была непростой до этого. Ну и традиционно интересная статья связанная с нашим курсом.

Поехали!

Читать дальше →

Ближайшие события

Как мы сделали мобильное приложение для шести стран

Время на прочтение4 мин
Охват и читатели4.3K
Флагманский проект ID Finance – это онлайн-сервис альтернативного кредитования MoneyMan. Он работает в семи странах – Польше, Испании, Мексике, Бразилии, Грузии, Казахстане и России. Когда мы только запускали его в России в 2015 г., мы не могли обойти стороной мобильные платформы: доля пользователей смартфонов среди россиян составляла 67% от общего числа пользователей мобильных телефонов. Как показало внутренне исследование, 80% клиентов пользовались смартфонами на платформе Android, выбор платформы для разработки первого приложения стал очевиден

image

Читать дальше →

Власть, деньги и open source. Рассказываем, как работает сообщество на примере Apache Ignite

Время на прочтение10 мин
Охват и читатели9.9K


На последней встрече сообщества Apache Ignite в Москве я рассказывал про:

  • Open source-сообщество;
  • Власть и деньги в open source;
  • Как стать контрибьютором и коммитером, и зачем это нужно.

Ограниченное время доклада не позволило привести больше примеров, поэтому расширенную версию выкладываю на Хабре. Всё изложенное основано на моем личном опыте и не является официальной позицией какой-либо компании или организации.
Читать дальше →

Чистая прагматичная архитектура. Мозговой штурм

Время на прочтение25 мин
Охват и читатели28K
Закрадывалась ли вам в голову идея переписать своё жирное энтерпрайзное приложение с нуля? Если с нуля, то это ж ого-го. Как минимум кода будет раза в два меньше, верно? Но ведь пройдёт пара лет, и оно тоже обрастёт, станет легаси… времени и денег на переписывание не так много, чтобы делать идеально.

Успокойтесь, начальство всё равно не даст ничего переписать. Остаётся рефакторить. На что лучше всего потратить свои невеликие ресурсы? Как именно рефакторить, где проводить чистки?

Название этой статьи — в том числе отсылка к книге Дяди Боба «Чистая Архитектура», а сделана она на основе замечательного доклада Victor Rentea (твиттер, сайт) на JPoint (под катом он начнёт говорить от первого лица, но пока дочитайте вводную). Чтения умных книжек эта статья не заменит, но для такого короткого описания изложено весьма хорошо.

Идея в том, что популярные в народе вещи вроде «Clean Architecture» действительно являются полезными. Сюрприз. Если нужно решить вполне конкретную задачу, простой изящный код не требует сверхусилий и оверинжиниринга. Чистая архитектура говорит, что нужно защищать свою доменную модель от внешних эффектов, и подсказывает, как именно это можно сделать. Эволюционный подход к наращиванию объема микросервисов. Тесты, которые делают рефакторинг менее страшным. Вы ведь уже знаете всё это? Или знаете, но боитесь даже подумать об этом, ведь это же ужас что тогда делать придётся?

Кто хочет получить волшебную анти-прокрастинационную таблетку, которая поможет перестать трястись и начать рефакторить — добро пожаловать на видеозапись доклада или под кат.



Читать дальше →

Реальный вклад в реальный Open Source

Время на прочтение2 мин
Охват и читатели6.2K
Недавний пост о том как мы в Сбербанк-Технологиях разрабатываем Open Source раскрыл множество интересных подробностей о подходах, стремлениях и идеологии.

Сегодня я хочу рассказать о том реальном вкладе, который наша команда вносит в Open Source.


Читать дальше →

[Анонс, Питер] Встреча JUG.ru с Андреем Беляевым и Алексеем Стукаловым —Тролль гнёт CUBA: F.A.Q

Время на прочтение2 мин
Охват и читатели1.7K

В четверг, 9 августа, в петербургском офисе компании Oracle пройдет встреча JUG.ru с Андреем Беляевым и Алексеем Стукаловым — инженерами самарской компании Haulmont. Тема встречи: F.A.Q. по CUBA.platform — высокоуровневой Java-платформе для создания корпоративных информационных систем.


CUBA Platform — Java-фреймворк с открытым исходным кодом для быстрой разработки корпоративных приложений, созданный самарской компанией Haulmont и используемый по всему миру.


Читать дальше →

InlineKeyboard в Телеграмм ботах (Telegram Bots)

Время на прочтение6 мин
Охват и читатели162K
InlineKeyboard — клавиатура привязанная к сообщению, изпользующая обратный вызов (CallbackQuery), вместо отправки сообщения с обыкновенной клавиатуры.
Читать дальше →

«Здесь нет начальника»: о работе с Open Source и Apache Ignite в Сбербанк-Технологиях

Время на прочтение14 мин
Охват и читатели14K
При словах «open source» многим представляются либо энтузиаст, коммитящий по вечерам в любимый проект, либо небольшая компания, зарабатывающая поддержкой открытого продукта. Но если задумываться только о них, то упустишь важный и интересный сегмент сообщества. Когда-то слова «энтерпрайз» и «open source» казались антонимами, а теперь крупные корпорации не только активно используют OSS-проекты, но и сами контрибьютят в них.

Сбертех со временем всё активнее проявляет себя в OSS-сообществе, и мы решили расспросить их об этом. Как сочетаются строгая банковская специфика с опенсорсным духом свободы? Какие возникают требования к Open Source, которых может не быть у других компаний? Есть ли в Сбертехе сотрудники, которые в качестве основных рабочих задач пишут открытый код? Каковы планы и желания на будущее?  Антон Чураев, курирующий направление Free&Open Source, рассказал нам обо всём этом и не только.


Читать дальше →