Обновить
128K+

Java *

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

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

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

Время на прочтение16 мин
Охват и читатели5.1K
Доброго времени суток, Хабр.

Приходилось ли вам задумываться как поменять время внутри базы данных? Легко? Ну в некоторых случаях да, несложно — linux команда date и дело в шляпе. А если нужно поменять время только внутри одного экземпляра бд если их на сервере несколько? А для отдельно взятого процесса базы данных? А? Эээ, так-то, дружок, в этом-то все и дело. Кто-то скажет, что это очередной сюр, не связанный с реальностью, который периодически выкладывают на Хабре. Но нет, задача вполне реальная и продиктована производственной необходимостью — тестированием кода. Хотя соглашусь, кейс тестирования может быть достаточно экзотический — проверить как ведет себя код на определенную дату в будущем. В данной статье я рассмотрю подробно как эта задача решалась, и заодно захватим немного сам процесс организации тестовых и dev-стендов для базы Oracle. Впереди длинное чтиво, устраивайтесь поудобнее и прошу под кат.
Читать дальше →

Торговля с помощью протокола FIX. Часть первая: настройка тестового окружения

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


В этом цикле статей создадим окружение для работы с тестовой биржей и обмена сообщениями с ней, разберёмся с основными биржевыми терминами и закрепим знания на практике.


UPD: Основная цель этого цикла статей — комплексно рассмотреть устройство биржи и базовые понятия (сделки, фьючерсы и т.д) в рамках работы с протоколом FIX. Здесь не будет привязки к какой-то конкретной бирже, будем использовать готовый пример сервера (симулятор биржи) и в дальнейшем реализуем клиента, которого можно будет доработать для взаимодействия с интересной вам реальной биржей.


Для настройки всего необходимого понадобятся лишь базовые знания в программировании и умение пользоваться Git-ом.

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

Project Loom: виртуальные потоки в Java уже близко

Время на прочтение4 мин
Охват и читатели23K
Несколько дней назад Ron Pressler разродился статьей State of Loom, которую не полайкал только самый ленивый джавист. Статья действительно хорошая, в ней много интересных метафор, которые я собираюсь бессовестно использовать теперь без ссылки на первоисточник.

Со своей стороны я неосторожно позволил высказать некоторый скептицизм, когда же с этим Project Loom можно будет наконец-то реально поработать. Спустя буквально час прилетела ответочка от самого Ron'а — «а ты попробуй!». Что ж, пришлось пробовать.
Читать дальше →

Компилируем Spring Boot-приложение в нативное с помощью GraalVM

Время на прочтение10 мин
Охват и читатели9.8K
Перевод статьи подготовлен в преддверии старта курса «Разработчик на Spring Framework».





Привет, любители Spring’а! Добро пожаловать в очередной выпуск Spring Tips. Сегодня мы поговорим о недавно реализованной поддержке компиляции Spring Boot-приложений в GraalVM. Мы уже говорили о GraalVM и нативных приложениях в другом выпуске Spring Tips в теме про Spring Fu.



Немного вспомним, что такое GraalVM. GraalVM — замена стандартного компилятора C1 в OpenJDK. Подробнее об использовании GraalVM вы можете послушать в моем подкасте Bootiful Podcast с Крисом Талингером (Chris Thalinge) — контрибьютором GraalVM и инженером Twitter. При определенных условиях GraalVM позволяет быстрее запускать обычные Spring-приложения и, хотя бы по этой причине, он заслуживает внимания.

Исследование Курса по Реактивной Архитектуре: Открытия и Впечатления

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

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



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


Особо интересны два кейса из курса:


  • В первом случае рассматривается управление персоналом в ресторане, что демонстрирует принцип эластичности — один из ключевых аспектов реактивных систем.
Читать дальше →

Подробно о пакете Provider для Flutter

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

В наших среднесрочных планах — выход книги по Flutter. Относительно языка Dart как темы мы пока занимаем более осторожную позицию, поэтому попробуем оценить ее актуальность по результатам этой статьи. Речь в ней пойдет о пакете Provider и, следовательно, об управлении состоянием в Flutter.
Читать дальше →

Скриптовый язык JavaPath для доступа к сложным структурам данных

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

В статье рассматривается декларативный скриптовый язык JavaPath как альтернатива использованию Java Reflection и способ избежать "сервисного ада" в обособленных приложениях использующих сложные структуры данных.


Описание проблемы


Рассмотрим глубоко вложенную структуру


class A{
   B b;
}
class B{
   C c;
}
class C{
   String name;
}

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


private A a;
public void setNameService(String name) {
    a.b.c.name = name;
}

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


private A a;
public void setNameService(String name) {
    if(a == null) {
        a = new A();
    }
    if(a.b == null) {
        a.b = new B();
    }
    if(a.b.c == null) {
        a.b.c = new C();
    }
    a.b.c.name = name;
}
Читать дальше →

Максимальное количество значений в enum Часть II

Время на прочтение21 мин
Охват и читатели4.5K
Часть первая, теоретическая | Часть вторая, практическая



Продолжаем поиск максимального возможного количества значений в перечислении.
На этот раз сосредоточимся на практической стороне вопроса и посмотрим, как на наши достижения будут реагировать IDE, компилятор и JVM.
Читать дальше →

CI TeamCity — Автоматизация build процессов Android и UI тестирования

Время на прочтение6 мин
Охват и читатели8.1K
В этой статье предлагаю Вашему вниманию инструкцию по установке и настройке TeamCity для автоматизации сборки и тестирования Android проектов под Windows.

Также буду уделять внимание особенностям настройки environment’а под Android проект (которые находил в процессе исследования) и различного рода вещам, которые могут помочь облегчить жизнь начинающему тестировщику и разработчику.

Цели:


При обновлении кода проекта должно происходить:

  • Автоматическая сборка проекта
  • Прогон UI автотестов
  • Экспорт APK файлов debug и release для последующего ручного тестирования
  • Уведомление всех участников команды разработки о результатах

План:


  1. Установка и настройка Java JDK
  2. Установка и настройка Android SDK
  3. Установка отдельного Gradle для дебага
  4. Подготовка Android проекта
  5. Установка TeamCity Server и Build Agent
  6. Настройка TeamCity Project → Build для билда проекта и получения установочного APK
  7. Настройка build steps c UI автотестами
Читать дальше →

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

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

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


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


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


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


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

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

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

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

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


Материал изложен максимально доступно, однако, будет значительно проще понять о чем здесь идет речь, если Вы будете иметь хотя бы минимальные представления о языке 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 мин
Охват и читатели9.2K
Всем привет. На связи Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

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




Введение


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

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

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

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


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 мин
Охват и читатели32K

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


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




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


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


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