Java Developer | Backend
1.7K subscribers
136 photos
1 video
231 links
Авторский канал действующего java разработчика

Платформа: https://offercraft.ru

Сотрудничество @offercraft_support
Download Telegram
Выбираем размер для пула потоков

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

Оптимальный размер пула потоков зависит от количества доступных процессоров и природы задач в рабочей очереди. На N-процессорной системе для рабочей очереди, которая будет выполнять исключительно задачи с ограничением по скорости вычислений, можно достигнуть максимального использования CPU с пулом потоков, в котором содержится N или N+1 поток. Для задач, которые могут ждать осуществления I/O (ввода - вывода) - например, задачи, считывающей HTTP-запрос из сокета – может понадобиться увеличение размера пула свыше количества доступных процессоров, потому, что не все потоки будут работать все время. Используя профилирование, можно оценить отношение времени ожидания (WT) ко времени обработки (ST) для типичного запроса. Если назвать это соотношение WT/ST, то для N-процессорной системе понадобится примерно N*(1 + WT/ST) потоков для полной загруженности процессоров.

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

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥62
Управление зависимостями в IntelliJ IDEA

В этом руководстве, в продолжение темы просмотра зависимостей, мы рассмотрим управление зависимостями в IntelliJ IDEA.

Мы рассмотрим различные способы добавления зависимостей в ваш проект, а также способы добавления, обновления и удаления зависимостей с помощью Package Search.

Rus https://habr.com/ru/post/710802/
Eng https://foojay.io/today/managing-dependencies-in-intellij-idea/

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥4
Please open Telegram to view this post
VIEW IN TELEGRAM
😁11🔥5
Вопрос: Что такое livelock?
Ответ -
livelock – тип взаимной блокировки, при котором несколько потоков выполняют бесполезную работу, попадая в зацикленность при попытке получения каких-либо ресурсов. При этом их состояния постоянно изменяются в зависимости друг от друга. Фактической ошибки не возникает, но КПД системы падает до 0. Часто возникает в результате попыток предотвращения deadlock.

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

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2🔥1🥰1
🔤 Шифрование файлов в java

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

🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍4🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4😁3
🔤 LRU алгоритм для очищения кеша

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

🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁4🔥3
🔤 Эволюция создания веб-приложений на Java

История развития построения веб-приложений на языке программирования Java с примерами их использования на временном промежутке от появления спецификации сервлетов до сегодняшнего дня.

🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥7
Как из Java приложения запустить другую программу?

Самый простой и базовый способ – с помощью метода Runtime.getRuntime().exec(). В качестве параметра ему передается строка системной команды. Опциональные можно передать рабочую директорию, и переменные окружения в виде массива строк "имя=значение". Если команде нужны аргументы, они передаются либо массивом, либо в той же строке команды через пробелы.

Рекомендуемый, и более управляемый способ – использование класса ProcessBuilder. Он же применяется внутри метода exec. Билдер дает, например, средства для использования в команде пайплайнов https://ru.wikipedia.org/wiki/Конвейер_(Unix) и редиректов ввода-вывода https://ru.wikipedia.org/wiki/Перенаправление_ввода-в...

В результате запуска команды создается объект класса Process. Его можно сконвертировать в более современный (Java 9+) и функциональный ProcessHandle. Через эти объекты идет работа с вводом-выводом процесса, его характеристиками и статусом.

Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3😁3🥰2
Что дает людям чувство превосходства: 😁

🖥 Java Developer | Backend | #⃣#мемы #java
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👍2
🔤 Магия Spring Framework своими руками

Spring Framework позволяет сфокусироваться на бизнес-логике, а вся настройка инфраструктуры выполняется силами самого фреймворка.

🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5👍4🔥3
Многопоточность. Состояния потока (Часть 1)

Поток может находиться в любом из следующих состояний в любой момент времени:

1️⃣ NEW
Это состояние потока, когда он создан, но еще не запущен. Например, когда вы создаете новый объект Thread с помощью конструктора, поток находится в новом состоянии. Вы можете вызвать метод start() только для нового потока; в противном случае будет выдано исключение IllegalThreadStateException.

2️⃣ RUNNABLE
Это состояние потока, когда он готов к запуску и ждет процессорного времени. Например, когда вы вызываете метод start() для нового потока или когда заблокированный или ожидающий поток снова становится пригодным для запуска. Планировщик потоков выбирает поток из состояния готовности к запуску для выполнения на основе его приоритета и других факторов.

3️⃣ RUNNING
Это состояние потока, когда он выполняется на процессоре. Например, когда планировщик потоков выбирает поток из состояния готовности к запуску и назначает его ядру процессора, поток находится в состоянии выполнения. Поток выполняет свой метод run() и выполняет свои задачи. Поток может перейти в состояние выполнения только из состояния готовности к запуску.

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

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍4😁3
🔤 Spring и Hibernate простыми словами: обзор для новичков

Spring и Hibernate — два популярных инструмента для Java, которые используются в разработке приложений. В этой статье мы исследуем их основные функции и особенности, как они работают вместе и почему так высоко ценятся в IT-индустрии. А сложные концепции разбираем на понятные кусочки, которые мягко введут в курс дела любого новичка: программиста, аналитика, менеджера по продукту или дизайнера.

🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Многопоточность. Состояния потока (Часть 2)

Поток может находиться в любом из следующих состояний в любой момент времени:

5️⃣ WAITING
Это состояние потока, когда он бесконечно ждет, пока другой поток выполнит определенное действие. Например, когда поток вызывает метод wait() для объекта или метод join() для другого потока, или метод park() класса LockSupport, поток находится в состоянии ожидания. Поток может перейти в состояние ожидания из состояния выполнения и может вернуться в состояние выполнения, когда он получит уведомление или прерывание.

6️⃣ TIMED WAITING
Это состояние потока, когда он ждет в течение определенного времени, пока другой поток выполнит определенное действие. Например, когда поток вызывает метод sleep(), или метод wait() с параметром тайм-аута, или метод join() с параметром тайм-аута, или методы parkNanos() или parkUntil() класса LockSupport, поток находится в состоянии ожидания с заданным временем. Поток может перейти в состояние ожидания с заданным временем из состояния выполнения и может вернуться в состояние выполнения по истечении времени ожидания или при получении уведомления или прерывания.

7️⃣ TERMINATED
Это состояние потока, когда он завершил свое выполнение или был прерван из-за исключения или ошибки. Например, когда поток завершает свой метод run() нормально или ненормально или когда он останавливается вызовом метода stop() (который устарел), поток находится в состоянии завершения. Поток может перейти в состояние завершения только из состояния выполнения и не может вернуться в какое-либо другое состояние.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
Вопрос: Что такое Java Remote Method Invocation (RMI)?
Ответ -
RMI - это API Java, который выполняет объектно-ориентированный эквивалент удаленных вызовов процедур (RPC) с поддержкой прямой передачи сериализованных классов Java и распределенной сборки мусора. Удаленный вызов метода (RMI) также можно рассматривать как процесс активации метода на удаленно запущенном объекте. RMI обеспечивает прозрачность местоположения, поскольку для пользователя это выглядит так, что метод выполняется на локально запущенном объекте.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
8😁4👍2