201710月工作总结

快到10月底了,想总结下这几个月来的工作,不想过了一两年回过头看,不知道自己做了什么。从7月份毕业到现在,第一次写博客记录工作总结,希望能把这个习惯延续下去,以后每个月写一篇博客总结当月的工作,把自己遇到的问题,做过的事情,需要反省的地方都写下来,如果有读者看了这篇博客,希望能给我提提建议,谢谢大家。PS:因为工作具体内容不方便透露,这里给出的关于工作业务的图形文字都是处理过的,没有真实意义。


这里写图片描述
以上的图片是我从8月到10月工作做的模块的基本的形状。工作内容包括前端的页面和后台数据的处理。

1.对于前端页面要实现的功能:
  • 用户选择一些B数据(B1,B2,B3….)要生成对应的标签页,每页标签页需要具有属于自己表1和表4。
  • 表1类似一个省市区级联,选择D的内容,需要加载E的内容,选择E的内容需要加载F的内容,选择F的内容需要生成一个属于这个标签页的表2,表2中的每一行数据是通过选择表1的内容动态加载的。
  • 对表2的行数据进行操作是需要生成一个属于这行数据的表4。
  • 表4也是一个多行的表格,可以实现增加编辑删除行。
  • 表3是整个页面的公有信息,属于页面A,页面A下面有各个类型的B数据。

2.这个前端页面的功能我是如何实现的?

前端主要使用的技术是jQuery和bootstrap。以下我列举一些需要注意或是我在工作中遇到的难题:

(1)对于不同类型的B数据需要自己专属的一些信息表格。给这些表格做好标记是属于哪个类型的B数据,我自己采用的方法就是给每个表格加id。
如:表1_B1 表示属于B1的表1。
表2_B1 表示属于B1的表2。
表4_B1_D1_E1_F1 表示B1下的表2的行数据(D1,E1,F1)的表4。

(2)表1中的D,E,F需要调用后台数据,在发送ajax请求数据时,自己遇到了要使用同步还是异步的问题。 如果后面的内容是建立在ajax请求结果的基础上的,就使用同步,如果后面的内容与ajax请求返回的内容是独立的,就可以使用异步。对于获取D,E,F选择框的内容,我用的是js的Element.selectedIndex属性。

(3)对于每个标签页的表格,采用的都是追加标签的形式,这也为之后B类型数据过多,页面打开慢,甚至出现卡死的现象埋下了“伏笔”。对于每个标签页的切换,是自己手动通过css的display属性控制的,并没有使用boostrap来进行切换。整个页面,最难也是控制相关表格的显示隐藏。

(4)表4利用的是旧版的代码,是使用前端的template.js写的模板,就有点类似后台的JSP的写法。

(5)整个记录的新增和修改,我使用的是一个html文件。在新增时,页面拿到的B类型的数据封装成的结构,和编辑时从后台查询到的数据封装出的结构应该保持一致,这样,编辑时,就可以调用新增时用的添加标签的方法。编辑时,从后台拿到数据生成页面时,标签的Id定义应该和新增时保持一致,这样,就可以使用一个保存方法。而对于编辑时需要填充数据,就需要封装好数据结构,层层解析。对于表1,表2数据的填充,我是采用的是拿后台的数据匹配D,再触发E,F,表2的数据,我使用的是jQuery的方法$(元素).trigger(事件类型,参数)。这里也为后面B类型数据多,页面打开慢埋下了隐患,因为每个标签页的表2有多少行数据,就需要去触发多少次E,F。而我这里的设计是每添加一个表2的行数据都需要触发一次D,哪怕这些D的内容都是基本不会变化的。


3.后台功能的实现

后台主要是根据业务逻辑对页面的数据进行保存,修改,删除。以下谈几点自己工作遇到的问题:

(1)事务的回滚
某个需求需要利用定时器定时对某张表更新数据。有一天早上发现表里的数据全都没有了(一开始是将表里的数据全部删除了,再通过接口获取新数据,把数据存放在表里,后来因为每条记录的某个字段在这个系统的其他表里是作为标识的,但是在其他系统是会变化的,所以修改成了对比更新的形式。),想想应该不会没有啊,自己已经对这个定时器做了事务处理了,按道理,如果执行过程出现错误,事务会进行回滚,数据最多只是不更新,删除的内容也不会提交啊。后来百度知道,Service下的方法如果使用了try{}catch(){},需要在catch中抛出RuntimeException,事务才能在出错的时候回滚。或者是不要使用try{}catch(){}。

(2)利用单元测试测试定时器
在做这个模块的时候,需要做几个定时器作业,每测试一次定时器,都是修改定时器的执行时间,然后重启tomcat,然后默默等待定时器定点执行。后来就想能不能利用单元测试调用Service层的方法,直接Run,然后看结果(虽然用单元测试也需要启动整个Spring容器,其实和重启tomcat是一样的,但是不需要修改定时时间,也不用等时间执行,还是方便了点)。

(3)MyBatis的缓存
一开始为了迁移方便,将相关表的数据操作都放在了一个xml中。自己一直在考虑要不要开启Mybatis的二级缓存?看了网上的很多文章,对Mybatis二级缓存的评价大致是:粗粒度,不适合处理多表问题,不建议作为缓存方案,建议使用业务级别的缓存方案。而自己项目的实际情况是:

  • 相关表的操作都写在一个xml里了,而mybatis的二级缓存是namespace级别的缓存,如果有一个保存(或是更新,删除)操作,就会刷新整个namespace的缓存,哪怕与这个表无关的statement。

  • 这个模块上一个版本的数据量不大,在百万级别以下,大多表在几万,多一点的几十万,我个人觉得数据量是不大的,有没有必要做缓存?虽然说眼光要长远,我在考虑的是百万级别下的数据量能不能通过处理SQL优化达到查询速度的提升?

(4)公司项目整合ehcache
业务级别的缓存想利用Spring整合ehcache,其实公司的整个框架是可以使用ehcache的,只是我做的那个项目没有启用ehcache。后来,直接在项目中启用ehcache,加入ehcache的配置文件。

  • 对于页面上的数据有一些需要使用dubbo的服务接口获取,这部分使用不了缓存。可以先一次性加载全部的数据,存在map中,下次需要加载数据的时候,先在map中查找,如果map没有值,再去调用接口。

  • 对于从数据库中查询的数据可以放入缓存中,但是对于什么时候要刷新缓存的控制上,我自己认为是一件比较繁琐的事情。单表处理时,查询加入缓存或是从缓存读取,而保存更新删除时,则需要清空缓存,在这个表作为关联表时,这个缓存也需要更新,这个就得考虑周全了。


4.优化

(1) 提高页面的加载数据。在最初的设计中,是点击了某条记录,就显示这个记录相关的全部数据,其中一两条记录相关的数据量太多,出现了页面卡死的现象。后来修改成:点击标签导航时,才去追加某个页面的内容,而不是在一开始就将全部的标签导航下的页面内容加载完成。

(2) 在开发时,测试库的数据量都是比较小的,当数据量一大,很多查询速度慢的问题就逐渐显现出来了。十万以下的数据查询需要3分钟,建立合适的索引,速度可以降到几秒,联合索引的效果优于建立多个单个索引。

(3)频繁的修改索引,会出现数据库卡死,可能是处于等待,或是在发送数据,需要手动将这些进程杀死。

(4)最近比较空闲的时候在编写开发文档。因为上一版本的页面自己基本看不懂,有很多变量不知道什么意思,时间上也比较仓促,所以就希望可以把这个模块相关的开发过程,有哪些需求和小的细节记录下来,给以后维护的人做个参考:)


5.存在的问题

(1)自己的沟通能力有待提高。很多不懂或是不理解的问题没有及时请教别人,最后就不了了之了。

(2)系统上线前没有做好测试,也没有一个完整的测试方案。每到重要的场合,总是有很多问题。

(3)受自己能力的限制,在技术上有些问题暂时解决不了。没有做好工作总结和计划,对于周计划的撰写总是比较随意,以后要认真对待。

(4)对于把项目做好,保证项目的进度,自己还是缺乏一些责任心和处理问题的能力。

以上大致就是自己201710月的工作总结,一年后回来看这篇博客的时候,希望自己有所长进,不虚度光阴,如果大家有什么好的建议,欢迎给我留言:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值