Библиотека джависта | Java, Spring, Maven, Hibernate
24.9K subscribers
1.86K photos
38 videos
42 files
2.64K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
📚 Pragmatic Unit Testing in Java with JUnit (2024)
✍️ Автор: Jeff Langr
📃 Страниц: 512

В этом издании вы узнаете, как создавать лаконичные и удобные в обслуживании модульные тесты. Новые главы содержат примеры для тестирования общих концепций, а также рекомендации по использованию современных инструментов искусственного интеллекта в разработке и тестировании. Обновленные темы включают повышение качества тестов с помощью мнемоник разработки, увеличение рентабельности инвестиций за счет рефакторинга тестового и производственного кода, а также использование тестов для стимулирования разработки.
Новый год — время для новых начинаний!
Пока все строят планы на будущее, подумайте, что поможет вам двигаться вперёд в карьере. Мы знаем, что навыки в IT открывают огромные возможности — и мы готовы помочь вам начать!

🔹 Почему IT?

- Большинство компаний активно ищут специалистов.
- Вы можете работать из любой точки мира — с гибким графиком и интересными задачами.
- А ещё IT — это высокий доход и стремительный карьерный рост.

Возможно, именно сейчас тот момент, когда стоит инвестировать в себя и развить востребованные навыки. У нас есть конструктор курсов, с помощью которого вы сможете составить свой идеальный план обучения — под свои цели и интересы.

📚 Как это работает?

- Несколько программ по цене одной — выбирайте всё, что вам нужно.
- Бессрочный доступ — учитесь в своём ритме и когда удобно.
- Это выгодно — вы получаете навыки, которые помогут вам расти профессионально и зарабатывать больше.

А для тех, кто решит сделать шаг в будущее до конца года, у нас есть кое-что особенное… 🎁 Узнайте больше

Как выбрать свой путь?
Мы предлагаем несколько уникальных комбинаций курсов, которые помогут вам стать настоящим экспертом:

🔵 Математика для Data Science + Алгоритмы и структуры данных — для тех, кто хочет готовиться к собеседованиям в топовые компании.

🔵 Алгоритмы + ML — чтобы не просто решать задачи, а понимать, как работают современные технологии.

🔵 Frontend + ML — создавайте приложения и учитесь работать с нейросетями.

🔵 И другие комбинации для разных целей.

Новогодний подарок, который будет работать на вас весь год — это отличная идея! 🎁 Начните сейчас

Развивайтесь в IT — и будущее уже будет в ваших руках!
🕯 Паттерн Легковес (Flyweight)

Flyweight — это структурный паттерн, который позволяет экономить память за счёт повторного использования уже имеющихся объектов, разделяя их состояние на внутреннее и внешнее. Внутреннее состояние хранится в самом объекте и не зависит от контекста, а внешнее передаётся извне.

Использование:

🔹 Когда в системе требуется большое количество однотипных объектов, и это негативно влияет на использование памяти.
🔹 Когда можно разделить состояние объекта на неизменяемую (внутреннюю) и изменяемую (внешнюю) части.
🔹 Для оптимизации ресурсов в системах с высокой степенью повторения данных.

Преимущества:

1️⃣ Экономия памяти: значительно снижает количество создаваемых объектов за счёт их повторного использования.
2️⃣ Увеличение производительности: сокращает накладные расходы на создание и хранение объектов.
3️⃣ Чёткое разделение состояний: внутреннее состояние становится независимым от внешнего контекста.

Недостатки:


1️⃣ Усложнение кода: управление внешним состоянием может стать менее удобным.
2️⃣ Повышенные затраты на реализацию: требует точного анализа системы для выделения общего состояния.
3️⃣ Не всегда применим: если объекты не имеют повторяющихся данных, паттерн бесполезен.

📌 Flyweight отлично подходит для оптимизации ресурсов в играх (например, представление графических объектов) или при работе с большими наборами данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
🌩 Что такое S3 и как его использовать в Java?

Amazon S3 (Simple Storage Service) — это облачное хранилище от AWS, которое позволяет безопасно сохранять и извлекать данные любого объёма и формата. S3 предоставляет масштабируемое решение для хранения файлов, данных резервного копирования, статического контента для веб-приложений и многого другого.

🔹 Ключевые особенности S3:


- Данные хранятся в виде объектов (файлов), которые организуются в бакеты.
- S3 легко интегрируется с приложениями благодаря API.
- Поддержка шифрования данных и управление доступом через IAM.
- От небольших проектов до огромных хранилищ данных.
- 99,999999999% (11 девяток!) долговечности данных.

🔹 Как начать работу с S3 в Java?

1️⃣ Подключите SDK:
Добавьте зависимость в ваш проект.

<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>{actualVersion}</version>
</dependency>


2️⃣ Настройте доступ:
Создайте учетные данные AWS (Access Key и Secret Key). Эти ключи позволяют вашему приложению взаимодействовать с S3.

3️⃣ Пример загрузки/выгрузки файла в/из S3:

public class S3Example {
public static void main(String[] args) {
S3Client s3 = S3Client.create();

// Загрузка файла в S3
s3.putObject(
PutObjectRequest.builder()
.bucket("my-bucket-name")
.key("example.txt")
.build(),
Paths.get("path/to/local/file.txt")
);
System.out.println("Файл успешно загружен в S3");

// Выгрузка файла из S3
s3.getObject(
GetObjectRequest.builder()
.bucket("my-bucket-name")
.key("example.txt")
.build(),
Paths.get("path/to/downloaded/file.txt")
);
System.out.println("Файл успешно выгружен из S3");
}
}


💡 Где это пригодится?

- Хранение статического контента для веб-приложений.
- Бэкапы данных и журналов.
- Интеграция с микросервисами для обмена файлами.
- Хранение обучающих наборов данных для ML.
Please open Telegram to view this post
VIEW IN TELEGRAM
Где вы чаще всего пишете код?

❤️ IntelliJ IDEA
🔥 Vim/Emacs
👍🏼 Eclipse
⚡️ VS Code
😁 Notepad++

💬 Пишите в комментарии интересные/полезные фичи вашего инструмента
Please open Telegram to view this post
VIEW IN TELEGRAM
#дайджест #Javadevjob

Вакансии Java разработчиков уровня Junior

▪️ Программист Java (junior)
Гибрид (Челябинск), ЧЕЛЯБИНВЕСТБАНК
Подробнее

▪️ Java разработчик [Junior]
Офис (Омск), deeplay
Подробнее

Вакансии Java разработчиков уровня Middle

▪️ Java разработчик
Офис (Москва) / Удалёнка, ЛАНИТ
Подробнее

▪️ Java разработчик
Удалёнка (РФ), Sitronics Group
Подробнее

Вакансии Java разработчиков уровня Senior

▪️ Senior Java Developer
Удалёнка / Офис (Москва, Санкт-Петербург), Метр квадратный
Подробнее

▪️ Senior Java developer
Удалёнка (РФ), Газпромбанк
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
👀 Задачи с собеседований: Поиск подмассива с максимальной суммой (middle)

— Дан массив целых чисел, необходимо найти подмассив с наибольшей суммой и вернуть эту сумму.

💡 Ключевые моменты:

- Подмассив — это непрерывная последовательность элементов исходного массива.
- Требуется определить такую последовательность, сумма элементов которой максимальна.
- Эффективное решение задачи достигается с помощью алгоритма Кадане, который позволяет найти максимальную сумму подмассива за линейное время O(n).

Реализация на картинке 👆🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
ℹ️ Что такое ForkJoinPool?

ForkJoinPool — это специализированный пул потоков в Java, предназначенный для выполнения задач, которые можно разделить на более мелкие подзадачи и объединить результаты их выполнения. Этот пул является частью пакета java.util.concurrent и основан на принципе разделяй и властвуй (divide and conquer).

ForkJoinPool позволяет эффективно выполнять параллельные вычисления, автоматически распределяя задачи между доступными потоками и оптимизируя их выполнение. Он используется для задач, которые могут быть:

- Рекурсивно разделены на подзадачи.
- Выполнены параллельно.
- Объединены в один итоговый результат.

🔹 Как работает?

1️⃣ Разделение задачи (fork):
Большая задача разбивается на несколько подзадач, каждая из которых может быть выполнена независимо.

2️⃣ Выполнение подзадач:
Каждая подзадача отправляется в пул потоков для выполнения.

3️⃣ Объединение результатов (join):
После выполнения подзадачи результаты объединяются для получения итогового значения.

🔹 Пример использования:

Для работы с ForkJoinPool используются два ключевых абстрактных класса:

- RecursiveTask<V> — для задач, которые возвращают результат.
- RecursiveAction — для задач, которые ничего не возвращают.

Пример: нахождение суммы чисел массива с помощью RecursiveTask:

class SumTask extends RecursiveTask<Integer> {
private int[] array;
private int start, end;

public SumTask(int[] array, int start, int end) {
this.array = array;
this.start = start;
this.end = end;
}

@Override
protected Integer compute() {
if (end - start <= 10) {
int sum = 0;
for (int i = start; i < end; i++) {
sum += array[i];
}
return sum;
} else {
int mid = (start + end) / 2;
SumTask leftTask = new SumTask(array, start, mid);
SumTask rightTask = new SumTask(array, mid, end);

leftTask.fork();
int rightResult = rightTask.compute();
int leftResult = leftTask.join();

return leftResult + rightResult;
}
}
}

public class ForkJoinExample {
public static void main(String[] args) {
ForkJoinPool forkJoinPool = new ForkJoinPool();

int[] array = new int[100];
for (int i = 0; i < array.length; i++) {
array[i] = i + 1;
}

SumTask task = new SumTask(array, 0, array.length);
int result = forkJoinPool.invoke(task);

System.out.println("Сумма: " + result);
}
}


🔹 Преимущества ForkJoinPool:


- Work-Stealing алгоритм:
Потоки берут задачи из очередей других потоков, если у них нет своей работы. Это минимизирует простои.

- Поддержка параллельных вычислений:
Упрощает разработку алгоритмов, которые можно разделить и выполнить параллельно.

- Автоматическая настройка потоков:
Количество потоков настраивается автоматически в зависимости от доступных процессорных ядер (Runtime.getRuntime().availableProcessors()).

🔹 Когда использовать?

- Для задач, которые можно рекурсивно разбить на подзадачи.
- Для вычислительных задач, таких как сортировка, поиск, суммирование, обработка больших данных.
- Когда требуется высокая производительность в многопоточной среде.
Please open Telegram to view this post
VIEW IN TELEGRAM
Где вы чаще всего работаете?

❤️ Дома (удалёнка)
🔥 В офисе
👍🏼 Гибрид
⚡️ Коворкинг или кафе
😁 Другое (пишите в комментарии)

💬 Похвастайтесь вашим рабочим местом в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
🦑👨💻 Программист в «Игре в кальмара»: каковы твои шансы выжить?

Ежедневно управляешь потоками, выстраиваешь архитектуру и пишешь идеальный код? Но каковы твои шансы, если код станет реальностью?

Остаться в живых или получить NPE? Все зависит от тебя!

📌 Пройти тест
Please open Telegram to view this post
VIEW IN TELEGRAM
Вы покрываете код тестами?

🎉 Конечно, тесты – это основа качественного кода
🔥 Иногда пишу, но не всегда
👍🏼 Только если проект сложный
🌚 Никогда не пишу тесты
😁 Что такое тесты?

💬 Поделитесь мнением в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Java в 2024: Главные тренды этого года

Вот интересные тренды java разработки этого года:

🔵 Java в облаке: микросервисы, Docker, Kubernetes — разработка летит в облака, обеспечивая гибкость и масштабируемость.
🔵 Реактивный подход: RxJava и Reactor стали мастхэв для приложений, работающих в реальном времени.
🔵 Ставка на безопасность: киберугрозы растут, но Java готова — шифрование, строгие стандарты и защищённые API.
🔵 Java + ИИ: машинное обучение с TensorFlow и Spark даёт умным приложениям новый уровень.
🔵 Low-code платформы: минимальный код = максимум скорости разработки.
🔵 DevOps и CI/CD: автоматизация на каждом этапе, от тестирования до релиза.

А Вы готовы ворваться в новый 2025 год? 🎄
Please open Telegram to view this post
VIEW IN TELEGRAM
🎁 Лучше икры на Новый год только...

Сертификат на обучение от Proglib Academy! Это крутой подарок для тех, кто интересуется IT, хочет освоить новую профессию и жить в шоколаде.

Почему наши курсы — хороший презент:

🔵Подходит для новичков и профессионалов: можно выбрать обучение под любой уровень знаний.
🔵Помогает развивать востребованные навыки, которые пригодятся в IT.
🔵Позволяет выбрать удобный формат обучения: можно учиться в своем темпе, когда удобно.

Сертификат оформляется за пару минут, и даже не нужно ломать голову над упаковкой.

🚀 Подарите возможность начать год с полезных знаний и карьерного роста → подробнее о сертификатах
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖🎓 SmartClass: как научить AI проверять домашки программистов

Автоматизация рутинных задач — один из главных трендов в IT, но как насчет проверки домашек? Представьте себе систему, которая не только оценивает код студентов, но и помогает им понять свои ошибки, словно опытный наставник. Звучит как фантастика? В статье рассказывается, как проект SmartClass воплощает эту идею в реальность, используя возможности AI. Узнайте, какие технологии лежат в основе, с какими трудностями сталкиваются разработчики и как это меняет обучение программированию.

📎 Подробнее о том, как AI помогает проверять домашние задания
ℹ️ Какие типы ссылок существуют?

Существует 4 типа ссылок, которые определяют, как объект будет обрабатываться сборщиком мусора (Garbage Collector).

1️⃣ Strong Reference

Это ссылки, которые используются по умолчанию.
String strongRef = new String("Strong Reference");


Объект, на который указывает сильная ссылка, никогда не будет удален сборщиком мусора, пока существует эта ссылка.
Используйте, когда объект нужен в течение всего времени выполнения.

2️⃣ Soft Reference

Создаются с помощью класса SoftReference. Soft ссылка удерживает объект в памяти, пока в JVM достаточно свободной памяти. Если памяти не хватает, объект будет удален.
SoftReference<String> softRef = new SoftReference<>(new String("Soft Reference"));
String softObj = softRef.get();


Удобны для реализации кэшей. Например, если объект можно восстановить, но не хочется держать его в памяти постоянно.
Сборщик мусора удаляет объекты, на которые ссылаются мягкие ссылки, только в случае нехватки памяти.

3️⃣ Weak Reference

Создаются с помощью класса WeakReference. Объект, на который ссылается слабая ссылка, удаляется сборщиком мусора, как только на него больше нет сильных или мягких ссылок.
WeakReference<String> weakRef = new WeakReference<>(new String("Weak Reference"));
String weakObj = weakRef.get();


Часто используются в структурах данных, таких как WeakHashMap, для предотвращения удержания ненужных объектов.
Удобны для создания ссылок на временные объекты.

4️⃣ Phantom Reference

Создаются с помощью класса PhantomReference. Эти ссылки используются исключительно для отслеживания, когда объект будет удален сборщиком мусора.
PhantomReference<String> phantomRef = new PhantomReference<>(new String("Phantom Reference"), new ReferenceQueue<>());


Метод get() у фантомной ссылки всегда возвращает null.
Объекты, на которые ссылаются фантомные ссылки, добавляются в ReferenceQueue, когда сборщик мусора их удаляет.
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Эффективное проектирование программных систем

Правильная архитектура программного обеспечения помогает создавать устойчивые и масштабируемые приложения, которые легко дорабатывать и поддерживать.

Наш интенсив «Архитектуры и шаблоны проектирования» научит вас строить программные системы без боли и стресса. Вы на практике освоите основные паттерны проектирования и прокачайте свои навыки архитектора программного обеспечения.

🎄Начните свой 2025 со скидкой 35% на все курсы. Это лучшее вложении уходящего года – https://proglib.io/w/cc21e069