Forwarded from Kotlin
Design of Kotlin Coroutines
https://proandroiddev.com/design-of-kotlin-coroutines-879bd35e0f34
✍️ @kotlin_lib
https://proandroiddev.com/design-of-kotlin-coroutines-879bd35e0f34
✍️ @kotlin_lib
👍1
Сделайте HashMap из HashSet<Map.Entry<K, V>>
👉@BookJava
HashMap<K, V> map = new HashMap<>(set.size());
for (Map.Entry<K, V> entry : set) {
map.put(entry.getKey(), entry.getValue());
}
👉@BookJava
💩9👍2👎1
Learn SOLID design principles using Java
https://dev.to/fialhorenato/learn-solid-design-principles-using-java-m68
👉@BookJava
https://dev.to/fialhorenato/learn-solid-design-principles-using-java-m68
👉@BookJava
👍2
Forwarded from ITmozg
Media is too big
VIEW IN TELEGRAM
🎥 Java для начинающих | Уроки Java
#1 - Программирование на Java
#2 - Установка Java JDK и IntelliJ IDEA
#3 - Типы данных
#4 - Переменные
#5 - Арифметические операции
#6 - Условные операторы
#7 - циклы for, wile, do wile
#8 - Массивы в Java
#9 - Классы в Java
#10 - Тип данных String в Java
#11 - Наследование в Java
#12 - Java интерфейсы
#13 - Абстрактные классы java
#14 - Вложенные классы java
#15 - Пакеты в java
#16 - Перегрузка методов java
#17 - Основы ООП
#18 - Обработка исключений в java , try catch java / Java с нуля
Все видео доступны на youtube
#java
@itmozg
#1 - Программирование на Java
#2 - Установка Java JDK и IntelliJ IDEA
#3 - Типы данных
#4 - Переменные
#5 - Арифметические операции
#6 - Условные операторы
#7 - циклы for, wile, do wile
#8 - Массивы в Java
#9 - Классы в Java
#10 - Тип данных String в Java
#11 - Наследование в Java
#12 - Java интерфейсы
#13 - Абстрактные классы java
#14 - Вложенные классы java
#15 - Пакеты в java
#16 - Перегрузка методов java
#17 - Основы ООП
#18 - Обработка исключений в java , try catch java / Java с нуля
Все видео доступны на youtube
#java
@itmozg
👍5🍾1
Как устроен HashMap?
HashMap состоит из «корзин» (bucket). С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары «ключ-значение», вычисляет хэш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент. Если корзина пустая, то в нее сохраняется ссылка на вновь добавляемый элемент, если же там уже есть элемент, то происходит последовательный переход по ссылкам между элементами в цепочке, в поисках последнего элемента, от которого и ставится ссылка на вновь добавленный элемент. Если в списке был найден элемент с таким же ключом, то он заменяется.
👉@BookJava
HashMap состоит из «корзин» (bucket). С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары «ключ-значение», вычисляет хэш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент. Если корзина пустая, то в нее сохраняется ссылка на вновь добавляемый элемент, если же там уже есть элемент, то происходит последовательный переход по ссылкам между элементами в цепочке, в поисках последнего элемента, от которого и ставится ссылка на вновь добавленный элемент. Если в списке был найден элемент с таким же ключом, то он заменяется.
👉@BookJava
👍8👎3
Forwarded from Java Geek
Bit Set
Что, если нам нужно выполнить какие-то операции с массивами битов? Вы будете использовать для этого boolean[]?
Для этого есть более эффективный с точки зрения использования памяти метод.
Это класс BitSet, позволяющий нам хранить массивы битов и манипулировать ими. По сравнению с boolean[] он требует в 8 раз меньше памяти. Мы можем выполнять логические операции над массивами, такими как, например and, or, xor.
Допустим, у нас есть два входных массива битов. Мы хотим провести на них операцию xor.
Уточню, операция xor, возвращает только те элементы, которые имеются только в одном массиве, но не в другом. Для этого нам нужно создать два экземпляра BitSet и вставить туда элементы, как показано ниже. Наконец, вы должны вызвать метод xor в одном из BitSet объектов, указав в качестве аргумента второй BitSet объект.
@java_geek
Что, если нам нужно выполнить какие-то операции с массивами битов? Вы будете использовать для этого boolean[]?
Для этого есть более эффективный с точки зрения использования памяти метод.
Это класс BitSet, позволяющий нам хранить массивы битов и манипулировать ими. По сравнению с boolean[] он требует в 8 раз меньше памяти. Мы можем выполнять логические операции над массивами, такими как, например and, or, xor.
Допустим, у нас есть два входных массива битов. Мы хотим провести на них операцию xor.
Уточню, операция xor, возвращает только те элементы, которые имеются только в одном массиве, но не в другом. Для этого нам нужно создать два экземпляра BitSet и вставить туда элементы, как показано ниже. Наконец, вы должны вызвать метод xor в одном из BitSet объектов, указав в качестве аргумента второй BitSet объект.
@java_geek
👍8
Forwarded from Kotlin
This media is not supported in your browser
VIEW IN TELEGRAM
Курс по корутинам
#1 Что такое корутина. Важные особенности
#2 CoroutineContext. Настраиваем корутины
#3 Жизненный цикл корутины. CoroutineScope. Structured Concurrency
#4 Обработка ошибок в корутинах
#5 Каналы. Зачем если есть Flow?
#6 Синхронизация между корутинами
#7 Kotlin Coroutines Flow. StateFlow. SharedFlow
#8 Корутины в Android. Специальные API
https://www.youtube.com/playlist?list=PL0SwNXKJbuNmsKQW9mtTSxNn00oJlYOLA
✍️ @kotlin_lib
#1 Что такое корутина. Важные особенности
#2 CoroutineContext. Настраиваем корутины
#3 Жизненный цикл корутины. CoroutineScope. Structured Concurrency
#4 Обработка ошибок в корутинах
#5 Каналы. Зачем если есть Flow?
#6 Синхронизация между корутинами
#7 Kotlin Coroutines Flow. StateFlow. SharedFlow
#8 Корутины в Android. Специальные API
https://www.youtube.com/playlist?list=PL0SwNXKJbuNmsKQW9mtTSxNn00oJlYOLA
✍️ @kotlin_lib
👍5
Media is too big
VIEW IN TELEGRAM
Maven - краткий курс
В этом видео вы узнаете, как использовать Maven как профессионал: установка, использование обертки mvn, использование Maven вместе с IDE и, конечно же, основы Maven.
00:00 Intro
00:30 Cloning The Sample Project
01:09 Installing Maven - Package Manager
01:34 Installing Maven - Manual
02:57 Maven Wrapper
04:31 mvn validate
05:21 IntelliJ - Importing Maven Projects
06:12 Pom.xml - Basics
07:07 Pom.xml - Properties
07:38 Pom.xml - Build Section
08:06 Pom.xml - Dependencies
09:40 Pom.xml - Dependency Scopes
11:41 search.maven.org - Dependency Search
12:27 IntelliJ - Maven Reload Trick
13:11 IntelliJ - Dependency Search
15:04 Maven Directory Structure
15:25 mvn clean
15:37 mvn compile
16:00 mvn test
17:45 mvn package
18:36 mvn install
19:18 Local Maven Repository
20:25 Central Maven Repository
22:28 Multi Module Projects
источник
👉@BookJava
В этом видео вы узнаете, как использовать Maven как профессионал: установка, использование обертки mvn, использование Maven вместе с IDE и, конечно же, основы Maven.
00:00 Intro
00:30 Cloning The Sample Project
01:09 Installing Maven - Package Manager
01:34 Installing Maven - Manual
02:57 Maven Wrapper
04:31 mvn validate
05:21 IntelliJ - Importing Maven Projects
06:12 Pom.xml - Basics
07:07 Pom.xml - Properties
07:38 Pom.xml - Build Section
08:06 Pom.xml - Dependencies
09:40 Pom.xml - Dependency Scopes
11:41 search.maven.org - Dependency Search
12:27 IntelliJ - Maven Reload Trick
13:11 IntelliJ - Dependency Search
15:04 Maven Directory Structure
15:25 mvn clean
15:37 mvn compile
16:00 mvn test
17:45 mvn package
18:36 mvn install
19:18 Local Maven Repository
20:25 Central Maven Repository
22:28 Multi Module Projects
источник
👉@BookJava
👍6🔥3👎1
Forwarded from Книги по Java | Books Java 📚
Java from EPAM. Учебно-методическое пособие
Блинов, Романчик (2020)
Пособие предназначено для программистов, начинающих и продолжающих изучение технологий Java SE. В книге рассматриваются основы языка Java и концепции объектно-ориентированного и функционального программирования. Также изложены аспекты применения библиотек классов языка Java, включая файлы, коллекции, Stream API, сетевые и многопоточные приложения, а также взаимодействие с СУБД и ХМL. В конце каждой главы даются теоретические вопросы по изученной главе, тестовые вопросы по материалу главы и задания для выполнения. В приложениях приведены дополнительные материалы с кратким описанием технологий Log4J2 и TestNG.
Скачать
👉 @java_360
Блинов, Романчик (2020)
Пособие предназначено для программистов, начинающих и продолжающих изучение технологий Java SE. В книге рассматриваются основы языка Java и концепции объектно-ориентированного и функционального программирования. Также изложены аспекты применения библиотек классов языка Java, включая файлы, коллекции, Stream API, сетевые и многопоточные приложения, а также взаимодействие с СУБД и ХМL. В конце каждой главы даются теоретические вопросы по изученной главе, тестовые вопросы по материалу главы и задания для выполнения. В приложениях приведены дополнительные материалы с кратким описанием технологий Log4J2 и TestNG.
Скачать
👉 @java_360
👍14👎1🔥1🤔1
Создание пользовательских аннотаций в Java
В этой статье объясняется, как создавать мета- и пользовательские аннотации и украшать ими объекты.
👉@BookJava
В этой статье объясняется, как создавать мета- и пользовательские аннотации и украшать ими объекты.
👉@BookJava
👍2
Генерация PDF-документов на основе шаблонов в Java
https://dzone.com/articles/template-based-pdf-document-generation-in-java
👉@BookJava
https://dzone.com/articles/template-based-pdf-document-generation-in-java
👉@BookJava
👍4👎1
В каком случае может быть потерян элемент в HashMap?
Допустим, в качестве ключа используется не примитив, а объект с несколькими полями. После добавления элемента в HashMap у объекта, который выступает в качестве ключа, изменяют одно поле, которое участвует в вычислении хэш-кода. В результате при попытке найти данный элемент по исходному ключу, будет происходить обращение к правильной корзине, а вот
👉@BookJava
Допустим, в качестве ключа используется не примитив, а объект с несколькими полями. После добавления элемента в HashMap у объекта, который выступает в качестве ключа, изменяют одно поле, которое участвует в вычислении хэш-кода. В результате при попытке найти данный элемент по исходному ключу, будет происходить обращение к правильной корзине, а вот
equals
уже не найдет указанный ключ в списке элементов. Тем не менее, даже если equals
реализован таким образом, что изменение данного поля объекта не влияет на результат, то после увеличения размера корзин и пересчета хэш-кодов элементов, указанный элемент, с измененным значением поля, с большой долей вероятности попадет в совершенно другую корзину и тогда уже потеряется совсем.👉@BookJava
👍6🤡3
Настраиваем память JVM-приложения в Kubernetes
Друзья, всем привет! Как известно, в Kubernetes у каждого pod’а есть ограничение на использование памяти (limits.memory), и, как показывает опыт, далеко не всегда очевидно, как JVM-приложение интерпретирует эту настройку, что порой может приводить к OOMKill.
Я хотел бы поделиться одним из способов настройки памяти для Java-приложений в Kubernetes. Сразу скажу, что итоговые настройки, к которым мы придём, будут приведены лишь в качестве примера и должны настраиваться индивидуально под каждое приложение. Рассматривать будем настройки и метрики обычного микросервиса на Spring boot, интегрированного со Spring Boot Admin (далее просто SBA).
👉@BookJava
Друзья, всем привет! Как известно, в Kubernetes у каждого pod’а есть ограничение на использование памяти (limits.memory), и, как показывает опыт, далеко не всегда очевидно, как JVM-приложение интерпретирует эту настройку, что порой может приводить к OOMKill.
Я хотел бы поделиться одним из способов настройки памяти для Java-приложений в Kubernetes. Сразу скажу, что итоговые настройки, к которым мы придём, будут приведены лишь в качестве примера и должны настраиваться индивидуально под каждое приложение. Рассматривать будем настройки и метрики обычного микросервиса на Spring boot, интегрированного со Spring Boot Admin (далее просто SBA).
👉@BookJava
👍3
Media is too big
VIEW IN TELEGRAM
🎥 JEP Café
Java Asynchronous Programming Full Tutorial with Loom and Structured Concurrency #13
Launching 10 millions virtual threads with Loom #12
Java 19 Virtual Threads #11
Leverage Java 17 New Features to Create Your Wordle Checker #10
Refactoring Java 8 code with Java 17 new features #9
Records Patterns, Performance and Serialization #8
String Concatenation #7
Factory Methods for Collections #6
Text Blocks #5
The Packaging Tool aka
Switch Expressions #3
Sealed Classes #2
What is a JEP? #1
Все видео доступны на youtube
👉@BookJava
Java Asynchronous Programming Full Tutorial with Loom and Structured Concurrency #13
Launching 10 millions virtual threads with Loom #12
Java 19 Virtual Threads #11
Leverage Java 17 New Features to Create Your Wordle Checker #10
Refactoring Java 8 code with Java 17 new features #9
Records Patterns, Performance and Serialization #8
String Concatenation #7
Factory Methods for Collections #6
Text Blocks #5
The Packaging Tool aka
jpackage
#4Switch Expressions #3
Sealed Classes #2
What is a JEP? #1
Все видео доступны на youtube
👉@BookJava
👍3
Forwarded from Java Geek
Какая проблема возникнет с этим кодом?
Ответ: Данный код не с компилируется.
Этот вопрос на знание иерархии исключений, в данном случае FileNotFoundException унаследован от IOException, первый catch будет перехватывать все исключения и в следующий блок catch управление не будет передано.
@java_geek
Ответ: Данный код не с компилируется.
Этот вопрос на знание иерархии исключений, в данном случае FileNotFoundException унаследован от IOException, первый catch будет перехватывать все исключения и в следующий блок catch управление не будет передано.
@java_geek
👍1
Можно ли подружить Stream API и JPA?
В этой статье я хотел бы познакомить сообщество с библиотекой JPAstreamer. Идея этой библиотеки очень проста, но в то же время гениальна - получать нужные нам сущности из бд так, как если бы мы просто обрабатывали поток сущностей в стриме.
👉@BookJava
В этой статье я хотел бы познакомить сообщество с библиотекой JPAstreamer. Идея этой библиотеки очень проста, но в то же время гениальна - получать нужные нам сущности из бд так, как если бы мы просто обрабатывали поток сущностей в стриме.
👉@BookJava
👍5
Какие классы вовлечены в соединение с базой данных?
DriverManager управляет всеми JDBC-драйверами в приложении. Представляет набор статических методов. Лениво загружает системным класслоадером доступные предсконфигурированные драйверы:
• По списку полных имен классов из проперти
• Через Service Provider Interface (SPI).
Менеджер занимается созданием экземпляра Connection – ключевого класса при работе с базой данных. Альтернативный менеджеру (и даже рекомендуемый) способ соединения с источником данных – ConnectionBuilder. Билдер получают из
Driver – главный класс реализации JDBC-драйвера. Когда загружается класслоадером, сам регистрирует себя в
Можно явно создавать
DriverAction – дополнительный интерфейс, который должен реализовывать
👉@BookJava
DriverManager управляет всеми JDBC-драйверами в приложении. Представляет набор статических методов. Лениво загружает системным класслоадером доступные предсконфигурированные драйверы:
• По списку полных имен классов из проперти
jdbc.drivers
;• Через Service Provider Interface (SPI).
Менеджер занимается созданием экземпляра Connection – ключевого класса при работе с базой данных. Альтернативный менеджеру (и даже рекомендуемый) способ соединения с источником данных – ConnectionBuilder. Билдер получают из
javax.sql.DataSource
– формально это часть Java EE, так что здесь не будем подробно на нем останавливаться.Driver – главный класс реализации JDBC-драйвера. Когда загружается класслоадером, сам регистрирует себя в
DriverManager
. Так что кроме предсконфигурированных драйверов, дополнительные можно загрузить просто вызвав Class.forName
.Можно явно создавать
Connection
через драйвер, минуя менеджера и билдер. Драйвер предоставляет информацию о возможных/требуемых для своей работы свойствах в виде массива DriverPropertyInfo.DriverAction – дополнительный интерфейс, который должен реализовывать
Driver
, если хочет получать уведомления о разрегистрации DriverManager
-ом.👉@BookJava
👍4
Программирование JavaFX: разработка элементов интерфейса
Иногда даже программистам на Java необходимо создавать интерфейсы, и для этого им приходится изучать дополнительные инструменты. В этом случае им на помощь приходит инструментарий создания GUI, который избавляет от необходимости подключения дополнительных технологий — JavaFX. Далее
👉@BookJava
Иногда даже программистам на Java необходимо создавать интерфейсы, и для этого им приходится изучать дополнительные инструменты. В этом случае им на помощь приходит инструментарий создания GUI, который избавляет от необходимости подключения дополнительных технологий — JavaFX. Далее
👉@BookJava
👍3👎1
Какие данные есть в исключении?
Разработчик может добавлять в исключение, как и в любой другой класс, произвольные поля и методы. Но у всех исключений есть общая часть, унаследованная от
Cause – другое исключение, которым было вызвано это. Опционально. Можно задать через сеттер или аргумент конструктора, но задается не больше одного раза.
Message – сообщение ошибки. Устанавливается в конструкторе. Кроме обычного геттера есть
Stack Trace – стек вызовов методов потока до того места, где сообщение было сконструировано (не выброшено!). JVM позволено терять часть, или даже все фреймы стека. Есть сеттер для фреймворков удаленного вызова (RPC). Сеттер можно отключить параметром конструктора
Suppressed – список исключений, которые были выброшены и подавлены, пока это исключение шло к обработчику. Сюда попадают подавленные исключения финализации ресурсов при использовании try-with-resource. Сеттер доступен и для пользовательского кода. Подавление можно отключить параметром конструктора
👉@BookJava
Разработчик может добавлять в исключение, как и в любой другой класс, произвольные поля и методы. Но у всех исключений есть общая часть, унаследованная от
Throwable
. В базовых Exception
, RuntimeException
и Error
нет ничего кроме неё.Cause – другое исключение, которым было вызвано это. Опционально. Можно задать через сеттер или аргумент конструктора, но задается не больше одного раза.
Message – сообщение ошибки. Устанавливается в конструкторе. Кроме обычного геттера есть
getLocalizedMessage
, который в наследниках может возвращать локализованный вариант сообщения.Stack Trace – стек вызовов методов потока до того места, где сообщение было сконструировано (не выброшено!). JVM позволено терять часть, или даже все фреймы стека. Есть сеттер для фреймворков удаленного вызова (RPC). Сеттер можно отключить параметром конструктора
writableStackTrace
.Suppressed – список исключений, которые были выброшены и подавлены, пока это исключение шло к обработчику. Сюда попадают подавленные исключения финализации ресурсов при использовании try-with-resource. Сеттер доступен и для пользовательского кода. Подавление можно отключить параметром конструктора
enableSuppression
.👉@BookJava
👍6👎1
Программирование JavaFX: использование SceneBuilder
В прошлой статье мы начали разговор о фреймворке JavaFX, который позволяет создавать интерфейсы, оставаясь в рамках знакомой вам среды разработки (не нужно изучать веб-технологии). В этот раз мы поговорим о средстве упрощения и ускорения разработки интерфейсов — SceneBuilder.
Несмотря на то что интерфейсы возможно создавать только в коде, и в прошлый раз мы ознакомились с целым семейством классов, которые позволяют это делать, вряд ли кто-то будет спорить с тем фактом, что графическое создание по принципу Drag&Drop является более удобным и быстрым. К тому же (со временем) я всё чаще прихожу к пониманию того, что глубокое знание того, что происходит под капотом тех или иных технологий, должно дополняться ещё и средствами ускорения разработки. Так как время — это наше всё. Итак.
👉@BookJava
В прошлой статье мы начали разговор о фреймворке JavaFX, который позволяет создавать интерфейсы, оставаясь в рамках знакомой вам среды разработки (не нужно изучать веб-технологии). В этот раз мы поговорим о средстве упрощения и ускорения разработки интерфейсов — SceneBuilder.
Несмотря на то что интерфейсы возможно создавать только в коде, и в прошлый раз мы ознакомились с целым семейством классов, которые позволяют это делать, вряд ли кто-то будет спорить с тем фактом, что графическое создание по принципу Drag&Drop является более удобным и быстрым. К тому же (со временем) я всё чаще прихожу к пониманию того, что глубокое знание того, что происходит под капотом тех или иных технологий, должно дополняться ещё и средствами ускорения разработки. Так как время — это наше всё. Итак.
👉@BookJava
👍5