华为ODgolang后端一面面经
MySQL死锁是怎么产生的?
假如有一条SQL语句执行了非常久,你会怎么优化呢?
explain
索引什么情况下会失效?
InnoDB和MyISAM引擎的区别是什么?
为什么是三次握手
- 避免历史连接
- 同步双方初始序列号
- 避免资源浪费
为什么TCP需要四次挥手?三次不行吗?
TIME_WAIT是如何产生的?
2MSL:允许报文丢失一次
- 防止历史连接中的数据,被后面相同四元组的连接错误的接收
- 保证被动关闭的一方能正确的关闭
TCP 拆包粘包的原因是什么?怎么解决?
Redis有哪几种常见的数据类型呢?
- String SDS:len 0(1)获取长度 修改’\0’结尾
- list quicklist: 双向链表+压缩列表(存在连锁更新)
- hash listpack 哈希表 len修改为自己的len, 放在最前边
- set 整数集合 哈希表
- zset listpack 跳表
Redis中持久化的方式,它们对应的区别是什么
- AOF:重写机制,写时复制
- RDB:快照
Redis集群架构模式有哪几种?
Redis 集群架构模式主要有以下几种:
1. 主从复制(Master-Slave)
- 描述:一个主节点(Master)和一个或多个从节点(Slave)。主节点处理写请求,从节点复制主节点的数据并处理读请求。
- 优点:提高读取性能,数据冗余,提供基本的高可用性。
2. 哨兵模式(Sentinel)
- 描述:在主从复制的基础上增加了哨兵节点(Sentinel),用于监控主节点和从节点的状态,自动进行故障转移。
- 优点:增强了高可用性,自动故障恢复。
3. Redis 集群(Cluster)
- 描述:数据根据哈希槽(hash slots)分布在多个主节点上,每个主节点可以有从节点。支持自动分片。
- 优点:高可扩展性和高可用性,支持水平扩展,能够处理更大的数据集。
4. 单节点模式
- 描述:一个单独的 Redis 实例,适用于小规模应用或开发环境。
- 优点:简单易用,适合快速开发和测试。
总结
Redis 提供了多种架构模式,以满足不同场景的需求。根据数据规模、可用性和性能要求,选择合适的架构模式。
麻烦你说一下golang的垃圾回收机制
三色标记法+混合写屏障(降低stw的影响)
插入屏障:对象被引用时触发的机制,当白色对象被黑色对象引用时,白色对象被标记为灰色(栈上对象无插入屏障)。
删除屏障:对象被删除时触发的机制。如果灰色对象引用的白色对象被删除时,那么白色对象会被标记为灰色。
GC开始时将栈上可达对象全部标记为黑色(不需要二次扫描,无需STW)
GC期间,任何栈上创建的新对象均为黑色
被删除引用的对象标记为灰色
被添加引用的对象标记为灰色
垃圾回收机制只用于回收堆上的内存,栈中的内存如局部变量、函数调用等会在调用结束后自动释放