Разработчики из Anthropic обновили и структурировали масштабный хаб готовых запросов для своей языковой модели. База создана для того, чтобы пользователи могли выжать максимум из Claude при решении прикладных и технических задач, не тратя время на самостоятельный подбор формулировок.
🟦 Для безопасности: готовые конструкции для проверки кода на уязвимости и анализа граничных условий работы алгоритмов.
🟦 Для разработчиков: шаблоны для глубокого ревью кода, автоматического поиска багов, рефакторинга, написания юнит-тестов и проектирования архитектуры.
🟦 Для автоматизации и менеджмента: промпты под стратегическое планирование, парсинг неструктурированных данных, генерацию технической документации и выстраивание логики для ИИ-агентов.
Каждый шаблон снабжен подробным разбором: авторы пошагово объясняют, почему выбрана именно такая структура запроса, как модель интерпретирует переменные и как правильно передавать контекст. Поскольку библиотека официальная, все промпты оптимизированы под особенности контекстного окна и логику мышления последних моделей семейства Claude.
Нейросети отлично автоматизируют рутину и помогают искать уязвимости, но управлять ими может только тот, кто понимает саму базу и суть киберугроз.
Если вы хотите заложить мощный фундамент начните с нашего бесплатного курса (его прошли уже 1108 человек!).
🟦 Разберетесь, как работают кибератаки и как грамотно защитить свои данные.
🟦 Познакомитесь с направлениями и профессиями в кибербезопасности, чтобы выбрать свой трек.
🟦 Получите скидку, если решите продолжить обучение в CyberYozh Academy.
👉 Начните бесплатно прямо сейчас
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1😁1
Генерируем безопасный URL-токен на Java!
Для ссылки подтверждения, сброса пароля или временного приглашения нужен непредсказуемый токен. Обычный Random для этого не подходит, поэтому используем SecureRandom.
Создадим генератор случайных байтов:
Теперь напишем метод генерации:
URL Encoder не использует символы, которые могут сломать адрес. Дополнительное кодирование результата не требуется.
Создадим токен из 32 случайных байтов:
Пример результата:
Теперь его можно добавить в ссылку:
На сервере безопаснее хранить хеш токена:
Также у токена должен быть срок действия и возможность только одноразового использования.
👉 Java Ready | #практика
Для ссылки подтверждения, сброса пароля или временного приглашения нужен непредсказуемый токен. Обычный Random для этого не подходит, поэтому используем SecureRandom.
Создадим генератор случайных байтов:
private static final SecureRandom RANDOM =
new SecureRandom();
Теперь напишем метод генерации:
static String generateToken(int size) {
byte[] data = new byte[size];
RANDOM.nextBytes(data);
return Base64.getUrlEncoder()
.withoutPadding()
.encodeToString(data);
}URL Encoder не использует символы, которые могут сломать адрес. Дополнительное кодирование результата не требуется.
Создадим токен из 32 случайных байтов:
String token = generateToken(32);
System.out.println(token);
Пример результата:
Pp1HgxVmySpQJQi3KUUPN5ZXqCV4-ZPvP12Ft49XiI0
Теперь его можно добавить в ссылку:
String link =
"https://ready.com/confirm?token=" + token;
На сервере безопаснее хранить хеш токена:
var digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(
token.getBytes(StandardCharsets.UTF_8)
);Также у токена должен быть срок действия и возможность только одноразового использования.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤5👍4
This media is not supported in your browser
VIEW IN TELEGRAM
На странице собрана коллекция шпаргалок и полезных ресурсов для Java-разработчиков. Здесь есть материалы по Java Core, JPA и Hibernate, Stream API, Lombok, коллекциям, библиотекам для работы с JSON, а также ссылки на обучающие материалы, популярные open-source проекты и подборки для подготовки к собеседованиям.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝8❤4👍2
Создаём погодного Telegram-бота на Java!
В этой статье:
• Как подключить OpenWeatherMap и получать актуальную погоду
• Как обновлять прогноз через inline-кнопку без новых сообщений
• Как настроить FSM-диалог, валидацию времени и рассылку по расписанию
👉 Java Ready | #статья
В этой статье:
• Как подключить OpenWeatherMap и получать актуальную погоду
• Как обновлять прогноз через inline-кнопку без новых сообщений
• Как настроить FSM-диалог, валидацию времени и рассылку по расписанию
Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥3👍2
Собирайте значения по ключу через computeIfAbsent()!
Когда в
Здесь приходится отдельно получать значение, создавать список и записывать его обратно в
Функция создания вызывается только тогда, когда ключ отсутствует или связан с
В результате оба значения окажутся в одном списке:
Тот же приём подходит для группировки объектов, ленивого создания настроек и простых локальных кэшей:
Важно: если функция вернёт
👉 Java Ready | #совет
Когда в
Map нужно хранить несколько значений для одного ключа, часто появляется ручная проверка:var values = tags.get(topic);
if (values == null) {
values = new ArrayList<>();
tags.put(topic, values);
}
values.add(tag);
Здесь приходится отдельно получать значение, создавать список и записывать его обратно в
Map.computeIfAbsent() объединяет эти действия:tags.computeIfAbsent(topic, key -> new ArrayList<>())
.add(tag);
Функция создания вызывается только тогда, когда ключ отсутствует или связан с
null. Если список уже существует, Java сразу вернёт его:tags.computeIfAbsent("java", key -> new ArrayList<>())
.add("collections");
tags.computeIfAbsent("java", key -> new ArrayList<>())
.add("streams");В результате оба значения окажутся в одном списке:
{java=[collections, streams]}Тот же приём подходит для группировки объектов, ленивого создания настроек и простых локальных кэшей:
var config = configs.computeIfAbsent(
serviceName,
this::loadConfig
);
Важно: если функция вернёт
null, новое соответствие в Map добавлено не будет.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2
Интересная статья о том, как создавались 2D-игры для кнопочных Java-телефонов!
В этой статье:
• Как J2ME и MIDP использовались для разработки мобильных игр
• Как работали спрайты, игровой цикл, ввод и мобильная графика
• Почему разные разрешения, объём памяти и коды кнопок мешали переносимости игр
👉 Java Ready | #статья
В этой статье:
• Как J2ME и MIDP использовались для разработки мобильных игр
• Как работали спрайты, игровой цикл, ввод и мобильная графика
• Почему разные разрешения, объём памяти и коды кнопок мешали переносимости игр
Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥3
Почему split(".") не разделяет строку по точке?
На первый взгляд такой код выглядит правильно:
Но split() принимает не обычную строку-разделитель, а регулярное выражение.
В regex точка означает любой символ. Поэтому выражение "." совпадает практически со всей строкой, а пустые элементы в конце результата split() удаляет.
В результате можно неожиданно получить пустой массив:
Чтобы искать именно точку, её нужно экранировать:
Два обратных слеша нужны из-за двойной обработки: сначала Java превращает \\ в один слеш, а затем regex получает выражение \.
Если разделитель приходит из переменной, безопаснее не экранировать его вручную:
Pattern.quote() превращает строку в литеральное регулярное выражение. Это особенно полезно для разделителей вроде точки, вертикальной черты, плюса или скобок.
👉 Java Ready | #совет
На первый взгляд такой код выглядит правильно:
String[] parts =
"api.example.com".split(".");
Но split() принимает не обычную строку-разделитель, а регулярное выражение.
В regex точка означает любой символ. Поэтому выражение "." совпадает практически со всей строкой, а пустые элементы в конце результата split() удаляет.
В результате можно неожиданно получить пустой массив:
System.out.println(
Arrays.toString("a.b".split("."))
);
// []
Чтобы искать именно точку, её нужно экранировать:
String[] parts =
"api.example.com".split("\\.");
System.out.println(
Arrays.toString(parts)
);
// [api, example, com]
Два обратных слеша нужны из-за двойной обработки: сначала Java превращает \\ в один слеш, а затем regex получает выражение \.
Если разделитель приходит из переменной, безопаснее не экранировать его вручную:
String separator = ".";
String regex =
Pattern.quote(separator);
String[] parts = text.split(regex);
Pattern.quote() превращает строку в литеральное регулярное выражение. Это особенно полезно для разделителей вроде точки, вертикальной черты, плюса или скобок.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🔥2
Шпаргалка по регулярным выражениям в Java!
Например, \d находит цифру, \w символ слова, а квантификатор {n,m} задаёт минимальное и максимальное количество повторений.
На картинке классы символов, границы строк, флаги Pattern, жадные и ленивые квантификаторы, группы, обратные ссылки и основные методы Pattern и Matcher.
Сохрани, чтобы не потерять!
👉 Java Ready | #ресурс
Например, \d находит цифру, \w символ слова, а квантификатор {n,m} задаёт минимальное и максимальное количество повторений.
На картинке классы символов, границы строк, флаги Pattern, жадные и ленивые квантификаторы, группы, обратные ссылки и основные методы Pattern и Matcher.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥5👍4
Почему успешная сборка ещё не означает, что Java-код работает правильно?
В этой статье:
• Почему пустой catch может незаметно скрыть реальную ошибку
• Что произойдёт, если переопределить equals(), но забыть про hashCode()
• Как современные возможности Java помогают убрать старые опасные конструкции
• Зачем подключать SpotBugs, PMD и другие проверки ещё до релиза
Полезный разбор ошибок, которые выглядят безобидно, проходят компиляцию, но позже превращаются в настоящие проблемы.
👉 Java Ready | #статья
В этой статье:
• Почему пустой catch может незаметно скрыть реальную ошибку
• Что произойдёт, если переопределить equals(), но забыть про hashCode()
• Как современные возможности Java помогают убрать старые опасные конструкции
• Зачем подключать SpotBugs, PMD и другие проверки ещё до релиза
Полезный разбор ошибок, которые выглядят безобидно, проходят компиляцию, но позже превращаются в настоящие проблемы.
Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🔥3
Как аккуратно считать повторения через Map.merge() в Java?
Когда нужно посчитать частоту значений, часто пишут ручную проверку:
Код рабочий, но быстро разрастается: проверка, получение старого значения, обновление.
В Java для таких случаев есть merge():
Логика такая: если ключа ещё нет, Java положит значение 1.
Если ключ уже есть, Java возьмёт старое значение и объединит его с новым через Integer::sum:
Это удобно для счётчиков, статистики, лайков, просмотров, ошибок по типам и любых группировок:
Можно использовать не только сумму:
Здесь в мапе останется максимальная цена для каждого товара.
👉 Java Ready | #совет
Когда нужно посчитать частоту значений, часто пишут ручную проверку:
Map<String, Integer> clicks = new HashMap<>();
if (clicks.containsKey("login")) {
clicks.put("login", clicks.get("login") + 1);
} else {
clicks.put("login", 1);
}
Код рабочий, но быстро разрастается: проверка, получение старого значения, обновление.
В Java для таких случаев есть merge():
clicks.merge("login", 1, Integer::sum);Логика такая: если ключа ещё нет, Java положит значение 1.
Если ключ уже есть, Java возьмёт старое значение и объединит его с новым через Integer::sum:
clicks.merge("login", 1, Integer::sum);
clicks.merge("login", 1, Integer::sum);
// login -> 2Это удобно для счётчиков, статистики, лайков, просмотров, ошибок по типам и любых группировок:
for (String event : events) {
counters.merge(event, 1, Integer::sum);
}Можно использовать не только сумму:
prices.merge(productId, newPrice, Math::max);
Здесь в мапе останется максимальная цена для каждого товара.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥2
Отличная статья для тех, кто хотел попробовать Java не только в backend, но и в Minecraft-моддинге!
В этой статье:
• Как устроен первый проект мода и какие файлы в нём важны
• Чем помогают Fabric, Forge и Mixin при изменении поведения игры
• Как начать с простого примера и понять базовую структуру моддинга
👉 Java Ready | #статья
В этой статье:
• Как устроен первый проект мода и какие файлы в нём важны
• Чем помогают Fabric, Forge и Mixin при изменении поведения игры
• Как начать с простого примера и понять базовую структуру моддинга
Продолжай читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🔥3
Шпаргалка по JVM options в Java!
Например, -Xms задаёт начальный размер heap, -Xmx ограничивает максимальный heap, а -XX:+HeapDumpOnOutOfMemoryError помогает получить дамп памяти при падении с OutOfMemoryError.
На картинке JVM options: стандартные параметры запуска, -D system properties, javaagent, non-standard -X options, GC-флаги, heap-настройки, debugging-параметры и performance options.
Сохрани, чтобы не потерять!
👉 Java Ready | #ресурс
Например, -Xms задаёт начальный размер heap, -Xmx ограничивает максимальный heap, а -XX:+HeapDumpOnOutOfMemoryError помогает получить дамп памяти при падении с OutOfMemoryError.
На картинке JVM options: стандартные параметры запуска, -D system properties, javaagent, non-standard -X options, GC-флаги, heap-настройки, debugging-параметры и performance options.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥2
Опа, тут бывший сеньор одного из IT-отделов Яндекса Игорь Никитин выкатил целый канал про Python — и это лучшее, что есть в рунете по теме.
Качественные гайды. Советы от известных прогеров. Тематические мемасы. Короче, ничего лишнего.
Хватит душить питона, учись его кодить: https://t.me/+IzIPzvoa7p40ZTUy 🐍
Качественные гайды. Советы от известных прогеров. Тематические мемасы. Короче, ничего лишнего.
Хватит душить питона, учись его кодить: https://t.me/+IzIPzvoa7p40ZTUy 🐍
😁4
Делаем простой rate limiter!
Иногда нужно ограничить частоту действий: отправку писем, запросы к API, попытки входа или запуск тяжёлой операции. Соберём простой limiter, который разрешает не больше N действий за небольшой промежуток времени.
Для хранения времени запросов подойдёт очередь:
Создадим класс:
Конструктор:
Главный метод будет возвращать true, если действие разрешено:
Если в окне уже слишком много вызовов, блокируем:
Теперь можно ограничить, например, 3 попытки за 10 секунд:
Использование:
Такой limiter хранит только актуальные вызовы внутри окна. Старые записи постепенно удаляются из очереди.
Для многопоточного кода метод allow() стоит синхронизировать:
Rate limiter это простой, но очень полезный паттерн для API, авторизации, фоновых задач и защиты от слишком частых действий.
👉 Java Ready | #практика
Иногда нужно ограничить частоту действий: отправку писем, запросы к API, попытки входа или запуск тяжёлой операции. Соберём простой limiter, который разрешает не больше N действий за небольшой промежуток времени.
Для хранения времени запросов подойдёт очередь:
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayDeque;
import java.util.Deque;
Создадим класс:
public class RateLimiter {
private final int limit;
private final Duration window;
private final Deque<Instant> calls = new ArrayDeque<>();Конструктор:
public RateLimiter(int limit, Duration window) {
this.limit = limit;
this.window = window;
}Главный метод будет возвращать true, если действие разрешено:
public boolean allow() {
Instant now = Instant.now();
Instant border = now.minus(window);
while (!calls.isEmpty() && calls.peekFirst().isBefore(border)) {
calls.removeFirst();
}Если в окне уже слишком много вызовов, блокируем:
if (calls.size() >= limit) {
return false;
}
calls.addLast(now);
return true;
}
}Теперь можно ограничить, например, 3 попытки за 10 секунд:
RateLimiter limiter = new RateLimiter(
3,
Duration.ofSeconds(10)
);
Использование:
if (limiter.allow()) {
System.out.println("Запрос выполнен");
} else {
System.out.println("Слишком много запросов");
}Такой limiter хранит только актуальные вызовы внутри окна. Старые записи постепенно удаляются из очереди.
Для многопоточного кода метод allow() стоит синхронизировать:
public synchronized boolean allow() {
// та же логика
}Rate limiter это простой, но очень полезный паттерн для API, авторизации, фоновых задач и защиты от слишком частых действий.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3👍2