1、问题的解决css
2013年下半年,我积累的一堆的问题来到JY软件继续个人程序员之路。问题来自于我以前经历的项目。通过下半年的工做与学习,差很少把上半年在脑子里积累的一些大问题解决的七七八八了。下面做一个简单的总结:前端
1、迭代式开发程序员
以前的公司作项目,因为公司性质,项目基本都是以瀑布+原型的方式进行,也就是说,几乎只有一轮。从软件工程的相关书中了解到的迭代式开发一直没有什么机会去实际的了解。来到JY软件最大的收获之一即是对迭式代的开发体验。这包括对SVN中使用项目分支的理解。数据库
二、贫血模型的问题编程
这个问题由来已久,三层架构的代码写多了就开始迷茫。虽然分了层,但方法套方法,本质仍是面向过程。虽然有PO、VO,但实际上与值对象没多大区别,根本不面向对象。不少状况下,新需求一到,代码的变更常常牵连三层。那么多设计模式,面向对象的思想,项目中彷佛很难用到。跨表的复杂查询到底该放在哪个Service中,等等。这些问题在脑中转了好久,书上的概念也对不上,但想不通的太多。直到下半年逐步的了解到领域驱动设计(DDD)的一些思想。原来这一切都是贫血模型带来的。咱们须要充血,须要把数据和行为融合到一块儿,造成真正的面向对象。咱们的项目不该该是数据库驱动,更不该该是页面驱动。应该以业务逻辑为核心而构建代码。以前的积累一系列问题都迎刃而解。canvas
能够说对DDD学习是我我的在2013年最大的提高,没有之一。DDD还有不少概念须要去挖掘。设计模式
3、图表问题浏览器
以前经历过两个项目,都有图表显示的需求。Java使用JFreeChart,.Net使用微软提供的Chart控件。但都须要服务器生成图片,响应缓慢,我的以为又丑又难用。若使用HTML5的canvas,在IE中又不能兼容。原本想要学习Flash的图表,但绝大部分的Flash图表是收费的,并且学习Flash也须要时间成本。年中的时候,了解了一点ExtJs,其漂亮的图表是基于Raphaël.js库实现的。Raphaël.js是一个开源且免费的矢量绘图库,在支持HTML5的浏览器中使用SVG绘图,在不支持HTML5的IE中使用VML绘图,因此保障了浏览器兼容,并且能实现很是漂亮复杂的图形与动画。简直是神器。因而花了大概一个礼拜时间学习,总结,写了些Demo。因此若之后的项目中如有图表显示的需求,Raphaël.js便能发挥威力了。缓存
4、项目中的JavaScript服务器
以前在某个项目中,看见一个页面中写了一千多行Js代码,没有任何的封装。那样的代码丑陋不堪,简直无法维护。而JY软件的Js都是使用到了简单的模块化方法。以后顺着这个的方向,对Js面向对象和模块化作更深刻的学习。
5、Bug修改的问题
以前公司Bug是程序员自测的。没有比较靠谱的对Bug处理的流程。因此改起Bug来很是乱。JY软件的Bug处理流程与使用Mantis对Bug进行管理,虽然比较普通,但对于我自身倒是成长。
2、其余技术的学习
如下对下半年所学的其余重要技术作一个简单的总结:
一、Java基础的更深刻的学习
泛型:以前对Java中的泛型太忽视了,其实泛型有不少难点。
NIO:2012年年末的时候,接触过网络通讯方面的编程工做。那时因为对网络通讯没什么概念,因此那个项目是使用的BIO的编程模型,那时知道这种编程模型,效率上颇有问题。因而下定决心必定要把NIO搞定。
多线程框架:对Concurrent框架作了一个学习总结。项目中不多遇到多线程,但多线程编程确实很是难。
JavaFx 2.x:JavaFx很是漂亮。能够以相似HTML/CSS的方式构建界面。比起Swing,JavaFx靠谱太多了。最有趣的是JavaFx2中内置了一个Webkit组件。惟一不足的是没法实现弹出窗。因此实际工程中须要结合Swing,但愿在Java8中,JavaFx能够更给力。
2、通讯服务器:OpenFire与Apache Mina2
对OpenFire的学习更可能是在XMPP协议,包括使用Smack框架让客户端与Openfire服务器交互。
Mina2的学习是对Java NIO学习的延续。因为NIO编程比较繁杂,Mina2经过封装NIO,提供事件机制,使异步非阻塞的通讯变得容易。OpenFire的底层就是使用Mina2写的。幸运的是JY加密系统中,能够对Mina加以实践。
三、Web推送技术:Comet与BOSH
Comet是学习Servlet3、多线程的源动力。在了解这种机制后,异常兴奋,简直太神奇了。经过必定时间的学习了解到长链接的形式进行服务器推送存在不少问题。以后了解到长轮询即BOSH,最初编写Demo是使用Servlet3实现服务器端的,在学习OpenFire对这种长轮询的方式增长了信心。
4、构建工具的学习:Ant与Maven
JY的项目中使用了Ant,因此学习了下,很简单。收获是,认识到之前作项目确实过于依赖IDE了。
学Maven是为了接触更多的开源项目。不少开源项目下载下来后,基本都看不懂,由于大多数开源项目都是用Maven构建的。Maven构建项目确实是有优点的。最明显的就是Maven存在有模块化的思想。目前只是知道怎么用Maven,如何搭建私服,还须要继续学习。
5、Web标准
table布局或者div+css的布局,都是对HTML,CSS的误解。下半年看了《编写高质量代码:Web前端开发修炼之道》本来繁杂的Web有了小清新的感受。包括HTML语义化,CSS框架,Js/HTML/CSS解耦合。这些不能说是技术,但很重要,这是写出优秀前端代码的必要条件。
6、JVM的学习
参照《深刻理解Java虚拟机》进行学习的。主要是针对JVM优化去看的。因为缺少测试与实践,体会不是很深,学的不理想。须要有时间继续深刻学习。
7、Linux运维与系统架构
从51CTO了解到的Linux培训。以网络视频的形式进行学习。报名费交的有点心疼,但课程丰富。对学习如何构建一个高性能网站和计算机原理很是有帮助。课程很长,目前还在学习中。
8、工做流引擎与搜索引擎的学习
l 工做流上半年初步学习了一下jbpm,但考虑到jbpm3,4已经没人维护了,因此下半年稍微折腾了一下Activity。大概了解是个什么东西,怎样简单的使用,但如何在项目中用好,就不知道了。
l 一个成熟的搜索引擎网站是极端复杂的,Google、Baidu的技术更是不可想象。网络爬虫尚未仔细学习。对Lucene也只有初步的认识,距离实际的应用还差的很远。
这两样东西的学习,在2013年进行的很失败。但这两个方向每个拓展开来都是极其复杂的,并且不在实际项目中去使用这些东西也很难真正去理解这些技术。
9、其余
l 动态代理:简单的学习了Cglib。
l JQuery:本身写了几个简单的UI插件。初步阅读了一下JQuery源码。
l Git:分布式的版本管理。有了一些了解与使用。
3、对目前JY软件项目的一些建议
如下建议可能有点站着说话不腰疼,但这确实我真实的想法,若有不妥的,还望宽容并给出纠正。
一、但愿能够增强文档的建设
来到公司,不少东西都是看代码和数据库连蒙带猜的去理解。对于一个新人,这太痛苦了。我以为须要增强的主要是如下两点:
(1)需求文档,一些概念性的东西,但愿能够有一个标准的定义。而目前接触到的文档,更多的只是页面设计。
(2)项目里的注释,特别是公用代码的注释,实在太少,不少状况下,我须要看实现代码才能知道某个方法是干什么用的。
二、若是有新的项目,但愿可使用市场较为流行优秀技术。
好比我一直以为Struts2实在及不上Spring MVC优秀。好比JavaEE的版本。又好比jQuery的版本,MySQL版本等等。
三、团队的工做氛围,但愿能够活跃一点。
JY软件的工做比我以前公司的工做要轻松不少,但工做却没有快乐多少,有时甚至会有点尴尬。半年时间不知道多少次,一天没说一句话。这阻碍了同事间的交流,也间接的下降了我工做的热情。我不知道这种气氛能够用什么方法解决,我只是提出各类问题,但愿能够获得领导的重视。
四、Hibernate的使用
目前项目中的Hibernate是最让人受不了的地方。项目中大部分实体类都是一张表一个类,字段映射到字段,没有创建one-to-many之类的静态关系。对象与对象的关系仅仅是靠所谓的数据库文档维护着。这样使用Hibernate顶多算是表模块,并无作到ORM。HQL,Criteria也发挥不出威力,而封装的SearchBean也远远不如Hibernate离线查询灵活。在涉及一些多表查询的状况下,仍是须要借助SQL完成,可是SQL就失去了Hibernate跨数据库的特性。
我以为对于企业级应用,速度的要求不是特别严苛,使用OpenSessionInView是很是不错的选择。另外延迟查询是Hibernate很是好的特性,我以为彻底可使用。最后不明白为什么项目中没有使用二级缓存。
Hibernate确实比较难用,因为Hibernate的使用方式是框架搭建初期就决定了的,因此有些可能已经没法改变了。但我坚持个人观点,速度不是Hibernate的优点,优雅的架构,易维护的代码才是Hibernate最犀利的特性。
4、我在工做中的问题
1、牙齿的问题
因为年末牙疼,因此请了好几回假去医院补牙,很是麻烦。占用了工做时间。
2、迟到的问题
因为天气愈来愈冷。电瓶车越开越慢。总会比预约的时间差点。但说到底仍是在睡觉与起床的问题上不够坚定。这个问题在2014年必定最优先的改正掉。
5、2014上半年的初步计划
1、认真的完成JY加密系统服务器端的开发。
2、2013年下半年的学习到的技术多而杂,部分掌握的还很是肤浅,距离“熟悉”还有很是远的距离。因此不断的复习与实践是必须的。
3、加深JavaScript等前端只是的学习。包括学习一些新技术如Node.js,Bootstrap等。
4、Linux运维方面的知识继续学习。其中包括加深MySQL的学习。
5、学习MangoDB。
6、复习Python,Python有些东西确实是忘的差很少了。
总的来讲,在2013下半年在JY软件的工做与学习收获很是大,2014年继续前行。
------------------------------------------------------------------------------------------------------------------------------------------------------------
以上总结是公司要求写的,须要上交的。基本反应出了个人学习情况和我对现公司的一些见解。下面补偿一些:
工做流引擎与搜索引擎能够先放一下,毕竟比较难。
Linux那块必须加快速度了。
JVM必须继续增强。