目录

Interview:公共概念

公共概念

测试过程中有没有遇到什么问题

  • 请求无法路由,因为envoy无法完成服务发现

通信协议

  • GRPC

    • 原理

      • Http 2.0
    • 注册机制

      • 如果是普通的测试,直接IP端口访问即可
      • 如果是线上服务,使用zookeeper来进行路由信息的维护,可以提升可靠性和可维护性,所有服务请求只需要通过一个域名就可以完成相关的调用
    • 优缺点

      • GRPC可以节省带宽、降低TCP链接次数、节省CPU
      • protobuf二进制消息,性能好/效率高
      • proto文件生成目标代码,简单易用
      • 序列化反序列化直接对应程序中的数据类,不需要解析后在进行映射(XML,JSON都是这种方式)
      • 支持向前兼容(新加字段采用默认值)和向后兼容(忽略新加字段),简化升级
      • 支持多种语言(可以把proto文件看做IDL文件)
      • 缺点:
      • GRPC尚未提供连接池,需要自行实现
      • 尚未提供“服务发现”、“负载均衡”机制
      • 因为基于HTTP2,绝大部多数HTTP Server、Nginx都尚不支持,即Nginx不能将GRPC请求作为HTTP请求来负载均衡,而是作为普通的TCP请求。
      • Protobuf二进制可读性差
    • traceID怎么进行透传

      • HTTP2.0 也包含header
  • TCP/IP

    • TCP/IP四次挥手过程

    • TCP 三次握手挥手的ack、syn信息

    • MTP(基于TCP定义)

      • 协议测试怎么测试(首先确保协议解析的正确性,然后确保其触发的业务的正确性)
  • HTTP

    • http&https的区别

      • http:明文
      • 网景SSL
      • https协议需要到ca申请证书
      • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
      • HTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包(具体可查看马海祥博客《HTTP服务的七层架构技术解析及运用》的相关介绍);HTTPS除了TCP的三个包,还要加上ssl握手需要的9个包,所以一共是12个包。
      • 所以使用心跳来保持连接,避免重新建立连接的消耗。
    • http请求的缓存机制

    • http session、Cookie区别

      • cookie存在本地,session存在服务端,token用于验证上下文顺序
    • 长链接、短链接

      • 短连接

        • 握手、数据、挥手、结束
      • 长链接

        • 心跳信息保持链接

        • http 1.1默认长链接,HTTP首部的

          • Keep-alive: timeout=20s
          • Connection: Keep-alive
          • 客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭
    • http GET/POST区别

正向代理,反向代理

  • 正向代理不知道访问者,反向代理不知道处理者

管理经验

  • 怎么对测试组进行管理(制定测试计划,分小组进行管理?),怎么协调人力
  • 给你一个项目,怎么接手 –> 先认识人,熟悉项目组成员
  • 怎么协调人力

基础组件

  • ETCD

    • Go 开发

    • Raft一致性算法处理日志复制保持强一致性。

      • 任何一个节点都可能成为leader
    • 角色

      • Leader: 处理所有客户端交互,日志复制等,一般一次只有一个Leader.
      • Follower: 类似选民,完全被动
      • Candidate候选人: 类似Proposer律师,可以被选为一个新的领导人。
  • zookeeper

    • 三种状态

      • Looking :系统刚启动时或者Leader崩溃后正处于选举状态
      • Following :Follower节点所处的状态,Follower与Leader处于数据同步阶段;
      • Leading :Leader所处状态,当前集群中有一个Leader为主进程;
    • 选举机制

      • 在开始时,所有的节点都是looking状态并且每个节点都希望自己能成为leader节点
      • 每一个客户端的一个事务请求时Leader产生新的事务后该计数器都会加1,高32位为Leader周期epoch编号,当新选举出一个Leader节点时Leader会取出本地日志中最大事务Proposal的ZXID解析出对应的epoch把该值加1作为新的epoch,将低32位从0开始生成新的ZXID;ZAB使用epoch来区分不同的Leader周期),如果得到的提案的zxid比自己的大则说明发出这个题案的节点数据更新,则进行同意的投票,否则继续投自己,先得到多数的同意的节点当选为leader
  • VS

    • etcd

      • 更轻量级、更易用
      • 高负载下的稳定读写
      • 数据模型的多版本并发控制
      • 客户端协议使用gRPC协议,支持go、C++、Java等,
      • 容错高:可以容忍脑裂现象的发生
    • zookeeper

      • znode只能存1M以内的数据
      • 写入性能低,为保证一致性,每次需要n/2+1的写入完成才算完成
      • zookeeper的数据是全部存储在内存,只适合存元数据
      • Zookeeper的使用场景是有高一致性的
      • 而Zookeeper的RPC协议是自定制的,目前只支持C和Java
  • zuul

    • 新老网关切换时的策略控制

      • 直接过滤某个ID,灰度测试
  • nginx的优劣

    • 负载均衡怎么测试

      • 不停的发送消息,然后在查询数据库日志
    • 不能抓包,怎么完成服务的mock(nginx)

  • Jenkins

  • helm

    • 如何推广
  • 自研组件

    • mysqlGrant

      • mysql grant 具体测试内容(功能,可靠性,测试方法)
    • xlmesh

  • rabbitMQ

    • 原理 待补充
    • 怎么和其他的组件进行对比