# 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节)