【100%干货】后端程序员如何平稳通过试用期?



0x0 新人的痛点

我在校招的时候,通过刷题和八股文的策略拿到了满意的offer,但是缺乏企业级项目的实战,在第一份工作的试用期的时候,吃了很多苦头。牛客上关于面试的帖子太多了,大部分帖子关注的是如何进入大厂,如何在校招中收割offer,以及各种公众号自媒体的引流,很少有人分享如何在试用期内平稳落地,这块明显是应届生的短板,所以今天简单分享下个人经验。

后端程序员经常会面临下面的场景:

① 校招/社招新人入职,需要学习已有系统,作为工作 landing 的核心部分;

② 同事离职或转岗,需要把系统交接给你,面对完全陌生的系统,如何快速参与开发和bug fix;

③ 经典面试问题?介绍下你的项目,如何给完全不懂的面试官解释自己的项目是干嘛的。

上述的场景都可以被解释为通用的问题:如何从零开始熟悉系统,我们是否能从中抽象出通用的梳理框架?我不推荐一上来就看代码的方式,方法太粗暴并且视野狭隘。下面手把手教大家从业务、逻辑、物理等不同的纬度把握一个系统的脉络,框架是系统的主干,剩下的细节则是具体的代码。

0x1 业务功能

所谓业务功能的学习就是从业务角度去学习系统,我们需要了解系统的客户是谁、使用人是谁、带来了什么价值,系统提供了哪些功能等。如果不清楚业务,就等于不知道系统在干什么。

技术不是空中楼阁,我们写的代码都是为了服务某个主体存在,最终目的是业务落地,清楚了业务才知道怎样用技术更好地服务业务,所以业务学习是熟悉一个系统的首要任务。

这块主要的学习方式:

① 沟通:和产品、运营、开发、测试沟通,遇事不决多私聊。

② 实践:自己使用系统,比如你是淘宝下单页的开发,你肯定要自己先尝试下单和支付的整套流程。

③ 文档:尝试从内部平台找到一些常见业务图,如产品功能架构图、业务流程图、功能树,用例图等,学习产品设计文档,找找PRD。

尝试给自己提出下面的问题并且找到答案:

  • 系统所在行业的情况是什么样子?
    e.g. 如果是支付系统,目前国内是什么情况,alipay和wechat有啥区别?
  • 系统的目标用户是谁?比如是给公司高层做决策用?给运营或客服用?还是给C端互联网用户使用?
    e.g. 这是toC还是toB或者内部平台系统,系统做出来会给谁带来使用价值?

  • 日常有多少人在使用?高峰期多有少人在使用?
    e.g. 日常的流量是否存在维护风险?如果是电商系统,双十二大促流量是多少?

  • 系统调用方:应用名
    e.g. 可以通过公司的调用监控平台查看,上游业务方有哪些?

  • 系统有什么业务价值?衡量系统业务价值的指标有哪些?
    e.g. 例如对于cmdb系统,系统的业务价值在于提供功能完善的运维平台,已经接入的物理机器数量,逻辑业务数量等。

  • 系统有哪些接口?分类:rpc、http

    e.g. rpc接口和http接口有啥区别,什么时候应该提供http接口,什么时候应该提供rpc接口。

  • 系统有哪些领域概念?梳理下系统的领域模型?

    e.g. 设计钱包,钱包的模型有哪些?银行卡是否属于核心领域模型

  • 系统的关键业务流程有哪些?关键业务流程是怎样?

    e.g. 例如朋友圈功能,发布、点赞和评论肯定是核心业务流程

  • 系统的非功能性需求有哪些?如性能、质量、扩展性、安全性等。

    e.g. 老板关注的重点是什么,是系统的稳定性吗,还是系统的用户增长数量

  • 系统未来的发展规划是怎样的?
    e.g. 未来应该做成什么样子,理由和计划,是否存在重构任务,重构是为了解决什么问题

0x2 逻辑架构&研发细节

逻辑架构着重考虑功能需求,系统应当向用户提供什么样的服务,关注点主要是行为或职责的划分。常用表达图形,静态图有包图、类图、对象图,动态图有序列图、状态图、活动图。

这块的学习任务是:

① 明确模块划分、接口定义、细分领域模型;

② 着重考虑运行期质量属性,关注点是系统的并发、同步、通信等问题,这势必涉及到进程、线程、对象等运行时概念,以及相关的并发、同步、通信等;

③ 关注系统源代码、第三方 SDK 、使用的框架、中间件、工具包。

尝试给自己提出下面的问题并且找到答案:

  • 系统有哪些子系统或模块?系统之间是什么样的关系?
  • 系统对外上下游接口有哪些?对接人是谁?
  • 系统关键业务流程怎么实现的?能否用类图、时序图等方式表达出来?
  • 代码在哪保管?git还是svn?
  • 代码包怎么划分的?怎么分层?mvc?mvvm?mvp?
  • 用了什么框架?如 ssh、dubbo、django、thinkphp?
  • 用了哪些工具包?如 apache commons、guava、pip?
  • 用了哪些中间件?如 zebra、redis、hbase、rabbitmq、rocketmq、kafka?
  • 依赖哪些内部平台?如权限平台、用户平台、限流平台、监控平台、日志平台?
  • 系统能支撑多少 qps/tps ?峰值 qps/tps 是多少?
  • 与上下游系统怎么交互的?rpc?http?同步交互还是异步交互?

0x3 物理部署

物理部署这块主要关注如何保证系统的鲁棒性、性能以及发版和日常运行的安全管理。

这块的学习任务是:

① 明确服务的支撑性能上下限;

② 熟悉开发和发版部署流程,以及内部规范。

尝试给自己提出下面的问题并且找到答案:

  • 系统如何发布部署?有哪些部署环境?现有的CI/CD平台如何使用?
  • 系统有多少台机器?每台机器是什么配置,内存有多少?CPU多少核?
  • 系统部署怎么部署的?有没有多机房部署?有没有做异地容灾、多区部署?关注部署方式(e.g. 集群部署、分布式部署),是否接入阿里云、腾讯云、AWS?
  • 有没有容器化?k8s和docker呢?

0x4 数据模型

这块主要关注底层数据的模型,不仅仅要关注实体本身,更要关注实体间的数据流动,例如主从同步策略,数据迁移策略,以及不同数据模型的转换。

尝试给自己提出下面的问题并且找到答案:

  • 数据存储在哪?用的什么数据库?关系型还是非关系型,如 mysql、redis、hbase?
  • 如果存在关系型,例如典型的MySQL,画一画 E-R 图?
  • 数据量有多少?是否有分库分表?分库分表的主纬度是什么?支持哪些查询?
  • 有哪些数据同步任务?离线数仓是如何对接的?
  • 大数据框架的使用情况如何?Flink、hive?

0x5 运维能力

系统运维重点关注:

① 如何避免出问题?测试用例维护 & 自动化测试,资源监控 & 流量监控。

② 什么时候会出问题,出了问题怎么解决?历史故障有哪些?是否存在复盘文档?

尝试给自己提出下面的问题并且找到答案:

  • 什么时间容易出问题?比如电商双11大促,系统压力暴涨,这时候很容易出问题。
  • 对关键链路是否已有监控?需要看系统有配置了哪些报警项,监控了哪些方面。
  • 如果出了问题怎么解决?日志在哪?是否有全链路跟踪?是否有一些紧急修复操作,比如开关配置、降级、限流、熔断配置。
  • 系统有哪些历史坑点?找已经熟悉系统的研发同事回顾历史问题,以免踩坑。通过同事总结的 case 以及文档,或者与负责的产品、运营、技术与了解。系统总会有一些坑,需要把这些坑填上,填坑的过程就是熟悉系统的过程。历史代码经过多次迭代总会导致复杂度高(分支、嵌套、循环很多),耦合严重,设计漏洞,性能隐患等,很难维护,这些就需要我们去重构了。
  • 客服反馈的常见问题有哪些?处理常见客诉有哪些方案?

0x6 总结

熟悉了系统的业务和技术后,就要实战了,通过实战进一步加深对系统的熟悉程度。这点不用额外操心,一般leader/mentor都会给新人布置需求,从小规模的修改到大范围的需求支撑。

所谓操千曲而后晓声,观千剑而后识器,通过实践上述流程,并且在学习过程中多提问和思考,具体到某个模块为什么要这样设计,目前的代码有什么可以改进的点,目前的中间件是否完美符合业务的应用场景,是否有更好的中间件可以代替,个人对项目的把握会越来越强,通过试用期是理所当然的事情。

#职场经验##Java##社招##试用期#
全部评论
吖,满满干货吖
2 回复 分享
发布于 2022-05-17 21:52
干货满满
1 回复 分享
发布于 2022-05-20 10:35
刚过转正答辩
1 回复 分享
发布于 2022-05-18 22:14
很干货
1 回复 分享
发布于 2022-05-18 20:56
很有帮助!
1 回复 分享
发布于 2022-05-18 17:55
Conclusion: https://github.com/mio4/Java-Gold/blob/master/010-social/learn-system.md#0x6-%E6%80%BB%E7%BB%93
1 回复 分享
发布于 2022-05-17 21:43
过于强大😘
点赞 回复 分享
发布于 2022-06-10 09:25
感谢
点赞 回复 分享
发布于 2022-06-09 08:35
今天刚入职就刷到了这个,点个赞😁
点赞 回复 分享
发布于 2022-06-08 16:25
感谢楼主分享
点赞 回复 分享
发布于 2022-05-21 13:43
收藏了🤗
点赞 回复 分享
发布于 2022-05-20 10:47
难道不是六个月之后就过吗
点赞 回复 分享
发布于 2022-05-20 09:18
感谢分享
点赞 回复 分享
发布于 2022-05-18 23:27
感谢分享
点赞 回复 分享
发布于 2022-05-18 22:13
学到了
点赞 回复 分享
发布于 2022-05-18 22:11

相关推荐

1.  简单介绍一下项目2.  在中间层建设中遇到过什么问题3.  数仓中状态的更新是比较及时的,如何记录这些状态,最核心是关心最终的状态还是流转的状态4.  拉链表是什么,怎么实现的,执行过程中怎么解决效率的问题5.  用的什么计算引擎,sql在spark上怎么执行的6.  spark的提交流程7.  uv和pv的含义,计算uv在spark上的运行原理8.  MapReduce的原理,快排的目的是什么,有序的目的是什么,知道每个过程才能知道如何去调优9.  sql转ast是怎么转的10. ast做逻辑执行计划优化做了哪些11. 逻辑执行计划和物理执行计划大概有什么区别12. 写sql过程中有没有遇到过执行时间特别长的,引出数据倾斜相关内容(问的很细,基本所有的都问了)13. 不同数据类型join为什么导致数据倾斜14. mapjoin和正常join的区别,mapjoin原理是什么,怎么实现的15. 加随机数打散,两阶段聚合怎么做的16. new一个线程怎么做,thread和runnable的区别是什么17. java集合类用过哪些(说没怎么用过java,就没再问了)18. sql在不同执行引擎下有什么区别,答有些语法不通用,为什么不通用,如何造成这种问题的19. sql中所有关键字的执行顺序20. a join b where条件写在join里面和join外面 有什么区别21. 4道sql22. 一道mid算法做的是计算引擎调优,一直在问spark底层,顶不住顶不住。当晚挂...
查看20道真题和解析
点赞 评论 收藏
分享
03-21 16:18
已编辑
南京工程学院 Java
感恩,面的这个岗位进度很快,四天就搞定了一二三面。一面 3.17 星期一自我介绍1. 实习的缓存方案如何设计的?2. 实习的本地缓存大小设置的多大?(这个面试官好爱问,幸好有准备)3. 假设有20亿数据,而不是你当前的20w数据,你如何优化现在的设计?(我说的是一致性哈希路由到具体实例,相当于原来都是1w的容量,现在就扩大了实例个数倍)4. (进一步深挖)按id哈希是应用层策略,那存储层如何优化,比如这个redis缓存层面如何优化?(考虑分片集群,这里面试官很好,当时一开始想的是不是通过某些设计来解决,后面面试官提醒了一下反应过来了用分片集群扩大容量)5. 将上述完整的方案再整体说一遍。(腾讯面试官很喜欢问这种整体方案,压力超大)6. 继续深挖,那如果一致性哈希某个节点挂了,这个挂掉的节点承受的流量很大,挂了后流量倾斜到下一个节点,那可能给这个节点打挂了,那怎么办?有没有什么方案可以做的更好呢?(这里不太会)?7. 如何快速判断一个用户是不是具有灰度资格?完整说一下你的方案?(想问是布隆过滤器)8. 继续挖,如果这个用户数量扩大到很大,如何解决这种长期可持续运营的问题?(这个真不会了,面试官想问的是长期存储如何优化,我懂个蛋,幸好面试官放过我了)9. redis的过期策略和淘汰策略具体是怎么回收的?10. 了解redis的压缩表的数据结构吗?(没看说只了解zset,面试官笑笑zset大家都很熟就不问了)11. 你消息队列用哪种比较多?它在实现高性能方面做了哪些优化或者设计(讲了mmap和存储设计,这里提了一下kafka和rocketmq在零拷贝的对比,面试官追问还有吗?不知道了)12. 如果要提升mq的消费吞吐能力,要怎么做呢?(批量拉取更多,多线程消费,增加消费者)13. mq的重复消费你讲讲如何避免重复消费?(幂等策略)14. 又来场景题:如果对每个用户的流量要做统计,正常情况下因为每个queue都是只能被单个消费者消费,那如果一个用户有多个流量统计消息,可能被abcd四个消费者实例分别消费,没办法统计了。(按用户id将一个用户的消息路由到同一queue)15. 那如何优化客户端的发送消息的性能?(异步发送,消息异步持久化,主从复制也异步,还可以对消息做聚合)16. 讲讲countdownlatch和信号量区别(底层不是很了解,随便扯了一下)17. ThreadLocal讲讲原理18. 实习碰到什么线上问题没?针对问题如何做预防? 如何完全规避?(不太会,实习真没碰到什么线上问题,面试官也能理解)19. os:平时说的系统过载是什么意思?(woc不知道)20. 计网:粘包怎么出现的?如何解决?21. 计网:服务出现大量time_wait可能有哪些原因?(小林原题,但面试官追问还有吗)22. 计网:HTTPS协议如何做可信任认证的?23. 分库分表怎么做的?(面试官意思是是分库分表的组件sharding,问的应该是底层原理,没了解过,说公司有现成组件)24. 一个SQL执行过程(select和update都说了),做过SQL优化吗?25. 有时候我们发现加了索引但是跟没加一样,是怎么回事?(问的是索引失效)最后几分钟有些问题没录上,忘记是啥了。反问表现:场景题反应蛮快的,基础挺好的。面完立马约了第二天二面。个人感受:面试官水平很高,喜欢拷打场景题,然后对于我不知道的地方表示理解,体验非常棒!!!#腾讯##牛客AI配图神器#
查看26道真题和解析
点赞 评论 收藏
分享
查看14道真题和解析
点赞 评论 收藏
分享
评论
79
427
分享

创作者周榜

更多
牛客网
牛客企业服务