面试时所关注的实习问题
1. 实习过程的难点和解决的棘手问题
- 难点:软件开发难点有程序代码难和业务逻辑难,这里业务逻辑更难;
- 解决的问题:使用日志将消息处理的流程串联起来,根据消息id可快速准确定位错误所在。
2. 路由计算和调度业务逻辑说明
- 进行路由计算时,首先调用orekit航天动力学库,得到卫星的轨道、坐出入境时间等信息,由此信息可知何时某个终端可利用该卫星与哪个地球站发送信息,终端->卫星->地球站这就是一条通信链路,将该链路涉及的卫星、终端、地球站信息写入库,产生一张路由表;
- 当某一时刻某个终端想与地球站通信,此时恰巧有卫星覆盖,则触发路由调度,根据路由表信息进行调度,完成终端->卫星->地球站的通信,同时将调度结果入库。
- 上述只是简单介绍,详细的细节处理,如消息大小超过卫星限制,地球站或卫星停用时该如何处理,这里就不进一步介绍了。
3. 日志串联处理链路
- 问题:消息处理由多个服务协同完成,但当时没有建立完善的链路跟踪,无法查看完整的调用链,这样一旦出现问题,无法快速准确的定位问题;
- 解决办法:使用日志将消息处理的链路串联起来,将消息id写入打印的日志中,这样一旦出现问题,可根据日志中的消息id找到该消息处理涉及的所有日志,修改产生问题的业务逻辑;
- 具体步骤:利用SpringAOP原理。定义一个注解MsgId,由该注解标识一个切入点,创建通知类,写通知逻辑,消息处理开始时将消息id put进MDC,处理完成后remove消息id,这样就可以根据消息id获得整个处理流程的日志轨迹。
4. 实习收获
- 我负责的是路由计算与决策系统的后端开发任务,该项目属于分布式项目,涉及的技术有Spring、Springboot、Springcloud、Mybatis、Redis、PostgreSql、Kafaka等;
- 对分布式项目开发有了一定的经验,熟悉了公司级项目的开发流程和规范等;
- 学习了两种新技术Redis和PostgreSql,可以使用其进行业务开发;
- 进一步加强了代码调试能力,能够快速定位错误;
- 锻炼了团队协作能力和沟通技巧;
- 最重要的是观念转变:应用软件开发最重要的不是写代码,而是去了解做什么、怎么做、对业务逻辑的熟悉与理解。