Media is too big
VIEW IN TELEGRAM
Память Cassandra по полочкам. Cassandra memory footprint
Углубляемся в механизмы работы с памятью в Apache Cassandra: как устроены механизмы управления памятью, сколько места занимают те или иные данные в памяти, как это мониторить, какие оптимизации по работе с памятью сделаны или еще в процессе.
Будет интересно Java-разработчикам, которые разрабатывают подобного рода системы, и тем, кто эксплуатирует Apache Cassandra.
@javalib #java
Углубляемся в механизмы работы с памятью в Apache Cassandra: как устроены механизмы управления памятью, сколько места занимают те или иные данные в памяти, как это мониторить, какие оптимизации по работе с памятью сделаны или еще в процессе.
Будет интересно Java-разработчикам, которые разрабатывают подобного рода системы, и тем, кто эксплуатирует Apache Cassandra.
@javalib #java
🔥12❤3👍3
Adapter — это структурный паттерн, который позволяет объектам с несовместимыми интерфейсами работать вместе. Он действует как обёртка между двумя классами, приводя их интерфейсы к общему виду.
Использование:
🔹 Когда необходимо использовать сторонний код, который не соответствует ожидаемому интерфейсу.
🔹 Подходит для миграции систем, когда новые и старые классы должны работать вместе.
🔹 Для интеграции различных библиотек в проект без изменения их исходного кода.
Преимущества:
Недостатки:
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤7🔥5
Media is too big
VIEW IN TELEGRAM
Создаём Telegram Бота с Нуля на Java и Spring Boot | Часть 1: Проектирование и Первые Шаги
Мы с вами вместе напишем реальный проект Telegram бота. Автор постарается в повествовательной, меньше технической, манере поведать вам об этапах разработки, поехали?
@javalib #java
Мы с вами вместе напишем реальный проект Telegram бота. Автор постарается в повествовательной, меньше технической, манере поведать вам об этапах разработки, поехали?
@javalib #java
👍31❤5🔥4
🗓 20 ноября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java-разработчик» от Otus.
Приходите на открытый урок, где мы шаг за шагом создадим игру «Угадай число» с нуля.
Вы познакомитесь с основами языка, поймете, как изменять код и менять функционал программы, освоите первые блоки, которые нужны для старта.
Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук.
Хотите научиться создавать приложения? Узнать, как строятся программы на Java? Этот урок — ваш первый шаг в IT!
🔗 Ссылка на регистрацию: https://vk.cc/cEAf6Y
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥3
В многопользовательских системах критически важно обеспечить согласованность данных при параллельных транзакциях. Одним из ключевых механизмов, который помогает в этом, являются уровни изоляции транзакций. Они регулируют, как обрабатываются изменения в данных при параллельной работе транзакций, предотвращая возможные аномалии.
🔑 Что такое изоляция транзакций?
Изоляция транзакций определяет степень, до которой операции в одной транзакции изолированы от операций в других. Это предотвращает такие проблемы, как грязные чтения, неповторяемые чтения и фантомные записи, обеспечивая целостность данных.
🔒 Типы уровней изоляции:
🔹 Read Uncommitted:
Самый низкий уровень изоляции. Транзакции могут читать изменения, сделанные другими транзакциями, даже если они не были зафиксированы (грязные чтения). Быстро, но рискованно.
🔹 Read Committed:
Видны только зафиксированные данные. Это исключает грязные чтения, но могут возникать неповторяемые чтения (данные меняются между двумя запросами).
🔹 Repeatable Read:
Гарантирует, что данные, прочитанные транзакцией, не могут быть изменены другой транзакцией до завершения первой. Однако возможны фантомные чтения (новые строки появляются при повторных запросах).
🔹 Serializable:
Самый высокий уровень изоляции. Полностью изолирует транзакцию, предотвращая грязные, неповторяемые и фантомные чтения. Однако это существенно снижает производительность.
Каждый уровень предлагает компромисс между производительностью и консистентностью данных. Более высокий уровень изоляции снижает конкурентоспособность, тогда как более низкий увеличивает риск возникновения аномалий. Важно правильно подобрать уровень в зависимости от требований приложения.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤5🔥5
🗓 21 ноября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Advanced» от Otus.
Легковесные потоки были введены во многих языках программирования, таких как Go, Kotlin и другие. Теперь Java догнала другие языки по этой функциональности.
На вебинаре разберем:
🔗 Ссылка на регистрацию: https://vk.cc/cEEUeJ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥3
Media is too big
VIEW IN TELEGRAM
Поиск проблем Java-приложения с 31G heap и 500G off-heap на примере Apache Ignite
Каждый, кто знаком с высоконагруженными и распределенными системами, знает, что рано или поздно случаются инциденты — просадки производительности или потери узлов кластера.
Для примера рассмотрим узел распределенной БД Platform V DataGrid, которая нашла применение в сотнях систем Сбера, в том числе критических: системе процессинга карт, эквайринга и для хранения профилей всех клиентов-физических лиц.
В случае перебоев в работе системы необходимо или определить причину падения, или улучшить производительность. Доклад Дмитрия именно про это: как «лечить» Java-приложение с большим объемом данных, когда что-то пошло не по плану. Спикер рассмотрел также настройки Java и Linux, чтобы инциденты не случались.
@javalib #java
Каждый, кто знаком с высоконагруженными и распределенными системами, знает, что рано или поздно случаются инциденты — просадки производительности или потери узлов кластера.
Для примера рассмотрим узел распределенной БД Platform V DataGrid, которая нашла применение в сотнях систем Сбера, в том числе критических: системе процессинга карт, эквайринга и для хранения профилей всех клиентов-физических лиц.
В случае перебоев в работе системы необходимо или определить причину падения, или улучшить производительность. Доклад Дмитрия именно про это: как «лечить» Java-приложение с большим объемом данных, когда что-то пошло не по плану. Спикер рассмотрел также настройки Java и Linux, чтобы инциденты не случались.
@javalib #java
👍8❤4🔥3😁1
Forwarded from Java Guru 🤓
- Как правильно переопределить метод equals()?
▪️ Рефлексивность — объект должен быть равен самому себе.
▪️ Симметричность — если a.equals(b), то и b.equals(a) должно быть истинно.
▪️ Транзитивность — если a.equals(b) и b.equals(c), то a.equals(c) должно быть истинно.
▪️ Непротиворечивость — несколько вызовов метода equals() на одном и том же объекте должны возвращать одно и то же значение, если объекты не изменились.
▪️ null — вызов a.equals(null) должен возвращать false.
Реализация на картинке
@javatasks #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤5🔥2
❓Хотите создавать масштабируемую и отказоустойчивую микросервисную архитектуру?
19 ноября в 20:00 мск приглашаем на открытый вебинар, где вы узнаете, как применять ключевые стратегии Circuit Breaker, Retry и Load Balancing для повышения стабильности систем.
В современном мире сбоев и перегрузок не избежать. Но с правильными паттернами они не будут вас пугать. Мы разберем на практике, как защитить приложения от краха и обеспечить их стабильную работу даже при высокой нагрузке.
👨💻🛠👨🏻💻 Вебинар будет полезен разработчикам, архитекторам и DevOps-инженерам, которые хотят повысить производительность своих микросервисов, внедрив современные решения для автоматического масштабирования и балансировки.
🔴 Регистрируйтесь прямо сейчас и получите скидку на курс «Software Architect»: https://vk.cc/cEMG0a
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
19 ноября в 20:00 мск приглашаем на открытый вебинар, где вы узнаете, как применять ключевые стратегии Circuit Breaker, Retry и Load Balancing для повышения стабильности систем.
В современном мире сбоев и перегрузок не избежать. Но с правильными паттернами они не будут вас пугать. Мы разберем на практике, как защитить приложения от краха и обеспечить их стабильную работу даже при высокой нагрузке.
👨💻🛠👨🏻💻 Вебинар будет полезен разработчикам, архитекторам и DevOps-инженерам, которые хотят повысить производительность своих микросервисов, внедрив современные решения для автоматического масштабирования и балансировки.
🔴 Регистрируйтесь прямо сейчас и получите скидку на курс «Software Architect»: https://vk.cc/cEMG0a
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍6❤3🔥2
Big O Notation: Сложность алгоритмов
🔵 O(1) — Константное время
Константное время выполнения означает, что время выполнения операции не зависит от размера входных данных. Это как мгновенный доступ к элементу массива по индексу. Независимо от того, сколько данных в массиве, операция займёт одно и то же время.
🔵 O(n) — Линейное время
Линейная сложность указывает на то, что время выполнения алгоритма растёт пропорционально количеству элементов. Поиск элемента в LinkedList — классический пример. Чтобы найти нужный элемент, вам придётся пройти весь список, начиная с головы, что займёт линейное время, если искомый элемент находится в конце.
🔵 O(log n) — Логарифмическое время
В логарифмических алгоритмах задача сокращается на каждом шаге вдвое. Пример — бинарный поиск в отсортированном массиве. На каждом шаге вы делите массив пополам, и продолжаете поиск в нужной половине. Это значительно быстрее, чем линейный поиск.
🔵 O(n^2) — Квадратичное время
В алгоритмах с квадратичной сложностью каждый элемент сравнивается с каждым другим. Примером является сортировка пузырьком (Bubble Sort), где алгоритм многократно сравнивает и обменивает элементы местами, что приводит к квадратичному времени выполнения при увеличении числа элементов.
🔵 O(n^3) — Кубическое время
Кубическая сложность встречается в задачах с тройными вложенными циклами. Пример — умножение матриц, где каждый элемент одной матрицы должен быть умножен на каждый элемент другой, что приводит к тройным вложенным операциям.
🔵 O(n log n) — Линейно-логарифмическое время
Линейно-логарифмическая сложность характерна для более продвинутых алгоритмов сортировки, таких как быстрая сортировка (QuickSort) или сортировка слиянием (MergeSort). Эти алгоритмы делят массив на части и сортируют их, что делает их более эффективными по сравнению с квадратичными.
🔵 O(2^n) — Экспоненциальное время
Экспоненциальная сложность наблюдается в рекурсивных алгоритмах, таких как вычисление чисел Фибоначчи без мемоизации. На каждом шаге создаётся две новые ветви вычислений, что приводит к экспоненциальному росту времени выполнения с увеличением входных данных.
🔵 O(n!) — Факториальное время
Факториальная сложность возникает в задачах, связанных с вычислением всех возможных перестановок или комбинаций. Например, задача генерации всех перестановок строки: с увеличением длины строки число возможных комбинаций возрастает факториально.
🔵 O(√n) — Время квадратного корня
Этот тип сложности встречается, например, в алгоритмах поиска делителей числа или проверки на простоту. Например, чтобы проверить, является ли число простым, достаточно проверить делители до его квадратного корня, что сокращает количество операций по сравнению с линейным подходом.
@javalib #java
Константное время выполнения означает, что время выполнения операции не зависит от размера входных данных. Это как мгновенный доступ к элементу массива по индексу. Независимо от того, сколько данных в массиве, операция займёт одно и то же время.
Линейная сложность указывает на то, что время выполнения алгоритма растёт пропорционально количеству элементов. Поиск элемента в LinkedList — классический пример. Чтобы найти нужный элемент, вам придётся пройти весь список, начиная с головы, что займёт линейное время, если искомый элемент находится в конце.
В логарифмических алгоритмах задача сокращается на каждом шаге вдвое. Пример — бинарный поиск в отсортированном массиве. На каждом шаге вы делите массив пополам, и продолжаете поиск в нужной половине. Это значительно быстрее, чем линейный поиск.
В алгоритмах с квадратичной сложностью каждый элемент сравнивается с каждым другим. Примером является сортировка пузырьком (Bubble Sort), где алгоритм многократно сравнивает и обменивает элементы местами, что приводит к квадратичному времени выполнения при увеличении числа элементов.
Кубическая сложность встречается в задачах с тройными вложенными циклами. Пример — умножение матриц, где каждый элемент одной матрицы должен быть умножен на каждый элемент другой, что приводит к тройным вложенным операциям.
Линейно-логарифмическая сложность характерна для более продвинутых алгоритмов сортировки, таких как быстрая сортировка (QuickSort) или сортировка слиянием (MergeSort). Эти алгоритмы делят массив на части и сортируют их, что делает их более эффективными по сравнению с квадратичными.
Экспоненциальная сложность наблюдается в рекурсивных алгоритмах, таких как вычисление чисел Фибоначчи без мемоизации. На каждом шаге создаётся две новые ветви вычислений, что приводит к экспоненциальному росту времени выполнения с увеличением входных данных.
Факториальная сложность возникает в задачах, связанных с вычислением всех возможных перестановок или комбинаций. Например, задача генерации всех перестановок строки: с увеличением длины строки число возможных комбинаций возрастает факториально.
Этот тип сложности встречается, например, в алгоритмах поиска делителей числа или проверки на простоту. Например, чтобы проверить, является ли число простым, достаточно проверить делители до его квадратного корня, что сокращает количество операций по сравнению с линейным подходом.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍47🔥11❤9
Класс LocalDateTime
Класс LocalDateTime используется для работы с датой и временем без учета часового пояса.
Он появился в Java 8 в пакете java.time и является частью новой date/time API, которая пришла на смену устаревшим классам Date и Calendar.
Основные возможности класса LocalDateTime:
— Хранение даты и времени с точностью до наносекунд.
— Получение различных компонентов даты/времени (год, месяц, день недели и т. д.).
— Выполнение операций сложения и вычитания дат и интервалов.
— Сравнение и сортировка дат по времени.
— Форматирование и парсинг строк по заданному шаблону.
@javalib #java
Класс LocalDateTime используется для работы с датой и временем без учета часового пояса.
Он появился в Java 8 в пакете java.time и является частью новой date/time API, которая пришла на смену устаревшим классам Date и Calendar.
Основные возможности класса LocalDateTime:
— Хранение даты и времени с точностью до наносекунд.
— Получение различных компонентов даты/времени (год, месяц, день недели и т. д.).
— Выполнение операций сложения и вычитания дат и интервалов.
— Сравнение и сортировка дат по времени.
— Форматирование и парсинг строк по заданному шаблону.
@javalib #java
👍11🔥6❤5
Forwarded from Java Guru 🤓
Что выведет данный код?
Anonymous Quiz
17%
falsetrue
6%
truefalse
36%
Compiler Error
27%
truetrue
13%
falsefalse
👍4🔥3🎅2❤1
На курсе «Java Developer. Professional» вы научитесь создавать современные Java-приложения, освоите Spring WebFlux и Kafka, а также разберётесь в работе JVM изнутри.
Вас ждёт практическая работа с кодом, детальные разборы, ревью от экспертов и подходы, позволяющие писать эффективный и чистый код.
Начните свой путь к уровню Middle+! Используйте Java на 100%.
🎁 Только в "Черную пятницу", скидки на курс до 15%! Подробности у менеджеров.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥3
Media is too big
VIEW IN TELEGRAM
Принципы Dry Kiss Yagni с примерами Java. Прощаемся с плохими привычками кодирования
Как улучшить качество кода, следуя принципам DRY, KISS и YAGNI? В этом видео мы разберем три ключевых принципа разработки, которые помогут вам писать более чистый, простой и поддерживаемый код на Java. Примеры покажут, как избавиться от дублирования, упростить логику и избегать лишней функциональности, оставаясь сосредоточенным на текущих задачах.
📺 🗣 СМОТРЕТЬ RUTUBE
🌐 🗣 СМОТРЕТЬ VKVIDEO
@javalib #java
Как улучшить качество кода, следуя принципам DRY, KISS и YAGNI? В этом видео мы разберем три ключевых принципа разработки, которые помогут вам писать более чистый, простой и поддерживаемый код на Java. Примеры покажут, как избавиться от дублирования, упростить логику и избегать лишней функциональности, оставаясь сосредоточенным на текущих задачах.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤3🔥3
Хотите, чтобы тесты запускались параллельно и быстро? Приходите на открытый урок 20 ноября в 20:00 мск и узнайте, как использовать многопоточность и futures для суперэффективной автоматизации.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🎉3🔥1
▪️ JDK (Java Development Kit) — это набор инструментов для разработки приложений на Java. Включает компилятор, библиотеки и утилиты, необходимые для написания и сборки кода.
▪️ JRE (Java Runtime Environment) — среда выполнения, которая позволяет запускать Java-приложения. Включает в себя JVM и стандартные библиотеки, но без инструментов разработки.
▪️ JVM (Java Virtual Machine) — виртуальная машина, которая исполняет байт-код, сгенерированный при компиляции. Именно JVM делает Java переносимой, так как позволяет запускать программы на разных платформах.
@javalib #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26❤4🔥3