Pull to refresh
-1
0
Send message

Spring Cache: от подключения кэширования за 1 минуту до гибкой настройки кэш-менеджера

Reading time12 min
Views120K
Раньше я боялся кэширования. Очень не хотелось лезть и выяснять, что это такое, сразу представлялись какие-то подкапотные люто-энтерпрайзные штуки, в которых может разобраться только победитель олимпиады по математике. Оказалось, что это не так. Кэширование оказалось очень простым, понятным и невероятно лёгким во внедрении в любой проект.



В данном посте я постараюсь объяснить о кэшировании так же просто, как это сейчас понимаю я. Вы узнаете о том, как внедрить кэширование за 1 минуту, как кэшировать по ключу, устанавливать время жизни кэша, и многие прочие штуки, которые необходимо знать, если Вам поручили закэшировать что-то в вашем рабочем проекте, и Вы не хотите ударить в грязь лицом.
Читать дальше →

[По полочкам] Кэширование

Level of difficultyEasy
Reading time12 min
Views76K

Всем привет! Меня зовут Илья Денисов, я занимаюсь backend разработкой уже более пяти лет и сейчас пишу на языке go. Сегодня я предлагаю вам поговорить о кэшировании. Постараюсь рассказать о базовых концепциях, а также затронуть ряд особенностей, неочевидных на первый взгляд.

Читать далее

Проектирование эффективной системы кэширования

Reading time9 min
Views6.2K

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

Читать далее

Ещё раз о пропертях или откуда что берётся

Level of difficultyMedium
Reading time8 min
Views18K

О чём вообще речь?

Всем привет! В данной статье речь пойдёт о настраиваемых параметрах конфигурации Spring приложений. Когда я только начал изучать Spring, естественно, одним из источников знаний были готовые примеры, проекты-образцы. И меня жутко бесило, что какие-то нужные для работы приложения значения появлялись «ниоткуда». К примеру, автор какого-нибудь туториала предлагал для проверки только что созданного учебного приложения зайти на localhost по порту 8088. Откуда берётся 8088? Почему не 8089? Оказалось, что для таких настраиваемых параметров есть специальные файлы. Итак:

Какие бывают настраиваемые параметры?

Настраиваемые параметры используются самим Spring-ом, различными библиотеками и, по желанию разработчика, могут быть добавлены свои собственные. Список всех параметров Spring-а можно посмотреть здесь.

Например, за то на каком порту будет крутиться встроенный http-сервер (если мы используем Spring Web) отвечает параметр server.port. В том самом туториале из вступления в соответствующем файле server.port был равен 8088. Выглядит это (в простейшем случае) так:

server.port=8088

Имя параметра может состоять (и, как правило, состоит) из нескольких частей. Например, все «спринговые» параметры начинаются со слова «spring». Кастомные (пользовательские) параметры, введённые разработчиком конечного приложения, могут начинаться, например со слова application или любого другого. В зависимости от используемого формата файла, части разделяются по-разному (см. следующий раздел). Простейший вариант, просто точками. Пример пользовательских параметров:

Читать далее

Лучшие практики создания отказоустойчивых систем

Level of difficultyMedium
Reading time23 min
Views9.9K

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

Особое внимание уделяется методам повышения надёжности при временных сбоях, включая: повторные попытки выполнения операций с экспоненциальной задержкой (exponential backoff), использование шаблона circuit breaker, механизмы плавной деградации функциональности (graceful degradation), задание таймаутов, реализация идемпотентности, ограничение одновременных вызовов (bulkhead isolation), а также внедрение систем мониторинга и алертинга. Приводимые примеры охватывают типовые сценарии — обращение к внешним API, взаимодействие с базами данных и выполнение фоновых задач.

Читать далее

Разбор основных концепций параллелизма

Reading time17 min
Views75K
Всем кофе!

Завтра у нас плавненько стартует практически юбилейный поток курс «Разработчик Java» — уже шестой по счёту начиная с апреля прошлого года. А это значит, что мы снова подобрали, перевели интереснейший материал, которым делимся с вами.

Поехали!

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

РАЗДЕЛ 1

Вступление

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

РАЗДЕЛ 2

Концепции

Концепция Описание
Atomicity (атомарность) Атомарная операция — это операция, которая выполняется полностью или не выполняется совсем, частичное выполнение невозможно.
Visibility (видимость) Условия, при которых один поток видит изменения, сделанные другим потоком

Таблица 1: Концепции параллелизма

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

Kafka за 20 минут. Ментальная модель и как с ней работать

Level of difficultyMedium
Reading time19 min
Views174K

Привет! Меня зовут Глеб Гончаров, и я руковожу подгруппой ИТ-инфраструктуры в СберМаркете. В работе мы широко используем Kafka как шину данных для микросервисов и не раз убедились на практике, что к инструменту важно подобрать правильный подход. Об этом сегодня и поговорим в двух частях — сначала обсудим основы, а в конце статьи будет ссылка на практические задания.

Читать далее

Оптимистические и пессимистические блокировки на примере Hibernate (JPA)

Level of difficultyEasy
Reading time4 min
Views10K

Привет, Хабр! Недавно пытался изучить тему «оптимистические» и «пессимистические» блокировки, но на мое удивление ни в ру сегменте, ни в англ — хороших статей, которые дают полное представление об двух типах блокировок с применением Hibernate, — нет, поэтому я решил агрегировать всю информацию в одной короткой статье. Так как это моя первая статья, буду рад критике:) Итак, погнали.

P. S. Это статья не является полным гайдом, так как в первую очередь она нацелена на то, чтобы дать понятное описание двух решений одной проблемы, а если нужны примеры использования, то добро пожаловать в Google:)

Читать далее

Жизненный цикл бина в Spring

Level of difficultyEasy
Reading time4 min
Views8.3K

Если нужно быстро освежить память о жизненном цикле бина в Spring, эта шпаргалка для вас. Здесь коротко и по делу: ключевые этапы — создание, внедрение зависимостей, инициализация, пост-процессинг и уничтожение. Разберем их на понятных примерах, без лишней воды.

Читать далее

Java HotSpot JIT компилятор — устройство, мониторинг и настройка (часть 2)

Reading time11 min
Views9.6K

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

Читать далее

Java HotSpot JIT компилятор — устройство, мониторинг и настройка (часть 1)

Reading time8 min
Views40K
JIT (Just-in-Time) компилятор оказывает огромное влияние на быстродействие приложения. Понимание принципов его работы, способов мониторинга и настройки является важным для каждого Java-программиста. В цикле статей из двух частей мы рассмотрим устройство JIT компилятора в HotSpot JVM, способы мониторинга его работы, а также возможности его настройки. В этой, первой части мы рассмотрим устройство JIT компилятора и способы мониторинга его работы.
Читать дальше →

Большой обзор PIM-систем, актуальных для России

Level of difficultyEasy
Reading time15 min
Views14K

Что такое PIM-система и зачем она нужна?

Product information management system (PIM-система) — система для централизованного управления данными о товарах, которая является неотъемлемой для интернет-магазинов и других форм электронной коммерции.

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

Но цифровизация цифровизации рознь. Переход с бумажной ведомости в excel или google таблицу - тоже можно назвать словом на букву «Ц» , что упрощает совместную работы. Следующий шаг в цифровой трансформации - использование не универсальных, а специально созданных для этого инструментов.

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

Рассмотрим типичные сценарии использования PIM-систем:

Читать далее

Понимаем красно-черное дерево. Часть 1. Введение

Reading time5 min
Views50K

Довольно долгое время я воевал с красно-черным деревом. Вся информация, которую я находил, была в духе "листья и корень дерева всегда черные, ПОТОМУ ЧТО", "топ 5 свойств красно-черного дерева" или "3 случая при балансировке и 12 случаев при удалении ноды". Такой расклад меня не устраивал.

Мне не хотелось заучивать свойства дерева, псевдокод и варианты балансировки, я хотел знать: почему. Каким образом цвета помогают при балансировке? Почему у красной ноды не может быть красного потомка? Почему глубину дерева измеряют "черной высотой"?

Ответы на эти вопросы я получил только тогда, когда мне дали ссылку на лекцию про два-три дерево, с которого мы и начнем.

Эта статья разделена на 3 логические части. Я рекомендую прочитать их в указанном порядке. Первая часть (данная) будет направлена на введение в кчд и знакомство с ним. Во второй части мы поговорим о балансировке и вставке в кчд. В третьей, завершающей, части мы разберем процесс удаления ноды. Наберитесь терпения и приятного чтения.

Читать далее

Можно ли спасти LinkedList? Пишем быстрый List на связном списке

Level of difficultyEasy
Reading time5 min
Views3.2K

Существует мнение, что LinkedList - неудачная коллекция и всегда и везде лучше использовать ArrayList. И так оно и есть =)

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

Читать далее

Надежный обход блокировок в 2024: протоколы, клиенты и настройка сервера от простого к сложному

Level of difficultyMedium
Reading time46 min
Views326K

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

Вы, наверняка, помните отличный цикл статей на Хабре в прошлом году от пользователя MiraclePtr, который рассказывал о разных методах блокировок, о разных методах обхода блокировок, о разных клиентах и серверах для обходов блокировок, и о разных способах их настройки (раз, два, три, четыре, пять, шесть, семь, восемь, десять, десять, и вроде были еще другие), и можете спросить, а зачем еще одна? Есть две основные причины для этого.

Читать далее

Все, что нужно знать для разработки с использованием LLM

Level of difficultyMedium
Reading time11 min
Views48K

Цель данной статьи — простым языком объяснить ключевые технологии, необходимые для начала разработки приложений на основе LLM. Oна подойдёт как и разработчикам, так и специалистам по машинному обучению, у которых есть базовое понимание концепций и желание заглянуть поглубже. Также я прикрепил множество полезных ссылок для дальнейшего изучения. Давайте начинать!

Читать далее

Как дообучать LLM с помощью Supervised Fine-Tuning

Reading time15 min
Views13K

Обычно большие языковые модели (large language model, LLM) обучают в несколько этапов, включающих предварительное обучение и множество этапов fine-tuning (см. ниже). Предварительное обучение — это дорогостоящий процесс (например, требующий многих сотен тысяч долларов на вычислительные ресурсы), однако fine-tuning модели LLM (или контекстное обучение) по сравнению с этим гораздо дешевле (например, сотни долларов или даже меньше). Учитывая широкую доступность и бесплатность (даже для коммерческого использования) предварительно обученных LLM (например, MPT, Falcon или LLAMA-2), мы можем создавать большой спектр мощных приложений благодаря fine-tuning моделей под нужные задачи.


Этапы обучения LLM

На текущем этапе исследований ИИ одним из самых широко применяемых видов fine-tuning моделей LLM стал supervised fine-tuning (SFT). При этой методике курируемый датасет высококачественных выходных данных LLM применяется для непосредственного fine-tuning модели. SFT прост и дёшев в использовании, это полезный инструмент выравнивания языковых моделей, ставший популярным даже за пределами исследовательского сообщества опенсорсных LLM. В этой статье мы вкратце расскажем о принципах SFT, рассмотрим исследования по этой теме и приведём примеры того, как практикующие специалисты могут с лёгкостью пользоваться SFT, написав всего несколько строк кода на Python.
Читать дальше →

Разработка эффективных агентов с помощью Spring AI (Часть 1)

Level of difficultyEasy
Reading time8 min
Views3.5K

Команда Spring АйО перевела статью, в которой рассказывается про разработку эффективных агентов с помощью Spring AI. Исследование Anthropic "Building effective agents" подчеркивает важность простоты и модульности в разработке LLM-агентов.

В статье рассматривается, как эти принципы реализуются в Spring AI через пять ключевых паттернов: Chain Workflow, Parallelization Workflow, Routing Workflow, Orchestrator-Workers и Evaluator-Optimizer.

Читать далее

Что вам нужно знать об ИИ-агентах

Level of difficultyEasy
Reading time5 min
Views9.2K

Хотите узнать, что такое агент ИИ и как можно использовать ИИ для улучшения бизнес-процессов?

-- Читайте перевод статьи из блога Camunda

Читать далее
1
23 ...

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer, Web Developer
Middle
From 250,000 ₽
Git
Linux
PostgreSQL
Docker
Java
Java Spring Framework
Spring Boot
Kubernetes
Database
REST