Основы криптографии в Java (оглавление)
Основы криптографии в Java
Симметричная криптография: алгоритм AES
Асимметричная криптография
Асимметричная криптография. Часть 2
Хэш-функции (SHA-256, MD5)
Соль (Salt) и вектор инициализации (IV)
Классы Cipher и KeyGenerator
Классы SecretKey и IvParameterSpec
Классы KeyPairGenerator и KeyPair
Класс Signature (цифровые подписи)
Base64 в Java Crypto API
Криптографические протоколы (TLS/SSL, HMAC)
#Content
Основы криптографии в Java
Симметричная криптография: алгоритм AES
Асимметричная криптография
Асимметричная криптография. Часть 2
Хэш-функции (SHA-256, MD5)
Соль (Salt) и вектор инициализации (IV)
Классы Cipher и KeyGenerator
Классы SecretKey и IvParameterSpec
Классы KeyPairGenerator и KeyPair
Класс Signature (цифровые подписи)
Base64 в Java Crypto API
Криптографические протоколы (TLS/SSL, HMAC)
#Content
Объектно-реляционное отображение (ORM - Object-Relational Mapping) (оглавление)
Объектно-реляционное отображение (ORM - Object-Relational Mapping)
EntityManager
Аннотация @Entity
Аннотация @Table
Аннотация @Id
Аннотация @GeneratedValue
Аннотация @Column
Аннотация @Transient
Аннотация @Enumerated
Аннотация @Temporal
Аннотация @Lob
Аннотация @Version
Аннотация @Access Аннотации @AttributeOverride и @AttributeOverrides
Аннотация @Embeddable
Аннотация @Embedded
Аннотация @Inheritance
Аннотации @DiscriminatorColumn и @DiscriminatorValue
Аннотация @MappedSuperclass
Аннотация @OneToOne
Аннотации @OneToMany и @ManyToOne
Аннотация @ManyToMany
Аннотация @JoinColumn
Аннотация @JoinTable
Аннотация @ElementCollection
Аннотация @OrderColumn
Аннотация @PrimaryKeyJoinColumn
Аннотация @SecondaryTable
Аннотации @NamedQuery и @NamedQueries
Аннотации @NamedNativeQuery и @NamedNativeQueries
Аннотации @Convert и @Converter
Аннотации @PrePersist и @PostPersist
Аннотации @PreUpdate и @PostUpdate
Аннотации @PreRemove и @PostRemove
Аннотации Spring Data JPA
Аннотация @Query
Аннотация @Modifying
Аннотация @Param
Аннотация @Transactional
Аннотация @EnableJpaRepositories
Аннотация @EntityGraph
Аннотация @Lock
Аннотация @Procedure
Аннотация @IdClass
Аннотация @MapsId
Аннотация @CreatedBy
Аннотация @CreatedDate
Аннотации @LastModifiedBy и @LastModifiedDate
Аннотация @Version
Аннотация @PersistenceContext
Аннотация @EnableJpaAuditing
Аннотация @EntityListeners
Аннотация @Projection
Hibernate
Аннотация @Any
Аннотация @BatchSize
Аннотации @Cache и @Cacheable
Аннотация @Cascade
Аннотация @ColumnTransformer
Аннотация @DynamicInsert
Аннотация @DynamicUpdate
Аннотация @Filter
Аннотация @Formula
Аннотация @Generated
Аннотация @Immutable
Аннотация @Index
Аннотация @LazyCollection
Аннотация @LazyToOne
Аннотация @Loader
Аннотация @ManyToAny
Аннотация @MetaValue
Аннотация @NaturalId
Аннотация @NotFound
Аннотация @OnDelete
Аннотация @TableGenerator
Аннотация @OptimisticLock
#Content
Объектно-реляционное отображение (ORM - Object-Relational Mapping)
EntityManager
Аннотация @Entity
Аннотация @Table
Аннотация @Id
Аннотация @GeneratedValue
Аннотация @Column
Аннотация @Transient
Аннотация @Enumerated
Аннотация @Temporal
Аннотация @Lob
Аннотация @Version
Аннотация @Access Аннотации @AttributeOverride и @AttributeOverrides
Аннотация @Embeddable
Аннотация @Embedded
Аннотация @Inheritance
Аннотации @DiscriminatorColumn и @DiscriminatorValue
Аннотация @MappedSuperclass
Аннотация @OneToOne
Аннотации @OneToMany и @ManyToOne
Аннотация @ManyToMany
Аннотация @JoinColumn
Аннотация @JoinTable
Аннотация @ElementCollection
Аннотация @OrderColumn
Аннотация @PrimaryKeyJoinColumn
Аннотация @SecondaryTable
Аннотации @NamedQuery и @NamedQueries
Аннотации @NamedNativeQuery и @NamedNativeQueries
Аннотации @Convert и @Converter
Аннотации @PrePersist и @PostPersist
Аннотации @PreUpdate и @PostUpdate
Аннотации @PreRemove и @PostRemove
Аннотации Spring Data JPA
Аннотация @Query
Аннотация @Modifying
Аннотация @Param
Аннотация @Transactional
Аннотация @EnableJpaRepositories
Аннотация @EntityGraph
Аннотация @Lock
Аннотация @Procedure
Аннотация @IdClass
Аннотация @MapsId
Аннотация @CreatedBy
Аннотация @CreatedDate
Аннотации @LastModifiedBy и @LastModifiedDate
Аннотация @Version
Аннотация @PersistenceContext
Аннотация @EnableJpaAuditing
Аннотация @EntityListeners
Аннотация @Projection
Hibernate
Аннотация @Any
Аннотация @BatchSize
Аннотации @Cache и @Cacheable
Аннотация @Cascade
Аннотация @ColumnTransformer
Аннотация @DynamicInsert
Аннотация @DynamicUpdate
Аннотация @Filter
Аннотация @Formula
Аннотация @Generated
Аннотация @Immutable
Аннотация @Index
Аннотация @LazyCollection
Аннотация @LazyToOne
Аннотация @Loader
Аннотация @ManyToAny
Аннотация @MetaValue
Аннотация @NaturalId
Аннотация @NotFound
Аннотация @OnDelete
Аннотация @TableGenerator
Аннотация @OptimisticLock
#Content
(периодически обновляемое)
Если хотите найти информацию по Java, ранее опубликованную на канале - для Вас подготовлено оглавление!
Обновлено оглавление.
В связи с гигантским количеством постов, прежний тип (поочереди) признан несостоятельным и оглавление будет постепенно модифицироваться для удобства, в сторону выделения в отдельные темы.
Прошу понять и потерпеть неудобства
Читайте, используйте, будут вопросы - пишите!
Please open Telegram to view this post
VIEW IN TELEGRAM
Jackson
В мире Java-программирования одна из самых частых задач — это работа с JSON. Будь то обмен данными между сервером и клиентом, интеграция с внешними API или хранение конфигураций — JSON стал стандартом де-факто. Именно для этих целей и был создан Jackson.
Что такое Jackson
Jackson — это одна из самых популярных Java-библиотек для работы с JSON. Она позволяет сериализовать объекты Java в JSON и обратно — десериализовать JSON в Java-объекты. Причем делает это быстро, эффективно и с минимальными накладными расходами.
Быстрая история
2007 год — Джейсон Т. Смит (Jason T. Smith) начал разработку Jackson.
2009 год — Первый стабильный релиз (Jackson 1.x).
2012 год — Выпуск Jackson 2.0 с полностью переработанным API.
Сейчас — Jackson активно поддерживается, последняя версия (на 2024 год) — Jackson 2.16+.
Где используется Jackson
Сегодня Jackson используется практически везде, где в Java-приложениях требуется работа с JSON:
В REST API на базе Spring Boot и других фреймворков
В микросервисной архитектуре для обмена данными между сервисами
При интеграции с внешними веб-сервисами
Для сохранения и чтения конфигураций в формате JSON
В тестировании при генерации или проверке JSON-структур
Многие крупные компании и проекты строят на Jackson свою работу с данными. Более того, Spring Framework по умолчанию использует Jackson для сериализации и десериализации JSON, что дополнительно укрепило его позиции.
Почему Jackson так популярен
Есть несколько причин, почему Jackson стал стандартом:
Производительность
Jackson славится своей высокой скоростью работы, что критично при обработке больших объемов данных.
Простота использования
Для базовых операций достаточно создать один экземпляр ObjectMapper и вызвать пару методов. В большинстве случаев не нужно писать дополнительный код.
Гибкость
Jackson поддерживает тонкую настройку через аннотации и внешнюю конфигурацию. Можно легко адаптировать сериализацию под любые требования.
Расширяемость
Jackson предлагает богатую экосистему модулей: поддержка новых типов данных (например, Java 8 Date/Time API), работа с CBOR, XML, YAML и другими форматами.
Интеграция с фреймворками
Такие популярные решения как Spring Boot, Dropwizard и многие другие "из коробки" работают с Jackson.
#Java #Training #Medium #Jackson
В мире Java-программирования одна из самых частых задач — это работа с JSON. Будь то обмен данными между сервером и клиентом, интеграция с внешними API или хранение конфигураций — JSON стал стандартом де-факто. Именно для этих целей и был создан Jackson.
Что такое Jackson
Jackson — это одна из самых популярных Java-библиотек для работы с JSON. Она позволяет сериализовать объекты Java в JSON и обратно — десериализовать JSON в Java-объекты. Причем делает это быстро, эффективно и с минимальными накладными расходами.
Быстрая история
2007 год — Джейсон Т. Смит (Jason T. Smith) начал разработку Jackson.
2009 год — Первый стабильный релиз (Jackson 1.x).
2012 год — Выпуск Jackson 2.0 с полностью переработанным API.
Сейчас — Jackson активно поддерживается, последняя версия (на 2024 год) — Jackson 2.16+.
Где используется Jackson
Сегодня Jackson используется практически везде, где в Java-приложениях требуется работа с JSON:
В REST API на базе Spring Boot и других фреймворков
В микросервисной архитектуре для обмена данными между сервисами
При интеграции с внешними веб-сервисами
Для сохранения и чтения конфигураций в формате JSON
В тестировании при генерации или проверке JSON-структур
Многие крупные компании и проекты строят на Jackson свою работу с данными. Более того, Spring Framework по умолчанию использует Jackson для сериализации и десериализации JSON, что дополнительно укрепило его позиции.
Почему Jackson так популярен
Есть несколько причин, почему Jackson стал стандартом:
Производительность
Jackson славится своей высокой скоростью работы, что критично при обработке больших объемов данных.
Простота использования
Для базовых операций достаточно создать один экземпляр ObjectMapper и вызвать пару методов. В большинстве случаев не нужно писать дополнительный код.
Гибкость
Jackson поддерживает тонкую настройку через аннотации и внешнюю конфигурацию. Можно легко адаптировать сериализацию под любые требования.
Расширяемость
Jackson предлагает богатую экосистему модулей: поддержка новых типов данных (например, Java 8 Date/Time API), работа с CBOR, XML, YAML и другими форматами.
Интеграция с фреймворками
Такие популярные решения как Spring Boot, Dropwizard и многие другие "из коробки" работают с Jackson.
#Java #Training #Medium #Jackson
Что выведет код?
#Tasks
import java.util.*;
public class Task020525 {
public static void main(String[] args) {
TreeSet<Integer> tree = new TreeSet<>();
tree.add(5);
tree.add(3);
tree.add(8);
tree.add(3);
System.out.println(tree.floor(4) + " " + tree.ceiling(4));
}
}
#Tasks
Вопросы с собеседования 👩💻
Какой метод возвращает текущую версию Java?
Какой метод возвращает текущую версию Java?
Anonymous Quiz
38%
System.javaVersion()
19%
Runtime.version()
14%
Java.version()
21%
System.getProperty("java.version")
7%
"Идея дай мне Java"
Jackson. Быстрая сериализация и десериализация объектов
Работа с JSON в Jackson строится вокруг главного класса — ObjectMapper. Это основной инструмент для конвертации Java-объектов в JSON и обратно.
ObjectMapper: главный рабочий инструмент
ObjectMapper — это универсальный класс, предоставляющий удобные методы для:
Сериализации (преобразования объекта в JSON)
Десериализации (преобразования JSON обратно в объект)
Создание экземпляра максимально простое:
Сериализация объекта в JSON
Сериализация — это процесс превращения Java-объекта в строку JSON.
Рассмотрим пример:
Результат работы программы:
Десериализация JSON в объект
Десериализация — это обратный процесс: превращение JSON-строки в объект Java.
Пример:
На что обратить внимание
🔹 Обязательны геттеры/сеттеры или public-поля (иначе Jackson не увидит поля).
🔹 Пустой конструктор нужен для десериализации.
🔹 Имена полей JSON и Java должны совпадать (или использовать аннотации, об этом в след. посте).
🔹 Обработка исключений — методы writeValueAsString() и readValue() могут выбросить JsonProcessingException.
#Java #Training #Medium #Jackson
Работа с JSON в Jackson строится вокруг главного класса — ObjectMapper. Это основной инструмент для конвертации Java-объектов в JSON и обратно.
ObjectMapper: главный рабочий инструмент
ObjectMapper — это универсальный класс, предоставляющий удобные методы для:
Сериализации (преобразования объекта в JSON)
Десериализации (преобразования JSON обратно в объект)
Создание экземпляра максимально простое:
ObjectMapper objectMapper = new ObjectMapper();
Сериализация объекта в JSON
Сериализация — это процесс превращения Java-объекта в строку JSON.
Рассмотрим пример:
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
User user = new User("Alice", 25);
String jsonString = objectMapper.writeValueAsString(user);
System.out.println(jsonString);
}
}
class User {
private String name;
private int age;
public User() {
}
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Геттеры и сеттеры обязательны для Jackson
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Результат работы программы:
{"name":"Alice","age":25}
writeValueAsString превращает объект в строку JSON. Можно также сохранить результат сразу в файл через writeValue(new File("user.json"), user).
Десериализация JSON в объект
Десериализация — это обратный процесс: превращение JSON-строки в объект Java.
Пример:
String jsonInput = "{\"name\":\"Bob\",\"age\":30}";
User user = objectMapper.readValue(jsonInput, User.class);
System.out.println(user.getName()); // Выведет: Bob
System.out.println(user.getAge()); // Выведет: 30
readValue принимает JSON и класс, в который нужно преобразовать данные. Важно, чтобы у целевого класса был публичный конструктор без параметров и стандартные геттеры/сеттеры.
На что обратить внимание
🔹 Обязательны геттеры/сеттеры или public-поля (иначе Jackson не увидит поля).
🔹 Пустой конструктор нужен для десериализации.
🔹 Имена полей JSON и Java должны совпадать (или использовать аннотации, об этом в след. посте).
🔹 Обработка исключений — методы writeValueAsString() и readValue() могут выбросить JsonProcessingException.
#Java #Training #Medium #Jackson
Всем привет! 👋
Пользуясь длинными выходными размышляю о дальнейшей судьбе нашего канала.🧑💻
Пытаюсь понять зачем он вообще нужен Вам и мне, какое будущее его ждет?
Ведь изначально, канал был задуман как обучающее подспорье для новичков в Java (и скорее для себя самого), где вообще не зная ничего, можно было что-то подчерпнуть о программировании на Java.
Но сейчас я ушел за middle-уровень, публикуя посты о сложных технологиях, библиотеках и идеях, опираясь на Ваши вопросы и предлжения.
Правильно ли это?
Или стоит немного откатиться к основам, делать посты для совсем новичков, желающих с нуля окунуться в мир программирования?
Возможно, попробовать как-то это совместить?🤔
Кроме того, побродив по множеству тематических каналов, аналогичных нашему, я понял, что изначально задал каналу жесткий формальный стиль. Посты пишутся в строгом понятийном стиле, чтобы вместить максимум информации о вопросе в возможности одного поста, упуская эмоциональную составляющую, личное мнение...
Правильно ли это? Я не знаю...🤔
Может стоит добавлять больше смайлов на каждую строчку‼️
Или какой-то бредовой отсебятины типа: "Ой, я этим пользовался, мне зашло и даже работает"?🤦♂️
Или вообще уйти от концепции обучения, оставив лишь личный блог о моем мнении, историях успехов и провалах? А может сделать вообще солянку про IT в целом?
Все эти вопросы я скорее адресую к тем подписчикам, кто недавно присоединился к каналу и возможно хочет уйти.
Просто интересно, что нужно людям, чего они ищут на канале, почему заходят и потом уходят?
Но и тех кто со мной с самого начала, я попрошу высказаться...🤝
А между тем 26.05 каналу год🎂
Может есть идеи как это отпраздновать?
Ну и подытоживая, скажу, что сегодня будет день посвященный вопросам и ответам.
Хотелось бы узнать мнение всех подписчиков👍
Пользуясь длинными выходными размышляю о дальнейшей судьбе нашего канала.
Пытаюсь понять зачем он вообще нужен Вам и мне, какое будущее его ждет?
Ведь изначально, канал был задуман как обучающее подспорье для новичков в Java (и скорее для себя самого), где вообще не зная ничего, можно было что-то подчерпнуть о программировании на Java.
Но сейчас я ушел за middle-уровень, публикуя посты о сложных технологиях, библиотеках и идеях, опираясь на Ваши вопросы и предлжения.
Правильно ли это?
Или стоит немного откатиться к основам, делать посты для совсем новичков, желающих с нуля окунуться в мир программирования?
Возможно, попробовать как-то это совместить?
Кроме того, побродив по множеству тематических каналов, аналогичных нашему, я понял, что изначально задал каналу жесткий формальный стиль. Посты пишутся в строгом понятийном стиле, чтобы вместить максимум информации о вопросе в возможности одного поста, упуская эмоциональную составляющую, личное мнение...
Правильно ли это? Я не знаю...
Может стоит добавлять больше смайлов на каждую строчку
Или какой-то бредовой отсебятины типа: "Ой, я этим пользовался, мне зашло и даже работает"?
Или вообще уйти от концепции обучения, оставив лишь личный блог о моем мнении, историях успехов и провалах? А может сделать вообще солянку про IT в целом?
Все эти вопросы я скорее адресую к тем подписчикам, кто недавно присоединился к каналу и возможно хочет уйти.
Просто интересно, что нужно людям, чего они ищут на канале, почему заходят и потом уходят?
Но и тех кто со мной с самого начала, я попрошу высказаться...
А между тем 26.05 каналу год
Может есть идеи как это отпраздновать?
Ну и подытоживая, скажу, что сегодня будет день посвященный вопросам и ответам.
Хотелось бы узнать мнение всех подписчиков
Please open Telegram to view this post
VIEW IN TELEGRAM
Каким, по Вашему мнению, уровнем знаний в Java вы обладаете? 🧑💻
Anonymous Poll
9%
Я полный новичок в программировании 😆
26%
Я начинающий, "Hello World" уже не раз выводил 💪
47%
Я настоящий junior, знаю Java Core и могу писать простой код ✌️
11%
Я уже наверняка middle. Я знаю Spring и Quarkus, Redis и Kafka мои неплохие знакомые. ☝️
0%
Я Senior. Уверенно спроектирую и напишу практически любое приложение на Java. 😎
9%
Я не знаю кто я. Наверно, я есть Грут 🌴
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему и зачем вы пришли на канал? 🧑💻 (можно выбрать несколько вариантов)
Anonymous Poll
30%
Я хочу с нуля изучить Java
50%
Я хочу получить информацию о Java уровня junior
41%
Меня заинтересовало что тут разбирают вопросы по Java уровня middle+
25%
Я ищу новый круг знакомых, для совместного обучения 🤝
23%
Я ищу ментора, который укажет мне как и что учить в Java
34%
Я искал канал-библиотеку, чтоб легко найти ответ на любой вопрос по Java 📕
23%
Мне понравились видео с каналов 👍
20%
Я сам не знаю, что я тут забыл 😁 Пока!
2%
Я пришел поглумиться над новичками 😆
Как вы оказались на этом канале? 🧑💻
Anonymous Poll
11%
Я нашел его в JavaRush 🎮
31%
Я натолкнулся на него в YouTube 🎬
0%
Я пришел из RuTube 🚩
13%
Мне посоветовали друзья 👙
24%
Я нашел канал через Телеграм 💭
18%
Я не помню!🍸
2%
Мой вариант в комментариях
Что Вам нравится в канале? (несколько вариантов) 🧑💻
Anonymous Poll
71%
Подробность рассматриваемых тем
53%
Последовательность в рассмотрении тем
53%
Разнообразность постов
50%
Прагматичный подход без смайлов и идиотизма
71%
Отсутствие инфо-цыганства, мне никто ничего не продает
50%
Отсутствие рекламы
0%
Мой вариант в комментариях!
Что Вам не нравится на канале (несколько вариантов) 🧑💻
Anonymous Poll
9%
Слишком подробный разбор, хотелось бы лаконичную выжимку
52%
Слишком много контента. Не успеваю читать
0%
Админ сам ничего не умеет, а пытается учить
9%
Бесполезные встречи. Можно просто делать видео о рассматриваемом вопросе
30%
Лишние посты о биографиях и фактах
17%
Отсутствие обучающих постов в выходные. Мне нужно каждый день!
9%
Мой вариант в комментариях!
This media is not supported in your browser
VIEW IN TELEGRAM
Сеньор-инфоцыган, который не согласился на офферы в Google, Amazon и Uber, чтобы обучить ТЕБЯ
https://t.me/Java_for_beginner_dev
#Mems
https://t.me/Java_for_beginner_dev
#Mems