⚡️ Если вы вдруг забыли: у нас можно купить рекламу
Библиотека программиста — медиа с миллионной аудиторией из 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 и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования
👉Подписаться👈
Forwarded from Java jobs — вакансии для java-разработчиков
#дайджест #Javadevjob
Вакансии Java разработчиков уровня Junior
▪️ Java Developer
Удалёнка / Офис (Москва, Новосибирск), Динамика
▪️ Backend Java-разработчик
Офис (Череповец), BIV
Вакансии Java разработчиков уровня Middle
▪️ Java-разработчик
Гибрид (Москва), Онлайн-кинотеатр Иви
▪️ Java-разработчик
Офис (Томск), Банк России
Вакансии Java разработчиков уровня Senior
▪️ Java Developer
Офис (Пермь) / Удалёнка, Galileosky
▪️ Java-разработчик
Гибрид (Москва), Санкт-Петербургская Международная Товарно-сырьевая Биржа
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии Java разработчиков уровня Junior
▪️ Java Developer
Удалёнка / Офис (Москва, Новосибирск), Динамика
▪️ Backend Java-разработчик
Офис (Череповец), BIV
Вакансии Java разработчиков уровня Middle
▪️ Java-разработчик
Гибрид (Москва), Онлайн-кинотеатр Иви
▪️ Java-разработчик
Офис (Томск), Банк России
Вакансии Java разработчиков уровня Senior
▪️ Java Developer
Офис (Пермь) / Удалёнка, Galileosky
▪️ Java-разработчик
Гибрид (Москва), Санкт-Петербургская Международная Товарно-сырьевая Биржа
Понравились вакансии?
❤️ — да
🤔 — нет
novosibirsk.hh.ru
Вакансия Junior Java Developer в Новосибирске, работа в компании Динамика (вакансия в архиве c 9 февраля 2025)
Зарплата: от 65000 до 110000 ₽ за месяц. Новосибирск. Требуемый опыт: 1–3 года. Полная занятость. Дата публикации: 06.02.2025.
Forwarded from Книги для программистов
📚 ТОП-11 книг по базам данных в 2025 году
Хотите разобраться в базах данных, но не знаете, с чего начать? Мы подготовили подборку из 11 лучших книг, которые помогут вам освоить раздичные базы данных, паттерны и антипаттерны, а также оптимизацию запросов.
🔗 Читайте в статье
Хотите разобраться в базах данных, но не знаете, с чего начать? Мы подготовили подборку из 11 лучших книг, которые помогут вам освоить раздичные базы данных, паттерны и антипаттерны, а также оптимизацию запросов.
🔗 Читайте в статье
Вместо обычных POJO-классов для DTO используйте record (Java 14+). Меньше кода, больше удобства.
Record автоматически создает иммутабельный класс с приватными финальными полями, конструктором, геттерами, а также переопределенными методами toString(), equals() и hashCode().
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + "}";
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
User user = (User) obj;
return age == user.age && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
public record User(String name, int age) {}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 — Через IDE
👾 — Через терминал
🎉 — В Docker-контейнере
⚡️ — В облаке
🤔 — Ещё не понял, как запускать
Please open Telegram to view this post
VIEW IN TELEGRAM
State — это поведенческий паттерн, который позволяет объекту менять свое поведение в зависимости от внутреннего состояния. Вместо множества условных операторов (if-else или switch), каждое состояние представляется отдельным классом, а сам объект делегирует управление текущему состоянию.
Когда использовать
🔹 Когда у объекта есть несколько состояний, и его поведение зависит от текущего состояния.
🔹 Когда код с if-else или switch начинает разрастаться и усложняет поддержку.
🔹 Когда необходимо четко разделить логику различных состояний и сделать систему более гибкой.
Преимущества
Недостатки
State — мощный инструмент, когда объекту нужно динамически изменять свое поведение. Он особенно полезен в конечных автоматах, обработке пользовательских действий и моделировании процессов с четко определенными шагами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Swipe right or swipe left
Что делать, если твои мэтчи в жизни не такие точные, как твой код?
Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.
📌 Мы возьмем реальные данные со speed dating.
📌 Обучим модель, которая скажет: match или swipe left.
📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).
💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.
👉 Записаться
Что делать, если твои мэтчи в жизни не такие точные, как твой код?
Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.
📌 Мы возьмем реальные данные со speed dating.
📌 Обучим модель, которая скажет: match или swipe left.
📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).
💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.
👉 Записаться
Forwarded from Библиотека собеса по Java | вопросы с собеседований
Микросервисы — это
🔹 Ключевые принципы
—
—
—
—
Please open Telegram to view this post
VIEW IN TELEGRAM
В статье рассматриваются такие утилиты, как jps, jstack, jinfo, jshell, jar, java, javac, javap и jcmd.
Эти инструменты помогают управлять процессами Java, анализировать состояние потоков, получать информацию о системных свойствах, интерактивно выполнять код и многое другое.
Please open Telegram to view this post
VIEW IN TELEGRAM