- 博客(87)
- 资源 (3)
- 收藏
- 关注
原创 MQTT协议介绍及wireshark抓包分析
MQTT 协议是当今世界上最受欢迎的物联网协议,没有之一。MQTT 协议为设备提供了稳定、可靠、简单易用的通信基础,截至目前通过 MQTT 协议连接的设备已经过亿,广泛应用于 IoT、M2M 等领域。本篇将从最基础的知识开始,向您讲解 MQTT 协议的原理与应用。目前 MQTT 主流版本有 MQTT3.1.1 和 MQTT5。MQTT5 完全兼容 MQTT3.1.1,是在 MQTT3.1.1 的基础上进行完善补充。目前 MQTT3.1.1 的使用人数还是更多,所以本文用 MQTT3.1.1 来讲解。
2024-07-26 17:57:05 905
原创 一篇安装配置ubuntu22.04(步骤详细,配置成功)
详细记录ubuntu22.04服务器的安装,配置静态ip,配置root用户可以远程登录等。
2024-04-11 00:42:32 7310
原创 一篇部署frp
参考网址:https://blog.csdn.net/qq_17754023/article/details/127438606宝塔官方第三方插件下载。
2024-01-25 14:57:18 1471 1
原创 一篇读懂设计模式
软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多 数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不 断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路, 是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代 码的可重用性、代码的可读性和代码的可靠性提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。客户类和工厂类分开。
2023-03-12 11:09:42 520 2
原创 MySQL调优补充
我们知道,计算机存储数据分为RAM(内存存储)和ROM(磁盘存储),而持久化数据都是存储在ROM上。我们的MySQL是一种存储数据的服务器,针对的就是数据的持久化保存和读取。所以MySQL调优,主要就是优化从ROM上读取数据的速度。因此,MySQL调优主要分为两个部分:硬件调优和SQL调优。针对硬件调优,这部分内容由运维去完成。我们的调优主要针对SQL调优。
2023-03-12 10:40:02 209
原创 一篇读懂MySQL调优
计算机的存储空间是一块一块的,通常一块用完了再用另一块,每个存储块是4k一般mysql每次IO是一页,一页是4块16k当sql语句的所求查询字段(select列)和查询条件字段(where子句)全都包含在一个索引树中,可以直接使用索引查询而不需要回表。这就是覆盖索引。在索引遍历过程中,对**联合索引**中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。
2023-03-12 10:32:08 389
原创 一篇学习ES
Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的来隐藏Lucene的复杂性,从而让全文搜索变得简单。Lucence 比较老牌,API比较繁琐Solr 基于Lucence 封装而来Elaticsearch ES 分布式全文检索引擎。
2023-03-10 03:35:24 3365
原创 浅谈MySQL索引
是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护者满足,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。如下面的示意图所示:左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找快速获取到相应数据。
2023-02-24 13:38:34 411
原创 一篇学习JVM
Java安全模型的核心就是Java沙箱(sandbox),沙箱是一个限制程序运行的环境。沙箱机制就是将 Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括——CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样。解释器。
2023-02-24 13:37:39 357
原创 浅谈JAVAHashMap 知识点
Hash,一般翻译为“散列”,也有直接音译为“哈希”的,这就是把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值(哈希值);这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。所有散列函数都有如下一个基本特性**:根据同一散列函数计算出的散列值如果不同,那么输入值肯定也不同。
2023-02-24 13:37:12 482
原创 一篇了解分布式id生成方案
系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。下面就介绍一些常见的ID生成策略。
2023-02-23 11:48:34 210
原创 浅谈Spring循环依赖
想彻底弄清楚spring的循环依赖问题,首先得弄清楚循环依赖是如何发生的spring又是如何检测循环依赖的发生的。其次再探究spring如何解决循环依赖的问题循环依赖就是循环引用,指两个或多个bean互相持有对方,比如说TestA引用TestB、TestB引用TestA,最终形成一个闭环。注意:循环依赖不是指循环调用。循环调用:指方法之间的环调用,循环调用是无解的,除非有终结条件,否则就是死循环,最终会导致内存溢出异常。
2023-02-22 22:18:17 1085
原创 浅谈Redisson实现分布式锁的原理
Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,我没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并没有对 Java 提供原生支持。相反,作为 Java 开发人员,我们若想在程序中集成 Redis,必须使用 Redis 的第三方库。而 Redisson 就是用于在 Java 程序中操作 Redis 的库,它使得我们可以在程序中轻松地使用 Redis。
2023-02-22 22:16:37 331
原创 浅谈分布式锁的原理
因为上图中的两个A系统,运行在两个不同的JVM里面,他们加的锁只对属于自己JVM里面的线程有效,对于其他JVM的线程是无效的。通过上面的分析,我们知道了库存超卖场景在分布式部署系统的情况下使用Java原生的锁机制无法保证线程安全,所以我们需要用到分布式锁的方案。假设此时两个用户的请求同时到来,但是落在了不同的机器上,那么这两个请求是可以同时执行了,还是会出现库存超卖的问题。模拟秒杀服务,在其中配置了jedis线程池,在初始化的时候传给分布式锁,供其使用。任何场景下,一旦加锁,效率不可能会高,数据是安全的!
2023-02-22 22:15:06 486
原创 浅谈Synchronized的原理
修饰函数我们简称同步函数,线程执行称同步函数前,需要先获取监视器锁,简称锁,获取锁成功才能执行同步函数,同步函数执行完后,线程会释放锁并通知唤醒其他线程获取锁,获取锁失败「则阻塞并等待通知唤醒该线程重新获取锁」,同步函数会以this作为锁,即当前对象,以上面的代码段为例就是。当前线程持有的锁是偏向锁的时候,被另外的线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,从而提高性能。而这样会出现频繁地对线程运行状态的切换,线程的挂起和唤醒,从而消耗大量的系统资源,导致性能低下。
2023-02-22 22:13:44 1977
原创 浅谈ThreadLocal的原理
每个ThreadLocal只能保存一个变量副本,如果想要上线一个线程能够保存多个副本以上,就需要创建多个ThreadLocal。ThreadLocal内部的ThreadLocalMap键为弱引用,会有内存泄漏的风险。适用于无状态,副本变量独立后不影响业务逻辑的高并发场景。如果如果业务逻辑强依赖于副本变量,则不适合用ThreadLocal解决,需要另寻解决方案。
2023-02-22 22:12:39 409
原创 浅谈常用的测试框架
这也会大大的增加测试的复杂度,降低程序员的测试积极性。而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。思想:就是自己编写一个接口的实现类,然后这个接口的实现类中访问数据库的时候,使用了Map来模拟整个数据的存储、在每一个调用的方法上直接,使用Map来进行操作的这种测试模式 就叫做stub.注意:Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能。
2023-02-22 22:11:08 465
原创 浅谈Springboot自动化配置原理
不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政府项目或金融项目持有观望态度外,如今的各行各业都在飞速的拥抱这个已经不是很新的Spring启动框架。当然,作为Spring Boot的精髓,自动配置原理的工作过程往往只有在“面试”的时候才能用得上,但是如果在工作中你能够深入的理解Spring Boot的自动配置原理,将无往不利。Spring Boot的出现,得益于“习惯优于配置。
2023-02-22 22:08:22 364
原创 浅谈常用的日志框架
对于我们日常开发日志是经常使用的,当然以前的我们可能还傻傻的各种System.out.println("重要数据")在控制台输出各种重要数据呢,投入生产的时候再注释掉。JCLSLF4Jlog4jlog4j2logback等等,我们该如何选择呢?
2023-02-22 22:08:19 923
原创 浅谈CAS原理。
CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。这样说或许有些抽象,我们来看一个例子:1.在内存地址V当中,存储着值为10的变量。2.此时线程1想要把变量的值增加1。对线程1来说,旧的预期值A=10,要修改的新值B=11。
2023-02-22 22:05:35 239
原创 浅谈volatile关键字
注意我们的b没有用volatile修饰,我们先启动了线程2的读操作,后启动了线程1的写操作,由于线程1和线程2会保存x和b的副本到自己的工作内存中,线程2执行后,由于他副本b=false,所以会进入到无限循环中,线程1执行后修改的也是自己副本中的b=true,然而线程2无法立即察觉到,所以执行上面代码后,不会打印“执行结束”,因为线程2一直在执行!也就是先执行 flag = true后,另外一个线程马上调用方法2,满足 flag的判断,最终让a + 5,结果为5,这样同样出现了数据不一致的问题。
2023-02-22 22:03:29 3648
原创 一篇掌握SpringCloud之服务网关zuul
Zuul:维基百科:电影《捉鬼敢死队》中的怪兽,Zuul,在纽约引发了巨大骚乱。事实上,在微服务架构中,Zuul就是守门的大Boss!一夫当关,万夫莫开!!Spring Cloud Zuul路由是微服务架构的不可或缺的一部分,提供动态路由,监控,弹性,安全等的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。
2023-02-07 17:26:15 422
原创 一篇学习Hystrix断路器
Hystrix[hɪst’rɪks]的中文含义是豪猪,因其背上长满了刺而拥有自我保护能力。Hystix,即熔断器。类似保险丝角色!主页:https://github.com/Netflix/Hystrix/Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
2023-02-07 17:06:10 424
原创 一篇学习Ribbon
SpringCloud Ribbon是基于Netflix Ribbon实现的一套==客户端负载均衡==的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时重试等。简单的说,就是在配置文件中列出(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
2023-02-07 15:21:38 289
原创 微信支付实现
微信扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。
2023-02-07 14:40:34 558
原创 一篇了解分布式事务
事务是逻辑上的一组整体操作,要么都执行,要么都不执行.例如生活中转账案例、发红包、 支付宝向余额宝转账spring事务领头人叫Juergen Hoeller,于尔根·糊了…先混个脸熟哈,他写了几乎全部的spring事务代码。读源码先拜神,掌握他的源码的风格,读起来会通畅很多。事务(Transaction)是数据库区别于文件系统的重要特性之一。目前国际认可的数据库设计原则是ACID特性,用以保证数据库事务的正确执行。Mysql的innodb引擎中的事务就完全符合ACID特性。
2023-02-06 13:53:53 1746
原创 订单30分钟未支付自动取消怎么实现
这样可以看出定时轮由个 3 个重要的属性参数,ticksPerWheel(一轮的 tick 数),tickDuration(一个 tick 的持续时间)以及 timeUnit(时间单位),例如当 ticksPerWheel=60,tickDuration=1,timeUnit=秒,这就和现实中的始终的秒针走动完全类似了。结合以上两个特性,就可以模拟出延迟消息的功能,具体的,我改天再写一篇文章,这里再讲下去,篇幅太长。因此,方案二不是太推荐。对上述的任务,我们给一个专业的名字来形容,那就是延时任务。
2023-02-06 13:25:02 338
谈谈你了解的springboot日志框架
2022-11-11
springboot自动化配置原理.pdf
2022-11-11
CAS学习手册-JAVA程序员必备
2022-11-11
java实现矩阵的基本运算。
2022-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人