Обновить
128K+

Java *

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

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

Умеем ли мы готовить Java, Kotlin RestController?

Время на прочтение4 мин
Охват и читатели5.9K
Практически любой программист на java в своей жизни писал RestController, но мало кто задумывается правильно ли он это делает. Даже если вы опытный программист, у вас могут возникнуть вопросы, на которые я постараюсь ответить. В статье будут затронуты такие фреймворки как spring boot версии 1.5 и 2.0, а также quarkus — недавно появившийся соперник spring boot от red hat.

image

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

Как собрать образ Oracle DB для Testcontainers

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

Код должен тестироваться на той СУБД, с которой он будет работать. Testcontainers — это такая библиотека, которая позволяет использовать в юнит тестах практически любую СУБД с той же лёгкостью, что embedded базы данных типа HSQLDB или H2. Был бы только Docker образ



Именно сборке удобного для использования с Testcontainers докер образа посвящена эта статья. У меня при попытке его сделать возникли проблемы, и тут я делюсь своим решением.
Собирать буду образ для Oracle 11, потому он небольшого размера и мне версии 11 хватает. С другими версиями подход примерно тот же.


Для того, чтобы было понятно, как использовать образ, тут также будет код на Java, который демонстрирует применение образа для тестирования Spring Boot приложений. Способ подключения к testcontainers я привёл, наверное, не самый лучший. Но во-первых он демонстрирует как использовать настройки, заданные при создании образа. Во-вторых он простой. И в-третьих он почти не завязан на Spring, его можно воткнуть даже в джава код, в котором нет ничего, кроме public static void main.


Предполагается, что читатель обладает поверхностным знакомством с Docker и Testcontaners, а также хорошо знает Java. Для сборки нужно использовать linux, если собираете под Windows, нужно будет применить msys2 или что-то в этом духе.


Демонстрационный код залит на гитхаб вот сюда https://github.com/poxu/testcontainers-spring-demo Поправленные скрипты для сборки образа можно посмотреть в моём форке Оракловских инструкций https://github.com/poxu/docker-images/tree/master/OracleDatabase/SingleInstance

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

Отличия между C++ /Visual Basic и Java на общем уровне (для начинающих и учащихся)

Время на прочтение4 мин
Охват и читатели11K
C++ и Java являются одними из очень популярных языков программирования. Их можно сопоставлять очень детально, сравнивая скорость, типизацию, компиляторы и т.д, но для обычного обывателя это слишком, и гораздо проще будет рассмотреть их отличия на общем, базовом уровне, чтобы выводы для себя мог сделать даже человек, далёкий от программирования и только присматривающийся к данной сфере. Уже на этом этапе можно сделать вывод, язык какой парадигмы вам подойдёт. И да, ситуация такого выбора вполне реальна — например, для студентов в учебных целях.

Для этого попытаюсь рассмотреть вкратце основные конструкции языков программирования а именно:
Читать дальше →

Учебник по Spring Boot Admin

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


Контролируйте и управляйте своими приложениями Spring Boot с помощью приятного пользовательского интерфейса поверх конечных точек Spring Boot Actuator.

Spring Boot Actuator


Actuator — это модуль Spring Boot, который добавляет конечные точки (endpoint) REST / JMX в ваше приложение, чтобы вы могли легко отслеживать и управлять им в производственной среде. Конечные точки предлагают проверку работоспособности, мониторинг метрик, доступ к журналам, дампам потоков, дампам кучи, информации об окружающей среде и многое другое. Автор подробно рассказал об Actuator в следующей статье:
Actuator: Spring Boot Production Monitoring and Management
Мониторинг и управление вашим работающим приложением с помощью Spring Boot Actuator 2.x. Соберите метрики или проверьте здоровье приложения.
Читать дальше →

IntelliJ IDEA 2019.3: оптимизация производительности и улучшение качества

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

В этом релизе мы сосредоточились на производительности и качестве. Вместе с другими командами JetBrains, мы занимались оптимизацией производительности, повышением отзывчивости интерфейса, улучшением существующей функциональности.

Чтобы правильно расставить приоритеты, мы полагались на ваши отзывы и благодарим всех, кто делился идеями и сообщал об ошибках в нашем трекере. В результате мы исправили более 1600 проблем, которые в общей сложности получили около 4000 голосов пользователей.

Мы также работали над поддержкой новых фреймворков для создания микросервисов, таких как Micronaut, Quarkus и Helidon, и сделали долгожданную поддержку MongoDB.


blog@2x (3)



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

#Назаметку. Осторожно, атомарные операции в ConcurrentHashMap

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


В Java с незапямятных времён есть замечательный интерфейс Map и его имплементации, в частности, HashMap. А начиная с Java 5 есть ещё и ConcurrentHashMap. Рассмотрим эти две реализации, их эволюцию и то, к чему эта эволюция может привести невнимательных разработчиков.

Warning: в статье использованы цитаты исходного кода OpenJDK 8, распространяемого под лицензией GNU General Public License version 2.
читать дальше

Утренний Java-дайджест за 12 декабря

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


  • Окончание жизни Spring Boot 2.1.x намечено на 1-е ноября 2020. Какие-то обновления до этой даты все еще будут, а после — пропадут. Нужно обновляться на 2.2. Сама процедура обновления не кажется сложной, инструкции есть в wiki. Там же есть список поддерживаемых версий.
Читать дальше →

В некотором царстве, не в «спринговом» государстве. Доклад Яндекса

Время на прочтение8 мин
Охват и читатели14K
Spring — мощный Java-фреймворк, доступный в опенсорсе. Я решил рассказать, для каких задач на бэкенде Spring оказывается полезным и какие у него плюсы-минусы в сравнении с другими библиотеками: Guice и Dagger 2. Рассмотрим инъекцию зависимостей и инверсию управления — вы узнаете, с чего лучше начать изучение этих принципов.


— Всем привет, меня зовут Кирилл. Я буду сегодня рассказывать про Dependency Injection.
Читать дальше →

Java-дайджест за 10 декабря

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


  • Вышла четвертая альфа-версия «Remnants of the Precursors» — написанного на Java бесплатного аналога «Master of Orion» (это игра 1993 года). Пятую альфу обещают 5-го сентября. Автор обещает выложить исходники после перехода в бету. Скачать четвертую альфу можно по ссылке.


  • Вышла NestedJ — библиотека, которая в виде репозитория Spring Data реализует сортированное дерево, оптимизированное на чтение. Логика обхода в этой библиотеке стоит O(n) и позволяет делать такие штуки, как поиск узлов-детей и узлов-родителей. 144 коммита и 31 звездочка на GitHub.

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

Ускоренная разработка с помощью Spring Boot DevTools

Время на прочтение8 мин
Охват и читатели46K
Как ускорить разработку на Spring Boot с DevTools и сделать этот процесс более приятным и продуктивным?

Настройка


Как обычно при разработке на Spring Boot, настройка достаточно проста. Все, что вам нужно сделать, это добавить правильную зависимость, и готово. Spring Boot находит ее и автоматически настраивает DevTools соответственно.
Читать дальше →

Плагинное приложение на Java без боли

Время на прочтение8 мин
Охват и читатели16K
В этой статье я хотел бы рассказать, как быстро и просто сделать каркас приложения на Java с поддержкой динамической загрузки плагинов. Читателю наверняка сразу в голову придёт, что такая задача уже давно решена, и можно просто использовать готовые фреймворки или написать свой загрузчик классов, но в предлагаемом мною решении ничего этого не потребуется:

  • Нам не понадобятся специальные библиотеки или фреймворки (OSGi, Guice и т.п.)
  • Мы не будем использовать парсинг байткода с помощью ASM и подобных библиотек.
  • Не будем писать свой загрузчик классов.
  • Не будем использовать рефлексию и аннотации.
  • Не понадобится возня с classpath для поиска плагинов. Мы вообще не будем трогать classpath.
  • Также мы не будем использовать XML, YAML или какие-либо другие декларативные языки для описания точек расширений (extension point’ов в плагинах).

Однако всё же есть одно требование — такое решение будет работать только на Java 9 или выше. Потому что оно будет основано на модулях и сервисах.
Читать дальше →

Пишем простое веб-приложение используя Spring MVC, Spring Data JPA и Hibernate

Время на прочтение16 мин
Охват и читатели97K
Привет, Хабр! Представляю Вашему вниманию перевод руководства «Spring MVC + Spring Data JPA + Hibernate — CRUD Example» автора Nam Ha Minh.

В этом руководстве по Java Spring вы узнаете, как настроить Spring MVC приложение для работы с Spring Data JPA, разработав простое веб-приложение, которое позволяет управлять информацией о клиентах.
Читать дальше →

Разработка MQ JMS приложения на Spring Boot

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


Разработчики приложений, работающие на Java, при использовании интерфейса JMS, часто предпочитают работать со Spring Framework. Spring может упростить написание кода новых приложений, предоставляя шаблоны для общих паттернов (templates for common patterns) и успешно используется в течение многих лет с классами MQ JMS. Класс Spring JmsTemplate является ключевым интерфейсом, но он по-прежнему зависит от конфигураций и зависимостей в коде.

Spring Framework включает в себя различные модули для различных нужд. Одним из таких компонентов является Spring Boot. Spring Boot стартеры удобно подтягивают все зависимости и библиотеки авто-конфигураций, необходимые для использования конкретной технологии. Это позволяет очень легко начать работу с новым приложением и технологией, быстрее, чем работать непосредственно с классами, такими как JmsTemplate. Итак, как мы можем воспользоваться этим легким доступом для приложений MQ?

Переведено @middle_java
Читать дальше →

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

В самом популярном фрагменте кода за всю историю StackOverflow ошибка! 

Время на прочтение7 мин
Охват и читатели71K
Недавнее исследование «Использование и атрибуция сниппетов кода Stack Overflow в проектах GitHub» внезапно обнаружило, что чаще всего в опенсорсных проектах встречается мой ответ, написанный почти десять лет назад. По иронии судьбы, там баг.

Давным-давно…


Еще в 2010 году я сидел в своём офисе и занимался ерундой: развлекался код-гольфингом и накручивал рейтинг на Stack Overflow.

Моё внимание привлёк следующий вопрос: как вывести количество байт в удобочитаемом формате? То есть как преобразовать что-то вроде 123456789 байт в «123,5 МБ».


Старый добрый интерфейс 2010 года, спасибо The Wayback Machine
Читать дальше →

Размышления на тему ООП и состоянии объектов

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

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


Однажды подобный код попался мне на глаза.

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

Кастомизируем маппинг контроллеров Spring MVC

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

Введение


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

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

TelegramBot инструкция по созданию базового функционала для бота. (Часть 1)

Время на прочтение6 мин
Охват и читатели59K
Не так давно я предложил вам воспользоваться моим ботом для телеграмма.

Telegram Bot — помощник в планировании мероприятий

Получив много вопросов в личку, я понял, что вопрос создания ботов для Телеграм довольно популярен.

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

Я решил написать цикл статей, в которых хочу показать базовые вещи, которые будут нужны вам для написания своего бота.
Вас ждет Java, Maven, TelegramAPI, Lombok и Log4j.
Кому интересно — прошу под кат…
Читать дальше →

Как не платить за Java хостинг или быстрый старт с Google App Engine

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

Все мы хоть когда-нибудь писали приложения, облегчающие жизнь. Не на заказ, а просто для себя. Записные книжки, программки учета финансов, набор карточек для изучения иностранного языка — да мало ли в жизни хороших идей? И вот было бы здорово, иметь доступ к этой программке не только со своего компьютера, но и с рабочего! А то и поделиться с друзьями своей замечательной программкой!


Все отлично, если вы, скажем, PHP программист — дешевых и даже бесплатных хостингов море.


А что если вы программист Java? Готовые Tomcat хостинги недешевы, а если у вас еще и несколько таких программок, то желание поделиться ими с друзьями выльется в копеечку.


Примерные цены на JVM хостинг

Что же делать?


Google нам поможет...

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

Тред Ариадны: как полюбить JSR-133. Доклад Яндекса

Время на прочтение12 мин
Охват и читатели6K
Многоядерные процессоры — обыденность. Рано или поздно любому программисту-практику придется зайти в лабиринт многопоточного программирования и встретиться с населяющими его «чудовищами». Поговорим о том, с чего начать такой путь и какие инструменты и подходы помогут выйти победителем. Я выступил с этим докладом перед будущими участниками круглогодичной стажировки Яндекса.


— Меня зовут Сева Миньков. Я работаю в отделе облачной инфраструктуры поискового департамента. Занимаюсь в основном бэкендом. Пишу на разных языках, но чаще всего это Java и языки, запускаемые на Java Virtual Machine (JVM).
Читать дальше →

Подсчёт с приблизительным распределением — чаще всего переизобретаемая сортировка

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

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

Чаще прочих встречается вот такая алгоритмическая идея.

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