- 浏览: 123326 次
- 性别:
- 来自: 上海
最新评论
-
970655147:
hi 博主你好, 我仿照你的这个代码写了一个, 发现了一个bu ...
B树算法的java实现 -
cfczdws:
???????????:)
tomcat 如何把请求(request)映射到servlet -
cfczdws:
??????????
oracle best practice 读书笔记(持续更新) -
cfczdws:
看了受益匪浅,学习
B树算法的java实现 -
cfczdws:
不得不再回次。。
HTTPClient模拟登陆人人网
文章列表
用来考女球迷的世界杯选择题:
1、阿根廷主教练叫什么?
A:猪拉多纳 B:牛拉多纳 C:马拉多纳 D:羊拉多纳
2、以下哪个是葡萄牙球星?
A:A罗 B:B罗 C:C罗 D:D罗
3、以下哪个是阿根廷球星?
A:梅东 B:梅南 C:梅西 D:梅北
4、以下哪个是韩国球星?
A:李东国 B:李南国 C:李西国 D:李北国
5、以下哪个是英格兰球星?
A:黑帕德 B:兰帕德 C:绿帕德 D:红帕德
6、以下哪个是法国球星?
A:上贝上B:下贝下 C:里贝里 D:外贝外
7、以下哪个是荷兰球星?
A:东风破 B:范佩西 C:双结棍 D:千里之外
8、以下哪个是日本队的球星?
A:川口能活 B:川口能 ...
不报告所有异常有什么坏处
例如:你在一个方法里捕获了一个异常,但是在catch里没有做任何事情,也没有向外扩散这个异常。那么,当日后程序在生产环境中运行时发生错误,抛出这个异常时,方法返回了,运行结果错误,最 ...
看到一篇写的非常好的文章,揭示了java序列化算法(Serializable)的细节。
http://www.javaworld.com/community/node/2915
主要序列化过程(先写类的元数据,再写数据):
1 写和类相关的元数据
2 递归的写和父类相关的元数据,知道遇到Object类
3 从最高层的父类开始写数据
4 直到最低层的类的数据被写入
持续更新。
成功的软件项目的特点(优先级排序):
1 满足用户的需求
2 可维护性
3 性能好
程序员应该遵循的规范:
1 尽量使用自动排版工具,对工具进行定义满足自己的需求
2 建立一套变量,函数,过程等命名规范
3 建立模板使程序员能方便地(最后是自动地)根据模板产生文档和代码
4 编写出具有自解释的代码,同时添加必要的注释
5 添加必要注释的地方包括
- 程序头
- 关键逻辑
- 复杂逻辑
- 待完成的逻辑
编译成功之后:
跟踪,调试,运行。
1 修正bug不要立即开始调试,可以先使用跟踪信息缩小错误范围
关键在于是否有一套好的方式记录跟踪信息。
网站登陆分类
不考虑HTTPS,网站通过浏览器登陆大约可以分为如下几类
密码明文传输,用户在浏览器输入用户名密码,然后用明文传输到网站。人人网就是这种做法。
使用HTTP协议Authentication机制,一般网站使用的少。
使用JS对用户输入的密码进行处理,网络上不用传输明文密码了。开心001采用的这种做法。 另外: 有些网站也提供接口,让用户可以编写客户端来访问网站,例如amazon s3。
开心001的登陆开发实践
和人人一样,我在做开心001登陆开始的时候也是使用badboy录制登陆过程,用jmeter重放。发现登陆时并没有直接发送密码明文,而是用如下两个参数代替:
...
目的:
使用HTTPClient4.0.1登录到人人网,并从特定的网页抓取数据。
总结&注意事项:
HttpClient(DefaultHttpClient)代表了一个会话,在同一个会话中,HttpClient对cookie自动进行管理(当然,也可以在程序中进行控制)。
在同一个会话中,当使用post或是get发起一个新的请求时,一般需要对调用前一个会话的abort()方法,否则会抛出异常。
有些网站登录成功后会重定向(302, 303),比如这里的人人网。如果发出的是post请求,需要从响应头中取出location,并再次向网站发送请求,以获取最终数据。
抓取程序不要运 ...
Spring负责Action的产生
1 除了struts core,在WEB-INF/lib下加入struts2-spring-plugin-2.1.8.1.jar和spring.jar包。
2 web.xml
配置一个listener
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3 applicationContext.xml
放到 ...
JAXP(Java API for XML Parsing)
Sun(现在属于oracle)提供的一套操作解析和操作XML文档的接口,主要包括三个包:
javax.xml包及子包: 用来获取解析器,并解析文档。
org.w3c.dom包及子包: 使用DOM操作XML需要的接口
org.xml.sax包及子包: 使用SAX操作X ...
B树算法及其变种多用于文件,数据库索引,下面是参考“算法导论”的java实现,可以加入节点,没有提供删除结点功能,打印的信息还行,仅供学习。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/*
* Author: Robert Liu
*/
public class BTree<E extends Comparable<E>> {
private BTNode root = null;
private int t;
pri ...
先搞清servlet的几个概念:
RequestURI(请求URI)
表示客户端(浏览器)请求的URL,例如一个链接http://localhost/app/test,那么request URL就是/app/test。RequestURI不浩瀚查询参数。
RequestURI可以使用request.getRequestURI()获取。
context path(上下文路径)
表示了一个应用(web application),例如一个链接http://localhost/app/test,那么context pathL就是/app。
context path可以使用request.getCont ...
早上看了一篇写单例模式的文章,总结的比较全,可惜仍然没有对单例模式在不同classloader甚至是多个jvm上的分析,在网上搜了一下,找到一个例子并改写如下:
定义一个空接口:
// Null interface, do nothing but you'll see the usage later
public interface IAntiSingleton {
}
定义一个通用的单例模式
public class AntiSingleton implements IAntiSingleton {
private static final AntiSingleton instan ...
java中存在对多个对象加锁的情况,例如: 在银行系统转账时,需要锁定两个账户,这个时候,顺序使用两个synchronized可能存在死锁的情况,在网上搜索到下面的例子:
public class Bank {
final static Object obj_lock = new Object();
// Deadlock crisis
public void transferMoney(Account from, Account to, int number) {
synchronized (from) {
synchronized (to) {
fr ...
起因:
源于在java.util.BitSet的源码中发现这样一条语句:
1L << bitIndex
当bitIndex为64时,上面语句的返回值为1,据此猜测java的移位运算使用的是循环移位规则,内容可以参考上一篇博客 "JDK源码 - BitSet的实现" http://robblo ...
java.util.BitSet是个很有趣的类,了解其内部实现对正确的使用非常重要。
对象构造:
private final static int ADDRESS_BITS_PER_WORD = 6;
private final static int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD;
private long[] words;
private static int wordIndex(int bitIndex) {
return bitIndex >> ADDRESS_BITS_PER_WORD;
...
归并排序用来合并排好序的数组,常用于外部排序,常见的归并排序是对两个数组进行归并,如果两个数组长度为m和n的话,比较的时间最大是m+n。
新的问题是,如果有多个排好序的数组,如果进行归并? 一种可以想到的方法是:逐个进行归并排序(第一个数组和第二个数组合并,合并和的数组再和第三个数组合并...),这种情况下时间复杂度是O(n*n)。
算法导论里提到过一个用堆来进行多路排序的算法,时间复杂度是nlogn,java里面的PriorityQueue就是现成的堆的结构,实现起来还是比较方便的,代码如下:
用到的内部数据结构:
// 如果用链表存储数据,就不用这么麻烦了,
// 用数组的话 ...