摘要:
NIO是面向缓存的非阻塞IO模型,其有三大核心组件:Buffer、Channel、Selector,如下图: 原理都好理解,接下来从Java api来看下三大核心组件的简单使用。 1、Buffer Buffer有几大子类:ByteBuffer(最常用)、ShortBuffer、CharBuffer、 阅读全文
摘要:
总结线上遇到的问题,能很好的学习其中的理论,从而提高自己应对线上问题的能力。 0、kafka生产者和消费者源码分析 1、Kafka ISR频繁伸缩缩引发性能急剧下降原因分析 要点概述:主要是因为kafka Broker在处理高水位线(HW)会涉及到读写锁leaderIsrUpdateLock, (1 阅读全文
摘要:
https://segmentfault.com/a/1190000023854950 rocketMq的推模式,默认每5s检查是否有新消息,另外在处理commitLog消息分发到Message Queue的时候,会唤醒消息请求处理操作,所以对于消息的响应是比较及时的。 阅读全文
摘要:
1、AOP原理 AOP:本质是在不改变原有业务逻辑的情况下,增加横向切面,从而增加一些额外功能。这样能减少很多冗余代码,易于维护。比如权限校验、日志、事务控制、性能监控等场景。 spring实现AOP使用的是动态代理。默认如果被代理对象没有实现接口则使用CGLB代理,如果被代理对象实现了接口就使用J 阅读全文
摘要:
1、https原理 2、http连接池 3、HttpClient和OkHttp的区别 从二者的使用,超时设置,性能方面看下它们的不同之处。 3.1、二者的使用 HttpClient的使用 使用HttpClient发送请求主要分为一下几步骤: 创建 CloseableHttpClient对象或Clos 阅读全文
摘要:
TCP的连接建立和断开大学的课程也都学过,这里不做探讨,只是一个基础知识的回顾。 1、网络模型 OSI七层网络模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 五层网络模型:应用层(对应七层的前三层)、传输层、网络层、数据链路层、物理层。 TCP/IP四层网络模型:应用层(对应七层 阅读全文
摘要:
堆是一种特殊类型的树,这种数据结构应用场景非常多,最经典的莫过于堆排序,堆排序是一种原地排序,它的时间复杂度是 O(nlogn)。 前面提到的快速排序,平均情况下时间复杂度也是 O(nlogn),甚至堆排序比快速排序的时间复杂度还要稳定,但是实际开发中,快速排序要比堆排序好,这是为什么呢?带着这个问 阅读全文
摘要:
1、二叉树基础 1.1、树的几个概念 节点的高度:节点到叶子节点的最大路径(边数) 节点的深度:根节点到这个节点所经历的边数 节点的层数:节点的深度+1 树的高度:根节点的高度 高度和深度的计数都是从0开始,来看个例子: 1.2、满二叉树和完全二叉树 (1)满二叉树 叶子节点全都在最后一层,除叶子节 阅读全文
摘要:
跳表最典型的应用是在 Redis 的有序集合,是通过哈希表+跳表来实现的,因为有序集合中的元素是不重复的,这是通过哈希表来实现的。 今天我们主要看跳表。先来看一张图: 跳表底层是链表来存储节点数据,然后逐层建立索引。它查询数据的时间复杂度是 O(logn),因为底层是链表,所以插入和删除的时间复杂度 阅读全文
摘要:
1、二分查找概念 1.1、核心思想 二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 二分查找的时间复杂度是 O(logn),当数据量较大时,O(logn) 往往优于常量时间复杂 阅读全文