基于WebSocket的实时动态图表

本文介绍一下基于WebSocket的实时数据双向通讯的小范畴应用,来实现实时动态图表的展示功能。其实实现图表动态更新又岂止是只有这一种方法。用户页面端的js心跳轮询一样可以获取来自后台的最新数据,只是我感觉那是伪实时。

首先介绍一下什么是WebSocket?

WebSocket是HTML5开始提供的一种在单个TCP 连接上进行全双工通讯的协议。 WebSocket通讯协议定于2011年被IETF定为标准RFC 6455,WebSocketAPI被W3C定为标准。 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。 两者之间就直接可以数据互相传送。或者看一下来自国内知乎上的解释:https://www.zhihu.com/question/20215561

项目需求:

其实标题说的很清晰了,就是要实现图标的实时动态更新,当时我的第一感觉就是要采用WebSocket去解决这个问题。而我的数据来源是来自MQ(消息队列),也就是触发数据推送就是在消息消费的地方。

继续阅读

北京的2016

时间真快,多俗气的感叹!可又是最真实的内心写照。每年的最后一夜,每年的一文总结。这一年365天,综合而言,这段日子过来了,虽然穷些,但还算温馨。过了年就27了,可我更喜欢周岁,这样看起来是不是小一点?写之前,先看了一下去年的同一时间。里面有感概,有过往,有收获,也有期望。就如同昨日的感慨一样,这一切忽然之间就画上了年的分隔符。不管怎样,时间没有骗人,加完班,抢完红包,着手起草此文。
败家于电子设备
14年有梦想的实现,有种种的获得,当然也有种种的愿望。15年上半年,便拿下了去年底一心挂念的Macbook,愿望实现的还算快(或者说败家败得挺快的)。继iPad,Macbook之后,下半年又入手了iPhone6s。我说我怎么没攒住钱呢?终于找到了一点原因!
投身运动
在韩都的收获之一,就是让我爱上了运动。羽毛球,很有价值的一个体育项目。这一年,没少运动,当然还有很大的原因就是一直在减肥。自从工作至今,已经从120斤要跑步到150斤了。必须及时制止,要不然要毁在这体重上面。 继续阅读

Spring Batch与MyBatis结合案例

看了一下博客,好几个月没写什么文章了。再不写,估计Google再也不来了!^_^闲话少说,这次的主题就讲一下Spring Batch。Spring Batch是Spring与Accenture的合作产物。作为前Accenture员工,感觉还是很亲切的。当然这是不是我在工作中技术选型的主要原因,更重要的是看中他的强大!
业务背景:
金融系统中有一种表叫台账表,这也是在接触这个领域后才知道的。而针对这张表,每天会进行定时全表遍历进行计算利息,费用等相关操作,也就是俗称的跑批。而跑批无非就是遍历循环表中数据再进行运算而已,可是一旦数据量上去了,很多看似简单的事情往往实现起来就不再是原先的逻辑了。一张上亿行数的表,查询出来,放到内存?那肯定是不明智的做法。当然应该采用游标或者分页的查询方式去实现更好的性能。而自己去写这类方法,其实并不难,如果只是简单地为了分页查询,确实可以自己去写一个。而之所以此处选择Spring Batch,是因为它不仅仅支持这一点特性,它能做的还有很多很多。
系统背景:
系统是典型的Java Web系统架构,Spring MVC与MyBatis。当然其他诸如服务治理,消息消费等就不赘述了,此处跟那些没有太大关系。而之所以有这篇文章的出现,正是因为MyBatis。因为在我使用过程中,查询大量资料,唯独与MyBatis集成的相关资料特别少。官方的jar包里也是针对ibatis做的封装(并且已经标注为废弃状态),而MyBatis自身针对Spring Batch做了分页Writer和Reader,此次我们主要就是用这两个类。外加用Java Config自动生成Step与Job方式,避免使用xml配置,对于有代码洁癖的人来讲,过多的配置文件感觉很乱很脏。 继续阅读

Java垃圾回收机制详解

对于Java垃圾回收机制这个问题,一直是Java招聘面试津津乐道的一个问题之一。就好像答不上此问题就证明你不够NX一样。在此将这个问题做一下整理,以备后人方便。

Java语言中一个显着的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制, Java中的对象不再有”作用域”的概念,只有对象的引用才有”作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 继续阅读

Activiti生成动态流程图

最近又开始忙活工作流的相关工作了,第一次接触工作流也就是我在埃森哲的第一个项目,也是最后一个项目。那时候用的是日本的一整套解决方案好像叫-iMart。而进入金山工作后第二个项目也是和工作流密切相关的项目,那时候才接触到了这个开源工作流引擎-Activiti。那时候也是第一次真正了解这些东西。只是从金山离职后回到现在的公司,没想到还要用这些东西,好像又回到了去年的这个时间。
这一次需要重新集成这个引擎,以插件包的方式。其实工作量不大,因为Activiti已经自己封装的很好了,完全可以在日常开发中直接引用它的Service。闲话少说,这次解决工作流流程图问题。简而言之,在任何一条已启动的流程实例查看流程状态,用流程图片的形式展示一下。
提供的Service方法如下:

继续阅读

Scala快速入门

#定义变量var

var name = “chen”

name = “zhiguo”

#定义常量val 首次复制后不可以再改变

val two = 1+ 1

#定义函数def,等号左侧是函数名、函数列表和返回值,右侧是函数体实现的表达式。

scala> def addOne(m:Int): Int = m+ 1

addOne: (m: Int)Int

scala> var x = addOne(123)

x: 124 继续阅读

年年年尾,岁岁岁初

年年年尾,岁岁岁初。一文以总结,一言以展望。似乎每年年末的“总结报告”成了一种必然。因为,这一年,我参与了!无论是否快乐~
没有任何一年的逝去让我像此岁这样如此期望。可能这一年中太多的不顺,而又把这一切怪罪于“本命年”的诅咒。其实回首展望,也并不是尽不如人意。毕竟不如意事常八九,可与言者无二三。每到此夜,我总会欣喜的盯着计算机上的时间从每年的12月31日变成1月1日。日复一日,年复一年的感觉,刷新着整个自己。
这一年更加确立了自己的人生定位。这似乎与“理想”这一词存在着亲缘。“你的理想是什么?”记得这句话在我高中二年级的时候就问过很多同学。其实当时并不特别清楚自己将来的人生定位,但是大体方向总是有的,当然,甚至和现在还是有一点点出入的。当然不得不提的是:这一年我又跳槽了。(为什么要加个又呢?)没办法,行业有行业的生存规则,自己不是名牌大学出身,没有名校光环。只能靠自己的硬实力和后来争取的名企光环经历提升自己在职场的价值和待遇。其实也不是简单的薪资提升,肯定也伴随着自己的职场定位和发展方向。但是不得不说,我个人觉得这一次,跳错了!没有错在薪资,薪资甚至说比预期的更高,只是错在工作地点不该回到济南。8月份放弃了华为,京东等好几个名企的面试机会甚至是新浪的二面,回济南第三天就毅然决然的接受了韩都衣舍的Offer。现在想想有些操之过急了。北京竟然没去过就定下了我的下一步棋。
这一年在有什么在改变着,又有什么没有改变?年龄变了,位置变了。只是什么没变让我自己也变得不知道,不清楚。只言片语,有谁能解? 继续阅读

Python入门笔记

Python的语法整体感觉与Swift还是很相似的。下面是学习过程中作的一些笔记,也算是迅速入门的教程了。

#Python默认不支持UTF-8,解决办法:

第一种:

#!/usr/bin/python

#coding:utf-8

print “你好吗”

第二种:

#!/usr/bin/python

#-*-coding:utf-8 -*-

print “你好吗” 继续阅读

Swift迅速入门笔记

用了两晚上的业余时间看了一下苹果的最新开发语言Swift,整理了一下笔记,分享一下。整体来讲确实很好入手的,XCode开发也很方便。
基本知识:

let a = “a”   //定义常亮

var b = “b”   //定义变量
var b:String = “Hello”; var e:Bool = true  //定义带类型的变量
var tus = (“Hello”, 23, 3.14, “aaa”)   //定义元组(Tuples)
println(tus.1)  //打印元组数据
typealias Vais = String //类型重命名
let d: Vais = “chen”
定义函数:
// 返回多个数据
func getName()->(Stirng, Int){
    return (“chen”, 123)
}
var tus2 = getName()
println(tus2.1)
//值类型,引用类型
//值类型:常量变量作为参数传参的时候,传的Copy  String
//引用类型:地址

继续阅读

中国提速WordPress

竟然这么长时间没有写点什么了?来济南都忙活什么了?哦,遇到很多好事,坏事,恶心事。真是该碰上的碰上了,不该遇到的也遇到了。总归善恶终有一报。

近段时间一直挂念着VPS的事,前几周一下买了两台,一台是从淘宝上选的,一台是在美国一家VPS服务商直接购买的。价格都在25-30元/月。配置也都差不多的事儿,1G的RAM。身为Java程序员平时可能少不了跑点Java程序,所以512MB的内存在吃内存太厉害的Java手下显得有点捉急。

配置不在话下,那问题就来到访问速度上了。因为我大天朝“威严”,空间只能买美国的(无需备案)。所以在服务器地点上选择美国西海岸机房对中国用户的访问速度是最快的。所以两台都是洛杉矶的机房。

然而购买VPS的供应商不同,各方面也会出现一些差异。 继续阅读