- 博客(202)
- 资源 (3)
- 问答 (2)
- 收藏
- 关注
原创 必看!JavaEE学习路线
JavaEE学习日志持续更新中,内有最全的JavaEE学习目标和学习路线,适合小白跟踪学习,欢迎收藏!一门永不过时的编程语言——Java 软件开发。
2020-02-08 11:07:55
5571
3
原创 RocketMQ 与 Kafka 长轮询详解
本文对比分析了RocketMQ和Kafka的长轮询机制。RocketMQ通过PullRequestHoldService实现30秒长轮询,以消息级别触发唤醒,追求毫秒级低延迟,适合订单支付等实时业务。Kafka则通过DelayedOperationPurgatory管理延迟操作,基于fetch.min.bytes数据量阈值和500ms默认超时实现批量拉取,优先保证高吞吐,适合日志处理等场景。两者在设计目标、触发粒度和超时策略上存在明显差异,RocketMQ侧重实时性,Kafka侧重吞吐量,开发者可根据业务特
2026-03-06 14:04:14
384
1
原创 Redis 近似 LRU 算法详解
Redis采用近似LRU算法作为内存淘汰策略,在性能和准确性之间取得平衡。相比精确LRU需要维护链表(O(1)操作但需加锁),近似LRU通过随机采样键并比较时间戳(24位lru字段)来淘汰最久未使用的键,大幅降低了内存开销(每键仅3字节)和访问延迟(无锁操作)。Redis 3.0+引入淘汰池机制提高准确性,默认采样5个键即可接近精确LRU效果。测试表明,近似LRU在高并发场景下QPS可达10万+,是缓存系统的理想选择。用户可通过maxmemory-samples参数调节采样数量,在4.0+版本还可选用基于访
2026-03-06 10:24:29
377
原创 Linux I/O 多路复用详解:select、poll 和 epoll
本文详细介绍了Linux中的三种I/O多路复用机制:select、poll和epoll。它们都用于同时监听多个文件描述符,等待其中任何一个变为可读/可写状态。 select是最早的机制,使用固定大小的位图(fd_set),存在1024个文件描述符的限制,且每次调用都需要在内核和用户空间之间拷贝数据,性能较差。poll改用结构体数组,解决了数量限制问题,但仍需遍历所有文件描述符。 epoll是Linux特有的高性能机制,采用事件驱动模型,没有数量限制。它通过三个步骤工作:创建epoll实例、注册要监听的文件描
2026-03-05 10:57:50
380
原创 一个 HTTP 请求从发送到结束,在 TCP/IP 各层经历了什么
本文详细描述了一个HTTP请求从发送到接收的全过程。首先在应用层构造HTTP报文并解析DNS,然后通过传输层TCP三次握手建立连接并分段,网络层添加IP地址和路由信息,最后在网络接口层封装为以太网帧并发送。中间经过多个路由器转发,到达服务器后逆向解封各层数据。整个过程展示了TCP/IP协议栈各层的分工协作:应用层处理报文内容,传输层确保可靠传输,网络层负责路由寻址,接口层完成物理传输。通过分层封装和解封,实现了端到端的网络通信。
2026-03-04 14:13:29
185
1
原创 Reactor 线程模型与 Netty 实现
本文介绍了Reactor线程模型及其在Netty中的实现。Reactor是一种事件驱动的设计模式,通过分离I/O事件监听和处理来提高并发性能。文章详细分析了三种Reactor演进模型:单线程模型(所有操作在单线程完成)、单Reactor多线程模型(主线程监听,线程池处理业务)和多Reactor多线程模型(主从Reactor分工协作)。每种模型都配有结构图示和代码示例,并分析了其优缺点。最后还介绍了Netty如何基于多Reactor多线程模型进行优化实现。这些内容为理解高性能网络编程提供了重要理论基础。
2026-03-04 09:49:05
378
原创 Java NIO 空轮询问题与 Netty 的解决方案
Java NIO 在 Linux 系统上存在空轮询问题(Epoll Bug),导致 Selector.select() 方法在无事件时也会立即返回0,造成CPU 100%空转。该问题主要发生在使用epoll的Linux系统,当连接异常关闭时触发。 Netty通过检测机制解决此问题:记录select()调用次数,若短时间内(如1秒)超过阈值(默认512次),则判定为空轮询并重建Selector。核心代码在NioEventLoop中实现,通过计数器sel
2026-03-03 14:30:57
481
原创 分布式事务解决方案对比
分布式事务解决方案对比摘要 本文对比了主流分布式事务方案的核心特性与适用场景。2PC/XA提供强一致性但性能低(同步阻塞、单点风险),适用于金融等强一致性场景;TCC/Seata AT采用最终一致性,性能更高但实现复杂,适合电商等高并发场景。2PC通过准备/提交两阶段协调多节点事务,XA是其标准化实现;3PC引入超时机制但实际应用较少。各方案需权衡一致性、性能与复杂度,根据业务特点选择:强一致选2PC/XA,高并发选TCC/Seata AT。典型问题如协调者故障会导致数据不一致,需结合业务设计补偿机制。
2026-03-03 11:01:34
276
原创 elastic-job 搭建——应用于企业级项目
随着服务器的增加或宕机,ElasticJob 会近乎实时的感知服务器数量的变更,从而重新为分布式的任务服务器分配更加合理的任务分片项,使得任务可以随着资源的增加而提升效率。它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。1、elastic-job-sdk:进一步封装elastic-job-lite。举例说明,如果作业分为 4 片,用两台服务器执行,则每个服务器分到 2 片,分别负责作业的 50% 的负载,如下图所示。
2023-04-25 17:05:53
2007
原创 mysql的锁模块:MyISAM和InnoDB关于锁的区别
mysql的锁模块MyISAM和InnoDB关于锁的区别MyISAM适合的场景InnoDB适合的场景数据库锁的分类乐观锁的实现MyISAM和InnoDB关于锁的区别最主要的区别注意:以MyISAM为例先上表级共享锁,再上共享锁可以成功,而无法上排他锁。如果先上表级排他锁,则无法再上共享锁或排他锁。一、如何给select语句添加排他锁 ?for updateselect * from person_info_myisam where id between 1 and 2000000 for
2020-10-18 11:32:48
297
原创 mysql索引:如何优化sql语句,最左匹配原则的成因
mysql索引:如何优化sql语句,如何查看慢日志,使用Explain工具分析慢sql,优化慢sql,补充。最左匹配原则的成因,
2020-10-17 13:53:12
664
1
原创 mysql的索引数据结构:从二叉查找树到B-tree再到B+-tree
mysql的索引数据结构二叉查找树B树B+树Hash二叉查找树原理略当查找节点9时,由于是对半查找,所以此时的时间复杂度为O(logn),且需要进行三次的IO读写当删除节点2和节点6,并添加节点11和节点13时,此时二叉查找树会变成如下,此时查找节点13的时间复杂度为O(n),且需要进行五次的磁盘IO才能找到节点二叉查找树的缺陷:1、经过频繁的修改操作之后,二叉树会变成一条,从而使时间复杂度变为O(n),也大大增加了磁盘IO的次数。2、即使是平衡二叉树,二叉查找树的层级过多,虽然时间复杂度
2020-10-16 16:15:29
651
原创 docker中安装elastichsearch和head、Logstash
elasticsearch安装es安装head插件安装es一、拉取镜像docker pull elasticsearch:5.6.8二、创建容器docker run -di --name=tensquare_elasticsearch -p 9200:9200 elasticsearch:5.6.8此时的elasticsearch还无法使用,因为没有解决跨域和远程连接问题三、解决跨域和远程连接1、拷贝配置文件到宿主机docker cp tensquare_elasticsearch:/
2020-10-14 11:55:39
374
原创 RabbitMQ入门
RabbitMQ:RabbitMQ和ActiveMQ对比,docker安装rabbimq,直连模式(direct),分列模式(fanout),主题模式(topic)。
2020-10-14 11:10:15
314
1
原创 Mongo的Java客户端操作,SpringDataMongo
MongoDB:原生Mongo,SpringDataMongo:dao的方式调用,MongoTemplate,redis与mongo结合使用。
2020-09-27 15:01:11
351
原创 MongoDB介绍,MongoDB操作命令详解
MongoDB:MongoDB与redis比较,MongoDB体系结构,MongoDB数据类型,docker中创建MongoDB,MongoDB操作命令。
2020-09-25 13:48:18
324
原创 十次方笔记(二):@Modifying注解,redis使用逻辑,SpringCache缓存
十次方笔记(二)jpa修改数据库在SpringBoot中使用redisSpringCache缓存jpa修改数据库当jpa新添加的dao方法需要修改数据库时,需要添加@Modifying注解,表示需要修改数据库public interface ArticleDao extends JpaRepository<Article,String>,JpaSpecificationExecutor<Article>{ //审核 @Query("update Ariticle se
2020-09-24 15:41:40
413
原创 vue的富文本编辑器vue-quill-editor
vue-quill-editor一、安装npm install vue-quill-editor --save二、在plugins目录下创建nuxt-quill-plugin.jsimport Vue from 'vue'import VueQuillEditor from 'vue-quill-editor/dist/ssr'Vue.use(VueQuillEditor);三、配置nuxt.config.jsmodule.exports = { // other config
2020-09-19 15:09:32
824
原创 Failed to execute ‘observe‘ on ‘MutationObserver‘: parameter 1 is not of type ‘Node‘
需要先引入element-ui再引入瀑布流插件,参考的博客解决方法
2020-09-18 14:00:26
4624
原创 vue的瀑布流组件、分享插件、cookie插件,ElementUI,嵌套布局
vue插件:vue的瀑布流组件,vue的分享插件,nuxt工程中使用ElementUI,vue的cookie插件,嵌套布局
2020-09-15 16:25:40
1793
原创 vue.js的路由配置
vue.js:招聘管理,企业管理的页面优化,招聘管理的页面优化,文章管理。路由vue-router:初始化工程,页面逻辑结构分析,自定义路由,动态路由,嵌套路由。
2020-08-30 11:59:56
844
原创 ElementUI:ElementUI脚手架介绍与配置,elementUI执行流程分析,开发后台活动管理
ElementUI:脚手架基本配置,切换模拟数据来源,脚手架目录结构,elementUI执行流程分析。活动管理案例:活动列表,活动新增,活动修改,活动删除,api代码优化。
2020-08-26 16:52:29
1327
1
原创 EasyMock:Mock.js的DTD和DPD规范,EasyMock使用说明
Mock.js:什么是Mock.js,Mock.js入门,数据模板定义规范DTD,数据占位符定义规范DPD。EasyMock:在线使用EasyMock,自建easymock。
2020-08-24 14:34:50
435
原创 node.js(二):webpack,es6语法新特性
webpack:入门程序。es6:什么是es,es6语法,定义变量和常量,模板字符串,方法默认值,箭头函数,创建对象,解析对象,扩展函数,导入和导出,安装bebel插件。
2020-08-22 13:00:54
490
原创 node.js(一):node.js配置web服务器,npm命令
node.js:概念,入门程序,模块化编程,配置web服务器。npm:什么是npm,npm命令。
2020-08-22 10:34:49
905
原创 SpringBoot(二):整合MyBatis、junit、redis、ElasticSearch
SpringBoot:整合MyBatis,整合junit,整合redis,整合ElasticSearch,springboot的使用技巧。
2020-08-12 15:20:56
415
原创 SpringBoot(一):SpringBoot整合SpringDataJpa、freemarker,yml文件格式
SpringBoot:概述,入门程序。深度体验:SpringDataJpa,页面渲染,freemarker,静态资源处理。yml(yaml)文件格式。
2020-08-11 15:22:42
1058
Java常用的一些jar包
2020-03-24
logstash的测试命令出错,为啥会出现这个?
2020-10-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅