自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 资源 (1)
  • 收藏
  • 关注

原创 MySQL高级知识点(七)

MySQL高级知识点(七)文章目录MySQL高级知识点(七)截取查询分析1、慢日志查询概念使用2、批量数据脚本建表语句设置参数编写随机函数**随机产生字符串**随机产生部门编号创建存储过程创建往 emp 表中插入数据的存储过程创建往 dept 表中插入数据的存储过程调用存储过程添加数据到部门表添加数据到员工表批量删除某个表上的所有索引删除索引的存储过程执行存储过程截取查询分析1、慢日志查询概念MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具

2022-02-28 20:28:31 779 2

原创 MySQL高级知识点(六)

MySQL高级知识点(六)文章目录MySQL高级知识点(六)关联查询优化1、LEFT JOIN优化2、INNER JOIN优化3、RIGHT JOIN优化排序分组优化1、ORDER BY 优化MySQL的排序算法2、GROUP BY 优化关联查询优化建表语句CREATE TABLE IF NOT EXISTS `class` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NOT NULL, PRIMA

2022-02-27 19:51:23 567

原创 MySQL高级知识点(五)

MySQL高级知识点(五)文章目录MySQL高级知识点(五)单表查询优化1、全值匹配很快捷2、最佳左前缀法则3、索引列上不计算4、范围之后全失效5、覆盖索引多使用6、使用不等会失效7、使用NULL值要小心8、模糊查询加右边9、字符串加单引号10、尽量不用or查询单表查询优化1、全值匹配很快捷SQL语句--建立符合索引(age, deptId, name)CREATE INDEX idx_emp_ade ON t_emp(age, deptId, NAME);--查找EXPLAIN SELE

2022-02-25 20:50:42 642

原创 MySQL高级知识点(四)

MySQL高级知识点(四)文章目录MySQL高级知识点(四)Explain 性能分析1、概念2、用法3、表头字段介绍准备工作id:表的读取顺序select_type:查询操作类型table:表的来源type:访问类型possible_key:可能用到的索引key:实际使用的索引**覆盖索引**key_len:索引使用字节数ref:显示被使用的索引的具体信息rows:被查询的行数Extra:额外重要信息Explain 性能分析1、概念使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从

2022-02-24 20:13:55 325

原创 MySQL高级知识点(三)

MySQL高级知识点(三)文章目录MySQL高级知识点(三)4、MySQL的索引B树与B+树区别MySQL中的B+树主键索引复合索引5、索引的使用场景适合索引的场景不适合索引的场景4、MySQL的索引B树与B+树区别B树的关键字和记录是放在一起的,叶子节点可以看作外部节点,不包含任何信息;B+树的非叶子节点中只有关键字和指向下一个节点的索引,记录只放在叶子节点中在 B树中,越靠近根节点的记录查找时间越快,只要找到关键字即可确定记录的存在;而 B+树中每个记录 的查找时间基本是一样的,都需要

2022-02-23 22:18:49 2842 3

原创 MySQL高级知识点(二)

MySQL高级知识点(二)文章目录MySQL高级知识点(二)三、索引优化1、什么是索引2、索引的优缺点优点缺点3、索引的分类基本语法分类三、索引优化1、什么是索引MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。可以得到索引的本质: 索引是数据结构。可以简单理解为:排好序的快速查找数据结构在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法。这种数据结构,

2022-02-22 20:42:37 119

原创 MySQL高级知识点(一)

MySQL高级知识点(一)文章目录MySQL高级知识点(一)一、Mysql逻辑架构1、整体架构连接层服务层引擎层存储层二、性能与JOIN1、性能下降原因索引失效关联太多JOIN服务器调优及参数设置2、SQL执行加载顺序手写顺序3、7种JOIN**建表语句**JOIN查询一、Mysql逻辑架构1、整体架构连接层最上层是一些客服端和连接服务,包括socket通信和大多数基于客服端/服务端工具实现的类似于tcp/ip的通信,主要完成一些类似于连接处理、授权认证及相关安全的方案,在该层上引入了线程池的概

2022-02-21 21:08:45 843

原创 深入理解JVM(十一)—— 类加载与字节码技术(五)

深入理解JVM(十一)—— 类加载与字节码技术(五)文章目录深入理解JVM(十一)—— 类加载与字节码技术(五)6、运行期优化分层编译即时编译器(JIT)与解释器的区别逃逸分析方法内联**内联函数****JVM内联函数**反射优化6、运行期优化分层编译JVM 将执行状态分成了 5 个层次:0层:解释执行,用解释器将字节码翻译为机器码1层:使用 C1 即时编译器编译执行(不带 profiling)2层:使用 C1 即时编译器编译执行(带基本的profiling)3层:使用 C1 即时编译器编译

2022-02-20 19:53:21 152

原创 深入理解JVM(十)—— 类加载与字节码技术(四)

深入理解JVM(十)—— 类加载与字节码技术(四)文章目录深入理解JVM(十)—— 类加载与字节码技术(四)5、类加载器类与类加载器启动类加载器拓展类加载器双亲委派模式自定义类加载器使用场景步骤破坏双亲委派模式5、类加载器Java虚拟机设计团队有意把类加载阶段中的**“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”**(ClassLoader)类与类加载器类加载器虽然只用于实现类

2022-02-19 21:32:28 141

原创 深入理解JVM(九)—— 类加载与字节码技术(三)

深入理解JVM(八)—— 类加载与字节码技术(二)文章目录深入理解JVM(八)—— 类加载与字节码技术(二)4、类加载阶段加载链接验证准备解析初始化发生时机4、类加载阶段加载将类的字节码载入方法区(1.8后为元空间,在本地内存中)中,内部采用 C++ 的 instanceKlass 描述 java 类,它的重要 field 有:_java_mirror 即 java 的类镜像,例如对 String 来说,它的镜像类就是 String.class,作用是把 klass 暴露给 java 使用

2022-02-18 20:48:33 194

原创 深入理解JVM(八)—— 类加载与字节码技术(二)

深入理解JVM(八)—— 类加载与字节码技术(二)文章目录深入理解JVM(八)—— 类加载与字节码技术(二)3、编译期处理默认构造函数自动拆装箱泛型集合取值可变参数foreachswitch字符串switch枚举枚举类匿名内部类3、编译期处理所谓的 语法糖 ,其实就是指 java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利注意,以下代码的分析,借助了 javap 工具,idea

2022-02-17 20:48:29 139

原创 深入理解JVM(七)—— 类加载与字节码技术(一)

深入理解JVM(七)—— 类加载与字节码技术(一)文章目录深入理解JVM(七)—— 类加载与字节码技术(一)1、类文件结构魔数版本常量池2、字节码指令javap工具图解方法执行流程通过字节码指令来分析问题构造方法cinit()Vinit()V方法调用多态原理异常处理try-catch多个single-catchfinallyfinally中的return被吞掉的异常finally不带returnSynchronized](https://nyimapicture.oss-cn-beijing.aliyu

2022-02-16 20:01:05 175

原创 深入理解JVM(六)—— 垃圾回收(三)

深入理解JVM(六)—— 垃圾回收(三)文章目录深入理解JVM(六)—— 垃圾回收(三)4、垃圾回收器相关概念串行Serial 收集器ParNew 收集器Serial Old 收集器吞吐量优先Parallel Scavenge 收集器**Parallel Old 收集器**响应时间优先CMS 收集器G1**定义**:适用场景G1垃圾回收阶段Young CollectionYoung Collection + CMMixed CollectionFull GCYoung Collection 跨代引用Rem

2022-02-15 22:54:26 280

原创 深入理解JVM(五)—— 垃圾回收(二)

深入理解JVM(五)—— 垃圾回收(二)文章目录深入理解JVM(五)—— 垃圾回收(二)2、垃圾回收算法标记-清除标记-整理复制3、分代回收回收流程GC 分析大对象处理策略线程内存溢出2、垃圾回收算法标记-清除定义:标记清除算法顾名思义,是指在虚拟机执行垃圾回收的过程中,先采用标记算法确定可回收对象,然后垃圾收集器根据标识清除相应的内容,给堆内存腾出相应的空间这里的腾出内存空间并不是将内存空间的字节清0,而是记录下这段内存的起始结束地址,下次分配内存的时候,会直接覆盖这段内存缺点:容易产生

2022-02-14 21:32:58 121

原创 深入理解JVM(四)—— 垃圾回收(一)

深入理解JVM(四)—— 垃圾回收(一)文章目录深入理解JVM(四)—— 垃圾回收(一)1、如何判断对象可以回收引用计数法可达性分析算法五种引用强引用软引用软引用的使用弱引用**虚引用**终结器引用引用队列1、如何判断对象可以回收引用计数法弊端:循环引用时,两个对象的计数都为1,导致两个对象都无法被释放可达性分析算法JVM中的垃圾回收器通过可达性分析来探索所有存活的对象扫描堆中的对象,看能否沿着GC Root对象为起点的引用链找到该对象,如果找不到,则表示可以回收可以作为GC Root的

2022-02-13 07:47:57 126

原创 深入理解JVM(三)—— 内存结构(三)

深入理解JVM(三)—— 内存结构(三)文章目录深入理解JVM(三)—— 内存结构(三)6、直接内存文件读写流程释放原理直接内存的回收机制总结6、直接内存属于操作系统,常见于NIO操作时,用于数据缓冲区分配回收成本较高,但读写性能高不受JVM内存回收管理文件读写流程使用了DirectBuffer直接内存是操作系统和Java代码都可以访问的一块区域,无需将代码从系统内存复制到Java堆内存,从而提高了效率释放原理直接内存的回收不是通过JVM的垃圾回收来释放的,而是通过unsafe.

2022-02-12 20:09:51 674 1

原创 深入理解JVM(二)—— 内存结构(二)

深入理解JVM(二)—— 内存结构(二)文章目录深入理解JVM(二)—— 内存结构(二)4、堆定义特点堆内存溢出堆内存诊断5、方法区结构内存溢出常量池运行时常量池常量池与串池的关系**串池**StringTableintern方法 1.8intern方法 1.6StringTable 垃圾回收StringTable调优4、堆定义通过new关键字创建的对象都会被放在堆内存特点所有线程共享,堆内存中的对象都需要考虑线程安全问题有垃圾回收机制堆内存溢出java.lang.OutofMemor

2022-02-11 22:18:42 111

原创 深入理解JVM(一)——内存结构(一)

深入理解JVM(一)——内存结构(一)文章目录深入理解JVM(一)——内存结构(一)整体架构1、程序计数器作用特点2、虚拟机栈定义演示问题辨析内存溢出线程运行诊断3、本地方法栈整体架构1、程序计数器作用用于保存JVM中下一条所要执行的指令的地址特点线程私有CPU会为每个线程分配时间片,当当前线程的时间片使用完以后,CPU就会去执行另一个线程中的代码程序计数器是每个线程所私有的,当另一个线程的时间片用完,又返回来执行当前线程的代码时,通过程序计数器可以知道应该执行哪一句指令不会存

2022-02-10 21:52:09 891

原创 Redis(九)—— 企业级解决方案(二)

Redis(九)—— 企业级解决方案(二)文章目录Redis(九)—— 企业级解决方案(二)3、缓存击穿数据库服务器崩溃(2)问题排查问题分析解决方案(术)总结4、缓存穿透恶意请求解决办法布隆过滤器简介3、缓存击穿数据库服务器崩溃(2)系统平稳运行过程中数据库连接量瞬间激增Redis服务器无大量key过期Redis内存平稳,无波动Redis服务器CPU正常数据库崩溃问题排查Redis中某个key过期,该key访问量巨大多个数据请求从服务器直接压到Redis后,均未命中Redi

2022-02-09 16:45:26 459

原创 Redis(八)—— 企业级解决方案(一)

Redis(八)—— 企业级解决方案(一)文章目录Redis(八)—— 企业级解决方案(一)1、缓存预热问题排查解决方案总结2、缓存雪崩数据库服务器崩溃(1)问题排查问题分析解决方案(道)总结1、缓存预热问题排查请求数量较高主从之间数据吞吐量较大,数据同步操作频度较高解决方案前置准备工作:日常例行统计数据访问记录,统计访问频度较高的热点数据利用LRU数据删除策略,构建数据留存队列 例如:storm与kafka配合准备工作:将统计结果中的数据分类,根据级别,redis优先加

2022-02-07 22:14:34 963

原创 Redis(七)—— 哨兵

Redis(七)—— 哨兵文章目录Redis(七)—— 哨兵1、简介2、作用3、配置哨兵4、工作原理监控阶段通知阶段故障转移确认master下线推选哨兵进行处理具体处理1、简介哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。2、作用监控不断的检查master和slave是否正常运行。 master存活检测、master与slave运行情况检测通知(提醒)当被监控

2022-02-06 20:35:06 899

原创 Redis(六)—— 主从复制

Redis(六)—— 主从复制文章目录Redis(六)—— 主从复制1、简介多台服务器连接方案主从复制2、作用3、工作流程**总述**阶段一:建立连接阶段二:数据同步阶段数据同步阶段master说明数据同步阶段slave说明阶段三:命令传播阶段命令传播阶段的部分复制服务器运行ID(runid)复制缓冲区复制缓冲区内部工作原理主从服务器复制偏移量(offset)数据同步+命令传播阶段工作流程心跳机制心跳阶段注意事项完整流程常见问题频繁的网络中断数据不一致1、简介多台服务器连接方案提供数据方:mas

2022-02-04 15:35:58 160

原创 Redis(五)—— 高级数据类型

Redis(五)—— 高级数据类型文章目录Redis(五)—— 高级数据类型1、Bitmaps基础操作扩展操作2、HyperLogLog基数基本操作相关说明3、GEO基本操作1、Bitmaps基础操作获取指定key对应偏移量上的bit值getbit key offset设置指定key对应偏移量上的bit值,value只能是1或0setbit key offset value扩展操作对指定key按位进行交、并、非、异或操作,并将结果保存到destKey中bitop op

2022-02-03 16:34:25 105

原创 Redis(四)—— 删除策略

Redis(四)—— 删除策略文章目录Redis(四)—— 删除策略1、数据删除策略时效性数据的存储结构数据删除策略的目标2、三种删除策略定时删除惰性删除定期删除3、逐出算法影响数据逐出的相关配置影响数据逐出的相关配置数据逐出策略配置依据1、数据删除策略定时删除惰性删除定期删除时效性数据的存储结构Redis中的数据,在expire中以哈希的方式保存在其中。其value是数据在内存中的地址,filed是对应的生命周期数据删除策略的目标在内存占用与CPU占用之间寻找一种平衡,顾此失彼

2022-01-27 19:34:05 308

原创 Redis(三)—— 事务

Redis(三)—— 事务文章目录Redis(三)—— 事务1、Redis事务的定义2、事务的基本操作3、事务操作的基本流程4、事务操作的注意事项5、基于特定条件的事务执行锁分布式锁分布式锁加强1、Redis事务的定义redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体(一个队列)。当执行时,一次性按照添加顺序依次执行,中间不会被打断或者干扰2、事务的基本操作开启事务multi作用作设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中取消事务

2022-01-27 19:30:47 1452

原创 Redis(二)—— 持久化

Redis(二)—— 持久化文章目录Redis(二)—— 持久化1、简介什么是持久化?为什么要持久化持久化过程保存什么1、简介什么是持久化?利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。为什么要持久化防止数据的意外丢失,确保数据安全性持久化过程保存什么将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程[](...

2022-01-25 13:14:32 101

原创 Redis(一)—— 数据类型

Redis(一)—— 数据类型文章目录Redis(一)—— 数据类型一、String基本操作string 类型数据的扩展操作二、Hash基本操作hash 类型数据操作的注意事项三、List基本操作拓展操作注意事项四、Set基本操作扩展操作五、sorted_set基本操作拓展操作注意事项所有的key都为String类型,讨论数据类型是说的value的类型一、String基本操作// 设置Stringset key valuemset key1 value1 key2 value2...// 设

2022-01-21 15:20:45 106

原创 Netty编程(十)—— 参数优化

Netty编程(十)—— 参数优化文章目录Netty编程(十)—— 参数优化CONNECT_TIMEOUT_MILLIS使用源码分析SO_BACKLOG三次握手与连接队列作用默认值TCP_NODELAYSO_SNDBUF & SO_RCVBUFALLOCATOR使用RCVBUF_ALLOCATORCONNECT_TIMEOUT_MILLIS属于 SocketChannal 的参数用在客户端建立连接时,如果在指定毫秒内无法连接,会抛出 timeout 异常注意:Netty 中不要用成了SO

2021-11-29 20:58:12 1825

原创 Netty编程(九)—— 协议设计与解析

Netty编程(九)—— 协议设计与解析文章目录Netty编程(九)—— 协议设计与解析Redis协议HTTP协议自定义协议组成要素编码器解码器编写测试类TCP/IP 中消息传输基于流的方式,没有边界,而协议的目的就是划定消息的边界,制定通信双方要共同遵守的通信规则Redis协议如果我们要向Redis服务器发送一条set name Nyima的指令,需要遵守如下协议// 该指令一共有3部分,每条指令之后都要添加回车与换行符*3\r\n// 第一个指令的长度是3$3\r\n// 第一个指令是

2021-11-28 10:50:55 1107

原创 Netty编程(八)—— 粘包半包(二)

Netty编程(八)—— 粘包半包(二)文章目录Netty编程(八)—— 粘包半包(二)短链接定长解码器行解码器长度字段解码器参数解析参数图解例子在上一篇博客《Netty编程(七)—— 粘包半包(一)》中介绍了一下什么是粘包和半包,这篇博客将继续介绍Netty如何处理粘包半包问题。短链接短链接的思路是客户端每次向服务器发送数据以后,就与服务器断开连接,此时的消息边界为连接建立到连接断开。这时便无需使用滑动窗口等技术来缓冲数据,则不会发生粘包现象。但如果一次性数据发送过多,接收方无法一次性容纳所有数据

2021-11-27 21:15:36 434

原创 Netty编程(七)—— 粘包半包(一)

Netty编程(七)—— 粘包半包文章目录Netty编程(七)—— 粘包半包粘包现象半包现象现象分析粘包半包本质粘包现象以下面这个例子来说一下什么是粘包,下面这个是一个客户端的代码,它的任务很简单,就是向服务端连发十次0到15(十进制的字节00到0f):public class StudyClient { static final Logger log = LoggerFactory.getLogger(StudyClient.class); public static void m

2021-11-26 22:32:49 455

原创 Netty编程(六)—— 实现一个回显Echo程序

Netty编程(六)—— 实现一个回显Echo程序文章目录Netty编程(六)—— 实现一个回显Echo程序Echo服务端Echo客户端结果之前五篇关于Netty的博客介绍了关于Netty的基础使用方法,这篇博客实现一个简单的Netty程序,他首先能够实现客户端和服务器的交互,客户可以任意输入内容(可以以某一命令结束客户端,例如quit),并将该内容发送给服务端,服务端接收到发来的消息后显示消息,并发送同样的消息给客户端,至此一次交互结束。这就是本篇博客要实现的Echo服务端和客户端的功能。Echo服

2021-11-25 15:57:01 668

原创 Netty编程(五)—— ByteBuf

Netty编程(四)—— ByteBuf文章目录Netty编程(四)—— ByteBuf创建直接内存与堆内存池化与非池化组成写入创建ByteBuf 可以通过ByteBufAllocator选择allocator并调用对应的 buffer( )方法来创建的,默认使用直接内存作为ByteBuf,容量为256个字节,可以指定初始容量的大小。public class ByteBufStudy { public static void main(String[] args) {

2021-11-24 19:23:19 1435 1

原创 Netty编程(四)—— Future与Promise

Netty编程(四)—— Future与Promise文章目录Netty编程(四)—— Future与Promise概念JDK FutureNetty FutureNetty Promise概念netty 中的 Future 与 jdk 中的 Future 同名,但是是两个接口,netty 的 Future 继承自 jdk 的 Future,而 Promise 又对 netty Future 进行了扩展(继承)jdk Future 只能同步等待任务结束(或成功、或失败)才能得到结果netty F

2021-11-23 16:17:13 638

原创 Netty编程(三)—— Channel

Netty编程(三)—— Channel文章目录Netty编程(三)—— ChannelChannel常用方法为什么需要sync()分析原因解决方法处理关闭Channel常用方法close() 可以用来关闭ChannelcloseFuture() 用来处理 Channel 的关闭事件sync 方法作用是同步等待 Channel 关闭而 addListener 方法是异步等待 Channel 关闭pipeline() 方法用于添加处理器write() 方法将数据写入因为缓冲机制,数

2021-11-22 20:07:54 1975

原创 Netty编程(二)—— EventLoop

Netty编程(二)—— EventLoop文章目录Netty编程(二)—— EventLoopEventLoop和EventLoopGroupEventLoop的使用处理IO事件分工细化细化1细化2如何切换EventLoop和EventLoopGroup事件循环对象 EventLoop 本质是一个单线程执行器(同时维护了一个 Selector),里面有 run 方法处理一个或多个 Channel 上源源不断的 IO 事件。事件循环组 EventLoopGroup 是一组 EventLoop,C

2021-11-22 13:51:17 615

原创 Netty编程(一)—— 初识Netty+超全注释

Netty编程(一)—— 初识Netty文章目录Netty编程(一)—— 初识Netty什么是NettyHello World服务端之前的博客介绍了NIO网络编程的相关知识,从这篇博客开始,我将开始介绍Netty的相关知识。什么是NettyNetty 是一个异步的、基于事件驱动的网络应用框架,可用于快速开发可维护、高性能的网络服务器和客户端基于事件驱动意思是底层实现采用多路复用技术(selector),事件发生时才需要进行处理异步是指使用了多线程完成方法调用和处理结果相分离,并不是异步IO

2021-11-21 19:59:14 1023

原创 NIO网络编程(十)—— 零拷贝技术

NIO网络编程(十)—— 零拷贝技术文章目录NIO网络编程(十)—— 零拷贝技术传统的IO分析NIO优化零拷贝技术零拷贝技术1零拷贝技术2零拷贝技术的特点传统的IO分析如果要将一个文件从本地磁盘通过网络传输到另一台主机上,传统的IO会通过如下的代码,这段代码的步骤就是读取文件、将文件内容存到字节数组中、通过socket发送字节数组。File f = new File("helloword/data.txt");RandomAccessFile file = new RandomAccessFile

2021-11-19 15:53:41 862

原创 NIO网络编程(九)—— 再探NIO、BIO概念

NIO网络编程(九)—— 再探NIO和BIO文章目录NIO网络编程(九)—— 再探NIO和BIO前面在《NIO网络编程(一)—— BIO和NIO》中介绍了BIO、伪异步IO以及NIO的基本概念,之后的七篇博客介绍了NIO编程的相关知识,这篇博客是NIO网络编程的结尾,讲解一下关于NIO和BIO的概念知识。...

2021-11-18 20:06:04 527

原创 NIO网络编程(八)—— 多线程优化服务端

Netty编程(八)—— 多线程优化服务端文章目录Netty编程(八)—— 多线程优化服务端多线程架构Worker类的实现多Worker服务端代码多线程架构之前说到的服务端程序都是在一个线程上进行的,这个线程不仅负责连接客户端发来的请求,同时还要处理读写事件,这样效率还是不够高。如今电脑都是多核处理器,这意味着可以同时进行多个线程,所以服务端应该充分利用这一点。服务端线程可以建立多个线程,将这些线程分成两组:其中一个线程专门处理 accept 事件,称为Boss线程创建 cpu 核心数的线程,

2021-11-16 19:35:24 742

huffman.cpp

基于哈夫曼编码对文件进行压缩和解压缩

2021-04-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除