前言
到菜鸟实习将近三周的时间,知道阿里工作强度大,但这个只是我未入职时的体验,也是今天刚好被老板叫回来,所以有时间来记录一下实习体验。
累
有一个字来概括的话就是累,可能每个人的实习心态是不一样的,当然也有因为阿里秋招的HC几乎没有的原因,所以特别想要把握住转正的机会,以此平时工作需要更加积极主动,待到十一点都是很正常的事情。其实阿里的实习生多数都是抱着要转正的态度,大家都非常努力,和实验室的感觉差太多。在实验室累了你可以看会视频,吹吹唠唠,但在阿里为了高效的办公,手机几乎都是静音的,更不要提看手机了。
另外一方面,还需要担心被老板知道偷偷跑出来实习,算是另外一个压力吧。今天也是因为很久没看到我,被他叫回来喷了一顿。但我却觉得现在有时间能够在实验室写下这些琐碎也是一件非常开心的事情,至少大脑保存在放松的状态。
现在也逐渐体会到为什么很多人工作后培养的兴趣爱好不再保持,真的是因为上了一天的班到家后只想休息了,印象比较深刻的一次就是忙完一天,十一点半回到宿舍,洗漱都没做就直接倒头睡觉了。
架构学习
实习虽然是累,但也能学到的非常多的东西。在为实习前,我天真的以为进去是做全栈,还提前学了两周react,没想到实习后接触到第一个东西是TMF。在这里还需要提一点,阿里内部的东西在外面几乎是没有资料的,在它内部有一个类似博客一样的东西叫做ata,内部的资料都在这上面。
而TMF这个架构也是我第一周学的东西,好吧,有点难,看了一周后还不知道这个框架在讲什么。厚着脸皮请求了师兄多次后,有那么一点感受可以和大家分享一下。为了理解上简单,你们可以把TMF理解成一个类似于Spring的框架,它是用来提高开发效率。但是TMF在小公司或者业务量较小的情况下是不太用到的。在像阿里这样庞大的电商平台,有非常多的业务,而有些业务又具有相似的流程,TMF就是把这些相似的流程进行抽象,以扩展点的方式进行暴露,让业务方自己去实现业务逻辑,到达业务与业务的隔离、业务与平台的隔离。
可能有同学觉得这个和SPI的区别在哪呢?SPI比较致命的一个点就是需要过滤方法filter的编写,一旦过滤方法写的不好,就会造成不该执行的逻辑执行了。而TMF除了以映射方式来代替filter,还有业务身份、域的定义、域能力等概念的定义。
内部的文档以原本两个月的工作量减到三周来体现TMF架构的强大,当然应用场景在上面也提到了,如果仅仅是小层应用是不需要的。
中间件学习
在平时学习中,你会接触到很多的中间件或者其他应用,如RocketMQ、Dubbo、Redis等,实习之后你会发现阿里内部都有自己的另外实现,消息中间metaQ,分布式数据库TDDL,链路追踪-鹰眼、排查方式-阿尔萨斯。当然对于实习生来说,只需要先学会使用,原理可以在空闲时间上探究。
在没实习之前,常常迷茫,不知道还需要去学什么,其实你完全可以去造自己的轮子,我现在比较感兴趣的就是鹰眼和阿尔萨斯的原理,其他的中间件多多少少有了解过,但是这两块对我来比较新,特别是阿尔萨斯对于学习字节码与JVM会有很大的帮助。
天启-青龙
这两块东西我刚刚尝试搜索一下,发现外部没有任务关于这两个测试平台的信息,所以我也不好具体展开说。天启和青龙是阿里内部用于测试的平台,通过采集线上的流量以及自调用信息,放回到日常或者预发环境去测试代码的逻辑性。这个原理有点类似于AOP,有时间可以探究一下。
周会分享
实习期间需要每天写日报以及周报,周会上TL会给出一个具体的场景题,例如设计一个库存系统要求能够支持双十一活动、防止超卖、100万TPS等,周会上大家分享自己的设计,这个的确是挺有意思,也可以从中学到很多。
CR
CodeReview是代码质量的保证,记得有一天早上9.30开始一直CR到晚上的7.30,一开始是比较新鲜,也能学进很多东西,到了后面发现一些代码逻辑没有业务来支持是很难理解的,不过还是有几点可以分享的:
(1)一个方法要调用一个添加注解的方法,要注意被调用方法注解是否生效!!拿事务来说明,Spring中的Transactional用来标明一个方法是事务,Spring采用动态代理(AOP)实现对bean的管理和切片,它为我们的每个class生成一个代理对象。只有在代理对象之间进行调用时,可以触发切面逻辑。所以要注意注解方法是否在同一个类中!!
(2)分页查询到时候,页数越后面查询越慢。关于这点在正常代码编写中,很容易被忽视!!
(3)在一个事务中如果包含DB以及MQ的消息的产生,那么要注意DB可能会变成了一个慢SQL,因为MQ的产生者需要接受到MQ的ACK才会继续执行,但是这个阶段如果有大量的消息到MQ会使得ACK被阻塞,进而导致整个事务中的SQL变慢。
(4)异步操作的时候,需要注意执行执行对结果是否有影响。可以使用MQ来解决这个问题。