大概是9月下旬,开始准备找实习,复习了一遍数据库、操作系统和计算机网络知识,不算很彻底,基本上是过了一遍以前自己总结的博客,然后开始学习Spring框架的基本概念,IOC、AOP、DI等。就这样,开始到实习僧上投简历,目标岗位是Java开发。虽然,在以前自己做的小项目(是真的小,不论是从规模上还是从功能上,乃至意识上,就像玩一样)用过Hibernate框架,但是也就是蜻蜓点水,没有深度——因为我当时只想实现功能,能跑起来就ok~ 出问题就百度嘛,然而正是这个根深蒂固的想法,让我的脸像火烤一般的烫,这是后话~
再后来,面试了几家公司,一听我还要读研,就直接拒绝了,心里也还是蛮难受的,然后就学聪明啦:接到面试通知电话,我先表明自己只能实习5到6个月,如果公司可以接受,我再去面试,好几次都是千里迢迢,满怀期待去面试,聊着聊着,发现时间上不吻合,真是亏。
最后,实习悬而未定,我就报名去学车啦~不能闲着,一闲着,就太安乐,孟子说生于忧患,死于什么来着?
一天下午,收到面试电话,简单介绍了一下自己做过的项目后就咨询了时间问题,已经不抱希望了:白天练车,晚上学习也挺好,自己要学的东西也很多,没有在实践中学习的机会,就在理论方面弥补回来呗,不过,出人意料的是,公司接受实习生~ 自然要去试试的~
第一天去报到,分配了工作用电脑,需要安装开发环境:JDK、Tomcat、IDE、Maven、数据库(Oracle)、SVN(Tortoise小乌龟)。这些工具是需要从内网的文件服务器上下载的,这带来的问题就是:版本。嗯,JDK从6到8,Tomcat有7、8,那都选8呗,配置环境还是没有问题的,基本顺利。
然后,至于IDE,我选择了Intellij IDEA,平时用的比较多嘛(然而,在我的手里,IDEA就是一个加强版的记事本,我没能物尽其用),可是老大用的是Eclipse,其实,我也用过一段时间的Eclipse,基本操作还是了解的(真的是基本到不能再基本的那种);安装插件——Sonar Lint,用于代码质量管理的插件。因为老大用的Eclipse,所以如果使用Eclipse,这些插件都是安装好的,但是IDEA没有啊,这又是内网,很委屈的,于是就在文件服务器上找啊找啊,最后自然还是找到了,但是手动遍历目录有点无聊,有点累。
接下来安装数据库,其实电脑上是有Oracle数据库的,可是我不知道密码啊,也不敢乱删(Oracle从入门到删库?),不过最后还是把它删了(Oracle删除的过程,还是要做很多事情的,比如运行卸载程序,此时电脑上会残留一些信息,比如注册表、文件夹,这些东西就需要手动删除了,否则,基本上就无法再次安装Oracle了,会报各种各样的错误)。其实我们有一门商务智能的课,其中实验是要用的Oracle的,当时班上就炸开了锅,各种错误,真的是幸福的家庭都是相似的,不幸的家庭各有各的不幸。发现这些问题的我,机智地选择了MySQL,也完成了实验,看着身边同学“安”投无路,最后回到MySQL的怀抱,有一点小得意,不过该经历的总要经历,不是在此时,就是在彼时。
遇到问题,因为无法百度,只好用自己的电脑百度,然后再操作,磕磕绊绊也算是安装好啦;
第一个demo是关于Spring Data JPA的,这里依赖的Spring应该是2.x的,本该更换更高版本的,但是我没这么做,结果就有了后面的错误。
demo使用MySQL数据库,老大要求改为使用Oracle以检测Oracle安装是否正确,理应说框架封装的已经够好啦,只需要修改配置文件就好,底部驱动的替换问题应该不大。不过,首先你要有驱动哦。我在Maven仓库中搜到了Oracle的驱动,也添加了依赖,可是运行起来还是报找不到驱动的问题,就找啊找,结果发现有老哥说Oracle没有授权Maven3使用Oracle驱动,需要自己下载导入,可是我是在内网啊,从哪下载呢?当然,内网中是有一个类似私有Maven仓库的。刚开始搜ojdbc,结果找到一个错误的依赖,自然demo还是运行不起来。依旧报找不到驱动类错误。最后,输入com.oracle.ojdbc 结果和直接搜ojdbc得到的不一样,我意识到后者才是我想要的。
再运行,嗯,原来找不到驱动的错误没了,这次换了其它错误,具体名称不记得了,但是我还记得原因是Spring 2.x检查环境时对JRE的要求是大于等于5,可是只检查到7,也就是说只支持jre5,6,7。不检测8,估计Spring2.x的时候jdk还没到8吧,于是解决方案有两种:一是继承Spring类,然后修改检测方法;二是使用低版本jdk。我当然选择后者啦(此时,tomcat是8,JDK是7)于是,第二个问题也解决了。至此Spring Data JPA的demo运行成功;
第二个demo是关于Rose的。
公司框架使用的是人人网的rose框架,其中依赖了spring。这是一个约定高于配置的框架,和spring boot框架很像,但是它似乎有更多的限制,比如controllers、views等文件命名和位置要求。而且,其实rose还是一个前后端存在耦合的框架,视图层使用jsp。当然,这是我浅薄的理解,尚未来得及深入理解和吸收。不管落不落伍,一个经过企业实践检验的框架都值得尊敬。
启动tomcat,然后报错,无奈,只好百度,发现是tomcat版本和jdk不匹配,可是Tomcat8应该兼容JDK7的呀,我打开IDEA一看:IDEA是2016版的,使用自带JDK编译项目,版本1.6。
这都什么事啊?IDEA的确和Oracle一样,开机就有的,可是。。。真的是无奈。以前自己安装,都选最新的,哪里会有这些问题?Spring版本、Tomcat版本、JDK版本甚至IDEA版本,一个版本一个问题啊!不过,话说回来,自己以前真的对版本这个问题不上心,都选最新的就好,也就没有处理这些问题的经验。
遇到的问题,都是以前没有遇到的问题;遇到的问题,都和写代码无关,都是关于项目构建的;
公司项目使用SVN托管(不知道为什么不用git,其实使用git的话,我也是一样的水平,倒也没有多大优势),Maven构建——多模块项目。SVN上每个模块只有src和pom文件,所以我需要从SVN上拉下来代码,然后在自己的IDE中构建、运行、修改;
可是,我没导入过Maven项目啊,事实上,对Maven的使用也不是很熟——是在学习Spring Boot时接触的,而且,这是多模块项目,我就更没有接触过了,自己写的一些还可以用的小项目都是一个project,可不就是像玩一样?然后百度IDEA如何导入Maven项目,好滴,按部就班呗。导入是导入了,可是不是原来的样子,更不是想要的样子(其实,那个时候我是不知道我想要的是什么样子)。
因为Eclipse有workspace的概念,所有模块都在一个workspace中,我以前使用Eclipse时,就比较好奇,为啥我的所有代码都被检索出来?我只是想打开其中的一个啊,不过,我也就只是好奇好奇(那可真蠢)。在Eclipse中一个workspace里的project就是一家人,每个project是一个大工程里的小工程,打开一个workspace就是打开一个大工程,当然要把所有的小工程也显示出来啊。
可是IDEA不一样。一个project就是一个大工程,大工程的部分被称为module。所以Eclipse里workspace的概念等同于IDEA中的project。Eclipse里project的概念等同于IDEA里module的概念;IDEA构建project得到的产品是Artifact。以上理解可能有所偏差,欢迎批评指正;
回到导入项目,我把所有的pom文件都手动导入了,于是我得到了N个project,每个project都只有一个module,就是它自己。问题来了,本来一家人,让我导入后分家了。那可还行?还有就是只有src和pom文件,怎么构建项目呢?
这个时候,经历了运行demo找不到类驱动、安装插件手动遍历目录、tomcat、jdk以及spring版本不协调等问题,心真的有一点累了:我TM为啥要用IDEA呢?就为了黑色背景和花花绿绿的代码高亮?就因为最早使用的Android Studio和IDEA是一家人?就因为面熟?可是我以为我很了解它,实际上,这是一个笑话啊!!!
我羞耻地转向了Eclipse,问题比较少,可是心里不舒服。
在Eclipse里导入了项目后,不知怎么滴,百度了IDEA如何导入多模块Maven项目,结果发现只需要导入一个终极pom文件即可,它所依赖的其他pom文件都会被自动导入——自动成为项目里的一个module。我发现,分家后的项目里的确有一个这样的终极pom——它依赖于其他所有的pom,但是自己啥都不干。事后想想,也的确是这样的:一个家族里还能没有个大家长?搞定大家长不就相当于搞定了一个家族(额,前提是大家长是真的大,哈哈哈)。
有时候我们自己调侃自己,说自己属于面向百度编程的一派。经历了这些,我发现,问题并不可怕,可怕的是你根本不知道问题是什么。这么看来,能真正面向百度编程,也算是有自知之明了。
最后,考核项目是做一个图书管理系统,功能不多,能增删改查就好,使用Rose+Spring Data JPA+Oracle,但是要集成到一个已有项目中,该项目就是前面导入的项目。
感觉不难,就是添加一个模块,实现图书的增删改查嘛,而且还有一个示例哦,只不过是关于员工管理的;可是我又感觉错了。首先,我不知道如何将自己写的模块添加到大家庭里,即便我在终极pom文件里添加了对自己的依赖,启动起来还是找不到自己写的代码。后来,我发现是少了一个rose配置资源,这是我在“参考”员工管理示例时所疏忽的,其实,所谓的参考,不过是CV大法了。可是,为这个疏忽,我付出的代价是三个小时,一个下午的工作时间。
找到了融入大家庭的方法,接下来就是写controller、service、repository了。说实话,我全部是参考了员工管理的逻辑,包括对附件的处理、分页查询、条件查询的处理——因为我以前没做过啊。
参考完业务逻辑,就参考JSP,更加的简单粗暴:复制一份过来,然后修改表头和列的数目,修改url地址。可是,就是这样,我也没做好。
基本上可以实现增删改查了,但是图片无法显示,实在不知如何解决,问了老大,老大说去配置tomcat静态文件代理,然后修改项目文件里的对文件服务器的配置。ok,我照做了,第一遍,我在path前加上了http,第二遍,我把path和docBase的值写反了,最后都修改过来了,可是启动IDEA,还是无法工作——这个时候本该是我交卷的时候,下班了。两天时间用完,基本功能都不全,图片无法显示。
再看代码——没有格式化,功能堆积在一块没有注释不说,连空行也没有。
再看JSP——行宽没有考虑,该宽的没有宽,该窄的没有窄。表单对数值的长度没有做限制。甚至还有没改完的url!
其实,老大是有一套评分标准的:
应该还有一些标准的,我得一个大鸭蛋是不为过的:因为我该做的都没有做。老大是在做项目,而我是在写代码,我得目标就是能跑,而老大的目标是能用。
包括我在内,很多同学都认为软件工程这门课很水——老师教的水,作业布置的水,同学完成的水;其实,水的不是这门课和老师,而是我们自己!!!
因为习惯了临时突击,所以根本没有时间节点和里程碑的意识。所以,一个“小小的”图书管理系统,自己都做的乱起八糟;
因为没有软件工程的习惯,所以一上来就是写代码,没有需求分析的习惯。所以,我不改代码谁来改代码?因为该搞清楚的,没搞清楚,欠的债,总是要还;
因为没有产品意识,所以只要能跑起来,就算过关。所以,重要的信息看不到,价格输入9999999999999999999999999后没有任何提示。
所以,我菜。
很多公司,其实都是不接受短期实习的,原因大家心知肚明:公司花费时间和空间,帮助你完成从毛毛虫蜕变为蝴蝶的最后一步,该是为公司创造价值的时候了,结果你溜了,一去不回,这不是为他人做嫁衣吗?别的专业我不太清楚,但是通过面试过的5、6家公司,基本态度都是这样,所以,能得到这份实习机会,我真的很感激也很珍惜;
可是,我菜的一塌糊涂。以前我自认为从代码量和代码基本功来说,自己的成绩都不会很难看。然而,实际上,我只是一只井里的青蛙。当这只青蛙从井里走出来时,它感到很迷茫,它还没有做好心理准备迎接冲击,可是它已经出来了。它想回到井里去,好好锻炼,好好积累,好好提高,以便再次离开井的时候可以帅气一些,可是它舍不得外面湛蓝的天空和自由的风;
我就像这只青蛙,我一方面想回到学校,努力提高自己:Spring 框架、Git、Maven、Tomcat、Nginx、JDK、微服务、分布式系统、数据库、计算机网络,太多太多的知识要我去吸收领悟;一方面我有不想放弃实习的机会,因为我知道它很难得,如果我没有这次实习,也许我根本不会意识到自己的菜,不会发现自己其实还很需要更努力;
我想过放弃实习,因为我觉得最重要的成长,而成长是需要时间的,参加实习,我基本上只有一两个小时,而且状态不好;最后我找到折中的方法:向老大申请一周实习4天,这样我就有时间整理、总结、消化、吸收(我还想去练车呀,练车很有趣的,哈哈哈);老大也同意了,其实如果老大不同意的话,我会选择回炉再造的。我知道自己需要的是什么,只是有时候,我想要的太多;
另外,检查代码时,老大也传授了很多有用的经验,比如:
最后,不管怎样,我都不能让相信我的人失望。希望,下次分享的不再是自己的血泪史~哈哈哈