Обновить
128K+

Java *

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

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

Thrift в качестве REST API

Время на прочтение7 мин
Охват и читатели27K
Небольшая статья о том, как мы столкнулись с проблемами синхронизации работы между командами клиентской и серверной разработки. Как мы подключили Thrift для того, чтобы упростить взаимодействие между нашими командами.

Кому интересно, как мы это сделали, и какие «побочные» эффекты мы словили, прошу заглянуть под кат.
Читать дальше →

Go to GOTO

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

Привет, Хабр! Меня зовут Григорий Кузовников. Я работаю Senior Backend Engineer в компании FunCorp. Недавно я начал заниматься машинным обучением. Спросить что-то напрямую не у кого, приходится всё искать в интернете. Поэтому хотелось сходить на какую-нибудь профильную конференцию и послушать, как вообще использовать машинное обучение в бою. Сразу ничего профильного я не нашёл, однако на GOTO Berlin было много тем по машинному обучению, поэтому и решил посетить именно её. Под катом небольшой обзор этой конференции и много фотографий
Читать дальше →

Патчинг Java кода на продакшене без анестезии

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

Здесь я расскажу об устройстве одного из многих инструментов, которые помогают в разработке различных сервисов для проекта Одноклассники. Внутри компании мы называем его «Hot Code Replace» (HCR), и предназначен данный инструмент для исправления критических и несложных багов в работающих продакшн сервисах без их остановки. Это чрезвычайно важная особенность, так как позволяет избежать достаточно занудного и трудоёмкого процесса выкладывания новой – исправленной версии барахлящего сервиса, избежать сопутствующей этому достаточно продолжительной паузы в доступности каждого хоста, избежать сброса кешей.

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

Java Challengers #2: Сравнение строк

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

Java Challengers #2: Сравнение строк


У нас как всегда много опаздывающих к началу курса, так что только вчера провели второе занятие среди нового потока "Разработчик Java". Но это так, мелочи жизни, а пока что мы продолжаем публикацию серии статей Java Challengers, перевод которых подготовили для вас.


В Java класс String инкапсулирует массив char (прим. переводчика — с java 9 это уже массив byte, см. Компактные строки в Java 9). Говоря по простому, String — это массив символов, используемый для составления слов, предложений или других конструкций.


Инкапсуляция — это одна из самых мощных концепций объектно — ориентированного программирования. Благодаря инкапсуляции вам не нужно знать как работает класс String. Вам достаточно знать методы его интерфейса.


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

Конференция ThinkJava #8 в Харькове

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


Мы не станем рассказывать про уникальность нашего мероприятия, так как собираемся презентовать доклады, а не единорогов. Не будем заманивать вас плюшками в стиле сертификатов и промокодов. Не запилим смешной сайт и не закажем кофебрейк на Копи Лювак. Мы слишком заняты тем, что готовимся к восьмой “Джаве”, репетируем доклады, следим, чтобы в них не было воды, а только максимум информации по делу и исключительно на основе реальных проектов. Так вот, если вам интересны знания, на ThinkJava #8 ими будут делиться 2 спикера :).
Читать дальше →

Как начать работать с Hibernate Search

Время на прочтение7 мин
Охват и читатели20K
Сегодня многие разрабатывают enterprise-приложения на Java с использованием spring boot. В ходе проектов часто возникают задачи по созданию поисковых систем разной сложности. Например, если вы разрабатываете систему, хранящую данные о пользователях и книгах, то рано или поздно в ней может потребоваться поиск по имени/фамилии пользователя, по названиям/аннотациям для книг.



В этом посте я вкратце расскажу об инструментах, которые могут помочь в решении таких задач. А затем представлю демо-проект поискового сервиса, где реализована более интересная и сложная фича — синхронизация сущностей, БД и поискового индекса. На примере этого демо-проекта вы сможете познакомиться с Hibernate Search — удобным способом общения с полнотекстовыми индексами Solr, Lucene, ElasticSearch.
Читать дальше →

Беспроводные метки NFC

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


Технический прогресс не стоит на месте, появляющиеся новые технологии со временем дешевеют и становятся доступны практически всем желающим. Как пример можно привести мобильные телефоны. Середина 80-ых — начало 90-ых были переносные таксофоны с ручками или кирпичи стоимостью несколько тысяч $, конец 90-ых — большого размера трубки, с торчащими антеннами со стоимостью от 100$ Такую же аналогию можно провести с NFC метками, используемыми в учетных целях.

  • Уникальный идентификатор nfc метки можно занести в типовой регистр штрих кодов(или доп.свойств) и использовать со смартфона при заполнении, например, инвентаризации административно хозяйственного отдела.
  • В более сложном варианте можно записывать uid номенклатуры и часть названия прямо в метку NFC, при таком варианте связь метки и номенклатуры можно хранить только в метках.
  • Также в случае использования билетов, возможно дешифровать напечатанный номер на билете или же записывать номер заново на карту в открытом формате. Это позволит иметь механизм ручного ввода при повреждении метки, аналогично штрихкодам. Универсальное приложение чтения NFC читает и печатный номер билета и срок действия.

В идеальном варианте и оборудование и расходники (метки) могут ничего не стоить при условии, что у работника имеется смартфон с поддержкой NFC и сам работник не против его использования. Ну и, конечно же, удалось раздобыть необходимое количество использованных билетов. На Ali стоимость от 6 рублей с лишним за метку.
Читать дальше →

Multi-release JARs — Плохо или хорошо?

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

От переводчика: мы активно работаем над переводом платформы на рельсы Java 11 и думаем над тем, как эффективно разрабатывать Java библиотеки (такие как YARG) с учётом особенностей Java 8 / 11 так, чтобы не пришлось делать отдельные ветки и релизы. Одно из возможных решений — multi-release JAR, но и тут не всё гладко.


Java 9 включает новую опцию Java-рантайма под названием multi-release JARs. Это, возможно, одно из самых противоречивых нововведений в платформе. TL;DR: мы считаем это кривым решением серьезной проблемы. В этом посте мы объясним, почему мы так думаем, а также расскажем, как вам собрать такой JAR, если вам сильно хочется.


Multi-release JARs, или MR JARs, — это новая функция платформы Java, появившаяся в JDK 9. Здесь мы подробно расскажем о значительных рисках, связанных с использованием этой технологии, и о том, как можно создавать multi-release JARs с помощью Gradle, если вы ещё хотите.


По сути, multi-release JAR — это Java-архив, включающий несколько вариантов одного класса для работы с разными версиями среды исполнения. Например, если вы работаете в JDK 8, среда Java будет использовать версию класса для JDK 8, а если в Java 9, используется версия для Java 9. Аналогично, если версия создана для будущего выпуска Java 10, рантайм использует эту версию вместо версии для Java 9 или версии по умолчанию (Java 8).


Под катом разбираемся в устройстве нового формата JAR и выясняем нужно ли это всё.

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

Аспектно-ориентированное программирование, Spring AOP

Время на прочтение6 мин
Охват и читатели248K
Аспектно-ориентированное программирование (АОП) — это парадигма программирования являющейся дальнейшим развитием процедурного и объектно-ориентированного программирования (ООП). Идея АОП заключается в выделении так называемой сквозной функциональности. И так все по порядку, здесь я покажу как это сделать в Java — Spring @AspectJ annotation стиле (есть еще schema-based xml стиль, функциональность аналогичная).

Выделении сквозной функциональности


До

image

и после

image

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

Join point


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

Антон Архипов про эффективную работу с IntelliJ IDEA и TeamCity на jug.msk.ru

Время на прочтение2 мин
Охват и читатели5.7K
1 ноября 2018 года на встрече сообщества московских Java-разработчиков jug.msk.ru выступил Антон Архипов, рассказав о приёмах использования и новых возможностях продуктов компании JetBrainsIntelliJ IDEA и TeamCity.


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

jDrum эмулятор ритм студий

Время на прочтение13 мин
Охват и читатели3.4K
Предисловие: у меня оборудована студия, в студию я решил докупить электронные midi ударные, инструмент с падами из линейки: medeli, akai, novation.

Для разработки на компьютере установлен Linux (Ubuntu), программное обеспечение выше упомянутых девайсов в Linux не поддерживается, а заморочки с wine и виртуальной машиной или переключение между операционными системами того не стоят.

Решил разработать простой инструмент для написания ритмов.

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

Java Challengers #1: Перегрузка методов в JVM

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

Java Challengers #1: Перегрузка методов в JVM


Всем доброго дня.


У нас уже запустился очередной поток курса "Разработчик Java", но у нас ещё осталось немного материалов, которыми бы хотели с вами поделиться.


Добро пожаловать в серию статей Java Challengers! Этот серия статей посвящена особенностям программирования на Java. Их освоение — это ваш путь к становлению высококвалифицированным программистом на Java.


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


Готовы ли вы приступить к освоению основных концепций программирования на Java? Тогда давайте начнем с нашей первой задачки!


widening-boxing-varargs

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

Как наконец-то начать писать тесты и не пожалеть об этом

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


Приходя на новый проект, я регулярно сталкиваюсь с одной из следующих ситуаций:

  1. Тестов нет совсем.
  2. Тестов мало, их редко пишут и не запускают на постоянной основе.
  3. Тесты присутствуют и включены в CI (Continuous Integration), но приносят больше вреда, чем пользы.

К сожалению, именно к последнему сценарию часто приводят серьезные попытки начать внедрять тестирование при отсутствии соответствующих навыков.

Что можно сделать, чтобы изменить сложившуюся ситуацию? Идея использования тестов не нова. При этом большинство туториалов напоминают знаменитую картинку про то, как нарисовать сову: подключаем JUnit, пишем первый тест, используем первый мок — и вперед! Такие статьи не отвечают на вопросы о том, какие тесты нужно писать, на что стоит обращать внимание и как со всем этим жить. Отсюда и родилась идея данной статьи. Я постарался кратко обобщить свой опыт внедрения тестов в разных проектах, чтобы облегчить этот путь для всех желающих.
Читать дальше →

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

Разбор игры от Одноклассников на Joker 2018

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

Всем привет! Несколько дней назад мы выкладывали пост про задачки, которые давали на конференции Joker 2018. Но это еще не всё! В этом году специально для Joker мы сделали целую игру с не менее интересными задачками по Java (и не только), про которую и расскажем сегодня.
Читать дальше →

Валидация в Java-приложениях

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

Этот текст посвящен различным подходам к валидации данных: на какие подводные камни может наткнуться проект и какими методами и технологиями стоит руководствоваться при валидации данных в Java-приложениях.


Validation


Я часто видел проекты, создатели которых вообще не утруждались выбором подхода к валидации данных. Команды работали над проектом под невероятным давлением в виде сроков и размытых требований, и в итоге у них просто не оставалось времени на точную, последовательную валидацию. Поэтому, код валидации у них разбросан повсюду: в сниппетах Javascript, контроллерах экранов, в бинах бизнес-логики, сущностях предметной области, триггерах и database constraints. В этом коде было полно операторов if-else, он выбрасывал кучу исключений, и попробуй разберись, где там у них валидируется этот конкретный кусок данных… Как результат, по мере развития проекта становится тяжело и дорого соблюдать и требования (зачастую довольно путаные), и единообразие подходов к валидации данных.


Так есть ли какой-то простой и изящный способ валидации данных? Способ, который защитит нас от греха нечитаемости, способ, который соберет всю логику валидации воедино, и который уже создан за нас разработчиками популярных Java-фреймворков?


Да, такой способ существует.

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

Открытый вебинар «Многопоточность в Java. По ту сторону от synchronized-notifyAll»

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

Мы продолжаем давать открытые уроки по нашему курсу «Разработчик Java». Сегодня мы хотим поделиться второй частью посвящённой многопоточности. Если в первой части рассматривались базисы многопоточности плюс был написан Ping-Pong с применением synchronized-notifyAll, то в новой части уже идёт более углубленное изучение, а Ping-Pong переписали в разных вариациях уже без synchronized-notifyAll


Ждём комментарии и вопрос, которые можно задать тут или зайти к Виталию на день открытых дверей.

Концентрированная Java на полторы тысячи человек. Как прошел Joker 2018

Время на прочтение6 мин
Охват и читатели6.5K
Совсем недавно прошел Joker 2018 — главная Java-конференция России. Это уже шестой по счёту Joker, и на этот раз он собрал рекордное количество участников (около тысячи четырёхсот человек — и это не считая спикеров, стендистов и организаторов). В этом хабрапосте мы еще раз оглянемся на то, как это было, и посмотрим интересные фоточки (осторожно, трафик).



Подготовка


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



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

Отчёт о конференции Joker 2018

Время на прочтение3 мин
Охват и читатели1.8K
Я в первый раз на крупной конференции да и в программировании недавно. Не буду писать о докладах, о них уже написали здесь. Я напишу о впечатлениях от конференции, участников, организации мероприятия и подкреплю всё это фотографиями. Надеюсь, те, кого не было на Джокере, немного смогут прочувствовать атмосферу.

Пробуем Micronaut или Дорогая, я уменьшил фреймворк

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

Пробуем Micronaut или Дорогая, я уменьшил фреймворк


Про фреймворк micronaut я мельком вычитал из дайджест рассылок. Заинтересовался, что за зверь такой. Фреймворк ставится в противовес напичканному всем нужным инструментарием Spring.


Micronaut


Предвосхищая грядущую конференцию для разработчиков, где как раз будут рассказывать и показывать, как использовать micronaut в ваших этих микросервисах, я решил хоть раз подготовиться и прийти хоть с каким-то контекстом в голове, с неким набором проблем и вопросов. Выполнить так сказать домашнее задание. Я решил налабать какой-нибудь небольшой pet-project за пару-тройку вечеров (как пойдёт). В конце статьи будет ссылка на репозиторий всех исходников проекта.

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

Мой улов за неделю

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

Чем больше разработчик работает над приложением в команде и чем лучше знает его код, тем чаще он занимается вычиткой творчества своих товарищей. Сегодня я покажу, что может быть выловлено за одну неделю в коде, написанном весьма неплохими разработчиками. Под катом собрание ярких артефактов нашего творчества (и немного моих размышлений).

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