大三下有幸到了美团点评实习。在这半年的时间里,经过导师和主管的悉心教导,无论是专业技能还是开发技巧方面都有很大的提升。恰好午休时间,随便写写,总结一下这半年的收获吧。不留下篇文章总感觉有点遗憾。
一、 初到美团
  刚入职的时候,其实自己非常虚,因为懂的东西不多。投简历的时候,自己只是做过一些Android的Demo,然后就掌握了一点课堂上的知识吧。(计算机网络,数据结构等等)面试的时候,也是面试了这些,很幸运主管让我通过了面试。后来被告知入职之后要学习Spring来开发,虽然自己以前写过一些Servlet的小程序,但是框架、控制反转、依赖注入和切面这些东西真的是一点都不理解。怎么看网上的博客也不懂,就是和JavaSE中间隔了一堵墙的感觉。
  入职之后,美团给开发配发的是15寸的mac pro,虽然当时刚使用mac不适应,但是现在看来,mac的确很适合开发工作。刚开始的一周主要是熟悉环境,熟悉mac的操作,熟悉美团点评的内部系统等等。值得一提的是,美团的内部应用很多,并且在工作中很实用。内部交流有专门的应用,类似微信,功能强大。最近还出了一个话题社区,和知乎差不多。可以说现在主流的互联网产品,美团点评都有相应的内部应用。有一点比较麻烦但是很重要的就是每天要发工作日报,每一周要发周报。对于记录和思考自己的工作,还是有很大帮助的。
  熟悉了内部环境,就要开始学习一下开发相关的知识了。有两点让我感触很深,一个是开发使用IDEA,第二个是Git。说一下之前我是这么写程序的吧,用Eclipse,写好类,在Main函数里面写写几句话就完了,然后也没有什么保存的工作。下次继续开发就找到项目存储的地方打开项目即可。所以在那个时候,我并不理解Git的作用,不就是远程保存一下代码嘛。但实际上,开发工作并不是一个人完成的,不可能大家进度都一样,也不可能保存在一个硬盘。难道别人开发的时候,你就把项目拷给别人添加完代码自己再弄吗?在导师的指导下,我学习了IDEA和Git。
  IDEA是主流的Java开发IDE,用过AndroidStudio的就明白了,同一个公司的。主要是好用,能集成的东西很多,个人感觉比Eclipse好用。
  至于Git,基本上每天都会接触到。最简单的用处就是能够保存代码,创建了Git项目后,pull到本地,然后编写完代码后push上去。这样就算你电脑进水了坏了开不了了,换了一台电脑,你的项目还在的。第二个用处,当一个项目,已经在线上运行了,但是你要开发一个新功能,怎么办呢?你不可能在现有的项目上改啊,因为改了代码重新编译,服务肯定会断掉的,会影响到使用的用户们。还有就是改错了怎么办呢?Git提供了一个办法就是,新开一个dev分支,该分支上的代码和master分支上一样的,你可以在dev分支上随意改。Dev就算改错了,还能回滚到以前的版本。当确认无误了,可以将dev的代码合并到master分支上。当然了,大项目的合并是有权限的,master分支不能让你随便合并。你可以提一个合并的请求,然后在Git上能看到你修改的地方。当管理员查看的你的代码之后,确认没有问题,他就会让合并通过。如果没有冲突,这样新的功能就添加上去了。第三个用处就是在服务器部署很方便。不需要从本地拷贝代码到服务器,只需要从git上pull代码下来,直接跑就可以了。当然,重新编译启动项目要选在使用者较少的时候。这就能理解为什么一些游戏都选在晚上更新维护了吧。主要用到的地方,暂时想到的就这么多吧。说实话,当时我看Git教程也非常迷糊根本不懂,在工作中慢慢接触就理解明白了。

二、 接触项目
  说起来非常幸运,实习的任务就是和导师一起负责美团点评·众测平台的后端开发。这个项目主要是让用户通过这个平台提交试用美团点评旗下APP发现的BUG与建议,然后相关业务线的QA能在后台处理相关的问题。在我实习结束之前,已经进行过四次的线下众测活动和三次版本迭代。目前的运营方式就是让报名参与众测活动用户(非对应QA)在限定的时间内去测试某一业务组提供的一个新应用包,提交自己发现的BUG,然后给予相应的积分奖励。让我感到非常惊讶的是,每次活动结束完,都能发现一百多个有效BUG。不敢相信一个待上线的应用能有这么多的Bug,第二个就是感叹参与的用户发现Bug能力太强了。
  为什么说幸运呢,我感觉有两点。第一点是这个项目覆盖面很广,基本上美团点评线上应用很多都通过了众测平台来收集发现BUG。是个影响面广并且很实用的项目。自己负责开发的项目这么多人用到,很有成就感。第二点就是,它不是一个很难的项目。麻雀虽小五脏俱全,现在想起来,对于我这种刚起步的Spring学习者来说真的最适合不过了。
  说一下项目用到的框架:Spring+SpringMVC+Mybatis,构建项目使用了Gradle,数据库使用MySQL,服务器是jetty,部署于美团点评的线上机器。接下来就简单说下每个框架的用处吧。
  Gradle:最简单的说法,就是管理依赖。总不能每用到一个jar包,就去网上下载,或者在美团点评的库上下载,拉进项目里面吧。使用gradle