Archive for the ‘杂项’ Category

数据结构课程设计

下载

判断一个链表是否有循环,打印一个可能带环的链表中所有元素各一次。

寻找链表中倒数第m个元素。

判断一个ASCII字符串中是否有重复字符。

判断两个链表是否相交,寻找相交节点。

定义二叉树两个结点的最小距离为这两个结点的最近公共祖先分别到这两个结点的路径长度之和。请设计一种方法,找出给定二叉树中任意两个结点的最小距离,可以考虑以图形显示之。

设计一个程序实现二叉树的层次遍历,要求每层之间的数据用一个空格分开。二叉树采用二叉链表方式进行存储。

利用大顶堆实现一个优先队列。对于队列的操作应该至少支持下列几种指令:

   Void enqueue(int ObjectID, int Priority);

   Int dequeue();

   Void changeweight(int ObjectID, int newPriority);

函数enqueue向优先队列中插入一个ID号为ObjectID,优先级为priority的新对象。函数dequeue从优先队列中删除优先级最高的对象,并返回该对象的ID号。函数changeweight将ID号为ObjectID的对象的优先级改为newPriority。你需要一种机制,以便获取所需要对象在堆中的位置。你还需要对堆的实现进行修改,以存储对象在数组中的位置,使得堆中对象的修改可以在辅助数组结构中记录下来。

Read more

浅谈字符集

强烈推荐一篇文章:理解字符编码

在写程序的过程中,字符集的问题遇到过N多。查查改改,解决问题,一直没有总结。这段时间做J2EE的项目,遇到了更多的字符集问题,在解决的过程中收获不少。写篇文章浅谈下字符集问题。

个人将字符集粗分为两大类:ASCII和UNICODE。简单介绍下它们:

众所周知,计算机是美国人发明的。因此,为了方便使用计算机,那么计算机起码要能表达他们(美国人)的语言。这也就是ASCII(美国信息交换标准代码)的由来了。计算机的最小信息单位是位(bit),但更常用的基本信息单位是字节(Byte),它们之间的转换是1Byte = 8bits(为什么是8而不是2、4、16等,我就不得而知了)。ASCII又分基础的(7位,最高位用作奇偶校验)和扩展的(8位),最多能表示256个字符。这对于表示全世界的语言字符是不可能的,因此有了UNICODE。

UNICODE简单的来说就是,用两个字节(16位)来表示一个字符。但是基于不同的考虑(如存储空间)又有UTF-8、UTF-16、UTF-32等不同的格式,这里就不详细介绍了。

正是ASCII和UNICODE给我们带来了字符集问题。一个比较好的程序,应该要能支持UNICODE。对于我们(中国人),更是如此,因为我们使用的是汉字而不是英文。接下来,我要以一个不完全的Java Web Server例子来说说个人的理解。

OS(Windows、Unix、Linux等)、Java、MySQL在全世界流行,因此很容易预见到它们都是支持ASCII和UNICODE的。先说说OS,个人用的是Windows XP(中文版)(Windows对于本地化的支持有个“代码页”的概念,在此不详细介绍),很容易知道OS的字符集是UNICODE的GBK。对于运行在该OS上的Java平台,也是如此。而MySQL对字符集的支持主要表现在它的存储。

在例子中,MySQL采用latin1(称之为ASCII或者ISO-8859-1都行),而JSP采用GB2312。

问题一:JSP page指令中的pageEncoding属性指定的字符集是指该JSP页面被打开时,OS用哪种字符集格式读取。这就相当于你在记事本里写篇文字(即有英文又有中文),保存的格式。如果为ASCII,则中文会丢失原有的信息,为UNICODE则能正常显示。因此,其实只要你在该JSP里面的注释仅有英文,是可以设置该属性为ISO-8859-1的。

问题二:JSP page指令中的contentType="text/html;charset=gb2312"和HTML中的<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />意思一样,都是指该页面由浏览器解析时采用的字符集。

问题三:Java中所有字符都是两个字节,无论是ASCII还是UNICODE,但是建议你不要简单地认为它就是UNICODE。而网络上传输的字符是ISO-8859-1(1Byte)的(因为网络传输是基于字节流的)。所以前一个JSP页面的中文参数采用POST方法传到后一个页面接收后,它是乱码。详细:一个汉字两个字节都有数据**(GB2312),网络传输成* *(ISO-8859-1),后一个页面接收后成#* #*(GB2312)两个汉字四个字节。(*表示数据,#表示未知,空格表示字符间隔)当然乱码了。重新组合下new String(data.getBytes("ISO-8859-1"))就好了(默认采用页面charset编码组合即GB2312)。采用GET方法则要在前一个页面先将中文编码后再在URL中传递参数:String msg = java.net.URLEncoder.encode("中文", "UTF-8");在后一个页面取得msg后,对应的使用new String(msg.getBytes("ISO-8859-1"), "UTF-8")或者java.net.UREDecoder.decode(msg, "UTF-8");。

Read more

HTML <label> <span>

<label> 标签为 input 元素定义标注(标记)。

label 元素不会向用户呈现任何特殊效果。不过,它为鼠标用户改进了可用性。如果您在 label 元素内点击文本,就会触发此控件。就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。

<label> 标签的 for 属性应当与相关元素的 id 属性相同。

<form>
  <label for="male">Male</label>
  <input type="radio" name="sex" id="male" />
  <br />
  <label for="female">Female</label>
  <input type="radio" name="sex" id="female" />
</form>

<span> 标签被用来组合文档中的行内元素。

span 没有固定的格式表现。当对它应用样式时,它才会产生视觉上的变化。如果不对 span 应用样式,那么 span 元素中的文本与其他文本不会任何视觉上的差异。

SMTP

参考资料:

http://hi.baidu.com/kwunkuklan/blog/item/455f121749120a044b90a75e.html

http://tool.chinaz.com/Tools/Base64.aspx

TCP/IP课要求写个程序用SMTP发送一封邮件。telnet试验了下163和新浪的SMTP。下面为过程(163的SMTP貌似有限制,新浪的可以发送成功):

telnet smtp.163.com 25
HELO 163.com
AUTH LOGIN
dXNlcm5hbWU6(username:)
base64加密后的用户名
UGFzc3dvcmQ6(Password:)
base64加密后的密码

telnet smtp.sina.com.cn 25
HELO
AUTH LOGIN
VXNlcm5hbWU6(Username:)
base64加密后的用户名
UGFzc3dvcmQ6(Password:)
base64加密后的密码
MAIL FROM: <***@sina.com.cn>//邮件发送地址,不可伪造
RCPT TO: <***@qq.com>//目的地址
DATA
TO://目的地址,可伪造
FROM://发送地址,可伪造
SUBJECT:
.
QUIT

注意:可能小小的输入错误都会导致操作不成功。代码暂时就不贴了。

网络爬虫参考资料

http://g.csdn.net/5029360

http://subject.csdn.net/spider.htm

http://news.csdn.net/n/20071015/109604.html

无觅相关文章插件,快速提升流量