🤔Проектирование распределённых систем и управление масштабируемостью
Приглашаем на открытый урок, где вы изучите основы проектирования распределённых систем, включая методы обеспечения масштабируемости, отказоустойчивости и работы с высокими нагрузками. Мы обсудим, как решать проблемы, связанные с согласованностью данных и сетевой латентностью, и рассмотрим подходы к выбору компромиссов между доступностью и производительностью.
Результат: вы узнаете, как проектировать распределённые системы, способные эффективно обрабатывать большие объёмы данных. Научитесь применять принципы масштабируемости и управлять компромиссами при проектировании, что поможет разрабатывать устойчивые и высокопроизводительные решения.
👉 Регистрация и подробности о курсе 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
Что выведет данный фрагмент кода?
Anonymous Quiz
52%
true
42%
false
4%
Ошибка компиляции
2%
RuntimeException
🥴11👍7🔥4❤3😁2
Бесплатный интенсив: Java-разработчик: старт в профессии с нуля.
📆 Когда: 21-22 декабря в 14:00 по мск.
За два дня интенсива в прямом эфире, под руководством опытного Java-разработчика, вы сможете:
✔️ Познакомиться с синтаксисом и основными конструкциями языка Java.
✔️ Написать свой первый проект и определить, подходит ли вам профессия разработчика.
✔️ Создать консольное приложение на Java с интеграцией API Яндекс.Карт для построения маршрутов и поиска информации.
✔️ Узнать ответы на интересующие вас вопросы.
✔️ Получить доступ к закрытому профессиональному сообществу.
🎁 Подарки для участниковинтенсива: гайд «Как заговорить на сленге IT-специалистов», карта компетенций начинающего Java-разработчика и доступ в закрытое сообщество «Старт в Java» от Хекслета!
📆 Когда: 21-22 декабря в 14:00 по мск.
За два дня интенсива в прямом эфире, под руководством опытного Java-разработчика, вы сможете:
✔️ Познакомиться с синтаксисом и основными конструкциями языка Java.
✔️ Написать свой первый проект и определить, подходит ли вам профессия разработчика.
✔️ Создать консольное приложение на Java с интеграцией API Яндекс.Карт для построения маршрутов и поиска информации.
✔️ Узнать ответы на интересующие вас вопросы.
✔️ Получить доступ к закрытому профессиональному сообществу.
🎁 Подарки для участниковинтенсива: гайд «Как заговорить на сленге IT-специалистов», карта компетенций начинающего Java-разработчика и доступ в закрытое сообщество «Старт в Java» от Хекслета!
❤3👍3🔥2
👍Научитесь писать проверки для своего проекта, правильно подсвечивать в IDE и репортить найденные инциденты!
На бесплатном уроке онлайн-курса «Android Developer. Professional» — «Android Lint»: регистрация
Что будет на вебинаре?
- Подробно рассмотрим API Android Lint и PSI/UAST деревья
- Научимся реализовывать свои Detector'ы
- Научимся тестировать реализованные Detector'ы
Каким слушателям вебинар будет полезен?
- Инженерам, которые интересуются статическим анализом, хотят автоматизировать поиск codesmell'ов, проверку кодстайла, проверку принятых в проекте регламентов.
🔥После вебинара вы сможете продолжить обучение на курсе по спеццене, в том числе, в рассрочку.
erid: LjN8JwaSF
На бесплатном уроке онлайн-курса «Android Developer. Professional» — «Android Lint»: регистрация
Что будет на вебинаре?
- Подробно рассмотрим API Android Lint и PSI/UAST деревья
- Научимся реализовывать свои Detector'ы
- Научимся тестировать реализованные Detector'ы
Каким слушателям вебинар будет полезен?
- Инженерам, которые интересуются статическим анализом, хотят автоматизировать поиск codesmell'ов, проверку кодстайла, проверку принятых в проекте регламентов.
🔥После вебинара вы сможете продолжить обучение на курсе по спеццене, в том числе, в рассрочку.
erid: LjN8JwaSF
👍3🔥1
Что выведет данный код?
Anonymous Quiz
58%
-127
13%
129
3%
51
14%
Ошибка компиляции
13%
ArithmeticException
👍8🔥7
Недавно в Кубере? Сложновато?
Ребята из Рег.ру составили пошаговый гайд для начинающих DevOPS и просто любопытных. Изучаем!
Ребята из Рег.ру составили пошаговый гайд для начинающих DevOPS и просто любопытных. Изучаем!
👍4❤2🔥2👏1
👍11🔥3⚡2
Блиц-тестирование на грейд в Java
Менторы ШОРТКАТ собрали полезный небольшой тест, который поможет тебе проверить знания.
Конечно, это не определит грейд точно, но даст понять, какие темы западают. За прохождение ещё и дадут скидку на менторство.
Переходи в бот, чтобы пройти тест: @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqupXpmF
Менторы ШОРТКАТ собрали полезный небольшой тест, который поможет тебе проверить знания.
Конечно, это не определит грейд точно, но даст понять, какие темы западают. За прохождение ещё и дадут скидку на менторство.
Переходи в бот, чтобы пройти тест: @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqupXpmF
👍5🔥2