javatg | Unsorted

Telegram-канал javatg - Java

17642

Самая актуальная информация из мира Java По всем вопросам- @haarrp @itchannels_telegram - 🔥лучшие ит-каналы @pythonl - 🐍 @ai_machinelearning_big_data- ml @ArtificialIntelligencedl - AI @datascienceiot - ds @pythonlbooks 📚 РКН: clck.ru/3FmwKr

Subscribe to a channel

Java

💻 Отличия Sequence API vs Collection в Kotlin

Держите хорошее объяснение отличий между 2 этими понятиями.

В статье рассматриваются примеры, которые помогают визуализировать разницу между Sequence API и обычными коллекциями.

Последовательность — это итерируемый тип, с которым можно работать, не создавая ненужных промежуточных коллекций.

Sequence API в Kotlin могут обрабатывать данные более эффективно, чем обычные коллекции.

📎Читать подробнее: [ru], [en]

@javatg

Читать полностью…

Java

🖥 Axiom JDK Express

🟡Axiom JDK заявила о выпуске Axiom JDK Express. Axiom JDK Expres представляет собой российскую среду исполнения Java c улучшенной производительностью. В новой среде была оптимизирована платформа Java. Это позволило ускорить Java‑приложения до 15% без дополнительных затрат на оборудование. По словам разработчиков, благодаря полной совместимости со стандартом миграция на Axiom JDK Express с Java SE и сборок OpenJDK происходит бесшовно.

🟡Новая среда улучшает работу LTS‑версий Java 8 и 11 с долгосрочной поддержкой, утверждают разработчики. Как они рассказали, почти половина всех Java‑приложений использует Java 8 и 11. При переходе этих приложений на Axiom JDK Express они получат значительный прирост скорости и экономию аппаратных средств без переписывания кода.

🟡Axiom JDK Express объединяет виртуальную машину версии JVM 17 и среду исполнения JDK 8 или 11, повышая производительность систем до 15%. При этом не нужно менять версию фреймворка или код приложения. Достаточно изменить только один компонент вместо полноценной миграции на новый релиз JDK. Среда исполнения Axiom JDK Express ускоряет системы до уровня версии JDK 17 без изменений кода, включая сервер приложений Libercat.

Среди улучшений JDK 8:
— обновление механизмов сборки мусора, включая поддержку суб‑миллисекундных пауз и терабайтной кучи во всех версиях;

— запуск на 10% быстрее;

— скорость сжатия на 85%;

— скорость распаковки на 113%.

🟡Также Axiom JDK рассказала, что её инженеры будут поддерживать JDK 8 до марта 2031 года,

@javatg

Читать полностью…

Java

🖥 Отличный учебник по Java

Здесь раскрыты самые основные темы + много примеров кода.
Самое то, чтобы освежить какие-то моменты перед собеседованием.

🟡Оглавление
├╼ Типы данных
├╼ Литералы
├╼ Переменные и константы
├╼ Операторы
├╼ Управляющие последовательности
├╼ Модификаторы
├╼ Ввод с клавиатуры
├╼ Особенности строк
├╼ Коллекции
├╼ Дата и время
├╼ Исключения
╰╼ Интерфейсы

📚 Учебник

@javatg

Читать полностью…

Java

💻 Статические методы и синхронизация в Котлин

На собеседовании может всплыть вопрос в духе: "Что будет являться монитором для блока кода, помеченного сразу двумя аннотациями @Synchronized и @JvmStatic в Котлин?".
Держите полезную статью, в которой рассматривается, для чего используются данные аннотации и каким будет результат при их одновременном использовании.

А пока немного о @Synchronized и @JvmStatic:

🟡Аннотация @Synchronized в Kotlin является аннотацией для методов и блоков кода, которая обеспечивает синхронизацию доступа к ним между потоками. Когда метод или блок кода помечены аннотацией @Synchronized, только один поток может получить право их выполнения в определенный момент времени, остальные потоки будут ожидать освобождения монитора, прежде чем получить доступ. Это позволяет избежать состояния гонки и обеспечить правильное выполнение кода в многопоточной среде.

🟡Аннотация @JvmStatic в Kotlin указывает компилятору, что функция или свойство должны быть статическими в Java-коде после компиляции. Когда мы используем @JvmStatic перед функцией или свойством в объекте- компаньоне или внутри объекта, компилятор Kotlin создает соответствующий статический элемент в Java-коде. Это позволяет вызывать этот элемент напрямую из Java-кода, без необходимости ссылаться на экземпляр класса или объекта.

📎 Статья

@javatg

Читать полностью…

Java

💻 Запуск Kotlin кода без IDE

▶️Итак, вопрос: как скомпилировать простенький код написанный на Kotlin без IDE?


▶️Вот пошаговая инструкция:

1. Загрузить компилятор. Найти последнюю версию можно здесь.

2. Распаковать компилятор в отдельную папку, добавить bin директорию в переменную окружения PATH. Об этом можно почитать тут. Bin содержит скрипты, необходимые для сборки и запуска кода на Windows, OS X и Linux.
Другой вариант установки компилятора: для OS X, Linux, Cygwin, FreeBSD или Solaris (возможно, и другие UNIX-системы), то можно использовать SDKMAN https://sdkman.io/.
Запускаем в терминале:


$ curl -s https://get.sdkman.io | bash

Затем следуем инструкциям. Потом потребуется открыть новое окно терминала и установить Kotlin с помощью команды:
$ sdk install kotlin


▶️Теперь кратко о создании и запуске простого приложения.

1. Создаем файл - `hello.kt` со следующим кодом:

fun main(args: Array<String>) {
println("Hello, World!")
}


2. Компилируем, используя командную строку:

$ kotlinc hello.kt -include-runtime -d hello.jar

Подробнее о флагах компиляции можно почитать в мане:
$ kotlinc -help


3. Запускаем приложение:

$ java -jar hello.jar


📎Более подробно о других вариантах установки компилятора, компиляции библиотек, запуске Kotlin-скриптов и прочем в доках

@javatg

Читать полностью…

Java

Всё, что будет на митапе, останется на митапе 💥

24 апреля в 19:00 встречаемся на Alfa Backend Stories #3 в Москве и онлайн.

Обсудим ИИ и другие инструменты, которые помогают в написании кода:

Андрей Свиридов, ведущий разработчик, поделиться советами о том, как повысить качество кода в приложениях

Дмитрий Сошников, технический руководитель лаборатории генеративного ИИ Школы дизайна НИУ ВШЭ и консультант Yandex Cloud, расскажет о современном искусственном интеллекте в облаке и покажет, как YandexGPT может использоваться разработчиками для решения прикладных задач

Антон Гращенков, в режиме реального времени покажет, как локально установить и настроить ИИ, а также как с его помощью писать код

Обещаем не стирать вам память, если вы придёте в костюме, в образе агентов фильма «Люди в чёрном»

Регистрация

Еще больше полезного в комьюнити: @alfabackend

erid: LjN8Kbsmr
Реклама. АО «Альфа-Банк». ИНН 7728168971.

Читать полностью…

Java

🖥 Как скомпилировать исходники Java вручную

Наш проект будет состоять всего из двух классов, причём один будет вызывать метод другого.

🟡Класс Greeter содержит метод sayHello(). Этот метод выводит приветствие на экран:

package ru.devmark.helper;

public class Greeter {
public void sayHello() {
System.out.println("Привет, мир!");
}
}


🟡Сохраним этот исходный код в текстовый файл, имя которого обязательно должно совпадать с именем класса, т.е. Greeter.java.
package ru.devmark;

import ru.devmark.helper.Greeter;

public class HelloWorld {
public static void main(String[] args) {
var greeter = new Greeter();
greeter.sayHello();
}
}

Сохраним исходный код этого класса в файле HelloWorld.java.

🟡Поскольку здесь есть статический метод main(), этот класс можно использовать как точку входа для нашего приложения (так называемый «Main-Class»). Внутри мы создаём экземпляр класса Greeter, вызываем его единственный метод и выводим результат на экран.

🟡Теперь мы готовы к тому, чтобы скомпилировать написанный нами код. Для этого используется утилита javac, которая поставляется вместе с jdk. Выполним эту команду в той папке, где лежат оба наших файла:
javac -d . *.java

Опция -d указывает, куда сложить скомпилированные файлы. В результате в нашей папке помимо исходников появится иерархическая структура папок и файлов:
├── Greeter.java
├── HelloWorld.java
└── ru
└── devmark
├── HelloWorld.class
└── helper
└── Greeter.class


🟡Но когда мы говорим о приложении, то ожидаем увидеть один файл, а не кучу папок. Давайте упакуем наши class-файлы в jar-архив. В этом нам поможет одноимённая утилита.
jar cfe hello.jar ru.devmark.HelloWorld ru

Опция c говорит, что нужно создать новый архив, f задаёт имя будущего архива, а e указывает полное имя main-класса. В конце указываем папку, в которой лежат все class-файлы.

📎 Читать подробнее
📎 YouTube

@javatg

Читать полностью…

Java

🖥 Хороший стиль обработки ошибок

Правильная и хорошая обработка ошибок — довольно важная часть в разработке. Но как это делать правильно?

Когда делать RuntimeException, а когда просто Exception

Единственен ли способ генерации ошибки оператором throw?

В каких лучше случаях создать, допустим, MyException extends Exception, а затем MyOtherException extends MyException? Иными словами, как увидеть необходимость в иерархии ошибок?

Когда делать примерно так:

public void f() throws MyException {
//некоторый код ...
if (....){
throw MyException(...);
}
}


Какие еще есть способы генерации ошибок?

Когда правильнее переносить ошибку на уровень функции (... f() throws ...)?


▶️Что ж, попробуем на это ответить.
Во-первых, используйте исключения. Создайте свою иерархию исключений и продумайте, какие из них сделать *runtime*, а какие нет. Никогда не используйте конструкции типа new Exception(...) или new RuntimeException. Вместо этого старайтесь создавать и кидать только адекватные ситуации исключения. Создание экземпляра Exception или RuntimeException — халтура и отписка вместо обработки ошибок.

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

Пользуйтесь try/catch/finally. Не забывайте уничтожать ресурсы.

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

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

📎 Подробнее про обработку ошибок тут

@javatg

Читать полностью…

Java

Новосибирск, 25 апреля приглашаем на митап IT Talk by Sber для Java- и DevOps-разработчиков! 🤩

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

На митапе обсудим интересные темы:

👉 Советы для оптимизации сборки Java-проектов, практики CI и автоматизации сборки приложений.

👉 Что такое код с точки зрения законодательства, кому он принадлежит и какие есть права у автора кода?

👉 Инциденты в проме: что делать и не делать, чтобы устранить инцидент, и что на самом деле происходит, когда вы видите «Сервис недоступен, повторите операцию через 5 минут или позже»?

Встречаемся 25 апреля с 17:30 до 22:00 в лофте FoodFactory: Новосибирск, ул. Коммунистическая, 14.

Регистрируйтесь по ссылке!

Читать полностью…

Java

🔥Подборка лучших обучающих каналов для программистов.

➡️ Делитесь с коллегами и сохраняйте себе, чтобы не потерять

⚡Машинное обучение

Machine Learning - запускаем лучшие ИИ модели, пишем код, погружаемся в нейросети
Ml Собеседование - подготовка к собесу по мл, алгоритмам, коду
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат

🏆 Golang
Golang - изучи один из самых перспективных языков на ит-рынке
Golang собеседование - разбор задач и вопросов с собесов
Golang вакансии -работа для Go разработчика
Golang книги библиотека книг
Golang задачи и тесты
Golang чат
Golang news - новости из мира go
Golang дайджест

💥 Linux /Этичный хакинг
Linux Academy - гайды, секреты и лучшие материалы по Linux
Kali linux - погрузись в мир этичного хакинга и кибербезопасности
linux_kal - kali чат
Информационная безопасность

🚀 Data Science

Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data

🛢Базы данных
Sql базы данных - научим работе с базами данных профессионально
Библиотека баз данных
SQL чат
Вакансии Sql аналитик данных

#️⃣C#

С# академия - лучший канал по c#
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа

🐍 Python

Python/django - самый крупный обучающий канал по Python
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги

☕ Java

Java академия - java от Senior разработчика
Java вакансии
Java чат
Java вопросы с собеседований
Java книги

💻 C++

C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии

⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend

🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов

📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки

🇬🇧 Английский для программистов

🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence

🔥 DevOPs
Devops для программистов
Книги Devops

🌟 Docker/Kubernets
Docker
Kubernets

📓 Книги
Библиотеки Книг для программситов

💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend

Читать полностью…

Java

🧐 Приглашаем на вебинар «Дизайн Web API: Обзор парадигм проектирования интерфейсов» от Слёрм.

Дата и время: 19 апреля, 19:00 по МСК
Спикер: Вячеслав Гагарин, Senior Software Engineer в Retail Rocket

Интерфейс – это договор между заказчиком и исполнителем. В нашем случае – между клиентом и сервером. Как им договориться о взаимодействии? Какой набор согласованных правил, ограничений и принципов использовать, чтобы добиться определённых результатов и свойств разрабатываемой системы?

Об этом и многом другом узнаете уже 19 апреля.

О чем будем говорить на вебинаре:

Обсудим REST и RPC подходы при проектировании WEB API;

Поговорим про форматы ответов на запросы клиентов;

Прикинем, что делать с длинными списками данных в ответе

Зададимся вопросами «Зачем нужен паттерн Backend-For-Frontend и когда его используют».

➡️ Регистрируйтесь на вебинар по ссылке

Реклама ООО «Слёрм» ИНН 3652901451

Читать полностью…

Java

Хотите стать профессионалом в области разработки архитектуры ПО?

Тогда присоединяйтесь к нашему бесплатному вебинару «Взаимодействия на основе событийной модели»!

💻 Вебинар будет полезен для разработчиков и архитекторов, всего за 2 часа вы узнаете:
- как использовать события для асинхронного взаимодействия;
- какие это дает плюсы и минусы по сравнению с request-reply архитектурой;
- некоторые паттерны реализации систем с использованием событий.

📅 Занятие пройдёт 22 апреля в 19:00 мск в рамках набора на онлайн-курс «Software Architect». Спикер — опытный разработчик на С++, Java, Kotlin и Kafka. Для участников вебинара будет доступна специальная цена на обучение.

Зарегистрируйтесь, чтобы посетить открытый урок.

Читать полностью…

Java

Есть опыт backend-разработки на Java? Приглашаем принять участие в создании революционно новой core banking платформы.

ГК «Иннотех» входит в один из крупнейших* ИТ-Холдингов России. С 2020 мы разрабатываем инновации для цифровизации финансового сектора 📈.

👨🏼‍💻 Вместе нам предстоит работать над масштабным проектом по импортозамещению: высоконагруженные системы, передовой технологический стек (Spring Boot, Quarkus, Kotlin) и микросервисная архитектура.

Необходимые скилы:

🔹опыт работы с java от 3 лет,
🔹разработка на Java с использованием технологий SpringFramework (Cloud, Boot, AOP), Hibernate,
🔹знание и опыт применения: Stream, Optional, Collections и др., подробнее – на сайте.

Что предлагаем:

🔹интересные задачи на развитие hard-скилов
🔹быстрый оффер и фаст-трек
🔹удалёнка, ДМС и бонусы
🔹развитая культура и профессиональная команда

В нашей команде уже 13 000+ ИТ-профессионалов, и мы продолжаем расти.

📩 Успей подать заявку до 30.04!

*По версии CNews Analytics 2022, TAdviser 2021 и RAEX 2023

Реклама. ООО "ГК "ИННОТЕХ". ИНН 9703073496.

Читать полностью…

Java

JPoint 2024 — крупнейшая в России Java-конференция для опытных разработчиков.

Конференция будет проходить в течение трех дней: 17 апреля в онлайне и 24–25 апреля в Москве, с возможностью подключиться онлайн.

В программе доклады про архитектуру, фреймворки, языки, эксплуатацию, VM и Runtime. Лучшие практики Java-разработки, использование Spring Boot, работа JVM «под капотом», программирование на Kotlin и других JVM-языках, backend-архитектура и многое другое. Кроме докладов будут воркшопы, мастер-классы, интервью и круглые столы. В этом году будут выступать спикеры из Сбера, Яндекса, VK, Тинькофф, Huawei, Контур, Syntacore, Мир Plat.Form и OZON.

Билеты можно купить за счет компании. Для тех, кто покупает билеты сам, у нас есть промокод на скидку 10%: JAVATG

Реклама. ООО "Вайлдкард". ИНН 7801718607

Читать полностью…

Java

Добавьте в свое портфолио кейс по решению задачи с микросервисной архитектурой бесплатно и всего за пару часов

На практическом уроке «Масштабируемая архитектура для систем обработки платежей».

На вебинаре:
- рассмотрим решение задачи по построению масштабируемой отказоустойчивой системы обработки платежей;
- обсудим применения шардирования, паттерна Saga, двухфазного коммита и выбор уровня изоляции транзакций;
- получим описание верхнеуровневой архитектуры.

Занятие пройдёт 24 апреля в 20:00 мск в рамках курса «Microservice Architecture». Доступна рассрочка на обучение!

👉 Чтобы посетить открытый урок, зарегистрируйтесь: https://otus.pw/ULGc/?erid=LjN8KBPXC

Читать полностью…

Java

🖥 Cобеседование по Java. Spring Framework

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

Вот несколько вопросов:
Как использовать JDBC Template в Spring Framework?
Каковы различные части DispatcherServlet?
Что вы понимаете под Dependency Injection (DI)?
Что такое Аспектно-ориентированное программирование (AOП)?
Как работать с Kafka в Spring Framework?
Как добавить компонент в Spring?
Что такое жизненный цикл Spring Bean?

📎 Ссылка на вопросы/ответы

@javatg

Читать полностью…

Java

🖥 Java — выполнение действий раз в минуту бесконечно

▶️Как можно выполнять определенные действия после запуска приложения и бесконечно долго раз в минуту?

▶️Всё довольно просто, можно реализовать это например так:

Thread run = new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
//ДЕЛАЕМ
Thread.sleep(1000); //1000 - 1 сек
} catch (InterruptedException ex) {
}
}
}
});
run.start(); // заводим

С этим кодом можно делать что угодно, добавить final boolean (заменить им true) и остановить thread когда нужно, при остановке что-то сделать, если нужно.

@javatg

Читать полностью…

Java

🖥 Java в контейнере: особенности эксплуатации

Держите хороший доклад о том, как использовать Java вместе с Docker-контейнерами.
В докладе освещены нюансы работы Linux, контейнеризации и JVM друг с другом.
Рассказывается про использование ресурсов системы и особенности работы лимитов, сетевые особенности контейнеров и диагностика JVM в контейнере.

План:
• Контейнеры и его особенности
• Настройка памяти и файловой системы в контейнерах
• Управление памятью в контейнерах
• Работа с памятью в контейнерах
• Работа с контейнерами
• Файловая система контейнеров
• Диагностика контейнеров
• Настройка и использование GVM
• Настройка и использование JMX
• Альтернативные решения

📎 YouTube
📎 Презентация

@javatg

Читать полностью…

Java

🖥 Как реализовать потокобезопасную неблокирующую очередь на Java

🟡Итак, задача: нужно реализовать потокобезопасную (Thread Safe) неблокирующую очередь на Java.
Нельзя использовать локи или synchonized, при этом очередь должна корректно работать в многопоточной среде.

🟡Для решения будем использовать так называемые неблокирующие алгоритмы основанные на атомиках.
В основе неблокирующих алгоритмов лежит использование атомарной CAS (Compare-and-Swap или Compare-and-Set) операции. В Java для этого можно использовать атомики, которые поддерживают эти атомарные операции.

📎 Все детали реализации этой очереди в статье

@javatg

Читать полностью…

Java

🖥 Полный гайд по алгоритмам сортировки на Java

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

Квадратичная сложность — O(n²):
├╼ сортировка вставкой Java;
├╼ сортировка выбором Java;
╰╼ сортировка пузырьком Java.

Логарифмическая сложность — O(n log n):
├╼ сортировка слиянием Java;
├╼ пирамидальная сортировка Java;
├╼ быстрая сортировка Java;
╰╼ сортировка Шелла на Java.

O(n+K):
╰╼ сортировка подсчетом Java.

📎 Гайд

@javatg

Читать полностью…

Java

🖥 Юнит-тесты: чек-лист методик проектирования

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

Что внутри?
• Проектирование тестов
• Методики проектирования
• Уровни тестов
• Эквивалентное разделение
• Анализ граничных значений
• Доменный анализ
• Тестовая комбинаторика

📎 Статья

@javatg

Читать полностью…

Java

🖥 Как работает этот код?

А ты знаешь, что будет при запуске этого кода на Java?

for (byte i = 126; i<=127; i++) {
System.out.println(i);
}


Возникнет бесконечный цикл, код будет выполняться без остановки. Хороший вопрос: почему так происходит? Ведь если написать i < 127, то всё работает нормально.
Дело в том, что byte имеет значения от -128 до 127. Поэтому 127+1 даёт -128 и условие <=127 всегда истинно.
Такие дела


@javatg

Читать полностью…

Java

🖥 Настройка активного профиля и конфига в Spring Boot

Итак, для быстрой установки указывайте профиль и путь к файлам конфигурации Spring Boot, используя следующие параметры:
Профили: --spring.profiles.active=имя_профиля
Путь к конфигурации: --spring.config.location=путь_к_конфигурации

Пример команды:

java -jar app.jar --spring.profiles.active=dev --spring.config.location=file:/config/

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

Однако, командная строка Spring Boot предоставляет намного больше возможностей. Давайте рассмотрим это детальнее.


Понимание типов свойств и комбинирование профилей

Важно отделять системные свойства Java от свойств Spring по префиксам -D и -- соответственно. Параметры командной строки позволяют настраивать приложение Spring Boot при его запуске.
# Почему бы не воспользоваться преимуществами двух подходов?
java -Dspring.profiles.active=dev,qa -jar ваше_приложение.jar

Эта команда активирует одновременно профили dev и qa, что дает возможность объединить настройки из нескольких профилей, при условии что они разработаны для совместного использования.

📎 Читать подробнее

@javatg

Читать полностью…

Java

🖥 Какие отличия между @NotEmpty, @NotBlank и @NotNull?

▶️В разных примерах Entity класса, по-разному валидируют поля:

@NotNull
@Size(min=3)
@Column(name = "login")
private String login;

@Email
@Size(min=6, max=80)
@NotBlank(message="{register.email.invalid}")
@Column(name = "email", unique=true)
private String email;

@Column(name = "first_name")
@NotEmpty(message = "Please provide your first name")
private String firstName;

@Column(name = "last_name")
@NotEmpty(message = "Please provide your last name")
private String lastName;

@Transient
private String password;

Но какие между ними различия и что следует использовать и в каких случаях?

А также если указана аннотация @Size(min=6, max=80) нужно ли дополнительно проверять с помощью @NotBlank или других аннотаций?


▶️Итак, ответ:

@NotBlank применяется только к строкам и проверяет, что строка не пуста.

@NotNull применяется к CharSequence, Collection, Map или Array и проверяет, что объект не равен null. Но при этом он может быть пуст.

@NotEmpty применяется к CharSequence, Collection, Map или Array и проверяет, что он не null имеет размер больше 0.

Аннотация @Size(min=6) пропустит строку состоящую из 6 пробелов и/или символов переноса строки, а @NotBlank не пропустит.

@javatg

Читать полностью…

Java

🖥 Гексагональная архитектура и микросервисы на Java

Держите наиполезнейший ролик, где автор делится своим пониманием этой архитектуры, которую кто-то знает как "Порты и адаптеры".
В процессе создаётся проект с использованием гексагональной архитектуры, демонстрируется создание модуля "Каталог" и его взаимодействие с внешним миром.
Создаются интерфейсы для входящих и исходящих портов, а также классы для реализации логики приложения.

План
• 00:01:34 Гексагональная архитектура
• 00:08:32 Применение гексагональной архитектуры
• 00:30:01 Разделение модуля на библиотеки
• 00:41:25 Разработка модульного монолита
• 01:08:57 Разработка микросервисов

🖥 Репозиторий GitHub
📎 YouTube

@javatg

Читать полностью…

Java

🖥 Микросервисы — собеседование по Java. Разбор вопросов и ответов

🔥 Держите отличную подборку вопросов и ответов на позицию Java-разработчика. Большой акцент делается работе с микросервисами.
Всего здесь 114 вопросов, они есть простые/сложные, теоретические/практические, уверен найдёте здесь много полезного для себя

Вот, кстати, некоторые вопросы:
• Что такое сплоченность микросервисов?
• В чем разница между макетом и заглушкой?
• Что вы знаете о тестовой пирамиде Майка Кона?
• Какова цель Docker?
• Можем ли мы использовать микросервисы для создания конечных автоматов?
• Что такое Spring Cloud?
• Как решать сквозные проблемы, такие как безопасность, в архитектуре микросервисов?
• Что такое Netflix Feign? В чем его преимущества?
• Почему отладка так сложна в микросервисной архитектуре?

Пользуйтесь)
📎 Ссылка

@javatg

Читать полностью…

Java

🖥 Для чего нужен модификатор transient?

▶️Каково назначение модификатора transient в Java?

▶️Чтобы ответить на этот вопрос, сперва вспомним ещё один термин.
Сериализация — это преобразование экземпляра класса в форму, пригодную для его сохранения (например в файл, в БД или для передачи по сети). Сериализованные объекты можно затем восстановить (десериализовать).

Свойства класса, помеченные модификатором transient, не сериализуются.

Обычно в таких полях хранится промежуточное состояние объекта, которое, к примеру, проще вычислить, чем сериализовать, а затем десериализовать. Другой пример такого поля — ссылка на экземпляр объекта, который не требует сериализации или не может быть сериализован.

@javatg

Читать полностью…

Java

🖥 Создание Javadoc на уровне пакета: package-info.java или package.html

Для документирования пакетов в Java предпочтительнее использовать package-info.java, а не package.html. Это обусловлено поддержкой аннотаций в package-info.java, что дает большие возможности по интеграции с фреймворками и обеспечивает типобезопасность. Более того, создатели инструментов среды разработки чаще выбирают package-info.java из-за его консистентности и возможности включения тегов версий, таких как @since.

А вот пример использования package-info.java:

/**
* Пакет, содержащий инструменты для апплетов и связующие интерфейсы.
* @since 1.2
*/
@FrameworkAnnotation
package com.example.applet;

import com.example.framework.FrameworkAnnotation;


📎 Подробнее

@javatg

Читать полностью…

Java

💻 Создаем первое приложение с Jetpack Compose на Kotlin

Держите годное видео о том, как с помощью фреймворка Jetpack Compose создать проект в Android Studio.

📎 Кликабельный план ролика
📎 Само видео

@javatg

Читать полностью…

Java

🖥 Что означает "@Override" перед объявлением метода?

▶️Что означает @Override перед объявлением метода?

▶️На самом деле аннотация @Override указывает, что далее мы собираемся переопределять метод базового класса.
При этом, если в базовом классе не окажется метода с аналогичной сигнатурой, то мы получим предупреждение компилятора о том, что хотя мы и собирались что-то переопределить, по факту этого не произошло.
На этом действие аннотации заканчивается.

🔘Таким образом, аннотация никак не влияет на сам факт переопределения метода - при совпадении сигнатур с методом базового класса он и так будет переопределен, независимо от наличия, либо отсутствия этой аннотации. Аннотация служит лишь для контроля успешности действия при сборке проекта.

🔘В случае отсутствия данной аннотации и не совпадении сигнатур (в результате ошибки) с методом, который мы собирались переопределять - случится страшное - очень трудноуловимая ошибка, когда вы думаете, что должно бы переопределяться, а по факту имеете отдельный независимый метод, который скорее всего вообще не выполняется. При этом компилятор считает, что с его точки зрения все в порядке - хотите собственный метод в классе-наследнике - нет проблем. И молчит.

@javatg

Читать полностью…
Subscribe to a channel