Секреты Java
Открыть в Telegram
Обсуждаем Java, архитектуру, фреймворки и всё, о чем должны говорить разработчики. Владелец: @Alexey_Morl Реклама на бирже: https://telega.in/c/java_secrets
Больше7 991
Подписчики
Нет данных24 часа
Нет данных7 дней
Нет данных30 день
Архив постов
7 991
✅Округление BigDecimal
Округление чисел с плавающей запятой в Java можно эффективно выполнять с помощью класса
BigDecimal. Этот класс используется для точных вычислений с числами, которые имеют дробную часть, таких как валюты или измерения, где важно избежать ошибок округления.
Про BigDecimal писал тут и тут.
Для округления чисел в BigDecimal необходимо использовать методы setScale() или round(). Они позволяют указать количество знаков после запятой и стратегию округления.
Пример 1: Округление с помощью setScale()
Метод setScale() задаёт количество знаков после запятой и может принимать два параметра:
- Количество знаков после запятой.
- Режим округления.
В Java существует несколько режимов округления, доступных в классе RoundingMode:
▫️RoundingMode.UP — округление вверх (всегда в сторону большего числа).
▫️RoundingMode.DOWN — округление вниз (в сторону меньшего числа).
▫️RoundingMode.HALF_UP — округление до ближайшего числа, если равно удалено, то в сторону большего.
▫️RoundingMode.HALF_DOWN — округление до ближайшего числа, если равно удалено, то в сторону меньшего.
▫️RoundingMode.CEILING — округление вверх для положительных чисел, вниз для отрицательных.
▫️RoundingMode.FLOOR — округление вниз для положительных чисел, вверх для отрицательных.
Рассмотрим в коде:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalRoundingExample {
public static void main(String[] args) {
var number = new BigDecimal("123.4567");
// Округление до 2 знаков после запятой с режимом HALF_UP
var roundedHalfUp = number.setScale(2, RoundingMode.HALF_UP);
System.out.println("Округление с HALF_UP: " + roundedHalfUp);
// Округление до 3 знаков после запятой с режимом DOWN
var roundedDown = number.setScale(3, RoundingMode.DOWN);
System.out.println("Округление с DOWN: " + roundedDown);
// Округление до 1 знака после запятой с режимом UP
var roundedUp = number.setScale(1, RoundingMode.UP);
System.out.println("Округление с UP: " + roundedUp);
}
}
Вывод будет:
Округление с HALF_UP: 123.46 Округление с DOWN: 123.456 Округление с UP: 123.5Пример 2: Округление с использованием метода
round()
Метод round() применяется, если вы хотите округлить число до фиксированной точности с использованием объекта MathContext.
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
public class BigDecimalRoundExample {
public static void main(String[] args) {
var number = new BigDecimal("123.456789");
// Округление до 4 знаков
var mc = new MathContext(4, RoundingMode.HALF_UP);
BigDecimal rounded = number.round(mc);
System.out.println("Округление до 4 знаков: " + rounded);
}
}
Вывод:
Округление до 4 знаков: 123.5Параметр с числом в
MathContext указывает на общее кол-во знаков, в отличие от метода setScale(), в котором указывается кол-во знаков после запятой!
Заключение:
Класс BigDecimal в Java предоставляет мощные инструменты для выполнения точных вычислений с дробными числами. Округление можно настраивать, используя различные режимы округления из RoundingMode, что позволяет адаптировать поведение приложения под конкретные требования.
🫡 Секреты Java
#bigdecimal #rounding7 991
Забери шпаргалку по Redis, научись использовать кэш и получи оффер!
FAANG School в течение 24 часов отдают бесплатно свою библиотеку знаний. Вы можете получить доступ:
– Redis - 5 улучшений для твоего пет-проекта
– Пошаговая RoadMap по Java
– Мануал по Docker. Основные команды и концепции
– Микросервисы. Вопросы с собеседований
– Шпаргалка с горячими клавишами JetBrains IDE. Ускоришь работу в 10 раз
– Desk setup. Подборка аксессуаров для комфортной работы
– Шпаргалка по Kafka
– Подробный гайд, как найти работу в IT без опыта
– Подборка платформ с вакансиями для java-разработчиков
Из свежих пополнений – Инструкция по работе с Git (ключевой навык для любого разработчика!)
Библиотека знаний пополняется постоянно, но бесплатный доступ длится всего сутки. Чтобы получить полезные материалы, переходи по ссылке и жми на оранжевую кнопку.
7 991
✅Округление BigDecimal
Округление чисел с плавающей запятой в Java можно эффективно выполнять с помощью класса
BigDecimal. Этот класс используется для точных вычислений с числами, которые имеют дробную часть, таких как валюты или измерения, где важно избежать ошибок округления. Основные операции с числами, например, сложение, умножение, деление, поддерживаются без потери точности, что делает его идеальным для финансовых и научных расчётов.
## Округление в BigDecimal
Для округления чисел в BigDecimal необходимо использовать методы setScale() и round(). Они позволяют указать количество знаков после запятой и стратегию округления.
### Пример 1: Округление с помощью setScale()
Метод setScale() задаёт количество знаков после запятой и может принимать два параметра:
1. Количество знаков после запятой.
2. Режим округления.
В Java существует несколько режимов округления, доступных в классе RoundingMode, таких как:
- RoundingMode.UP — округление вверх (всегда в сторону большего числа).
- RoundingMode.DOWN — округление вниз (в сторону меньшего числа).
- RoundingMode.HALF_UP — округление до ближайшего числа, если равно удалено, то в сторону большего.
- RoundingMode.HALF_DOWN — округление до ближайшего числа, если равно удалено, то в сторону меньшего.
- RoundingMode.CEILING — округление вверх для положительных чисел, вниз для отрицательных.
- RoundingMode.FLOOR — округление вниз для положительных чисел, вверх для отрицательных.
### Пример кода:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalRoundingExample {
public static void main(String[] args) {
BigDecimal number = new BigDecimal("123.4567");
// Округление до 2 знаков после запятой с режимом HALF_UP
BigDecimal roundedHalfUp = number.setScale(2, RoundingMode.HALF_UP);
System.out.println("Округление с HALF_UP: " + roundedHalfUp);
// Округление до 3 знаков после запятой с режимом DOWN
BigDecimal roundedDown = number.setScale(3, RoundingMode.DOWN);
System.out.println("Округление с DOWN: " + roundedDown);
// Округление до 1 знака после запятой с режимом UP
BigDecimal roundedUp = number.setScale(1, RoundingMode.UP);
System.out.println("Округление с UP: " + roundedUp);
}
}
### Вывод:
Округление с HALF_UP: 123.46 Округление с DOWN: 123.456 Округление с UP: 123.5### Пример 2: Округление с использованием метода
round()
Метод round() применяется, если вы хотите округлить число до фиксированной точности с использованием объекта MathContext.
Пример:
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
public class BigDecimalRoundExample {
public static void main(String[] args) {
BigDecimal number = new BigDecimal("123.456789");
// Округление до 4 значащих цифр
MathContext mc = new MathContext(4, RoundingMode.HALF_UP);
BigDecimal rounded = number.round(mc);
System.out.println("Округление до 4 значащих цифр: " + rounded);
}
}
### Вывод:
Округление до 4 значащих цифр: 123.5## Заключение Класс
BigDecimal в Java предоставляет мощные инструменты для выполнения точных вычислений с дробными числами. Округление можно настраивать, используя различные режимы округления из RoundingMode, что позволяет адаптировать поведение приложения под конкретные требования.7 991
✅ Вторая нормальная форма (2NF) в SQL
Про нормализацию и первую нормальную форму писал тут.
Определение второй нормальной формы (2NF):
Таблица находится во второй нормальной форме, если:
1. Она уже находится в первой нормальной форме (1NF), то есть все её поля атомарны, а строки уникальны.
2. Все неключевые атрибуты (поля) полностью зависят от первичного ключа, а не от его части (в случае составного ключа).
Это означает, что для таблиц с составными ключами ни одно неключевое поле не может зависеть только от части этого составного ключа.
Зачем нужна 2NF?
Основная цель 2NF — устранить частичную зависимость между полями и составным первичным ключом. Если не нормализовать таблицу до 2NF, это может привести к дублированию данных и потенциальным аномалиям при обновлении, вставке или удалении данных.
Пример
Предположим, у нас есть таблица, описывающая курсы, которые ведут разные преподаватели для студентов:
| Студент | Курс | Преподаватель | Кафедра |
|---------|------------|----------------|------------|
| Иван | Математика | Петров | Математика |
| Ольга | Физика | Сидоров | Физика |
| Иван | Физика | Сидоров | Физика |
| Анна | Математика | Петров | Математика |
Здесь первичный ключ может состоять из двух полей: `Студент` и `Курс`. Однако поле `Кафедра` зависит только от `Курс`, а не от всего составного ключа. Это пример частичной зависимости, которую следует устранить.
Приведение к 2NF
Чтобы нормализовать таблицу до второй нормальной формы, мы должны разделить таблицу на две:
1. Таблица студентов и курсов:
| Студент | Курс |
|--------—-|-------------|
| Иван | Математика |
| Ольга | Физика |
| Иван | Физика |
| Анна | Математика |
2. Таблица курсов, преподавателей и кафедр:
| Курс | Преподаватель | Кафедра |
|------------|----------------|-------------|
| Математика | Петров | Математика |
| Физика | Сидоров | Физика |
Теперь каждая таблица находится во второй нормальной форме:
- В первой таблице не осталось частичных зависимостей, так как каждая запись полностью зависит от составного ключа `Студент` + `Курс`.
- Во второй таблице каждая запись полностью зависит от ключа `Курс`.
Преимущества 2NF:
- Устранение избыточности данных (данные не дублируются в разных строках).
- Улучшенная целостность данных (меньше шансов на появление ошибок при обновлении, удалении или вставке данных).
- Уменьшение объема хранимых данных.
Резюме:
Таблица находится во второй нормальной форме (2NF), если она уже находится в первой нормальной форме (1NF) и все неключевые атрибуты зависят от всего первичного ключа, а не от его части. Нормализация до 2NF помогает устранить частичную зависимость и избежать избыточности данных.
🫡 Секреты Java
#sql #2nf7 991
👩💻 Как эффективно использовать OAuth 2 в Spring-приложениях?
Ждем вас на открытом вебинаре 18 сентября в 20:00 мск.
где мы разберем:
✔️ что такое OAuth 2 и как он работает в Spring-приложениях;
✔️ какие роли и процессы задействованы в фреймворке авторизации;
✔️ его расширения;
✔️ ответы на все возникающие вопросы.
Урок идеально подходит для Java- и Kotlin-разработчиков.
Встречаемся в преддверии старта курса «Разработчик на Spring Framework». Все участники вебинара получат специальную цену на обучение!
📌 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://otus.pw/dqSg/?erid=LjN8JxyrZ
7 991
Мечтаешь о карьере в бигтехе?
Приходи на интенсив в Открытые школы Т1 для Java-разработчиков с опытом от года. Это возможность получить оффер от Т1 — крупнейшей ИТ-компании страны по версии RAEX и CNews Analytics 2023 🔝, в портфеле которой 800+ масштабных проектов и 70+ продуктов и услуг.
Поддержка наставников и советы HR помогают пройти интервью в Т1 успешнее, а карьерный трек позволяет выпускникам программы быстрее вырасти из джуна в мидла в Т1.
Почему в Т1 классно?
🔹Уникальный рыночный опыт. Наши проекты ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и др.
🔹Быстрый рост в ИТ при экспертной поддержке. Карьерные треки для выпускников Открытых школ позволяют быстро вырасти в мидла.
🔹Работа в бигтехе, где есть ДМС, удалёнка и крутые офисы, спорт и обучение, митапы, программы развития и др.
⌛️ Быстрое обучение: 1 месяц.
💻 Гибкий формат: все этапы онлайн, занятия по вечерам.
Подавай заявку до 13 сентября!
Старт 16 сентября.
Реклама. ООО "Т1". ИНН 7720484492.
7 991
Если вам в Java-разработке уже всё абсолютно понятно…
Делайте курс для миддлов вместе с Яндекс Практикумом!
Яндекс Практикум — сервис современного онлайн-образования, где обучают актуальным цифровым профессиям. Сейчас есть возможность присоединиться к команде и разработать курс «Мидл Java-разработчик».
Автор готовит тексты уроков, тесты, памятки и прочие материалы, упаковывает свой опыт в учебные кейсы и в буквальном смысле влияет на развитие индустрии.
В Практикуме понимают уровень загрузки экспертов, поэтому сделали условия максимально комфортными: удалёнка, гибкий график и частичная занятость от 15 часов в неделю — не помешает ни основной работе, ни отдыху👌
Если вы в профессии уже более 4 лет и вы точно знаете «как это должно работать» — добро пожаловать!
Подробности
7 991
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.© Мартин Голдинг 🫡 Секреты Java #quotes
7 991
👩💻 Программирование теперь в Telegram!
Вот 8 обучающих каналов по самым востребованным направлениям в IT.
Выбирай своё направление:
👩💻 Java: @java_ready
📖 Общее IT: @roadmap_ready
👩💻 Python: @python_ready
👩💻 C#: @csharp_ready
👩💻 C/C++: @cpp_ready
👩💻 Frontend: @code_ready
🖥 Базы Данных & SQL: @sql_ready
🖥 Design: @time_design
📌 Ресурсы, гайды, шпаргалки, книги, задачи и статьи для каждого языка программирования.
7 991
✅ Конфигурация зависимостей в Gradle
Gradle — это мощная система сборки, которая поддерживает управление зависимостями. В Java-проектах с использованием Gradle важно понимать, как подключаются зависимости и чем отличаются различные конфигурации, такие как
implementation, compileOnly и другие.
Основные конфигурации зависимостей в Gradle:
1. implementation — добавляет зависимость, которая используется как при компиляции, так и при выполнении проекта.
2. compileOnly — зависимость используется только во время компиляции и не включается в финальную сборку.
3. runtimeOnly — зависимость используется только во время выполнения, но не требуется для компиляции.
4. testImplementation — зависимость, которая требуется только для тестов и используется как во время компиляции тестов, так и во время их выполнения.
5. testCompileOnly — зависимость используется только при компиляции тестов, но не при их выполнении.
6. testRuntimeOnly — зависимость используется только при выполнении тестов.
7. annotationProcessor — зависимость для подключения аннотационных процессоров, необходимых при компиляции.
Теперь рассмотрим каждую конфигурацию более подробно с примерами.
1. implementation
Зависимость, подключенная через implementation, будет доступна и во время компиляции, и во время выполнения кода. Это наиболее распространенная конфигурация для основных библиотек проекта.
dependencies {
implementation 'com.google.guava:guava:31.0.1-jre'
}
Пример: В этом случае библиотека Guava будет включена как в процессе компиляции, так и в процессе выполнения.
2. compileOnly
Зависимость, подключенная через compileOnly, используется только на этапе компиляции. Это полезно для библиотек, которые нужны для компиляции, но не должны попадать в итоговую сборку (например, это могут быть аннотации или библиотеки для разработки).
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.20'
}
Пример: Библиотека Lombok используется для аннотаций и генерации кода, но в итоговый JAR-файл она не будет включена, потому что она нужна только для компиляции.
3. runtimeOnly
runtimeOnly означает, что зависимость будет добавлена только во время выполнения программы. Эта конфигурация не предоставляет библиотеку для компиляции.
dependencies {
runtimeOnly 'mysql:mysql-connector-java:8.0.26'
}
Пример: Библиотека для работы с MySQL будет добавлена только на этапе выполнения программы, когда необходимо подключиться к базе данных.
4. testImplementation
Это аналог конфигурации implementation, но только для тестов. Зависимости, подключенные через testImplementation, доступны как при компиляции тестов, так и при их выполнении.
dependencies {
testImplementation 'junit:junit:4.13.2'
}
Пример: JUnit будет доступен только для компиляции и выполнения тестов.
5. testCompileOnly
Эта конфигурация аналогична compileOnly, но применяется только для тестов. Зависимость будет использоваться только для компиляции тестов и не будет доступна при их выполнении.
dependencies {
testCompileOnly 'org.projectlombok:lombok:1.18.20'
}
Пример: Lombok будет использоваться для генерации кода только в тестах, но не будет доступен на этапе выполнения тестов.
6. testRuntimeOnly
Эта конфигурация используется для зависимостей, которые нужны только во время выполнения тестов.
dependencies {
testRuntimeOnly 'mysql:mysql-connector-java:8.0.26'
}
Пример: Коннектор для MySQL будет использоваться только при выполнении тестов, но не во время их компиляции.
7. annotationProcessor
Эта конфигурация используется для подключения аннотационных процессоров (например, для Lombok или MapStruct), которые нужны только на этапе компиляции.
dependencies {
annotationProcessor 'org.projectlombok:lombok:1.18.20'
}
Правильное использование этих конфигураций позволяет лучше управлять зависимостями и контролировать, какие библиотеки попадают в итоговую сборку.
🫡 Секреты Java
#java #gradle7 991
Бесплатный интенсив: Java-разработчик: старт в профессии с нуля.
📆 Когда: 17-18 сентября в 19:00 по мск.
За два дня интенсива в прямом эфире, под руководством опытного Java-разработчика, вы сможете:
✔️ Познакомиться с синтаксисом и основными конструкциями языка Java.
✔️ Написать свой первый проект и определить, подходит ли вам профессия разработчика.
✔️ Создать Telegram-бота с нуля.
✔️ Узнать ответы интересующие вас вопросы.
✔️ Получить доступ к закрытому профессиональному сообществу.
🎁 Подарки для участниковинтенсива: гайд «Как заговорить на сленге IT-специалистов», карта компетенций начинающего Java-разработчика и доступ в закрытое сообщество «Старт в Java» от Хекслета!
7 991
Уже завтра тестовое собеседование на Middle Java-разработчика
Завтра, 11 сентября в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
1. Алексей Ушаровский, старший разработчик в немецкой Deutsche Boerse с опытом работы в Oracle, Сбертех, ePam и NCR будет задавать реальные вопросы и задачи разработчику-добровольцу
2. Алексей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Алексею
Что узнаешь на прямом эфире от ШОРТКАТ:
- Чего ждут от кандидатов на Middle позиции в Java-разработке
- Какие вопросы задают на интервью и зачем
- Как подготовиться к собесу, чтобы получить оффер
Это бесплатно?
Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqvLZ4uu
7 991
✅ Приоритет логических операций.
В языке Java существует определенный порядок выполнения булевых операций, который регулируется приоритетами операторов. Правильное понимание этих приоритетов позволяет избежать ошибок при написании логических выражений и делает код более читаемым.
▫️Основные булевые операторы в Java:
1.
! – логическое отрицание (унарный оператор)
2. && – логическое И (конъюнкция)
3. || – логическое ИЛИ (дизъюнкция)
▫️Приоритеты операторов:
1. Логическое отрицание (!) имеет самый высокий приоритет.
2. Логическое И (&&) выполняется следующим.
3. Логическое ИЛИ (||) имеет наименьший приоритет.
Это означает, что операции с логическим отрицанием выполняются в первую очередь, затем выполняется логическое И, а логическое ИЛИ — последним. Однако, чтобы избежать неоднозначности или явно указать порядок операций, часто используют скобки.
Пример 1: Без скобок
boolean a = true;
boolean b = true;
boolean c = false;
System.out.println(a || b && c); // true
Здесь сначала выполняется операция b && c, так как оператор && имеет более высокий приоритет, чем ||. Результат выражения b && c равен false, после чего выполняется операция a || false, которая возвращает true.
Пример 2: С использованием скобок
boolean a = true;
boolean b = true;
boolean c = false;
System.out.println((a || b) && c); // false
В этом случае сначала выполняется операция a || b, которая возвращает true. Затем выполняется true && c, что вернет уже false.
Пример 3: Логическое отрицание
boolean a = true;
boolean b = false;
System.out.println(!a || b); // false
Здесь сначала выполняется !a, которая возвращает false. Затем выражение false || b возвращает false.
Рекомендации:
- Всегда используйте скобки, чтобы явно указывать порядок выполнения операций, особенно в сложных выражениях.
- Правильное использование операторов и скобок улучшает читаемость кода, даже если вы уверены в порядке выполнения операций.
Булевые выражения часто встречаются в условиях и логике программ, поэтому понимание их приоритетов — ключ к написанию корректного кода.
🫡 Секреты Java
#java #boolean7 991
⚡ Когда мне говорят, что Java слишком простой язык, я показываю канал Java Learning
Здесь я научился:
▪️ Разрабатывать высоконагруженные серверные приложения
▪️ Управлять сложными базами данных
▪️ Организовывать эффективную многопоточную обработку данных
▪️ Проходить технические собеседования в ведущие IT-компании
Самый необычный канал про Java, подписывайся – @Java_per_month
