Telegram Web Link
Kotlin для начинающих

. Установка и настройка
1. Переменные. Базовые типы данных. Ввод/вывод
2. Арифметические операции
3. Логический тип данных
4. Оператор ветвления
5. Оператор if как выражение
6. Вложенные операторы if
7. Оператор множественного выбора
8. Операторы циклов. Цикл for
9. Цикл while

#video #kotlin

https://www.youtube.com/watch?v=4nupqVn6w38&list=PLjurg971KpKYw3H24of5vBnTsaZrYMDmL

@javatg
📢 Вышел релиз Spring Batch Notion 0.1.0-M2!

Главной особенностью этого релиза является поддержка фильтрации через fluent API, которая имитирует опцию фильтрации базы данных в пользовательском интерфейсе Notion.

github.com/scordio/spring-batch-notion/releases/tag/v0.1.0-M2

@javatg
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Забавная шпаргалка по методам списков в Java.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Легкий способ получать свежие обновлении и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:

Машинное обучение: www.tg-me.com/ai_machinelearning_big_data
Go: www.tg-me.com/Golang_google
Базы данных: www.tg-me.com/sqlhub
C++/ www.tg-me.com/cpluspluc
Data Science: www.tg-me.com/data_analysis_ml
Python: www.tg-me.com/pythonl
Хакинг: www.tg-me.com/linuxkalii
Devops: www.tg-me.com/devOPSitsec
C#: www.tg-me.com/csharp_ci
Java: www.tg-me.com/java_library
Linux: www.tg-me.com/+A8jY79rcyKJlYWY6
Мобильная разработка: www.tg-me.com/mobdevelop
Docker: www.tg-me.com/+0WdB4uvOwCY0Mjdi
Rust: www.tg-me.com/rust_code
Javascript: www.tg-me.com/javascriptv
React: www.tg-me.com/react_tg
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Big Data: www.tg-me.com/bigdatai
Тестирование:https://www.tg-me.com/+F9jPLmMFqq1kNTMy
Аналитика данных: https://www.tg-me.com/+mAXY9ppJwitkMDBi

😆ИТ-Мемы: www.tg-me.com/memes_prog

🇬🇧Английский: www.tg-me.com/english_forprogrammers

📕Ит-книги бесплатно: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy

ИИ: www.tg-me.com/vistehno

Книги по искусственному интеллекту

💼 Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
Папка Java разработчика: https://www.tg-me.com/addlist/ZM3J6oFNAnRlNWU6
Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
🖥 Интересное дополнение к сайту http://start.spring.io для springboot + любителям искусственного интеллекта:

Timefold Solver - ИИ-решатель с открытым исходным кодом для оптимизации операций и составления расписаний

👉 https://github.com/TimefoldAI/timefold-solver

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира Java за неделю

Почитать:
Пишем минимальный ActivityPub-сервер с нуля
Цикл постов про Keycloak. Часть вторая: Контроль доступа на уровне приложения
Ускоряем запуск Spring Boot-приложений в контейнере
Midjourney, DALL-E 3 и GPT-4 открыли мир безграничных возможностей.
Эта неделя в мире Java (3 ноября)
Трейсы в Spring Boot 3 с использованием Zipkin и Kafka в качестве транспорта
Создание сервиса авторизации через систему ЕСИА
Жук, нумерология, хеш или ничо? Оптимизация работы с путями
На что способен КриптоПро JCP? Туториал по валидации отсоединенной электронной подписи
Байт-код — это просто! Как сделать DI по-настоящему быстрым
Жилье в 500м от сетевых продуктовых магазинов в Москве. Или как публикация на Лента.ру избегает Хабр и дезинформирует
11 Common Questions about Java and Spring Fundamentals (Part 2)
My Intellij IDEA plugin for Maven support - GMaven
Migrating an Springboot Java API: Part 2 - Azure Build
Implementation of LinkedList
Class loaders in JVM: An Overview
Datafaker 2.0
Step Builder Pattern to Enforce Client code to Provide data.
Migrating an Springboot Java API: Part 1 - Docker
Maximizando Eficiência e Tolerância a Falhas: Estratégias de Paralelismo e Divisão de Responsabilidades em Sistemas Complexos
Dependency Inversion Principle (DIP)

Посмотреть:
🌐 Better Java Streams with Gatherers - Inside Java Newscast #57 ( 08:56)
🌐 What is a race condition? - Cracking the Java Coding Interview ( 01:00)
🌐 How can you check is a class is an extension of another? - Cracking the Java Coding Interview ( 00:50)
🌐 Как в IT заработать больше денег? ( 00:23)

Хорошего дня!

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Java Backend-разработка останется одной из самых востребованных профессий в 2023 году.

Вот простая и структурированная дорожная карта Java разработчика с роликами youtube.

1. Основы Java
- Core Java
2. JDBC основы
JDBC
3. SQL
- SQL
4. JSP + Servlet
5.1. Core Spring Framework
5.2. Spring REST & Spring DATA
5.3. Spring Security
6. Hibernate Framework
7. Spring Boot
8. Basic DevOps
8.1. Learn to Use AWS & Deploy Java Apps
8.2. Learn Basic Docker:
8.3. Learn Basic Kubernetes:

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Глубокое погружение в Java: рефлексия и загрузчик классов.

Парадигмы программирования можно сравнить с территориями. На каждой территории, от императивного до декларативного программирования, установлены строгие законы поведения, диктующие, что можно делать, а что нельзя.

Но чаще всего разработчики оказываются на территории, где приходится осуществлять то, что не одобряется или запрещается. В таких случаях начинается поиск лазеек и способов применения системы для решения насущных задач. Иногда обнаруживаются законы, которые разрешают действия, противоречащие основным принципам системы.

В этой статье я покажу, как две уникальные особенности Java позволяют создать полезные антишаблоны на территории Java.

Территория ООП
Объектно-ориентированное программирование (ООП) является одной из наиболее распространенных моделей программирования.

Рефлексия в Java
Пожалуй, самой популярной особенностью Java является то, что это статически типизированный язык.

📌 Читать статью

@javatg
🔥 Дайджест полезных материалов из мира Java за неделю

Почитать:
Введение в Apache Flink: осваиваем фреймворк на реальных примерах
Решение задач Yandex Cup 2023 на Java, часть 2
Решение задач Yandex Cup 2023 на Java
Helidon 4 вышел, а никто и не заметил
Гайд по авторизации в Micronaut
Java Digest #6
Пишем минимальный ActivityPub-сервер с нуля
Цикл постов про Keycloak. Часть вторая: Контроль доступа на уровне приложения
Ускоряем запуск Spring Boot-приложений в контейнере
Эта неделя в мире Java (3 ноября)
Migrating an Springboot Java API: Part 3 - AWS ElasticBeanstalk
Why Kotlin is a Prime Choice for Your Project
Adding testing for my java project
SOLIDify Your Foundation: Mastering Software Design with a Deep Dive into SOLID Principles
Cost Savings Strategies for Backend Developers on AWS with Java Code Optimization
[Digest] Java, Kotlin, Spring, Cloud, and More - Episode 15
What is Interface In java and what are the example of java interface in java
MongoDB Aggregation Pipeline Stages: Using addFields stage with Java
Announcing AppMap for GitHub - Runtime Code Reviews for Every Pull Request
A Simple Way to Check if a Word is Palindrome in Java

Посмотреть:
🌐 How can you check is a class is an extension of another? - Cracking the Java Coding Interview ( 00:50)
🌐 Better Java Streams with Gatherers - Inside Java Newscast #57 ( 08:56)
🌐 What is a race condition? - Cracking the Java Coding Interview ( 01:00)
🌐 What is the type ? super T? - Cracking the Java Coding Interview ( 00:58)
🌐 Record Patterns in Java 21 ( 01:23)
🌐 Optimizing your equals() methods with Pattern Matching - JEP Cafe #21 ( 32:56)
🌐 What does static mean? - Cracking the Java Coding Interview ( 01:00)
🌐 Как в IT заработать больше денег? ( 00:23)
🌐 У кого в IT нет проблем с деньгами? — Фил Ранжин ( 00:14)
🌐 Как стать Android-разработчиком и куда расти потом — Евгений Кателла — Как мы попали в IT ( 01:02:25)
🌐 Путь в IT android-разработчика — Евгений Кателла ( 00:31)

Хорошего дня!

@javatg
🖥 Slim Docker Images for Java

В этой статье вы узнаете, как с помощью Alpine Linux и инструмента jlink создавать Docker-образы для своих Java-приложений.

Мы будем использовать последние базовые образы Java 21, предоставленные Eclipse Temurin и BellSoft Liberica.

Мы сравним их с Alpaquita Linux, также поставляемой компанией BellSoft. Это сравнение также будет включать оценку защищенности по количеству уязвимостей.

В качестве примера мы возьмем простое приложение Spring Boot, открывающее несколько эндпоинтов REST.

https://piotrminkowski.com/2023/11/07/slim-docker-images-for-java/

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Структуры данных и алгоритмы

1. Поиск. Теоретическое описание.
2. Линейный поиск. Реализация на Python и Java.
3. Интерполяционный поиск. Реализация на Python и Java.
4. Позиционная система счисления.
5. Вычисление остатка от деления. Реализация в Python и Java.
6. Арифметические операции. Реализация в языках программирования Java и Python.
7. Бинарный поиск. Реализация на Python и Java.
8. Наибольший общий делитель. Реализация на Python и Java.
9. Сортировка. Теоретическое описание.
10. Сортировка выбором. Реализация на Python и Java.

#video #algorithm

https://www.youtube.com/watch?v=aWy0-bGZk3U&list=PLtNPgSbW9TX7acrQa2LeBAMGxO5WRAVsz

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Глубокое погружение в Java: рефлексия и загрузчик классов. Часть 2.

Загрузчики классов
В объектно-ориентированном программировании единицей программного обеспечения является класс. Он представляет собой логическую сущность или блок. То, как классы загружаются в JVM, обычно не представляет особого интереса.

Классы просто всегда оказываются под рукой, когда они нужны, и это весьма удобно.

Однако изучение внутренних механизмов загрузки классов в Java полезно, поскольку внутренняя система загрузки классов в JVM фактически доступна для программистов, которые могут вмешиваться в процесс загрузки классов и изменять поведение JVM в случае необходимости.

Это имеет целый ряд преимуществ и практических применений. Одним из них является контроль над тем, какие именно файлы классов загружаются в JVM, что позволяет предотвратить проблемы и конфликты, связанные с загрузкой зависимостей.

Другим преимуществом загрузчиков классов является то, что они позволяют вносить новое поведение в выполняющуюся программу путем динамической загрузки новых классов. Это является основой для создания архитектур плагинов и расширяемых программ на Java. Прежде чем погрузиться во внутреннее устройство системы загрузки классов в Java, необходимо понять модель выполнения Java.

JVM
В Java используется гибридный подход к выполнению программного кода, сочетающий компиляцию и интерпретацию. Сначала класс Java определяется программистом в формате файла .java. Затем компилятор Java преобразует его в байт-код, генерируя файл .class.

Байт-код — это промежуточный язык, который понимает JVM.

Java-программы выполняются с помощью виртуальной машины Java (JVM). Идея виртуальной машины Java заключается в том, что она действует как абстрактный виртуальный компьютер, который создает изолированную среду для выполнения Java-программ. Работающая JVM практически не знает о своем хост-компьютере и определяет строгий протокол загрузки программных файлов из файловой системы компьютера для выполнения.

JVM включает в себя три отдельные области:

▪️подсистему загрузчика классов (ClassLoader Subsystem);
▪️область памяти/данных времени выполнения (Runtime Memory/Data Area);
▪️механизм выполнения (Execution Engine).

Подсистема загрузчика классов— это единственный компонент JVM, который работает с файловой системой хост-устройства. Он отвечает за поиск файлов классов и их загрузку в JVM. При запросе на загрузку класса система загрузчика классов считывает байт-код его файла класса в JVM, затем конструирует эквивалентный объект Class и сохраняет байт-код его метода в куче (напомним, что классы существуют внутри JVM как объекты Class). Эти шаги показаны на следующей схеме:

📌Смотреть.
📌Часть 1.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Как с легкостью создать установщик пакетов Android

Иногда требуется установить приложение на устройство не как пользователю, а как разработчику другого приложения. Возможно, вашему приложению, будь то магазин приложений или файловый менеджер, требуется самообновление, а вы его не опубликовали на Play Store. В любом случае вы обратитесь к стандартизированным интерфейсам (API) Android SDK, обеспечивающим установку APK (Android Package Kit). Но, как известно, Android-интерфейсы часто оказываются довольно трудоемкими в использовании.

Возьмем, к примеру, установку APK. Если вы вынуждены поддерживать версии Android ниже 5.0, то для разных версий Android придется использовать разные API: PackageInstaller для версий от 5.0 или какой-нибудь Intent с действием установки.

Способ Intent.ACTION_INSTALL_PACKAGE

Intent довольно прост в использовании. Достаточно создать его, запустить Activity для получения результата и обработать возвращенный код. Вот как обрабатывается установочный intent с помощью API AndroidX Activity Result:

// регистрация лаунчера в Activity или Fragment
val installLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
val isInstallSuccessful = result.resultCode == RESULT_OK
// затем проводятся действия в зависимости от полученного результата
}

// запуск intent, например, при нажатии на кнопку
val intent = Intent().apply {
action = Intent.ACTION_INSTALL_PACKAGE
setDataAndType(apkUri, "application/vnd.android.package-archive")
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
putExtra(Intent.EXTRA_RETURN_RESULT, true)
}
installLauncher.launch(intent)


Не забудьте объявить разрешение на установку в AndroidManifest:

📌 Читать

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
📢 Вышел Kotlin 2.0.0-Beta1!

ℹ️ Этот выпуск посвящен стабилизации работы нового компилятора K2, который вскоре будет включен по умолчанию в Kotlin 2.0.

Попробуйте K2 и сообщайте о любых возможных проблемах: https://kotlinlang.org/docs/whatsnew-eap.html

@javatg
🔥 Дайджест полезных материалов из мира Java за неделю

Почитать:
Spring и Hibernate простыми словами: обзор для новичков
Java-инспекции в IDEA 2023.2
IntelliJ IDEA 2023.2. Долгожданный LSP, встроенный AI-чат, апгрейд до Windows 10 и -Xmx2G
Добавление micrometer-метрик для взаимодействий по SOAP
Разработка высоконагруженного игрового WebSocket сервера на Java, Netty с поддержкой BattleRoyale/Matchmaking
Сквозь дебри разработки, или как я пытался написать приложение
Генерация контрактов OpenApi или прикладной API first: гайд по генерации в Spring Boot приложении
Эта неделя в мире Java (13 ноября)
Присматриваемся к Kafka tiered storage
How I practice TDD
What is abstract class in java and how to create abstract class in java
Try to find an open-source Spring Boot project suitable for beginners
Implementation of Stack Using Array
Mas afinal o que é esse tal de Liferay?
Design Patterns Decoded: Java Edition
Building a modern Cloud Native Full stack Microservices Project: End to End — Introduction
Logging and Exception Handling in Java
Logging and Exception Handling in Java
Add Continuous Integration(CI) for my Java project

Посмотреть:
🌐 What is a downstream collector? - Cracking the Java Coding Interview ( 01:00)
🌐 Pattern Matching for switch ( 01:45)
🌐 Java On The GPU - Inside Java Newscast #58 ( 09:17)
🌐 Why is Thread.stop() deprecated? - Cracking the Java Coding Interview ( 01:00)
🌐 Самые полезные навыки для джуна в IT — Евгений Кателла ( 00:42)
🌐 Обязательно включи эту функцию, когда впервые пишешь код — Андрей Кузьмин ( 00:38)

Хорошего дня!

@javatg
☝️Совет: Добавьте в JDBC URL свойство ApplicationName (зависит от БД, не у всех БД оно есть!).

Таким образом, в списке сессий вместо имени JDBC-драйвера будет отображаться имя приложения. Это поможет при поиске неисправностей, когда несколько приложений подключаются к одной и той же БД.

@javatg
🖥 Глубокое погружение в Java: рефлексия и загрузчик классов. Часть 3

Практический пример: добавление функциональности плагина в Java-приложение

Плагины — это небольшие программы, которые могут быть включены в работающее приложение для расширения его функциональности.
Рассмотрим редактор кода Visual Studio Code, который помогает в таких задачах разработки, как отладка, тестирование кода и контроль версий. Кроме того, он поставляется на рынок с тысячами расширений, которые могут загружать пользователи. Расширения варьируются от самых необходимых, таких как редактирование кода для определенного языка программирования, до премиальных (например, Prettier для обеспечения единого стиля кода и Better Comments, которое создает цветные комментарии к коду). Visual Studio Code предоставляет эти расширения по технологии plug-and-play.

Хотя VS code написан не на Java, идея архитектуры плагинов та же — необходимость расширения системы или подключения новой функциональности во время выполнения. Функциональность плагинов в Java-приложении реализуется с помощью рефлексии и загрузчиков классов. Создать простой плагин можно в три этапа:

1. Определение интерфейса плагина.
2. Определение загрузчика классов плагина.
3. Определение протокола для установки и запуска плагинов в системе.

На 1-м этапе должен быть определен единый интерфейс, через который приложение может запускать любой плагин.

public interface Plugin {

// возвращает имя плагина
public String getPluginName();

// запускает функциональность плагина
public void run();

// используется для настройки плагина, если это необходимо
// возвращает true/false при успешной/неудавшейся настройке
public boolean configure(Object configuration);
}

Все плагины должны иметь класс, реализующий этот интерфейс. Данный интерфейс выполняет роль маркера. При загрузке плагинов приложение рефлексивно проверяет классы в поисках класса, реализующего этот интерфейс. Он содержит метод run(), который является точкой входа для запуска плагина. В качестве альтернативы можно использовать аннотации для обозначения функции запуска плагина, аналогично примеру JUnit.

На 2-м этапе для загрузки классов плагина определяется специальный загрузчик классов. Это требуется по многим причинам.

▪️Класс однозначно идентифицируется по его имени и загрузчику классов. Загрузка плагина с помощью специального загрузчика классов создает уникальное пространство имен для классов плагина. Это предотвращает возникновение конфликтов между классами приложения и классами плагина. Например, если и приложение, и плагин определили класс с именем Foo, то JVM будет знать, как их различать, поскольку класс Foo приложения был загружен Application ClassLoader, а класс Foo плагина — специализированным загрузчиком классов, и каждый из них будет иметь свой объект Class.
▪️Не следует полностью доверять безопасность приложения коду внешнего плагина. Он может содержать непроверенный, ошибочный или вредоносный код. Наличие отдельного загрузчика классов, загружающего классы плагинов, позволяет наложить ограничения по безопасности на классы плагинов (подробнее об этом здесь).

Будет удобнее определить специальный путь для всего кода плагина. Загрузчик классов плагина будет искать файлы классов по этому пути, и его можно определить следующим образом:

Далее
Часть 2.

@javatg
2024/10/02 12:33:12
Back to Top
HTML Embed Code: