作答反向面试-假设我有个【一人公司】
文章目录
基于自己的过往经验,以我能 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 等;
- Golang:
-
你们怎么使用源码控制系统?
- 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 需要是个必须项目;
终极问题
(问题很有意思,就留下来了)
- 该职位为何会空缺?
- 公司如何保证人才不流失?
- 这份工作 / 团队 / 公司最好和最坏的方面是?
- 你最开始为什么选择了这家公司?
- 你为什么留在这家公司?