基于自己的过往经验,以我能 cover 的情况来回答下“反向面试”的各个问题。同时我会删掉部分问题,回答问题时加上和当前公司的情况对比。

反向面试来源: https://github.com/yifeikong/reverse-interview-zh

职责

  • On-call (电话值班)的计划或者规定是什么?值班或者遇到问题加班时候有加班费吗?

    • PagerDuty 来管理 Oncall。每人一周轮值,轮值时负责所在团队的全部服务。
    • 当前:没有易用的值班管理方案,基本按方向划分。组内各同事相对割裂,难互相Cover。
  • 有给我设定的特定目标吗?

    • 是个好问题,可以偶尔问下我的 Leader 对我的目标。
  • 团队里面初级和高级工程师的比例是多少?(有计划改变吗)

    • 每个团队按业务难度,诉求应该有所不同,整体会是金字塔结构。当前我的团队结构相对合理,不过人员数量和 Leader 规划对应不上。
  • 入职培训 (onboarding) 会是什么样的?

    • 基于不同职责有公司的 e-learning 系统提供通用技术栈培训,部门提供业务培训,各个团队基于自己的业务,提供业务的串讲。
    • 当前:团队有不成体系的新人指南,缺少部门和公司的一些支持,这部分我自己来补足。
  • 每个开发者有多大的自由来做出决定?

    • 在符合团队目标的前提下,充分给到每个人决定的自由,且鼓励大家有自己的想法并勇敢尝试。
    • 当前:小事情上基本符合,但业务话语权大,被动的地方很多。
  • 我入职的岗位是新增还是接替之前离职的同事?(是否有技术债需要还)?(zh)

    • 大部分的时候,是接替离职同事的工作,会有技术债要还。这里多说一句,不应该盲目规避技术债,还债能力也是工程师的必备技能。

技术

  • 公司常用的技术栈是什么?

    • Golang:
      • 微服务的架构,DDD不是个必选项;基于K8S的容器化部署;
      • 存储上,常见的RDB,NoSQL的 Redis,Mango/DynamoDB,图数据库Nebula等;
      • 改进的开源框架,配置管理 Apollo,注册发现Consul,消息中间件 Kafka/RabbitMQ,网关 Traefik 等;
  • 你们怎么使用源码控制系统?

    • Git,Github或者Gitlab。
  • 你们怎么测试代码?

    • QA 是质量保障的合作者,研发为自己的交付负责。
  • 你们怎么追踪 bug?

    • 工单系统,Jira/TAPD;
  • 你们怎样监控项目?

    • Logging/Tracing/Metrics。分为基本的基础设施监控和业务监控,研发更多负责业务数据的上报和管理。
    • Loki, DataDog, Sentry.
  • 你们怎么集成和部署代码改动?是使用持续集成和持续部署吗 (CI/CD)?

    • 简单的场景,Gitlab CI,Github Action 应该可以满足。但复杂场景,应该是公司自研的框架更合适。CI/CD 是流水线的形式,而不是一个又一个的独立任务。
    • 流水线中覆盖代码的静态检查,单元测试等代码质量检查点。
  • 你们的基础设施搭建在版本管理系统里吗?或者是代码化的吗?

    • 基础设施即代码(IaC),用 Terraform/pulumi 管理;
    • 当前:No,依赖工单。
  • 从计划到完成一项任务的工作流是什么样的?

  • 你们如何准备故障恢复?

    • 日常积累:
  • 你们需要花费多长时间来给产品搭建一个本地测试环境?(分钟 / 小时 / 天)

    • 这问题很容影响研发幸福感。公司系统基于容器,各种存储资源依赖测试环境,本身的搭建就不会复杂;
    • 之前 Golang 技术栈,本地启动服务很容易;后转战 Java,本地启动需要调整更多一些的配置项,但也还可以启动起来;
    • 本地测试,最好默认不注册发现中心,减少对测试环境影响。
  • 介绍一下你们的技术原则或者展望。

    • 好的团队,应该有自己的技术原则与展望。但我似乎并不能整理总结出当前公司的原则;
    • 个人的技术原则,则是可维护性优先,稳定性优先;
  • 你们如何管理依赖?

    • 使用各个语言建议的版本管理。 Golang - Go Module;
    • 考虑国内的网络环境,公司维护私有的Pkg镜像;
  • 公司是否有技术分享交流活动?有的话,多久一次呢?(zh)

    • 有,组内组织,通常借用周会做分享;
    • 当前:缺少部门,公司级别的组织;
  • 你们的数据库是怎么进行版本控制的?(zh)

    • 从未有过数据库版本管理的实践经验;
    • Java 生态下可以了解下 Flyway;
  • 业务需求有没有文档记录?是如何记录的?(zh)

    • 当前:业务需求有PRD,但质量参差不齐;

团队

  • 你们使用什么工具来做项目组织?你的实际体会是什么?
    • 工具主要是和流程配合的。体验比较好的是JIRA;
    • 当前:在用TAPD,公司做了二开。问题不在工具,而是公司的需求管理流程太长;
  • 每周都会开什么类型的会议?
    • 站会和周会。站会用来及时沟通问题以及提供仪式感,周会做总结和组内交流;
  • 会有定期的和上级的一对一谈话吗?
    • 当前:由上级主导。我自己也一样,通常组内同事极少主动约;
  • 产品 / 服务的规划是什么样的?(n 周一发布 / 持续部署 / 多个发布流 / …)
    • CI/CD不应该只是理论,践行持续部署,但需做好风险管控。
    • 当前:规划重于灵活性,定期上线,同时紧急的事情有另外的流程;
  • 生产环境发生事故了怎么办?是否有不批评人而分析问题的文化?
    • Oncall首先响应线上事故,处理&联系服务的owner;线上事故处理完,需及时做复盘/Postmortem;
    • 复盘需要做到对事不对人,给出对应的待办以及每个待办的 deadline;
  • Code Review 如何实施?
    • Code review 需要是个必须项目;

终极问题

(问题很有意思,就留下来了)

  • 该职位为何会空缺?
  • 公司如何保证人才不流失?
  • 这份工作 / 团队 / 公司最好和最坏的方面是?
  • 你最开始为什么选择了这家公司?
  • 你为什么留在这家公司?