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

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

Сотрудничество @offercraft_support
Download Telegram
Шпаргалка по коллекции Set

Set — это множество уникальных элементов, и это ее главная особенность. То есть Set не допускает повторения одних и тех же элементов.

Здесь важно, чтобы у объектов, которые добавляются, был реализован метод equals.


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

LinkedHashSet:
• упорядоченная версия HashSet;
• поддерживает двусвязный список для всех элементов;
• использовать его, когда требуется упорядоченность при итерации.

TreeSet:
• одна из двух сортированных коллекций;
• использует структуру красно-черного дерева и гарантирует, что элементы будут в возрастающем порядке;
• под капотом это TreeMap с заглушкой на значениях. А элементами TreeSet являются ключи к TreeMap.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3
Вопрос: Как JVM обрабатывает исключения?
Ответ -
Как только где-то создается исключение, runtime создает Exception Object (обозначим как ExcObj). В нем хранится вся необходимая для работы информация — само исключение, которое вызывалось и место, где это произошло.

Создание ExcObj и передача в runtime есть ничто иное как “выбрасывание исключения”.

ExcObj содержит методы, по которым можно дойти до место создания исключения. Это множество методов называется Call Stack.

Далее, runtime система ищет метод в Call Stack, который сможет обработать наше исключение. Если он таки находит соответствующий обработчик, то есть тип исключения совпадает с типом в обработчике, все хорошо. Если не находит, то runtime передает всё в default exception handler, который подготавливает ответ и завершает работу.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
8
🔤 Знакомство с реактивным программированием в Spring

Реактивное программирование – ваш путь к созданию систем, устойчивых к высоким нагрузкам. В данной статье вы познакомитесь с основными принципами реактивного программирования в java.

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
7😁6
Виды профилировщиков в java

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

1️⃣ VisualVM: универсальный инструмент с открытым исходным кодом, предлагающий возможности профилирования и мониторинга для приложений Java, работающих локально или удаленно. Он обеспечивает доступ к различным показателям и помогает диагностировать проблемы с производительностью.
2️⃣ JProfiler: мощный коммерческий инструмент профилирования, предлагающий богатый набор функций для измерения и анализа производительности приложений. Он предоставляет подробную информацию о процессоре, памяти и активности потоков, что помогает оптимизировать ваше приложение Java.
3️⃣ YourKit: еще один коммерческий профилировщик, предлагающий широкий спектр функций профилирования, включая профилирование ЦП и памяти, анализ потоков и мониторинг запросов к базе данных. Он предоставляет удобный интерфейс для анализа и диагностики проблем с производительностью.
4️⃣ Профилировщик NetBeans: интегрированный непосредственно в среду IDE NetBeans, он обеспечивает легкий доступ к функциям профилирования во время разработки, предоставляя информацию об использовании ЦП и памяти, сборке мусора и активности потоков.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9🔥7
🔤 Путь запроса по внутренностям Spring Security

Большинство разработчиков имеет только примерное представление о том что происходит внутри Spring Security, что опасно и может привести к появлению уязвимостей.

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

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Вопрос: Что такое перегрузка методов?
Ответ -
Перегрузка методов — это свойство полиморфизма, в котором при помощи изменения сигнатуры метода можно создать различные реализации методов для одной и той же операции:
- одинаковое имя метода;
- различные аргументы;
- различный порядок аргументов;

Например, один и тот же add() из List может быть перегружен следующим образом и будет выполнять добавление разным способом, в зависимости от аргументов метода:
- add(Object o) — просто добавляет объект;
- add(int index, Object o) — добавляет объект в определенный индекс;
- add(Collection<Object> c) — добавляет список объектов;
- add(int index, Collection<Object> c) — добавляет список объектов, начиная с определенного индекса.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Шпаргалка по коллекции Map

Map — это коллекция ключ-значение (key-value). Есть уникальный ключ и значение, которое соответствует этому значению. Используется equals() и hashcode() методы для определения уникальности ключа.

HashMap:
• не отсортирован и не упорядочен;
• используют если не важны порядок и сортировка;
• поддерживает null ключ.

LinkedHashMap:
• поддерживает порядок вставки;
• медленнее, чем HashMap;
• ожидается, что итерация быстрее, чем в HashMap.

TreeMap:
• сохраняет записи отсортированными в соответствии с естественным порядком их ключей.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥5😁4
🔤 Валидация в Java-приложениях

В данной статье рассказывается о различных подходах к валидации данных: на какие подводные камни может наткнуться проект и какими методами и технологиями стоит руководствоваться при валидации данных в Java-приложениях.

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6😁4
Разница между процессом и потоком

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

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3👏1
Вопрос: Могут ли у разных объектов (obj1 != obj2) быть obj1.equals(obj2) == true?
Ответ -
Да, могут. Для этого в классе этих объектов должен быть переопределен метод equals().

Если используется метод Object.equals(), то для двух ссылок x и y метод вернет true тогда и только тогда, когда обе ссылки указывают на один и тот же объект (т.е. x == y возвращает true).


🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3👏2
Autoboxing и Unboxing

Автоупаковка (autoboxing) - процесс автоматического преобразования из примитивного типа в соответствующий класс обертку.

Автораспаковка (unboxing) - делает ровно обратное к автоупаковке - преобразует класс обертку в примитив. А вот если окажется значение обертки null, то при распаковке будет выброшено исключение NullPointerException.

Пример Autoboxing
public void autoBoxing() {
Boolean booleanBox = true;
Integer intBox = 3;
// и так далее к другим типам
}

Пример Unboxing
int intValue = new Integer(4);
double doubleValue = new Double(2.3);
char c = new Character((char) 3);
boolean b = Boolean.TRUE;


🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁3🔥2
Вопрос: В чём заключается различие между методами submit() и execute() у пула потоков?
Ответ -
Оба метода являются способами подачи задачи в пул потоков, но между ними есть небольшая разница.

execute(Runnable command) определён в интерфейсе Executor и выполняет поданную задачу и ничего не возвращает.

submit() – перегруженный метод, определённый в интерфейсе ExecutorService. Способен принимать задачи типов Runnable и Callable и возвращать объект Future, который можно использовать для контроля и управления процессом выполнения, получения его результата.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3
Чем отличаются JRE, JVM И JDK?

JRE кратко - для работы. Java Runtime Environment (сокр. JRE) - минимальная реализация виртуальной машины, необходимая для исполнения Java-приложений, без компилятора и других средств разработки. Состоит из виртуальной машины - Java Virtual Machine и библиотеки Java-классов.

JDK кратко - для программирования. Java Development Kit (сокращенно JDK) - бесплатно распространяемый компанией Oracle Corporation (ранее Sun Microsystems) комплект разработчика приложений на языке Java, включающий в себя компилятор Java (javac), стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE).

Java Virtual Machine (сокращенно Java VM, JVM) - виртуальная машина Java - основная часть исполняющей системы Java, так называемой Java Runtime Environment (JRE). Виртуальная машина Java интерпретирует Байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac). JVM может также использоваться для выполнения программ, написанных на других языках программирования.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥3👍2
Вопрос: Как создать immutable class?
Ответ -
Чтоб написать immutable неизменяемый класс, нужно следовать простым пунктам:
1. Сделать класс финальным;
2. Сделать все поля приватными и создать только геттеры к ним. Сеттеры, разумеется, не нужно;
3. Сделать все mutable поля final, чтобы установить значение можно было только один раз;
4. Инициализировать все поля через конструктор, выполняя глубокое копирование (то есть, копируя и сам объект, и его переменные, и переменные переменных, и так далее);
5. Клонировать объекты mutable переменных в геттерах, чтобы возвращать только копии значений, а не ссылки на актуальные объекты.

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

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

Оптимальный размер пула потоков зависит от количества доступных процессоров и природы задач в рабочей очереди. На 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