# javastudy
**Repository Path**: LHDAXIE/javastudy
## Basic Information
- **Project Name**: javastudy
- **Description**: java 学习零碎整合
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2022-06-20
- **Last Updated**: 2025-05-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# java-study
#### 介绍
java 学习
#### 模块
1. Java-based —— Java基础
- 01_jdk和jre之间的区别
- 02_==和equals之间的比较
- 03_两个对象的hashCode()相同,则equals()也一定为true,对吗
- 04_java中final的作用
- 05_java中的Math.round(-1.5)等于多少
- 06_String属于基础的数据类型吗
- 07_String、StringBuffer、StringBuilder的区别
- 08_String_str="i"与new_String("i")的区别
- 09_字符串的反转
- 10_String 类的常用方法都有那些
- 11_抽象类与普通类之间的区别
- 12_接口和抽象类有什么区别
- 13_java的io流练习
- 14_Files的常用方法
- 15_BIO、NIO、AIO区别(netty节扩展)
2. Java-Container —— Java容器
- 01_Java容器有哪些
- 02_Map相关
- 03_list相关
- 04_Iterator相关
3. springboot整合xxljob
4. springboot整合rocketmq
5. sorting-algorithm 排序算法模块
- BubbleSorting 冒泡排序算法
- InsertionSorting 插入排序算法
- SelectionSorting 选择排序算法
- MergeSorting 归并排序算法
- QuickSorting 快速排序算法
- BucketSorting 桶排序算法
- CountSorting 计数排序算法
- RadixSorting 基数排序算法
6. springboot整合swagger
可能遇到的问题:
```text
Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
```
原因:springboot版本太高
建议使用:
```text
springboot2.5.6 + swagger2.8.0
```
常用注解:Api开头
```text
作用于controller接口上
@Api(value = "user-controller")
作用于controller方法上
@ApiOperation(value = "用户登录")
作用于controller方法传参(单个参数)说明
@ApiImplicitParam(name = "user")
作用于controller方法传参(多个参数)说明
@ApiImplicitParams({
@ApiImplicitParam(name ="userId"),
@ApiImplicitParam(name ="password"),
@ApiImplicitParam(name = "newPassword")
})
作用于接口传参实体类
@ApiModel(value = "用户实体,存储用户相关字段")
作用于接口实体类字段说明
@ApiModelProperty(value = "用户Id", required = true)
```
7. springboot整合mongodb框架搭建
8. springboot整合eventbus
- 引入pom依赖
```xml
com.google.guava
guava
31.1-jre
```
- 配置EventBusUtil
- 使用前先进行注册
```text
EventBusUtil.register(new DevicesListener());
```
- 按对象类型进行总线监听
```text
@Subscribe
@AllowConcurrentEvents
public void getMetadata(DevicesData topicData)
{
//消息处理
}
```
9. spring整合mqtt
目前可以支持单个设备的不同topic分类处理
但是,在连接多个终端时,还需要再进行优化
ztbg项目用到的
- MqttConnectTwo
弊端:一个主机一个connect
优点:发送消息直接publish
```text
//通过topic发布消息
MqttConnectTwo.mqttClientTwo.publish("/v1/devices/" + MqttConnectTwo.PUB_TOPIC_FLAG + "/topo/add", message);
```
如果只是监听一个server的话,使用MqttConfig即可
如果需要监听多个主机,那么使用MqttConnect
10. springboot整合mqtt —— springboot-mqtt-start
使用步骤:
- 引入pom依赖,git上一个开源的项目
```xml
com.github.tocrhz
mqtt-spring-boot-starter
1.2.7
```
- 在配置文件配置主机信息
```yml
mqtt:
clients:
multi_client_1.uri: tcp://127.0.0.1:1883
multi_client_1.username: admin
multi_client_1.password: admin
```
可以订阅多个
- 订阅消息处理
```java
@Component
public class MqttMessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(MqttMessageHandler.class);
/**
* clientId = multi_client_1
* topic = test/+
*/
@MqttSubscribe(value = "test/+", clients = "multi_client_1")
public void sub(String topic, MqttMessage message, @Payload String payload) {
LOGGER.info("receive from : {}", topic);
LOGGER.info("message payload : {}", new String(message.getPayload(), StandardCharsets.UTF_8));
LOGGER.info("string payload : {}", payload);
}
}
```
使用小技巧,应用开关思想
```text
if (!bwssBusinessConfiguration.isSubscriberSwitch() || StringUtil.isEmpty(data))
{
return;
}
```
开关关了,就不再接收处理消息
- 发送消息
```text
public void send(String clientId, String topic, Object payload, int qos, boolean retained,
IMqttActionListener callback)
{
if (!configuration.isPublisherSwitch())
{
//log.info("MQTT消息发布开关已关闭");
return;
}
publisher.send(clientId, topic, payload, qos, retained, callback);
}
```
也可以应用开关思想
开源项目地址:https://github.com/tocrhz/mqtt-spring-boot-starter
11. data-structures-and-algorithms 数据结构与算法模块
- binarySearch 二分查找
12. Gof-23 设计模式
- 设计模式遵循六大原则
- 创建型模式(5节)
- 结构型模式(7节)
- 行为型模式(10节)