面试题
文章平均质量分 66
cheems~
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
负载均衡策略
负载均衡策略轮询法加权轮询法随机法加权随机法源地址哈希法最小连接数法轮询法将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。加权轮询法不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。随机法通过系统的随机算法,根据后端服务原创 2022-01-21 19:12:45 · 217 阅读 · 0 评论 -
简述CAP理论,BASE理论
简述CAP理论,Base理论CAP(consistency,availability,partition-tolerance)BASE理论(Basically Available,Soft State,Eventually Consistent)CAP(consistency,availability,partition-tolerance)数据一致性(consistency):如果系统对一个写操作返回成功,那么之后的读请求都必须读到这个新数据;如果返回失败,那么所有读操作都不能读到这个数据,对调用者原创 2022-01-21 18:55:07 · 1956 阅读 · 0 评论 -
手撕LRU代码
手撕LRU代码原理代码原理LRU(Least Recently Used)最近最少使用,用于缓存淘汰策略,就是把最近最少使用的数据移除内存,以加载其他数据添加元素时,放到链表头缓存命中将元素移动到链表中缓存满了之后,将链表尾的元素删除原理清楚了,代码其实就是双向链表和map,然后根据需求写代码即可代码package mainimport ( "container/list" "fmt" "sync")type LRU struct { max int原创 2022-01-21 15:24:23 · 240 阅读 · 0 评论 -
一致性哈希算法
一致性哈希算法原理代码原理直接看白话解析:一致性哈希算法 consistent hashing写的非常好代码package mainimport ( "fmt" "hash/crc32" "log" "sort" "strconv" "strings")// HashFunc 定义生成哈希的函数type HashFunc func(data []byte) uint32// Map 存储节点,你可以从Map中选择节点type Map struct { hashFunc原创 2022-01-20 22:59:32 · 439 阅读 · 0 评论 -
singleflight解决缓存击穿与源码分析
singleflight解决缓存击穿与源码细节缓存击穿模拟演示被击穿singleflight解决源码分析注意事项singleflight Do方法原理总结缓存击穿在高并发的场景下,出现同一时刻有大量的请求同时查询一个key时,恰好在这个时候这个缓存key过期失效了,那么这些大量的请求转发到数据库DB上,高并发的对这一个key进行请求,就像水滴石穿一样,瞬间请求量给到DB,可能会把DB打死。解决办法:让热key永远不过期,定期去刷新数据就可以了。为了避免出现缓存击穿的情况,可以在第一个请求去查询数原创 2022-01-19 22:05:52 · 766 阅读 · 0 评论 -
TCP如何保证可靠性
TCP如何保证可靠性校验和序列号与确认号超时重传滑动窗口 (TCP流量控制)拥塞控制三次握手(重点)四次挥手(重点)校验和TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分。计算方法为:在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算。如果接收方校验和与发送方不一致,那么数据一定传输有误。但是如果接收方比对校验和与发送方一致,数据不一定传输成功。序列号与确认号序列号Seq:T原创 2022-01-19 16:55:13 · 2492 阅读 · 0 评论 -
进程间通信
进程间通信什么是进程间通信进程间通信的方式pipe(血缘管道)fifo命名管道mmap内存映射区什么是进程间通信Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)进程间通信的方式在进程间原创 2022-01-18 15:15:14 · 645 阅读 · 0 评论 -
进程、线程、协程的区别
进程、线程、协程的区别进程线程协程进程进程是操作系统进行资源分配和调度的基本单位。进程,一个启动的程序, 进程占用的是系统资源,如:物理内存,CPU,终端等,是一个动态的概念。每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。线程线程是操作系统调度的最小单位。线程又叫轻量级的进程(LWP:light weight process)进程:拥有独立的地址空间,拥有PCB,相当于独居。线程:有PCB,但没有独立的地址空原创 2022-01-14 19:41:05 · 932 阅读 · 0 评论 -
IO多路复用,epoll和select的区别
IO多路复用,epoll和select的区别IO多路复用epollselectepoll,poll,select总结IO多路复用什么是IO多路复用,假设有1000个文件或者网络IO需要我们处理,这里统称为IO,无论IO是否阻塞,总需要有线程去等待IO的完成,那么难道有1000个IO,就要去开1000个线程去监听吗,这样做资源浪费太过严重,所以不同的系统提供了不同的IO多路复用(select,poll,epoll)I/O 多路复用被用来处理同一个事件循环中的多个 I/O 事件。I/O 多路复用需要使用特原创 2022-01-14 17:47:22 · 1160 阅读 · 0 评论 -
为什么mysql索引使用B+Tree数据结构
为什么mysql索引使用B+Tree数据结构为什么mysql索引使用B+Tree数据结构B+Tree为什么mysql索引使用B+Tree数据结构以100万条数据为例:红黑树:红黑树是放在内存的,多次磁盘IO导致性能降低哈希索引:哈希值是无序,不能进行范围查找AVL:随着高度的增加,查找的速度变慢,范围查找虽然可以查,但是很慢,因为要回旋B-Tree:解决了AVL高度太高的问题,一个节点存多个数据,所以它的查找速度很快,但范围查找的回旋问题没有解决B+Tree:在B-Tree的基础上解决了回旋原创 2022-01-14 17:12:21 · 552 阅读 · 0 评论 -
linux grep命令
linux grep命令grep(global regular expression print)介绍用法grep(global regular expression print)介绍grep用于在一个或者多个文件中进行文本匹配,并将匹配行输出。用法grep [OPTIONS] PATTERN [FILE...]OPTIONS - 用于控制grep的行为PATTERN - 模式串FILE - 需要查找的文件路径-c:只输出匹配行的计数。OPTIONS-i:不区分大小写-h:查询原创 2022-01-14 15:22:48 · 195 阅读 · 0 评论 -
go channel close之后读写的问题
go channel close之后读写的问题go channel close之后读写的问题代码演示无缓冲读写有缓存读写优雅的range解释补充:如何限制channel的读写go channel close之后读写的问题代码演示无缓冲读写package mainimport "fmt"func main() { Test1()}func Test1() { ch := make(chan int) close(ch) for i := 0; i < 5; i++ { f原创 2022-01-14 13:13:17 · 1028 阅读 · 0 评论