记录下golang可能的一些项目问题

虚拟助手app

  1. 介绍下项目。
    该项目是一个移动端养成类的app,相似的有日本的《makes》,功能比较简单,就是通过用户和虚拟人物日常的对话和交互累计经验和资源,使用资源购买道具装扮虚拟人物,然后解锁更多的交互内容、方式和场景,同步实现一些备忘录和闹钟功能的app。

  2. 介绍下项目架构。

  3. 为什么采用web api实现?
    因为该项目主要是用户和虚拟人物的交互,没有用户对用户的交互需求,对即时性相应要求并不高,所以采用web api的方式实现,配合JWT协议,利用gin中间件可以方便的实现权限验证,开发效率高,并且gin也比较稳定。

  4. 为什么使用redis作为缓存?

    1. 直接操作数据库相对较慢,redis存储在内存中,提高访问速度
    2. 高并发,redis的承受能力高于数据库,使用redis可以减小数据库的压力
    3. redis支持分布式缓存和持久化
    4. redis是单线程的,操作具有原子性
    5. 支持的数据类型多
  5. redis和mysql的数据一致性问题怎么解决?

    1. 读:读redis,如果redis没有再读取mysql并写入redis
    2. 写:更新mysql–>异步删redis
    3. redis设置短过期时间
    4. 串行化对同一数据的处理
  6. 为什么采用protobuf协议?

    1. protobuf序列化后数据大小是json格式的十分之一,是xml格式的二十分之一,适合网络传输,减少数据量,减少网络IO
    2. 解析效率快
    3. 较复杂,数据本身不具有可读性
  7. 什么情况下使用nsq队列?怎么使用?

  8. 高可用有没有接触?如何保证高可用?

  9. JWT有什么优势?有什么缺点?

    1. 服务端不用保存会话信息
    2. 实现单点登录
    3. 增加了请求头开销
    4. 续签和注销不方便