Java

spring加载xml时联网下载dtd/schema怎么办?

spring xml 在验证XML时,可能会联网下载dtd, schema; 如果网络有问题,就会出错。 解决办法是:把远程的schema/dtd地址换成本地classpath路径。 比如 <!– Before –> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!– After –> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" " classpath:org/apache/ibatis/builder/xml/mybatis-3-config.dtd"> 参考: https://groups.google.com/forum/?fromgroups=#!topic/mybatis-user/ssNHzaDWn-w http://stackoverflow.com/questions/1729307/spring-schemalocation-fails-when-there-is-no-internet-connection

基于正则的全文查找替换

下面的代码会把原文中的人名加粗(加<b>标签) public static void main(String[] args) { Pattern p = Pattern.compile("(name)([=:])([a-zA-Z]+)", Pattern.CASE_INSENSITIVE); Matcher m = p .matcher("Money was transferred to from one person [name=John] to another [Name:Kent]"); StringBuffer newMsg = new StringBuffer(); while (m.find()) { m.appendReplacement(newMsg, "$1$2<b>$3</b>"); } m.appendTail(newMsg); System.out.println(newMsg.toString()); } 执行结果:Money was transferred to from one person [name=<b>John</b>] to another [Name:<b>Kent</b>]

正则表达式中:括号中的括号

正则表达式"([a-z]+)(=)(([a-z]+)\\s+([a-z]+))"中有内嵌括号,那么在match之后,group总个数和group序是怎么安排的? 来例示吧。让原文 = "name=kent chen",则在match之后, groupCount = 5 $1 = "name" $2 = "=" $3 = "kent chen" $4 = "kent" $5 = "chen"

maven编译时遇“编码GBK 的不可映射字符”

解决办法:    1: <plugin>    2: <groupId>org.apache.maven.plugins</groupId>    3: <artifactId>maven-compiler-plugin</artifactId>    4: <version>2.0.2</version>    5: <configuration>    6:     <source>1.6</source>    7:     <target>1.6</target>    8:     <encoding>UTF-8</encoding>    9: </configuration>   10: </plugin>

HashSet和TreeSet如何确定元素的唯一性?

往Set里先后加入两个“有点相像”的对象,最后Set里会有一个对象还是两个? 实验结论如下: HashSet 两个对象是否彼此equals ? 两个对象hashCode是否相等 最终Set大小 备注 true true 1 true false 2 有点违反Set接口契约 false true 2 false false 2 TreeSet TreeSet在判断唯一性时不考虑hash code; 从下面的结果你也可以发现,它连equals()都不理会。 两个对象是否彼此equals ? 两个对象compare后是否相等 最终Set大小 备注 true true 1 true false 2 false true 1 违背了Set接口的契约,令人吃惊? false false 2

SecurityManager一般不起作用

在普通webapp、或java application中,如果没有特别指定,System.getSecurityManager()的返回值都是空的,也就是说拿不到SecurityManager,也不会用它去做任何检查。 所以,在这些程序中通过反射直接访问一个对象的私有变量的值,是可以得手的。 有些框架也直接利用这个默认设置来耍流氓,比如Spring的@Resource实现。 但在applet、java web start等环境中SecurityManager默认是有的,这时直接通过反射访问私有变量就会失败。

debug jdk6源码时看不到变量的值怎么办?

从某个时候开始,jdk提供的rt.jar中不再带有符号表,所以debug jdk6源码时一般是看不到变量的值的。 你所能做的就是重新编译一下rt.jar. 我按下面给的步骤试过了,可以用。 http://www.brainbugs.net/post/22537922263/adding-debug-info-to-java-runtime-classes

HashMap如何应对hash collision ?

HashMap如何应对hash collision?  只通过key的hashCode()来区分key是不够的,因为两个不同key的hash code很容易就重合了。 当hash-code重合时,区分的办法就是 ==和equals()方法了;如果两个key的hashCode()相同而但equals()和==都不同,则将这两个key散列到同一个桶上,但不互相覆盖。 为求明白,可以总结一下equals(), ==, hashCode()呈现不同结果时,HashMap的不同行为: 两个key的hashCode()相等? 两个key是同一个对象? 两个key的equals() == true? 是否导致覆盖 备注 true true true 是 true true false N/A true false true 是 true false false 否 false true true 否 单个key对象存入HashMap后,hashCode发生修改,然后再存一次 false true false N/A false false true 否 false false false 否

例示CompletionService的使用

它跟普通的Executor + Callable + Future 没什么本质区别。只不过当有多个任务需要提交时,自己手动维护一堆Future、并依次地调用future.get() 会很繁琐。 CompletionService使这个变得简单很多。

shut down hook示例

package player.kent.chen.learn.sdh; public class HelloShutdownHook { public static void main(String[] args) { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { System.out.println(Thread.currentThread().getName() + "-钩子,再见1"); } }); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { System.out.println(Thread.currentThread().getName() + "-钩子,再见2"); } }); System.out.println(Thread.currentThread().getName() + "-Hello, world!"); } } 输出: 引用 main-Hello, world! Thread-1-钩子,再见2 Thread-0-钩子,再见1 可见:   1. 系统退出时会执行hook里面的操作   2. 这些操作的执行是在独立线程里执行的,而且是异步的 …

shut down hook示例 Read More »