Библиотека джависта | 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
加入频道
Где вы чаще всего пишете код?

❤️ 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
🚀 SQLite стала быстрее в 10 раз для аналитических запросов

Изначально SQLite идеально подходит для транзакционных операций (OLTP). Но аналитические запросы (OLAP), включающие сложные джойны, были её слабым местом. SQLite использует Nested Loop Join — простой, но неэффективный метод, где каждое совпадение требует "дорогих" операций в B-дереве.

➡️ Как решили проблему?

Исследователи из Университета Висконсин-Мэдисон предложили использовать Bloom-фильтры — лёгкие и эффективные структуры данных, которые заранее отсекают ненужные строки для джойнов.

🔗 Читайте подробнее в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что нового в мире Java?

Если вы считаете, что Java — это только про старые добрые корпоративные приложения, то вы сильно недооцениваете её развитие. Новые версии языка привносят невероятно полезные возможности, которые упрощают жизнь разработчикам: от работы с данными до оптимизации кода.

В статье от экспертов LANIT разбираются ключевые фишки Java 20 и обсуждается, почему сейчас — идеальное время, чтобы начать или продолжить изучение этого языка. Хотите оставаться на пике технологий и быть востребованным?

🔗 Читайте в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
#дайджест #Javadevjob

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

▪️ Младший разработчик
Удалёнка / Офис (Москва), Doczilla
Подробнее

▪️ Junior Java Developer
Офис (Минск), Программные решения плюс
Подробнее

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

▪️ Middle Java developer (SoftWLC)
Удалёнка / Гибрид (Новосибирск), Eltex
Подробнее

▪️ Java Core разработчик (middle)
Удалёнка (РФ), ДИКСИ
Подробнее

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

▪️ Senior Java Developer
Удалёнка, DatsTeam
Подробнее

▪️ Разработчик Java Senior (микросервисы), на территории РФ
Удалёнка (РФ), ИНГОССТРАХ БАНК
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет