这是我参与「第三届青训营 -后端场」笔记创作活动的的第7篇笔记
数据结构和算法
完全随机的情况
有序/逆序的情况
元素重复度较高的情况
时间复杂度
随机/有序/重复元素排序 长度短序列 中序列 长序列 在随机元素下,短序列插入较优。中长序列快速排序最优。 在有序元素下,插入排序最优。 堆排序在所有情况性能较稳定,和最快的相差不大
pdqsort-v1
- 短序列定义为12-32,使用插入排序
- 如何得知快速排序不佳? 一次快排结束的返回值距离两端太近,即为表现不佳,次数达到limit,切换堆排序,是的最坏仍为O(nlogn)
pdqsort-v2
改进pivot(尽量选中位数) 寻找中位数/寻找首元素->寻找近似中位数 短序列 选固定元素 中序列<=50 采样3个元素 长序列>50 采样9个元素
采样元素逆序->序列可能逆序->翻转 采样都是顺序->序列可能有序->使用插入排序(有限制次数)
pdqsort-v3
优化-多次partition生成的pivot相同,使用partitionEqual把重复的排到一起,减少pivot选择(partitionEqual重复的挪到一起) 优化-pivot选择不佳就随机交换
超时 熔断 限流
长尾请求
log metric tracing
高性能
服务治理保证稳定性
ketex
- 原生库无法感知连接状态
- 原生库goroutine 连接利用效率低下(I/O),存在大量开销 没有多路复用!一个协程一个连接? epoll主动监听
JIT即时编译?
微服务过微?
合并部署
RPC--IPC本地调用 thrift
http框架
BIO和NIO
SIMD快速解析