- 博客(36)
- 收藏
- 关注
原创 Netty 源码 — 线程模型的分析
文章目录Netty 线程模型分析Reactor 线程模型Netty 初始化线程池BossGroup 工作原理绑定 Channel事件循环执行 IO 事件WorkerGroup 工作总结Netty 线程模型分析阅读本文之前,需要了解 NIO 相关知识,可参阅我的文章:[NIO 与 epoll 知识详解](./NIO 与 epoll.md)Reactor 线程模型Netty 的线程模型 是基于 Reactor 线程模型的,Reactor 线程模型分为三种模型:单线程模型:注册所有感兴趣的事件,一
2022-03-18 10:02:31
706
原创 NIO 与 epoll
文章目录epoll 与 select第一部分:select 和 epoll的任务select 的做法epoll的做法第二部分:epoll详解epoll 系统调用epoll高效的原因epoll综合的执行过程epoll 水平触发(LT)和边缘触发(ET)的实现第三部分:epoll高效的本质NIO传统BIO模型分析NIO是怎么工作的常见I/O模型对比如何结合事件模型使用NIO同步非阻塞特性优化线程模型NIO在客户端的魔力每连接顺序请求的Redis多连接短连接的HttpClient常见的RPC框架,如Thrift,
2022-03-18 10:01:56
1893
原创 分布式系统中的分区问题
文章目录分布式系统中的分区分区与复制键值数据的分区根据键的范围分区根据键的散列分区分区与次级索引基于文档的二级索引进行分区基于关键词的二级索引进行分区分区再平衡反面教材:hash mod N一致性哈希算法多一层抽象:分区 - 节点 多对一请求路由分布式系统中的分区什么是分区?对于非常大的数据集,或非常高的吞吐量,仅仅进行复制是不够的:我们需要将数据进行分区,也称为分片。简单而言,将一个大的数据集分为多个小的数据集,将这些小的数据集散布在更多的节点上,每一个小的数据集都作为一个独立的数据库进行处理,使
2022-03-18 10:01:20
923
原创 分布式系统中的复制问题
文章目录分布式系统中的复制主从复制主从复制工作原理新增从库处理节点宕机从库失效:追赶恢复主库失效:故障切换复制日志的实现基于语句的复制传输预写式日志(WAL)逻辑日志复制(基于行)基于触发器的复制复制延迟问题读己之写单调读一致前缀读复制延迟的解决方案多主复制多主复制的应用场景多个数据中心**多主复制的缺点**需要离线操作的客户端协同编辑处理写入冲突收敛至一致的状态多主复制拓扑无主复制当节点故障时写入数据库读修复和反熵读写的法定人数法定人数一致性的局限性检测并发写入最后写入胜利(丢弃并发写入)“此前发生”的关
2022-03-18 10:00:27
579
原创 ConcurrentHashMap 学习总结
文章目录ConcurrentHashMap插入时逻辑大小增加逻辑初始化逻辑扩容时逻辑sizeCtlConcurrentHashMap本文基于 jdk11,前置知识:[Java HashMap 详解](./HashMap 学习总结.md)插入时逻辑在 jdk1.7 以前,ConcurrentHashMap 采用分段锁,将一个大的 HashMap 数组分为多个小的段 Segment,每个段也是一个 HashMap 数组,插入时首先计算 key 所属的段,然后对整个段上锁,再执行插入。通过细化敏感资源
2022-03-18 09:59:19
377
原创 HashMap 学习总结
文章目录HashMap构造函数插入时逻辑红黑树的插入扩容时逻辑删除时逻辑删除时逻辑HashMap基于 jdk11构造函数HashMap 支持传入一个初始容量以及扩容因子作为构造参数,有意思的是 HashMap 并不会以我们传入的初始容量作为大小,而是会将第一个大于等于初始容量的 2 的幂作为 Map 的大小,HashMap 的大小永远都是 2 的幂,这有许多好处:令 N 为 2 的幂,那么 $H \ % \ N \iff H \ & \ (N-1) $,位运算比求余运算快得多。令
2022-03-18 09:58:45
138
原创 数据库锁知识
文章目录数据库锁知识(INNODB)库锁表锁MDL锁意向锁在线DDL的效率问题锁升降级机制行锁四种隔离级别行锁的分类行记录锁(Record Locks)间隙锁(Gap Lock)临键锁(Next Key Lock)AUTO-INC Locking数据库锁知识(INNODB)库锁库锁主要分为两类:FTWRL(Flush tables with read lock),将数据库设置为只读状态,当客户端异常断开后,该锁自动释放,官方推荐使用的库锁。设置global全局变量,即set global rea
2022-03-18 09:58:21
313
原创 Redis 设计与实现重点回顾
文章目录Redis 设计与实现重点回顾第一部分:数据结构与对象简单动态字符串链表字典跳跃表整数集合压缩列表对象第二部分:单机数据库的实现数据库RDB 持久化AOF 持久化事件客户端服务器第三部分:多机数据库的实现复制哨兵 Sentinel集群Redis 设计与实现重点回顾注:本文是《Redis 设计与实现》章节后的重点回顾,夹杂着一些个人理解第一部分:数据结构与对象简单动态字符串Redis 只会使用 C 字符串作为字面量, 在大多数情况下, Redis 使用 SDS (Simple Dyn
2022-03-18 09:57:13
267
原创 SpringBoot 运行启动的所有步骤,自动装配以及细节总结
文章目录SpringBoot 源码总结注册初始化器和监听器设置系统环境变量注册注解处理增强器并注册 beanFactory加载源类到容器中注册 JVM 关闭钩子执行 ConfigurationClassPostProcessor 增强器doProcessConfigurationClass 解析 Configuration 类上的注解自动装配获取自动装配类过滤自动装配类手写自动装配组件总结总结SpringBoot 源码总结SpringApplication.run(Application.class,
2022-01-10 22:32:40
690
原创 SPI 机制以及 jdbc 打破双亲委派
文章目录SPI 机制以及 JDBC 打破双亲委派SPI 机制简介jdk SPI 原理写一个 demoJDBC 打破双亲委派模型文章已收录我的仓库:Java学习笔记SPI 机制以及 JDBC 打破双亲委派本文基于 jdk 11SPI 机制简介何为 SPI 机制?SPI 在Java中的全称为 Service Provider Interface,是JDK内置的一种服务提供发现机制,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。例如本文的中心 jdbc
2022-01-08 20:49:02
1426
原创 Spring 源码总结、IOC、循环依赖、AOP分析
Spring 源码本文基于 jdk 11核心类interface BeanFactory该接口是访问 Spring bean 容器的根接口,是 bean 容器的基本客户端视图; 其他接口如ListableBeanFactory和ConfigurableBeanFactory可用于扩展一些其他功能。简单来说,该类就是“容器”接口类,用以存放 bean,其内定义了一系列 getBean 方法,是一个存粹的 “bean 生产地”。class DefaultListableBeanFactory
2021-12-27 22:53:47
264
原创 线程池原理
文章目录线程池原理池化技术参数原理执行流程线程池状态Worker执行任务,线程复用Worker 何时开始工作execute 函数addWorker 函数Worker 关闭shutdownshutdownNow线程池工厂newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutornewSingleThreadExecutor线程池原理池化技术我们平时使用线程时,都是额外创建一个线程(Thread)去执行任务(run方法),run 方法执行完毕后
2021-12-26 17:40:28
3530
原创 计算机网络中的安全、常见攻击、以及HTTPS原理与抓包实践
计算机网络中的安全、常见攻击、以及HTTPS原理与抓包实践注:本文是 计算机网络中的安全 与 HTTPS 的合并。计算机网络中的安全、常见攻击、以及HTTPS原理与抓包实践计算机网络中的安全什么是安全?报文机密性 - 我们的谈话会被窃听吗?报文完整性 - 我收到的报文被篡改过吗?端点鉴别 - Alice,真的是你在给我发消息吗?报文机密性对称密匙密码体制块密码如何提前协商密匙非对称密匙密码体制(公开密匙密码)RSA算法不可信的公匙报文完整性
2021-12-24 11:42:18
3642
原创 Java垃圾回收机制与垃圾收集器
Java垃圾回收机制与垃圾收集器前言判定对象是否存活(标记)引用计数法可达性分析算法思想算法步骤对象复活引用概念的完善垃圾回收算法标记 - 清除法标记 - 复制法标记 - 整理法具体细节如何确定GC Roots?安全点和安全区域何时开始GC记忆集与卡表并发的可达性分析垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器CMS收集器G1(G.
2021-12-21 15:11:28
384
原创 Docker网络模型原理
Docker网络模型bridge模式容器向外发送信息外部向容器发送信息自定义网络规则host模式none模式参考文章已收录我的仓库:Java学习笔记与免费书籍分享Docker网络模型bridge模式bridge模式是docker默认的网络模式,也是使用最频繁的一个模式,我们主要理解该模式。容器向外发送信息在docker启动时,如果不显式添加参数,则默认使用该模式,启动时docker会创建一个虚拟网卡,被命名为docker0,docker0一端管辖着docker容.
2021-12-21 15:10:55
942
原创 万字详解TCP
TCP详解简介TCP报文格式流量控制 — 滑动窗口协议运作原理前沿指针不允许收缩1 字节报文探测糊涂窗口综合征发送端引起的糊涂窗口综合症接收端引起的糊涂窗口综合症超时重传机制超时时间如何计算?GBN 回退N步(Go Back N) 和 SR 选择重传(SELECR RETURN)糅合的实现,SACK选择确认快速重传要几个定时器?TCP 发送方精简伪代码拥塞控制慢启动拥塞避免快速恢复连接管理3次握手为什么不能 2 次握手SYN 泛洪.
2021-12-21 15:09:47
604
原创 JIT 即时编译及优化技术
JIT 即时编译及优化技术前言即时编译热点代码探测编译优化技术语言无关的经典优化技术之一:公共子表达式消除语言相关的经典优化技术之一:数组范围检查消除最重要的优化技术之一:方法内联最前沿的优化技术之一:逃逸分析为什么不直接编译所有字节码文章已收录我的仓库:Java学习笔记与免费书籍分享JIT 即时编译及优化技术前言我相信很多人都知道 Java 是一门解释性语言,不同与 C/C++,Javac编译器将 .java 文件编译成 .class 文件,然后由 JVM .
2021-12-21 15:09:06
511
原创 synchronized底层原理
synchronized底层原理前言无锁偏向锁偏向锁的工作原理重偏向批量重偏向其他规则轻量级锁初衷CAS具体实现重量级锁文章已收录我的仓库:Java学习笔记与免费书籍分享synchronized底层原理前言在JDK1.5之前,synchronized的实现是依赖于操作系统的,采用的是一种悲观的机制,必须严格保证资源的安全性,因此无论是否存在并发问题,都必须严格的经过获取锁操作,获取锁必须切换至内核态,而当线程尝试获取失败后,必须挂起线程然后切换,休眠或切.
2021-12-21 15:08:19
462
原创 类加载机制
类加载机制前言加载过程加载验证准备解析初始化阶段双亲委派模型文章已收录我的仓库:Java学习笔记与免费书籍分享类加载机制前言前端编译后,.java文件已经变成了字节码存储在.class文件中,问题是,运行时虚拟机是如何将一个静态文件读入JVM中作为运行时数据的一部分呢?这就是本文章的中心 —— 类加载机制。类加载的过程有哪些步骤呢?—— 家(加载) 宴(验证) 贝(准备) 斯(解析) 化(初始化)!加载过程加载加载过程主要完成三件事情:通过类的全限定名.
2021-12-21 15:07:47
247
原创 Java设计-微信小程序线上点餐/外卖项目+后台管理系统
HXOrder 是前后端分离的点餐/外卖系统,前端为小程序项目,小程序前端基于微信开发语言,小程序后端采用 SpringBoot + Mybatis + RabbitMq + Redis实现; 管理系统前端基于 Vue + Element 开发,后端基于 SpringBoot + SpringSecurity + JWT + Mybatis + Redis 实现
2021-12-21 14:59:03
7001
4
原创 一文搞懂数据库锁知识
数据库锁知识(INNODB)库锁表锁MDL锁意向锁在线DDL的效率问题锁升降级机制行锁四种隔离级别行锁的分类行记录锁(Record Locks)间隙锁(Gap Lock)临键锁(Next Key Lock)AUTO-INC Locking文章已收录我的仓库:Java学习笔记与免费书籍分享数据库锁知识(INNODB)库锁库锁主要分为两类:FTWRL(Flush tables with read lock),将数据库设置为只读状态,当客户端异常断开后,.
2021-10-04 22:09:07
289
原创 一文彻底搞懂事务底层原理
事务底层原理(INNODB)前言redo log为什么需要 redo log一些问题重做日志结构重做日志文件结构log group与循环写入日志何时写入磁盘?数据恢复:LSN标记CheckPoint 技术检查点的作用工作原理检查点何时触发?关于redo log的性能redo log日志写回修改语句性能undo log为什么需要undo log前置知识:了解SQL语句执行过程undo log存储结构undo log日志结构何时刷新回磁盘?事.
2021-09-25 20:48:54
1130
原创 深入解析分段与分页
分段、分页引言什么是碎片?段式模型的前身:基址加界限寄存器(动态重定位)分段式管理分段思想分段地址转换段的另一个优点:很好的支持共享虚拟地址翻译太慢?段的缺点:过多的外部碎片分页式管理分页思想分页地址转换分页的缺点:页表过大怎么办?多级页表段页式存储总结:文章已收录我的仓库:Java学习笔记与免费书籍分享分段、分页引言什么是碎片?碎片分为内部碎片与外部碎片,都是指浪费而不能使用的空间。内部碎片是指**已分配但未被使用的地址空间。*.
2021-09-13 21:14:57
1758
原创 一文彻底搞懂代理模式(Proxy)
代理模式引言代理模式的定义与特点代理模式的结构模式实现静态代理动态代理总结与装饰者模式文章已收录我的仓库:Java学习笔记与免费书籍分享代理模式引言代理模式是非常常见的模式,在生活中的例子也非常多,例如你不好意思向你关系不太好朋友帮个忙,这时需要找一个和它关系好的应一个朋友帮忙转达,这个中间朋友就是代理对象。例如购买火车票不一定要去火车站买,可以通过12306网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。代理模式的定义与特点代理模.
2021-08-25 15:32:38
7469
原创 线程间同步方式详解
线程间同步方式引言互斥锁探究底层,实现一个锁测试并加锁(TAS)比较并交换(CAS)另一个问题,过多的自旋?回到互斥锁信号量有名信号量无名信号量总结条件变量什么是条件变量?相关函数1. 初始化2. 等待条件3. 通知条件用法与思考实践——读写者锁文章已收录至我的仓库:Java学习笔记与免费书籍分享线程间同步方式引言不同线程间对临界区资源的访问可能会引起常见的并发问题,我们希望线程原子式的执行一系列指令,但由于单处理器上的中.
2021-08-22 20:10:36
748
原创 进程间通信方式?一文就够了!
进程间通信引言在操作系统中,一个进程可以理解为是关于计算机资源集合的一次运行活动,其就是一个正在执行的程序的实例。从概念上来说,一个进程拥有它自己的虚拟CPU和虚拟地址空间,任何一个进程对于彼此而言都是相互独立的,这也引入了一个问题 —— 如何让进程之间互相通信?由于进程之间是互相独立的,没有任何手段直接通信,因此我们需要借助操作系统来辅助它们。举个通俗的例子,假如A与B之间是独立的,不能彼此联系,如果它们想要通信的话可以借助第三方C,比如A将信息交给C,C再将信息转交给B —— 这就是进程间通信的主
2021-08-16 21:35:05
458
原创 响应式个人简历网页源代码
关于我认为每一个人都需要一个简历网页以介绍自己,可以作为面试时的加分项,也可以放置在您的个人网站之中。这是一款响应式炫酷而优雅的个人简历网页,电脑与手机均适用,无需联网,纯前端HTML+CSS+JavaScript实现,可用于个人简历、个人网站、个人简介或学习使用,可以通过配置文件自动生成属于你自己的网页。演示网页演示地址在手机或平板或电脑上查看该网页。下载&项目结构前往happysnaker/Resume项目仓库clone项目,保存在你自己的文件中。Resume文件下:con
2021-08-14 12:05:10
9103
3
原创 一文彻底搞懂观察者模式(Observer)
回到博客导航设计意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在实际设计开发中,我们通常会降低类与类之间的耦合度,这样可能会产生一个副作用:由于类与类被分割,我们难以维护类之间的一致性。举一个常见的例子,我们对用户显示数学饼状图是需要数据支撑的,例如下面这张东京奥运会金牌榜:在开发中,这张图表分为两个部分,一个是视图部分,也就是以饼状图呈现出的样子,一个是数据部分,即各国的金牌数量,由于我们将数据与视图抽离,因此一旦数据部分更新,视图
2021-07-30 11:15:58
241
原创 一文彻底弄懂适配器模式(Adapter)
回到博客导航设计意图适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。在某些时候,客户期望获得某种功能接口但现有的接口无法满足客户的需求,例如美国的正常供电电压为110V,一个中国人带了一款中国制造电器去美国,这个电器必须要在220V电压下才能充电使用。这种情况下,客户(中国人)的期望接口是有一个220V的电压为电器充电,但实际的接口是仅有一个110V的电压供电器充电,这种情况下就需要采用一根电压转换器(适配器)
2021-07-29 21:08:14
650
原创 一文彻底弄懂建造者模式(Builder)
回到博客导航设计意图为了将复杂对象的构建与它的表示分离,使得对象可以通过不同的表示创建出来。例如对一个迷宫可能有墙、房间和门,并且数量不计。迷宫可能仅由一堵墙构成,也可能由两堵墙构成,也可能由2个房间加一扇门构成…如果采用重载的方式生产迷宫,代码量是难以计数的、无比庞大的。针对一个对象拥有大量的组件(迷宫可以拥有很多墙或房间或门),而构造这个对象对其组件的使用又是不确定的这一问题(使用墙、房间、门的数量是不确定的),想要精细的控制构建过程,此时可以采用建造者模式解决问题。建造者模式的意图是为了构造
2021-07-28 19:44:09
175
原创 一文彻底弄懂单例模式(Singleton)
设计动机正如其名,单例模式保证一个类只有一个实例,那么为什么需要设计单例模式?对一些类来说,只有一个实例是很重要的,例如一台电脑只应该由一个文件系统,生产厂商不应该为一台电脑配置两个文件系统;一个应用应该有一个专属的日志对象,而不应该一会儿写到这里一会儿写到那里;一个程序中往往只有一个线程池,由一个线程池管理线程,而不应该使用多个线程池,那样会使得线程乱套并且难以维护;在抽象工厂中,具体的工厂类也只应该存在一个…诸如此类的要求,我们都需要保证一个类只有一个实例,此时便可以使用单例模式。设计我们必须
2021-07-28 17:43:35
244
原创 一文彻底弄懂工厂模式(Factory)
回到博客导航模式类型工厂模式属于创建者模式,与对象的创建有关,其中工厂方法模式用于类,而抽象工厂模式用于对象。创建型类模式将对象的部分创建工作延迟到子类,由子类创建对象;而创建型对象模式将它延迟到另一个对象中。模式设计意图工厂模式将复杂的对象创建工作隐藏起来,而仅仅暴露出一个接口供客户使用,具体的创建工作由工厂管理而对用户封装,将对象的创建和使用分离开来,降低耦合度,便于管理,能够很好的支持变化。对于某些类而言,其对象的创建可能是需要一系列复杂的参数或大量准备代码,当这个任务由客户完成时,如果客户
2021-07-27 21:04:30
574
原创 写给即将步入大一的计算机新生的一些经验之谈
回到博客导航前言一晃眼已经一年过去了,当初高考完之后的疯癫少年,到现在慢慢成熟的大二老学长(计算机专业大学生涯短),这一年内,经历了不少事情,曾经历过生活与学习上的迷茫,曾面对未来不知所措,也收获了甜甜的爱情,学到了优秀的剑法,拿到了很多奖项,整个一年下来也算是没有虚度时光,今于此记录,不仅仅是想给即将步入校园生活的新生们一些经验,也算是为我这一年做出一些总结。注:所有内容基于你的专业与兴趣更偏向于软件方向。可能会遇到的问题Q: 是考研还是就业?A: 这个问题太经典了,我想很多人的回答都会
2021-07-22 10:34:13
517
3
原创 CSAPP之详解Labs
CSAPP-labs-RECORD读万卷书,不如行万里路。实验一:DataLab详解实验二:BombLab详解实验三:MollocLab详解实验四:ShellLab详解
2021-04-14 15:05:06
286
原创 C++新手项目实践 — 智能人机对战五子棋
C-project-practice—intelligent-man-machine-gobang-fightC++新手项目实践 — 智能人机五子棋对战(利用Easyx的基础函数)项目演示视频智能五子棋项目视频项目说明该项目使用语言为c++,利用了easyx辅助画图,并未涉及easyx的高级使用,稍加学习即可掌握,项目涉及三大类,分别是:1.Class Show。这个类包含了绘图的主要函数,以及鼠标调用的函数。2.Class Users。这个类包含了用户的基本信息,以及二进制读写文件函数。3
2021-04-14 15:03:46
1397
原创 C语言学生管理系统(开源)
大一上免费课设——功能齐全的学生管理系统大一的时候可真美好啊,当时为了实现一个项目熬夜写一个星期都觉得累,反而单人完成项目之后还异常兴奋,有种难言的喜悦感,也挺佩服当时的自己的,一个人捣鼓了2000多行代码,不过还好当初做了亿点点注释,不然现在都看不懂了哈哈,代码部分繁琐,但我还是没改,毕竟也是当年的心血啊。文末给出开源代码。运行时截图:亮点:1.作为大一单人的课设,代码量大,一个系统中有着两个子系统,代码超2000多行(虽然现在的我看这个代码觉得写了很多废话)2.有着较为完善
2021-02-22 21:51:58
3632
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人