Обновить
128K+

Java *

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

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

Из Java-разработчика — в директора филиала IT-школы

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

Разрешите представиться! Меня зовут Иван и я перешел с разработчика в IT-управленцы, но не до конца ушел в управление, а еще и пишу код.


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


Переход из разработчика в управленцы


Мой бекграунд


Я с 9-го класса пишу код и не представляю свою жизнь без разработки (мне сейчас 28 лет). Мне нравится и процесс программирования, и конечный результат. Когда люди пользуются моим творением и оно как-то облегчает им жизнь — это круто.

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

Пишем автотест с использованием Selenium Webdriver, Java 8 и паттерна Page Object

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

В этой статье рассматривается создание достаточного простого автотеста. Статья будет полезна начинающим автоматизаторам.


Материал изложен максимально доступно, однако, будет значительно проще понять о чем здесь идет речь, если Вы будете иметь хотя бы минимальные представления о языке Java: классы, методы, etc.


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

Как визуализировать граф Spring Integration с помощью Neo4j?

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


Фреймворк Spring Integration умеет отдавать текущее состояние всех EIP-компонентов и их связей в виде JSON-графа. Это кажется очень удобным для изучения и отладки, но увы, ни один из нагугливаемых инструментов (коих всего-то раз /два) не даёт достаточной гибкости для визуализации и анализа такого графа. В этой статье я покажу, как решить эту проблему путем импорта графа в графовую СУБД Neo4j, где такая гибкость стоит на первом месте.

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

Написание тестов @SpringBootTest при ипользовании Spring Shell в приложении

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

Иногда в приложениях полезно иметь консоль для управления приложением непосредственно с сервера. Одним из чрезвычайно удобных решений данной задачи является Spring Shell.


Тесты — тоже весьма неплохая практика (надеюсь у вас они есть) и, иногда, они пишутся с аннотацией @SpringBootTest. Однако, если вы подключите Spring Shell и попробуете запустить такой тест, то… ваш тест просто зависнет в ожидании введения команды с консоли.


Итак, отправляемся на поиски решения.
Читать дальше →

Варим байткод на кухне JVM

Время на прочтение8 мин
Охват и читатели17K
Меня зовут Александр Коцюруба, я руковожу разработкой внутренних сервисов в компании ДомКлик. Многим разработчикам, пишущим на Java, с опытом приходит понимание внутреннего устройства JVM. Чтобы облегчить этот путь Java-самурая, я решил простым языком изложить основы виртуальной машины Java (JVM) и работы с байткодом.

Что такое таинственный байткод и где он обитает?

Постараюсь ответить на этот вопрос на примере приготовления солений.


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

Какие возможности предоставляет Spring для кастомизации своего поведения

Время на прочтение5 мин
Охват и читатели9K
Всем привет. На связи Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

Помимо преподавания, я занимаюсь написанием авторского материала для блога OTUS на хабре и сегодняшнюю статью хочу приурочить к запуску курса «Разработчик на Spring Framework», на который прямо сейчас открыт набор.




Введение


С точки зрения читателя код приложения, использующего Spring, выглядит достаточно просто: объявляются некоторые bean'ы, классы размечаются аннотациями, а дальше bean'ы inject'ятся куда нужно, все прекрасно работает. Но у пытливого читателя возникает вопрос: «А как это работает? Что происходит?». В этой статье мы попытаемся ответить на данный вопрос, но только не ради удовлетворения праздного любопытства.

Spring framework известен тем, что он является достаточно гибким и предоставляет возможности для настройки поведения framework'а. Также Spring «изобилует» рядом достаточно интересных правил на применение некоторых аннотаций (например, Transactional). Для того, чтобы понять смысл этих правил, уметь их выводить, а также понимать что и как можно настраивать в Spring'е, необходимо понять несколько принципов работы того, что находится у Spring'а под капотом. Как известно, знание нескольких принципов освобождает от знания множества фактов. Я предлагаю ознакомиться с этими принципами ниже, если вы их, конечно, еще не знаете.
Читать дальше →

Кто создал Java: главное про Джеймса Гослинга

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


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


Мы считаем, что такие люди заслуживают большего внимания. Поэтому, во-первых, Джеймс появится на нашей онлайн-конференции JPoint и ответит там на многие вопросы. А во-вторых, в этом посте мы расписали заметные вехи его жизни до, во время и после работы над Java. Как он успел насолить Ричарду Столлману? Почему по изначальному плану язык Java вообще не должен был появиться? Какое отношение Гослинг имеет к подводным роботам?

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

Как я перестал бояться и написал игрового бота

Время на прочтение12 мин
Охват и читатели9K
Или старое доброе динамическое программирование без этих ваших нейросетей.

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

image
Экран игры с сервера проекта Codenjoy
Читать дальше →

Quarkus: модернизация приложений на примере helloworld из JBoss EAP Quickstart (продолжение)

Время на прочтение4 мин
Охват и читатели1.1K
Всем привет – с вами пятый пост из нашей серии про Quarkus! (Кстати, смотрите наш вебинар «Это Quarkus – Kubernetes native Java фреймворк». Покажем, как начать «с нуля» или перенести готовые решения)



В предыдущем посте мы рассмотрели модернизацию Java-приложений с помощью поддерживаемых Quarkus технологий (CDI и Servlet 3) на примере программы helloworld из репозитория Red Hat JBoss Enterprise Application Platform (JBoss EAP) Quickstart. Сегодня мы продолжим тему модернизации и обсудим вопрос потребления памяти.
Читать дальше: Модернизация приложений на примере helloworld из JBoss EAP Quickstart

Java-дайджест за 13 мая

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


Иллюстрация получена вот из этого видео.


  • Джеймс Гослинг, создатель языка Java, заявил об участии в летней конференции JPoint и уже появился в списке спикеров на сайте. Говорят, кризис — время возможностей. Иногда это действительно так! Пару лет назад трудно было представить, что Гослинг будет отвечать у нас на вопросы из чата.


  • В рассылочке появилось интересное письмо о том, что в спеке языка ведется работа над более аккуратным использованием слов вроде «class», «interface» и «type». Например, вместо «sealed types» правильнее говорить «sealed classes and interfaces». Примечание: а вместо Linux нужно говорить GNU/Linux!


  • Стивен Стюарт-Галлус сделал на Java и выложил на GitHub игрушечную реализацию System F JIT, в наличии MethodHandles и Higher Order Abstract Syntax. Соответствующий тред есть на Reddit, где автору можно задавать вопросы. System F — система, которую придумал в 1972 году Жан-Ив Жирар для доказательств в логике, которая представляет собой систему типизированного лямбда-исчисления, отличающаяся от просто типизированной системы наличием механизма универсальной квантификации над типами.

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

Пакетная обработка в JDBC и HIBERNATE

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

Здравствуйте!


В этой статье, я кратко расскажу о пакетной обработке SQL (DML) операторов: INSERT, UPDATE, DELETE, как одной из возможностей достижения увеличения производительности.




Преимущества


В отличие от последовательного выполнения каждого SQL запроса, пакетная обработка даёт возможность отправить целый набор запросов (пакет) за один вызов, тем самым уменьшая количество требуемых сетевых подключений и позволяя БД выполнять какое-то количество запросов параллельно, что может значительно увеличить скорость выполнения. Сразу оговорюсь, что заметный эффект можно увидеть при вставке, обновлении или удалении больших объёмов данных в таблицу БД.


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

Подводные камни тестирования Kafka Streams

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

Kafka, в отличие от реляционных баз данных, является молодой технологией, и потому инструментарий для автоматического тестирования приложений, созданных на базе этой платформы, был доступен разработчикам с самого начала. Хотя на первый взгляд с этим инструментарием всё обстоит очень хорошо — бери и пиши тесты! — на практике приходится сталкиваться с трудностями, о которых хочу поведать в этом посте.

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

Две альтернативы JDBC

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

Примеры для двух неблокирующих библиотек доступа к SQL базам данных — Vert.X SQL и R2DBC. Примеры будут основаны на PostgreSQL и реактивных обертках Java.



Начнем с главного: JDBC — это отличный стандарт. Служил и служит верой и правдой.


Но новые веяния просят новых решений. И даже есть смысл иногда потеснить JDBC.


Я предлагаю взглянуть на две альтернативных реализации доступа к SQL базам из JVM приложений и их (реализаций) применимости.


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

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

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

Шесть советов об использовании PostgreSQL в функциональных тестах

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

В 2018-м году, работая в Akvelon Inc., я собеседовал одного человека. Перед интервью мне дали на проверку его тестовое задание: небольшое web-приложение по типу записной книжки или todo-списка – React\TypeScript, C# на бэке и MS SQL Server в качестве персистентного хранилища. Приложение было модное: с обилием unit-тестов на mock’ах, упакованное в docker-образ – видно, что человек старался. И у этого решения был всего один недостаток – оно не работало. Совсем. Падало при попытке сохранить новую строку в базу данных.



Этот случай мне очень хорошо запомнился, поскольку подсветил сразу несколько типовых проблем.


Первая из них – ложная уверенность от модульных тестов. Даже 100% покрытие кода тестами не гарантирует, что в нём нет ошибок.


И вторая – отсутствие функциональных тестов. Если ваше приложение работает с СУБД, то вы обязательно должны покрыть эту часть кода реальными тестами с реальной базой данных. И здесь есть очень важное условие: проверять нужно именно на той версии СУБД, которая работает у вас в production’е. Думаю, очень многие разработчики под Oracle, прогоняющие свои тесты на H2\HSQLDB, сталкивались с ситуацией, когда тесты проходят, а production не работает (boolean, group by и другие чудеса).


Сейчас я работаю в основном с PostgreSQL и мигрирую наши микросервисы с 10-й версии на 11-ую. В процессе миграции (и разработки вообще) я столкнулся с несколькими нюансами, о которых хотелось бы рассказать.

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

Rust для Java разработчиков

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

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

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

Строим pipeline для доставки Graal Native Image конечным пользователям

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

В данной статье я хочу описать свой опыт по доставке Graal Native Image конечным пользователям Mac OS и Linux в одну команду при помощи Travis CI.


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


Пожалуй начнем.


У меня есть:


  • Java приложение со всеми конфигурациями для сборки native image.

Что хочу получить:


  • Собрать native image при помощи Travis
  • Собрать rpm и deb дистрибутивы, а также архив для mac версии
  • Залить полученные пакеты на Bintray
  • Дать пользователям возможность загрузить приложение через пакетный менеджер
  • Максимально автоматизировать процесс.
Поехали

Сопоставление с образцом в Java: InstanceOf (JEP 305)

Время на прочтение4 мин
Охват и читатели4.7K
Сопоставление с образцом (Pattern Matching) — новая превью функция в Java 14.


instanceof


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


Короче говоря, он проверяет, принадлежит ли данный объект заданному типу. В результате этой проверки он возвращает либо true, либо false.


    if(animal instanceof Cat) {
      // It is a cat! Do something
    } else {
      // It is not a cat, do something else
    }

Этот оператор возвращает true, если ваш объект имеет данный тип или его подтип. В противном случае возвращается false.

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

Spring MVC: создание веб-сайтов и RESTful сервисов

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

Вы можете использовать эту статью, чтобы понять, как использовать Spring MVC для создания веб-сайтов или RESTful сервисов. А также получить обзор часто задаваемых вопросов, охватывающих наиболее распространенные задачи Spring MVC.


Примечание: Статья ~ 7500 слов, вероятно, не стоит читать ее на мобильном устройстве. Добавьте ее в закладки и вернитесь позже.


Содержание


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

Беги, муравей. Беги

Время на прочтение16 мин
Охват и читатели23K
В данной статье рассматривается процесс создания имитационной модели поведения муравьиной колонии (можно почитать в википедии ) в среде имитационного моделирования «AnyLogic». Данная статья носит практический характер. В ней будет рассмотрен вопрос применения муравьиного алгоритма для решения задачи о коммивояжёре (Почитать можно тут).



Кратко о сути


Суть задачи коммивояжере заключается в том, что коммивояжер (продавец) должен посетить N городов побывав в каждом из них только один раз по наикратчайшему маршруту. Так как данная задача является NP-сложной и количество вариантов всех возможных маршрутов между N городами вычисляется как «N!», то время поиска кратчайшего маршрута будет увеличиваться по экспоненциальному закону с увеличением значения N. Соответственно время поиска кратчайшего маршрута(решения) с использованием алгоритма «полного перебора» (который дает точное решение) при количестве городов N>16 резко увеличивается (носит экспоненциальный характер). Поэтому мы будем искать не самый короткий по протяженности маршрут, а близкий к нему (рациональный) за конечное время с помощью «муравьиного алгоритма».
Читать дальше →

Онлайн-встреча JUG.ru «Spring-построитель» с Евгением Борисовым

Время на прочтение1 мин
Охват и читатели3.7K
11 мая в 17:00 состоится онлайн-встреча «Spring-построитель» с экспертом по Spring Евгением Борисовым, который начал писать на Java еще в 2001 году и сейчас проводит тренинги по всему миру. Он расскажет, как перестать потрошить Spring и создать его самому.



Под катом — все детали и ссылка на регистрацию.
Читать дальше →