Servlet filter的责任链模式
什么是责任链模式
责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新的处理对象的方法。
Servlet中的Filter
public final class ApplicationFilterChain implements FilterChain {
private ApplicationFilterConfig[] filters = new ApplicationFilterConfig[0];
private int pos = 0;
private int n = 0;...
Mysql Hacks
统计某个字段中单词的数量
SELECT SUM( LENGTH( bodytext ) - LENGTH( REPLACE( bodytext, ' ', '' ) ) +1 )
FROM tt_content
JAVA集合介绍之Map
图片来源网络,如有侵权,请联系删除
Map
Map是一种键值对数据对象,不能包含重复的键,每个键只能映射一个值。
Map接口提供了三种接口视图:键集合、值集合和键-值集合。
Map实例的顺序定义为map集合视图返回元素的迭代器的顺序。在一些map的实现中,比如TreeMap就可以保证他们的顺序,而HashMap则是无序的。
了解map对象,主要从他的四个方面进行:
增加:put/putAll/putIfAbsent/merge
删除:remove/clear
查询:get/isEmpty/size/values/keyset
修改:replace
下面将会对他的三个实现类进行介绍
HashMap
HashMap的定义
public...
openResty lua lapis环境安装
基于windows系统
openResty安装
下载
下载win64位版本,下载地址为https://openresty.org/download/openresty-1.13.6.2-win64.zip
安装
解压后,设置环境变量。设解压目录为D:\ProgramFiles\openresty-1.13.6.2-win64,把该目录添加到PATH环境变量中
测试
打开命令行终端,输入以下代码resty -e 'print("hello,world")',看到输出hello,world表明openResty已经安装成功了。
安装luarocks
下载
下载地址h...
JAVA 源代码阅读
HashMap
putVal hash下标的确定(tab.length-1) & hash
Node<K,V>[] tab; Node<K,V> p; int n, i;
if ((tab = table) == null || (n = tab.length) == 0)
n = (tab = resize()).length;
if ((p = tab[i = (n - 1) & hash]) == null)
tab[i] = newNode(hash, key, value, null);
由于tab.length为2的倍数,假设为1000,减一后,变成了0111,与h...
使用模板代码去消除样板式代码
你是否写过这样的代码,当编写的时候总会感觉以前曾经这么写过。我的朋友,这不是似曾相识,这是样板式代码(boilerplate code)。
通常为了实现通用和简单的任务,你不得不一遍遍地重复编写这样的代码。
遗憾的是,它们中的很多都是因为使用Java API而导致的样板式代码。样板式代码的一个常见范例是使用JDBC访问数据库查询。举个例子,如果你曾经用过JDBC,那么你或许会写出类似下面的代码。
public Employee getEmployeebyId(long id){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try{
conn = dataSourc...
Spring AOP 切面编程介绍
你是否写过这样的代码,当编写的时候总会感觉以前曾经这么写过。我的朋友,这不是似曾相识,这是样板式代码(boilerplate code)。
通常为了实现通用和简单的任务,你不得不一遍遍地重复编写这样的代码。
遗憾的是,它们中的很多都是因为使用Java API而导致的样板式代码。样板式代码的一个常见范例是使用JDBC访问数据库查询。举个例子,如果你曾经用过JDBC,那么你或许会写出类似下面的代码。
public Employee getEmployeebyId(long id){
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try{
conn = dataSourc...
链表相关算法总结
快慢指针
假设慢指针(走一步)用()表示,快指针(走两步)用[]表示。在起始位置与数量不同的情况下,快慢指针所处的位置如下:
第一种情况:起点都是在链表头
示例1:
[(1)] 2 3
1 (2) [3]
示例2:
[(1)] 2 3 4
1 (2) [3] 4
1 2 (3) 4 []
示例3:
[(1)] 2 3 4 5
1 (2) [3] 4 5
1 2 (3) 4 [5]
第二种情况:起点都是链表头的前一个位置
示例1:
[()] 1 2 3
(1) [2] 3
1 (2) 3 []
示例2:
[()] 1 2 3 4
(1) [2] 3 4
1 (2) 3 [4]
示例3:
[()] 1 2 3 4 5
...
18 post articles, 3 pages.