<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Achely's Blog]]></title>
<link>http://www.zhangyongjun.com/blog/</link>
<description><![CDATA[水至清则无鱼,人至贱则无敌!]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2006 Achely's Blog]]></copyright>
<webMaster><![CDATA[achely@gmail.com(achely)]]></webMaster>
<generator>Achely's Blog</generator> 
<image>
	<title>Achely&#39;s Blog</title> 
	<url>http://www.zhangyongjun.com/blog/images/logos.gif</url> 
	<link>http://www.zhangyongjun.com/blog/</link> 
	<description>Achely&#39;s Blog</description> 
</image>

			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4358</link>
			<title><![CDATA[数据库基本理论-范式]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Wed,10 Mar 2010 12:22:08 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4358</guid>	
		<description><![CDATA[<br/>　　今天，把数据库的范式理解一下，还是五六年前看的了。呵呵，不过还好，发现自己的理解力提高了哦<br/>　　第一范式（1NF）：数据库表中的字段都是单一属性的，不可再分。这个单一属性由基本类型构成，包括整型、实数等。<br/>　　 字段1 字段2 字段3 字段4<br/>　　                                             表一（标准的第一范式）             字段1 字段2 字段3 字段4  字段2.1        I    字段2.2   字段1         字段2       字段3       字段4 <br/>　　                                         表二 （明显不符合）<br/>　　第二范式（2NF）：数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖（部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况），也即所有非关键字段都完全依赖于任意一组候选关键字。 <br/>　　 假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分)，关键字为组合关键字(学号, 课程名称)，因为存在如下决定关系： <br/>　　(学号, 课程名称) → (姓名, 年龄, 成绩, 学分) <br/>　　这个数据库表不满足第二范式，因为存在如下决定关系： (课程名称) → (学分) 和(学号) → (姓名, 年龄) <br/>　　即存在组合关键字中的字段决定非关键字的情况。 <br/>　　由于不符合2NF，这个选课关系表会存在如下问题： <br/>　　(1) 数据冗余： <br/>　　同一门课程由n个学生选修，"学分"就重复n-1次；同一个学生选修了m门课程，姓名和年龄就重复了m-1次。 <br/>　　(2) 更新异常： <br/>　　若调整了某门课程的学分，数据表中所有行的"学分"值都要更新，否则会出现同一门课程学分不同的情况。 <br/>　　(3) 插入异常： <br/>　　假设要开设一门新的课程，暂时还没有人选修。这样，由于还没有"学号"关键字，课程名称和学分也无法记录入数据库。 <br/>　　(4) 删除异常： <br/>　　假设一批学生已经完成课程的选修，这些选修记录就应该从数据库表中删除。但是，与此同时，课程名称和学分信息也被删除了。很显然，这也会导致插入异常。 <br/>　　把选课关系表SelectCourse改为如下三个表： <br/>　　学生：Student(学号, 姓名, 年龄)； <br/>　　课程：Course(课程名称, 学分)； <br/>　　选课关系：SelectCourse(学号, 课程名称, 成绩)。 <br/>　　这样的数据库表是符合第二范式的， 消除了数据冗余、更新异常、插入异常和删除异常。 <br/>　　另外，所有单关键字的数据库表都符合第二范式，因为不可能存在组合关键字。 <br/>　　第三范式（3NF）：在第二范式的基础上，数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖，指的是如果存在"A → B → C"的决定关系，则C传递函数依赖于A。因此，满足第三范式的数据库表应该不存在如下依赖关系： <br/>　　关键字段 → 非关键字段x → 非关键字段y <br/>　　假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话)，关键字为单一关键字"学号"，因为存在如下决定关系： <br/>　　(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话) <br/>　　这个数据库是符合2NF的，但是不符合3NF，因为存在如下决定关系： <br/>　　(学号) → (所在学院) → (学院地点, 学院电话) <br/>　　即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。 <br/>　　它也会存在数据冗余、更新异常、插入异常和删除异常的情况，读者可自行分析得知。 <br/>　　把学生关系表分为如下两个表： <br/>　　学生：(学号, 姓名, 年龄, 所在学院)； <br/>　　学院：(学院, 地点, 电话)。 <br/>　　这样的数据库表是符合第三范式的，消除了数据冗余、更新异常、插入异常和删除异常。 <br/>　　鲍依斯-科得范式（BCNF）：在第三范式的基础上，数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。 <br/>　　假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量)，且有一个管理员只在一个仓库工作；一个仓库可以存储多种物品。这个数据库表中存在如下决定关系： <br/>　　(仓库ID, 存储物品ID) →(管理员ID, 数量) <br/>　　(管理员ID, 存储物品ID) → (仓库ID, 数量) <br/>　　所以，(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字，表中的唯一非关键字段为数量，它是符合第三范式的。但是，由于存在如下决定关系： <br/>　　(仓库ID) → (管理员ID) <br/>　　(管理员ID) → (仓库ID) <br/>　　即存在关键字段决定关键字段的情况，所以其不符合BCNF范式。它会出现如下异常情况： <br/>　　(1) 删除异常： <br/>　　当仓库被清空后，所有"存储物品ID"和"数量"信息被删除的同时，"仓库ID"和"管理员ID"信息也被删除了。 <br/>　　(2) 插入异常： <br/>　　当仓库没有存储任何物品时，无法给仓库分配管理员。 <br/>　　(3) 更新异常： <br/>　　如果仓库换了管理员，则表中所有行的管理员ID都要修改。 <br/>　　把仓库管理关系表分解为二个关系表： <br/>　　仓库管理：StorehouseManage(仓库ID, 管理员ID)； <br/>　　仓库：Storehouse(仓库ID, 存储物品ID, 数量)。 <br/>　　这样的数据库表是符合BCNF范式的，消除了删除异常、插入异常和更新异常。 <br/>　　]]></description>
		</item>
		
			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4357</link>
			<title><![CDATA[在C#中弹出全屏showDialog...]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[.Net]]></category>
			<pubDate>Wed,10 Mar 2010 12:21:56 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4357</guid>	
		<description><![CDATA[<br/>　　1、计算屏幕的大小<br/>　　Rectangle rect=System.Windows.Forms.SystemInformation.VirtualScreen;<br/>int width=rect.Width;<br/>int height=rect.Height; <br/>　　2、设置dialog函数中的宽和高的属性<br/>　　dialogStatus = string.format("status:off;dialogWidth:{0}px;dialogHeight:{1}px", width, height);<br/>　　3、showDialog<br/>　　showModelessDialog("myDialog.htm",window,"status:off;fullscreen:yes;dialogWidth:"+window.screen.width+"px;dialogHeight:"+window.screen.height+"px");<br/>　　showModelessDialog("myDialog.htm",window,dialogStatus);]]></description>
		</item>
		
			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4356</link>
			<title><![CDATA[Ajax入门实例（ASP AJAX）]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[Ajax]]></category>
			<pubDate>Wed,10 Mar 2010 08:02:09 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4356</guid>	
		<description><![CDATA[<br/><br/>　　 <br/><br/>　　现在在网站开发中都很流行用AJAX技术处理页面信息，确实页面无刷新给用户带来了很大的友好界面。今天写个AJAX的入门实例，目的是让初学AJAX的朋友一看就懂。本例子简单地说明AJAX是怎么异步通信的。做这东西大概的思路是这样的：至少有2个页面，一个显示，一个处理数据。其中一个要为.asp的文件（因为要做为处理传过来的值。本例子是ASP+AJAX，所以是.asp文件）本例中主要是放在AJAX的操作上即javascript文件。<br/>　　=====显示页面：=======<br/>　　&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br/>　　&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;<br/>　　&lt;head&gt;<br/>　　&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;<br/>　　&lt;title&gt;AJAX技术实例入门&lt;/title&gt;<br/>　　&lt;script language="javascript" type="text/javascript"&gt;<br/>　　/*<br/>　　花太醉于2009-6-15写<br/>　　QQ：374059623<br/>　　说明：AJAX创建要考虑到不同的浏览器问题，我这里列了IE和非IE的创建方式。<br/>　　创建好了就打开实例--发送--接收（一般是一个函数）并显示处理页面返回的信息（根据不同的状态显示不同的信息）。<br/>　　*/<br/>　　function createAjax(){<br/>　　var http;<br/>　　if (window.ActiveXObject){<br/>　　    http=new ActiveXObject("Microsoft.XMLHTTP") ? new ActiveXObject("Microsoft.XMLHTTP") : new ActiveXObject("Msxml2.XMLHTTP");<br/>　　}<br/>　　else if(window.XMLHttpRequest)<br/>　　{<br/>　　    http=new XMLHttpRequest();<br/>　　}<br/>　　return http;<br/>　　}<br/>　　var ajax=createAjax();<br/>　　function show(){<br/>　　ajax.open("GET","a.asp?text="+escape(document.getElementById("text").value)+"&amp;num="+Math.random(),true);<br/>　　ajax.send(null);<br/>　　ajax.onreadystatechange=getmessage;<br/>　　}<br/>　　function getmessage(){<br/>　　var html;<br/>　　if (ajax.readyState==4){<br/>　　        if (ajax.status==200){<br/>　　        html=ajax.responseText;<br/>　　        document.getElementById("showinfo").innerHTML=html;<br/>　　        }else    alert('status is:'+ajax.status);<br/>　　}else{<br/>　　document.getElementById("showinfo").innerHTML="数据读取中...";<br/>　　}<br/>　　}<br/>　　&lt;/script&gt;<br/>　　&lt;/head&gt;<br/>　　&lt;body&gt;<br/>　　&lt;table width="360" cellpadding="2" style="border:solid 1px #FF0000;"&gt;<br/>　　&lt;tr&gt;<br/>　　    &lt;td width="140"&gt;&lt;input name="text" type="text" id="text" size="20" /&gt;&lt;/td&gt;<br/>　　    &lt;td width="187"&gt;&lt;div id="showinfo"&gt;&lt;/div&gt;&lt;/td&gt;<br/>　　&lt;/tr&gt;<br/>　　&lt;tr&gt;<br/>　　    &lt;td colspan="2"&gt;&lt;input name="button" type="button" value="点我显示信息" onclick="show()" /&gt;&lt;/td&gt;<br/>　　&lt;/tr&gt;<br/>　　&lt;/table&gt;<br/>　　&lt;/body&gt;<br/>　　&lt;/html&gt;<br/>　　==========a.asp===ASP处理页面==========<br/>　　&lt;%<br/>　　response.Charset="gb2312"<br/>　　response.ContentType="text/html"<br/>　　uName=Trim(request.QueryString("text"))<br/>　　if uName="" then<br/>　　    response.Write("&lt;strong&gt;你还没输入信息！&lt;/strong&gt;")<br/>　　else<br/>　　    if uName="johnny" then<br/>　　    response.Write("johnny is a good boy!")<br/>　　    else<br/>　　    response.Write(uName&amp;" 不存在！")<br/>　　    end if<br/>　　end if<br/>　　%&gt;<br/>　　===========运行页面============<br/>　　<img title="Ajax入门实例（ASP+AJAX） - 花太醉 - 花太醉 的博客" alt="Ajax入门实例（ASP+AJAX） - 花太醉 - 花太醉 的博客" src="http://www.zhangyongjun.com/blog//getpic.aspx?path=http%3a%2f%2fhiphotos.baidu.com%2fgamevip%2fpic%2fitem%2fc1165766e5443f31aa184c36.jpg" border=0><br/>　　本例子简单，但却说明了AJAX是如何异步通信的。希望对你有帮助。关于AJAX的优缺点大家可以自己查下。<br/>　　]]></description>
		</item>
		
			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4355</link>
			<title><![CDATA[...639/双卡双待JAVA/QQ/烤漆...]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[JAVA]]></category>
			<pubDate>Wed,10 Mar 2010 08:02:06 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4355</guid>	
		<description><![CDATA[

Leave a Reply


	Click here to cancel reply.






<br/>　　
Name (required)

<br/>　　
Mail (will not be published) (required)

<br/>　　
Website


XHTML: You can use these tags: &lt;a href=&quot;&quot; title=&quot;&quot;&gt; &lt;abbr title=&quot;&quot;&gt; &lt;acronym title=&quot;&quot;&gt; &lt;b&gt; &lt;blockquote cite=&quot;&quot;&gt; &lt;cite&gt; &lt;code&gt; &lt;del datetime=&quot;&quot;&gt; &lt;em&gt; &lt;i&gt; &lt;q cite=&quot;&quot;&gt; &lt;strike&gt; &lt;strong&gt; -->

<br/><br/>　　







]]></description>
		</item>
		
			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4354</link>
			<title><![CDATA[数据库拆分[Flickr]]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Wed,10 Mar 2010 08:02:03 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4354</guid>	
		<description><![CDATA[
	Guest Passes let you share your photos that aren't public. Anyone can see your public photos anytime, whether they're a Flickr member or not. But! If you want to share photos marked as friends, family or private, use a Guest Pass. If you're sharing photos from a set, you can create a Guest Pass that includes any of your photos marked as friends, family, or private. If you're sharing your entire photostream, you can create a Guest Pass that includes photos marked as friends or family (but not your private photos). Learn more about Guest Passes![?]
]]></description>
		</item>
		
			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4353</link>
			<title><![CDATA[C#WinForm父窗体子窗体传值]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[.Net]]></category>
			<pubDate>Wed,10 Mar 2010 08:01:55 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4353</guid>	
		<description><![CDATA[<br/>　　Form1为父窗体(包含textBox1、button1)<br/>　　Form2为子窗体(包含textBox2、button2)<br/>　　父窗体给子窗体传值<br/>　　==================<br/>　　1.点击Form1的button1 打开Form2<br/>　　  父窗体给子窗体传值 可以调用重载子窗体的构造函数 直接传入相关数值<br/>　　    public partial class Form1 : Form<br/>　　    {<br/>　　        public Form1()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        private void button1_Click(object sender, EventArgs e)<br/>　　        {<br/>　　            Form2 frm2 = new Form2(this.textBox1.Text);<br/>　　            frm2.Show();<br/>　　        }<br/>　　    }<br/>　　    public partial class Form2 : Form<br/>　　    {<br/>　　        public Form2()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        public Form2(string strTextBox1Text)<br/>　　        {<br/>　　            InitializeComponent();<br/>　　            this.textBox2.Text = strTextBox1Text;<br/>　　        }<br/>　　    }<br/>　　2.点击Form1的button1 打开Form2<br/>　　  并调用子窗体Form2的公开属性或方法 将Form1的textBox1的值设置给Form2的textBox2<br/><br/>　　    public partial class Form1 : Form<br/>　　    {<br/>　　        public Form1()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        private void button1_Click(object sender, EventArgs e)<br/>　　        {<br/>　　            Form2 frm2 = new Form2();<br/>　　            frm2.TextBox2Text = this.textBox1.Text;<br/>　　            frm2.Show();<br/>　　        }<br/>　　    }<br/>　　    public partial class Form2 : Form<br/>　　    {<br/>　　        public Form2()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        public string TextBox2Text<br/>　　        {<br/>　　            set { this.textBox2.Text = value; }<br/>　　            get { return this.textBox2.Text; }<br/>　　        }       <br/>　　    }<br/><br/>　　3.点击Form1的button1 打开Form2<br/>　　  在Form2_Load调用父窗体Form1的公开属性或方法 将Form1的textBox1的值设置给Form2的textBox2<br/>　　    public partial class Form1 : Form<br/>　　    {<br/>　　        public Form1()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        public string TextBox1Text<br/>　　        {<br/>　　            set { this.textBox1.Text = value; }<br/>　　            get { return this.textBox1.Text;  }<br/>　　        }<br/>　　        private void button1_Click(object sender, EventArgs e)<br/>　　        {<br/>　　            Form2 frm2 = new Form2();<br/>　　            frm2.Show(this);//或 frm2.ShowDialog(this);<br/>　　            ////或者<br/>　　            //Form2 frm2 = new Form2();<br/>　　            //frm2.Owner = this;<br/>　　            //frm2.Show();//或 frm2.ShowDialog();<br/>　　        }<br/>　　    }<br/>　　    public partial class Form2 : Form<br/>　　    {<br/>　　        public Form2()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        private void Form2_Load(object sender, EventArgs e)<br/>　　        {<br/>　　            Form1 frm1 = (Form1)this.Owner;<br/>　　            this.textBox2.Text = frm1.TextBox1Text;<br/>　　        }<br/>　　    }<br/>　　子窗体给父窗体传值<br/>　　==================<br/>　　4.点击Form1的button1 打开Form2<br/>　　  再点击Form2的button2 <br/>　　    在button2_Click事件中 通过this.Owner将Form2的textBox2的值设置给Form1的textBox1<br/>　　    并关闭Form2<br/>　　    public partial class Form1 : Form<br/>　　    {<br/>　　        public Form1()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        private void button1_Click(object sender, EventArgs e)<br/>　　        {<br/>　　            Form2 frm2 = new Form2();<br/>　　            frm2.Show(this);//或 frm2.ShowDialog(this);<br/>　　            ////或者<br/>　　            //Form2 frm2 = new Form2();<br/>　　            //frm2.Owner = this;<br/>　　            //frm2.Show();//或 frm2.ShowDialog();<br/>　　        }<br/>　　    }<br/>　　    public partial class Form2 : Form<br/>　　    {<br/>　　        public Form2()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        private void button2_Click(object sender, EventArgs e)<br/>　　        {<br/>　　            Form1 frm1 = (Form1)this.Owner;<br/>　　     //注意 如果textBox1是放在panel1中的 则先找panel1 再找textBox1<br/>　　            ((TextBox)frm1.Controls["textBox1"]).Text = this.textBox2.Text;<br/>　　            this.Close();<br/>　　        }<br/>　　    }<br/>　　5.点击Form1的button1 打开Form2<br/>　　  再点击Form2的button2 <br/>　　    在button2_Click事件中 通过this.Owner及调用父窗体Form1的公开属性或方法 <br/>　　                          将Form2的textBox2的值设置给Form1的textBox1<br/>　　    并关闭Form2<br/><br/>　　    public partial class Form1 : Form<br/>　　    {<br/>　　        public Form1()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        public string TextBox1Text<br/>　　        {<br/>　　            set { this.textBox1.Text = value; }<br/>　　            get { return this.textBox1.Text;  }<br/>　　        }<br/>　　        private void button1_Click(object sender, EventArgs e)<br/>　　        {<br/>　　            Form2 frm2 = new Form2();<br/>　　            frm2.Show(this);//或 frm2.ShowDialog(this);<br/>　　            ////或者<br/>　　            //Form2 frm2 = new Form2();<br/>　　            //frm2.Owner = this;<br/>　　            //frm2.Show();//或 frm2.ShowDialog();<br/>　　        }<br/>　　    }<br/>　　    public partial class Form2 : Form<br/>　　    {<br/>　　        public Form2()<br/>　　        {<br/>　　            InitializeComponent();<br/>　　        }<br/>　　        private void button2_Click(object sender, EventArgs e)<br/>　　        {<br/>　　            Form1 frm1 = (Form1)this.Owner;<br/>　　            frm1.TextBox1Text = this.textBox2.Text;<br/>　　            this.Close();<br/>　　        }<br/>　　    }<br/>　　]]></description>
		</item>
		
			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4352</link>
			<title><![CDATA[JQUERY_AJAX传智播客]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[Ajax]]></category>
			<pubDate>Wed,10 Mar 2010 03:42:04 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4352</guid>	
		<description><![CDATA[                          开发一个AJAX框架的步骤------传知播客                          JQUERY_AJAX------传智播客        <br/>　　                      默认分类            2010-03-09 23:20:07            阅读5            评论0                    字号：大中小                <br/>　　l       JQuery 对 Ajax 操作进行了封装, 在 jQuery 中最底层的方法时 $.ajax(), 第二层是 load(), $.get() 和 $.post(), 第三层是 $.getScript() 和 $.getJSON()<br/><br/>　　l       load()方法是 jQuery 中最为简单和常用的 Ajax 方法, 能载入远程的 HTML 代码并插入到 DOM 中. 它的结构是:   load(url[, data][,callback])。  如果只需要加载目标 HTML 页面内的某些元素, 则可以通过 load() 方法的 URL 参数来达到目的. 通过 URL 参数指定选择符, 就可以方便的从加载过来的 HTML 文档中选出所需要的内容. load() 方法的 URL 参数的语法结构为 “url selector”(注意: url 和 选择器之间有一个空格)<br/>　　l       传递方式: load() 方法的传递参数根据参数 data 来自动自定. 如果没有参数传递, 采用 GET 方式传递, 否则采用 POST 方式<br/>　　l       对于必须在加载完才能继续的操作, load() 方法提供了回调函数, 该函数有三个参数: 代表请求返回内容的 data; 代表请求状态的 textStatus 对象和 XMLHttpRequest 对象<br/>　　l       方法的返回值是 jQuery<br/><br/>　　 <br/>　　              * load(url, data(Map),callback) 载入远程 HTML 文件代码并插入至 DOM 中<br/>　　              *  * url:待装入HTML网页网址。<br/>　　              *  * data(Map):(可选)发送至服务器的key/value数据,如没有设置为null<br/>　　              *  * 回调函数 function(data,textStatus,xmlHttpReq)<br/>　　              *      * data :代表请求返回内容的 data<br/>　　              *      * textStatus:代表请求状态的 textStatus 对象<br/>　　              *           其值可能为: succuss,error, notmodify, timeout4种.<br/>　　              *      * xmlHttpReq:XMLHttpRequest对象<br/>　　              */<br/>　　             $("#one").load("load.jsp",{"username":$("#username").val(),"psw":$("#psw").val()},<br/>　　                    function(data,textStatus,xmlHttpReq){<br/>　　                       alert(data +"   "+textStatus+"   "+xmlHttpReq.status+"  "+xmlHttpReq.readyState);<br/><br/>　　             }); <br/><br/>　　           <br/>　　l       $.get() 方法使用 GET 方式来进行异步请求. 它的结构是: $.get(url[, data][, callback][, type]);<br/><br/>　　l       $.get() 方法的回调函数只有两个参数: data 代表返回的内容, 可以是 XML 文档, JSON 文件, HTML 片段等; textstatus 代表请求状态, 其值可能为: succuss, error, notmodify, timeout 4 种.<br/>　　l       方法的返回值:XMLHttpRequest对象<br/>　　l       $.get()  和 $.post() 方法是 jQuery 中的全局函数, 而 find() 等方法都是对 jQuery 对象进行操作的方法<br/>　　l       jQuery 为准备 “发送到服务器的 key/value 数据” 提供了一个简化的方法: serialize(). 该方法作用于一个 jQuery 对象, 能将 DOM 元素内容序列化为字符串, 用于 Ajax 请求.<br/>　　l       使用 serialize() 方法可以自动完成对参数的 url 编码<br/>　　l       因为该方法作用于 jQuery 对象, 所以不光只要表单能使用, 其它选择器选取的元素也能使用它. <br/><br/>　　                   * $.get(url,data(Map),callback) 通过远程 HTTP GET 请求载入信息<br/>　　                   *   * 方法的返回值是XMLHttpRequest对象<br/>　　                   *   * url : 待载入页面的URL地址<br/>　　                   *   * data(Map):待发送 Key/value 参数 如没有参数设置null<br/>　　                   *     callback:回调函数 格式function(data,textStatus)<br/>　　                   *        * data 代表返回的内容<br/>　　                   *        * textstatus 代表请求状态, 其值可能为: succuss, error, notmodify, timeout 4 种.<br/>　　                   */<br/>　　        var xmpReq=$.get("get.jsp",<br/>　　                             {"username":$("#username").val(),"psw":$("#psw").val()},<br/>　　                                 function(data,textStatus){<br/>　　                                  alert(data);<br/>　　                                  $("#one").text(data);<br/>　　                             });<br/>　　//************************************************************************************************      <br/>　　               var xmpReq=$.post("json.jsp",<br/>　　                   {"username":$("#username").val(),"psw":$("#psw").val()},function(data,textStatus){<br/>　　                       //输出pid pname的值    <br/>　　                      //转化为javaScrip可以识别的格式<br/>　　                      var dataObj=eval("("+data+")");<br/>　　                      alert(dataObj.pid+"  "+dataObj.pname);<br/>　　                    });<br/><br/>　　//************************************************************************************************                   <br/>　　//使用json()处理   <br/>　　 * jQuery.getJSON(url,[data],[callback])<br/>　　 *  * 通过 HTTP GET 请求载入 JSON 数据<br/>　　 *  * 返回值 传递的参数 回调函数,回调函数的参数跟get post一致<br/>　　 *  * 使用getJSON处理数据,不用再使用eval函数转化了<br/>　　 */<br/>　　//                var xmpReq=$.getJSON("json.jsp",<br/>　　//                    {"username":$("#username").val(),"psw":$("#psw").val()},function(data,textStatus){<br/>　　//                      //输出pid pname的值                   <br/>　　//                      alert(data.pid+"  "+data.pname);<br/>　　//                    });<br/>　　//************************************************************************************************<br/>　　//$("#form1").serialize() 等价于 {"username":$("#username").val(),"psw":$("#psw").val()}<br/>　　                  var xmpReq=$.getJSON("json.jsp",$("#form1").serialize(),function(data,textStatus){<br/>　　                        //输出pid pname的值                   <br/>　　                        alert(data.pid+"  "+data.pname);<br/>　　                      });      <br/>　　           });<br/>　　      });<br/>　　   这一天又过去了，时间就在我们不知不觉中悄悄的逝过，没有留下一丝的滑痕，这天是冯老师讲的JQUERY—AJAX，中间有很多的注释，理解起来比较方便，祝同学们学习愉快！                  	          <img class="pclass" src="http://www.zhangyongjun.com/blog//getpic.aspx?path=http%3a%2f%2fb.bst.126.net%2fstyle%2fcommon%2ftuijian.png"/>	        	          有0人推荐  	                                          阅读(5)|              评论(0)|              引用(0)              |举报                                      	    	        上一篇：开发一个AJAX框架的步骤------传知播客	    	    	    	      最近读者	      	    	    	      评论	      	                       ]]></description>
		</item>
		
			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4351</link>
			<title><![CDATA[JAVA垃圾收集算法的核心思想]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[JAVA]]></category>
			<pubDate>Wed,10 Mar 2010 03:41:52 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4351</guid>	
		<description><![CDATA[                                                            <br/>　　1.垃圾收集算法的核心思想<br/><br/>　　Java语言建立了垃圾收集机制，用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能发生的两个危险：因内存垃圾过多而引发的内存耗尽，以及不恰当的内存释放所造成的内存非法引用。<br/><br/>　　垃圾收集算法的核心思想是：对虚拟机可用内存空间，即堆空间中的对象进行识别，如果对象正在被引用，那么称其为存活对象，反之，如果对象不再被引用，则为垃圾对象，可以回收其占据的空间，用于再分配。垃圾收集算法的选择和垃圾收集系统参数的合理调节直接影响着系统性能，因此需要开发人员做比较深入的了解。<br/><br/>　　2.触发主GC(Garbage Collector)的条件<br/><br/>　　JVM进行次GC的频率很高,但因为这种GC占用时间极短,所以对系统产生的影响不大。更值得关注的是主GC的触发条件,因为它对系统影响很明显。总的来说,有两个条件会触发主GC:<br/><br/>　　①当应用程序空闲时,即没有应用线程在运行时,GC会被调用。因为GC在优先级最低的线程中进行,所以当应用忙时,GC线程就不会被调用,但以下条件除外。<br/><br/>　　②Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制地调用GC线程,以便回收内存用于新的分配。若GC一次之后仍不能满足内存分配的要求,JVM会再进行两次GC作进一步的尝试,若仍无法满足要求,则 JVM将报&ldquo;out of memory&rdquo;的错误,Java应用将停止。<br/><br/>　　由于是否进行主GC由JVM根据系统环境决定,而系统环境在不断的变化当中,所以主GC的运行具有不确定性,无法预计它何时必然出现,但可以确定的是对一个长期运行的应用来说,其主GC是反复进行的。<br/><br/>　　3.减少GC开销的措施<br/><br/>　　根据上述GC的机制,程序的运行会直接影响系统环境的变化,从而影响GC的触发。若不针对GC的特点进行设计和编码,就会出现内存驻留等一系列负面影响。为了避免这些影响,基本的原则就是尽可能地减少垃圾和减少GC过程中的开销。具体措施包括以下几个方面:<br/><br/>　　(1)不要显式调用System.gc()<br/><br/>　　此函数建议JVM进行主GC,虽然只是建议而非一定,但很多情况下它会触发主GC,从而增加主GC的频率,也即增加了间歇性停顿的次数。<br/><br/>　　(2)尽量减少临时对象的使用<br/><br/>　　临时对象在跳出函数调用后,会成为垃圾,少用临时变量就相当于减少了垃圾的产生,从而延长了出现上述第二个触发条件出现的时间,减少了主GC的机会。<br/><br/>　　(3)对象不用时最好显式置为Null<br/><br/>　　一般而言,为Null的对象都会被作为垃圾处理,所以将不用的对象显式地设为Null,有利于GC收集器判定垃圾,从而提高了GC的效率。<br/><br/>　　(4)尽量使用StringBuffer,而不用String来累加字符串(详见blog另一篇文章JAVA中String与StringBuffer)<br/><br/>　　由于String是固定长的字符串对象,累加String对象时,并非在一个String对象中扩增,而是重新创建新的String对象,如Str5=Str1+Str2+Str3+Str4,这条语句执行过程中会产生多个垃圾对象,因为对次作&ldquo;+&rdquo;操作时都必须创建新的String对象,但这些过渡对象对系统来说是没有实际意义的,只会增加更多的垃圾。避免这种情况可以改用StringBuffer来累加字符串,因StringBuffer是可变长的,它在原有基础上进行扩增,不会产生中间对象。<br/><br/>　　(5)能用基本类型如Int,Long,就不用Integer,Long对象<br/><br/>　　基本类型变量占用的内存资源比相应对象占用的少得多,如果没有必要,最好使用基本变量。<br/><br/>　　(6)尽量少用静态对象变量<br/><br/>　　静态变量属于全局变量,不会被GC回收,它们会一直占用内存。<br/><br/>　　(7)分散对象创建或删除的时间<br/><br/>　　集中在短时间内大量创建新对象,特别是大对象,会导致突然需要大量内存,JVM在面临这种情况时,只能进行主GC,以回收内存或整合内存碎片,从而增加主GC的频率。集中删除对象,道理也是一样的。它使得突然出现了大量的垃圾对象,空闲空间必然减少,从而大大增加了下一次创建新对象时强制主GC的机会。<br/><br/>　　4.gc与finalize方法<br/><br/>　　⑴gc方法请求垃圾回收<br/><br/>　　使用System.gc()可以不管JVM使用的是哪一种垃圾回收的算法，都可以请求Java的垃圾回收。需要注意的是，调用System.gc()也仅仅是一个请求。JVM接受这个消息后，并不是立即做垃圾回收，而只是对几个垃圾回收算法做了加权，使垃圾回收操作容易发生，或提早发生，或回收较多而已。<br/><br/>　　⑵finalize方法透视垃圾收集器的运行<br/><br/>　　在JVM垃圾收集器收集一个对象之前 ，一般要求程序调用适当的方法释放资源，但在没有明确释放资源的情况下，Java提供了缺省机制来终止化该对象释放资源，这个方法就是finalize()。它的原型为：<br/><br/>　　protected void finalize() throws Throwable<br/><br/>　　在finalize()方法返回之后，对象消失，垃圾收集开始执行。原型中的throws Throwable表示它可以抛出任何类型的异常。<br/><br/>　　因此，当对象即将被销毁时，有时需要做一些善后工作。可以把这些操作写在finalize()方法里。<br/><br/>　　 以下是引用片段：<br/>protected void finalize() <br/>　　{ <br/>　　// finalization code here <br/>　　} <br/>　　⑶代码示例<br/><br/><br/><br/>以下是引用片段：<br/>class Garbage <br/>　　{ <br/>　　int index; <br/>　　static int count; <br/>　　Garbage() <br/>　　{ <br/>　　count++; <br/>　　System.out.println("object "+count+" construct"); <br/>　　setID(count); <br/>　　} <br/>　　void setID(int id) <br/>　　{ <br/>　　index=id; <br/>　　} <br/>　　protected void finalize() //重写finalize方法 <br/>　　{ <br/>　　System.out.println("object "+index+" is reclaimed"); <br/>　　} <br/>　　public static void main(String[] args) <br/>　　{ <br/>　　new Garbage(); <br/>　　new Garbage(); <br/>　　new Garbage(); <br/>　　new Garbage(); <br/>　　System.gc(); //请求运行垃圾收集器 <br/>　　} <br/>　　} <br/><br/>　　                        发表于 @                        2010年03月09日　22:15:00 &#124; 评论( loading...                                                        ) &#124; 编辑&#124                                     举报&#124; 收藏                                                                                                                                                                                         查看最新精华文章 请访问博客首页相关文章                                                            ]]></description>
		</item>
		
			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4350</link>
			<title><![CDATA[小报道_伴随着中国语言资源有声数据库.]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[数据库]]></category>
			<pubDate>Wed,10 Mar 2010 03:41:51 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4350</guid>	
		<description><![CDATA[        					营造开放的中国互联网，请发表观点：<br/>　　名字 (必填)<br/>　　邮箱 (不会公开) (必填)<br/>　　网址XHTML: You can use these tags&#58; &lt;a href=&quot;&quot; title=&quot;&quot;&gt; &lt;abbr title=&quot;&quot;&gt; &lt;acronym title=&quot;&quot;&gt; &lt;b&gt; &lt;blockquote cite=&quot;&quot;&gt; &lt;cite&gt; &lt;code&gt; &lt;del datetime=&quot;&quot;&gt; &lt;em&gt; &lt;i&gt; &lt;q cite=&quot;&quot;&gt; &lt;strike&gt; &lt;strong&gt; --><br/><br/>　　        ]]></description>
		</item>
		
			<item>
			<link>http://www.zhangyongjun.com/blog/default.asp?id=4349</link>
			<title><![CDATA[C#模拟Post和Get方式发送数据]]></title>
			<author>achely@gmail.com()</author>
			<category><![CDATA[.Net]]></category>
			<pubDate>Wed,10 Mar 2010 03:41:49 +0800</pubDate>
			<guid>http://www.zhangyongjun.com/blog/default.asp?id=4349</guid>	
		<description><![CDATA[通过应用程序读取网页信息的时候，通常需要抓取网页的数据，但是有一个问题就是很多网页需要登录后才能够获得页面数据，那么就需要保存当前的cookie，在.NET中可以使用CookieContainer 对象来保存登录后的Cookie信息，每次发送数据的时候加上Cookie信息，就可以解决这个问题了。<br/><br/><br/>      #region 同步通过POST方式发送数据<br/>        /// &lt;summary&gt;<br/>        /// 通过POST方式发送数据<br/>        /// &lt;/summary&gt;<br/>        /// &lt;param name="Url"&gt;url&lt;/param&gt;<br/>        /// &lt;param name="postDataStr"&gt;Post数据&lt;/param&gt;<br/>        /// &lt;param name="cookie"&gt;Cookie容器&lt;/param&gt;<br/>        /// &lt;returns&gt;&lt;/returns&gt;<br/>        public string SendDataByPost(string Url,string postDataStr,ref CookieContainer cookie)<br/>        {<br/>            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);<br/>            if (cookie.Count == 0)<br/>            {<br/>                request.CookieContainer = new CookieContainer();<br/>                cookie = request.CookieContainer;<br/>            }<br/>            else<br/>            {<br/>                request.CookieContainer = cookie;<br/>            }<br/><br/>            request.Method = "POST";<br/>            request.ContentType = "application/x-www-form-urlencoded";<br/>            request.ContentLength = postDataStr.Length;<br/>            Stream myRequestStream = request.GetRequestStream();<br/>            StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));<br/>            myStreamWriter.Write(postDataStr);<br/>            myStreamWriter.Close();<br/><br/>            HttpWebResponse response = (HttpWebResponse)request.GetResponse();<br/>            Stream myResponseStream = response.GetResponseStream();<br/>            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));<br/>            string retString= myStreamReader.ReadToEnd();<br/>            myStreamReader.Close();<br/>            myResponseStream.Close();<br/><br/>            return retString;<br/>        }<br/>        #endregion<br/><br/>        #region 同步通过GET方式发送数据<br/>        /// &lt;summary&gt;<br/>        /// 通过GET方式发送数据<br/>        /// &lt;/summary&gt;<br/>        /// &lt;param name="Url"&gt;url&lt;/param&gt;<br/>        /// &lt;param name="postDataStr"&gt;GET数据&lt;/param&gt;<br/>        /// &lt;param name="cookie"&gt;GET容器&lt;/param&gt;<br/>        /// &lt;returns&gt;&lt;/returns&gt;<br/>        public string SendDataByGET(string Url, string postDataStr, ref CookieContainer cookie)<br/>        {<br/>            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url +( postDataStr == "" ? "" : "?") + postDataStr);<br/>            if (cookie.Count == 0)<br/>            {<br/>                request.CookieContainer = new CookieContainer();<br/>                cookie = request.CookieContainer;<br/>            }<br/>            else<br/>            {<br/>                request.CookieContainer = cookie;<br/>            }<br/><br/>            request.Method = "GET";<br/>            request.ContentType = "text/html;charset=UTF-8";<br/><br/>            HttpWebResponse response = (HttpWebResponse)request.GetResponse();<br/>            Stream myResponseStream = response.GetResponseStream();<br/>            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));<br/>            string retString = myStreamReader.ReadToEnd();<br/>            myStreamReader.Close();<br/>            myResponseStream.Close();<br/><br/>            return retString;<br/>        }<br/>        #endregion]]></description>
		</item>
		
</channel>
</rss>