Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
🧠 Твоя БД скоро станет умнее тебя: 5 трендов open-source баз данных 2025
БД перестают быть просто хранилищем — теперь они оптимизируют запросы, автоматически анализируют данные и даже используют AI для прогнозов.
Какие фичи перевернут мир open-source БД в 2025? Узнайте в статье👇
🫢 Прочитать статью
🐸 Библиотека devops'a
БД перестают быть просто хранилищем — теперь они оптимизируют запросы, автоматически анализируют данные и даже используют AI для прогнозов.
Какие фичи перевернут мир open-source БД в 2025? Узнайте в статье👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4🎉3
Мне НЕ нужно разбираться с управлением памятью в Java, так как за меня всё делает GC
Garbage Collector (GC) действительно очищает неиспользуемые объекты, которые больше не имеют активных ссылок. Благодаря этому в Java не нужно вручную освобождать память, как в C++.
Несколько предпосылок к исходному тезису:
🔹 В других языках, где ручное управление памятью (C, C++), утечки очевидны — если забыл free(), память навсегда потеряна.
🔹 В Java GC работает автоматически, поэтому кажется, что он решает все проблемы сам.
🔹 "Ну раз GC есть, значит, про память можно не думать!" — типичная ошибка.
GC удаляет только те объекты, которые больше не имеют активных ссылок. Если же объект остаётся доступным, но фактически не используется, он будет занимать память до завершения работы приложения.
Если создать static List и постоянно добавлять в него объекты, они никогда не будут удалены GC, потому что статические поля живут весь срок жизни приложения.
public class MemoryLeak {
private static final List<byte[]> cache = new ArrayList<>();
public static void main(String[] args) {
while (true) {
cache.add(new byte[10 * 1024 * 1024]);
System.out.println("Добавили 10MB в кеш. Используемая память: " +
(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024) + "MB");
}
}
}
Через пару минут — OutOfMemoryError
Объекты, хранящиеся в ThreadLocal, привязываются к потоку, а в пуле потоков они могут жить дольше, чем нужно.
public class ThreadLocalLeak {
private static final ThreadLocal<byte[]> threadLocalData = new ThreadLocal<>();
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
executor.execute(() -> {
threadLocalData.set(new byte[10 * 1024 * 1024]); // 10MB на поток
System.out.println("Память занята потоком!");
});
}
executor.shutdown();
}
}
Поток завершится, а память останется занята, потому что ThreadLocal не очищается автоматически.
Если анонимный класс или лямбда-ссылка ссылается на внешний объект, она может мешать GC очистить его.
public class InnerClassLeak {
private String data = "Очень важные данные";
public void createAnonymousClass() {
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("Используем: " + data);
}
};
new Thread(task).start();
}
}
task ссылается на data, даже если InnerClassLeak больше не используется → GC не очистит объект.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥4❤2😢1
Spring Boot упрощает кеширование благодаря аннотациям и встроенной интеграции с разными кеш-провайдерами (EhCache, Caffeine, Redis и др.). Spring использует Spring Cache Abstraction, которая оборачивает кеширующую логику в аннотации:
▪️ @Cacheable — кладёт результат в кеш
▪️ @CachePut — обновляет кеш
▪️ @CacheEvict — удаляет из кеша
За кулисами используется прокси (через Spring AOP или CGLIB), который перехватывает вызовы методов, проверяет кеш и возвращает либо сохранённое значение, либо выполняет метод и кеширует результат.
Если вызвать метод с @Cacheable, Spring выполняет несколько шагов:
1. Определяет ключ кеша
▪️ По умолчанию ключ формируется из параметров метода
▪️ Можно задать кастомный ключ через key = "#id"
2. Проверяет кеш-провайдер
▪️ Дефолтный провайдер — ConcurrentHashMap
▪️ Можно подключить Redis, Caffeine, EhCache и т. д.
3. Возвращает данные
▪️ Если значение есть в кеше — сразу отдаётся
▪️ Если нет – вызывается метод и результат сохраняется в кеше
— Кеш работает только для Spring-управляемых бинов (если метод вызван внутри того же класса — кеш не сработает)
— Не кешируйте изменяемые объекты, иначе возможны неожиданные побочные эффекты
— Очищайте кеш, если данные меняются (@CacheEvict)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🎉5🔥3❤1
Forwarded from Библиотека собеса по Java | вопросы с собеседований
В компании возникла необходимость повысить производительность системы за счёт внедрения распределённого кеша. Ваша задача — спроектировать и реализовать высоконагруженный сервис кеширования, обеспечивающий быструю и надёжную работу в условиях интенсивного использования.
▪️ Условия:
1. Высокая доступность: сервис должен быть устойчив к сбоям и обеспечивать непрерывную работу.
2. Масштабируемость: возможность горизонтального масштабирования для обработки увеличивающегося объёма данных.
3. Консистентность данных: обеспечение согласованности данных между узлами кеша.
4. Управление устареванием: реализация механизма автоматического удаления устаревших данных из кеша.
— Выбор технологии: определение подходящего решения для распределённого кеширования (например, Redis, Memcached или собственная реализация).
— Репликация и шардирование: обеспечение надёжности и производительности через распределение данных и их дублирование.
— Алгоритмы замещения: выбор и реализация стратегий удаления устаревших или редко используемых данных (например, LRU, LFU).
Реализация на картинке 👆🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥7🤔4😁2🥰1
Forwarded from Proglib.academy | IT-курсы
🧮🔠 Математика в действии: решаем хитрые задачи по прогнозированию, оптимизации и логике
Статья, которая поможет развить навыки решения задач с помощью математики.
➡️ Вот что вас ждет
1️⃣ Прогнозирование численности населения — используем цепи Маркова для предсказания миграций между городом и пригородами.
2️⃣ Минимизация затрат — находим минимальное скалярное произведение векторов для оптимального распределения задач между работниками.
3️⃣ Машина времени — решаем задачу максимального числа пересекающихся временных интервалов с помощью заметающей прямой.
4️⃣ Алгоритм Целлера — вычисляем день недели по дате. Проверка на практике.
🔵 Хочешь прокачаться в математике для ML? Тогда разбирайся с этими задачами и не упусти вебинар: «Математика для ML: от теории к практике».
👉 Читать статью
Статья, которая поможет развить навыки решения задач с помощью математики.
👉 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2❤1🎉1🥱1
Вам нравится читать контент на этом канале?
Возможно, вы задумывались о том, чтобы купить на нем интеграцию?
Следуйте 3 простым шагам, чтобы сделать это:
1) Нажмите на ссылку: Вход
2) Пополняйтесь удобным способом
3) Размещайте публикацию
Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его
Возможно, вы задумывались о том, чтобы купить на нем интеграцию?
Следуйте 3 простым шагам, чтобы сделать это:
1) Нажмите на ссылку: Вход
2) Пополняйтесь удобным способом
3) Размещайте публикацию
Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его
Telegram
Telega.in
Платформа для запуска рекламы в Telegram: продвигайтесь в проверенных каналах и чатах.
👍3❤1🔥1
Часто пишете SQL-запросы и хотите быстро оптимизировать их или проверить на ошибки? Используйте этот промпт:
📝 Промпт:
Analyze the following SQL query used in Java. Explain its purpose, optimize it for performance, and suggest alternative approaches. If applicable, discuss indexing strategies and transaction handling.
String sql = "[вставьте ваш SQL-запрос сюда]";
— Добавьте
Explain how to use PreparedStatement to prevent SQL injection
и получите безопасную версию кода.— Добавьте
Suggest a Hibernate or JPA equivalent
, если хотите уйти от ручного SQL.— Добавьте
Optimize this for large datasets
, если у вас миллионы записей в таблице.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥1👏1
🤝 💼 IT-конференции: как сходить на мероприятие и извлечь из него максимум пользы
🚀 IT-конференции — это не только про кофе-брейки и бесплатные стикеры. Это шанс завести полезные знакомства, узнать инсайдерскую информацию и найти новые карьерные возможности. Но для этого нужно не просто прийти, а правильно подготовиться и ловить важные моменты.
Как извлечь из мероприятия максимум пользы? Как сделать так, чтобы оно дало не только эмоции, но и реальные бонусы для вашей карьеры?
🔗 Подробнее в статье
🐸 Библиотека джависта
🚀 IT-конференции — это не только про кофе-брейки и бесплатные стикеры. Это шанс завести полезные знакомства, узнать инсайдерскую информацию и найти новые карьерные возможности. Но для этого нужно не просто прийти, а правильно подготовиться и ловить важные моменты.
Как извлечь из мероприятия максимум пользы? Как сделать так, чтобы оно дало не только эмоции, но и реальные бонусы для вашей карьеры?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1🎉1
Неэффективное использование JDBC может легко стать узким местом и убить производительность. Вот пошаговый разбор, как сделать работу с JDBC быстрее и стабильнее.
Используйте HikariCP, Apache DBCP или C3P0 вместо стандартного DriverManager. Это позволит переиспользовать соединения, а не открывать новое на каждый запрос.
Во-первых, это снижает нагрузку на базу за счёт кеширования плана запроса. Во-вторых, убирает SQL-инъекции на уровне JDBC.
— TYPE_FORWARD_ONLY, если нужно просто пробежать по данным.
— TYPE_SCROLL_INSENSITIVE позволяет скроллить данные, но требует больше памяти.
— TYPE_SCROLL_SENSITIVE редко нужен, но обновляет данные в реальном времени.
Не забирайте сразу всю таблицу – старайтесь выбирать только нужные поля и ограничивать количество строк.
По умолчанию, каждый запрос в JDBC – это отдельная транзакция. Включите setAutoCommit(false) и коммитите изменения пачками, чтобы уменьшить нагрузку.
Если какие-то SQL-запросы выполняются слишком долго – используйте SLF4J + P6Spy или встроенные средства логирования в пуле соединений, чтобы их отлавливать.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥4❤3🎉1
Сколько разработчиков – столько и мнений. Одни не видят альтернативы Spring Boot, несмотря на его "магичность" и прожорливость. Другие кайфуют от Quarkus за его скорость, но не всегда могут убедить бизнес на него перейти. А кто-то вообще пилит микросервисы на Micronaut и радуется жизни.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2😁2🥱2
Если вам приходилось перезапускать весь дебаг из-за ошибки в анализе кода, есть лучший способ – Reset Frame. Он позволяет откатить выполнение метода и повторить его выполнение с начала, без полной перезагрузки приложения.
▪️ Как использовать
1. Запускаем дебаг и доходим до брейкпоинта.
2. Открываем окно Debug.
3. Во вкладке Frames (стек вызовов) выбираем нужный метод.
4. Нажимаем ПКМ → Reset Frame.
5. Код откатится на вход в метод, как будто вы только что в него зашли.
▪️ Когда это полезно
— Ошиблись при анализе и хотите пересмотреть состояние переменных
— Нужно повторно выполнить метод, не перезапуская весь процесс
— Дебажите рекурсию или сложные цепочки вызовов
— Reset Frame не откатывает глобальные изменения (например, изменения в базе или внешних файлах).
— Он работает только в пределах одного метода – не выйдет вернуть выполнение назад на несколько вызовов.
▪️ Как использовать Reset Frame эффективнее
Можно комбинировать его с Evaluate Expression, чтобы перед повторным вызовом метода изменять переменные вручную.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍7❤3💯2
Отобрали для вас полезные и проверенные каналы для программистов — в них вы найдете все самое интересное, от технических новостей до практических гайдов.
IT Job Hub | Работа и вакансии в IT — избранные IT-вакансии
Библиотека программиста — новости из мира IT и технологий
Книги для программистов — самые годные книги по любым языкам и стекам
IT-мемы — мемы про жизу айтишника
Proglib Academy — обучение и курсы, чтобы стать топовым специалистом
Азбука айтишника — азы из мира разработки
Библиотека нейросетей — лайфхаки и промпты для разных задач, баттлы нейронок и новости из мира ИИ
Библиотека фронтендера — все о JS, React, Angular и не только
Библиотека мобильного разработчика — лайфхаки и новости из мира Swift и Kotlin
Библиотека хакера — уязвимости, атаки, бэкдоры и как от них защититься
Библиотека тестировщика — самое интересное о том, как крашить код
🦫 Go
Библиотека Go-разработчика
Библиотека задач по Go
Библиотека Go для собеса
Вакансии по Go
#️⃣ C#
Библиотека шарписта
Библиотека задач по C#
Библиотека собеса по C#
Вакансии по C#
🔧 DevOps
Библиотека devops’а
Библиотека задач по DevOps
Библиотека собеса по DevOps
Вакансии по DevOps & SRE
🐘 PHP
Библиотека пхпшника
Библиотека задач по PHP
Библиотека PHP для собеса
Вакансии по PHP, Symfony, Laravel
🐍 Python
Библиотека питониста
Библиотека Python для собеса
Библиотека задач по Python
Вакансии по питону, Django, Flask
☕️ Java
Библиотека джависта
Библиотека задач по Java
Библиотека Java для собеса
Вакансии по Java
📊 Data Science
Библиотека дата-сайентиста
Библиотека задач по Data Science
Библиотека Data Science для собеса
Вакансии по Data Science
🎮 C++
Библиотека C/C++ разработчика
Библиотека задач по C++
Библиотека C++ для собеса
Вакансии по C++
Подписывайтесь на интересные вам каналы и сохраняйте пост в закладки, чтобы не потерять 🔑
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1🔥1👏1
Forwarded from Азбука айтишника
🛠 Как внедрить CI/CD: 10 самых важных шагов
CI/CD — это ключ к быстрой, качественной и безопасной разработке ПО. Наш гайд поможет вам настроить эффективный пайплайн, автоматизировать рутину и ускорить релизы.
➡️ Что внутри статьи
▪️ Лучшие практики работы с Git
▪️ Автоматизация сборки и тестирования
▪️ Внедрение автоматизированного тестирования
▪️ Эффективное управление зависимостями
▪️ Автоматизированный деплой без простоя
▪️ Настройка мониторинга и логирования
📎 Читайте гайд
Азбука айтишника
CI/CD — это ключ к быстрой, качественной и безопасной разработке ПО. Наш гайд поможет вам настроить эффективный пайплайн, автоматизировать рутину и ускорить релизы.
▪️ Лучшие практики работы с Git
▪️ Автоматизация сборки и тестирования
▪️ Внедрение автоматизированного тестирования
▪️ Эффективное управление зависимостями
▪️ Автоматизированный деплой без простоя
▪️ Настройка мониторинга и логирования
Азбука айтишника
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1😁1
Сегодня отмечаем вклад девушек-разработчиков, аналитиков, тестировщиков, тимлидов и всех, кто влюблён в код. Без вас IT не было бы таким, каким мы его знаем. С праздником, коллеги 💐
Женщины оставили огромный след в истории IT. Если вам кажется, что программирование — это исключительно «мужская территория», взгляните, вот лишь несколько легендарных женщин:
🔹 Ада Лавлейс — автор первой компьютерной программы ещё в 19 веке.
🔹 Грейс Хоппер — создала первый компилятор и популяризировала термин «баг».
🔹 Барбара Лисков — её принцип Liskov Substitution является основой ООП, в том числе в Java.
🔹 Эдит Кларк — первая женщина-инженер, внесшая вклад в вычислительные методы в энергетике.
🔹 Маргарет Гамильтон — разработала софт для посадки «Аполлона-11» на Луну.
А это только малая часть. В статье собраны ещё больше вдохновляющих историй.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18👍6🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20😁10🔥4❤3🥰1
🔹 JEP-ы в фокусе:
— Автонастройка хипа для Serial GC. Теперь JVM сама решает, сколько памяти нужно вашему приложению.
— AOT-оптимизации. Меньше возни с кэшем, JVM научилась готовить его сама.
— Cooperative JFR Sampling. Профилирование без лишних тормозов.
🔹 Релизы:
— JDK 24 (Build 36) и JDK 25 (Build 9): свежие сборки, багрепорты приветствуются.
— Hibernate ORM 7.0.0 (Beta 4): новая Jakarta Persistence 3.2 и прокачанный анализ моделей.
— Quarkus 3.18.2: фиксы и поддержка последних обновлений зависимостей.
— Micronaut 4.7.5: улучшения в безопасности, валидации и Kafka.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁3🔥2🎉1
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Serial GC — это
🔹 Как работает
🔹 Когда использовать
—
—
—
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2❤1
Кто-то считает, что вежливость — базовый навык общения даже с машиной. Кто-то уверен, что железяке безразличны ваши манеры.
Пишете ли вы "Спасибо" и "Пожалуйста" AI? Что в целом думаете на этот счёт?
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍2🔥1