Forwarded from Machinelearning
Media is too big
VIEW IN TELEGRAM
Amazon анонсировала S3 Vectors - нативную поддержку векторного поиска прямо внутри своего вездесущего объектного хранилища. Заявлено, что это может снизить затраты на хранение и обработку векторов до 90%.
По сути, AWS предлагает не отдельный сервис, а новый тип бакета
vector bucket. Внутри него вы создаете векторные индексы, указывая размерность векторов и метрику расстояния (косинусную или евклидову).Вы просто загружаете в индекс свои эмбеддинги вместе с метаданными для фильтрации, а S3 берет на себя всю грязную работу по хранению, автоматической оптимизации и обеспечению субсекундного ответа на запросы. Никакого управления инфраструктурой.
Один бакет может содержать до 10 тысяч индексов, а каждый индекс, в свою очередь, десятки миллионов векторов.
S3 Vectors бесшовно интегрируется с Bedrock Knowledge Bases. Теперь при создании базы знаний для RAG-приложения можно просто указать S3-бакет в качестве векторного хранилища.
Процесс создания RAG-пайплайна для тех, кто уже живет в облаке AWS, упрощается до нескольких кликов. То же самое касается и SageMaker Unified Studio, где эта интеграция тоже доступна из коробки.
AWS предлагает гибкую, многоуровневую стратегию. Нечасто используемые или «холодные» векторы можно экономично хранить в S3 Vectors. А когда для части данных потребуется максимальная производительность и низкая задержка в реальном времени, например, для системы рекомендаций, их можно быстро экспортировать в OpenSearch.
Это очень прагматичный инженерный подход, позволяющий балансировать между стоимостью и производительностью.
Пока сервис находится в статусе превью и доступен в регионах US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Frankfurt), and Asia Pacific (Sydney) Regions.
Попробовать S3 Vectors можно в Amazon S3 console.
@ai_machinelearning_big_data
#AI #ML #RAG #Amazon
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍2
🐳 Учишься Docker? Вот идеальный интерактивный челлендж для новичков!
Docker 101: как запускать контейнеры в фоне, читать логи и переподключаться к ним
Челлендж от iximiuz Labs (Ivan Velichko) поможет разобраться с базовыми, но важными командами:
✅
✅
✅
Ничего не нужно устанавливать — всё прямо в браузере!
Попробовать можно здесь:
Если хочешь прокачать Docker на практике — начинай отсюда.
👉 https://labs.iximiuz.com/challenges/docker-101-container-run-in-background?x=2
Docker 101: как запускать контейнеры в фоне, читать логи и переподключаться к ним
Челлендж от iximiuz Labs (Ivan Velichko) поможет разобраться с базовыми, но важными командами:
✅
docker run -d — запуск контейнера в фоне ✅
docker logs — просмотр логов ✅
docker attach — повторное подключение к контейнеруНичего не нужно устанавливать — всё прямо в браузере!
Попробовать можно здесь:
Если хочешь прокачать Docker на практике — начинай отсюда.
👉 https://labs.iximiuz.com/challenges/docker-101-container-run-in-background?x=2
❤3👍3
🔍 Enumeration vs Iterator в Java — в чём разница и что выбрать?
В Java есть два интерфейса для перебора элементов коллекций:
📌 1. Enumeration (старый интерфейс, до Java 2)
Используется в таких классах, как
🧪 Пример:
✅ Преимущества:
– Прост
– Меньше накладных расходов
❌ Недостатки:
– Только чтение: нельзя удалить элемент
– Устарел: используется в legacy-коде
– Не поддерживает коллекции из java.util (List, Set и т.п.)
📌 2. Iterator (введён в Java 2, заменил Enumeration)
Работает с большинством коллекций: ArrayList, HashSet, HashMap, и т.д.
🧪 Пример:
✅ Преимущества:
– Совместим с современными коллекциями
– Поддерживает удаление элементов во время итерации (it.remove())
– Поддерживает обобщения (generics)
❌ Недостатки:
– Немного более "шумный" синтаксис
– Не поддерживает безопасную модификацию (если изменить коллекцию вне итератора — будет ConcurrentModificationException)
🧠 Вывод:
Используй Iterator в 99% случаев. Enumeration пригодится только при работе со старыми структурами (Vector, Hashtable), либо в очень специфичных случаях.
Если нужен ещё более современный подход — смотри в сторону for-each, Stream API, и spliterator.
💡 Java развивается — пиши на ней современно.
@java_library
В Java есть два интерфейса для перебора элементов коллекций:
Enumeration и Iterator. Оба позволяют пройтись по элементам, но у них разный синтаксис, возможности и история.📌 1. Enumeration (старый интерфейс, до Java 2)
Используется в таких классах, как
Vector и Hashtable.🧪 Пример:
Vector<String> vector = new Vector<>();
vector.add("A");
vector.add("B");
Enumeration<String> e = vector.elements();
while (e.hasMoreElements()) {
System.out.println(e.nextElement());
}
✅ Преимущества:
– Прост
– Меньше накладных расходов
❌ Недостатки:
– Только чтение: нельзя удалить элемент
– Устарел: используется в legacy-коде
– Не поддерживает коллекции из java.util (List, Set и т.п.)
📌 2. Iterator (введён в Java 2, заменил Enumeration)
Работает с большинством коллекций: ArrayList, HashSet, HashMap, и т.д.
🧪 Пример:
ArrayList<String> list = new ArrayList<>();
list.add("X");
list.add("Y");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
✅ Преимущества:
– Совместим с современными коллекциями
– Поддерживает удаление элементов во время итерации (it.remove())
– Поддерживает обобщения (generics)
❌ Недостатки:
– Немного более "шумный" синтаксис
– Не поддерживает безопасную модификацию (если изменить коллекцию вне итератора — будет ConcurrentModificationException)
🧠 Вывод:
Используй Iterator в 99% случаев. Enumeration пригодится только при работе со старыми структурами (Vector, Hashtable), либо в очень специфичных случаях.
// Лучше:
for (Iterator<String> it = list.iterator(); it.hasNext();) {
String val = it.next();
if (val.equals("X")) it.remove();
}
Если нужен ещё более современный подход — смотри в сторону for-each, Stream API, и spliterator.
for (String item : list) {
System.out.println(item);
}
list.stream().forEach(System.out::println);
💡 Java развивается — пиши на ней современно.
@java_library
👍6⚡2🔥2❤1
⚡️ Почему лучшие разработчики всегда на шаг впереди?
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Devops: t.me/DevOPSitsec
Базы данных: t.me/sqlhub
Мл собес t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
МЛ: t.me/machinelearning_ru
Data Science: t.me/data_analysis_ml
Javanoscript: t.me/javanoscriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://news.1rj.ru/str/gamedev
Физика: t.me/fizmat
SQL: t.me/databases_tg
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://news.1rj.ru/str/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://news.1rj.ru/str/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
🖥 Chatgpt для кода в тг: @Chatgpturbobot -
📕Ит-книги: https://news.1rj.ru/str/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.me/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.
ИИ: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Devops: t.me/DevOPSitsec
Базы данных: t.me/sqlhub
Мл собес t.me/machinelearning_interview
C++ t.me/cpluspluc
Docker: t.me/DevopsDocker
Хакинг: t.me/linuxkalii
МЛ: t.me/machinelearning_ru
Data Science: t.me/data_analysis_ml
Javanoscript: t.me/javanoscriptv
C#: t.me/csharp_ci
Java: t.me/java_library
Python собеседования: t.me/python_job_interview
Мобильная разработка: t.me/mobdevelop
Golang: t.me/Golang_google
React: t.me/react_tg
Rust: t.me/rust_code
ИИ: t.me/vistehno
PHP: t.me/phpshka
Android: t.me/android_its
Frontend: t.me/front
Big Data: t.me/bigdatai
МАТЕМАТИКА: t.me/data_math
Kubernets: t.me/kubernetc
Разработка игр: https://news.1rj.ru/str/gamedev
Физика: t.me/fizmat
SQL: t.me/databases_tg
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://news.1rj.ru/str/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://news.1rj.ru/str/addlist/mzMMG3RPZhY2M2Iy
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.me/memes_prog
🇬🇧Английский: t.me/english_forprogrammers
🧠ИИ: t.me/vistehno
📕Ит-книги: https://news.1rj.ru/str/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.me/addlist/_zyy_jQ_QUsyM2Vi
Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Forwarded from Java
Это не просто курс — это полноценный путь от абсолютного нуля до уровня, пригодного для поиска работы.
Вы пройдёте всё: от основ языка и ООП до современных фреймворков, паттернов проектирования и реальных практик разработки.
🔹 Что внутри:
Здесь вы не просто выучите Java — вы станете настоящим базированным разработчиком.
🚀 Становимся гуру Java здесь
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍2🥰2
120 ключевых вопросов по SQL за 2025 год
Статья содержит 120 ключевых вопросов по SQL для собеседований, разделённых по темам и уровням сложности, с краткими пояснениями.
Основываясь на актуальных требованиях 2025 года, вопросы охватывают базу данных, оптимизацию, практические задачи и нюансы СУБД (MySQL, PostgreSQL, SQL Server).
🔜 Подробности
Статья содержит 120 ключевых вопросов по SQL для собеседований, разделённых по темам и уровням сложности, с краткими пояснениями.
Основываясь на актуальных требованиях 2025 года, вопросы охватывают базу данных, оптимизацию, практические задачи и нюансы СУБД (MySQL, PostgreSQL, SQL Server).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤9🥰3
Новая версия лучше в:
- коде
- написание текстов
- распознании изображений
- стилизации ваших фоток
И не только
Попробуйте сами: t.me/Chatgpturbobot
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🌭2😁1
Forwarded from Machinelearning
Метод преодоления "барьера сортировки" для задач кратчайшего пути в ориентированных графах.
Группа исследователей из университетов Синьхуа, Стенфорда и Института Макса Планика представили детерминированный алгоритм для решения задачи SSSP в ориентированных графах с неотрицательными вещественными весами, который работает за время, пропорциональное числу ребер, умноженному на логарифмический множитель, который растет медленнее, чем обычный логарифм.
Проблема поиска кратчайшего пути от одной вершины до всех остальных (SSSP) — одна из фундаментальных в теории графов, и её история тянется с 50-х годов прошлого века. Классический алгоритм Дейкстры, в связке с продвинутыми структурами данных, решает эту задачу за время, которое примерно пропорционально сумме числа рёбер и произведения числа вершин на логарифм от их же числа.
Именно этот множитель - число вершин, умноженное на логарифм, долгое время считался теоретическим минимумом, так как в своей основе алгоритм Дейкстры побочно сортирует вершины по расстоянию от источника. Этот предел известен как «барьер сортировки» и казался непреодолимым.
Алгоритм Дейкстры на каждом шаге выбирает из "границы" - множества еще не обработанных вершин ту, что находится ближе всего к источнику. Это и создает узкое место, так как размер границы может достигать величины, сопоставимой с общим числом вершин в графе, и на каждом шаге требуется находить минимум.
Алгоритм Беллмана-Форда, в свою очередь, не требует сортировки, но его сложность пропорциональна числу ребер, умноженному на количество шагов, что слишком долго.
Вместо того чтобы поддерживать полную отсортированную границу, алгоритм фокусируется на ее сокращении. А если граница слишком велика, то запускается несколько шагов алгоритма Беллмана-Форда из ее вершин.
Это позволяет найти точное расстояние до некоторой части вершин, чьи кратчайшие пути коротки. Длинные же пути должны проходить через одну из "опорных" вершин, которых оказывается значительно меньше, чем вершин в исходной границе. Таким образом, сложная работа концентрируется только на этом небольшом наборе опорных точек.
Он рекурсивно разбивает задачу на несколько уровней. На каждом уровне применяется вышеописанная техника сокращения границы, что позволяет значительно уменьшить объем работы на каждую вершину, поскольку логарифмический множитель эффективно делится на другой, более медленно растущий логарифмический член.
В итоге, путем подбора внутренних параметров алгоритма, которые являются специфическими функциями от логарифма числа вершин, и достигается итоговая временная сложность, пропорциональная числу ребер, умноженному на этот новый, более медленно растущий логарифмический множитель.
— Быстрее решаются задачи в навигации, графах дорог, сетях и планировании.
— Доказано, что Дейкстра — не предел, и можно ещё ускорять поиск кратчайших путей.
@ai_machinelearning_big_data
#AI #ML #Sorting #Graphs #Algorithm
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7🔥3🤔2
Java 21 представила новый способ работы со строками — *string templates*. Это функция-превью (preview), которую нужно включать явно (`--enable-preview`) и использовать с JDK 21 или 22. В Java 23 от неё отказались, чтобы переработать дизайн.
Как это работает?
- Используется шаблонный процессор, например
STR.- Сразу после него идёт точка
. и строка-шаблон с выражениями внутри \{...}:
String name = "Duke";
String greeting = STR."My name is \{name}";
// -> "My name is Duke"
Встроенные выражения могут быть любыми Java-выражениями: арифметика, методы, поля:
int x = 10, y = 20;
String result = STR."\{x} + \{y} = \{x + y}";
- Поддержка многострочных шаблонов
Можно использовать текстовые блоки для JSON, SQL и других структур:
String json = STR."""
{
"user": "\{name}",
"temp": \{tempC}
}
""";
Технические детали
Шаблоны создают объект StringTemplate (runtime представление), содержащий массив литералов и значений выражений.
- Есть разные шаблонные процессоры:
- STR — стандартная интерполяция
- FMT — поддерживает форматирование и локаль
- RAW — необработанный шаблон, для кастомной обработки
Текущее состояние
- Java 21: функция доступна как preview (JEP 430)
- Java 22: вторая preview-итерация
- Java 23: удалена (даже как preview), дизайн требует доработки
Почему удалили?
- Жалобы на синтаксис — \{} вместо привычного ${}, processor.template вместо простого подхода
- Смешение capture (формирование шаблона) и processing нарушает удобство расширения
- Производительность можно обеспечить и без специального синтаксиса
- Дискуссия среди разработчиков: часть считает interpolation небезопасной/бесполезной, часть — нужной функцией качества жизни
Итог
Java 21 попыталась упростить работу со строками и структурными текстами с помощью string templates — но разработка приостановлена из-за критики синтаксиса и архитектуры. Пока функция нестабильна и требует пересмотра.
📌 Подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍3🔥3👎2
☕ Java25 уже на подходе!
В свежем релизе — важные улучшения, о которых стоит знать каждому Java-разработчику:
🔹 JEP 502: Stable Values — новый способ работы со значениями, который делает код надёжнее и эффективнее.
🔹 JEP 514/515: Project Leyden — фокус на время запуска приложений и оптимизацию старта JVM.
📖 Подробный разбор:
https://softwaremill.com/jep-502-stable-values-new-feature-of-java-25-explained/
#Java #JEP #Leyden #Programming
В свежем релизе — важные улучшения, о которых стоит знать каждому Java-разработчику:
🔹 JEP 502: Stable Values — новый способ работы со значениями, который делает код надёжнее и эффективнее.
🔹 JEP 514/515: Project Leyden — фокус на время запуска приложений и оптимизацию старта JVM.
📖 Подробный разбор:
https://softwaremill.com/jep-502-stable-values-new-feature-of-java-25-explained/
#Java #JEP #Leyden #Programming
❤12👍2🔥1
🔧 Как ускорить работу в Linux с помощью alias
В Linux есть удобный приём - alias. Это сокращённые команды, которые экономят время и избавляют от повторного ввода длинных конструкций.
📌 Проверить текущие alias
⚡ Временный alias (работает до закрытия терминала)
Удалить можно так:
♻️ Постоянный alias (сохраняется после перезагрузки)
Нужно добавить его в конфиг вашей оболочки:
Пример в ~/.bashrc:
Чтобы применить изменения сразу:
📂 Отдельный файл ~/.bash_aliases
В Ubuntu/Debian часто alias выносят в ~/.bash_aliases, а в ~/.bashrc есть строка:
Это помогает держать настройки в порядке.
🚀 Полезные примеры alias
👉 Итог: alias экономят время и делают работу комфортнее. Главное — придумать такие сокращения, которые легко запомнить.
https://www.tecmint.com/create-alias-in-linux/
В Linux есть удобный приём - alias. Это сокращённые команды, которые экономят время и избавляют от повторного ввода длинных конструкций.
📌 Проверить текущие alias
alias
Выведет список всех настроенных сокращений, например:
ll='ls -alF'
⚡ Временный alias (работает до закрытия терминала)
alias wr="cd /var/www/html"
Теперь wr перенесёт вас в /var/www/html.
Удалить можно так:
unalias wr
♻️ Постоянный alias (сохраняется после перезагрузки)
Нужно добавить его в конфиг вашей оболочки:
Bash → ~/.bashrc
Zsh → ~/.zshrc
Fish → ~/.config/fish/config.fish
Пример в ~/.bashrc:
alias gs="git status"
alias update="sudo apt update && sudo apt upgrade -y"
alias serve="python3 -m http.server"
alias ..="cd .."
alias ...="cd ../.."
Чтобы применить изменения сразу:
source ~/.bashrc
📂 Отдельный файл ~/.bash_aliases
В Ubuntu/Debian часто alias выносят в ~/.bash_aliases, а в ~/.bashrc есть строка:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Это помогает держать настройки в порядке.
🚀 Полезные примеры alias
alias gs="git status"
alias gp="git pull"
alias update="sudo apt update && sudo apt upgrade -y"
alias serve="python3 -m http.server"
alias ..="cd .."
👉 Итог: alias экономят время и делают работу комфортнее. Главное — придумать такие сокращения, которые легко запомнить.
https://www.tecmint.com/create-alias-in-linux/
❤10🔥6👍2
📌 JoySafety — фреймворк безопасности для LLM от JD
JoySafety — это открытый фреймворк для обеспечения безопасности больших языковых моделей. Он уже используется внутри JD (京东) для AI-ассистентов, логистики и консультационных сервисов.
🔍 Возможности
- Фильтрация и защита: от злонамеренных промптов, нежелательного контента, атак на модель.
- Модульная архитектура: отдельные сервисы для BERT, FastText, ключевых слов, знаний и векторных проверок.
- Горячее обновление стратегий: можно менять полиси безопасности без перезапуска.
- Продакшн-масштаб: поддержка больших нагрузок, горизонтальное масштабирование, интеграция с MySQL/Redis и векторной БД.
- Примеры для Python, Java и Go в разделе *quickstart*.
🛠 Быстрый старт
1. Клонировать репозиторий:
2. Скачать модели через git-lfs или вручную (HuggingFace/ModelScope).
3. Настроить
4. Запустить:
5. Использовать API из примеров.
JoySafety даёт готовую инфраструктуру модерации и защиты вокруг LLM. Он предотвращает утечки, фильтрует опасный текст и позволяет настраивать собственные политики безопасности. Подходит для продакшн-сценариев, где важна защита пользователей и корректная работа модели.
👉 Репозиторий: https://github.com/jd-opensource/JoySafety
*придется включить автоперевозчик в репо
JoySafety — это открытый фреймворк для обеспечения безопасности больших языковых моделей. Он уже используется внутри JD (京东) для AI-ассистентов, логистики и консультационных сервисов.
🔍 Возможности
- Фильтрация и защита: от злонамеренных промптов, нежелательного контента, атак на модель.
- Модульная архитектура: отдельные сервисы для BERT, FastText, ключевых слов, знаний и векторных проверок.
- Горячее обновление стратегий: можно менять полиси безопасности без перезапуска.
- Продакшн-масштаб: поддержка больших нагрузок, горизонтальное масштабирование, интеграция с MySQL/Redis и векторной БД.
- Примеры для Python, Java и Go в разделе *quickstart*.
🛠 Быстрый старт
1. Клонировать репозиторий:
git clone https://github.com/jd-opensource/JoySafety 2. Скачать модели через git-lfs или вручную (HuggingFace/ModelScope).
3. Настроить
.env (переменная `SAFETY_MODEL_DIR`). 4. Запустить:
docker-compose --env-file .env up 5. Использовать API из примеров.
JoySafety даёт готовую инфраструктуру модерации и защиты вокруг LLM. Он предотвращает утечки, фильтрует опасный текст и позволяет настраивать собственные политики безопасности. Подходит для продакшн-сценариев, где важна защита пользователей и корректная работа модели.
👉 Репозиторий: https://github.com/jd-opensource/JoySafety
*придется включить автоперевозчик в репо
❤8👍3🔥3
🚀 Spring Boot Pro Tip: свой FailureAnalyzer
В Spring Boot можно перехватывать ошибки на этапе запуска и превращать их в понятные человеку сообщения. Для этого создан механизм FailureAnalyzer.
Зачем он нужен
- улучшает диагностику на старте приложения
- помогает быстро находить причины конфигурационных ошибок
- делает логирование чище и понятнее
Как работает
Вы создаёте свой класс, который анализирует исключение и возвращает читаемое описание проблемы и советы по исправлению.
Под капотом Spring Boot автоматически подцепит ваш анализатор и покажет дружелюбное сообщение вместо сырого stacktrace.
Документация:
https://docs.spring.io/spring-boot/how-to/application.html#howto.application.failure-analyzer
#SpringBoot #Java #FailureAnalyzer #Backend #DevTips
В Spring Boot можно перехватывать ошибки на этапе запуска и превращать их в понятные человеку сообщения. Для этого создан механизм FailureAnalyzer.
Зачем он нужен
- улучшает диагностику на старте приложения
- помогает быстро находить причины конфигурационных ошибок
- делает логирование чище и понятнее
Как работает
Вы создаёте свой класс, который анализирует исключение и возвращает читаемое описание проблемы и советы по исправлению.
Под капотом Spring Boot автоматически подцепит ваш анализатор и покажет дружелюбное сообщение вместо сырого stacktrace.
Документация:
https://docs.spring.io/spring-boot/how-to/application.html#howto.application.failure-analyzer
#SpringBoot #Java #FailureAnalyzer #Backend #DevTips
❤7👍4
🚀 Java API Tip
StackWalker — удобный инструмент для обхода стек-фреймов и их интроспекции. Полезен для дебага, профилирования и анализа поведения кода на лету. Позволяет считывать текущий стек, фильтровать фреймы, смотреть классы и методы, откуда был вызван код.
Документация:
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/StackWalker.html
#Java #JavaAPI
StackWalker — удобный инструмент для обхода стек-фреймов и их интроспекции. Полезен для дебага, профилирования и анализа поведения кода на лету. Позволяет считывать текущий стек, фильтровать фреймы, смотреть классы и методы, откуда был вызван код.
Документация:
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/StackWalker.html
#Java #JavaAPI
❤4🔥2💊1
🚀 В Spring Boot можно точечно отключать ненужную автоконфигурацию через аннотацию
**@SpringBootApplication(exclude = …)**.
Это удобно, когда в проекте есть своя кастомная конфигурация, которая конфликтует с дефолтной, или когда вы хотите убрать лишние автоматические настройки и контролировать поведение вручную.
Так вы оставляете только нужные части автоконфигурации и избегаете скрытых конфликтов.
#SpringBoot #JavaDev
**@SpringBootApplication(exclude = …)**.
Это удобно, когда в проекте есть своя кастомная конфигурация, которая конфликтует с дефолтной, или когда вы хотите убрать лишние автоматические настройки и контролировать поведение вручную.
Так вы оставляете только нужные части автоконфигурации и избегаете скрытых конфликтов.
#SpringBoot #JavaDev
❤7👍6
📌 Durable Execution Engine на SQLite:
• Durable Execution (DE) - это подход, который позволяет выполнять длинные многошаговые процессы так, чтобы после сбоя можно было продолжить с последнего успешного шага, а не запускать всё заново.
• В статье показан простой Proof of Concept - Persistasaurus: лёгкий DE-движок на Java, который использует SQLite как хранилище состояния.
• Потоки (flows) пишутся как обычный Java-код: методы помечаются аннотациями
• Идея не новая, но современная Java + SQLite позволяют сделать удивительно компактное и понятное решение без тяжёлой инфраструктуры.
Почему это полезно:
• Упрощает работу с долгоживущими процессами
• Избавляет от повторных вычислений и экономит ресурсы
• Подходит для прототипов, внутренних сервисов и задач средней сложности
Что учитывать:
• Это только прототип - для реальных больших систем нужно масштабирование, отказоустойчивость, параллелизм и дополнительные инструменты
• SQLite отлично подходит для простых сценариев, но не для высоконагруженных распределённых систем
🔗 Читаем тут: morling.dev/blog/building-durable-execution-engine-with-sqlite/
• Durable Execution (DE) - это подход, который позволяет выполнять длинные многошаговые процессы так, чтобы после сбоя можно было продолжить с последнего успешного шага, а не запускать всё заново.
• В статье показан простой Proof of Concept - Persistasaurus: лёгкий DE-движок на Java, который использует SQLite как хранилище состояния.
• Потоки (flows) пишутся как обычный Java-код: методы помечаются аннотациями
@Flow и @Step, а их прогресс автоматически сохраняется. Если процесс падает, можно безопасно перезапустить его без повторного выполнения шагов.• Идея не новая, но современная Java + SQLite позволяют сделать удивительно компактное и понятное решение без тяжёлой инфраструктуры.
Почему это полезно:
• Упрощает работу с долгоживущими процессами
• Избавляет от повторных вычислений и экономит ресурсы
• Подходит для прототипов, внутренних сервисов и задач средней сложности
Что учитывать:
• Это только прототип - для реальных больших систем нужно масштабирование, отказоустойчивость, параллелизм и дополнительные инструменты
• SQLite отлично подходит для простых сценариев, но не для высоконагруженных распределённых систем
🔗 Читаем тут: morling.dev/blog/building-durable-execution-engine-with-sqlite/
❤6👍4
Как создать эффективное REST API или оптимизировать его? Что сделать для ускорения Redis? Какие секреты скрываются под капотом Android? Что делать при конфликте стилей в микрофронтендах? Что поможет провести продуктивное кросс-ревью в команде?
Своим опытом в самых разных сферах делятся frontend-разработчики, системные аналитики, разработчики под Android и iOS из команды ПСБ.
Читайте в блоге ПСБ на Хабре, делитесь в комментариях своим мнением и опытом!
Своим опытом в самых разных сферах делятся frontend-разработчики, системные аналитики, разработчики под Android и iOS из команды ПСБ.
Читайте в блоге ПСБ на Хабре, делитесь в комментариях своим мнением и опытом!
❤4
Forwarded from Kali Linux
🔥 Server Survival: Стройте облачную инфраструктуру!
Играйте в интерактивную 3D-симуляцию, где вы - облачный архитектор. Стройте и масштабируйте облачную инфраструктуру, защищаясь от DDoS-атак и управляя бюджетом. Цель — выжить как можно дольше, обрабатывая легитимный трафик и избегая потерь репутации.
🚀Основные моменты:
- Управление бюджетом и репутацией.
- Разные типы трафика: веб, API и мошеннический.
- Режимы игры: выживание и песочница для экспериментов.
- Улучшение сервисов для повышения производительности.
- Интуитивное управление и визуальная обратная связь.
📌 GitHub: https://github.com/pshenok/server-survival
Играйте в интерактивную 3D-симуляцию, где вы - облачный архитектор. Стройте и масштабируйте облачную инфраструктуру, защищаясь от DDoS-атак и управляя бюджетом. Цель — выжить как можно дольше, обрабатывая легитимный трафик и избегая потерь репутации.
🚀Основные моменты:
- Управление бюджетом и репутацией.
- Разные типы трафика: веб, API и мошеннический.
- Режимы игры: выживание и песочница для экспериментов.
- Улучшение сервисов для повышения производительности.
- Интуитивное управление и визуальная обратная связь.
📌 GitHub: https://github.com/pshenok/server-survival
❤8
💡 Java совет:
Начиная с Java 19, можно использовать *виртуальные потоки* - лёгкие потоки, которые управляются самой JVM, а не операционной системой.
Что это даёт:
- можно запускать тысячи и даже миллионы задач без нагрузки на ОС
- проще писать высоконагруженные приложения без сложной асинхронности
- более понятный и чистый код по сравнению с CompletableFuture и callback-подходами
Виртуальные потоки — главный шаг Java к масштабируемой конкурентности.
#Java #JavaDev
Начиная с Java 19, можно использовать *виртуальные потоки* - лёгкие потоки, которые управляются самой JVM, а не операционной системой.
Что это даёт:
- можно запускать тысячи и даже миллионы задач без нагрузки на ОС
- проще писать высоконагруженные приложения без сложной асинхронности
- более понятный и чистый код по сравнению с CompletableFuture и callback-подходами
Виртуальные потоки — главный шаг Java к масштабируемой конкурентности.
#Java #JavaDev
👍7❤5🔥5👎1