Как оптимизировать код по памяти?
Anonymous Quiz
53%
Использовать пагинацию
20%
Загрузить данные в кеш и работать с ним оттуда
12%
Создать новый список с фильтрацией только нужных данных
5%
Изменить List на массив
10%
А что такого, норм код 🤔
👍9🔥3
Обучение на курсе «Разработчик на Spring Framework» — ваш шанс прокачаться и выйти на более серьёзные проекты!
Станьте профессионалом, который уверенно работает с микросервисной архитектурой, быстро доносит идеи до production-grade и владеет Spring на уровне, который ценят в топовых компаниях. Диплом OTUS откроет вам двери к новым возможностям и амбициозным проектам.
🎁 В "Черную пятницу", скидки на курс до 15%! Подробности у менеджеров.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥2🥴1
Что вставить вместо ... чтобы найти максимум в массиве arr?
Anonymous Quiz
35%
int max = Arrays.stream(arr).max();
19%
int max = Arrays.stream(arr).max().orElse(-1);
23%
int max = Arrays.max(arr);
2%
int max = arr[arr.length - 4];
21%
int max = Collections.max(Arrays.asList(arr));
👍12🔥3🥴3❤2
Какой основной задачей должен заниматься JwtAuthenticationFilter?
Anonymous Quiz
13%
Проверять права доступа пользователя на основе ролей
9%
Проверять, что JWT токен не истек
73%
Проверять, что запрос содержит корректный JWT токен и аутентифицировать пользователя
4%
Генерировать новый JWT токен для каждого запроса
1%
Обновлять срок действия JWT токена при каждом запросе
👍8❤3🔥3
Что выведет данный фрагмент кода?
Anonymous Quiz
14%
true true
56%
false true
16%
true false
14%
false false
👍7🔥4
Создание микросервиса
Присоединяйтесь к нашему открытому уроку и погрузитесь в основы разработки микросервисов
🚀На вебинаре вы узнаете:
1. Основные принципы проектирования микросервисов: разделение на небольшие независимые компоненты, которые взаимодействуют через API.
2. Способы интеграции микросервисов с помощью REST API, gRPC или очередей сообщений (RabbitMQ, Apache Kafka).
3. Подходы к тестированию, отладке и мониторингу микросервисов для обеспечения их корректной работы в продакшене.
Практика: Расскажем, как проектировать микросервисную архитектуру, выбирать технологии и инструменты для её реализации.
👉 Регистрация и подробности о курсе «Архитектура и шаблоны проектирования» https://vk.cc/cFFimJ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Присоединяйтесь к нашему открытому уроку и погрузитесь в основы разработки микросервисов
🚀На вебинаре вы узнаете:
1. Основные принципы проектирования микросервисов: разделение на небольшие независимые компоненты, которые взаимодействуют через API.
2. Способы интеграции микросервисов с помощью REST API, gRPC или очередей сообщений (RabbitMQ, Apache Kafka).
3. Подходы к тестированию, отладке и мониторингу микросервисов для обеспечения их корректной работы в продакшене.
Практика: Расскажем, как проектировать микросервисную архитектуру, выбирать технологии и инструменты для её реализации.
👉 Регистрация и подробности о курсе «Архитектура и шаблоны проектирования» https://vk.cc/cFFimJ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍3❤2🔥2
Как следует объявить поле age при работе с JPA, чтобы оно HE отображалось в БД?
Anonymous Quiz
3%
public int
24%
private transient int
6%
private volatile int
58%
private int + @Transient
10%
private int + @Column(nullable = true)
👍13🔥5🎉2
🤔Проектирование распределённых систем и управление масштабируемостью
Приглашаем на открытый урок, где вы изучите основы проектирования распределённых систем, включая методы обеспечения масштабируемости, отказоустойчивости и работы с высокими нагрузками. Мы обсудим, как решать проблемы, связанные с согласованностью данных и сетевой латентностью, и рассмотрим подходы к выбору компромиссов между доступностью и производительностью.
Результат: вы узнаете, как проектировать распределённые системы, способные эффективно обрабатывать большие объёмы данных. Научитесь применять принципы масштабируемости и управлять компромиссами при проектировании, что поможет разрабатывать устойчивые и высокопроизводительные решения.
👉 Регистрация и подробности о курсе System Design
https://otus.pw/dcVy/?erid=LjN8KL8bM
#реклама
О рекламодателе
Приглашаем на открытый урок, где вы изучите основы проектирования распределённых систем, включая методы обеспечения масштабируемости, отказоустойчивости и работы с высокими нагрузками. Мы обсудим, как решать проблемы, связанные с согласованностью данных и сетевой латентностью, и рассмотрим подходы к выбору компромиссов между доступностью и производительностью.
Результат: вы узнаете, как проектировать распределённые системы, способные эффективно обрабатывать большие объёмы данных. Научитесь применять принципы масштабируемости и управлять компромиссами при проектировании, что поможет разрабатывать устойчивые и высокопроизводительные решения.
👉 Регистрация и подробности о курсе System Design
https://otus.pw/dcVy/?erid=LjN8KL8bM
#реклама
О рекламодателе
👍5❤4🔥2
Что выведет следующий код?
Anonymous Quiz
20%
15
13%
15.0
5%
RuntimeException
58%
Ошибка компиляции
4%
15 или 15.0 в случайном порядке
👍17🔥4
Что делает volatile?
volatile – ключевое слово для работы с многопоточностью. Не то же самое, что volatile в C++, не обязано делать что-либо с кэшем процессора. Оказывает на поле объекта ровно два эффекта.
Во-первых, чтение/запись такого поля становятся атомарными. Это применение актуально только для long и double, и не на всех платформах. Для остальных типов полей это верно и так.
Второй и самый интересный эффект – пара событий запись-чтение для такого поля являются synchronization actions. Значит, между ними существует отношение happens-before. Это значит, что существует гарантия, что произошедшее в памяти до записи будет видно после чтения. То есть будут успешно прочитаны значения, записанные в другие переменные.
Для полного понимания темы рекомендуется к просмотру доклад Алексея Шипилёва и документация. Лучше всего эффект volatile иллюстрирует задача из этого доклада, которую часто и дают в качестве этого вопроса. Вопрос – что выведет данный код:
Трюк в том, что помимо очевидных 21 (поток 2 отработал после 1), 00 (поток 2 отработал до 1, переменные еще не инициализированы) и 01 (поток 2 сработал между записями), может быть и неожиданные 20. Дело в том, что для операторов одного потока действует program order, он гарантирует хотя бы видимость правильной последовательности операций. Между потоками необходим «мост» из happens-before. Его даст применение модификатора volatile к переменной b, неожиданный результат 20 будет исключен.
Этот эффект используется для получения простой и дешевой адаптации программы к многопоточной среде без использования сложных и ошибкоопасных техник блокировок и синхронизаций.
@javalib #java
volatile – ключевое слово для работы с многопоточностью. Не то же самое, что volatile в C++, не обязано делать что-либо с кэшем процессора. Оказывает на поле объекта ровно два эффекта.
Во-первых, чтение/запись такого поля становятся атомарными. Это применение актуально только для long и double, и не на всех платформах. Для остальных типов полей это верно и так.
Второй и самый интересный эффект – пара событий запись-чтение для такого поля являются synchronization actions. Значит, между ними существует отношение happens-before. Это значит, что существует гарантия, что произошедшее в памяти до записи будет видно после чтения. То есть будут успешно прочитаны значения, записанные в другие переменные.
Для полного понимания темы рекомендуется к просмотру доклад Алексея Шипилёва и документация. Лучше всего эффект volatile иллюстрирует задача из этого доклада, которую часто и дают в качестве этого вопроса. Вопрос – что выведет данный код:
int a; int b;
// thread 1:
a = 1;
b = 2;
// thread 2:
System.out.print(b);
System.out.print(a);
Трюк в том, что помимо очевидных 21 (поток 2 отработал после 1), 00 (поток 2 отработал до 1, переменные еще не инициализированы) и 01 (поток 2 сработал между записями), может быть и неожиданные 20. Дело в том, что для операторов одного потока действует program order, он гарантирует хотя бы видимость правильной последовательности операций. Между потоками необходим «мост» из happens-before. Его даст применение модификатора volatile к переменной b, неожиданный результат 20 будет исключен.
Этот эффект используется для получения простой и дешевой адаптации программы к многопоточной среде без использования сложных и ошибкоопасных техник блокировок и синхронизаций.
@javalib #java
👍17❤3🔥3🤔1😐1
Зачем нужно ключевое слово default?
Изначально (с Java 1.5) это слово использовалось для объявления дефолтного значения элементов аннотации.
В Java 8 вместе с лямбдами и стримами появилась острая необходимость дополнить стандартные интерфейсы новыми методами. Никто естественно не собирался ломать обратную совместимость, и было предложено добавить методы по умолчанию.
Теперь добавление ключевого слова default к методу интерфейса позволяет добавить ему тело. Все новые методы старых интерфейсов снабжаются дефолтной реализацией.
В реализации такого метода его дефолтный вариант вызывается тем же синтаксисом, что и внешний класс из вложенного: InterfaceName.super.methodName().
Методы по умолчанию подошли еще на шаг к введению в Java беспроблемной версии множественного наследования – примесям (mixin). Интерфейс не может иметь состояния, поэтому полноценные примеси всё ещё недоступны.
@javatasks #java
Изначально (с Java 1.5) это слово использовалось для объявления дефолтного значения элементов аннотации.
В Java 8 вместе с лямбдами и стримами появилась острая необходимость дополнить стандартные интерфейсы новыми методами. Никто естественно не собирался ломать обратную совместимость, и было предложено добавить методы по умолчанию.
Теперь добавление ключевого слова default к методу интерфейса позволяет добавить ему тело. Все новые методы старых интерфейсов снабжаются дефолтной реализацией.
В реализации такого метода его дефолтный вариант вызывается тем же синтаксисом, что и внешний класс из вложенного: InterfaceName.super.methodName().
Методы по умолчанию подошли еще на шаг к введению в Java беспроблемной версии множественного наследования – примесям (mixin). Интерфейс не может иметь состояния, поэтому полноценные примеси всё ещё недоступны.
@javatasks #java
🔥9❤2👍1
В каком порядке указываются модификаторы?
Правила применения модификаторов поля описаны в JLS 8.3.1:
🔘 Нельзя указывать один модификатор дважды;
🔘 Нельзя использовать несколько модификаторов доступа одновременно.
Порядок указания вообще свободный, но обычно используется следующий:
@Аннотации, доступ,
Требования для модификаторов метода находятся в JLS 8.4.3:
🔘 Те же требования, что и к полю;
🔘 Совместно с abstract кроме аннотаций можно использовать только protected или public;
🔘 native метод не может использовать strictfp.
И так же не требуется, но рекомендуется использовать такой порядок:
@Аннотации, доступ,
@javatasks #java
Правила применения модификаторов поля описаны в JLS 8.3.1:
🔘 Нельзя указывать один модификатор дважды;
🔘 Нельзя использовать несколько модификаторов доступа одновременно.
Порядок указания вообще свободный, но обычно используется следующий:
@Аннотации, доступ,
static final transient volatile
Требования для модификаторов метода находятся в JLS 8.4.3:
🔘 Те же требования, что и к полю;
🔘 Совместно с abstract кроме аннотаций можно использовать только protected или public;
🔘 native метод не может использовать strictfp.
И так же не требуется, но рекомендуется использовать такой порядок:
@Аннотации, доступ,
abstract static final synchronized native strictfp
@javatasks #java
👍8🔥3❤1👏1
Какая строка инициализации приведёт к ошибке?
Anonymous Quiz
45%
1
4%
2
5%
3
29%
4
17%
Ошибки не будет
👍12🔥3❤1
Schema Registry: сделайте свою работу с Kafka стабильной и удобной
Apache Kafka — ваш инструмент для работы с большими данными. Но как сделать её использование ещё удобнее? Разберёмся с реестром схем (Schema Registry) 19 декабря в 20:00 мск на открытом уроке.
Узнайте, как управлять эволюцией схем в приложениях Kafka и почему это ключ к стабильным и масштабируемым проектам.
Если вы хотите научиться работать с Apache Kafka или уже используете её, но не знаете, как внедрить Schema Registry, этот вебинар поможет навести порядок в данных и оптимизировать процессы.
Спикер Евгений Непомнящий — опытный разработчик и преподаватель.
Регистрируйтесь и получите скидку на большое обучение «Apache Kafka»: https://vk.cc/cFRQWR
Apache Kafka — ваш инструмент для работы с большими данными. Но как сделать её использование ещё удобнее? Разберёмся с реестром схем (Schema Registry) 19 декабря в 20:00 мск на открытом уроке.
Узнайте, как управлять эволюцией схем в приложениях Kafka и почему это ключ к стабильным и масштабируемым проектам.
Если вы хотите научиться работать с Apache Kafka или уже используете её, но не знаете, как внедрить Schema Registry, этот вебинар поможет навести порядок в данных и оптимизировать процессы.
Спикер Евгений Непомнящий — опытный разработчик и преподаватель.
Регистрируйтесь и получите скидку на большое обучение «Apache Kafka»: https://vk.cc/cFRQWR
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍3❤2🔥2👏1