Что можно делать с переменной хранящей null?
Во-первых, если переменная не финальная, использовать как L-value этого типа – присваивать новое значение.
Во-вторых, то же, что со значением
🔘 Сравнивать с
🔘 Приводить к типу-родителю (upcast) или типу-наследнику (downcast), учитывая границы generic-параметров при наличии;
🔘 Обращаться к членам экземпляра и получать
🔘 Применять
В-третьих, можно обращаться к статическим членам класса. В вопросе подразумевается именно эта интересная часть. Это безопасно,
Во-первых, если переменная не финальная, использовать как L-value этого типа – присваивать новое значение.
Во-вторых, то же, что со значением
null
, но с учетом типа:🔘 Сравнивать с
null
или переменной этого же класса;🔘 Приводить к типу-родителю (upcast) или типу-наследнику (downcast), учитывая границы generic-параметров при наличии;
🔘 Обращаться к членам экземпляра и получать
NullPointerException
;🔘 Применять
instanceof
и получать false
🔘 Использовать как параметр для методов и других совместимых с типом операторовВ-третьих, можно обращаться к статическим членам класса. В вопросе подразумевается именно эта интересная часть. Это безопасно,
NullPointerException
не возникнет, но для упрощения отладки и из-за отсутствия переопределения статических членов рекомендуется так не делать. Вместо этого обращайтесь к статике явно через имя класса, либо неявно, добавив для класса import static
.Wikipedia
L-value
Wikimedia disambiguation page
Что такое static?
Ключевое слово
Статические поля и методы – члены класса а не экземпляра, потому к ним можно обращаться через имя класса. Код статического блока или метода имеет доступ только к статическим членам. Статические поля не участвуют в сериализации.
Для статических методов используется раннее связывание, то есть вызов конкретного метода разрешается на этапе компиляции, не работают перегрузка и переопределение в наследниках.
Статический блок инициализации выполняется потокобезопасно, один раз сразу после загрузки класса класслоадером. Инициализаторы статических полей выполняются в неявном статическом блоке. Блоков может быть несколько, выполнятся они в порядке объявления.
Статический импорт (
Ключевое слово
static
используется для объявления вложенных классов, статических методов, полей, блоков инициализации и статических импортов.Статические поля и методы – члены класса а не экземпляра, потому к ним можно обращаться через имя класса. Код статического блока или метода имеет доступ только к статическим членам. Статические поля не участвуют в сериализации.
Для статических методов используется раннее связывание, то есть вызов конкретного метода разрешается на этапе компиляции, не работают перегрузка и переопределение в наследниках.
Статический блок инициализации выполняется потокобезопасно, один раз сразу после загрузки класса класслоадером. Инициализаторы статических полей выполняются в неявном статическом блоке. Блоков может быть несколько, выполнятся они в порядке объявления.
Статический импорт (
static import
) импортирует статические члены классов в .java
-файл.Baeldung
Static and Dynamic Binding in Java | Baeldung
An exploration of how Java handles binding method names for lookup at runtime.
#вопросы_с_собеседований
Чем отличаются методы Thread.sleep() и Thread.yield()?
Чем отличаются методы Thread.sleep() и Thread.yield()?
Метод yield() служит причиной того, что поток переходит из состояния работающий (running) в состояние работоспособный (runnable), давая возможность другим потокам активизироваться. Но следующий выбранный для запуска поток может и не быть другим.
Метод sleep() вызывает засыпание текущего потока на заданное время, состояние изменяется с работающий (running) на ожидающий (waiting).
Метод sleep() вызывает засыпание текущего потока на заданное время, состояние изменяется с работающий (running) на ожидающий (waiting).
Beginning Jakarta EE Web Development (2020)
Автор: Luciano Manelli
Количество страниц: 424
Начните создавать веб-приложения на основе Java прямо сейчас, даже если вы новичок в Java. Эта всеобъемлющая и основанная на примерах книга - все, что вам нужно для разработки динамических веб-приложений на основе Java с использованием JSP, подключения к базам данных с помощью JSF и их практического использования с помощью популярного веб-сервера Java с открытым исходным кодом, Apache Tomcat.
Скачать книгу
Автор: Luciano Manelli
Количество страниц: 424
Начните создавать веб-приложения на основе Java прямо сейчас, даже если вы новичок в Java. Эта всеобъемлющая и основанная на примерах книга - все, что вам нужно для разработки динамических веб-приложений на основе Java с использованием JSP, подключения к базам данных с помощью JSF и их практического использования с помощью популярного веб-сервера Java с открытым исходным кодом, Apache Tomcat.
Скачать книгу
Telegram
Книги для программистов (reserved)
Beginning Jakarta EE Web Development (2020)
Автор: Luciano Manelli
Автор: Luciano Manelli
Крупнейший сервис Телеграм-аналитики TGStat проводит исследование аудитории Телеграма. Опрос анонимный, занимает не больше пяти-семи минут, почти везде просто клики по вариантам ответа. В результате статистика по каналам станет точнее, а жизнь — проще. Давайте поможем: https://tgstat.ru/research
TGStat.ru
Исследование аудитории Telegram 2023.
Кто же он — пользователь Telegram 2023 года?
new Integer(128) == 128?
Для всех классов-оберток над примитивами кроме
Кэшируемые значения – оба возможных
Значения кэшируются и во многих других встроенных классах:
В конкретно этом примере скрыт еще один подвох: объект класса-обертки сравнивается с примитивом. Это приводит к анбоксингу и сравнению значений. И ответ на вопрос – да.
Для всех классов-оберток над примитивами кроме
Float
и Double
работает механизм кэширования. Некоторые значения создаются на этапе инициализации класса, и переиспользуются когда объект создается не оператором new
(например с помощью valueOf
). Кэшируемые значения – оба возможных
Boolean
, Character
до 'u007f'
(127
) и все целые числа от -128
до 127
включительно. С Java 7 верхнюю границу для Integer
можно увеличить параметром java.lang.Integer.IntegerCache.high
. Значения кэшируются и во многих других встроенных классах:
BigDecimal
, Currency
, пустые коллекции. Детали можно узнавать из исходников и документаций, так как эти кэши реализованы не на уровне JVM а в коде классов. В конкретно этом примере скрыт еще один подвох: объект класса-обертки сравнивается с примитивом. Это приводит к анбоксингу и сравнению значений. И ответ на вопрос – да.
Stack Overflow
How large is the Integer cache?
Class Integer has cache, which caches the Integer values. So if I use method valueOf or inboxing the new value will not be instantiated, but get from the cache.
I know that the default cache size ...
I know that the default cache size ...
Что такое enum?
enum – тип-перечисление. Бывает много разных формулировок вопроса, все они сводятся к разговору о перечислениях вообще. Технически это финальный класс со статическими финальными полями-экземплярами.
Является
Имеет только заранее заданный набор значений. Значения неявно
Копии элементов перечисления не создаются даже при десериализации. Вот почему Effective Java предлагает использовать для сериализуемого синглтона
Экземпляры хранят свойства
Финализация и клонирование перечислений запрещены.
enum – тип-перечисление. Бывает много разных формулировок вопроса, все они сводятся к разговору о перечислениях вообще. Технически это финальный класс со статическими финальными полями-экземплярами.
enum Foo
всегда неявно наследуется от Enum<Foo>
– то есть перечислением нельзя расширить другой класс, но всё еще можно реализовать интерфейсы. Из-за generic-параметра разные перечисления не имеют общего предка кроме Object
.Является
Comparable
(сравнивается позиция по порядку объявления значений) и Serializable
(сериализуется только имя константы).Имеет только заранее заданный набор значений. Значения неявно
public static final
и это нельзя переопределить. Для инициализации констант действуют все правила статической типизации. Копии элементов перечисления не создаются даже при десериализации. Вот почему Effective Java предлагает использовать для сериализуемого синглтона
enum
. Экземпляры хранят свойства
name
и ordinal
– имя и порядковый номер константы. Статический метод values
вернет список всех констант, valueOf
– константу по имени. Спецификация.Финализация и клонирование перечислений запрещены.
Stack Overflow
Serialization of enum fields in Java
From the Javadoc of ObjectInputStream:
Enum constants are deserialized differently than ordinary serializable
or externalizable objects. The serialized form of an enum constant
consists sole...
Enum constants are deserialized differently than ordinary serializable
or externalizable objects. The serialized form of an enum constant
consists sole...
Под каким типом хранить период времени?
В стандартной библиотеке современных версий Java для этих целей есть два класса:
Оба класса реализуют общий интерфейс
Экземпляры обоих классов могут быть созданы из значений отдельных компонентов, из двух моментов времени методом between, или из строки. Строковое представление Duration:
До Java 8 основным способом хранения периода были числовые примитивы. В этом подходе есть много недостатков, среди которых в первую очередь неограниченность значений и ненаглядность. Чтобы в Java 8+ получить период числом, используется метод
В стандартной библиотеке современных версий Java для этих целей есть два класса:
Period
– календарный период. Количество дней, месяцев и лет. Одним днем здесь считается день в терминах ZonedDateTime
.Duration
– длительность времени. Количество наносекунд, секунд, минут, часов, и тоже дней. Здесь один день – ровно 24 часа.Оба класса реализуют общий интерфейс
TemporalAmount
– период времени вообще. Оба иммутабельны, и как следствие, потокобезопасны. Любая модифицирующая операция вроде plusX()
возвращает новый экземпляр с измененным значением.Экземпляры обоих классов могут быть созданы из значений отдельных компонентов, из двух моментов времени методом between, или из строки. Строковое представление Duration:
"P2DT3H4M"
, Period: "P1Y2M3D"
.До Java 8 основным способом хранения периода были числовые примитивы. В этом подходе есть много недостатков, среди которых в первую очередь неограниченность значений и ненаглядность. Чтобы в Java 8+ получить период числом, используется метод
between()
нужного элемента енама ChronoUnit
.Как реализовать собственный стрим?
Любой стрим определяется его сплитератором.
Есть много способов получить готовый сплитератор или стрим, но чтобы создать полностью свою специфическую логику перебора элементов, придется написать собственный сплитератор.
Поток создается из сплитератора одним из статических методов класса
• Элементы перебираются методом
• При применении промежуточных и терминальных операций учитываются характеристики потока, изначально задаваемые методом
• Когда обработка стрима распараллеливается, методом
Подробно и доступно последовательность действий для реализации описана в статье на хабре.
Любой стрим определяется его сплитератором.
Spliterator
– это специальный разделяемый внутренний итератор.Есть много способов получить готовый сплитератор или стрим, но чтобы создать полностью свою специфическую логику перебора элементов, придется написать собственный сплитератор.
Поток создается из сплитератора одним из статических методов класса
StreamSupport
. Вызов его методов осуществляется самим фреймворком. Вкратце его работа выглядит так: • Элементы перебираются методом
tryAdvance
, пока он не выдаст false
. Через параметр action к элементу применяются последующие операции. • При применении промежуточных и терминальных операций учитываются характеристики потока, изначально задаваемые методом
characteristics
.• Когда обработка стрима распараллеливается, методом
trySplit
от начала последовательности элементов «откусывается» часть, и возвращается завернутой в новый сплитератор. Текущий продолжает идти по оставшемуся хвосту. В идеале, по возможности эта часть – половина элементов потока. Если разделить уже нельзя, возвращается null
.Подробно и доступно последовательность действий для реализации описана в статье на хабре.
Хабр
Пишем свой Spliterator
Многие из вас уже попробовали на вкус Stream API — потоки Java 8. Наверняка у некоторых возникло желание не только пользоваться готовыми потоками от коллекций, м...
Продолжаем конкурс на самый интересный контент в телеграм-каналах Proglib!
Призовой фонд — 280 тысяч рублей. Срок окончания конкурса -- 15 мая
Автор лучшего поста в отдельно взятом канале получает 20 тысяч рублей.
Мы упростили конкурс — теперь вам достаточно найти интересную и актуальную статью 2020-2021 года, написать к ней небольшой анонс (до 700 знаков) и прислать нам, тем не менее ваши идеи по другим форматам только добавляют + в общий зачет. Авторство можем указать по вашему желанию. В канале @progbook предлагаем отправлять рецензии на новые книги и старые актуальные.
Полный список каналов:
https://yangx.top/progbook
https://yangx.top/proglibrary
https://yangx.top/pyproglib
https://yangx.top/frontendproglib
https://yangx.top/javaproglib
https://yangx.top/dsproglib
https://yangx.top/phpproglib
https://yangx.top/cppproglib
https://yangx.top/mobileproglib
https://yangx.top/goproglib
https://yangx.top/csharpproglib
https://yangx.top/devopsslib
https://yangx.top/testerlib
https://yangx.top/hackproglib
Все посты будут с лайками и дизлайками и хэштегом #proglib_contest. Ссылки мы будем прогонять через наш сокращатель, будут браться в расчет лайки, дизлайки, охваты, клики по ссылкам. Выиграет тот кто наберёт больше всего лайков/охватов/кликов по ссылкам в публикации. Присылайте посты боту @proglib_contest_bot с указанием, на какой канал идет публикация. Юридическая информация здесь.
Призовой фонд — 280 тысяч рублей. Срок окончания конкурса -- 15 мая
Автор лучшего поста в отдельно взятом канале получает 20 тысяч рублей.
Мы упростили конкурс — теперь вам достаточно найти интересную и актуальную статью 2020-2021 года, написать к ней небольшой анонс (до 700 знаков) и прислать нам, тем не менее ваши идеи по другим форматам только добавляют + в общий зачет. Авторство можем указать по вашему желанию. В канале @progbook предлагаем отправлять рецензии на новые книги и старые актуальные.
Полный список каналов:
https://yangx.top/progbook
https://yangx.top/proglibrary
https://yangx.top/pyproglib
https://yangx.top/frontendproglib
https://yangx.top/javaproglib
https://yangx.top/dsproglib
https://yangx.top/phpproglib
https://yangx.top/cppproglib
https://yangx.top/mobileproglib
https://yangx.top/goproglib
https://yangx.top/csharpproglib
https://yangx.top/devopsslib
https://yangx.top/testerlib
https://yangx.top/hackproglib
Все посты будут с лайками и дизлайками и хэштегом #proglib_contest. Ссылки мы будем прогонять через наш сокращатель, будут браться в расчет лайки, дизлайки, охваты, клики по ссылкам. Выиграет тот кто наберёт больше всего лайков/охватов/кликов по ссылкам в публикации. Присылайте посты боту @proglib_contest_bot с указанием, на какой канал идет публикация. Юридическая информация здесь.
Telegram
Книги для программистов
Все о книгах из мира IT.
По рекламе: @proglib_adv
Учиться у нас: https://proglib.io/w/de94a698
Работать у нас: https://job.proglib.io/
Наши каналы: https://yangx.top/proglibrary/9197
РКН: https://www.gosuslugi.ru/snet/67931954509aba565214777d
По рекламе: @proglib_adv
Учиться у нас: https://proglib.io/w/de94a698
Работать у нас: https://job.proglib.io/
Наши каналы: https://yangx.top/proglibrary/9197
РКН: https://www.gosuslugi.ru/snet/67931954509aba565214777d
#вопросы_с_собеседований
Существует ли способ решения проблемы race condition?
Существует ли способ решения проблемы race condition?
Распространённые способы решения:
☕️ Использование локальной копии — копирование разделяемой переменной в локальную переменную потока. Этот способ работает только тогда, когда переменная одна и копирование производится атомарно (за одну машинную команду), использование volatile.
☕️ Синхронизация - операции над разделяемым ресурсом происходят в синхронизированном блоке (при использовании ключевого слова synchronized).
☕️ Комбинирование методов - вышеперечисленные способы можно комбинировать, копируя «опасные» переменные в синхронизированном блоке. С одной стороны, это снимает ограничение на атомарность, с другой — позволяет избавиться от слишком больших синхронизированных блоков.
Очевидных способов выявления и исправления состояний гонки не существует. Лучший способ избавиться от гонок — правильное проектирование многозадачной системы.
☕️ Использование локальной копии — копирование разделяемой переменной в локальную переменную потока. Этот способ работает только тогда, когда переменная одна и копирование производится атомарно (за одну машинную команду), использование volatile.
☕️ Синхронизация - операции над разделяемым ресурсом происходят в синхронизированном блоке (при использовании ключевого слова synchronized).
☕️ Комбинирование методов - вышеперечисленные способы можно комбинировать, копируя «опасные» переменные в синхронизированном блоке. С одной стороны, это снимает ограничение на атомарность, с другой — позволяет избавиться от слишком больших синхронизированных блоков.
Очевидных способов выявления и исправления состояний гонки не существует. Лучший способ избавиться от гонок — правильное проектирование многозадачной системы.
Допустим, ты уверенно чувствуешь себя в математике и Java, есть диплом бакалавра или специалиста, с интересом смотришь на сферу анализа данных. Таких людей на рынке труда не хватает. До 30 июня ты можешь проверить свои силы и подать заявку для поступления на магистерскую программу «Промышленный анализ данных в ритейле».
Программа разработана совместно X5 и МФТИ. Не для ленивых: 80+ реальных кейсов и 3 тыс. часов прокачивания навыков в практическом Data Science на примере ритейла.
Обучающиеся смогут оформить стажировку или даже трудоустроиться в X5 Технологии и получать от компании повышенную стипендию. Презентация кафедры, учебная программа, и условия поступления здесь: https://mipt.x5.ru/
Программа разработана совместно X5 и МФТИ. Не для ленивых: 80+ реальных кейсов и 3 тыс. часов прокачивания навыков в практическом Data Science на примере ритейла.
Обучающиеся смогут оформить стажировку или даже трудоустроиться в X5 Технологии и получать от компании повышенную стипендию. Презентация кафедры, учебная программа, и условия поступления здесь: https://mipt.x5.ru/
Создаем компактную среду выполнения с jlink
В Java 9 появился новый инструмент под названием
https://proglib.io/w/454a3607
#proglib_contest
В Java 9 появился новый инструмент под названием
jlink
. Этот простой инструмент командной строки позволяет создавать собственные среды выполнения только с теми модулями, что нужны нашему приложению. Например, с помощью следующей команды мы создадим среду выполнения, содержащую только модуль java.base
:jlink --add-modules java.base --output javabasert
Подробнее на множестве примеров разобрано здесь:https://proglib.io/w/454a3607
#proglib_contest
DZone
Going Beyond Java 8: Create Custom Java Runtimes with jlink
Although Java 8 is currently the most popular version of Java by developers everywhere, tools like jlink allow us to go beyond Java 8 and create custom runtimes.
☕️ Сертификаты и тренинги для Java-разработчика
Задумались о сертификате разработчика Java, но не знаете где пройти экзамен и что получите в итоге? В небольшом обзоре попробуем разобрать этот сложный вопрос на простые составные части.
https://proglib.io/sh/x3AwYqfjVH
Задумались о сертификате разработчика Java, но не знаете где пройти экзамен и что получите в итоге? В небольшом обзоре попробуем разобрать этот сложный вопрос на простые составные части.
https://proglib.io/sh/x3AwYqfjVH
Effective Kotlin: Best practices (2019)
Автор: Marcin Moskala
Количество страниц: 445
Kotlin - мощный и прагматичный язык, но недостаточно знать о его функциях. Вам также необходимо знать, когда и каким образом их следует использовать. В этой книге представлены и подробно описаны лучшие практики разработки на Kotlin. Каждый пункт представлен как четкое практическое правило, подкрепленное подробными объяснениями и примерами.
Скачать книгу
Автор: Marcin Moskala
Количество страниц: 445
Kotlin - мощный и прагматичный язык, но недостаточно знать о его функциях. Вам также необходимо знать, когда и каким образом их следует использовать. В этой книге представлены и подробно описаны лучшие практики разработки на Kotlin. Каждый пункт представлен как четкое практическое правило, подкрепленное подробными объяснениями и примерами.
Скачать книгу
Telegram
Книги для программистов (reserved)
Effective Kotlin: Best practices (2019)
Автор: Marcin Moskala
Автор: Marcin Moskala
Forwarded from Java jobs — вакансии для java-разработчиков
#Будва_Черногория #вакансия #офис #fulltime #java #естьработа #вилка
Добрый день.
Вакансия: Java разработчик (серверный)
Компания: Alar Studios
Формат работы: офис
Занятость: full time
Опыт: от 4 лет
З.п вилка: 2300 - 3000 eur (на руки)
Заниматься нужно будет построением сервиса аналитики очень больших объемов данных (big data analytics) на базе пропраетарной базы данных, использующей в том числе мощности GPU для той самой магии, которая понимает почти весь SQL, включая joins. В точки зрения технологической сложности - это высший пилотаж и поле для применения и раскрытия таланта! Предлагаем возможность развиваться в комфортных условиях мягкого климата Черногории на берегу моря (офис).
Основные задачи:
• Писать новый код на основании требований лидов
• Участие в разработке тех самых требований с лидами, оформление предложений
• Следование идеологии Agile, включая многие ритуалы (стендапы, спринты, планирование спринтов)
• Взаимодействие с коллегами по команде - у нас ансамбль, не соло проект
Требования:
• Java
• Spring
• Apache Calcite
• Понимание multithreading, механизмов синхронизации, очередей
• Понимание TCP/IP, сетевого кода, намного больше, чем просто чем UDP от TCP отличается (и почему)
Хорошо бы, но не обязательно:
• Опыт создания распределенных систем
• Опыт работы с Kubernetes
• Что такое CRDT знаете? ;-)
• Опыт с Kafka и похожим
Мы предлагаем:
• Очень интересную работу - сколько в мире систем распределенных RDBMS? Вам предоставляется шанс работать над одной из самых уникальных!
• Оплачиваемые отпуска
• Официальное трудоустройство и оформление ВНЖ в Черногории
• Оплачиваем переезд (лично вам), помогаем с поиском жилья (поиск, варианты, посмотреть, подтвердить), помогаем перевезти семью.
Комфортный офис в комфортном климате, море в 10-и минутах пешком.
Для интервью необходимо будет выполнить тестовое задание
Ваше CV прошу направлять на [email protected] или в @daikirey
Добрый день.
Вакансия: Java разработчик (серверный)
Компания: Alar Studios
Формат работы: офис
Занятость: full time
Опыт: от 4 лет
З.п вилка: 2300 - 3000 eur (на руки)
Заниматься нужно будет построением сервиса аналитики очень больших объемов данных (big data analytics) на базе пропраетарной базы данных, использующей в том числе мощности GPU для той самой магии, которая понимает почти весь SQL, включая joins. В точки зрения технологической сложности - это высший пилотаж и поле для применения и раскрытия таланта! Предлагаем возможность развиваться в комфортных условиях мягкого климата Черногории на берегу моря (офис).
Основные задачи:
• Писать новый код на основании требований лидов
• Участие в разработке тех самых требований с лидами, оформление предложений
• Следование идеологии Agile, включая многие ритуалы (стендапы, спринты, планирование спринтов)
• Взаимодействие с коллегами по команде - у нас ансамбль, не соло проект
Требования:
• Java
• Spring
• Apache Calcite
• Понимание multithreading, механизмов синхронизации, очередей
• Понимание TCP/IP, сетевого кода, намного больше, чем просто чем UDP от TCP отличается (и почему)
Хорошо бы, но не обязательно:
• Опыт создания распределенных систем
• Опыт работы с Kubernetes
• Что такое CRDT знаете? ;-)
• Опыт с Kafka и похожим
Мы предлагаем:
• Очень интересную работу - сколько в мире систем распределенных RDBMS? Вам предоставляется шанс работать над одной из самых уникальных!
• Оплачиваемые отпуска
• Официальное трудоустройство и оформление ВНЖ в Черногории
• Оплачиваем переезд (лично вам), помогаем с поиском жилья (поиск, варианты, посмотреть, подтвердить), помогаем перевезти семью.
Комфортный офис в комфортном климате, море в 10-и минутах пешком.
Для интервью необходимо будет выполнить тестовое задание
Ваше CV прошу направлять на [email protected] или в @daikirey
SmartDev - первая технологическая конференция Сбера для разработчиков
⏰ 20 мая | Онлайн
Первая техно-конференция от Сбера для разработчиков. Шесть параллельных стримов, топовые международные спикеры. Dev to dev.
На стриме от SmartMarket вы узнаете, как каждый из вас может создавать навыки для виртуальных ассистентов Салют, как подключать к ним монетизацию и выходить со своими товарами, услугами и идеями на многомиллионную аудиторию Сбера.
Обсудим темы:
- новые типы приложений для разработки навыков виртуальных ассистентов семейства Салют Native Apps и Canvas Apps с возможностью интеграции в СберБанк Онлайн, а также сервисы Platform V для back-end разработки;
- презентация SmartServices для разработчиков навыков;
- SmartNLP — погружение в NLP/NLU технологии будущего
и др.
Участие бесплатное, по предварительной регистрации на сайте конференции.
До встречи в прямом эфире! ✊
⏰ 20 мая | Онлайн
Первая техно-конференция от Сбера для разработчиков. Шесть параллельных стримов, топовые международные спикеры. Dev to dev.
На стриме от SmartMarket вы узнаете, как каждый из вас может создавать навыки для виртуальных ассистентов Салют, как подключать к ним монетизацию и выходить со своими товарами, услугами и идеями на многомиллионную аудиторию Сбера.
Обсудим темы:
- новые типы приложений для разработки навыков виртуальных ассистентов семейства Салют Native Apps и Canvas Apps с возможностью интеграции в СберБанк Онлайн, а также сервисы Platform V для back-end разработки;
- презентация SmartServices для разработчиков навыков;
- SmartNLP — погружение в NLP/NLU технологии будущего
и др.
Участие бесплатное, по предварительной регистрации на сайте конференции.
До встречи в прямом эфире! ✊
Как Spring Framework реализует паттерн Dependency Injection?
Инверсия контроля (inversion of control, IoC) – принцип проектирования, по которому контроль над потоком управления передается фреймворку. Управляющий и прикладной код разделяются. При разработке модуля этот подход избавляет от необходимости знать о других модулях программы и деталях их взаимодействия. Такой код становится более переипользуемым и модульным, уменьшает связность.
Внедрение зависимостей (Dependency Injection, DI) – одна из реализаций IoC. При взаимодействии с другими модулями, программа оперирует высокоуровневыми абстракциями, тогда как конкретная её реализация поставляется фреймворком.
Стандартная реализация DI – фреймворк инстанциирует все сервисы, и складывает их в IoC-контейнер. При этом специальная сущность, Service Locator, занимается поиском соответствия реализаций абстракциям и их внедрением.
Spring – большой набор различных библиотек. DI реализуется одной из основных библиотек – Spring IoC.
Сущности бизнес-логики в Spring, как и в JavaEE называются beans. Бины объявляются различными способами, корни большинства из них лежат в понятии
Лучше разобраться в понятиях экосистемы Spring поможет известный доклад Евгения Борисова «Spring-потрошитель»:часть 1,часть 2.
Инверсия контроля (inversion of control, IoC) – принцип проектирования, по которому контроль над потоком управления передается фреймворку. Управляющий и прикладной код разделяются. При разработке модуля этот подход избавляет от необходимости знать о других модулях программы и деталях их взаимодействия. Такой код становится более переипользуемым и модульным, уменьшает связность.
Внедрение зависимостей (Dependency Injection, DI) – одна из реализаций IoC. При взаимодействии с другими модулями, программа оперирует высокоуровневыми абстракциями, тогда как конкретная её реализация поставляется фреймворком.
Стандартная реализация DI – фреймворк инстанциирует все сервисы, и складывает их в IoC-контейнер. При этом специальная сущность, Service Locator, занимается поиском соответствия реализаций абстракциям и их внедрением.
Spring – большой набор различных библиотек. DI реализуется одной из основных библиотек – Spring IoC.
Сущности бизнес-логики в Spring, как и в JavaEE называются beans. Бины объявляются различными способами, корни большинства из них лежат в понятии
Configuration
. В качестве контейнера бинов выступает ApplicationContext
. Чтобы передать инициализацию зависимости контексту, она помечается аннотацией @Autowired
.Лучше разобраться в понятиях экосистемы Spring поможет известный доклад Евгения Борисова «Spring-потрошитель»:часть 1,часть 2.
Wikipedia
Инверсия управления
Инверсия управления (англ. Inversion of Control, IoC) — общий принцип программирования, особенно важный в рамках объектно-ориентированной парадигмы, используемый для уменьшения зацепления (связанности) в компьютерных программах . Также архитектурное решение…
Окунись в мир белого хакинга уже сегодня! Пройди бесплатный онлайн-интенсив Skillbox по программированию, изучи востребованный язык программирования Java и создай свой первый проект под руководством опытного специалиста.
Все подробности по ссылке: 👉https://clc.am/_N5FnA
За 3 дня интенсива ты:
⚡️ Освоишь основные инструменты программирования на Java.
⚡️ Напишешь программу для мониторинга активности рабочего стола.
⚡️ Получишь полезные советы разработчика с 15-летним опытом — Даниила Пилипенко.
⚡️ Узнаешь, как устроена работа Java-программиста.
Подключайся к прямому эфиру с 10 по 12 мая в 19:00 по московскому времени 😉
Все подробности по ссылке: 👉https://clc.am/_N5FnA
За 3 дня интенсива ты:
⚡️ Освоишь основные инструменты программирования на Java.
⚡️ Напишешь программу для мониторинга активности рабочего стола.
⚡️ Получишь полезные советы разработчика с 15-летним опытом — Даниила Пилипенко.
⚡️ Узнаешь, как устроена работа Java-программиста.
Подключайся к прямому эфиру с 10 по 12 мая в 19:00 по московскому времени 😉