Как стать автором
Обновить
0
0
Anton Szyko @AntonSz

Java Developer

Отправить сообщение

Подробное руководство по инверсии зависимостей. Часть 1

Время на прочтение26 мин
Количество просмотров22K

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

Читать далее
Всего голосов 7: ↑5 и ↓2+7
Комментарии134

Архитектура приложений Web 3.0

Время на прочтение11 мин
Количество просмотров21K

Архитектура приложений Web 3.0 (или «DApps») полностью отличается от приложений Web 2.0. 

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

Как приложение Web 2.0 это может показаться простым, но в архитектуру Medium входит многое, чтобы сделать все это возможным:

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

Во-вторых, бэкэнд (написанный на таком языке, как Node.js, Java или Python) должен определять бизнес-логику Medium. Например, что происходит, когда новый пользователь регистрируется, публикует новый блог или комментирует чей-то еще блог? 

В-третьих, фронтэнд (обычно написанный на JavaScript, HTML и CSS) должен определять логику пользовательского интерфейса Medium. Например, как выглядит сайт и что происходит, когда пользователь взаимодействует с каждым элементом на странице?

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

Читать далее
Всего голосов 12: ↑7 и ↓5+3
Комментарии12

Глубокое погружение в Java Memory Model

Время на прочтение53 мин
Количество просмотров158K


Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.


В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.

Читать дальше →
Всего голосов 109: ↑109 и ↓0+109
Комментарии60

Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana

Время на прочтение37 мин
Количество просмотров96K

Туториалы делятся на две больших категории: либо "как нарисовать сову", либо подробно расписанные тысячи шагов в формате "напиши туториал для дурака - и только дурак захочет его читать".

Как какой из двух категорий относится эта статья — решать вам.

В этой статье вы увидите пошаговое создание cloud-native микросервиса на Amazon AWS, пригодное для "чтения с листа". Чтобы понять, что здесь происходит, не нужно разворачивать проект - достаточно обладать живым воображением и прочитать текст по диагонали. Если же вы всё-таки захотите повторить шаги, вам будут жизненно нужны знания вида, как создавать классы в IDE и что такое Spring.

Вначале мы напишем пару простых микросервисов на Spring Boot, докеризуем их, зальём в AWS, настроим красивые доменные имена и HTTPS, прикрутим логирование и мониторинг, Prometheus и Grafana. Это небольшое путешествие по всем кругам ада, из которого вы не вернетесь прежним.

Текст написан на основе текстов и демо-проекта microservice-customer за авторством @kamaruzzaman. Если вы потеряли нить повествования, всегда можно зайти на GitHub и найти весь код в пригодном для запуска виде. Если захочется закопаться в тему, то бро Дима Чуйко (@Teapot) написал вам ещё две части статьи "Микросервисы: от CRUD до Native Image" (раз, два).

Последняя важная оговорка. В этом гайде будут использоваться технологии Amazon и обычные дистрибутивы OpenJDK. Автор осознает, что мы живём в России, и возможно, вместо Amazon куда лучше подойдет что-то вроде SberCloud или MTS Cloud, а вместо обычного OpenJDK - Axiom JDK с сертификацией по ФСТЭК. Особенности российских технологий - тема для отдельной статьи. Если вы захотите таковую после чтения этого гайда - отметьтесь в комментариях.

Читать далее
Всего голосов 66: ↑65 и ↓1+83
Комментарии27

Spring Test Containers как бины

Время на прочтение9 мин
Количество просмотров15K

TestContainers это отличный инструмент, позволяющий тестировать свой код в prod-like окружении.

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

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

Достигнем этого при помощи кастомизации тестового контекста + всеми любимого BeanFactoryBostProcessor'а.

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии11

Пишем свой Validation API для Spring Boot приложения

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

Добрый день, уважаемый читатель Хабра! Меня зовут Вартанян Артур и я работаю в компании Reksoft Java-разработчиком. В данной статье мы напишем свой собственный вариант реализации валидации для объектов и его полей, используя Java Reflection Api и Spring AOP.

Читать далее
Всего голосов 8: ↑5 и ↓3+2
Комментарии9

Асинхронное взаимодействие Spring-микросервисов с помощью Kafka

Время на прочтение7 мин
Количество просмотров23K

В этой статье разберемся, как реализовать обмен сообщениями между Java-микросервисами на Spring с помощью Kafka.

Читать далее
Всего голосов 8: ↑5 и ↓3+2
Комментарии2

Полезные и неизвестные возможности Java

Время на прочтение7 мин
Количество просмотров24K

В этой статье вы узнаете о некоторых полезных функциях Java, о которых вы, вероятно, не слышали. 

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

Я сосредоточусь не на языковых аспектах, а на API. Я уже опубликовал все примеры, относящиеся к этой статье, в Твиттере в форме, показанной ниже. Вы также можете найти их в моей учетной записи Twitter или просто под #javaхэштегом.

Читать далее
Всего голосов 39: ↑39 и ↓0+39
Комментарии9

Да что это такое, ваше качество кода?

Время на прочтение5 мин
Количество просмотров8K

Салют, коллеги.

Лично я, очень люблю поговорить про качество, поддерживаемость и выразительность кода (эти умные слова, часто звучат на код ревью)

К сожалению, такие разговоры часто и быстро скатываются в холивар. Но, кажется, я нашел способ "вести разговоры о высоком без боли".

Мысль такая, если приземлить обсуждение на конкретную практическую задачу, то будет сильно проще понять, какой именно смысл вкладывает в слово "выразительность" собеседник. 

Читать далее
Всего голосов 10: ↑9 и ↓1+11
Комментарии38

Как справиться с Debezium + MySql + Spring Could Streams, Part 1

Время на прочтение5 мин
Количество просмотров6.6K

Добрый день, Хаброжители!

Это моя первая статья на Хабре, любые замечания, предложения, пожелания приветствуются!

В этой статье (часть 1), я попытаюсь рассказать и показать как поднять и настрить stand along Debezium CDC + MySql server.

Читать далее
Всего голосов 5: ↑4 и ↓1+7
Комментарии9

Понимание утечек памяти в Java

Время на прочтение11 мин
Количество просмотров42K

Одним из основных преимуществ Java является автоматизированное управление памятью с помощью встроенного сборщика мусора (или сокращенно GC). GC неявно заботится о выделении и освобождении памяти и, таким образом, способен решать большинство проблем, связанных с ее утечкой.

Хотя GC эффективно обрабатывает значительную часть памяти, он не гарантирует надежного решения проблемы с ее утечкой. GC достаточно умен, но не безупречен. Утечки памяти все еще могут закрасться даже в приложения, созданные добросовестным разработчиком.

По-прежнему возможны ситуации, когда приложение создает значительное количество лишних объектов, расходуя ресурсы памяти, что иногда приводит к его полному отказу.

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

Читать далее
Всего голосов 13: ↑11 и ↓2+9
Комментарии21

За двумя зайцами погонишься — чеклист для HighLoad системы гуглить будешь

Время на прочтение11 мин
Количество просмотров15K

Эта статья будет полезна, если вы начинаете проект, который может перерасти в HL (HighLoad) или у вас уже есть проект, который имеет высокую нагрузку. Каждый пункт этого чек-листа поможет избежать определенных проблем, возникающих в процессе эксплуатации таких систем. И хотя некоторые пункты могут показаться довольно очевидными, а иные даже лишними, я рекомендую ознакомиться со всем списком, т.к. судя по статьям на хабре, периодически с некоторыми из этих проблем встречаются компании, которые уже обрели некоторую популярность. Дополняя систему каким то компонентом довольно просто забыть о таких вещах, как KeepAlive между двумя сервисами, а процессы изменения и дополнения в IT происходят постоянно.

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

Ознакомиться с чек-листом
Всего голосов 42: ↑42 и ↓0+42
Комментарии12

Сравнение подходов к реализации распределенных транзакций для микросервисов

Время на прочтение21 мин
Количество просмотров43K

Как архитектор-консультант в Red Hat, я имел возможность поработать над множеством проектов для наших клиентов. У каждого из них есть свои особенности, которые, однако, имеют некоторые общие черты. Большинство клиентов хотят знать, как скоординировать запись в несколько систем одновременно. Ответ на этот вопрос обычно включает подробное объяснение двойной записи, распределенных транзакций, современных альтернатив, а также возможных сценариев сбоев и недостатков каждого подхода. Как правило, именно в этот момент заказчик понимает, что разделение монолитного приложения на микросервисы - долгий и сложный путь, обычно требующий компромиссов.

Читать далее
Всего голосов 36: ↑36 и ↓0+36
Комментарии9

Gradle: управляя зависимостями

Время на прочтение10 мин
Количество просмотров132K
Управление зависимостями – одна из наиболее важных функций в арсенале систем сборки. С приходом Gradle в качестве основной системы сборки Android-проектов в части управления зависимостями произошёл существенный сдвиг, закончилась эпоха ручного копирования JAR-файлов и долгих танцев с бубном вокруг сбоящих конфигураций проекта.



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

Внимание много текста и изображений
Всего голосов 22: ↑20 и ↓2+18
Комментарии60

Spring Data: нюансы @Transactional

Время на прочтение7 мин
Количество просмотров40K

Любите Spring? А Spring Data? Я тоже люблю. Если хотите разобраться, почему же возникает этот unexpected transaction rollback, а также быть уверенным, что транзакция отменится, а не закоммитится, добро пожаловать под кат.

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии8

Spring Boot + ControllerAdvice + ResponseBodyAdvice или как обернуть ответ контроллеров

Время на прочтение10 мин
Количество просмотров29K

Всем привет, друзья! Сегодня хочу рассказать про способ использование Controller Advice для оборачивания объекта, возвращаемого контроллерами, в новый класс на уровне DispatcherServlet.

Читать далее
Всего голосов 6: ↑5 и ↓1+7
Комментарии6

Как проходят архитектурные секции собеседования в Яндексе: практика дизайна распределённых систем

Время на прочтение25 мин
Количество просмотров143K
Привет, меня зовут Костя Кардаманов, я работаю в отделе технологий разработки Яндекса. Обычно такой же фразой я приветствую и кандидатов на собеседовании. А сегодня я хотел бы рассказать вам, как и зачем мы проводим интервью по дизайну систем с бэкенд-разработчиками. Сразу скажу: для фронтендеров, мобильных разработчиков и ML-инженеров подобный тип собеседований применим слабо, так что эти специальности мы здесь обсуждать не будем.

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

Что такое дизайн информационных систем


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

Опытный читатель может сказать — в мире полно платных и бесплатных решений, из которых я могу собрать систему как из деталей конструктора, зачем мне понимать устройство этих деталей?
Читать дальше →
Всего голосов 67: ↑65 и ↓2+90
Комментарии37

Применение интерфейса Collector для работы с потоками в реальных Java-проектах

Время на прочтение5 мин
Количество просмотров13K
Автор статьи, перевод которой мы публикуем сегодня, хочет рассказать о том, как интерфейс Collector и сопутствующие механизмы используются в реальных проектах.

В Java-программировании при работе с потоками широкое применение находят методы класса Collectors. Эти методы позволяют возвращать либо объекты, в основе которых лежит базовый класс Collection, либо — скалярные значения. В первом случае, то есть — для возврата коллекций, применяют один из методов, имя которого выглядит как toXXX(), а во втором случае используется, например, метод reducing().

Представим себе интернет-магазин, в котором есть корзина. Модель корзины выглядит так, как показано ниже.


Модель корзины

Если перевести эту диаграмму классов в код, опустив некоторые детали, то получится следующее.
Читать дальше →
Всего голосов 26: ↑25 и ↓1+37
Комментарии3

Linux-дистрибутивы для анонимной работы в интернете — что нового?

Время на прочтение7 мин
Количество просмотров51K


Самый известный из секьюрных дистрибутивов — Tails, он выпускается с 2009 года. Там всё привычно и знакомо: вставил флэшку, загрузился, поработал, почистил RAM за собой. При этом периодически появляются альтернативные решения, такие как Whonix, Qubes OS или совсем новый дистрибутив Obscurix.

Личная безопасность — не та сфера, где следят за модой. Это не какое-то хобби, мобильная разработка или дизайн, здесь речь о сохранении жизни и свободы. Нововведения — не дань эстетике или комфорту, а попытка обеспечить ещё более надёжную защиту.
Всего голосов 43: ↑43 и ↓0+43
Комментарии19

1000 и 1 способ сесть на мель в Spring WebFlux при написании высоконагруженного сервиса

Время на прочтение8 мин
Количество просмотров13K

Источник изображения: Shutterstock.com/photowind

Добрый день, меня зовут Тараканов Анатолий, я senior java разработчик SberDevices. 2.5 года программирую на Java, до этого 6 лет писал на C# и 1 год на Scala. Хочу поделиться опытом создания сервиса-оркестратора Voice Processing Service. Он является точкой входа для пользователей семейства виртуальных ассистентов Салют. Через него также проходит часть трафика приложений SmartMarket, где любой разработчик может написать навык для наших виртуальных ассистентов Салют.

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

Немного о сервисе


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

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

Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии12

Информация

В рейтинге
Не участвует
Откуда
London, England - London, Великобритания
Дата рождения
Зарегистрирован
Активность