Распределение нагрузки с помощью NGINX в Spring Boot

Принцип распределения нагрузки с помощью NGINX Данная статья описывает схему построения среды для развертывания приложения написаного на Spring Boot. Как известно Java application севера довольно плохо подходят для задачи распределения нагрузки. Особенно это актуально если нужно передавать статические данные(файлы стилей, картинки и другие). Поэтому для этих целей используются более быстрые и легкие сервера способные при минимальных нагрузках выдавать хорошую производительность. Одним из таких серверов является NGINX. Кеширование запросов В приведенном ниже примере система анализирует расширение запрашиваемого файла и если это один из нужных форматов кеширует данные. Минусом данной реализации является…

Read More

Обзор работы с опционалами (Optional Java)

Java Optional — представляет собой контейнер объект, который может или нет содержать не null значение. Если значение присутствует isPresent возвращает true в противном случае будет возвращено значение false и объект будет считаться пустым.  Ранее мы мы писали о immutable объектах, которые также используются под капотом опционалов. Инициализация java 8 optional Опционал может быть инициализирован с помощью статического конструктора следующим образом Если передать в подобный конструктор значение null возникнет java.lang.NullPointerException. Для безопасной передачи пустого значения можно воспользоваться методом ofNullable. Изящная Java проверка на null (java null check). В старом коде можно…

Read More

Разновидности юнит тестов (unit testing). Основательный подход.

Я тестирую на продакшене

На сегодняшний день сложно найти приложение, реализуемое без предварительного тестирования. Поэтому, аналитическая проверка программного обеспечения — это одна из наиболее актуальных тем для сложных, масштабируемых систем. Без понимания того, как работает unit-тестирование, включая понятия и основные показатели, команда не сможет создавать сложные и динамически меняющиеся системы. Разновидности тестирования Юнит тестирование в программировании — это определенный метод изучения внутренних процессов деятельности программной системы через создание определенных условий для выбранного функционала. Далее система проверяется на те или иные выводы данных или функционал, исходя из конкретных целей и задач. Это позволяет эффективно отследить…

Read More

Лямбда выражения в Java. Сравнение подходов решения задач.

lambda

В версию Java 8 была добавлена полноценная поддержка лямбда-выражений — специализированного синтаксиса, позволяющего определить функциональные объекты из формальной системы исчислений λ. Являясь упрощенным вариантом записи безымянных классов, лямбда в Java дает возможность писать более аккуратный и лаконичный программный код для библиотеки Stream API и утилитарного класса Optional. Помимо стандартных коллекций классов, лямбда выражения Java могут использоваться сторонними API: реактивные стримы, JavaFX и т.д. Определение функциональных интерфейсов и лямбда-выражений Лямбда выражения в Java представляют собой специализированный синтаксис записи безымянного класса, с помощью которого реализуется основной функциональный интерфейс. Функциональный интерфейс, встроенный в…

Read More

30 лучших онлайн курсов Java программирования

dual-screen

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

Read More

Базовый функционал класса Timer в Java. Примеры использования.

Java timer

Классы java.util.Timer и java.util.TimerTask являются стандартными классами для имплементации задачи и планирования ее выполенения.  Класс Timer в Java предназначен для того, чтобы запускать задачу единожды или с определённой цикличностью. Класс TimerTask является абстрактным и поэтому нуждается в определённой имплементации. В свою очередь он имплементирует интерфейс Runnable, предоставляя дополнительные возможности многопоточности. Унаследовавшись от класса TimerTask мы должны создать свой объект задачи. Принцип работы Как уже было сказано выше, Timer в Java — служебный класс, который выполняет в системе определенную роль, а именно запуск программных процессов по своему расписанию. Он запускает определенный…

Read More

Класс Scanner в Java — обзор с примерами использования

business

Основная задача класса Scanner в Java состоит в том, чтобы сканировать полученные данные. Источники этих данных могут быть самые разнообразные, файлы, ввод с консоли или даже строки. Базовый функционал класса легко умеет отделять такие примитивные типы как byte, short, float, String и другие. Сканирование происходит при помощи поиска разделителя или так называемоего токена. Также в дело могут быть применены регулярные выражение, для которых в классе Scanner существуют определенные методы. Токен может быть представлен любым из символом: пробел, табуляция или любым другим символом. Также и разделитель строк зачастую представлен символом перевода…

Read More

Обзор структуры JVM. Принципы распределения памяти.

Java Virtual Machine

Как известно JVM очень сильно упрощает и автоматизирует работу с памятью. В Java программах программист просто объявляет переменные, даже не беспокоясь о том, как занятая память будет освобождена. Хотя в некоторых случаях случайным образом можно добиться утечки памяти, где программа просто начнёт пожирать память большими объемами, однако в большинстве случаев все происходит автоматически и без проблем. Типы распределения памяти Если говорить в общем, JVM распределяет память на стек (stack) и хип (heap). У каждой программы на Java есть как минимум один родительский процесс, где в каждом процессе располагается обязательно один…

Read More

Immutable объекты в Java. Назначение и использование.

Stonehenge

Что такое immutable объекты в Java Это многофункциональные immutable (неизменяемые) объекты, которые можно применять в разных частях программы. Например, это могут быть неизменяемые объекты в многопоточной среде для работы с данными. Также это могут быть сложные константы, которые помогают избежать излишнего использования памяти и перегрузки сборщика мусора (garbage collector). Отдельно стоит упомянуть иммутабельность при работе с коллекциями. Основные параметры имутабельных классов (immutable classes) Для того чтобы сказать, что класс является immutable (неизменяемым) он должен соотвествовать следующим критериям: Не предоставляйте методы, которые модифицируют состояние объекта. Такие методы могут напрямую модифировать состояние…

Read More

Обзор класса String в Java. Детальное рассмотрение функционала.

String coffee

В данной статье будут рассмотрены базовые функции по работе со строками. Где будет объснено назначения класса String в Java, сложение, сравнение, поиск и другой функционал связанный со строками. Назначение класса String в Java Класс String, в первую очередь, предназначен для работы со строками. Ранее мы рассматривали, что в Java существуют строковые литералы и строковые объекты. Давайте рассмотрим основные особенности класса String: Класс имеет immutable состояние. Это означает, что после создания, каждый раз модифицируя его мы будет получать не модифицированный класс, а новую копию. В свою очередь, чтобы избежать излишнего использования…

Read More