609 字
3 分钟
莉莉丝go面试题

gc的是什么#

go的gc利用多线程,使用三色标记法同步检测进行内存垃圾回收 主要回收

  1. 堆上分配的对象
  2. 不再有引用的对象
  3. 临时变量
  4. 闭包捕获的变量

堆栈存的是什么#

#

  1. 动态分配的变量
  2. 闭包中捕获的变量

#

  1. 函数参数
  2. 临时变量
  3. 函数返回地址
  4. 函数调用帧

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):密码 + 短信/验证码/生物识别,提升安全性。
莉莉丝go面试题
https://fuwari.vercel.app/posts/莉莉丝-go/
作者
Lorem Ipsum
发布于
2025-06-30
许可协议
CC BY-NC-SA 4.0