Какую сумму вы тратите на биохакинг ежемесячно?
Anonymous Poll
9%
💰 До 5000 руб.
3%
💸 5000-15000 руб.
1%
🏦 15000-30000 руб.
3%
💎 Более 30000 руб.
83%
0️⃣ Не трачу деньги на это
😂 Dev Memes: утренние дилеммы, правки и зарплаты
Третья неделя года позади, а мы всё ещё смеёмся над мемами. Ловите подборку лучших шуток из нашего канала «Библиотека IT-мемов».
🔗 Подборка самых топовых мемов
Третья неделя года позади, а мы всё ещё смеёмся над мемами. Ловите подборку лучших шуток из нашего канала «Библиотека IT-мемов».
🔗 Подборка самых топовых мемов
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
JRebel — это инструмент, который позволяет перезагружать код без перезапуска приложения. Это значительно экономит время и ускоряет процесс тестирования изменений.
— JRebel применяет изменения в коде без рестарта JVM. Он поддерживает изменения классов, аннотаций, конфигурации Spring и других фреймворков.
— Сокращает время цикла разработки, убирая необходимость на повторные запуски.
— Поддерживает множество фреймворков: Spring, Hibernate, Quarkus, Micronaut и другие.
— Совместим с IntelliJ IDEA, Eclipse и VS Code.
— Позволяет сразу видеть результат изменений в логах и UI.
— Пробный период ограничен, а полная версия JRebel стоит недешево.
— Хотя перезапуск не требуется, обновление классов занимает некоторое время.
— JRebel может некорректно обработать изменения в структуре классов (например, при добавлении нового поля в сериализуемый объект).
— В больших проектах может слегка замедлять работу приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Если часто используете String для конкатенации (+), замените его на StringBuilder — это ускорит выполнение и снизит нагрузку на память.
String result = "";
for (int i = 0; i < 1000; i++) {
result += i; // Каждое сложение создаёт новый объект
}
StringBuilder result = new StringBuilder();
for (int i = 0; i < 1000; i++) {
result.append(i); // Использует один буфер, без лишних объектов
}
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Если вы вдруг забыли: у нас можно купить рекламу
Библиотека программиста — медиа с миллионной аудиторией из IT-сферы. Что у нас есть:
• 60+ телеграм-каналов по разным IT-направлениям, от Python до DevOps
• 25 000 daily active users на сайте, который поможет усилить продвижение
• Возможность сделать нативную интеграцию, виральный пост и не только
За айтишной аудиторией — к нам 😏
По вопросам рекламы пишите сюда → @proglib_adv
Библиотека программиста — медиа с миллионной аудиторией из IT-сферы. Что у нас есть:
• 60+ телеграм-каналов по разным IT-направлениям, от Python до DevOps
• 25 000 daily active users на сайте, который поможет усилить продвижение
• Возможность сделать нативную интеграцию, виральный пост и не только
За айтишной аудиторией — к нам 😏
По вопросам рекламы пишите сюда → @proglib_adv
🔥 — Spring Boot
👾 — Quarkus
🎉 — Micronaut
⚡️ — Jakarta EE
🤔 — Другое, напишу в комментах
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
Redis — это мощный инструмент для работы с данными в памяти, который часто используется как кэш, база данных или брокер сообщений. Однако в некоторых случаях другие решения могут оказаться более подходящими. Вот три альтернативы Redis, которые заслуживают внимания:
Dragonfly — это современное высокопроизводительное хранилище данных в памяти, которое позиционируется как замена Redis. Оно предлагает лучшую производительность и масштабируемость, особенно для задач с высокой нагрузкой. Dragonfly поддерживает протокол Redis, что делает переход на него практически безболезненным.
• Плюсы:
KeyDB — это многопоточная версия Redis, которая использует несколько ядер процессора для повышения производительности. Он полностью совместим с Redis, поэтому вам не придется переписывать код при переходе.
• Плюсы:
Memcached — это классическое решение для кэширования данных в памяти. Оно простое, надежное и отлично подходит для задач, где требуется высокая скорость доступа к данным. Хотя Memcached уступает Redis в функциональности, он остается популярным выбором для кэширования.
• Плюсы:
Please open Telegram to view this post
VIEW IN TELEGRAM
MapStruct анализирует названия полей в исходном (source) и целевом (target) классах. Если поля совпадают по названию и типу, он автоматически создаёт код для их преобразования.
Когда названия полей не совпадают, нужно явно указать соответствие с помощью аннотации @Mapping:
— source — поле в исходном классе
— target — поле в целевом классе
@Mapping(source = "fullName", target = "name")
UserDTO toDTO(User user);
1. Добавьте зависимости: mapstruct, mapstruct-processor
2. Выберите интерфейс или абстрактный класс и определите методы для преобразования объектов
3. Используйте маппер. В Spring-приложении маппер можно заинжектить как обычный бин.
Документация MapStruct приводит примеры с интерфейсами, но библиотека поддерживает и абстрактные классы. Выбор за вами.
Интерфейс — MapStruct сам создаёт реализацию:
@Mapper(componentModel = "spring")
public interface UserMapper {
@Mapping(source = "fullName", target = "name")
UserDTO toDTO(User user);
}
Абстрактный класс — позволяет добавлять кастомную логику:
@Mapper(componentModel = "spring")
public abstract class UserMapper {
@Mapping(source = "fullName", target = "name")
public abstract UserDTO toDTO(User user);
public String mapAgeToString(int age) {
return age + " лет";
}
}
📌 Имена методов можно задавать любые. MapStruct анализирует типы аргументов и возвращаемых значений, чтобы понять, что куда маппить.
При использовании componentModel = "spring" маппер регистрируется как Spring-бин. Что позволяет заинжектить маппер:
@Service
public class UserService {
private final UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public UserDTO convertUser(User user) {
return userMapper.toDTO(user);
}
}
— Маппинг DTO ↔️ Entity в Spring-приложениях
— Конвертация данных между разными объектами
— Обработка вложенных структур и коллекций
Please open Telegram to view this post
VIEW IN TELEGRAM
☢️ Как не попасть в токсичную компанию: чек-лист для айтишника
C офферами от Сбера, Вконтакте, Яндекса и других айтишных гигантов все понятно — это стабильные компании, работать в которых мечтают многие.
Но вот что делать, если вас зовут работать в ноунейм-компанию, при этом предлагают з/п сильно выше рынка, полную удаленку и 100500 «плюшек»?
Рассказываем, как проверить будущего работодателя и не оказаться в компании-однодневке с невыплатами зарплаты и токсичной культурой.
👉 Читать статью
C офферами от Сбера, Вконтакте, Яндекса и других айтишных гигантов все понятно — это стабильные компании, работать в которых мечтают многие.
Но вот что делать, если вас зовут работать в ноунейм-компанию, при этом предлагают з/п сильно выше рынка, полную удаленку и 100500 «плюшек»?
Рассказываем, как проверить будущего работодателя и не оказаться в компании-однодневке с невыплатами зарплаты и токсичной культурой.
👉 Читать статью
В Java 21 появилась революционная фича — виртуальные потоки (Virtual Threads). Это лёгкие потоки, которые управляются самой JVM, а не операционной системой. Они позволяют создавать тысячи и даже миллионы потоков без значительных затрат ресурсов.
Обычные потоки (Thread) привязаны к потокам ОС и работают с тяжёлым контекстным переключением (context switching).
Virtual Threads — это user-mode потоки, управляемые JVM, а не ОС, поэтому они могут эффективно мультиплексироваться на ограниченном количестве платформенных потоков.
🔹 Ключевая особенность
Виртуальные потоки не блокируют платформенные потоки, когда выполняют блокирующие операции ввода-вывода (I/O). Они просто освобождают платформенный поток и продолжают выполнение, когда ресурс снова доступен.
Пример
public class VirtualThreadsDemo {
public static void main(String[] args) throws InterruptedException {
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
IntStream.range(0, 10_000).forEach(i ->
executor.submit(() -> {
System.out.println("Task " + i + " running on " + Thread.currentThread());
Thread.sleep(100);
})
);
}
}
}
Этот код создаёт 10 000 потоков, но JVM будет эффективно управлять ими без перегрузки системы.
— Высоконагруженные I/O задачи.
— Обработка веб-запросов без перегрузки ресурсов.
— Микросервисы, которые взаимодействуют с API.
— Асинхронные операции, где ранее использовали CompletableFuture.
— При вычислениях на процессоре.
— При работе с кодом, который активно использует synchronized.
— При глубокой интеграции со сторонними библиотеками, которые не оптимизированы под виртуальные потоки.
— Плюсы: миллионы потоков без overhead, упрощённый асинхронный код без CompletableFuture, меньше блокировок и выше производительность, полная совместимость со старыми API.
— Минусы: может ломать старый код с synchronized, не даёт преимуществ для CPU-bound задач, требует оптимизации библиотек под Virtual Threads.
Virtual Threads — мощный инструмент, который не заменяет потоки ОС, но отлично подходит для массовых I/O-задач. Если у вас есть сервис, работающий с сетью, базами данных или API — пора внедрять Virtual Threads.
Please open Telegram to view this post
VIEW IN TELEGRAM
Quartz долгое время считался стандартом для планирования задач. Однако с течением времени появились более современные и эффективные альтернативы.
Например, такие инструменты, как JobRunr и db-scheduler, предлагают более простые API, лучшую производительность и встроенные возможности мониторинга.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.
В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования
👉Подписаться👈
В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования
👉Подписаться👈