07 2013 档案
摘要:①,Struts1通过缓存来管理action对象,并且使用了单例模式,就是一个action只产生一个实例对象,这个实例对象要处理所有对应的request,所以Action类里面不应该有可变的全局变量,我们应该把所有的变量都封装到ActionForm里面。来看下Struts1的生成action实例对象的源代码: 1 protected Action processActionCreate(HttpServletRequest request, 2 HttpServletResponse response, ActionMapping mapping) 3 ...
阅读全文
摘要:原题地址如下:http://hero.pongo.cn/Question/Details?ID=71&ExamID=69题目大意:我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。 现在给定一个字符串,输出它的最大可能的完美度。 例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。 函数头部 C int perfect(const char *s); C++ int perfect(const string
阅读全文
摘要:CopyOnWriteArrayList是一个并发集合类,它实现了List接口,它是一个线程安全类而且它实现线程安全的机制和Vector不一样。JavaAPI文档说它是通过复制一个内部数组来实现写操作(包括add、set等等)的线程安全机制。这种方式会很耗费性能,但是在遍历操作次数远大于写操作的时候效率会很高。这种复制模式称为“snapshot style”,当调用iterator方法创建迭代器时,迭代器保留一个指向底层数组的引用,在迭代器的生命周期内,这个数组永远不会改变,并且迭代器不支持写操作,会产生UnsupportedOperationException异常。 来看看代码:1 /...
阅读全文
摘要:1 /** 2 * Hashtable继承于Dictionary类,且实现了Map接口 3 * 4 */ 5 public class Hashtable 6 extends Dictionary 7 implements Map, Cloneable, java.io.Serializable { 8 9 /** 10 * 定义内部存储数据的Entry数组。 11 */ 12 private transient Entry[] table; 13 14 /** 15 * 定义table中的实际e...
阅读全文
摘要:今天在看Hashtable的toString()源码时,看到了其中有一个"key == this"的判断,于是突发奇想,如果用Hashtable添加自身再做一些别的操作会怎样?①,hashCode方法先看代码:1 public static void main(String[] args) {2 Hashtable table = new Hashtable();3 table.put(table, 1);4 System.out.println(table.hashCode());5 9 }如果我们运行这段代码,好,正常运行,输...
阅读全文
摘要:注:本文转自http://www.ibm.com/developerworks/cn/java/j-lo-hash/?ca=drs-tp4608,作者:李刚通过 HashMap、HashSet 的源代码分析其 Hash 存储机制实际上,HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算法决定集合元素的存储位置,这样可以保证能快速存、取集合元素;对于 HashMap 而言,系统 key-value 当成一个整体进行处理,系统总是根据 Hash 算法来计算 key-value 的存储位置,这样可以保证能快速存、取 Map 的 key-valu
阅读全文
摘要:首先,来看ArrayList的定义:1 public class ArrayList extends AbstractList2 implements List, RandomAccess, Cloneable, java.io.SerializableArrayList继承于AbstractList类,并实现了List、RandomAccess、Cloneable和Serializable接口。1 /**2 * 定义ArrayList内部保存数据用的数组。3 */4 private transient Object[] elementD...
阅读全文
摘要:昨天在学习Struts2的代码时,发现在Dispatcher的init方法中,有这样一段代码:1 if (!dispatcherListeners.isEmpty()) {2 for (DispatcherListener l : dispatcherListeners) {3 l.dispatcherInitialized(this);4 }5 }很明显,代码中的dispatcherListeners是Dispatcher的监听类,其作用无非就是在Dispatche...
阅读全文
摘要:在插入排序中,当前索引左边的所有元素都是有序的,但它们的最终位置还不确定,为了给更小的元素腾出空间,它们可能会被移动。但是当索引到达数组的右端时,数组排序就完成了。 1 public class InsertionSort { 2 public static void main(Stri...
阅读全文
摘要:选择排序算法的流程是这样的:首先,找到数组中最小的那个元素的下标,其次,将次下标上的元素和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此循环往复,直到将整个数组排序。所谓选择就是一直在选择剩余元素中的最小元素。先上代码: 1 public static void selectSort(int[] arr) { 2 for (int i = 0; i < arr.length - 1; i++) { 3 // 定义最小元素的下标,如果和当前元素相同,就和...
阅读全文
摘要:最近在学习Struts2源码的时候,学到了Struts2的IOC功能。为了加深印象,决定写个博客。 Struts2框架中有一个容器(Container),我们先来看下它的源代码: 1 public interface Container extends Serializable { 2 3 /** 4 * 设置默认的对象获取标识 5 */ 6 String DEFAULT_NAME = "default"; 7 8 /** 9 * 进行对象的依赖注入操作。o为被注入对象的对象。10 */11 void inject(Object o);12 1...
阅读全文
摘要:一直以来,虽然知道下面代码的结果是1,但是具体为什么是1,却不是很清楚,偶然在网上看到了javap这个命令,可以查看java编译器生成的字节码。于是,就一目了然了。先上代码:1 public class Test{2 public static void main(String[] args){3 int i = 1;4 i = i++;5 System.out.println(i);6 }7 }我们都知道结果是1,但是具体底层是怎么运行的呢?我们用javap命令来看一下:看红色线框内的字节码:我们可以看到,当执行iinc时,“i...
阅读全文
摘要:昨天跑了一下测试,发现服务器明明向客户端写了COOKIE,而且浏览器也木有禁用COOKIE,但是从浏览器再访问服务器,SessionID死活不会传到服务器。搞了一个上午,找不到原因,正在焦头烂额的时候,一个前辈帮了大忙。原来我的访问URL协议头是HTTP,而Weblogic里面的配置被人改动了。把cookie-secure的值改为了true,true意味着"指示浏览器仅通过 HTTPS 连接传回 cookie。这可以确保 cookie ID 是安全的,且仅用于使用 HTTPS 的网站。如果启用此功能,则 HTTP 上的会话 Cookie 将不再起作用。"唉,明白了,怪不得一
阅读全文
摘要:最近在看数据结构和算法时,看到了中缀表达式和后缀表达式,感觉蛮有意思的,于是自己实现了一下,算是一种锻炼。①首先,中缀表达式就是我们平时见惯了的算术式,比如:5+3这样的就是中缀表达式,而后缀表达式呢,就是53+这样的。因为转为后缀表达式后,算术式的计算会相对简单一些,可以用栈来实现。分析图如下:这种后缀表达式计算的最大的优点就是不用知道什么优先级。②好,下面我们来看一下怎么从中缀表达式(5+3)变为后缀表达式(53+):好了,以上两张图片就是后缀表达式的相关分析。下面上具体代码: 1 import java.util.Stack; 2 3 public class Calcula...
阅读全文
摘要:本文想通过分析struts2的源码来理解官方的流程图。官方流程图如下:流程步骤如下:(1),首先根据web.xml的配置,当启动server时,会调用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter过滤器的init()方法。 1 public void init(FilterConfig filterConfig) throws ServletException { 2 // 初始化InitOperations对象 3 InitOperations init = n...
阅读全文
摘要:这是厐果网英雄会(http://hero.pongo.cn/)上的一道题。原题如下:给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度。举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2。 再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4。 再比如对于"( () () )",它的长度为6。
阅读全文
摘要:开博第一篇,呵呵,一直在做维护项目,好长时间不写代码了,手都感觉生疏了。以后尽量每天至少一篇练练手。找出数组中重复次数最多的元素并打印 1 package test; 2 3 import java.util.Arrays; 4 import java.util.HashMap; 5 import java.util.Iterator; 6 import java.util.Map; 7 import java.util.Map.Entry; 8 import java.util.Random; 9 import java.util.Set; 10 11 public c...
阅读全文