Обновить
145.15

Java *

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

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

6 способов выполнения метода при старте Spring Boot приложения

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

При разработке на Spring Boot иногда нам нужно выполнить метод или фрагмент кода при запуске приложения. Этот код может быть любым, от записи определенной информации до настройки базы данных, заданий cron и т. д. Мы не можем просто поместить этот код в конструктор, потому что требуемые переменные или службы могут быть еще не инициализированы. Это может привести к исключению с нулевым указателем или некоторым другим.

Рассмотрим различные способы выполнения метода после запускаSpring Boot.

Читать далее

Java. Abstract Factory Pattern in Game Server

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

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

Проблема

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

Семейство сопутствующих игровых вещей, например: chest + unit + hero.

Несколько игровых событий. Например, продукты Chest + Unit + Hero доступны в следующих ивентах: Pirate, Space, Default.

Нам нужен способ создавать отдельные игровые предметы, чтобы они соответствовали другим предметам из того же ивента. Игрокам очень не нравится, когда они видят скины из разных ивентов.

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

Решение

Первое, что предлагает шаблон «Абстрактная фабрика» - это явное объявление интерфейсов для каждого отдельного игрового предмета из ивента (например, сундук,  юнит или герой). Затем вы можете заставить все варианты предметов следовать этим интерфейсам. Например, все варианты сундуков могут реализовывать интерфейс Chest; все варианты юнитов могут реализовывать интерфейс Unit и так далее.

Следующим шагом будет объявление абстрактной фабрики - интерфейса со списком методов создания для всех предметов, входящих в ивент (например, createChest, createUnit и createHero). Эти методы должны возвращать абстрактные типы продуктов, представленные интерфейсами, которые мы извлекли ранее: Chest, Unit, Hero и так далее.

Читать далее о абстрактной фабрике

Загадки Enum'ов

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

Перечисления появились в пятой версии Java и с тех пор крепко обосновались в наших приложениях. Работа с перечислениями почти не отличается от работы с любыми другими классами в Java. Но есть несколько особенностей, которые вызывают удивление. Каждый раз сталкиваясь с ними, хочется спросить: "Почему так?".


Давайте попробуем разобраться.

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

Ускоряем разработку с Quarkus 2.0 при помощи горячей перезагрузки и тестирования

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

Quarkus поставляется с набором инструментов, позволяющих разработчикам быстро начать разработку используя расширения для многих популярных IDE. Одной из наиболее известных и простых в использовании функций является возможность выполнять горячую перезагрузку (Live Reload) в реальном времени в режиме разработки (Dev Mode), позволяя разработчику изменять свой код на лету без перезапуска приложения. С выходом новой версии Quarkus 2.0 разработчики полчили ещё больше возможностей. Например, в режиме разработки появилась интерактивная оболочка, предлагающая набор различных опций для более детального контроля над тем, какие из компонентов нужны разработчику в данный момент. Quarkus также предоставляет утилиту командной строки для конфигурации проекта и дальнейшей быстрой разработки.

Читать далее

MicroProfile и его экосистема

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

Совсем недавно вышла новая версия MicroProfile - 4.1. Я бы хотел рассказать, что вообще такое MicroProfile, для чего он применяется, из каких компонентов состоит и чем привлекает к себе разработчиков. В этой статье я покажу несколько примеров того, как он может использоваться на практике на примере работы с Quarkus, фреймворком, который является одной из множества реализаций спецификаций MicroProfile.

Читать далее

Как мы добавили поддержку языка Frege в IDEA. Часть 1

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

В этом посте мы расскажем, как реализовывали плагин для поддержки функционального языка Frege в IntelliJ IDEA. Если вам интересно, как IDE от JetBrains работают внутри, или вы хотите поконтрибьютить в языковые плагины (а может даже написать свой!), эта статья для вас. Мы пройдемся по этапам создания языкового плагина для IDEA, расскажем, с какими трудностями столкнулись, и как подружили этот язык с JVM-миром.

Читать далее

Spring @Transactional — ошибки, которые совершали все

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

Вероятно, одной из наиболее часто используемых аннотаций Spring является @Transactional. Несмотря на ее популярность, иногда она используется неправильно, в результате чего получается не совсем то, что задумал инженер-программист.

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

1. Вызовы в пределах одного класса

@Transactional редко подвергается достаточному количеству тестов, и это приводит к тому, что какие-то проблемы не видны на первый взгляд. В результате вы можете столкнуться со следующим кодом:

Аннотация не работает в методе registerAccount:

Читать далее

Как повысить качество кода в тестовом проекте

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

Качеством кода в тестах часто пренебрегают. Когда в совместной разработке участвуют десятки QA-инженеров, возникает острая необходимость ввести формализованные правила, чтобы все могли быстро ориентироваться в тестовом проекте. К тому же часто тесты пишутся по аналогии или копируются с небольшими изменениями. Когда счет тестов идет на тысячи, то код, написанный в плохом стиле, быстро распространяется. Для решения этих проблем в тестовом проекте Wrike мы уже больше двух лет используем связку инструментов PMD и Checkstyle. И она отлично работает. В этой статье хотим поделиться опытом по настройке этих инструментов, их использованию и кастомизации.

Читать далее

Тестирование From Zero to Hero. Пролог к части 2, или Как мы пилили монолит

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

Меня зовут Сергей, я тимлид команды андроид Тинькофф. 

В первой части этой серии статей я рассказывал про то, как изменились подходы к тестированию в мобильном приложении Тинькофф. 

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

Здесь я хочу рассказать о том, что мы имели ДО и что получилось сейчас. 

Давайте разбираться

Record-and-Replay тестирование — сочетание достоинств юнит и интеграционных тестов

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

Вступление

Привет, Хабр. Сегодня я расскажу вам про Record-and-Replay подход к тестированию т. к. я его понимаю. Оговорка про мое понимание не случайна. Про этот подход не так много общедоступных материалов, чтобы иметь некий common agreement относительно значения этого термина. Многое из того, что я опишу, является моими личными оригинальными находками, но, тем не менее, фраза record-and-replay, на мой взгляд, наилучшим образом описывает применяемые мной решения. Так что я буду использовать именно ее.

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

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

Ключевой постулат

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

Читать далее

Пара подводных камней при разработке на Kotlin

Время на прочтение8 мин
Охват и читатели17K
Давно хотелось поделиться списком потенциально опасных конструкций, возникающих при разработке на Kotlin. Даже если Вам он покажется простым — то для людей, которые ещё не писали на Kotlin активно, данное знание будет весьма полезным.
На Хабре уже была подобная статья — но в ней больше рассматривались способы специально «выстрелить себе в ногу», а я хочу рассказать про непреднамеренные случаи.
Список из 4 пунктов

Java CSP быстрый старт

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

Если вы решили разрабатывать приложение на Java + maven, которое должно работать с отечественной криптографией, то эта статья для вас.

В статье рассказывается как создать приложение и подключить к нему JavaCSP для работы с ГОСТ-овой криптографией. В качестве примера мы создадим программу, показывающую все сертификаты в регистре.

Целевая аудитория junior/middle разработчики, которым требуется реализовать подписание/шифрование на базе отечественной криптографии. И которые до этого не имели опыта работы с Крипто Про.

Читать далее

Как я запускал классификацию изображений на домашнем кластере Apache Ignite ML

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

Я - студент университета, знаком с машинным обучением в рамках пройденного курса, есть интерес к современным кластерным технологиям, конкретно - к Apache Ignite. Под катом — история о том, как я запускал пример OneVsRestClassificationExample из дистрибутива.

Читать далее

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

Путь ВТБ Лизинга к сферическому качеству в вакууме

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

Привет, Хабр! Меня зовут Максим Бутаков, я работаю руководителем отдела контроля качества и тестирования в компании «ВТБ Лизинг». Сегодня я хочу рассказать о создании этого направления: о том, как нам удалось менее чем за три года улучшить качество продукта и существенно уменьшить количество багов. Думаю, под катом найдётся чем вас удивить.

Читать далее

JDK Stream реверс-инженеринг (реконструкция)

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

Привет all!

Приглянулась мне однажды идея реверс-инженеринга (реконструкции) StreamAPI из JDK8. Что из этого вышло, прошу под cat...

Под cat

Что наша жизнь? Игра

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

Что делает в отпуске директор группы программерских компаний? То, что не может делать на работе. Программирует. Всласть. :)

Мне много лет, я выполз из тьмы и в Transport Tycoon Deluxe я играл ещё в то время, когда эта игра только появилась (это 94-й год).

Читать далее

One Day Offer от Альфа-Банка

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

Мы расширяем нашу команду IT-специалистов и решили пойти против всех известных правил найма в банк. Вместо череды собеседований разного уровня с долгими паузами между этапами и недельным ожиданием результатов — проведём One Day Offer, где можно получить приглашение на работу всего за один день.

Когда?

4 сентября – Java-разработчики (подать заявку нужно до 2 сентября).

11 сентября – JavaScript-разработчики (заявки – до 9 сентября).

18 сентября – системные аналитики (заявки – до 16 сентября).

Читать далее

Stale Element Reference в Selenide

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

Всем привет! Данная ошибка является очень популярной при использовании Selenide автотестах в Java. На поиск решения у меня ушло довольно много времени, поэтому в этой статье я хочу подробно рассказать про эту ошибку и как с ней работать.

Читать далее

Минутка DevOps-а для Java-разработчиков

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

В этой статье мы поверхностно затронем сборку Java-приложений в GitLab CI, но сделаем так, чтобы в вашем merge request-е были отчёты о пройденных юнит-тестах и code coverage. А ещё мы соберём приложение при помощи образа с JDK, который тоже соберём сами.

На КДПВ шутка — а в тексте всё серьёзно.

Читать далее

Нельзя так просто взять и вычислить абсолютное значение

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

Кажется, задача вычисления абсолютного значения (или модуля) числа совершенно тривиальна. Если число отрицательно, давайте сменим знак. Иначе оставим как есть. На Java это будет выглядеть примерно так:


public static double abs(double value) {
  if (value < 0) {
    return -value;
  }
  return value;
}

Вроде бы это слишком просто даже для вопроса на собеседовании на позицию джуна. Есть ли тут подводные камни?

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

Вклад авторов