1. 最近遇到有挑战的事情?怎么解决?难度最大。工作中遇到最难解决的问题?怎么解决

刚毕业那会自己写的代码太菜,经常被气哭,上线后很多问题,架构不合理(多 worker、多 sender),很多东西没有注意到(go 中 recover),API 接口设计没有考虑到用户使用。没有做足准备(已经有的实现,而是自己想、自己做),这是 2020 年的状况

看公司内源代码(polaris、trpc等),看外界源码(prometheus、statsd、influxdb、telegraf)等、请教大佬,codereview 我的代码

看架构设计,代码整洁之道。对工作中遇到的场景先想想应该如何做架构,然后再看成熟的架构。

写代码前先做好充足的调研,然后列出自己要做什么,那里会有问题,卡点。业界采用的什么方案,我采用什么方案?有什么优缺点?

写代码时做好充分的单元测试,对于模块做好功能测试、性能测试。写完之后再整体审核下架构是否需要做调整?

总结本次项目的收获,可以沉淀出什么方法论,把遇到的问题、困难点写文档,总结如何解决的。

3. 最近在看什么书?学习哪些内容

《MySQL 技术内幕–InnoDB存储引擎》学习 innodb 存储引擎底层的一些实现

4. 你认为什么是高质量的代码

  • 可读性高的代码
    • 每个变量、接口、函数定义 应当可以逐字翻译
    • 遵循约定,代码和文档如何组织、注释如何编写、编码风格
    • 文档和注释,比如针对项目的介绍、针对使用者的说明文档、针对新人的快速开始
  • 可发布的代码
    • 处理异常,服务器死机、网络超时、系统遭到攻击
    • 并发处理,共享资源是否会有并发风险、线程安全
    • 优化性能,良好的算法、单步操作耗时的操作尽量少,比如访问数据库,访问 IO
    • 日志,足够的日志(异常、外部调用都需要日志,一条调用链路上的入口、出口和路径关键点也需要有日志)、日志表达清晰、包含足够的信息(调用上下文、关键字等等)
  • 可维护的代码
    • 避免重复的代码,模块内重复和模块间重复
    • 模块划分,模块内高内聚、模块间低耦合
    • 单元测试
    • 简洁与抽象,优雅、整洁

5. 你的工作经历,有哪些可拓展性的设计

设计 go 语言的 project layout (MVC 的升级,应用了 DDD)

6. 你觉得自己最突出的特质是什么

承压能力较强、可以坚持做某一件事情

7. 为什么要换工作?

  1. 我这边的工作会有很大一部分的时间花费在处理客户问题、处理工单上,而这部分工作大部分是简单的文档指引、配置问题之类,而这部分时间无法给我带来技术上的成长。我找过我的 leader 和总监沟通过,希望有一个中间人去处理这些简单、重复的工作,但是并没有给我一个解决方案。我希望自己可以在一个领域内,不管是技术、还是对于产品的打磨,能够有一个深入的理解,能够有自己的核心竞争力。
  2. 在我目前的团队中,我感觉自己的成长较为缓慢。因此选择换一份工作。
  3. 还有一个就是家庭因素吧,父母身体不好,目前还是比较需要钱的

薪资:我目前的话是 25k*18 。其中年终奖 6 个月会按照绩效来拿。我去年拿了不到 4 个月,总包大概 40w。

  1. 最近的互联网大环境处于寒冬,因此我没有特别奢求特别高的薪资
  2. 我希望我们这边可以按照我的能力来定薪资。因为我对我们这边团队的工作内容比较中意,这也是我在换工作最看重的一点。因此薪资的话,还是由公司按照我的能力来定。我特别看好当前产品的前景

我目前收到虾皮的offer,在深圳,薪资是:31k*15 总包:46.5w

拼多多 上海 36K * 18 总包:65w

字节 深圳 35K * 16 总包:56w 总包:55w 左右

8. 你有什么想问的

  1. 面试的结果什么时候会同步呢?
  2. 团队主要是做什么的呢?开发语言?技术栈是什么?做这个产品的重点、难点是什么?
  3. 商业模式,如何盈利?

9. 自己有什么缺点

  1. 感觉自己有点年轻,对人情事故不是很熟悉。在某些时候做某些时候做某些事情没有特别圆滑。
  2. 感觉自己没有特别聪明,也就是没有天赋。工作中或者生活中遇到的很多难题都是通过勤奋、努力解决的,从来没有走过也走不了别人的捷径。

10. 介绍下自己

面试官您好,我是张意,我是2020年7月本科毕业后就一直在腾讯云监控产品团队工作。岗位是后台开发,职级是T7。负责过公司内负载均衡组件的开发,这个组件是全公司统一的负载均衡系统,注册服务器数量约有80w,整个QQ后台、腾讯会议等产品都在使用。还参与研发了Monitor监控系统,承载了公司100w左右的服务器的监控属性上报,我主要为其开发了 API 模块,优化了告警模块。2021年5月,我们云监控产品中心准备搭建一套现代化的监控平台,对外进行商业化,由我负责设计和研发接入的 SDK 和 Agent,我们自研的 SDK 和 Agent 整合了业界像 prometheus、statsd 的几乎所有功能,同时解决了他们存在的问题,而且性能也做到百万级别(每秒可传输100w指标数)。今年的3月份,我们打算上线 APP 监控系统,由我负责APP监控系统整个后台的框架设计和模块开发,现已在腾讯公有云上线。在后端模块的开发中,我整体对项目的工程化做了设计,在MVC三层架构的基础上,融入了DDD(领域驱动设计)设计的思想,设计了较为适合业务 的 Go 语言项目框架,解决了实践中 MVC 三层架构的职责不清、缺乏领域对象概念;DDD 过于复杂,上手和落地较为困难的问题。以上是我的工作内容。

我的语言栈是 go 和 c++。我平时也会去看一些语言、中间件的实现。对 go 语言的底层实现、redis、kafka 等中间件的底层实现有一定了解。也了解基本的高可用、高性能、可扩展的架构设计。以上就是我的自我介绍