- 博客(56)
- 收藏
- 关注
原创 Spring Cloud Gateway 雪崩了,我 TM 人傻了
问题现象与背景昨晚我们的网关雪崩了一段时间,现象是:1.不断有各种微服务报异常:在写 HTTP 响应的时候,连接已经关闭:reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response 复制代码2.同时还有请求还没读取完,连接已经关闭的异常:org.springframework.http.converter.HttpMessageNotReadable
2021-09-27 22:02:07 699
原创 实战!聊聊如何解决MySQL深分页问题
我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下。本文将分4个方案,讨论如何优化MySQL百万数据的深分页问题,并附上最近优化生产慢SQL的实战案例。公众号:捡田螺的小男孩limit深分页为什么会变慢?先看下表结构哈:CREATETABLEaccount(idint(11)NOTNULLAUTO_INCREMENTCOMMENT'主键Id',namevarchar(255)DEFAULTNULLCOMMENT...
2021-09-27 21:59:55 240
原创 面试官:JVM三种核心内容有?并从实战角度解析!
01 前言这章节主要从实战角度方面,去解读JVM。问:JVM三种核心内容有哪一些?答:类加载机制+JVM调优实战+代码优化02 类加载机制Java源代码经过编译器编译成字节码之后,最终都需要加载到虚拟机之后才能运行。虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java 类型,这就是虚拟机的类加载机制。2.1 类加载时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(L
2021-09-15 14:35:16 818
原创 【JVM系列8】JVM知识点总览
前言我理解JVM应该属于Java高阶的知识,之前是通过博客学习这块知识,后来对照着《深入理解Java虚拟机》书籍把重点知识又过了一遍。经过大半个月的学习,我给出我学习的感受。我感觉其实通过博客学习这块知识其实就够了,因为博客中的知识直击JVM的靶心,基本都是干货,但是对于一些实际的场景用例,博客给的示例不多,这个是通过博客学习唯一的缺点。通过书籍学习JVM知识,真的感觉这本书太厚了,不建议新人学习,因为这本书也就前5章的内容比较干货,后面的大部分知识可以直接跳过,或者作为选学的知识,比如你学习书
2021-09-15 14:34:22 181
原创 设计模式-责任链(职责链)模式及责任链设计模式的应用
1.什么是责任链设计模式责任链设计模式主要构成有抽象处理者、具体处理者、客户类,在处理请求的时候,将请求通过客户类发送至处理链路上,这样所有处理对象都有机会处理请求,使发送者与接受者解耦在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。2.责任链模式的优点/缺点和使用场景使用责任链模式的优点:发送者与接收方的处理对象类之间解耦 封装每个处理对象,处理类的最小封装原则 可以任意添加处理对象,调整
2021-09-15 14:33:16 265
原创 两张图让你快速读懂JVM字节码指令
(一)概述很多人可能会觉得JVM字节码很神秘,我们写的一行行代码放到底层竟然可以用一串16进制的数字保存。再到计算机底层竟然可以用0和1执行如何复杂的代码。JVM的设计确实十分巧妙,但对我们几乎所有开发者来说,这些底层的内容我们已经不需要再去掌握了,因此今天我们不去讲JVM字节码究竟是怎么设计的,我们通过最简单的方法来快速读懂JVM字节码。(二)什么是字节码我们写的Java代码经过编译之后就会变成一个个.class文件,这就是字节码文件。用一些专门打开.class的工具打开后,可以发现里面就是一
2021-09-15 14:32:46 156
原创 详细介绍java关键字enum
今天,咱们来聊一下枚举enmu。枚举作为JDK1.5引入了新的类型,相信大家都不陌生,那么,具体有哪些用法呢,下面展开讲讲:一、定义常量在1.5之前,我们定义一个常量,通常用final关键字。而有了枚举之后,我们可以将一类常量定义在枚举类中,这样方便查找,代码逻辑也更清晰。如:public enum ErrorCodeEnum { CODE_ACCOUNT_ERROR, CODE_TOKEN_ERROR, CODE_PARAM_EMPTY, CODE_PARAM_ERROR,
2021-09-15 14:27:05 213
原创 Java 17 正式发布,Oracle推出免费JDK许可证,Spring 6 以 Java17为基准
一个小时前,JAVA 17 正式发布,这是一个LTS(长期支持)版本,带来了不少有用的新特性。关于Java 17 的一些新特性,胖哥已经在往期的文章中进行了介绍,这里就不再赘述了,有兴趣的可以移步文章 Java 17 新特性确定。Oracle 免费 JDKJAVA 17 带来的不仅仅是新功能。更快的 LTS 节奏和免费的 Oracle JDK 使其成为有史以来支持最好的现代版本。Oracle JDK收费为人诟病,此次Oracle推出了Free Java License ,大致摘要:Oracl..
2021-09-15 14:15:19 870
原创 Java17 新特性确定,Java之父:终于可以和一个长达25年的漏洞说再见了
Java 17 目前已经进入Rampdown Phase One阶段,所有的功能特性都已经被冻结。这说明Java 17的新特性已经定了,不会再增加新的JEP(JDK增强建议)。之所以关心Java 17是因为和Java 8、Java 11一样它是下一个LTS版本。发布日程距离Java 17发布的时间已经越来越近了。Rampdown Phase One阶段将持续近一个月。接下来的工作将以JEP3为基准,对可能出现的Bug进行修复、延迟修复、甚至是将Bug所在特性从版本中移除。大家关心的Java17发布时
2021-09-15 14:14:23 111
原创 面试官讲你这15道题都不会,你怎么来吊打我
前言1. redo log是什么? 为什么需要redo log?redo log 是什么呢?redo log 是重做日志。 它记录了数据页上的改动。 它指事务中修改了的数据,将会备份存储。 发生数据库服务器宕机、或者脏页未写入磁盘,可以通过redo log恢复。 它是Innodb存储引擎独有的为什么需要 redo log?redo log主要用于MySQL异常重启后的一种数据恢复手段,确保了数据的一致性。 其实是为了配合MySQL的WAL机制。因为MySQL进行更新操作,为了能够
2021-09-15 13:49:10 186
原创 设计模式七大原则(哪七个)及代码示例,请看本篇文章
七大原则:单一职责原则; 接口隔离原则; 依赖倒转原则; 里氏替换原则; 开闭原则ocp; 迪米特法则; 合成复用原则。设计模式其实包含了面向对象的精髓,封装、继承、多态。一、单一职责原则对于类来说,一个类应该只负责一项职责。假设A负责两个不同的职责1和2,如果1的内容需要改变,影响了2,那可能2会执行错误,所以需要将A分为两个类。1.1 示例public class SingleResponsibility1 { public static void mai
2021-09-14 16:14:41 203
原创 「难点-核心-遗漏」Java线程状态流转及生命周期的技术指南
前提介绍本章主要介绍相关线程声明周期的转换机制以及声明周期的流转关系以及相关AQS的实现和相关的基本原理,配合这相关官方文档的中英文互译的介绍。线程状态流转及生命周期当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪/可运行状态(Runnable)、阻塞(Blocked)和等待(Wait)、时间等待(Time_wait)、终止状态(Terminate)六种状态。尤其是当线程启动以后,它不能一直“霸占”着CPU独自
2021-09-14 16:14:03 132
原创 JVM内存区域以及各区域的内存溢出异常,内存分代策略,垃圾收集
本文整理自周志明老师的《深入理解Java虚拟机-JVM高级特性与最佳实践》第3版的第二章和第三章。加上了一些网上拼拼凑凑的图片,个人认为很多博客复制来复制去,最后的东西都看不懂,所以从书里码了一下知识点,也用作自己记忆。一、一个命令上面的结果显示了 jvm 的模式:Client VM(-client),为在客户端环境中减少启动时间而优化;Server VM(-server),为在服务器环境中最大化程序执行速度而设计。在文件路径:jdk-11.0.7+10\lib 下面可以更改 jv
2021-09-14 16:13:29 264
原创 类文件结构、JVM的类加载过程、加载机制、加载器、双亲委派模型
一、类文件的结构我们都知道,各种不同平台的虚拟机,都支持 “字节码 Byte Code” 这种程序存储格式,这构成了 Java 平台无关性的基石。甚至现在平台无关性也开始演变出 “语言无关性” ,就是其他语言也可以运行在 Java 虚拟机之上,比如现在的 Kotlin、Scala 等。实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java 虚拟机步包括 Java 语言在内的任何语言绑定,他只和 “Class 文件” 这种特定的二进制文件格式所关联,Class 文件中包含了 Java 虚拟机指令集
2021-09-14 16:12:38 135
原创 juc包:使用 juc 包下的显式 Lock 实现线程间通信
一、前置知识线程间通信三要素:多线程+判断+操作+通知+资源类。上面的五个要素,其他三个要素就是普通的多线程程序问题,那么通信就需要线程间的互相通知,往往伴随着何时通信的判断逻辑。在 java 的 Object 类里就提供了对应的方法来进行通知,同样的,保证安全的判断采用隐式的对象锁,也就是 synchronized 关键字实现。这块内容在:java多线程:线程间通信——生产者消费者模型已经写过。2|0二、使用 Lock 实现线程间通信那么,我们知道 juc 包里提供了显式的
2021-09-14 16:12:00 87
原创 java字符串之理论重点
1、简单概述一直以来,对String这个字符串类都是心存疑惑的,也不知道如何来进行解决。最近花点时间看了下别人的博客来研究一下,觉得挺有意思的,所以将此来记录下来。String将会牵扯到堆和常量池,字符串常量池在JDK8中是存在于堆中的,是属于堆的一部分。引入:String str = "计算机";"computer"也是一个字符串对象,只不过上面创建的这个会存在于字符串常量池中,返回来的是在字符串在常量池中的地址。String str = "计算机";String str
2021-09-14 16:10:52 401 1
原创 Java入门姿势 三大特性之一多态性
多态(polymorphism)是面向对象三大特征之一。同一行为,通过不同的子类,可以体现出来的不同的形态。多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。 比如:同样是调用人的“休息”方法,张三是睡觉,李四是旅游,王五是听音乐; 同样是调用人“吃饭”的方法,中国人用筷子吃饭,英国人用刀叉吃饭,印度人用手吃饭。编译器类型指的是‘=’左边的类型,运行期类型指的是‘=’右边的类型。当有继承关系时,可能发生编译期类型和运行期类型不同的情况,即编译期类型
2021-09-14 16:08:35 93
原创 Idea的springMVC项目,jsp页面的EL表达式失效问题,数据显示不出来。(已解决)
一、问题在做一个demo,因为很久没有重新用 jsp 页面直接 EL 取数据了,遇到了问题,记录一下。简单来说就是用 EL 在 jsp 页面里面从域中用 ${ xxx } 取数据:但是浏览器对应页面的位置是空白。 也没有显示 ${ xxx } 这个表达式的字符串本身。二、前置条件:已经引入了jstl和taglibs的依赖; 引入依赖之后在 jsp 页面的头部需要添加命名空间,也就是<%@ taglib prefix="c" uri="Oracle Java Technolo...
2021-09-14 16:05:01 1874 3
原创 java的各种集合为什么不安全(List、Set、Map)以及代替方案
我们已经知道多线程下会有各种不安全的问题,都知道并发的基本解决方案,这里对出现错误的情况进行一个实际模拟,以此能够联想到具体的生产环境中。1|0一、List 的不安全1|11.1 问题看一段代码:public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < 3; i++){ new Th..
2021-09-14 15:58:20 326
原创 计算机网络:TCP协议建立连接的过程为什么是三次握手而不是两次?【对于网上的两种说法我的思考】
网上关于这个问题吵得很凶,但是仔细看过之后我更偏向认为两种说的是一样的。首先我们来看看 TCP 协议的三次握手过程如上图所示:解释一下里面的英文:里面起到作用的一些标志位就是TCP报文首部里的内容,ACK确认标志位,SYN同步标志位,ack确认号; 两端的状态CLOSED 就是连接关闭状态,LISTEN状态就是监听状态,SYN-SENT就是同步已发送状态,SYN-RCVD就是同步已接受状态,ESTABLISHED就是连接已建立状态。三报文挥手的过程如下:客户端发送连接请求:头部S
2021-09-14 15:57:37 376
原创 Java并发之JUC的通关文牒
一、简介java5.0提供了 java.util.concurrent (简称juc)此包中增加了并发编程中很常用的实用工具类,用于定义类似于线程的自定义系统,包括线程池、异步io和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的Colletion实现等。二、volatile关键字 内存的可见性 内存可见性(Memory Visibility):是指在多个线程操作共享数据时,一个线程在使用共享数据时,而另一个线程修改了共享数据的状态,这时候需要确保该线程修改完共享数
2021-09-13 19:53:54 153
原创 深挖技术栈(第四期) 之 JUC学习笔记(1)
线程的生命周期和状态?Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4 节)。线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示(图源《Java 并发编程艺术》4.1.4 节):订正(来自issue736):原图中 wait 到 runnable 状态的转换中,join实际上是Thread类的方法,但这里写成了Object。由上图可以看出:线程创建之
2021-09-13 19:53:01 405
原创 JDBC是如何打破双亲委派模式的
JDBC的DriverManager与SPI机制类加载的机制以及双亲委派机制的介绍可以参考 JVM类加载机制在JDBC 4.0之后,我们不再需要调用Class.forName()方法去加载驱动类。只需要将对应的驱动类jar包放到工程的class path下,驱动类会自动被加载。这种自动加载的技术被称为SPI(Service Privider Interface)[3],SPI可以简单理解为:为了解耦,从配置里获取某个接口的具体实现类。各个数据库也都更新支持了这个特性。包括MySQL-JDBC等,
2021-09-13 19:52:14 1366 1
原创 深入理解Java虚拟机系列 --10 垃圾回收篇01 --垃圾回收相关算法
因为热爱所以坚持,因为热爱所以等待。熬过漫长无戏可演的日子,终于换来了人生的春天,共勉!!!垃圾回收篇之垃圾回收相关算法前言:(1). 判断对象存活的两种方式(引用计数算法、枚举根节点做可达性分析) (2). 标记阶段(引用计数法、枚举根节点做可达性分析) (3). 清除阶段(标记复制算法、标记清除算法、标记整理(压缩)算法、分代收集、增量收集算法、分区算法)1.引用计数算法①. 原理:假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引用失败时,对象A的引用计数器
2021-09-13 19:51:30 85
原创 Jdk动态代理与Cglib动态代理
前言在前面的spring中,提到了aop的原理就是使用了动态代理,这篇文章就写一下jdk代理和cglib代理。先在这里贴一下相关的需要代理的对象和接口。首先是接口:public interface TestDao { void test();}复制代码然后是实现类:public class TestDaoImpl implements TestDao { @Override public void test() { System.out.println("
2021-09-13 19:50:49 3524 1
原创 java 并发编程中的ConcurrentModificationException 异常问题
云渲染服务中的 java.util.ConcurrentModificationException 异常问题针对最近云渲染服务中的出现的一个问题进行反思与回顾回调视频渲染进度问题在修改过回调进度的 url 后,启用了之前的代码片段。导致之前的漏洞被爆出:在多线程编程中,直接使用 hashmap 来保存当前的渲染任务,而不进行一些必要的线程间的互斥与同步操作,导致在一个线程通过迭代器遍历 hashmap 时,另一个线程同时修改 hashmap,导致程序抛出java.util.Concurrent
2021-09-13 19:50:07 284
原创 ReentrantLock源码分析
功能介绍ReentrantLock可重入锁,Lock锁的具体实现类,具有与synchronized锁相同的基本行为和语义的可重入互斥锁,但具有扩展功能。ReentrantLock锁由最后成功锁定且未释放的线程拥有。当锁不属于任何线程时,调用锁的线程将返回并成功获取锁。如果当前线程已经拥有锁,该方法将立即返回。简单来说就是和synchronized关键字具有相同功能,可对共享资源进行锁定,以确保共享资源访问的安全性。如何使用class X { private final Reent
2021-09-13 19:46:57 95
原创 Java 多线程 : JUC 并发工具原理
一 . 前言趁着有空 , 赶紧把之前欠的债还上 . 这是多线程一阶段计划的最后一篇 , 后续多线程会转入修订和深入阶段 . 彻底吃透多线程.二. 工具介绍之前说 AQS 的时候曾经提到过这几个类 , 这几个类有一些各自的特点 , 很符合特定的场景 , 之前在生产上用的还挺舒服.我们一般使用的并发工具有四种 :CyclicBarrier : 放学一起走允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point) 让一组线程到达一个屏障时被阻塞,直到最
2021-09-13 19:45:24 187
原创 自己工作中一直接触不到高并发、分布式怎么办?
背景面试总会遇到一些关系高并发、分布式的问题,可是自己工作中不接触,自学又不深入,这可怎么办?分布式架构的知识太庞大了,小匠也是管中窥豹,结合自己的经验阐述一下自己的想法。结合我自己的一些面试经历,从分布式系统的构建体系说一下可能遇到的问题,涉及的技术和解决方案,这便是分布式系统的重点,也是面试的重点。现象我们从业务场景入手,用户越来越多,单个系统的内存、磁盘、CPU无法满足业务的需求的时候,需要把单机变成多机来解决问题,那么就需要引入分布式横向的扩充机器以增加吞吐量。针对不同的业务的需
2021-09-10 16:09:05 151
原创 线上服务CPU 100%, Java heap space一键定位,覆盖多个场景
案例分析1: 用户反馈系统严重卡顿,后台日志提示Broken Pipe,数据库CPU飙升至80%背景下午3点,用户反馈系统严重卡顿,后台日志提示Broken Pipe,数据库CPU达80%,重启服务之后,不到10分钟,还是会出现同样的情况,系统无法使用,阻塞用户日常工作,用户抱怨声音很大,要求立刻解决.过程下午3:30,我连上生产环境的DB,执行show full processlist语句,查看当前线程处理情况,定位到Command列,发现有一条SQL一直处理Query的状态,于是将该条记
2021-09-10 16:08:27 433
原创 聊一下 RocketMQ 的消息存储之 MMAP
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0) 本文作者: Nicksxs 创建时间: 2021-09-05 本文链接: 聊一下 RocketMQ 的消息存储之 MMAP这是个很大的话题了,可能会分成两部分说,第一部分就是所谓的零拷贝 ( zero-copy ),这一块其实也不新鲜,我对零拷贝的概念主要来自这篇文章,个人感觉写得非常好,在 rocketmq 中,最大的一块存储就是消息存储,也就是 Co
2021-09-10 16:07:46 304
原创 详细介绍java关键字static的使用
大家好,这里是可傥。继final关键字之后,今天介绍static关键字。 static关键字,意思为静态的。在java中,修饰变量(不可为局部变量,局部变量生命周期随着方法的结束而结束,而static修饰的是全局),方法,构造静态代码块,修饰类(为内部类),jdk1.5之后的静态导包(可读性较差)如何使用呢?咱们分别来介绍。一、修饰变量static修饰变量的时候,也可以叫做类变量或者静态变量。与非static修饰的实例变量不同的是,类变量属于类,为所有对象共有。而实例变量属于对象,为该对象私有。那如
2021-09-10 16:06:59 149
原创 并发编程之:Thread.join()和CountDownLatch
大家好,我是小黑,一个在互联网苟且偷生的农民工。先问大家一个问题,在主线程中创建多个线程,在这多个线程被启动之后,主线程需要等子线程执行完之后才能接着执行自己的代码,应该怎么实现呢?Thread.join()看过我 并发编程之:线程 的朋友应该知道怎么做,在Thread类中有一个方法join(),这个方法是一个阻塞方法,当前线程会等待调动join()方法的线程死亡之后再继续执行。我们通过代码来看看执行结果。public class JoinDemo { public sta
2021-09-10 16:06:01 261
原创 一文说清BIO、NIO、AIO不同IO模型演进之路
引言Netty作为高性能的网络通信框架,它是IO模型演变过程中的产物。Netty以Java NIO为基础,是一种基于异步事件驱动的网络通信应用框架,Netty用以快速开发高性能、高可靠的网络服务器和客户端程序,很多开源框架都选择Netty作为其网络通信模块。本文主要通过分析IO模型的优化演进之路,比较不同IO模型的异同,让大家对于Java IO模型有着更加深刻的理解,我想这也是Netty如何实现高性能网络通信理解的重要基础。话不多说,我们赶紧发车了。PS:文末有是彩蛋哦!IO模型1、什么
2021-09-10 16:05:20 219
原创 深入理解Java系列 | 线程基础
在上一篇文章深入理解Java系列 | 并发编程基础中,我们主要整理了并发编程的基础知识以及三大核心问题,并了解了线程是并发编程的重要实现方式,所以本文我们主要来了解一下Java中线程的基础知识。现在开始吧!1. 什么是线程?在上一篇文章深入理解Java系列 | 并发编程基础中我们已经知道:线程是进程的组成部分,一个进程至少有一个线程组成。一个进程中可以创建多个线程,每个线程拥有各自的计数器、堆栈和局部变量等属性,并且能够访问进程共享的内存变量。线程也是操作系统进行任务执行和调度的基本单位,操作系
2021-09-10 16:04:38 129
原创 java 设计模式实战,装饰者模式之不用改变也能变强
什么是装饰者模式网络百科如下:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。设计模式和编程语言无关,但是二当家的依然用Java语言去实战举例。装饰者模式中的角色抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加责任的对象。 具体构件(Concrete Component)角色:定义一个将要接收附加责任的类。 装饰(Decorator)角色:持有一个构件(Compone
2021-09-10 16:04:00 343
原创 Java接口多实现还能这样玩
前言Java中的接口类通常是为了提取共同点,规范实现,便于阅读,处理好接口类多实现并提供优雅的命中具体实现,能够帮助我们简化代码,提高可读性;下面介绍几种用起来很舒服的多实现方式及调用方式供大家参考。示例枚举实现接口定义public interface Breakfast { void eat();}复制代码实现public enum BreakfastEnum implements Breakfast { Beijing("北京") {
2021-09-10 16:02:54 475
原创 RocketMQ原理-自动创建Topic机制
背景RocketMQ 源码版本 4.9.1-SNAPSHOT下载了 RocketMQ 源码,在本地 IDE 中正常启动了 Broker 服务 和 NameServer 服务。生产者发送消息的 demo 如下在发送消息的过程中报错了,报错信息如下从报错信息可以看到: **Topic 对应的路由信息没有正常获取到(Topic 名称为 TopicTest)。**也难怪,Broker 启动后没有人为地去创建 Topic 对应的队列,发送消息自然没办法获取到路由信息。想到 Brok
2021-09-09 22:06:01 3256
原创 Java经典算法详解-不来看看可惜咯
正在学Java的各位这几种Java编程中的经典算法千万不要错过,算法在Java开发中会起到非常重要作用,了解这些常用的算法会让你在工作中达到事半功倍的效果!看看今天为大家整理经典算法详解:一、插入排序这是一个很好的理解打麻将或扑克。例如,如果左手中有一套卡1、2、4、7和一张3,则从右向左将此卡插入2、4是来验证否正确。一次插入排序的操作过程:将待插元素,依次与已排序好的子数列元素从后到前进行比较,如果当前元素值比待插元素值大,则将移位到与其相邻的后一个位置,否则直接将待插元素插入当前元
2021-09-09 22:05:28 128
原创 mica-mqtt 1.1.1 发布,大量细节优化和修复
一、前言在连肝了一个多月之后,mica-mqtt 迎来了一个比较稳定的版本。在这一个多月里肝了 7 个正式版,100 多次提交。由衷感谢那些在关注、star、使用和反馈问题的同学。二、简介mica-mqtt 基于 t-io 实现的简单、低延迟、高性能 的 mqtt 物联网开源组件。使用详见 mica-mqtt gitee 源码 mica-mqtt-example 模块。三、功能支持 MQTT v3.1、v3.1.1 以及 v5.0 协议。 支持 websocket mqtt 子协议(支
2021-09-09 22:04:28 754
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人