TCP 队列溢出了

一、TCP 队列 1、syns queue:半连接队列 TCP 三次握手(参考:TCP建立连接之三次握手),第一步,服务端接收到客户端发送的 syn 消息后,将连接信息放入 syns queue,此时,双方连接尚未建立,称之为半连接。 2、accept queue:全连接队列 TCP 三次握手,第三 ... »

Redis Hashes 数据类型简述

Redis Hashes 是我们日常使用中比较高频的 Redis 数据类型,内部使用 Redis 字典结构存储,底层基于哈希表结构实现。 下面从哈希表节点,哈下表结构,Redis 字典,Redis 字典元素操作,Redis rehash 几点来简要概述。 一、Redis 哈希表节点 Redis 内部 ... »

Redis 字典结构细谈

Redis 字典底层基于哈希表实现。 一、哈希表结构 1、dictht: typedef struct dictht { dictEntry **table; //哈希表数组,存储具体的键值对元素,对象类型 dictEntry unsigned long size; //哈希表容量 unsigned ... »

一次排查线上接口偶发异常耗时引起的思考!

一、引子 这要从线上的一个接口偶发异常耗时说起,事情往往不是你想象的样子,尤其是在排查问题的时候,切忌有先入为主的的某些判断。 二、问题: 接口监控图:显示每天总会有那么几次耗时特别长的请求。 三、排查: 1、直观的认识是“偶发”,每天零星的几个,不规律。 对于这种情况,第一感觉是因为服务的波动影响 ... »

台阶很高,青蛙跳不跳?

青蛙总是被被要求跳台阶,我想,他一定很累的! 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法? 对于这样的问题,n可大可小,如果n很小,我们可以直观暴力拆解就可以得到答案,但是如果n很大,那么这个问题就升级了。 一般处理问题,我们最直接的思路,可能就 ... »

从零开始认识堆排序

一、什么是堆? 维基百科的解释是:堆是一种特别的树状数据结构,它需要满足任意的子节点必须都大于等于(最大堆)或者小于等于(最小堆)其父节点。 二、堆排序 堆排序是通过二叉堆数据结构实现,二叉堆满足一下两个特性: 1、满足对的基本特性 2、完全二叉树,除了最底层外,其它层都已填充满,且是从左到右填充。 ... »

Redis SDS 深入一点,看到更多!

1、什么是SDS? Redis 自定的字符串存储结构,关于redis,你需要了解的几点!中我们对此有过简要说明。 Redis 底层是用C语言编写的,可是在字符存储上,并未使用C原生的String类型,而是定义了自己的字符串结构 Simple Dynamic Stirng,简称SDS。 SDS基本结构 ... »

偏见是怎么产生的?

一、偏见是什么? 偏见,就是,不管它是黑的或者白的,我就认为它是黑的。 可能,会有人问,为什么不能认为它是白的? 我想说,那就不是偏见了,偏执的认为一个事物向好,那是偏好。 国语词典中对偏见的解释为:“不公平或固执的见解”。这是一种由人们的主观倾向所致的结果。 二、偏见由何而来? 1、认知、关注点 ... »

TCP 粘包拆包

一、什么是粘包拆包? 粘包拆包是TCP协议传输中一种现象概念。TCP是传输层协议,他传输的是“流”式数据,TCP并不知道传输是哪种业务数据,或者说,并不关心。它只是根据缓冲区状况将数据进行包划分,然后进行传输。 在这个前提下,就有可能发生发生同一个业务数据被分割程多个数据包,或者多个业务数据被打包到 ... »

心有 netty 一点通!

一、标准的netty线程模型 双池合璧: 1、连接线程池: 连接线程池专门负责监听客户端连接请求,并完成连接的建立(包括诸如握手、安全认证等过程)。 连接的建立本身是一个极其复杂、损耗性能的过程,此处使用线程池,能够极大的增加处理客户端连接的能力。 2、I/O线程池: 连接线程池会将成功建立的连接注 ... »

职场的“诱惑”?

一、职场是什么? 不用思考,它只是贩卖劳动力的场所。 有人买,那么必然就有人卖,职场,就是你“出卖”自己的场所。 那么为什么要进入这样一个场所呢? 因为每个人都需要生存,生存需要“面包”和“牛奶”。而“面包”和“牛奶”需要用劳动力交换。 处在职场中的每个人都有一个属于自己的度量标签:价值。 价值,有 ... »

队列的一种实现:循环队列

队列的一种实现,循环队列,通过使用固定长度数组及首尾指针实现队列的入队、出队等: class CircularQueue<T> { private Object[] data; //数据存储数组 private int head; //队列头指针 private int tail; //队列尾指针 ... »

是枚举?还是常量?其实很好选择!

一、什么是枚举? 首先,枚举是一种特殊的类对象,其定义如下: {修饰符} enum 对象标识 [父接口] 枚举体 枚举类型通过一些特殊的约束,来实现其应用特性: 1、枚举不可定义为abstract 或者 final,否则会引发编译器错误。 2、枚举实现了Comparable及Serializable ... »

缓存,确实很香,却也很受伤!

缓存的使用,是一个逐渐演进的过程。 问一下你自己,最直接的使用缓存的原因是什么? 无它,唯快而已! 追溯一下自己最开始使用缓存的场景,一些数据库里存储的不变的配置信息,服务启动时,直接加载到本地公共模块,方便其它功能模块共享使用。这便是最基本,最简单的本地缓存应用。 一、服务与缓存 所谓的服务,简而 ... »

今天,你遇到redis线上连接超时了吗?

一封报警邮件,大量服务节点 redis 响应超时。 又来,好烦。 redis 响应变慢,查看日志,发现大量 TimeoutException。 大量TimeoutException,说明当前redis服务节点上已经堆积了大量的连接查询,超出redis服务能力,再次尝试连接的客户端,redis 服务节 ... »