七月、八月假期计划完成情况

1. 前言

小时候每当假期,家长都会逼着自己做一个计划,精确到每一天,每个时间段要做什么事。当时自己是很反感的,也不喜欢给自己做计划。因为当时每日任务就只是做作业,充其量只是计划一下,几点到几点写语文,几点到几点做数学罢了。

而现在,人生中不再只是充斥着作业了。太多的事围绕着自己,需要做的事有很多。小时候单一的只需要做作业的时代也一去不复返了。

假期前脑子也很乱,经常一下蹦出一个想法,一下又冒出另一个念头。于是,每当有念头蹦出之时,我便将其记录下来,好在假期里去尝试实现。

暑假也经过这么长时间了,假期前踌躇满志的列出的那 19 20 21 22 23 24项计划经过这么长的时间有了一定的执行度。我自己来做一个总结。

2. 已完成的计划

1. SpringMVC的学习

关于SpringMVC,这个大框架在暑假前制作的“Young理财”项目中就已有和Hibernate、Spring一同使用。当时是直接搬过来用,什么都不知道,什么也不清楚,就连Spring也没有接触过。虽说自己在面对老师的时候瞎吹了许多诸如AOP,IOC,DI等名词,但自己对这些东西的了解还不够全面。

假期在Spring学习网站上跟着教程大致的学了一下SpringMVC。因为在校内期间就学会了Spring,并且也因为之前使用过SpringMVC,所以上手非常快,看着教程一步一步的基本就学会了这个优雅的框架。

Spring与SpringMVC的学习记录

2. Redis和缓存

缓存在学Hibernate的时候就有过接触。所谓一级缓存,二级缓存和查询缓存。

现在我的理解就是把一个复杂的、耗时长或者耗内存的、需要经过耗费资源操作的数据以HashTable的形式将key和其对应的value存在内存中。下一次取数据的时候可以很快的在内存中取得。

为什么使用Redis作为缓存呢?

  1. Redis的数据结构丰富
  2. Redis的性能较强

所以在经过Redis的学习之后(也谈不上学习,就是知道了有哪些数据结构,知道了大致上怎么用以便于以后真正要用的时候可以快速想起来去哪里查),我学习并尝试使用了Spring整合Redis作为缓存

而在学完了Redis之后,我也利用Redis的快速读取的性能,将其作为项目佳皓是个好图床的用户拦截,以拦截在1分钟内多次上传图片的用户请求。

但是可惜的是,具体应用Redis作为缓存的场景在我所经历的项目中还没有出现。

3. Java8函数式编程

关于Java函数式编程,我是在学习SpringMVC时偶然间发现的。

因为经历过Swift开发,所以对其的“闭包”有一定的了解。

在发现Java也可以拥有Swift的“闭包”那样的语法,我马上对其产生了浓厚的兴趣,并上网查阅了n多资料。购买了《Java8函数式编程》一书。大致掌握了stream(),collect(),forEach(),map(),reduce(),filter()等函数式接口的使用。并在项目中使用其进行重构,修改了不少“裹脚布”式代码。

4. Spring Data JPA

在项目中,对数据库内数据的动态查找一直是我心头的一块乌云挥之不去。我见许多项目使用的RESTFul接口常提供多参数、可自定义排列的查询机制,但一直不知道是如何实现的。直到有一天我发现了Spring Data JPA。

当时的我发现,其可以通过定义DAO层接口,方法名遵循一定规范,就可以忽略DAO实现层,从而简化程序员对数据持久层的开发之后,大为吃惊,对其马上产生了浓厚的兴趣。于是通过阅读官方文档,我了解到了这个框架的实现机制、应用场景。也在阅读官方文档的时候发现了文档中存在的许多深坑…

最让我惊喜的是,其果然提供了Web Support,并且可以通过其可以实现动态查询,这让我非常开心!
web support

5. MyBatis和mongoDB

mongoDB是闻其名,但未见其实的一款NoSQL的数据库。经常听人谈起它的好用、方便,然后再将他与MySql放在一起对比,并且把MySql批判一番。很幸运的是这个暑假我终于和mongoDB有了初次的接触。我发现这的确是一个很优雅的数据库,具体优雅在哪里我也说不清…就是觉得这款数据库方便,一下就让我上手(很多东西其实都没有记住)。其脚本对javascript的支持非常好,掌握起来很快。

我对于MyBatis也是久仰大名。见过很多用人单位在招聘的时候都会说"掌握Struts2 Spring Hibernate/Mabayis",对于这个框架我也很有兴趣。

令我吃惊的是,Mybatis也可以实现上文提到的动态查询、动态排序之类的功能,其实通过动态生成SQL语句实现的。这相当于给我以后对于框架的选择拓宽了另一条路。这个框架支持让程序员自己写SQL语句,可以做到更大的自由、更好的优化。而且只要遵循一定的规范,也可以忽略DAO实现层,真是太棒了!
mybatis

6. 简单的CSS3动画、交互

大概就是看了很多网上的资料和教程,学了一些CSS3的动画与交互,keyframe,transition,transform之类…

后来为了看看自己的学习情况,我就自己实现了一个之前准备做的项目的官方网站。

7. Linux基础的学习

对于Linux的基础,命令,已经其他一系列的学习。

原先看见Linux的黑框框还是有点虚的,现在…完全不虚!

8. Apache

假期里学习了搭建apache服务器以及apache与tomcat整合、apache+https配置。现在的博客服务器佳皓是个好图床就是搭建在apache与tomcat整合+https的服务器上的。经测试性能效果都很不错

9. 一只爬虫

这大概是最没节操的一个东西了。

为了满足同学的生产和生活需要,我整理了一系列的BT搜索引擎,找出了他们的搜索规律以及对结果的处理规律,经过一系列整合,做出了这个所谓的"资源搜索工具"

老司机搜索工具

这个工具…因为爬取的原因,可以搜索正常资源,也可以搜索"不正常"资源…

目前项目共享在coding平台

老司机搜索工具

光看名字就知道很没节操了啊!

10. 图床上传工具

这是对佳皓是个好图床的扩展工具!

使用图床上传工具,可以很方便的批量上传图片,一键复制URL!

图床

假期前就想过假期里要复习一下Swift,不能荒废,因为Swift是一门我比较喜欢的语言,轻便快捷,虽然坑也有很多而且因为OC的原因有一些谜之语法…但是我很看好这门语言!

对于python不知道怎么的我有一种莫名的抵触情绪,对其也是不断的学了忘忘了学。但是Swift就不会。可能是因为我用过Swift开发过项目吧。

目前项目共享在coding平台

图床上传工具

11. 重构MOC

MOC是当时在3天之内赶出来的一个项目。他曾经的业务逻辑代码可以用一塌糊涂来形容(虽然比一些参赛项目强)。对于公司里时常变动的需求和不断扩大的Excel文件我经常处于一种无法应对的状态。所以在假期里我忍无可忍,学完了一些东西之后马上着手重构MOC,并且把新学的知识全部应用在其中。

首先是Spring Data JPA。因为MOC的数据库没有复杂的表与表之间的关系,所以Spring Data JPA完全满足我的需求。其支持的动态查询正是我求之不得的功能。原先系统也有很大一部分原因是因为我对于DAO的实现层掌握的不够好。现在好,我直接抛弃了DAO的实现层!Spring Data JPA在这个项目里帮了我很多。

使用了Spring Data JPA之后,对于媒体文件的DAO层大概可以精简到这种程度。
DAO

第二是Spring。之前对于Spring的AOP理解的不够透彻,用它做了很多蠢事。在新项目里我大概知道了AOP是在什么条件下用最合适,也发现了很多坑。比如:关于AOP切入同类中调用方法无效的问题

在重写前端的时候,我把原来滥用的jQuery动画全部改成了css3的keyframe。

在搭建服务器方面,我使用了新学会的apache+tomcat+https。

在服务器维护方面,我实现了一个python脚本来定时监督tomcat和apache的运行情况。如果发生内存溢出导致的tomcat或apache异常退出,python程序会记录日志并马上通知我。

总之,为了我以后能维护的更方便,能更快的定位错误,我可谓是用心良苦…

MOC

MOC2

3. 想说的

很多人说我不像个大学生,暑假了也不到外面去玩玩走走。

确实,这个假期在朋友圈里看到了很多人都出去玩,出省,出国…

的确我好像是浪费了一个为数不多的能“玩”的时间了…

但是撸代码,学习,真的让我很开心,每天过的非常舒适。

而且通过学习,看别人的博客,查各种资料,文档,的确是大大开阔了我的眼界。

走出去玩,不也是为了让日子过的更开心,让自己的眼界更广吗?

所以我无怨无悔这个暑假。

而且,

这会是一个为我的将来奠定基础的暑假,让我以后哪里都能去,想怎么去就这么去的一个暑假。