`
cjm0000000
  • 浏览: 32769 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
系统架构:主要基于Spring框架,包含IOC、MVC、Security等,数据持久化采用Mybatis 3,UI采用了Bootstrap 3+ Velocity模板。 功能介绍:1. 微信易信接入——智能消息回复;2. 消息库管理——多级消息回复;3. 自定义菜单管理——实时同步到微信、易信;4. 集成国内天气查询;5. 数据统计——包含订阅,退订,粉丝,消息等各种数据统计;   https://github.com/cjm0000000/mmt/releases
最近在实现微信公众接口的时候,用到了XStream来实现java Object和XML的相互转换,由于生成的XML需要用到CDATA标签,于是对XPPDriver做了一点扩展,用于支持自定义的注解。   第一步,需要创建自己的标签类XStreamCDATA,用于标记需要加入CDATA标签的field,代码如下: @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD}) public @interface XStreamCDATA { }   第二步,改写XPPDriver,通过Java反射的方式去查找 ...
最近总结了下ReentrantReadWriteLock的学习,写的比较生硬。   点击阅读  
今天被问到Java字符串搜索,中午抽空研究了String的源码。   int indexOf(String str)   核心查找代码:   for (int i = sourceOffset + fromIndex; i <= max; i++) { /* Look for first character. */ if (source[i] != first) { ...
2013年已经过去了,今天迎来了2014年的第一个工作日,天气很好,希望2014年一帆风顺。   2013年对我来说是重要的转折点,我在这一年里成长的很快(有自身的原因,也有外界的原因)。这一年,工作虽然不是很忙,但是研究 ...
今天在家里使用centos的时候发现中文乱码,网上各种解决方案都试过了,没有作用。同样的镜像我在单位运行中文是正常的,百思不得其解;   后来忽然灵光一闪,是不是SecureCRT这货引起的? 果断用PUTTY连上去,vi xxx,一切正常,果然是SecureCRT这货有问题,标记一下。   PS: 为什么我要用SecureCRT?    支持标签式窗口,我开7-8个VM,管理起来比较方便(结果反而折腾了)
      Java乱码的问题,应该是最常见的。我最近一个项目中的一种场景是这样的:99%的数据不会出现乱码,1%的数据会出现乱码(这在Ajax调用时产生),原因是框架硬编码了字符集:iso-8859-1.   其实有很多方法解决掉这个乱码:1. 加个字符过滤器; 2. 修改框架的代码,支持UTF-8 等等.   为了1%的调用加个过滤器,我是无法忍受的。   修改框架代码,这个还是可以接受,不过感觉不是很高明。   思来想去,后来想到了Unicode(庆幸的是,这1%的数据是静态的)。   干脆用JDK自带的工具将中文转成Unicode:   E:\Java\jdk ...
前几天把Mybatis升级到3.2.2,发现动态SQL的SqlBuilder/SelectBuilder这几个类应经被弃用,取而代之的是一个叫AbstractSQL的抽象类,打开看源码(什么注释都没有。。。);翻了半天官方文档,发现他有个默认的实现SQL类,新的Mybatis可以通过SQL类来构造动态SQL,详情请见官方文档: http://mybatis.github.io/mybatis-3/statement-builders.html   在参考他的文档的时候,遇到一个奇怪的问题(我参考的是下面这段): // With conditionals (note the final ...
最近的项目采用Velocity 1.7作为模板引擎,几天用下来,感觉还是挺爽的。不过今天发现一个坑:macro里面如果有多行的话,输出的字符串前后都被加上了换行和空格。直接上代码: #macro(getContextPath) #set($root = $context.webApplicationContext.servletContext.contextPath) #if($root.lastIndexOf('/') == 0) #set($root = $root + '/') #end $root #end   调用 ...

Java Exception学习

    博客分类:
  • JAVA
通过对Java Core的学习,对java exception有了新的认识,之前在处理异常的时候,会采用try...catch...finally这种形式: public void connect2() { Socket client = null; PrintWriter out = null; Scanner scanner = null; try { client = new Socket("173.39. ...
CyclicBarrier用于处理任务拆分,计算,等待计算全部完成,然后合并计算的场景,Future,CountDownLatch可以实现类似的场景。   package multithread.cycle; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; ...
信号量(Semaphore)为程序并发运行提供了多个通道,在此标记一下。   package multithread.semaphore; import java.security.SecureRandom; import java.util.concurrent.Semaphore; /** * 模拟超市收银 * * @author lemzhang * */ public class CasherTest { private final Semaphore available; private final String[] cust ...
今天学习了一下Exchanger. 可以让一对线程交换数据,模拟了一个场景,标记一下,方便以后查看。   package multithread.exchanger; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Exchanger; /** * 兑换奖品 * * @author lemzhang * */ public class TestExchange ...
      今天遇到一个BUG,给定数据"a,b,c,d,e“,用"a,b,c,d,e“.split(",")函数生成的数组长度是5。但是,如果给定的数组是“a,b,c,d,”,这种格式,情况就不一样了,我之前一直认为"a,b,c,d,“.split(",")的数组长度是5,但是事实上,长度是4。   参考代码片段:   String a = "a,b,c,d,"; String b = "a,b,c,d,e"; System.out.println(a.split(&q ...
Global site tag (gtag.js) - Google Analytics