JavaRocks
2.53K subscribers
80 photos
14 videos
159 links
Базовый канал для изучения языка Java.

Наш сайт: javarocks.ru

Все необходимые туториалы и материалы.

Тесты для проверки знаний. Лучшие практики и паттерны проектирования.
Download Telegram
Вам наверняка понравится этот инструмент, если работаете с JSON 👇

Вложенные JSON-файлы часто сложно читать.
𝐉𝐬𝐨𝐧𝐂𝐫𝐚𝐜𝐤 создает графические диаграммы из JSON-файлов и делает их легко читаемыми.
Кроме того, созданные диаграммы можно скачать в виде изображений.
Также поддерживает YAML и XML.

👉 Java Rocks | #java
Please open Telegram to view this post
VIEW IN TELEGRAM
⌨️ Внутреннее устройство HashSet

Тут разработчики не стали мудрствовать лукаво и просто использовали экземпляр HashMap внутри HashSet. Каждый элемент HashSet хранится как ключ в этой хэш-таблице, а значение для каждого ключа установлено в фиксированное значение PRESENT, что является специальным объектом (обычно new Object()).

При добавлении элемента, у него вычисляется хэш-код, определяется соответствующий бакет, и элемент добавляется в этот бакет, если он еще не присутствует (проверяется с помощью метода equals()).

При удалении вычисляется хэш-код элемента, определяется бакет, и элемент удаляется, если он присутствует в этом бакете.

Упрощённый код класса HashSet:

public class HashSet<E> implements Set<E>, Cloneable, java.io.Serializable {
// Внутренний экземпляр HashMap
private transient HashMap<E, Object> map;

// Специальный константный объект, используемый в качестве значения для всех ключей
private static final Object PRESENT = new Object();

public HashSet() {
map = new HashMap<>();
}

public boolean add(E e) {
return map.put(e, PRESENT) == null;
}

public boolean remove(Object o) {
return map.remove(o) == null;
}

public boolean contains(Object o) {
return map.containsKey(o);
}

// Другие методы...
}


👉 Java Rocks | #java #hashset #hashmap
Please open Telegram to view this post
VIEW IN TELEGRAM
🔼 Топ-5 способов улучшить производительность API:

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

2️⃣ Асинхронное логирование:
Этот подход предполагает отправку логов в буфер без блокировки и немедленное возвращение управления, вместо того чтобы записывать данные на диск при каждом вызове. Логи периодически сбрасываются на диск, что значительно снижает нагрузку на систему ввода-вывода.

3️⃣ Кэширование данных:
Часто запрашиваемые данные могут храниться в кэше для ускорения их извлечения. Клиенты сначала проверяют кэш перед обращением к базе данных, а такие решения для хранения данных, как Redis, обеспечивают более быстрый доступ благодаря хранению в оперативной памяти.

4️⃣ Сжатие payload:
Чтобы сократить время передачи данных, запросы и ответы можно сжимать, что ускоряет процессы загрузки и выгрузки.

5️⃣ Пул соединений:
Эта техника включает использование пула открытых соединений для управления взаимодействием с базой данных, что снижает накладные расходы, связанные с открытием и закрытием соединений каждый раз, когда требуется загрузить данные. Пул управляет жизненным циклом соединений для эффективного использования ресурсов.

💬 А как вы улучшаете перфоманс API?

👉 Java Rocks | #java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое ACID?

🔹 Атомарность (Atomicity)
Гарантирует, что транзакция не будет зафиксирована частично. Все записи в транзакции выполняются одновременно и не могут быть разбиты на меньшие части. Если при выполнении транзакции возникают ошибки, все записи откатываются.

🔹 Согласованность (Consistency)
Любые данные, записанные в ходе транзакции, должны быть валидны в соответствии со всеми определёнными правилами и поддерживать базу данных в корректном состоянии.

🔹 Изоляция (Isolation)
Параллельные транзакции не должны оказывать влияния друг на друга. Изолированность сложно достижима, поэтому существуют различные уровни изоляции.

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

👉 Java Rocks | #java
Please open Telegram to view this post
VIEW IN TELEGRAM
⌨️ Несколько способов для избежания NullPointerException:

✔️ Используйте Optional из пакета java.util.

✔️ При сравнении константы с переменной пришедшей из вне, нужно вызывать equals() на константе.

✔️ А при сравнении двух переменных используйте java.util.Objects#equals.

✔️ Используйте библиотеки с null-безопасностью, например, Apache Commons StringUtils.

✔️ Вызывайте методы equals() и equalsIgnoreCase() на известных объектах.

✔️ Применяйте valueOf() вместо toString().

✔️ Воспользуйтесь аннотациями @NotNull и @Nullable на основе IDE.

✔️ При возврате из метода коллекций, не стоит возвращать null, лучше пустую коллекцию (java.util.Collections#emptyList).

👉 Java Rocks | #java #NullPointerException #Optional
Please open Telegram to view this post
VIEW IN TELEGRAM
🚫 Ключевые проблемы многопоточности

🔵 Состояние гонки (Race Conditions):

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

🔵 Взаимные блокировки (Deadlocks):

Ситуация, когда два или более потока застревают в ожидании друг друга для освобождения ресурсов, что приводит к тупиковой ситуации.
Пример: Два человека держат предметы, которые нужны друг другу, и оба ждут, пока другой первый отдаст свой предмет.

🔵 Ошибки конкуренции (Concurrency Bugs):

Ошибки, возникающие из-за неправильной обработки взаимодействия потоков, часто проявляющиеся как случайные проблемы.
Пример: Если два работника пишут в один и тот же файл без координации, их работа может перемешаться.

🔵 Прерывание потока (Thread Interruption):

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

🔵 Ошибки согласованности памяти (Memory Consistency Errors):

Ситуация, когда разные потоки имеют устаревшее или несогласованное представление о разделяемой памяти.
Пример: Если один человек обновляет общий документ, а другие видят старую версию, они могут работать с неверной информацией.

🔵 Соперничество за ресурсы (Resource Contention):

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

🔵 Голодание (Starvation):

Ситуация, когда потоку постоянно отказывают в доступе к ресурсам из-за приоритета других потоков.
Пример: Если одного работника постоянно обходят вниманием в пользу других, он никогда не сможет выполнить свою работу.

👉 Java Rocks | #java
Please open Telegram to view this post
VIEW IN TELEGRAM
От Java к Kotlin

Авторы:
Дункан Макгрегор, Нэт Прай
Год издания: 2023

#java #kotlin #ru #книга

Скачать книгу
Вакансии по Java за последнюю неделю:

Backend Java Developer. Удалённо, от 140 т.р.

Java разработчик. Новосибирск (гибрид), з/п по договорённости.

QA Automation (Java) Middle/Senior. Удалённо (РФ), 240-250 т.р.

Senior Java Developer. Удалённо (Беларусь)/офис (Гомель), 2700-3000 USD (на руки).

QA SDET (Java). Удалённо/офис, до 6500$.

#подборка #java
Вакансии по Java за последнюю неделю:

Senior Java Developer. Удалённо (Беларусь)/офис (Гомель), 2700-3000 USD (на руки).

QA SDET (Java). Удалённо/офис, до 6500$.

Java/Kotlin разработчик. Удалённо (РФ, дружественные страны), до 370 т.р. на руки.

Java Developer (Web3). Удалённо, 5400-6700 USD.

Senior Software Engineer (Java). Удалённо (не из РФ), 4000–6000$ gross.

Автотестировщик Java. Удалённо (РФ), з/п не указана.

QA Full-stack (Java/Mobile). Удалённо (РФ), 250 000 – 330 000₽.

AQA Java. Удалённо, 70 000 – 100 000₽. Стажировка (после – полная занятость).

Full Stack Developer (Java/Javascript). Удалённо (не из РФ), 4500–5000$ gross.

QA Full-stack (Java). Удалённо/офис (Москва), до 280 000₽ gross.

#подборка #java
Топ книг по Java на русском языке
Скачивайте и читайте.

Java. Полное руководство
Автор: Герберт Шилдт

Java. Библиотека профессионала
Автор: Кей Хорстманн

Java. Эффективное программирование
Автор: Джошуа Блох

Spring в действии
Автор: Крейг Уоллс

Java Concurrency на практике
Авторы: Брайан Гетц

Алгоритмы на Java
Авторы: Роберт Седжвик

#ru #java #подборка

Предлагайте книги в комментариях — добавим их в список! 📚
Вакансии по Java за последние 14 дней:

Java разработчик. Удалённо, 260-300 т.р. гросс.

QA Automation Engineer (Java+Selenium) Middle. Удалённо (нахлёст на США), 100–200 т.р.

Автотестировщик Middle. Удалённо (РФ), 10 000 – 14 000 руб/дн по ИП/СЗ.

Java разработчик. Удалённо (РФ), 300–320 т.р..

Software Engineer (Java). Удалённо (не из РФ), 4000 – 6000$ gross.

Senior Java разработчик. Удалённо (РФ), 260–300 т.р. gross.

Fullstack QA JAVA Middle. Удалённо (РФ), от 250 до 390 т.р. gross.

Java разработчик (Middle+). Удалённо (РФ и дружественные страны), 350–370 т.р. на руки.

Middle Java Developer. Удалённо (только РФ или РБ), от 250 т.р. gross.

Senior Full Stack Developer (Java / Javascript). Удалённо (не из РФ), 4500 – 5500$ gross.

#подборка #java
Вакансии для Java-разработчиков за последние 14 дней:

Java Developer (Junior). Удалённо (РФ), 100–150 т.р.

Junior Java Developer. Удалённо

QA Automation Engineer (Java). Удалённо, 280–300 т.р.

Java разработчик. Удалённо (РФ), 270–320 т.р.

Java разработчик. Удалённо, 320–360 т.р. гросс

QA full stack (Java). Удалённо, 315–350 т.р. гросс

Full Stack Developer (Java / Javascript). Удалённо (не из РФ), 6000–7500 $ gross

Software Engineer Java. Удалённо, 5000–6500 $ gross

Senior Java Developer. Сербия / гибрид или удалёнка, до 6000 EUR

Java разработчик. Удалённо, от 7500$ gross

#подборка #java