Что такое «фреймворк Fork/Join»?
Фреймворк
• Этап
• Этап
Решение всех подзадач (в т.ч. и само разбиение на подзадачи) происходит параллельно.
Для решения некоторых задач этап Join не требуется. Например, для параллельного
Ещё одно замечательное преимущество этого фреймворка заключается в том, что он использует
Фреймворк
Fork/Join
, представленный в JDK 7
, - это набор классов и интерфейсов позволяющих использовать преимущества многопроцессорной архитектуры современных компьютеров. Он разработан для выполнения задач, которые можно рекурсивно разбить на маленькие подзадачи, которые можно решать параллельно.• Этап
Fork
: большая задача разделяется на несколько меньших подзадач, которые в свою очередь также разбиваются на меньшие. И так до тех пор, пока задача не становится тривиальной и решаемой последовательным способом.• Этап
Join
: далее (опционально) идёт процесс «свёртки» - решения подзадач некоторым образом объединяются пока не получится решение всей задачи.Решение всех подзадач (в т.ч. и само разбиение на подзадачи) происходит параллельно.
Для решения некоторых задач этап Join не требуется. Например, для параллельного
QuickSort
— массив рекурсивно делится на всё меньшие и меньшие диапазоны, пока не вырождается в тривиальный случай из 1 элемента. Хотя в некотором смысле Join
будет необходим и тут, т.к. всё равно остаётся необходимость дождаться пока не закончится выполнение всех подзадач.Ещё одно замечательное преимущество этого фреймворка заключается в том, что он использует
work-stealing
алгоритм: потоки, которые завершили выполнение собственных подзадач, могут «украсть» подзадачи у других потоков, которые всё ещё заняты.👍25🔥2
Если одно слово состоит из того же набора букв, что и другое, то эти слова друг для друга являются анаграммами. В этом видео разберём алгоритм проверки таких слов на Java.
Рассмотрим два варианта реализации алгоритма. Один из них использует мапу, второй - стандартную сортировку массивов.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Алгоритм определения анаграмм
#java #алгоритмы #анаграмма Если одно слово состоит из того же набора букв, что и другое, то эти слова друг для друга являются анаграммами. В этом видео разберём алгоритм проверки таких слов на Java.
Рассмотрим два варианта реализации алгоритма. Один из…
Рассмотрим два варианта реализации алгоритма. Один из…
👍14🔥4
Современный подход к программной архитектуре: сложные компромиссы (2023) PDF
В архитектуре программного обеспечения нет простых решений. Напротив, есть масса сложностей — задач и проблем, для решения которых нет готовых ответов и приходится выбирать между различными компромиссами. Эта книга научит вас критически относиться к компромиссам, связанным с распределенными архитектурами. Опытные архитекторы Нил Форд, Марк Ричардс, Прамод Садаладж и Жамак Дехгани обсуждают стратегии выбора архитектуры, подходящей для тех или иных случаев. История Sysops Squad — вымышленной группы специалистов — позволяет исследовать все аспекты выбора архитектуры: от определения степени гранулярности сервисов, управления рабочими процессами и оркестрации, разделения контрактов и управления распределенными транзакциями до оптимизации таких операционных характеристик, как масштабируемость, адаптируемость и производительность.
В архитектуре программного обеспечения нет простых решений. Напротив, есть масса сложностей — задач и проблем, для решения которых нет готовых ответов и приходится выбирать между различными компромиссами. Эта книга научит вас критически относиться к компромиссам, связанным с распределенными архитектурами. Опытные архитекторы Нил Форд, Марк Ричардс, Прамод Садаладж и Жамак Дехгани обсуждают стратегии выбора архитектуры, подходящей для тех или иных случаев. История Sysops Squad — вымышленной группы специалистов — позволяет исследовать все аспекты выбора архитектуры: от определения степени гранулярности сервисов, управления рабочими процессами и оркестрации, разделения контрактов и управления распределенными транзакциями до оптимизации таких операционных характеристик, как масштабируемость, адаптируемость и производительность.
👍13🔥4❤2🎅1
Что такое Semaphore?
Semaphore
– это тип синхронизатора: семафор со счётчиком, реализующий шаблон синхронизации Семафор. Доступ управляется с помощью счётчика: изначальное значение счётчика задаётся в конструкторе при создании синхронизатора, когда поток заходит в заданный блок кода, то значение счётчика уменьшается на единицу, когда поток его покидает, то увеличивается. Если значение счётчика равно нулю, то текущий поток блокируется, пока кто-нибудь не выйдет из защищаемого блока. Semaphore
используется для защиты дорогих ресурсов, которые доступны в ограниченном количестве, например подключение к базе данных в пуле.👍24❤1
❓Как создать приложение на Java с нуля?
Покажем во время практического бесплатного открытого урока «Простой консольный файловый менеджер на Java», который пройдёт в рамках курса "Java-разработчик" от OTUS.
🔥Урок будет полезен тем, кто хочет:
— Начать изучать Java с нуля.
— Посмотреть, как на практике создаются консольные Java-приложения.
— Разобраться как в Java работать с файловой системой через java.io.
🔥В результате урока вы:
— Увидите, как пишется код и создаются программы на языке Java.
— Узнаете, как работать с пакетом java.io.
Дата: 19 сентября в 20:00 мск.
Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени!
👉Регистрация
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Покажем во время практического бесплатного открытого урока «Простой консольный файловый менеджер на Java», который пройдёт в рамках курса "Java-разработчик" от OTUS.
🔥Урок будет полезен тем, кто хочет:
— Начать изучать Java с нуля.
— Посмотреть, как на практике создаются консольные Java-приложения.
— Разобраться как в Java работать с файловой системой через java.io.
🔥В результате урока вы:
— Увидите, как пишется код и создаются программы на языке Java.
— Узнаете, как работать с пакетом java.io.
Дата: 19 сентября в 20:00 мск.
Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени!
👉Регистрация
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍4
GraphQL - это стандарт клиент-серверного взаимодействия, который позволяет гибко запрашивать данные с сервера. Основное отличие от традиционных REST-запросов состоит в том, что клиент сам выбирает, какие поля он будет запрашивать у сервера, тогда как REST предполагает заранее определённый фиксированный формат. При этом сервер будет подгружать из хранилища ровно те поля, которые необходимы и ничуть не больше.
Относительно недавно в Spring Boot появился компонент для работы c GraphQL и мы сделаем проект на его основе. Для удобства отладки также подключим отладочный веб-интерфейс graphiql.
Ещё рассмотрим проблему N+1, когда для каждого элемента результирующего списка выполняется дополнительный запрос.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥8❤4
Head First. Git. Лучший способ понять Git изнутри (2024) PDF
Книга поможет быстро и легко изучить самый популярный в мире инструмент контроля версий Git. В ней использована уникальная методика Head First, выходящая за рамки синтаксиса и инструкций по решению конкретных задач, а эффектное визуальное оформление разработано с учетом того, как работает и наиболее продуктивно усваивает информацию мозг. Рассмотрены основы Git, свойства ветвления кода, слияние, коммиты, устройство репозитория Git и поиск в нем, отмена действий и исправление ошибок. Особое внимание уделено командной работе с Git, передовым методам взаимодействия и советам профессионалов по эффективной работе.
Книга поможет быстро и легко изучить самый популярный в мире инструмент контроля версий Git. В ней использована уникальная методика Head First, выходящая за рамки синтаксиса и инструкций по решению конкретных задач, а эффектное визуальное оформление разработано с учетом того, как работает и наиболее продуктивно усваивает информацию мозг. Рассмотрены основы Git, свойства ветвления кода, слияние, коммиты, устройство репозитория Git и поиск в нем, отмена действий и исправление ошибок. Особое внимание уделено командной работе с Git, передовым методам взаимодействия и советам профессионалов по эффективной работе.
👍31🔥4❤3☃2😁1
Чем полезны неизменяемые объекты?
Неизменяемость (
Неизменяемость (
immutability
) помогает облегчить написание многопоточного кода. Неизменяемый объект может быть использован без какой-либо синхронизации. К сожалению, в Java
нет аннотации @Immutable
, которая делает объект неизменяемым, для этого разработчикам нужно самим создавать класс с необходимыми характеристиками. Для этого необходимо следовать некоторым общим принципам: инициализация всех полей только в конструкторе, отсутствие методов setX()
вносящих изменения в поля класса, отсутствие утечек ссылки, организация отдельного хранилища копий изменяемых объектов и т.д.👍31❤1
🟢 Как работать с Kafka на SQL?
🔥 Знание Kafka и умение грамотно с ней работать значительно повышает востребованность и стоимость услуг IT-специалиста.
Начните или углубите изучение этого инструмента на бесплатном открытом уроке ksqlDB - анализируем потоки на SQL от OTUS.
💻 На занятии вы узнаете:
— что такое Kafka;
— что такое ksqlDB;
— как работать с Kafka в интерактивном режиме на SQL;
— как ksqlDB помогает интегрировать Kafka с внешними системами.
Преподаватель Вадим Заигрин – Team Lead команд инженеров данных на разных проектах, разработчик, Data Engineer и Data Scientist с опытом в IT более 35 лет.
✔️ Занятие пройдёт 27 сентября в 20:00 мск в рамках курса «Apache Kafka».
Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени!
👉 Пройдите бесплатное вступительное тестирование и зарегистрируйтесь на событие!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Начните или углубите изучение этого инструмента на бесплатном открытом уроке ksqlDB - анализируем потоки на SQL от OTUS.
💻 На занятии вы узнаете:
— что такое Kafka;
— что такое ksqlDB;
— как работать с Kafka в интерактивном режиме на SQL;
— как ksqlDB помогает интегрировать Kafka с внешними системами.
Преподаватель Вадим Заигрин – Team Lead команд инженеров данных на разных проектах, разработчик, Data Engineer и Data Scientist с опытом в IT более 35 лет.
Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
Транзакции являются важным инструментом для построения отказоустойчивых информационных систем, работающих в условиях постоянной высокой нагрузки и обеспечивающих одновременную работу десятков, сотен, а то и тысяч пользователей.
В этом ролике автор постарался рассказать про проблемы, возникающие в многопользовательских информационных системах, про транзакции и требования ACID к транзакционным системам, уровни изолированности и распространение транзакций, а так же демонстрирует API для управления транзакциями, предоставляемые Spring Framework.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Транзакции - Spring Framework в деталях
Транзакции являются важным инструментом для построения отказоустойчивых информационных систем, работающих в условиях постоянной высокой нагрузки и обеспечивающих одновременную работу десятков, сотен, а то и тысяч пользователей.
В этом ролике я постарался…
В этом ролике я постарался…
👍17❤4🔥2☃1
Вышла Java 21
Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.
Java 21 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода.
Читать статью
Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.
Java 21 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода.
Читать статью
Teletype
Вышла Java 21
Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP\'ов. Release Notes можно посмотреть здесь...
👍75🔥14❤10🎉2☃1
Java библиотека pinned «Вышла Java 21 Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь. Java 21 является LTS-релизом, а значит у него будут выходить обновления как минимум…»
Что такое busy spin?
busy spin
– это техника, которую программисты используют, чтобы заставить поток ожидать при определённом условии. В отличие от традиционных методов wait()
, sleep()
или yield()
, которые подразумевают уступку процессорного времени, этот метод вместо уступки выполняет пустой цикл. Это необходимо, для того, чтобы сохранить кэш процессора, т.к. в многоядерных системах, существует вероятность, что приостановленный поток продолжит своё выполнение уже на другом ядре, а это повлечет за собой перестройку состояния процессорного кэша, которая является достаточно затратной процедурой.👍39🔥6
- Умение эффективно работать в проектах, где есть Spring
- Знание современных возможностей Spring
- Понимание, как создавать Web-приложения на микросервисной архитектуре и решать высокоуровневые задачи по разработке
- Умение быстро проходить путь от идеи до production-grade
- Владение фреймворками Spring и технологиями вспомогательных проектов (Spring MVC, Spring Security, Spring Boot, Spring Reactive Stack, Spring 5)
Пройдите бесплатное вступительное тестирование прямо сейчас и узнайте, готовы ли вы стать студентом!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3❤1
👉 Создайте свое первое приложение под Android
📅 21 сентября в 20:00 в рамках курса «Android Developer» от OTUS.
Напишите приложение «Погода» самостоятельно за 60 минут
На занятии:
- создадим приложение из одного экрана, которое будет показывать погоду на данный момент в заданном городе, используя MVVM, Retrofit, Kotlin Coroutines, Piasso;
- узнаем, что создавать приложения под Android – не сложно и не страшно;
- познакомимся с архитектурой MVVM, получением данных из сети и организацией асинхронной работы с помощью Kotlin Coroutines.
📌 Урок доступен для всех желающих познакомиться с Android-разработкой. Это живой эфир, на котором вы сможете задать преподавателю любые вопросы в режиме реального времени!
Не упустите возможность совершенно бесплатно создать первый кейс для своего портфолио!
👉 Регистрируйтесь прямо сейчас
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📅 21 сентября в 20:00 в рамках курса «Android Developer» от OTUS.
Напишите приложение «Погода» самостоятельно за 60 минут
На занятии:
- создадим приложение из одного экрана, которое будет показывать погоду на данный момент в заданном городе, используя MVVM, Retrofit, Kotlin Coroutines, Piasso;
- узнаем, что создавать приложения под Android – не сложно и не страшно;
- познакомимся с архитектурой MVVM, получением данных из сети и организацией асинхронной работы с помощью Kotlin Coroutines.
📌 Урок доступен для всех желающих познакомиться с Android-разработкой. Это живой эфир, на котором вы сможете задать преподавателю любые вопросы в режиме реального времени!
Не упустите возможность совершенно бесплатно создать первый кейс для своего портфолио!
👉 Регистрируйтесь прямо сейчас
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍6🔥2☃1❤1
Основы программирования на Java: Для школьников... и не только (2019) PDF
Курс «Основы компьютерных наук для средней школы» является базовым курсом по основам программирования. Данное издание рассчитано на учеников старших классов (9–11), не имеющих опыта в написании компьютерных программ или имеющих минимальный опыт. Такой подход позволяет использовать учебник и в рамках коллективных занятий (на уроках, факультативах или кружках), и при самостоятельном индивидуальном обучении.
Пособие содержит как общие теоретические положения подхода к написанию программ, так и описание практических приемов, а также разбор соответствующих излагаемому материалу примеров.
Книга написана на основании базовой части курса «Компьютерные науки», преподаваемого в 9–12 классах израильской школы. Авторы — ведущие преподаватели этого курса, с опытом работы более 25 лет.
Курс «Основы компьютерных наук для средней школы» является базовым курсом по основам программирования. Данное издание рассчитано на учеников старших классов (9–11), не имеющих опыта в написании компьютерных программ или имеющих минимальный опыт. Такой подход позволяет использовать учебник и в рамках коллективных занятий (на уроках, факультативах или кружках), и при самостоятельном индивидуальном обучении.
Пособие содержит как общие теоретические положения подхода к написанию программ, так и описание практических приемов, а также разбор соответствующих излагаемому материалу примеров.
Книга написана на основании базовой части курса «Компьютерные науки», преподаваемого в 9–12 классах израильской школы. Авторы — ведущие преподаватели этого курса, с опытом работы более 25 лет.
👍12🔥3
Перечислите принципы, которым вы следуете в многопоточном программировании?
При написании многопоточных программ следует придерживаться определённых правил, которые помогают обеспечить достойную производительность приложения в сочетании с удобной отладкой и простотой дальнейшей поддержки кода.
• Всегда давайте значимые имена своим потокам. Процесс отладки, нахождения ошибок или отслеживание исключения в многопоточном коде – довольно сложная задача.
• Избегайте блокировок или старайтесь уменьшить масштабы синхронизации. Блокировка затратна, а переключение контекста ещё более ресурсоёмко. Пытайтесь избегать синхронизации и блокировки насколько это возможно, и организуйте критическую секцию в минимально необходимом объёме. Поэтому синхронизированный блок всегда предпочительней синхронизированного метода, дополнительно наделяя возможностью абсолютного контроля над масштабом блокировки.
• Обрабатывайте прерывание потока с особой тщательностью. Нет ничего хуже оставшегося заблокированным ресурса или системы в неконстистентном, по причине неподтверждённой транзакции, состоянии.
• Помните об обработке исключений. Выброшенные
• Между синхронизаторами и
• Почти всегда использование
При написании многопоточных программ следует придерживаться определённых правил, которые помогают обеспечить достойную производительность приложения в сочетании с удобной отладкой и простотой дальнейшей поддержки кода.
• Всегда давайте значимые имена своим потокам. Процесс отладки, нахождения ошибок или отслеживание исключения в многопоточном коде – довольно сложная задача.
OrderProcessor
, QuoteProcessor
или TradeProcessor
намного информативнее, чем Thread1
, Thread2
и Thread3
. Имя должно отражать задачу, выполняемую данным потоком.• Избегайте блокировок или старайтесь уменьшить масштабы синхронизации. Блокировка затратна, а переключение контекста ещё более ресурсоёмко. Пытайтесь избегать синхронизации и блокировки насколько это возможно, и организуйте критическую секцию в минимально необходимом объёме. Поэтому синхронизированный блок всегда предпочительней синхронизированного метода, дополнительно наделяя возможностью абсолютного контроля над масштабом блокировки.
• Обрабатывайте прерывание потока с особой тщательностью. Нет ничего хуже оставшегося заблокированным ресурса или системы в неконстистентном, по причине неподтверждённой транзакции, состоянии.
• Помните об обработке исключений. Выброшенные
InterruptedException
должны быть адекватно обработаны, а не просто подавлены. Так же не стоит пренебрегать Thread.UncaughtExceptionHandler
. При использовании пула потоков необходимо помнить, что он зачастую просто «проглатывает» исключения. Так, если вы отправили на выполнение Runnable
нужно обязательно поместить код выполнения задачи внутрь блока try-catch
. Если в очередь пула помещается Callable
, необходимо удостоверится, что результат выполнения всегда изымается помощью блокирующего get()
, чтобы в случае возникновения существовала возможнотсь заново выбросить произошедшее исключение.• Между синхронизаторами и
wait()
и notify()
следует выбирать синхронизаторы. Во-первых, синхронизаторы, типа CountDownLatch
, Semaphore
, CyclicBarrier
или Exchanger
упрощают написание кода. Очень сложно реализовывать комплексный управляющий поток, используя wait()
и notify()
. Во-вторых, эти классы написаны и поддерживаются настоящими мастерами своего дела и есть шанс, что в последующих версиях JDK
они будут оптимизированы изнутри или заменены более производительной внешней реализацией.• Почти всегда использование
Concurrent сollection
выгоднее использования Synchronized сollection
, т.к. первые более современны (используют все доступные на момент их написания новшества языка) и масштабируемы, чем их синхронизированые аналоги.👍27❤3🔥3
Разберёмся, как можно вычислять арифметические выражения. Предположим, на вход нам поступает строка текста, которая содержит корректное арифметическое выражение.
Это выражение состоит из пробелов, чисел, скобок и знаков, обозначающих основные математические действия (плюс, минус, умножить, разделить). Нам нужно разобрать это выражение на отдельные элементы, а затем вычислить результат с учётом приоритетов математических операций.
Обработку такого выражения можно разделить на три основных этапа:
1. Разбиение строки на отдельные части
2. Обработка этих частей с учётом математических операций
3. Само вычисление
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Разбор и вычисление арифметических выражений на Java
#алгоритмы #java #калькулятор Разберёмся, как можно вычислять арифметические выражения. Предположим, на вход нам поступает строка текста, которая содержит корректное арифметическое выражение.
Это выражение состоит из пробелов, чисел, скобок и знаков, обозначающих…
Это выражение состоит из пробелов, чисел, скобок и знаков, обозначающих…
👍12🔥3
Ключевыми темами этого урока будут:
1. Какие исключения и где их стоит обрабатывать:
— Основные типы исключений и их назначение;
— Места, где следует обрабатывать исключения (локальная или глобальная обработка); - Пользоваться или продолжать выброс исключений.
2. Стратегии обработки исключений:
— Принцип единственной ответственности (Single Responsibility Principle) и обработка исключений;
— Принцип открытости/закрытости (Open/Closed Principle) и обработка исключений;
— Принцип подстановки Барбары Лисков (Liskov Substitution Principle) и обработка исключений;
— Принцип разделения интерфейса (Interface Segregation Principle) и границы обработки исключений;
— Принцип инверсии зависимости (Dependency Inversion Principle) и управление исключениями.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2