
笔记
文章平均质量分 94
happysnaker
这个作者很懒,什么都没留下…
展开
-
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 · 2068 阅读 · 0 评论 -
分布式系统中的复制问题
文章目录分布式系统中的复制主从复制主从复制工作原理新增从库处理节点宕机从库失效:追赶恢复主库失效:故障切换复制日志的实现基于语句的复制传输预写式日志(WAL)逻辑日志复制(基于行)基于触发器的复制复制延迟问题读己之写单调读一致前缀读复制延迟的解决方案多主复制多主复制的应用场景多个数据中心**多主复制的缺点**需要离线操作的客户端协同编辑处理写入冲突收敛至一致的状态多主复制拓扑无主复制当节点故障时写入数据库读修复和反熵读写的法定人数法定人数一致性的局限性检测并发写入最后写入胜利(丢弃并发写入)“此前发生”的关原创 2022-03-18 10:00:27 · 656 阅读 · 0 评论 -
HashMap 学习总结
文章目录HashMap构造函数插入时逻辑红黑树的插入扩容时逻辑删除时逻辑删除时逻辑HashMap基于 jdk11构造函数HashMap 支持传入一个初始容量以及扩容因子作为构造参数,有意思的是 HashMap 并不会以我们传入的初始容量作为大小,而是会将第一个大于等于初始容量的 2 的幂作为 Map 的大小,HashMap 的大小永远都是 2 的幂,这有许多好处:令 N 为 2 的幂,那么 $H \ % \ N \iff H \ & \ (N-1) $,位运算比求余运算快得多。令原创 2022-03-18 09:58:45 · 172 阅读 · 0 评论 -
数据库锁知识
文章目录数据库锁知识(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 · 350 阅读 · 0 评论 -
Redis 设计与实现重点回顾
文章目录Redis 设计与实现重点回顾第一部分:数据结构与对象简单动态字符串链表字典跳跃表整数集合压缩列表对象第二部分:单机数据库的实现数据库RDB 持久化AOF 持久化事件客户端服务器第三部分:多机数据库的实现复制哨兵 Sentinel集群Redis 设计与实现重点回顾注:本文是《Redis 设计与实现》章节后的重点回顾,夹杂着一些个人理解第一部分:数据结构与对象简单动态字符串Redis 只会使用 C 字符串作为字面量, 在大多数情况下, Redis 使用 SDS (Simple Dyn原创 2022-03-18 09:57:13 · 294 阅读 · 0 评论 -
响应式个人简历网页源代码
关于我认为每一个人都需要一个简历网页以介绍自己,可以作为面试时的加分项,也可以放置在您的个人网站之中。这是一款响应式炫酷而优雅的个人简历网页,电脑与手机均适用,无需联网,纯前端HTML+CSS+JavaScript实现,可用于个人简历、个人网站、个人简介或学习使用,可以通过配置文件自动生成属于你自己的网页。演示网页演示地址在手机或平板或电脑上查看该网页。下载&项目结构前往happysnaker/Resume项目仓库clone项目,保存在你自己的文件中。Resume文件下:con原创 2021-08-14 12:05:10 · 9469 阅读 · 3 评论 -
Docker网络模型原理
Docker网络模型bridge模式容器向外发送信息外部向容器发送信息自定义网络规则host模式none模式参考文章已收录我的仓库:Java学习笔记与免费书籍分享Docker网络模型bridge模式bridge模式是docker默认的网络模式,也是使用最频繁的一个模式,我们主要理解该模式。容器向外发送信息在docker启动时,如果不显式添加参数,则默认使用该模式,启动时docker会创建一个虚拟网卡,被命名为docker0,docker0一端管辖着docker容.原创 2021-12-21 15:10:55 · 1008 阅读 · 0 评论 -
JIT 即时编译及优化技术
JIT 即时编译及优化技术前言即时编译热点代码探测编译优化技术语言无关的经典优化技术之一:公共子表达式消除语言相关的经典优化技术之一:数组范围检查消除最重要的优化技术之一:方法内联最前沿的优化技术之一:逃逸分析为什么不直接编译所有字节码文章已收录我的仓库:Java学习笔记与免费书籍分享JIT 即时编译及优化技术前言我相信很多人都知道 Java 是一门解释性语言,不同与 C/C++,Javac编译器将 .java 文件编译成 .class 文件,然后由 JVM .原创 2021-12-21 15:09:06 · 591 阅读 · 0 评论 -
一文搞懂数据库锁知识
数据库锁知识(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 · 337 阅读 · 0 评论 -
一文彻底搞懂事务底层原理
事务底层原理(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 · 1254 阅读 · 0 评论 -
深入解析分段与分页
分段、分页引言什么是碎片?段式模型的前身:基址加界限寄存器(动态重定位)分段式管理分段思想分段地址转换段的另一个优点:很好的支持共享虚拟地址翻译太慢?段的缺点:过多的外部碎片分页式管理分页思想分页地址转换分页的缺点:页表过大怎么办?多级页表段页式存储总结:文章已收录我的仓库:Java学习笔记与免费书籍分享分段、分页引言什么是碎片?碎片分为内部碎片与外部碎片,都是指浪费而不能使用的空间。内部碎片是指**已分配但未被使用的地址空间。*.原创 2021-09-13 21:14:57 · 1939 阅读 · 0 评论 -
一文彻底搞懂代理模式(Proxy)
代理模式引言代理模式的定义与特点代理模式的结构模式实现静态代理动态代理总结与装饰者模式文章已收录我的仓库:Java学习笔记与免费书籍分享代理模式引言代理模式是非常常见的模式,在生活中的例子也非常多,例如你不好意思向你关系不太好朋友帮个忙,这时需要找一个和它关系好的应一个朋友帮忙转达,这个中间朋友就是代理对象。例如购买火车票不一定要去火车站买,可以通过12306网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。代理模式的定义与特点代理模.原创 2021-08-25 15:32:38 · 20436 阅读 · 0 评论 -
线程间同步方式详解
线程间同步方式引言互斥锁探究底层,实现一个锁测试并加锁(TAS)比较并交换(CAS)另一个问题,过多的自旋?回到互斥锁信号量有名信号量无名信号量总结条件变量什么是条件变量?相关函数1. 初始化2. 等待条件3. 通知条件用法与思考实践——读写者锁文章已收录至我的仓库:Java学习笔记与免费书籍分享线程间同步方式引言不同线程间对临界区资源的访问可能会引起常见的并发问题,我们希望线程原子式的执行一系列指令,但由于单处理器上的中.原创 2021-08-22 20:10:36 · 809 阅读 · 0 评论 -
进程间通信方式?一文就够了!
进程间通信引言在操作系统中,一个进程可以理解为是关于计算机资源集合的一次运行活动,其就是一个正在执行的程序的实例。从概念上来说,一个进程拥有它自己的虚拟CPU和虚拟地址空间,任何一个进程对于彼此而言都是相互独立的,这也引入了一个问题 —— 如何让进程之间互相通信?由于进程之间是互相独立的,没有任何手段直接通信,因此我们需要借助操作系统来辅助它们。举个通俗的例子,假如A与B之间是独立的,不能彼此联系,如果它们想要通信的话可以借助第三方C,比如A将信息交给C,C再将信息转交给B —— 这就是进程间通信的主原创 2021-08-16 21:35:05 · 590 阅读 · 0 评论 -
一文彻底搞懂观察者模式(Observer)
回到博客导航设计意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在实际设计开发中,我们通常会降低类与类之间的耦合度,这样可能会产生一个副作用:由于类与类被分割,我们难以维护类之间的一致性。举一个常见的例子,我们对用户显示数学饼状图是需要数据支撑的,例如下面这张东京奥运会金牌榜:在开发中,这张图表分为两个部分,一个是视图部分,也就是以饼状图呈现出的样子,一个是数据部分,即各国的金牌数量,由于我们将数据与视图抽离,因此一旦数据部分更新,视图原创 2021-07-30 11:15:58 · 289 阅读 · 0 评论 -
一文彻底弄懂适配器模式(Adapter)
回到博客导航设计意图适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。在某些时候,客户期望获得某种功能接口但现有的接口无法满足客户的需求,例如美国的正常供电电压为110V,一个中国人带了一款中国制造电器去美国,这个电器必须要在220V电压下才能充电使用。这种情况下,客户(中国人)的期望接口是有一个220V的电压为电器充电,但实际的接口是仅有一个110V的电压供电器充电,这种情况下就需要采用一根电压转换器(适配器)原创 2021-07-29 21:08:14 · 1263 阅读 · 0 评论 -
一文彻底弄懂建造者模式(Builder)
回到博客导航设计意图为了将复杂对象的构建与它的表示分离,使得对象可以通过不同的表示创建出来。例如对一个迷宫可能有墙、房间和门,并且数量不计。迷宫可能仅由一堵墙构成,也可能由两堵墙构成,也可能由2个房间加一扇门构成…如果采用重载的方式生产迷宫,代码量是难以计数的、无比庞大的。针对一个对象拥有大量的组件(迷宫可以拥有很多墙或房间或门),而构造这个对象对其组件的使用又是不确定的这一问题(使用墙、房间、门的数量是不确定的),想要精细的控制构建过程,此时可以采用建造者模式解决问题。建造者模式的意图是为了构造原创 2021-07-28 19:44:09 · 212 阅读 · 0 评论 -
一文彻底弄懂工厂模式(Factory)
回到博客导航模式类型工厂模式属于创建者模式,与对象的创建有关,其中工厂方法模式用于类,而抽象工厂模式用于对象。创建型类模式将对象的部分创建工作延迟到子类,由子类创建对象;而创建型对象模式将它延迟到另一个对象中。模式设计意图工厂模式将复杂的对象创建工作隐藏起来,而仅仅暴露出一个接口供客户使用,具体的创建工作由工厂管理而对用户封装,将对象的创建和使用分离开来,降低耦合度,便于管理,能够很好的支持变化。对于某些类而言,其对象的创建可能是需要一系列复杂的参数或大量准备代码,当这个任务由客户完成时,如果客户原创 2021-07-27 21:04:30 · 677 阅读 · 0 评论 -
一文彻底弄懂单例模式(Singleton)
设计动机正如其名,单例模式保证一个类只有一个实例,那么为什么需要设计单例模式?对一些类来说,只有一个实例是很重要的,例如一台电脑只应该由一个文件系统,生产厂商不应该为一台电脑配置两个文件系统;一个应用应该有一个专属的日志对象,而不应该一会儿写到这里一会儿写到那里;一个程序中往往只有一个线程池,由一个线程池管理线程,而不应该使用多个线程池,那样会使得线程乱套并且难以维护;在抽象工厂中,具体的工厂类也只应该存在一个…诸如此类的要求,我们都需要保证一个类只有一个实例,此时便可以使用单例模式。设计我们必须原创 2021-07-28 17:43:35 · 305 阅读 · 0 评论