@Override
перед объявлением метода?@Override
указывает, что далее мы собираемся переопределять метод базового класса.При этом, если в базовом классе не окажется метода с аналогичной сигнатурой, то мы получим предупреждение компилятора о том, что хотя мы и собирались что-то переопределить, по факту этого не произошло.
На этом действие аннотации заканчивается.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Держите годное видео о том, как с помощью фреймворка Jetpack Compose создать проект в Android Studio.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
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
Please open Telegram to view this post
VIEW IN TELEGRAM
transient
в Java?Сериализация — это преобразование экземпляра класса в форму, пригодную для его сохранения (например в файл, в БД или для передачи по сети). Сериализованные объекты можно затем восстановить (десериализовать).
Свойства класса, помеченные модификатором
transient
, не сериализуются.Обычно в таких полях хранится промежуточное состояние объекта, которое, к примеру, проще вычислить, чем сериализовать, а затем десериализовать. Другой пример такого поля — ссылка на экземпляр объекта, который не требует сериализации или не может быть сериализован.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Всего здесь 114 вопросов, они есть простые/сложные, теоретические/практические, уверен найдёте здесь много полезного для себя
Вот, кстати, некоторые вопросы:
• Что такое сплоченность микросервисов?
• В чем разница между макетом и заглушкой?
• Что вы знаете о тестовой пирамиде Майка Кона?
• Какова цель Docker?
• Можем ли мы использовать микросервисы для создания конечных автоматов?
• Что такое Spring Cloud?
• Как решать сквозные проблемы, такие как безопасность, в архитектуре микросервисов?
• Что такое Netflix Feign? В чем его преимущества?
• Почему отладка так сложна в микросервисной архитектуре?
Пользуйтесь)
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Держите наиполезнейший ролик, где автор делится своим пониманием этой архитектуры, которую кто-то знает как "Порты и адаптеры".
В процессе создаётся проект с использованием гексагональной архитектуры, демонстрируется создание модуля "Каталог" и его взаимодействие с внешним миром.
Создаются интерфейсы для входящих и исходящих портов, а также классы для реализации логики приложения.
План
• 00:01:34 Гексагональная архитектура
• 00:08:32 Применение гексагональной архитектуры
• 00:30:01 Разделение модуля на библиотеки
• 00:41:25 Разработка модульного монолита
• 01:08:57 Разработка микросервисов
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Подборка лучших обучающих каналов для программистов.
➡️ Делитесь с коллегами и сохраняйте себе, чтобы не потерять
⚡Машинное обучение
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
➡️ Делитесь с коллегами и сохраняйте себе, чтобы не потерять
⚡Машинное обучение
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
Entity
класса, по-разному валидируют поля:@NotNull
@Size(min=3)
@Column(name = "login")
private String login;
@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
Please open Telegram to view this post
VIEW IN TELEGRAM
Новосибирск, 25 апреля приглашаем на митап IT Talk by Sber для Java- и DevOps-разработчиков! 🤩
Мы собрали экспертов из разных команд и городов, чтобы рассказать о технологиях и инструментах, которые увеличивают эффективность работы разработчика и всей команды.
На митапе обсудим интересные темы:
👉 Советы для оптимизации сборки Java-проектов, практики CI и автоматизации сборки приложений.
👉 Что такое код с точки зрения законодательства, кому он принадлежит и какие есть права у автора кода?
👉 Инциденты в проме: что делать и не делать, чтобы устранить инцидент, и что на самом деле происходит, когда вы видите «Сервис недоступен, повторите операцию через 5 минут или позже»?
Встречаемся 25 апреля с 17:30 до 22:00 в лофте FoodFactory: Новосибирск, ул. Коммунистическая, 14.
Регистрируйтесь по ссылке!
Мы собрали экспертов из разных команд и городов, чтобы рассказать о технологиях и инструментах, которые увеличивают эффективность работы разработчика и всей команды.
На митапе обсудим интересные темы:
👉 Советы для оптимизации сборки Java-проектов, практики CI и автоматизации сборки приложений.
👉 Что такое код с точки зрения законодательства, кому он принадлежит и какие есть права у автора кода?
👉 Инциденты в проме: что делать и не делать, чтобы устранить инцидент, и что на самом деле происходит, когда вы видите «Сервис недоступен, повторите операцию через 5 минут или позже»?
Встречаемся 25 апреля с 17:30 до 22:00 в лофте FoodFactory: Новосибирск, ул. Коммунистическая, 14.
Регистрируйтесь по ссылке!
— Профили:
--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
Please open Telegram to view this post
VIEW IN TELEGRAM
Правильная и хорошая обработка ошибок — довольно важная часть в разработке. Но как это делать правильно?
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
Please open Telegram to view this post
VIEW IN TELEGRAM
for (byte i = 126; i<=127; i++) {
System.out.println(i);
}
Дело в том, что byte имеет значения от -128 до 127. Поэтому 127+1 даёт -128 и условие <=127 всегда истинно.
Такие дела
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Наш проект будет состоять всего из двух классов, причём один будет вызывать метод другого.
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
jar cfe hello.jar ru.devmark.HelloWorld ru
Опция
c
говорит, что нужно создать новый архив, f
задаёт имя будущего архива, а e
указывает полное имя main
-класса. В конце указываем папку, в которой лежат все class-файлы.@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Основная идея заключается в том, чтобы не просто писать тесты, а максимально эффективно покрывать функциональность при минимуме написанных тестов. Главная помощь этих тестов будет заметна при рефакторинге приложения.
Что внутри?
• Проектирование тестов
• Методики проектирования
• Уровни тестов
• Эквивалентное разделение
• Анализ граничных значений
• Доменный анализ
• Тестовая комбинаторика
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Всё, что будет на митапе, останется на митапе 💥
24 апреля в 19:00 встречаемся на Alfa Backend Stories #3 в Москве и онлайн.
Обсудим ИИ и другие инструменты, которые помогают в написании кода:
Андрей Свиридов, ведущий разработчик, поделиться советами о том, как повысить качество кода в приложениях
Дмитрий Сошников, технический руководитель лаборатории генеративного ИИ Школы дизайна НИУ ВШЭ и консультант Yandex Cloud, расскажет о современном искусственном интеллекте в облаке и покажет, как YandexGPT может использоваться разработчиками для решения прикладных задач
Антон Гращенков, в режиме реального времени покажет, как локально установить и настроить ИИ, а также как с его помощью писать код
Обещаем не стирать вам память, если вы придёте в костюме, в образе агентов фильма «Люди в чёрном»
Регистрация
Еще больше полезного в комьюнити: @alfabackend
erid: LjN8Kbsmr
Реклама. АО «Альфа-Банк». ИНН 7728168971.
24 апреля в 19:00 встречаемся на Alfa Backend Stories #3 в Москве и онлайн.
Обсудим ИИ и другие инструменты, которые помогают в написании кода:
Андрей Свиридов, ведущий разработчик, поделиться советами о том, как повысить качество кода в приложениях
Дмитрий Сошников, технический руководитель лаборатории генеративного ИИ Школы дизайна НИУ ВШЭ и консультант Yandex Cloud, расскажет о современном искусственном интеллекте в облаке и покажет, как YandexGPT может использоваться разработчиками для решения прикладных задач
Антон Гращенков, в режиме реального времени покажет, как локально установить и настроить ИИ, а также как с его помощью писать код
Обещаем не стирать вам память, если вы придёте в костюме, в образе агентов фильма «Люди в чёрном»
Регистрация
Еще больше полезного в комьюнити: @alfabackend
erid: LjN8Kbsmr
Реклама. АО «Альфа-Банк». ИНН 7728168971.
В этой статье разбираются алгоритмы сортировки Java и примеры их реализации. В том числе выясняется, как выбрать подходящий алгоритм для конкретной задачи.
Особенно актуально для собеседующихся)
Квадратичная сложность — O(n²):
├╼
сортировка вставкой Java;├╼
сортировка выбором Java;╰╼
сортировка пузырьком Java.Логарифмическая сложность — O(n log n):
├╼
сортировка слиянием Java;├╼
пирамидальная сортировка Java;├╼
быстрая сортировка Java;╰╼
сортировка Шелла на Java.O(n+K):
╰╼
сортировка подсчетом Java.@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM