609 字
3 分钟
莉莉丝go面试题
gc的是什么
go的gc利用多线程,使用三色标记法同步检测进行内存垃圾回收 主要回收
- 堆上分配的对象
- 不再有引用的对象
- 临时变量
- 闭包捕获的变量
堆栈存的是什么
堆
- 动态分配的变量
- 闭包中捕获的变量
栈
- 函数参数
- 临时变量
- 函数返回地址
- 函数调用帧
go编译器通过逃逸分析决定变量的存放位置
为什么用redis不用本地缓存
因为本地缓存无法共享,无法拓展,无法持久化 而redis高性能,可共享,可拓展,可过期,支持多种持久化方式
本地缓存性能更高,但是分布式系统对一致性和可拓展性的要求优先级更高
redis持久化机制
RDB (快照)
每隔一段时间就对数据生成一个快照,以二进制形式存储在磁盘的dump.rdb文件 优点:
- 恢复时性能高 缺点:
- 数据量大时可能造成卡顿
- 两次快照间隔中可能丢失数据
AOF (日志追加)
AOF记录每一个写命令并追加到文件末尾,恢复时进行操作重放 优点:
- 安全性高
- 可读性强 缺点
- 持久化文件比rdb大(引出 AOF重写)
- 重放性能没有rdb高
混合持久化
结合RDB和AOF,AOF重写时,前半部分使用rdb,后续使用AOF追加
数据一致性怎么保证
应用场景? 单机数据库,分布式系统,缓存数据库双写
事务的ACID
redo log -> 一致性 undo log -> 回滚
raft算法
leader选举,日志复制,安全性
redis,mysql双写
- 延迟双删
- 先删除数据库,再删除缓存
- binlog监听(canal)
消息队列实现异步一致性
登录实现
session
登录,服务器存session,后续浏览器自动携带cookie,服务器收到后去查sessionID
- 服务器需要存session拓展性差
token(jwt)
登录,服务器颁发token,后续浏览器自动携带token,服务器中间件解析token
- 无法主动过期
安全
- https / 防止 Xss
- OAuth2.0 / OpenID Connect:用于第三方登录(如微信、Google 登录)。
- 单点登录(SSO):多个系统共享登录状态,常用 CAS 或 SAML 协议。
- 多因素认证(MFA):密码 + 短信/验证码/生物识别,提升安全性。