05 2019 档案
摘要:Selector是NIO中的可选择Channel(SelectableChannel)的multiplexor。有两个拗口的概念,首先是SelectableChannel,在NIO里并非所有的Channel都是可选择的,必须继承SelectableChannel的Channel才可以注册到Selec
阅读全文
摘要:分为两部分,首先替换默认数据源为阿里德鲁伊并添加监控,其次是SpringBoot下使用Mybatis 替换数据源为德鲁伊 首先在配置文件里配置好数据库连接的基本信息,如username password url等,重要的是把默认的type换成Druid。这样做数据源已经换成druid了,但是如果想完
阅读全文
摘要:在SpringBoot中发生了4xx 5xx之类的错误,SpringBoot默认会发一个/error的请求,该请求由BasicErrorController处理,即在SpringBoot中错误处理也是由Controller负责的。该Controller种主要有两个方法,分别用来返回HTML页面和JS
阅读全文
摘要:概述 对于一个请求,可能会需要很多的处理逻辑,如果把所有的处理逻辑都放在一个ChannelHandler中,那么代码会十分的臃肿,因此需要把逻辑放在不同的ChannelHandler中实现面向对象的单一职责原则。Netty使用责任链模式把负责不同逻辑的ChannelHandler组合在一起,Chan
阅读全文
摘要:概述 AQS框架下的锁都是实现Lock接口并实现tryAcquire方法,在tryAcquire方法中对state变量进行修改来改变锁的状态。 重入性。获得锁的线程可以再次获得锁。 公平锁。严格保证先尝试获得锁的线程能够先获得锁。 非公平锁。不能严格保证先尝试获得锁的线程先获得锁。 获得锁 非公平锁
阅读全文
摘要:SpringBoot对SpringMVC提供了许多自动配置 Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans. Support for serving static resources, includ
阅读全文
摘要:Channel可以理解为铁轨,Buffer是铁轨上的火车。铁轨的两端连接这文件描述符或者说文件的缓冲区和程序运行时的内存。借助NIO是一种更加符合OS底层文件系统的调用方式,使用NIO可以用更小的开销实现IO服务。 Channel Channel是一个接口,但是接口里的方法非常的少,只有和打开关闭有
阅读全文
摘要:ByteBuf是顶层的抽象类,定义了用于传输数据的ByteBuf需要的方法和属性。 AbstractByteBuf 直接继承ByteBuf,一些公共属性和方法的公共逻辑会在这里定义。例如虽然不同性质的ByteBuf底层实现不同如堆Buffer和直接Buffer,但在进行数据写入的时候都要检查并移动r
阅读全文
摘要:配置文件--读入并转换-->Element--解析-->bdHolder--注册-->BeanDifinition parseBeanDefinitionElement 解析的主要阶段,把Element包含的bean的所有配置信息解析到bdHolder中,具体的解析过程调用了一个重载的parseBe
阅读全文
摘要:入队 Node AQS同步队列和等待队列共用同一种节点结构Node,与同步队列相关的属性如下。 prev 前驱结点 next 后继节点 thread 入队的线程 入队节点的状态 acquire 模板方法,失败后构造节点、入队、自旋。需要关注的是如果if条件满足会执行selfInterrupt,这个后
阅读全文
摘要:ServerBootStrap 服务端的辅助启动类,使用Builder模式隐藏了多个构造器的参数。 EventLoopGroup Reactor线程池。EventLoopGroup是EventLoop数组,EventLoop负责轮询所有注册到Selector上的channel。 绑定Channel
阅读全文
摘要:JUC包下的阻塞原语,所谓阻塞原语指的是JUC下所有对线程挂起的操作都是通过LockSupport来完成的。 基本操作 有点像wait notify机制,子线程调用park会被挂起,等待别的线程unpark才会接着park继续执行,且park的线程处于waiting状态。 中断 处于waiting状
阅读全文
摘要:4.1 JIT概览 语言根据执行的方式不同分为编译型语言和解释型语言。以C++为代表的编译型语言在执行前需要编译成机器码,不同的CPU需要不同的编译器,编译成功后在同一台机器不需再次编译。以Python为代表的解释型语言,解释器一行一行的解释执行Python代码。 编译型语言的优势在于跨平台,只要平
阅读全文
摘要:定义:多个对象都有机会处理请求,避免请求的处理者和请求的发送者耦合。当一个请求到来的时候,遍历责任链,找到第一个能够处理该请求的处理者。 优点:避免请求者和处理者耦合;方便的增加或减少处理者。 角色:请求者 抽象处理者 具体处理者 抽象处理者定义了一个处理者需要具备的两个重要属性:1、什么条件下一个
阅读全文
摘要:1、通信过程 作用:规定浏览器和服务端通信的格式。 点击URL通信的过程: 浏览器找到URL连接对应的IP地址。现在缓存里找URL对应的IP,如果没有向DNS服务器请求解析URL对应的IP地址。 TCP连接建立,向IP:80建立TCP连接。(可额外补充路由选择过程,待完善。) 向服务器发送请求,可能
阅读全文
摘要:Unix中5种IO模型 就网络通信而言,一次数据读入可以分为两个阶段,首先等待数据从网络中到达,到达后需要复制到内核的缓冲区中,第二个阶段是从内核的缓冲区复制到进程的缓冲区,复制到进程的缓冲区才算读取完毕。推广到所有IO,一次完整的IO读入分为两个阶段 等待数据准备完毕 把准备好的数据读到进程的内存
阅读全文
摘要:为什么使用Redis做缓存 MySQL缺点 单机连接数目有限 对数据进行写速度慢 Redis优点 内存操作数据速度快 IO复用,速度快 单线程模型,避免线程切换带来的开销,速度快 一致性问题 读数据的时候首先去Redis里读,没有读到再去MySQL里读,读回来之后更新到Redis里作为下一次的缓存。
阅读全文
摘要:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/solution/ 暴力 本题可以多次买卖股票,如果只允许一次买卖股票,整个暴力就是n2的算法,如果可以无限制买卖股票直接用普通的写法不是很好写,可以用递归来解决。
阅读全文
摘要:2.1 传统的BIO编程 以服务器为例,在传统BIO模型下的服务器,每当一个新的请求到来的时候回分配一个线程去处理该请求,并且该线程在执行IO操作的时候会一直阻塞,知道IO操作完成或抛出异常才会返回。当网络情况不佳时,网络IO可能会耗费大量时间,那么就会同时有大量线程在服务器上阻塞着,很容易造成内存
阅读全文
摘要:209 长度最小的子数组 https://leetcode-cn.com/problems/minimum-size-subarray-sum/submissions/ 首先是滑动窗口的思路,我感觉这种寻找满足某个条件的连续的子集,如这里的数组,可能还会在字符串里用到。 但这题卡了我很久的是边界条件
阅读全文
摘要:集群是Redis提供的Redis数据库分布式方案。 为什么需要分布式Redis 17.1 节点 节点(Nod)是集群(Cluster)基本组成元素,节点就是普通的Redis数据库,只不过该数据库运行在进群模式下。节点之间通过Cluster Meet彼此握手实现集群化。 17.2 槽指派 有点像Has
阅读全文

浙公网安备 33010602011771号