- 博客(113)
- 资源 (2)
- 收藏
- 关注
原创 Kerberos安全认证原理
目录1、Kerberos是什么2、主要角色3、基本概念4、认证过程4.1 初始验证4.2获取服务票据4.3服务验证5、环境假设6、局限性7、相关命令参考文档:协议:协议主要命令:主要命令1、Kerberos是什么 Kerberos是一种一种网络身份验证协议,只包括验证环节,不负责授权。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。 用户只需输入一次身份验证信息,就可凭借此验证获得的票据授予票据(ticke...
2021-04-07 15:32:01
2135
原创 LFU算法族:LFU-Aging(LFUDA)算法
LFU算法族目录汇总:LFU算法LFU-Aging算法(本文)window-LFU算法1、原理 LFUDA(LFU with dynamic aging),是LFU算法对于缓存污染问题的优化算法。它为缓存引用次数增加了“时间因子”的概念,用来适应缓存使用场景的变化。 LFUDA并没有真的为每次引用记录一个时间,这样开销太大的。LFUDA是通过引入了引用次数的“老化”机制来引入“时间因子”的。LFU会动态持有一个平均引用次数,数值是当前所有缓存引用次数的平均值。当平均引用次...
2021-02-09 17:34:56
1324
原创 LFU算法族:LFU算法
1、原理LFU(LeastFrequentlyUsed)算法根据访问缓存的历史频率来淘汰数据,即“如果数据过去被访问的频率很高,那么将来被访问的频率也会很高”。2、数据结构 一般会维护两个数据结构:哈希:用来提供对外部的访问,查询效率更高; 链表:维护了对元素访问次数的排序 缓存操作导致的链表变化:添加新元素:新元素访问次数为1,放到队尾; 缓存淘汰:从队尾开始淘汰,因为队尾元素的访问次数最少; 访问缓存:访问缓存会增加元素的访问次数,所以元素在链表中的位置...
2021-02-09 15:18:04
11743
原创 LFU算法族:window-LFU
1、LFU算法的不足 LFU(LeastFrequentlyUsed)是一种缓存淘汰算法。LFU算法是根据缓存的访问频率,去淘汰访问次数最低的缓存。这样就给LFU带来了两个问题:不可避免的问题:对于每个缓存项,LFU都需要记录其访问次数,这导致了LFU需要一笔不小的额外内存开销; 可一定程度避免的问题:对于记录的访问次数,LFU要对其进行排序,用于淘汰访问次数最低的算法。而对大量数据的排序,则会带来一定的处理器开销。当然,这个开销可以通过在每次操作时调整排序顺序,来避免在内存淘汰时...
2021-01-27 20:58:47
1532
3
原创 详解IO模型
目录一、IO基础原理1、操作系统的IO2、IO的基本概念二、IO模型1、同步阻塞IO:BIO2、同步非阻塞IO:NIO3、IO多路复用4、异步IO:AIO一、IO基础原理1、操作系统的IO 应用程序进行IO的读写,依赖于底层操作系统的IO读写,是通过操作系统的两大系统调用read、write来实现的。应用程序调用操作系统的read、write接口,完成数据在应用程序的进程缓冲区和操作系统的内核缓冲区之间的交互。 操作系统设置数据缓冲区的目的,是为了...
2020-11-06 16:36:16
367
原创 Guava Cache:原理详解和源码分析
一、基础信息1、maven依赖<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.1-jre</version></dependency>...
2020-10-05 21:05:18
4852
1
原创 Redis:丢弃策略
当Redis内存超过物理内存限制时,内存数据会和磁盘产生频繁的交换,让Redis的性能急剧下降。所以在生产环境,这种交换行为是不允许的。 maxmemory参数是用来配置最大内存大小的,如果超过了maxmemory,Redis提供了如下几种可选策略,用来设置maxmemory-policy。1、丢弃策略概览noeviction:不会继续服务处理del之外的写请求,读请求可...
2020-02-23 17:45:13
1261
原创 网络:数据链路层原理总结
一、主要作用 数据链路层的主要作用:封装城帧:将网络层的数据封装成帧的个数,在数据前添加帧首,在数据后添加帧尾; 透明传输:对于出现在帧数据中的控制字符,但是要当做不存在的去处理; 差错检测:物理层只负责传输比特流,无法控制是否出错,所以需要数据链路层负责差错检测的工作。1、封装成帧 帧是数据链路层数据的基本单元。发送端在网络层的一段数据的前后分别添加一个标记,形成“...
2020-01-27 17:16:21
1186
原创 网络:UDP协议总结
1、简介 UDP(User Datagram Protocol),用户数据报协议。UDP报文长度,取决于应用层数据的长度,UDP并不做拆分和合并。 UDP数据报的位置:2、协议首部 UDP协议结构图: 可以看出,UDP协议首部总共有64位,分成4部分:源端口号:发送UDP报文的服务的端口号; 目的端口号:目标进程使用的端口号; UDP长度...
2020-01-21 10:32:56
343
原创 网络:实时运输协议RTP和实时运输控制协议RTCP
1、RTP RTP(Real-time Transport Protocol),实时运输协议,为实时应用提供端到端的运输,但是不提供任何服务质量的保证。1.1 工作流程 需要发送的多媒体数据块经过压缩编码后,先发送给RTP封装成RTP分组(也叫RTP报文),然后把RTP分组装入运输层UDP用户数据报中,再向下递交给IP层。RTP协议本身不对多媒体数据块做任何处理,只是向应用...
2020-01-15 12:11:03
1103
原创 网络:应用层相关协议
应用层位于传输层之上,在OSI七层模型中,分为了三层,从上到下分别是应用层、表示层、会话层。这里对这三层不做具体区分。 应用层是面向用户的一层,主要包括FTP、HTTP、HTTPS、DNS、TELNET等协议。1、DNS协议1.1 DNS和域名 DNS(Domain Name System),域名系统。域指的是自治系统网络,名指的是IP对应的名字。域名系统可以将...
2020-01-15 00:02:41
5763
原创 网络:网络层IP协议
目录一、IP协议1、 IP数据报1.1 IP首部2、IP协议的转发2.1 路由表2.2 IP协议转发流程3、子网划分3.1 分类的IP地址3.2 划分子网的基本思想3.3 子网掩码3.4 无分类编址CIDR(构成超网)二、ARP协议1、ARP协议2、RARP协议三、网络地址转换NAT四、差错报告:ICMP协议1、差错报告2、询...
2020-01-14 22:10:25
1293
原创 Mybatis:常见面试题
1、一级缓存和二级缓存 一级缓存是SqlSession级别的缓存,随着SqlSession的创建而存在,随着SqlSession的销毁而销毁。 二级缓存是命名空间级别的缓存,可以在同一个命名空间中的多个SqlSession之间通用,默认关闭。当查询数据库时,会先查询二级缓存,然后查询一级缓存,最后查询数据库。需要注意的是,如果结果即是自定义的Java bean,则需要该be...
2020-01-12 15:35:57
285
原创 Spring:AOP原理
AOP指的是面向切面编程。Spring AOP是一种编程范式,主要目的是将非功能性的需求从功能性的需求中分离出来,达到解耦的目的。一、基本概念1、切面 切面Aspect,指的是一个关注点的模块化,这个关注点可能会横切多个对象。切面由ApplicationContext中的<aop:aspect>配置。2、连接点 连接点JoinPoint,指的是程...
2020-01-11 23:51:31
140
原创 Spring:MVC原理
1、处理流程和核心组件1.1 处理流程 Spring MVC大致的处理流程: 流程简述:用户发送请求至前端控制器DispatcherServlet; 前端控制器DispatcherServlet收到请求后调用处理器映射器HandlerMapping; 处理器映射器HandlerMapping根据请求的URL找到具体的处理器,生成处理器对象Handler及处理器拦...
2020-01-11 22:37:13
147
原创 Spring:IoC和DI原理
一、IOC架构 Spring通过一个配置文件描述Bean及Bean之间的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。 Spring的IoC容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、 Bean实例代理、事件发布、资源装载等高级服务。 Spring启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一...
2020-01-11 20:09:25
1317
原创 设计模式:代理模式
一、简介 代理模式指的是客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象。使用代理模式有两个目的:保护目标对象;增强目标对象。 代理模式的结构:真实类:客户端要调用的对象的类型; 接口:真实要执行的对象所实现的接口; 代理类:实现了和真实所实现的相同接口,客户端通过调用代理类的实例间接调用真实类的对象。二、静态代理 用一个例子来表示...
2020-01-09 20:30:53
145
原创 MySQL:设置初始密码
MySQL刚刚安装后,默认是没有密码的。需要先启动mysql,mac下启动命令:mysql.server start 可以用root账号,通过如下命令在命令行进行登录:mysql -u root 用quit命令可以退出mysql界面。可以通过mysqladmin命令设置密码:mysqladmin -u root password “newpass”...
2020-01-09 13:31:19
2437
原创 设计模式:委派模式
委派模式指的是根据任务的内容,将任务分发给不同的执行目标去执行。委派模式的核心是根据任务内容进行分发、调度、派遣。委派模式不属于GoF23种设计模式,但是在Spring中应用广泛。 一个打印机的例子。打印机分发器根据需要打印的内容,是黑白版面、彩色版面还是立体结构,来决定将内容发送给哪个的打印机来实现,这就是委派模式。...
2020-01-08 17:11:20
117
原创 设计模式:策略模式
1、基本概念1.1 定义 策略模式,指的是定义一系列算法并封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,是一种行为型模式。 在开发过程中,我们往往定义一个接口或者抽象类,然后用不同的实现类来封装不同的策略,每一条实现类就是一条策略,然后再根据用户的需求来选择合适的策略。一般来说,策略模式不会单独使用,跟模版方法模式、工厂模式等混合使用的情况比较多。...
2020-01-08 17:01:45
107
原创 设计模式:适配器模式
1、简介1.1 基本概念 适配器模式是指将一个类的接口转换成用户期望的另一个接口,使原本接口不兼容的类可以一起工作,属于结构型设计模式。1.2 适用场景 适配器模式适用于以下场景:已经存在的类的方法和需求不匹配; 不是软件初始阶段考虑的设计模式,而是随着软件的发展,用于解决不同产品、不同厂家造成的功能类似而接口不同的问题。2、实际场景2.1 需求相关需求...
2020-01-08 16:31:22
141
原创 设计模式:工厂模式
一、简单工厂模式 简单工厂模式是指由一个工厂对象决定创建哪一种产品类的实例,但是不属于GoF的23种设计模式。简单工厂模式适用于工厂类负责创建的对象较少的场景,客户端只需要传入工厂类的参数,而对如何创建对象并不关心。1、产品类的接口及实现类 接口:public interface ICourse { void study();} 实现类:p...
2020-01-08 12:25:07
129
原创 设计模式:单例模式
单例模式指的是确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。1、饿汉模式 饿汉模式指的是在类加载的时候立即进行初始化,并创建单例对象。 优点:不需要加锁,执行效率高,实现简单; 缺点:初始化后可能有很长一段时间不会使用,导致内存的浪费。 适用场景:适用于单例对象较少的情况。代码示例:public ...
2020-01-07 23:58:35
127
原创 sharding JDBC读写分离原理
一、基础信息 maven依赖:<groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-namespace</artifactId><version>4.0.0-RC3</version>二、原理 ...
2020-01-06 23:00:27
780
1
原创 Paxos算法
一、基本要求1、拜占庭将军问题 拜占庭帝国有许多支军队,不同的将军之间必须制定一个统一的行动计划,从而做出进攻或者撤退的决定。同时,各个将军在地理上都是被分隔开来的,只能依靠军队的通讯员来进行通讯。然而,在所有的通讯员中可能存在叛徒,这些叛徒可以任意篡改消息,从而达到欺骗将军的目的。2、要求 假设有一组可以提出提案的进程集合,那么对于一致性算法来说,需要保证以下几点:...
2020-01-06 22:59:04
145
原创 Redis:哨兵Sentinel
Redis提供了一种方案,用于在主节点故障时自动进行主从切换。1、Redis Sentinel Redis提供了Redis Sentinel集群,用于持续监控主从节点的监控:当客户端来连接集群时,会首先连接Sentinel,通过Sentinel获取主节点的地址,然后再连接主节点进行数据交互; 当主节点发生故障时,客户端会重新向Sentinel询问主节点地址,Sentin...
2020-01-06 17:07:56
188
原创 Redis:复制
Redis的主从数据是异步同步的,所以分布式的Redis系统并不满足一致性要求;但是当主节点中数据发生修改后,会不断的向从节点同步数据。即使网络断开了,从节点的数据出现不一致,但是当网络恢复后,从节点会继续同步数据,保证最终一致性。1、同步的渠道 Redis支持主从同步和从从同步。2、同步的方式2.1 增量同步 主节点会将对自己的状态产生修改性影响的指令记录...
2020-01-06 16:38:11
111
原创 Redis:Jedis连接池JedisPool
目录1、JedisPool的应用1.1 基本应用1.2 封装应用1.3 增加超时重试2、JedisPool配置2.1 工厂配置2.2 资源池配置 Jedis提供了连接池JedisPool。由于Jedis对象不是线程安全的,所以一般会从连接池中取出一个Jedis对象独占,使用完毕后再归还给连接池。 maven依赖:<!-- https://mv...
2020-01-06 15:56:12
2295
原创 volatile原理
1、内存可见性 volatile关键字可以使变量的改变,在线程间即时可见。1.1 Java变量的读写 Java实现工作内存和主内存同步的原子性操作:lock:作用于主内存,把变量标识为线程独占状态。 unlock:作用于主内存,解除独占状态。 read:作用主内存,把一个变量的值从主内存传输到线程的工作内存。 load:作用于工作内存,把read操作传过来的变量值...
2020-01-01 21:11:06
464
原创 Redis:过期策略
1、过期策略 Redis有两种策略来删除过期的key:一种是将设置了过期时间的key放到一个集合中,定时遍历集合删除到期的key;另一种是使用惰性策略,在客户端访问这个key的时候,对key的过期时间进行检测,如果过期就立即删除。1.1 定时扫描策略 Redis默认每秒进行10次过期扫描,过期扫描不会遍历过期字典的所有的key,而是采用一种贪心策略:从过期字典随机选出2...
2019-12-31 18:18:06
393
原创 Redis:分布式锁
分布式锁的本质,就是在Redis中给需要锁定的key设置一个值,这样在其他线程来访问的时候,发现这个key已经被设置了值,就会放弃或者等待。1、设置分布式锁 注意事项:要设置超时时间,以防止服务未能正常释放锁; 设置锁和设置超时时间的操作必须是原子性的,以防止设置锁后且设置超时时间前服务挂掉,导致锁一直被占领,不能被释放。 Redis可以通过如下方式原子性的设置...
2019-12-30 23:47:27
130
原创 Redis:持久化方案
Redis的持久化有两种机制:快照,AOF日志。1、快照 快照是一种全量备份机制,是内存数据的二进制序列化形式,在存储上非常紧凑。 Redis的单线程程序,为了实现持久化的同时可以响应客户端请求的目的,Redis使用了操作系统的COW(Copy On Write)机制来实现快照持久化。1.1 Redis在持久化的过程调用glibc的函数fork产生一个子进程...
2019-12-30 23:25:59
184
原创 Java GC新生代晋升老年代的情况
Java中对象一般在新生代中进行创建,但是在一定的机制中会触发晋升老年代的机制。相关机制包括:1、分配担保机制 Eden区满时,进行Minor GC,当Eden和一个Survivor区中依然存活的对象无法放入到Survivor中,则通过分配担保机制提前转移到老年代中。2、对象过大 若对象体积太大,新生代无法容纳这个对象,就会绕过新生代, 直接在老年代分配, 此...
2019-12-27 17:35:24
3304
原创 Java类加载
一、类加载的时机1、类加载的全过程 类加载的过程示意图: 其中,加载、验证、准备、初始化、卸载的开始顺序是确定的,而解析不一定,某些情况下可能在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定。 需要注意的是,这只是开始的顺序,进行与结束的顺序并不一定。因为这些阶段通常都是互相交叉地混合式进行的,通常会在一个阶段执行的过程中调用激活另一个阶段。1...
2019-12-25 23:05:16
171
原创 Java面试准备之算法
1、一致性哈希算法 参考文章:一致性哈希算法描述: 通过传统哈希算法寻找目标服务器的时候,通常是将哈希值根据目标服务实例的数量来进行取模。例如有3个服务实例,哈希值计算得14,14对3取模得2,则目标服务器的实例为2号服务实例。 传统哈希算法是有弊端的。如果服务的实例数量发生了更改,绝大多数缓存内容的模值会发生改变,此时会发生缓存雪崩。 一致性哈希算法和...
2019-12-25 22:09:29
373
原创 MySQL:Explain详解
目录1、id2、select_type3、table4、type5、possible_keys、key和key_len6、ref7、rows8、Extra explain命令通常用来分析低效SQL语句执行慢的原因。explain命令可以获取MySQL执行select语句的指定计划,包括select语句执行过程中表如何连接和连接的顺序。示例:1、id...
2019-11-23 22:44:32
287
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人