﻿<?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/zzfmars/</link><description>  

</description><language>zh-cn</language><lastBuildDate>Thu, 09 Apr 2026 05:38:00 GMT</lastBuildDate><pubDate>Thu, 09 Apr 2026 05:38:00 GMT</pubDate><ttl>60</ttl><item><title>水</title><link>http://www.cppblog.com/zzfmars/archive/2011/06/21/149135.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Tue, 21 Jun 2011 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/06/21/149135.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/149135.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/06/21/149135.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/149135.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/149135.html</trackback:ping><description><![CDATA[<h1 align="center"><span style="font-family: Arial; font-size: 36pt"><br /><br /><br />水<br /><br /></span></h1><img src ="http://www.cppblog.com/zzfmars/aggbug/149135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-06-21 17:58 <a href="http://www.cppblog.com/zzfmars/archive/2011/06/21/149135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>里程碑</title><link>http://www.cppblog.com/zzfmars/archive/2011/06/12/148558.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sun, 12 Jun 2011 15:03:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/06/12/148558.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/148558.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/06/12/148558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/148558.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/148558.html</trackback:ping><description><![CDATA[<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好了伤疤，忘了痛？<br /><br />****************************************************<br />****************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; ****&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ****<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; **<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; *****<br /><br /><br /><br />*****************************************************<br />*****************************************************</div><img src ="http://www.cppblog.com/zzfmars/aggbug/148558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-06-12 23:03 <a href="http://www.cppblog.com/zzfmars/archive/2011/06/12/148558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用户研究：10种类型的IT人士性格分析</title><link>http://www.cppblog.com/zzfmars/archive/2011/06/10/148439.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 10 Jun 2011 08:45:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/06/10/148439.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/148439.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/06/10/148439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/148439.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/148439.html</trackback:ping><description><![CDATA[<div class="TopPage">
<div class="toptitle"><span class="topinfo">摘要：</span>你是理性超过感性的左脑型思想者吗？上网的时候你潜水超过参与吗？信息成瘾、摇摆不定、优柔寡断、感觉迟钝......你知道这种人的十宗罪吗？不过这些罪不一定就会遭致罚，也能得到祝福，世界需要他们。</div></div>
<div class="contents_main">
<div id="ArticleCnt" class="content_words">
<p>　　在IT领域，左脑型的思想者具有优势。不过，根据Alan Norton的观察，他们并非完美无缺。你是理性超过感性的左脑型思想者吗?上网的时候你潜水超过参与吗?信息成瘾、摇摆不定、优柔寡断、感觉迟钝......你知道这种人的十宗罪吗?不过这些罪不一定就会遭致罚，也能得到祝福，世界需要他们。 </p>
<p>　　普通人也许会把IT视为极客之家。而我则更喜欢把IT看做分析型思想家的王国。分析型思想者，或者叫做左脑思想者，是直线型的思想者。逻辑而非感情统治着分析者的领地。不擅与人打交道的特殊特质使得分析型的人电脑玩得很溜。也许这正是为什么IT充斥着那些不擅社交的、更愿意自己出去闲逛也不参加聚会的人的原因。</p>
<p>　　我本人就是一个高度分析型的人士。这一点对我这些年的分析师/程序员工作很有帮助。但是我也体验过许多分析型人士的不好的地方。也许你自己也曾经历过一两个这样的分析型思想者之咒。</p>
<p><strong>　　1: 信息成瘾</strong></p>
<p>　　对于分析型思想者来说，信息再多也不够。他们吞噬着网页上有关万物的一切信息，从天气到最新的高科技玩意，不一而足。他们酷爱在线讨论，但更多时候他们是潜水者而非参与者。 他们对任何类型的数据和事实的胃口都是欲壑难填。在购买任何技术复杂性超过闹钟的东西的时候，他们会直奔特定的网页。诱人的互联网向他们大声疾呼：快到我们的自助餐厅来啊，一切你能吃的信息这里都有，超低价!</p>
<p>　　我能理解这一行为会给一位家庭成员造成怎样真正的困扰。请理解，人类追求信息是天性使然 &#8212; 只是不像分析型思想者那般强制性罢了。你来想想看，沉溺信息的癖好也许能解释一个现象，就是这些年来我遇到了几位IT人士都是脑袋膨胀的。</p>
<p><strong>　　2: 摇摆不定</strong></p>
<p>　　大多数人对于一个有争议的问题往往只看到其中的一面。但是分析型的思想者不是这样。对于他来说，任何事情都有好和不好的一面，装了一半水的杯子既可以看作是半满的，也可以视为是半空的。不可避免地，分析型人士最终都会被一些人视为是末日博士，然后被另一些人看成是乐天派。既是悲观主义者又是乐天派的分析型人士会给朋友(如果他有的话)留下这样的印象，那就是摇摆不定。</p>
<p><strong>　　3: 优柔寡断</strong></p>
<p>　　由于分析型人士喜欢在做出一项知情决定前收集尽可能多的事实，也许会给别人留下优柔寡断的感觉。俚语做点什么，别占着茅坑不拉屎可以用到分析型经理的身上，他们总是忙于收集信息，以至于常常会忽视了迅速、明确的决策的价值。</p>
<p><strong>　　4: 感觉迟钝</strong></p>
<p>　　曾经有一次，我向我们的大型机团队成员马克(Mark)解释一个客户/服务器系统的一部分。我指着屏幕然后说类似正如你这里所见......这样的话，这个手势和这句话只有一个问题：马克根本就是瞎的。我当即尴尬万分，惊呆了，一句话都说不出来。要是马克能看东西的话，他一定会看到一张涨得通红的脸，然后额头上正开始飙汗。这类出言不逊的行为对于分析型人士来说并非罕见。我现在已经意识到自己应该有礼貌地承认自己的失礼，然后表达歉意，但是当时却说不出这样的话来。现在事情已经过去了15年多了，但是马克依然很愉快地接受了我为自己的不敏感的致歉。</p>
<p><strong>　　5: 因循守旧</strong></p>
<p>　　你想让我干什么?不吃午饭?开玩笑吧? 不吃饭也完成我项目经理的某些愚蠢的宠物项目令人沮丧。我的血压上去了。我的压力激素升高了。是的，我生气了。当他营养得不到保障的时候最好不要出现在一位低血糖的逻辑学家面前!</p>
<p>　　让分析型人士打破自己的习惯很难的。他们喜欢按部就班、拒绝作出改变。当一个项目启动的时候，左脑型的思想者也许缺乏动机，不过一旦项目开始，他们就会像一头永不停歇的斗牛犬，项目不已，工作不止。这并不是说他们不能接受改变;分析型人士只是不希望别人打扰自己的舒适区。</p>
<p><strong>　　6: 不擅社交</strong></p>
<p>　　我曾经跟一位是自己朋友的年轻女士说她超重了。当然，她的确问了我这个问题。我一直都找不到机会跟她说，她的体重刚刚好。 分析性人士很认真&#8212;&#8212;太认真了。苛刻并非分析型人士的本意，他们只是想提供一个诚实的评价，尽管这几乎总是会被视为是批评。不幸的是，对于意图好的分析型人士来说，大家并不喜欢对自己的相貌、行为、卫生或脂肪指数等做出诚实的评价。具有讽刺意味的是，这些无意识的、尽管也是诚实的评判人自己往往接受不了批评。</p>
<p><strong>　　7: 生性多疑</strong></p>
<p>　　你可以欺骗某些人一世，也可以欺骗所有人于一时，但是你无法欺骗所有人于一世，亚伯拉罕&#183;林肯(Abraham Lincoln)应该说过这句话。在所有人当中，政客最清楚想要愚弄逻辑型的思想者是很困难的。如果你想跟左脑型的思想者说点什么，最好解释清楚为什么他们需要它。分析型人士需要事实，不是感受或诱导性的陈腔滥调。</p>
<p>　　如果你是试图说服一组程序员的项目经理，想要告诉他们项目可以提前2个月完成，你最好用事实武装自己，以便为如何实现这样的奇迹提供支持。要是项目延误了，几乎可以肯定的是，你将会收到分析型人士冷嘲热讽的反应。</p>
<p><strong>　　8: 不懂营销</strong></p>
<p>　　有一样东西令分析型人士成为很好的产品评测者，不过成也萧何败萧何，也正是这个东西使得他们不擅营销。他们能够透彻地一针见血地洞察到所评测产品的优缺点。得到一份工作的一项重要技能就是自我推销。在其他人对自己的有点夸大其词的时候，分析型人士却不能够。指出自己喜欢更跟电脑而非人打交道也许是诚实公正的自我解剖，但是却会被面试者视为污点记录。我知道，在自我推销方面自己很弱。我曾努力改善自己的营销技巧。不过如果我能侥幸成功的话，下次面试的时候我会聘请一位营销专家!</p>
<p><strong>　　9: 政治错误</strong></p>
<p>　　当我写作的候，我试图探讨以下这种非常真实的可能性，也许有女性人士正在阅读我的沉思录。认识到这一点之后，我试着写下至少一个的他或她。事实是，我把可读性排在了政治正确的前面。不管对错，我相信，把男女两性都罗列进来，对于耐心的读者来说一定是冗长乏味的。因此女士们，请原谅我的政治不正确吧。有您这样的客人我是真的感到非常的荣幸。</p>
<p><strong>　　10: 离群索居</strong></p>
<p>　　我们分析型人士宁肯独自跟好书或好电影共度时光也不愿意跟人呆在一起。从本质上来说，这并不代表我们不喜欢人。我们只是觉得他们无聊、对他们没感觉、认为他们庸俗而已。对于无所不察无所不知的分析型人士来说，普罗大众就像是《皇帝的新衣》里面的那位皇帝&#8212;&#8212;他们身上什么都没有。我的意思是，说真的，上一次有人愿意与你讨论相对论或边际效益递减规律是什么时候呢?</p>
<p><strong>　　归根结底</strong></p>
<p>　　当然，分析型人士看起来可能冷酷无情、感觉迟钝、条理分明，跟史波克先生(Mr.Spock)的性格有点类似，但是这个世界需要这些特质。毕竟，为了避免一场虚构的灾难，我们还需要一位分析型的旅鼠去告诉它其他的朋友：嘿!伙计，我可不认为悬崖跳水这个主意很妙。</p>
<p>　　塞翁失马焉知非福，每一宗罪也能化为祝福。因为分析型人士喜欢表格形式的信息，针对上述的十个诅咒，我来给你十条祝福：</p>
<p style="text-align: center">　<img alt="" src="http://pic001.cnblogs.com/images/2011/145819/2011052522433933.jpg" /></p>
<p>　　每一个诅咒也可被视为一个祝福。</p>
<p>　　下次当你想朝自己钟爱的分析型人士大喊大叫的时候，请你放他一马吧。那些你认为讨厌的特征对社会来说的确存在积极意义。</p>
<p>　　作者注：尽管这些特质可能部分或全部适用于我或其他分析型人士，但是我们可都是复杂的生物体。将这些过于简单化的视角加诸于所有分析型人士的身上并非我本意。</p></div></div><img src ="http://www.cppblog.com/zzfmars/aggbug/148439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-06-10 16:45 <a href="http://www.cppblog.com/zzfmars/archive/2011/06/10/148439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ICMP报文解析</title><link>http://www.cppblog.com/zzfmars/archive/2011/06/10/148384.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Thu, 09 Jun 2011 16:14:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/06/10/148384.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/148384.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/06/10/148384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/148384.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/148384.html</trackback:ping><description><![CDATA[<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>ICMP概述</span> 
<ul><li>
<p><font face="Verdana">　　ICMP协议是一种面向连接的协议，用于传输出错报告控制信息。它是一个非常重要的协议，它对于网络安全具有极其重要的意义。</font></p>
<p><font face="Verdana">　　它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时，会自动发送ICMP消息ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备，因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型，并确定如何才能更好地重发失败的数据报。但是ICMP唯一的功能是报告问题而不是纠正错误，纠正错误的任务由发送方完成。</font></p>
<p><font face="Verdana">　　每个ICMP消息都是直接封装在一个IP数据报中的，因此，和UDP一样，ICMP是不可靠的。虽然ICMP是包含在IP数据报中的，但是对ICMP消息通常会特殊处理，会和一般IP数据报的处理不同，而不是作为IP的一个子协议来处理。在很多时候，需要去查看ICMP消息的内容，然后发送适当的错误消息到那个原来产生IP数据包的程序，即那个导致ICMP讯息被传送的IP数据包。</font></p>
<p><font face="Verdana">　　我们在网络中经常会使用到ICMP协议，比如我们经常使用的用于检查网络通不通的Ping命令（Linux和Windows中均有），这个&#8220;Ping&#8221;的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。</font></p></li></ul>
<div class="term">
<h2><a id="dzt23591" name="dzt23591"></a><!--<a href="#">[编辑本段]</a>--><span>ICMP的重要性</span></h2>
<ul><li>
<p><font face="Verdana">　　ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。例如，在1999年8月海信集团&#8220;悬赏&#8221;50万元人民币测试防火墙的过程中，其防火墙遭受到的ICMP攻击达334050次之多，占整个攻击总数的90%以上！可见，ICMP的重要性绝不可以忽视！</font></p>
<p><font face="Verdana">　　比如，可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定，向主机发起&#8220;Ping of Death&#8221;（死亡之Ping）攻击。&#8220;Ping of Death&#8221; 攻击的原理是：如果ICMP数据包的尺寸超过64KB上限时，主机就会出现内存分配错误，导致TCP/IP堆栈崩溃，致使主机死机。</font></p>
<p><font face="Verdana">　　此外，向目标主机长时间、连续、大量地发送ICMP数据包，也会最终使系统瘫痪。大量的ICMP数据包会形成&#8220;ICMP风暴&#8221;，使得目标主机耗费大量的CPU资源处理，疲于奔命。</font></p></li></ul></div>
<div class="term">
<h2><a id="dzt23594" name="dzt23594"></a><!--<a href="#">[编辑本段]</a>--><span>ICMP功能</span></h2>
<ul><li>
<p><font face="Verdana">　　从技术角度来说，ICMP就是一个&#8220;错误侦测与回报机制&#8221;，其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性﹐其功能主要有：</font></p>
<p><font face="Verdana">　　&#183; 侦测远端主机是否存在。</font></p>
<p><font face="Verdana">　　&#183; 建立及维护路由资料。</font></p>
<p><font face="Verdana">　　&#183; 重导资料传送路径。</font></p>
<p><font face="Verdana">　　&#183;资料流量控制</font></p></li></ul></div>ICMP结构</span> 
<ul><li>
<p align="center"><font face="Verdana"><img border="0" alt="ICMP协议结构" src="http://www.dzsc.com/news/uploadfile/201141816549703.jpg" /></font></p>
<p><font face="Verdana">　　Type &#8213; 错误消息或信息消息。错误消息可能是不可获得目标文件，数据包太大，超时，参数问题等。可能的信息消息有：Echo Request、Echo Reply、Group Membership Query、Group Membership Report、Group Membership Reduction。</font></p>
<p><font face="Verdana">　　Code &#8213; 每种消息类型具有多种不同代码。不可获得目标文件正式这样一个例子，即其中可能的消息是：目标文件没有路由，禁止与目标文件的通信，非邻居，不可获得地址，不可获得端口。具体细节请参照相关标准。</font></p>
<p><font face="Verdana">　　Checksum &#8213; 计算校验和时，Checksum 字段设置为0。</font></p>
<p><font face="Verdana">　　Identifier &#8213; 帮助匹配 Requests/Replies 的标识符，值可能为0。</font></p>
<p><font face="Verdana">　　Sequence Number &#8213; 帮助匹配 Requests/Replies 的序列号，值可能为0。</font></p>
<p><font face="Verdana">　　Address Mask &#8213; 32位掩码地址。</font></p></li><li>
<p>问题一：Identifier字段的目的你已经说过了，其实就是根据这个区分不同的PING进程。<br /><br />问题二：对于unix以及类unix操作系统来说，icmp Identifier的内容就是ping的进程号，对于windows系统来说，具体参考如下：<br /><br />Microsoft Windows NT - 256 <br />Microsoft Windows 98/98SE - 512 <br />Microsoft Windows 2000 - 512 <br />Microsoft Windows ME - 768 <br />Microsoft Windows 2000 Family with SP1 - 768<br /><br />这里有个比较有意思的问题，既然windows系统的icmp Identifier是固定不变的，那么系统如何区别不同的Ping进程呢？实际上windows系统就不在根据Identifier来区别ping进程了，它是根据Sequence Number field来区分的。<br /></p></li></ul><img src ="http://www.cppblog.com/zzfmars/aggbug/148384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-06-10 00:14 <a href="http://www.cppblog.com/zzfmars/archive/2011/06/10/148384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>专注</title><link>http://www.cppblog.com/zzfmars/archive/2011/06/05/148120.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sun, 05 Jun 2011 12:17:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/06/05/148120.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/148120.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/06/05/148120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/148120.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/148120.html</trackback:ping><description><![CDATA[<div>唯有专注，才能实现梦想。<br /></div><img src ="http://www.cppblog.com/zzfmars/aggbug/148120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-06-05 20:17 <a href="http://www.cppblog.com/zzfmars/archive/2011/06/05/148120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>是什么让我们不断透支生命？</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/29/147544.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 28 May 2011 18:22:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/29/147544.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/147544.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/29/147544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/147544.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/147544.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">行走在中欧大大小小的城市、乡村，最让人感动的是这里的悠闲。这种悠闲对于中国游客来说，首先表现为不便。游玩一天，有的时候想买点东西，竟然无处可去。在我们所经过的几乎每个城市，到傍晚六七点，所有商店都关门了。周日，商店同样关门。 </p>
<p style="text-indent: 2em">与此形成鲜明对比，在所有这些城市，到处都是咖啡馆。这里的咖啡馆，不像中国某些小资所想象或期望的那样充满情调。其实都很普通，类似于中国的小饭馆。只是随着城市改造，中国的小饭馆逐渐消失。咖啡馆则在高楼大厦中生长出来，还有一些集中的所谓咖啡馆街，比如说北京三里屯、后海。但它们从一开始，就弥漫着暧昧的气息。欧洲，咖啡馆却仍然像中国原来的小饭馆。同样是把桌子摆在门外，客人们则悠然地在这里消磨时间，也不怕&#8220;城管&#8221;来掀台。 </p>
<p style="text-indent: 2em">当然，除了看到人们不在街上，我们并不知道欧洲人在星期天、在下班之后在做什么，但总体上，还是能够感受到欧洲人的悠闲。这让我们这群匆匆忙忙的中国游客感受很深。当代中国人的生活，几乎每个人，都可用一个字来概括：忙。甚至连乞丐、流浪汉，都忙着闯红灯去办事。 </p>
<p style="text-indent: 2em">因为忙不过来，所以，国人拼命地延长工作时间。在中国，小店铺的业主自不用说，他们通常每天开业十六小时以上；南方各种制造工厂的外来劳工的工作时间之长，也是出了名的；看起来光鲜的白领们，也几乎普遍地被强制、半强制加班，以至于加班变成了一种生活方式，如果不加班，白领们反而不知道该干什么了。当然，新闻媒体也告诉我们，老板们是多么地辛苦，而领导们又是如何地日以继夜地操劳。 </p>
<p style="text-indent: 2em">总之，大约除了乡村的留守人员之外，生活在城市中的各个社会群体都十分忙碌。当然，人们的这种忙碌，只有一个目的，司马迁早就说得清清楚楚：天下熙熙，皆为利来；天下攘攘，皆为利往。大家都想挣钱。说到钱，恐怕不能不说，忙碌的挣钱生活，已经在一定程度上改变了中国人的心智结构。根据我的观察，欧洲人的算账技能似乎不如中国人。在中国，哪怕没有受过什么高深教育的小商贩，也有很高的心算技艺。在欧洲，收银员们进行心算似乎有点费劲。 </p>
<p style="text-indent: 2em">简单地说，短暂的旅行过程中的肤浅观察让我觉得，中国人对于钱比欧洲人更为热衷，也愿意拿出生命中的大部分时间用于挣钱。整个生命的节奏被挣钱的欲望驱动，而比欧洲人快得多，生活也就显得忙忙碌碌。前些年老有人说，现代化意味着生活节奏加快，但至少在欧洲，并非如此。在这个高度成熟的现代化世界，人们的生活节奏显然慢于中国。 </p>
<p style="text-indent: 2em">有人会说，中国人还很穷，所以必须拼命工作，才能改善境遇。但是，相信国内很多白领的收入，未必低于中欧相应群体。很多人也一向盲目地相信，上世纪九十年代以来中国的境遇大大地好于中欧。很显然，这种认知并没有让中国人把生命的脚步放慢一点。 </p>
<p style="text-indent: 2em">所以，忙碌与绝对收入、相对收入水平无关，而是由其他因素决定的。可能是文化，比如，由于缺乏宗教精神，中国人普遍具有根深蒂固的物质主义倾向，在仅有的一些宗教传统被销蚀之后的当代尤甚。也可能是制度。如果社会的各种制度安排让人觉得未来不可预期，那合理的对策就是尽可能抓紧当下的时间，拼命赚钱，好让自己在那难以预料的未来有一块立脚之地。 </p>
<p style="text-indent: 2em">从这个角度看，中国人的忙碌其实是一种强迫症，是透支生命的无奈。由于未来的不可预期性，单位时间的生命价值被低估，人们只能通过 &#8220;拼命&#8221;来提高生命的价值生产力，而文化则让中国人选择了通过身外之物来彰显生命的价值。心为物蔽，对生命内在价值的体会、追索，反而成为不可能</p><img src ="http://www.cppblog.com/zzfmars/aggbug/147544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-29 02:22 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/29/147544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>getline（） 函数</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/27/147447.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 27 May 2011 15:50:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/27/147447.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/147447.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/27/147447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/147447.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/147447.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;test3.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;for&nbsp;the&nbsp;console&nbsp;application.<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">string</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdio.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br /><img id="Codehighlighter1_206_391_Open_Image" onclick="this.style.display='none'; Codehighlighter1_206_391_Open_Text.style.display='none'; Codehighlighter1_206_391_Closed_Image.style.display='inline'; Codehighlighter1_206_391_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_206_391_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_206_391_Closed_Text.style.display='none'; Codehighlighter1_206_391_Open_Image.style.display='inline'; Codehighlighter1_206_391_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_206_391_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_206_391_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;str1,str2,str3;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;getline(cin,str1);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;getline(cin,str2);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;str3</span><span style="color: #000000">=</span><span style="color: #000000">str1</span><span style="color: #000000">+</span><span style="color: #000000">str2;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">str1</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">str2</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">str3</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">str1[</span><span style="color: #000000">0</span><span style="color: #000000">]</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">str2[</span><span style="color: #000000">0</span><span style="color: #000000">]</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div><img src ="http://www.cppblog.com/zzfmars/aggbug/147447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-27 23:50 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/27/147447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态创建整形数组</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/27/147415.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 27 May 2011 13:52:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/27/147415.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/147415.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/27/147415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/147415.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/147415.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;test3.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;for&nbsp;the&nbsp;console&nbsp;application.<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br /><img id="Codehighlighter1_167_386_Open_Image" onclick="this.style.display='none'; Codehighlighter1_167_386_Open_Text.style.display='none'; Codehighlighter1_167_386_Closed_Image.style.display='inline'; Codehighlighter1_167_386_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_167_386_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_167_386_Closed_Text.style.display='none'; Codehighlighter1_167_386_Open_Image.style.display='inline'; Codehighlighter1_167_386_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_167_386_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_167_386_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;length,i,</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;ptr1;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">请输入数组的长度：</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">length;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ptr1</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[length];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">length;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">(ptr1</span><span style="color: #000000">+</span><span style="color: #000000">i)</span><span style="color: #000000">=</span><span style="color: #000000">i</span><span style="color: #000000">*</span><span style="color: #000000">10</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">length;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">ptr1[i]</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;delete[]&nbsp;ptr1;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div><img src ="http://www.cppblog.com/zzfmars/aggbug/147415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-27 21:52 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/27/147415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针操作二维数组</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/27/147412.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 27 May 2011 13:44:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/27/147412.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/147412.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/27/147412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/147412.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/147412.html</trackback:ping><description><![CDATA[题目描述：<br />&nbsp;&nbsp;&nbsp; 从键盘输入一个3X3的整数矩阵，输出该矩阵并求出主对角线元素的和。<br /><br />源代码：
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;test3.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;for&nbsp;the&nbsp;console&nbsp;application.<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">//<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br /><img id="Codehighlighter1_167_506_Open_Image" onclick="this.style.display='none'; Codehighlighter1_167_506_Open_Text.style.display='none'; Codehighlighter1_167_506_Closed_Image.style.display='inline'; Codehighlighter1_167_506_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_167_506_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_167_506_Closed_Text.style.display='none'; Codehighlighter1_167_506_Open_Image.style.display='inline'; Codehighlighter1_167_506_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_167_506_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_167_506_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a[</span><span style="color: #000000">3</span><span style="color: #000000">][</span><span style="color: #000000">3</span><span style="color: #000000">],i,j,s</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;ptr)[</span><span style="color: #000000">3</span><span style="color: #000000">];<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ptr</span><span style="color: #000000">=</span><span style="color: #000000">a;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">请输入矩阵的值：</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">3</span><span style="color: #000000">;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(j</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;j</span><span style="color: #000000">&lt;</span><span style="color: #000000">3</span><span style="color: #000000">;j</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img id="Codehighlighter1_280_348_Open_Image" onclick="this.style.display='none'; Codehighlighter1_280_348_Open_Text.style.display='none'; Codehighlighter1_280_348_Closed_Image.style.display='inline'; Codehighlighter1_280_348_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_280_348_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_280_348_Closed_Text.style.display='none'; Codehighlighter1_280_348_Open_Image.style.display='inline'; Codehighlighter1_280_348_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_280_348_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_280_348_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000">&gt;&gt;*</span><span style="color: #000000">(</span><span style="color: #000000">*</span><span style="color: #000000">(ptr</span><span style="color: #000000">+</span><span style="color: #000000">i)</span><span style="color: #000000">+</span><span style="color: #000000">j);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(i</span><span style="color: #000000">==</span><span style="color: #000000">j)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s</span><span style="color: #000000">+=*</span><span style="color: #000000">(</span><span style="color: #000000">*</span><span style="color: #000000">(ptr</span><span style="color: #000000">+</span><span style="color: #000000">i)</span><span style="color: #000000">+</span><span style="color: #000000">j);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">输出矩阵：\n</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">3</span><span style="color: #000000">;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img id="Codehighlighter1_391_460_Open_Image" onclick="this.style.display='none'; Codehighlighter1_391_460_Open_Text.style.display='none'; Codehighlighter1_391_460_Closed_Image.style.display='inline'; Codehighlighter1_391_460_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_391_460_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_391_460_Closed_Text.style.display='none'; Codehighlighter1_391_460_Open_Image.style.display='inline'; Codehighlighter1_391_460_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_391_460_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_391_460_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(j</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;j</span><span style="color: #000000">&lt;</span><span style="color: #000000">3</span><span style="color: #000000">;j</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">ptr[i][j]</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">矩阵主对角线元素的和为：</span><span style="color: #000000">"</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">s</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/zzfmars/369.jpg" width="667" longdesc="" height="437" /><br /><img src ="http://www.cppblog.com/zzfmars/aggbug/147412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-27 21:44 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/27/147412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针操作一维数组</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/27/147407.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 27 May 2011 13:30:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/27/147407.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/147407.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/27/147407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/147407.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/147407.html</trackback:ping><description><![CDATA[用指针操作数组。要求先输出数组，然后将数组倒置，再输出倒置的数组。<br />源代码： 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;test3.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;for&nbsp;the&nbsp;console&nbsp;application.<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #008000">//<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" />#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">iostream</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br /><img id="Codehighlighter1_167_476_Open_Image" onclick="this.style.display='none'; Codehighlighter1_167_476_Open_Text.style.display='none'; Codehighlighter1_167_476_Closed_Image.style.display='inline'; Codehighlighter1_167_476_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_167_476_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_167_476_Closed_Text.style.display='none'; Codehighlighter1_167_476_Open_Image.style.display='inline'; Codehighlighter1_167_476_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_167_476_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_167_476_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">ptr1,</span><span style="color: #000000">*</span><span style="color: #000000">ptr2,t;<br /><img id="Codehighlighter1_204_225_Open_Image" onclick="this.style.display='none'; Codehighlighter1_204_225_Open_Text.style.display='none'; Codehighlighter1_204_225_Closed_Image.style.display='inline'; Codehighlighter1_204_225_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_204_225_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_204_225_Closed_Text.style.display='none'; Codehighlighter1_204_225_Open_Image.style.display='inline'; Codehighlighter1_204_225_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a[]</span><span style="color: #000000">=</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_204_225_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_204_225_Open_Text"><span style="color: #000000">{</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">2</span><span style="color: #000000">,</span><span style="color: #000000">3</span><span style="color: #000000">,</span><span style="color: #000000">4</span><span style="color: #000000">,</span><span style="color: #000000">5</span><span style="color: #000000">,</span><span style="color: #000000">6</span><span style="color: #000000">,</span><span style="color: #000000">7</span><span style="color: #000000">,</span><span style="color: #000000">8</span><span style="color: #000000">,</span><span style="color: #000000">9</span><span style="color: #000000">,</span><span style="color: #000000">10</span><span style="color: #000000">}</span></span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;ptr1</span><span style="color: #000000">=</span><span style="color: #000000">a;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;ptr2</span><span style="color: #000000">=&amp;</span><span style="color: #000000">a[</span><span style="color: #000000">9</span><span style="color: #000000">];<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">10</span><span style="color: #000000">;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;*</span><span style="color: #000000">(ptr1</span><span style="color: #000000">+</span><span style="color: #000000">i)</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(ptr2</span><span style="color: #000000">&gt;</span><span style="color: #000000">ptr1)<br /><img id="Codehighlighter1_329_389_Open_Image" onclick="this.style.display='none'; Codehighlighter1_329_389_Open_Text.style.display='none'; Codehighlighter1_329_389_Closed_Image.style.display='inline'; Codehighlighter1_329_389_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_329_389_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_329_389_Closed_Text.style.display='none'; Codehighlighter1_329_389_Open_Image.style.display='inline'; Codehighlighter1_329_389_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_329_389_Closed_Text"><img alt="" src="http://www.cppblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_329_389_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000">=*</span><span style="color: #000000">ptr1;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">ptr1</span><span style="color: #000000">=*</span><span style="color: #000000">ptr2;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">ptr2</span><span style="color: #000000">=</span><span style="color: #000000">t;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr1</span><span style="color: #000000">++</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr2</span><span style="color: #000000">--</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;ptr1</span><span style="color: #000000">=&amp;</span><span style="color: #000000">a[</span><span style="color: #000000">0</span><span style="color: #000000">];<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;j</span><span style="color: #000000">&lt;</span><span style="color: #000000">10</span><span style="color: #000000">;j</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">ptr1[j]</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif" /></span></div><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/zzfmars/369.jpg" width="667" longdesc="" height="437" /><br /><img src ="http://www.cppblog.com/zzfmars/aggbug/147407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-27 21:30 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/27/147407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>知耻近乎勇</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/21/146878.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 21 May 2011 12:01:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/21/146878.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146878.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/21/146878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146878.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146878.html</trackback:ping><description><![CDATA[<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="line-height: 19px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; color: rgb(28,28,28); font-size: 12px" class="Apple-style-span"> 
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px">近几天，我和学生在网上有了比较深层次的交流，大部分的同学都告诉我，他们在学习上有些障碍&#8211;学习的成果不彰，同学们很清楚，是自己的动力和毅力不足有关！今晨，我在公园跑步的时候，脑子里反复思考这个问题，同时，也将自己的思路拉到30年前。自己在17,8岁的时候，也是个学习很差的小子，不爱读书，每天浪费自己的时间。到了20岁进了部队，22岁退伍，继续工作，每天没有生活目的活着，一直到了25岁时，才因为一件事情的触发，让我重新拾回课本，然后就是专科夜间部，以及进入世界500强公司，以及获得2个硕士学位，让自己和家庭衣食无虞的成果。</p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px">是什么事情触发了我有这么大的改变呢？是我在工作的时候，感受到自己的&#8220;不入流&#8221;。什么意思呢？就是我在工作的时候感觉到没有被别人尊重！我在医院里头做医技人员，穿着蓝领白袍，跟医生的白领白袍只有些许的差别，但是病人和同事遇见我和医生，态度是南辕北撤的。我感觉自己不被尊重，也深深地思考要怎么样才能被尊重！有位博士医生在闲聊中提醒了我，可以再读书充实自己啊，把自己的社地位再提升起来啊！</p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px">真是一语惊醒梦中人！这道理我不是不懂，只是因为之前不懂事和怠惰蒙蔽了我的心灵。当下我才真正的明白，没有一番苦读和付出，是没有甜蜜的果实可以吃的，也不会得到别人打从心里真正的尊重的！就这样，我进入了前后十年的半工半读兼养家的&#8220;蜡烛五头烧&#8221;奋斗阶段。蜡烛五头烧？就是我身兼五职：儿子、丈夫、父亲、学生、部属。到了后来，甚至变成蜡烛六头烧，因为多了一个身份：主管！</p>
<p style="padding-bottom: 0px; margin: 0px 0px 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px">累吗？累！爽吗？爽！为什么会有这样的学习动力和动力呢？我检视自己，大概就是《礼记 中庸》里头说的：&#8221;知耻近乎勇&#8220;吧？！</p></span></span><img src ="http://www.cppblog.com/zzfmars/aggbug/146878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-21 20:01 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/21/146878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pthread_create用法 </title><link>http://www.cppblog.com/zzfmars/archive/2011/05/21/146877.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 21 May 2011 10:59:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/21/146877.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146877.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/21/146877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146877.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146877.html</trackback:ping><description><![CDATA[<div class="shareUser">转载自 <a style="color: #1463c4" href="http://hi.baidu.com/xiapingwen" target="blank">xiapingwen</a></div>
<div class="shareLastEditor">最终编辑 <a style="color: #1463c4" href="http://hi.baidu.com/xiapingwen" target="blank">xiapingwen</a></div>
<div style="margin-bottom: 5px; border-top: #bddaf2 1px solid"></div>
<div id="blog_text" class="cnt">linux下用C开发多线程程序，Linux系统下的多线程遵循POSIX线程接口，称为pthread。<br />
<p>
<table class="allBorders" border="1" rules="none" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td class="docTableCell" valign="top" align="left"><pre>#include &lt;pthread.h&gt;<br /><br />int pthread_create(pthread_t *restrict <span class="docEmphItalicAlt">tidp</span>,<br />                   const pthread_attr_t *restrict <span class="docEmphItalicAlt">attr</span>,<br />                   void *(*<span class="docEmphItalicAlt">start_rtn</span>)(void), <br />                   void *restrict <span class="docEmphItalicAlt">arg</span>);</pre></td></tr>
<tr>
<td class="docTableCell" valign="top" align="right">
<p class="docText">Returns: 0 if OK, error number on failure</p></td></tr></tbody></table></p>
<p>C99 中新增加了 restrict 修饰的指针： 由 restrict 修饰的指针是最初唯一对指针所指向的对象进行存取的方法，仅当第二个指针基于第一个时，才能对对象进行存取。对对象的存取都限定于基于由 restrict 修饰的指针表达式中。 由 restrict 修饰的指针主要用于函数形参，或指向由 malloc() 分配的内存空间。restrict 数据类型不改变程序的语义。 编译器能通过作出 restrict 修饰的指针是存取对象的唯一方法的假设，更好地优化某些类型的例程。</p>
<p>第一个参数为指向线程标识符的指针。<br />第二个参数用来设置线程属性。<br />第三个参数是线程运行函数的起始地址。<br />最后一个参数是运行函数的参数。<br /><br />下面这个程序中，我们的函数<code><span style="color: rgb(0,0,0)"><font face="NSimsun">thr_fn</font></span></code>不需要参数，所以最后一个参数设为空指针。第二个参数我们也设为空指针，这样将生成默认属性的线程。当创建线程成功时，函数返回0，若不为0则说明创建线程失败，常见的错误返回代码为EAGAIN和EINVAL。前者表示系统限制创建新的线程，例如线程数目过多了；后者表示第二个参数代表的线程属性值非法。创建线程成功后，新创建的线程则运行参数三和参数四确定的函数，原来的线程则继续运行下一行代码。 
<table style="border-collapse: collapse" border="1" cellspacing="0" bordercolor="#e99999" cellpadding="0" width="95%" bgcolor="#f1f1f1">
<tbody>
<tr>
<td>
<p style="line-height: 150%; margin: 5px"><code><span style="color: rgb(0,0,0)"><font face="NSimsun"><span style="color: rgb(0,0,204)">#</span><span style="color: rgb(255,0,0)">include</span><span style="color: rgb(0,0,204)">&lt;</span>stdio<span style="color: rgb(0,0,204)">.</span>h<span style="color: rgb(0,0,204)">&gt;</span><br /><span style="color: rgb(0,0,204)">#</span><span style="color: rgb(255,0,0)">include</span><span style="color: rgb(0,0,204)">&lt;</span>pthread<span style="color: rgb(0,0,204)">.</span>h</font><span style="color: rgb(0,0,204)"><font face="NSimsun">&gt;<br /></font></span></span></code><code><span style="color: rgb(0,0,0)"><font face="NSimsun"><span style="color: rgb(0,0,204)">#</span><span style="color: rgb(255,0,0)">include</span><span style="color: rgb(0,0,204)">&lt;</span>string<span style="color: rgb(0,0,204)">.</span>h</font><font face="NSimsun"><span style="color: rgb(0,0,204)">&gt;<br />#</span><span style="color: rgb(255,0,0)">include</span><span style="color: rgb(0,0,204)">&lt;</span>sys/types<span style="color: rgb(0,0,204)">.</span>h</font><font face="NSimsun"><span style="color: rgb(0,0,204)">&gt;<br />#</span><span style="color: rgb(255,0,0)">include</span><span style="color: rgb(0,0,204)">&lt;</span>unistd<span style="color: rgb(0,0,204)">.</span>h<span style="color: rgb(0,0,204)">&gt;</span></font></span></code><br /><code><span style="color: rgb(0,0,0)"><br /><font face="新宋体"><span style="color: rgb(255,0,0)">pthread_t</span> ntid<span style="color: rgb(0,0,204)">;</span><br /><br /><span style="color: rgb(0,0,255)">void</span> printids<span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">const</span> <span style="color: rgb(0,0,255)">char</span> <span style="color: rgb(0,0,204)">*</span>s<span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">{</span><br /><span style="color: rgb(255,0,0)">pid_t</span> pid<span style="color: rgb(0,0,204)">;</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(255,0,0)">pthread_t</span> tid<span style="color: rgb(0,0,204)">;</span><br /><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体">pid <span style="color: rgb(0,0,204)">=</span> getpid<span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体">tid <span style="color: rgb(0,0,204)">=</span> pthread_self<span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(255,0,0)">printf</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(255,0,255)">"%s pid %u tid %u (0x%x)\n"</span><span style="color: rgb(0,0,204)">,</span>s<span style="color: rgb(0,0,204)">,</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">unsigned</span> <span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,204)">)</span>pid<span style="color: rgb(0,0,204)">,</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">unsigned</span> <span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,204)">)</span>tid<span style="color: rgb(0,0,204)">,</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">unsigned</span> </font><span style="color: rgb(0,0,255)"><br /><font face="新宋体">int</font></span><font face="新宋体"><span style="color: rgb(0,0,204)">)</span>tid<span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /><span style="color: rgb(0,0,204)">}</span><br /><br /><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span>thr_fn<span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(255,0,0)">arg</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">{</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体">printids<span style="color: rgb(0,0,204)">(</span><span style="color: rgb(255,0,255)">"new thread:"</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(0,0,255)">return</span> <span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,255)">void</span> <span style="color: rgb(0,0,204)">*</span><span style="color: rgb(0,0,204)">)</span>0<span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /><span style="color: rgb(0,0,204)">}</span><br /><br /><span style="color: rgb(0,0,255)">int</span> main<span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">{</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(0,0,255)">int</span> err<span style="color: rgb(0,0,204)">;</span><br /><br /></font></span></code><font face="新宋体"><code><span style="color: rgb(0,0,0)">err <span style="color: rgb(0,0,204)">=</span> <span style="color: rgb(255,0,0)">pthread_create</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(0,0,204)">&amp;</span>ntid<span style="color: rgb(0,0,204)">,</span><span style="color: rgb(255,0,0)">NULL</span><span style="color: rgb(0,0,204)">,</span>thr_fn<span style="color: rgb(0,0,204)">,</span><span style="color: rgb(255,0,0)">NULL</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /></span></code><code><span style="color: rgb(0,0,0)"><span style="color: rgb(0,0,255)">if</span><span style="color: rgb(0,0,204)">(</span>err <span style="color: rgb(0,0,204)">!</span><span style="color: rgb(0,0,204)">=</span> 0<span style="color: rgb(0,0,204)">)</span></span></code></font><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(0,0,204)">{</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(255,0,0)">printf</span><span style="color: rgb(0,0,204)">(</span><span style="color: rgb(255,0,255)">"can't create thread: %s\n"</span><span style="color: rgb(0,0,204)">,</span>strerror(err<span style="color: rgb(0,0,204)">))</span><span style="color: rgb(0,0,204)">;</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(0,0,255)">return</span> 1<span style="color: rgb(0,0,204)">;</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(0,0,204)">}</span><br /><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体">printids<span style="color: rgb(0,0,204)">(</span><span style="color: rgb(255,0,255)">"main thread:"</span><span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(255,0,0)">sleep</span><span style="color: rgb(0,0,204)">(</span>1<span style="color: rgb(0,0,204)">)</span><span style="color: rgb(0,0,204)">;</span><br /></font></span></code><code><span style="color: rgb(0,0,0)"><font face="新宋体"><span style="color: rgb(0,0,255)">return</span> 0<span style="color: rgb(0,0,204)">;</span><br /><span style="color: rgb(0,0,204)">}</span><br /></font></span></code></p></td></tr></tbody></table>把APUE2上的一个程序修改一下，然后编译。<br />结果报错:<code><span style="color: rgb(0,0,0)"><br /><font face="NSimsun">pthread.c:(.text+0x85)：对&#8216;pthread_create&#8217;未定义的引用</font></span></code><br /><br />由于pthread库不是Linux系统默认的库，连接时需要使用库libpthread.a,所以在使用pthread_create创建线程时，在编译中要加-lpthread参数:<br /><code><span style="color: rgb(0,0,0)"><font face="NSimsun">gcc -o pthread -lpthread pthread.c</font></span></code></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<blockquote>这是一个关于Posix线程编程的专栏。作者在阐明概念的基础上，将向您详细讲述Posix线程库API。本文是第一篇将向您讲述线程的创建与取消。</blockquote>
<p>&nbsp;</p>
<p><a name="1"><span class="atitle2"><font color="#000000">一、线程创建</font></span></a></p>
<p>&nbsp;</p>
<p><span class="atitle3">1．1 线程与进程</span><br />相对进程而言，线程是一个更加接近于执行体的概念，它可以与同进程中的其他线程共享数据，但拥有自己的栈空间，拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度，从而提高程序运行效率和响应时间。</p>
<p>&nbsp;</p>
<p>线程和进程在使用上各有优缺点：线程执行开销小，但不利于资源的管理和保护；而进程正相反。同时，线程适合于在SMP机器上运行，而进程则可以跨机器迁移。</p>
<p>&nbsp;</p>
<p><span class="atitle3">1．2 创建线程</span><br />POSIX通过pthread_create()函数创建线程，API定义如下：</p>
<p><br />
<table border="1" cellspacing="0" cellpadding="5" bgcolor="#cccccc">
<tbody>
<tr>
<td><pre><code>int&nbsp;&nbsp;    pthread_create(pthread_t&nbsp;&nbsp;    *&nbsp;&nbsp;    thread, pthread_attr_t * attr, 
<br />void * (*start_routine)(void *), void * arg)
<br /></code></pre></td></tr></tbody></table>与fork()调用创建一个进程的方法不同，pthread_create()创建的线程并不具备与主线程（即调用pthread_create()的线程）同样的执行序列，而是使其运行start_routine(arg)函数。thread返回创建的线程ID，而attr是创建线程时设置的线程属性（见下）。pthread_create()的返回值表示线程创建是否成功。尽管arg是void *类型的变量，但它同样可以作为任意类型的参数传给start_routine()函数；同时，start_routine()可以返回一个void *类型的返回值，而这个返回值也可以是其他类型，并由pthread_join()获取。</p>
<p><span class="atitle3">1．3 线程创建属性</span><br />pthread_create()中的attr参数是一个结构指针，结构中的元素分别对应着新线程的运行属性，主要包括以下几项：</p>
<p>&nbsp;</p>
<p>__detachstate，表示新线程是否与进程中其他线程脱离同步，如果置位则新线程不能用pthread_join()来同步，且在退出时自行释放所占用的资源。缺省为PTHREAD_CREATE_JOINABLE状态。这个属性也可以在线程创建并运行以后用pthread_detach()来设置，而一旦设置为PTHREAD_CREATE_DETACH状态（不论是创建时设置还是运行时设置）则不能再恢复到 PTHREAD_CREATE_JOINABLE状态。</p>
<p>&nbsp;</p>
<p>__schedpolicy，表示新线程的调度策略，主要包括SCHED_OTHER（正常、非实时）、SCHED_RR（实时、轮转法）和 SCHED_FIFO（实时、先入先出）三种，缺省为SCHED_OTHER，后两种调度策略仅对超级用户有效。运行时可以用过 pthread_setschedparam()来改变。</p>
<p>&nbsp;</p>
<p>__schedparam，一个struct sched_param结构，目前仅有一个sched_priority整型变量表示线程的运行优先级。这个参数仅当调度策略为实时（即SCHED_RR 或SCHED_FIFO）时才有效，并可以在运行时通过pthread_setschedparam()函数来改变，缺省为0。</p>
<p>&nbsp;</p>
<p>__inheritsched，有两种值可供选择：PTHREAD_EXPLICIT_SCHED和PTHREAD_INHERIT_SCHED，前者表示新线程使用显式指定调度策略和调度参数（即attr中的值），而后者表示继承调用者线程的值。缺省为PTHREAD_EXPLICIT_SCHED。</p>
<p>&nbsp;</p>
<p>__scope，表示线程间竞争CPU的范围，也就是说线程优先级的有效范围。POSIX的标准中定义了两个值： PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESS，前者表示与系统中所有线程一起竞争CPU时间，后者表示仅与同进程中的线程竞争CPU。目前LinuxThreads仅实现了PTHREAD_SCOPE_SYSTEM一值。</p>
<p>&nbsp;</p>
<p>pthread_attr_t结构中还有一些值，但不使用pthread_create()来设置。</p>
<p>&nbsp;</p>
<p>为了设置这些属性，POSIX定义了一系列属性设置函数，包括pthread_attr_init()、pthread_attr_destroy()和与各个属性相关的pthread_attr_get---/pthread_attr_set---函数。</p>
<p>&nbsp;</p>
<p><span class="atitle3">1．4 线程创建的Linux实现</span><br />我们知道，Linux的线程实现是在核外进行的，核内提供的是创建进程的接口do_fork()。内核提供了两个系统调用__clone()和fork ()，最终都用不同的参数调用do_fork()核内API。当然，要想实现线程，没有核心对多进程（其实是轻量级进程）共享数据段的支持是不行的，因此，do_fork()提供了很多参数，包括CLONE_VM（共享内存空间）、CLONE_FS（共享文件系统信息）、CLONE_FILES（共享文件描述符表）、CLONE_SIGHAND（共享信号句柄表）和CLONE_PID（共享进程ID，仅对核内进程，即0号进程有效）。当使用fork系统调用时，内核调用do_fork()不使用任何共享属性，进程拥有独立的运行环境，而使用pthread_create()来创建线程时,则最终设置了所有这些属性来调用__clone()，而这些参数又全部传给核内的do_fork()，从而创建的"进程"拥有共享的运行环境，只有栈是独立的，由 __clone()传入。</p>
<p>&nbsp;</p>
<p>Linux线程在核内是以轻量级进程的形式存在的，拥有独立的进程表项，而所有的创建、同步、删除等操作都在核外pthread库中进行。pthread 库使用一个管理线程（__pthread_manager()，每个进程独立且唯一）来管理线程的创建和终止，为线程分配线程ID，发送线程相关的信号（比如Cancel），而主线程（pthread_create()）的调用者则通过管道将请求信息传给管理线程。</p>
<p>&nbsp;</p>
<p><a name="2"><span class="atitle2"><font color="#000000">二、线程取消</font></span></a></p>
<p>&nbsp;</p>
<p><span class="atitle3">2．1 线程取消的定义</span><br />一般情况下，线程在其主体函数退出的时候会自动终止，但同时也可以因为接收到另一个线程发来的终止（取消）请求而强制终止。</p>
<p>&nbsp;</p>
<p><span class="atitle3">2．2 线程取消的语义</span><br />线程取消的方法是向目标线程发Cancel信号，但如何处理Cancel信号则由目标线程自己决定，或者忽略、或者立即终止、或者继续运行至Cancelation-point（取消点），由不同的Cancelation状态决定。</p>
<p>&nbsp;</p>
<p>线程接收到CANCEL信号的缺省处理（即pthread_create()创建线程的缺省状态）是继续运行至取消点，也就是说设置一个CANCELED状态，线程继续运行，只有运行至Cancelation-point的时候才会退出。</p>
<p>&nbsp;</p>
<p><span class="atitle3">2．3 取消点</span><br />根据POSIX标准，pthread_join()、pthread_testcancel()、pthread_cond_wait()、 pthread_cond_timedwait()、sem_wait()、sigwait()等函数以及read()、write()等会引起阻塞的系统调用都是Cancelation-point，而其他pthread函数都不会引起Cancelation动作。但是pthread_cancel的手册页声称，由于LinuxThread库与C库结合得不好，因而目前C库函数都不是Cancelation-point；但CANCEL信号会使线程从阻塞的系统调用中退出，并置EINTR错误码，因此可以在需要作为Cancelation-point的系统调用前后调用 pthread_testcancel()，从而达到POSIX标准所要求的目标，即如下代码段：</p>
<p><br />
<table border="1" cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc">
<tbody>
<tr>
<td><pre><code>pthread_testcancel();
<br />&nbsp;&nbsp;&nbsp;&nbsp;    retcode = read(fd, buffer, length);
<br />&nbsp;&nbsp;&nbsp;&nbsp;    pthread_testcancel();</code></pre></td></tr></tbody></table></p>
<p><span class="atitle3">2．4 程序设计方面的考虑</span><br />如果线程处于无限循环中，且循环体内没有执行至取消点的必然路径，则线程无法由外部其他线程的取消请求而终止。因此在这样的循环体的必经路径上应该加入pthread_testcancel()调用。</p>
<p>&nbsp;</p>
<p><span class="atitle3">2．5 与线程取消相关的pthread函数</span><br />int pthread_cancel(pthread_t thread)<br />发送终止信号给thread线程，如果成功则返回0，否则为非0值。发送成功并不意味着thread会终止。</p>
<p>&nbsp;</p>
<p>int pthread_setcancelstate(int state, int *oldstate)<br />设置本线程对Cancel信号的反应，state有两种值：PTHREAD_CANCEL_ENABLE（缺省）和 PTHREAD_CANCEL_DISABLE，分别表示收到信号后设为CANCLED状态和忽略CANCEL信号继续运行；old_state如果不为 NULL则存入原来的Cancel状态以便恢复。</p>
<p>&nbsp;</p>
<p>int pthread_setcanceltype(int type, int *oldtype)<br />设置本线程取消动作的执行时机，type由两种取值：PTHREAD_CANCEL_DEFFERED和 PTHREAD_CANCEL_ASYCHRONOUS，仅当Cancel状态为Enable时有效，分别表示收到信号后继续运行至下一个取消点再退出和立即执行取消动作（退出）；oldtype如果不为NULL则存入运来的取消动作类型值。</p>
<p>&nbsp;</p>
<p>void pthread_testcancel(void)<br />检查本线程是否处于Canceld状态，如果是，则进行取消动作，否则直接返回。</p></div> <img src ="http://www.cppblog.com/zzfmars/aggbug/146877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-21 18:59 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/21/146877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微软必应主管：传统搜索即将消亡</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/21/146874.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 21 May 2011 10:18:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/21/146874.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146874.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/21/146874.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146874.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146874.html</trackback:ping><description><![CDATA[<p>北京时间5月20日消息，据国外媒体报道，微软必应搜索主管斯蒂芬&#183;维茨（Stefan Weitz）表示，传统搜索即将消亡，微软未来搜索的目标是准确提供知识。</p>
<p>在最近接受《赫芬顿邮报》采访时，斯蒂芬&#183;维茨表示：&#8220;在过去十二年里，搜索本身并未发生根本改变。传统搜索即将失败，搜索的标准理念，即在页面和链接中寻找文字不再有效。&#8221;</p>
<p>维茨还具体针对谷歌发表了看法。他表示，谷歌通过网站之间的联系来决定搜索结果排名曾经是一种非常优秀的模式，但是已经不再适用。他表示，现在搜索公司应当满足用户的新需求。</p>
<p>为了实现这一目的，微软本周早些时候推出了必应搜索的新功能，利用Facebook的&#8220;赞&#8221;按钮来改进用户的搜索结果。例如，如果用户希望寻找所在城市的饭店，必应搜索将把这名用户Facebook好友&#8220;赞&#8221;过的饭店放置于搜索结果页面的上方。不过要使用这一新功能，用户必须时间登录必应和Facebook账户。</p>
<p>维茨在本周早些时候的一份声明中表示：&#8220;我们将努力把这种情感理念整合到搜索结果中。&#8221;</p>
<p>不过微软采取的措施并不局限于此。维茨介绍说，必应对于未来搜索的目标是：&#8220;通过理解意图，准确提供知识&#8221;。他向《赫芬顿邮报》表示，最终微软希望简化搜索结果内容，以尽可能快速和无缝的方式为用户提供所需的信息。</p>
<p>谷歌的新功能</p>
<p>当然，谷歌也没有停滞不前。今年早些时候，谷歌推出了+1实验功能，允许用户推荐搜索结果。这项功能非常类似于Facebook的&#8220;赞&#8221;按钮，有助于搜索同一主题的用户获得更好的结果。</p>
<p>这项功能推出时谷歌官方博客表示：&#8220;+1功能的美妙之处在于其相关性。用户可以在正确的时间（当用户确实需要有关这一主题的信息之时）、以正确的方式（用户的搜索结果）获得正确的推荐（因为这些推荐来自于有同样信息需求的人们）。&#8221;</p>
<p>不过必应需要担心的不仅仅是谷歌的新功能。市场调研公司comScore发布的数据显示，今年4月份，谷歌在美国搜索市场拥有65.4%的份额，必应的市场份额为14.1%，雅虎的市场份额为15.9%。</p><img src ="http://www.cppblog.com/zzfmars/aggbug/146874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-21 18:18 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/21/146874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ADS1.2</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/17/146591.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Tue, 17 May 2011 11:58:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/17/146591.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146591.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/17/146591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146591.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146591.html</trackback:ping><description><![CDATA[&nbsp;ADS是ARM公司的集成开发环境软件，他的功能非常强大。他的前身是SDT，SDT是ARM公司几年前的开发环境软件，目前SDT早已经不再升级。ADS包括了四个模块分别是：SIMULATOR；C&nbsp;编译器；实时调试器；应用函数库。<br />ADS的编译器调试器较SDT都有了非常大的改观，&nbsp;ADS1.2提供完整的WINDOWS界面开发环境。C编译器效率极高，支持c&nbsp;以及c++，使工程师可以很方便的使用C语言进行开发。提供软件模拟仿真功能，使没有Emulators的学习者也能够熟悉ARM的指令系统。配合FFT-ICE使用，ADS1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握。ADS1.2需要硬件支持才能发挥强大功能。目前支持的硬件调试器有Multi-ICE以及兼容Multi-ICE的调试工具如FFT-ICE。而简易下载电缆不能支持ADS1.2<br /><br /><br /><a href="http://esoft.mcu123.com/MCU123_temp_20100103@/ARM/ads1.2.rar">迅雷下载地址 </a><img src ="http://www.cppblog.com/zzfmars/aggbug/146591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-17 19:58 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/17/146591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创业是与生俱来的情结</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/14/146388.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 14 May 2011 10:51:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/14/146388.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146388.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/14/146388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146388.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146388.html</trackback:ping><description><![CDATA[<p>云计算，这种正以指数级速度增长的技术，已经渐渐渗透到IT界的每一个角落，深刻影响着人们的生活。一些敏锐的技术人员不甘寂寞，准确地挖出了潜伏的创业机会，踏上了创业的征程。本刊记者近日采访了三位云计算创业者，请他们分享自己的创业秘籍。本文为三篇专访之第一篇。<a><img class="alignright size-full wp-image-6087" title=郭欣 alt=郭欣 src="http://www.programmer.com.cn/wp-content/uploads/2011/05/郭欣1.bmp" width=171 height=272></a></p>
<p><strong><span style="COLOR: #333300">记者：您是怎样走向创业这来条路的？</span></strong></p>
<p>郭欣：一直以来，我都感觉创业是一种与生俱来的情结，有的人骨子里就将创业视为生活，我可能就算这种人。并不需要什么都懂才开始创业，但一定要有一种敢想敢做的精神。创业是一种特质，能渗透到你的血液中；创业也是一种宿命，你得放弃一些东西。我不记得第一次萌生创业念头的时间，因为萌生念头和实际创业是两回事。想想那大概是初中第一次见到WPS的时候，当时或多或少就知道自己未来也得折腾类似的东西了。高中热衷游戏之后，也想自己开发游戏；看到国内没有Web架构和性能优化类的原创书籍，就自己写一本。不明白为什么总是有想自己搞一个的念头，大概因为自己的梦只能由自己来实现。<span id=more-6081></span><span style="COLOR: #333300"><strong> </strong></span></p>
<p><span style="COLOR: #333300"><strong>记者：您如何看待云计算所酝酿的商机？</strong></span></p>
<p>郭欣：看待任何商机，首先要看能否给你的用户带来价值，以及所处行业的发展趋势，而云计算只是一种实现商业价值的工具。因为我们针对的是企业用户，所以用户价值更多体现在能否帮助用户降低成本、提高效率。如果脱离了具体行业和用户价值，谈论云计算毫无意义。结合行业来看，我认为国内有很多机会来做SaaS，比如监控宝是针对网站性能监控领域的云服务产品。我们的监控宝是首款SaaS产品，目前取得了不错的成绩，正在保持稳定的业绩增长。虽然与其他面向最终用户的应用相比，监控宝的市场容量相对有限，但对于一款轻量级的SaaS应用来说，这是一个足以立足的切入点，有可能带来更多探索SaaS的机会。<span style="COLOR: #333300"><strong></strong></span></p>
<p><span style="COLOR: #333300"><strong>记者：您认为自己在创业方面的最大优势是什么？发展过程中，有哪些印象最深的事情？</strong></span></p>
<p>郭欣：因为我个人做过技术和产品，也懂性能优化，同时我们团队也在技术方面有一定的积累，所以我们的最大优势在于懂用户，并且用心做产品。我觉得这是创业最重要的前提。懂产品归根结底是要懂用户，因为产品只是一种工具，服务才是目的，服务的目的还是要给用户带来真正的价值，如果不懂用户，一切都毫无意义。监控宝的用户就是技术、运维工作者，因此我自己在相当长时间内都充当产品设计师的角色，首先要设计出自己能够满意的产品。监控宝创立之初，我们就坚持一个原则，那就是让产品简单，而且是无与伦比的简单。所以我们在产品规划、交互设计以及定价模型上都倾注了大量的心血。我们有很多用户过去都在使用其他监控系统，但他们最终选择了监控宝，理由就是我们的产品足够简单实用。事实上，简单可以带来数不清的好处，但同时也会考验你的坚持，会有一些用户抱怨没有他所需要的功能。有声音是好的，但你必须有足够的判断力和直觉，你要坚持原则，因为你提供的是SaaS，而不是定制软件；你要对所有的用户负责，而不能为了取悦个别用户而给大部分用户制造噪音，因为SaaS依靠的是长尾效应，而不是28法则。</p>
<p><span style="COLOR: #333300"><strong>记者：从技术创业到管理公司，您个人的思想是怎样转变的？</strong></span></p>
<p>郭欣：技术和管理都不是创业者最头疼的，归根结底，我们最头疼还是经营问题。这种转变需要一个过程，也是个人商业感觉的不断提升，公司的成长便是最好的驱动力，所需要弥补的知识也是不容忽视的。创业者的学习能力必须非常强，借助互联网你可以让自己不断成长，同时也要会借助团队和各种资源的力量，这些都是转型过程中必不可少的。</p>
<p>作者简介：<strong>郭欣</strong>，监控宝创始人，《构建高性能Web站点》作者</p>
<img src ="http://www.cppblog.com/zzfmars/aggbug/146388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-14 18:51 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/14/146388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面对困难需要坚持和专注</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/14/146355.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 14 May 2011 02:27:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/14/146355.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146355.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/14/146355.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146355.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146355.html</trackback:ping><description><![CDATA[<p align=center><a href="http://www.programmer.com.cn/wp-content/uploads/2011/05/范.bmp"><img class="alignright size-full wp-image-6091" title=范 alt=范 src="http://www.programmer.com.cn/wp-content/uploads/2011/05/范.bmp" width=184 height=258></a></p>
<p>云计算，这种正以指数级速度增长的技术，已经渐渐渗透到IT界的每一个角落，深刻影响着人们的生活。一些敏锐的技术人员不甘寂寞，准确地挖出了潜伏的创业机会，踏上了创业的征程。本刊记者近日采访了三位云计算创业者，请他们分享自己的创业秘籍。本文为三篇专访之第二篇。</p>
<p><span style="COLOR: #333300"><strong>记者：您第一次创业的念头是什么时间开始的？是什么原因促成了这个念头？</strong></span></p>
<p>范渊：2000年开始我在硅谷的ArcSight公司做信息安全，从最开始的核心研发工作做到后来的主管。因为硕博课题正好涉及<br>Web安全，所以我意识到Web安全、数据安全市场的潜力非常巨大，并且有很好的趋势，所以在2006年我就产生了回国创业的念头。同年，我和几个朋友选择在杭州的滨江高新区开始创业。滨江高新区的建设和布局跟硅谷还是有点儿像的，不是很拥挤，但是缺点是杭州的信息安全人才相对于北京、上海、广州这些城市来说不占优势。我还算比较幸运的，在公司发展的这五年中，不管是巧合，还是因为我们的努力，很多人才能够聚在一起。我觉得这点很重要。现在公司业务也在慢慢地做大，发展也很快。另外我想说的是每个公司初创的时候都会遇到很多困难，当遇到困难时首先要坚持，还需要足够的专注，机会还是会向于努力者倾斜。<strong><span style="COLOR: #333300"> </span></strong></p>
<p><strong><span style="COLOR: #333300">记者：您认为云计算的到来对于信息安全意味着什么？</span></strong></p>
<p>范渊：云计算的发展应该说是给信息安全带来了一个巨大的机会，哪怕先抛开公有云的概念，我们自己的专网，我们自己的网络，我们自己的在线系统，可能都存在很大的问题。那么现在呢？我们会以一个云的方式来进行相关的资源调用、相互通信、数据分散等问题，云本身的安全问题就显得尤为重要，因为数据有可能会存储在不同的云中，所以保证云中数据的隐私性以及不被篡改才能保证数据安全。在我看来这些因素对我们是一个很好的发展契机，因为我们所专注的Web安全和云安全本身就是紧密联系的。<span style="COLOR: #333300"><strong> </strong></span></p>
<p><span style="COLOR: #333300"><strong>记者：相对于其他行业，信息安全并不是最赚钱的，您认为安全行业的创业需要注意什么？</strong></span></p>
<p>范渊：安全行业肯定不是最容易赚钱的。站在整个中国投资者的角度来看，很多投资者也不会选择这个行业进行投资。安全行业<br>的创业需要注意两个方面：要足够专注、将社会责任感和经济价值充分结合。我们非常看中社会责任感这方面，像北京奥运会、上海世博会的信息网络安全保障工作，我们都参与并贡献了自己的力量，我觉得参加这些活动本身对安恒就是一个很好的提升。</p>
<p><span style="COLOR: #333300"><strong>记者：从做技术到管理公司，您都遇到哪些挑战？您的创业初衷有变化吗？</strong></span></p>
<p>范渊：对我来说，管理确实是一个不小的挑战。就像你说的，我本身走的是技术路线，现在的角色从技术者转变为管理者，所以我要求自己要与时俱进，保持不断进步的状态。此外，我意识到需要一个很好的核心团队。在核心团队的建设中，只有不断引入新的人才和资源，才能保持生命力和竞争力，而这是一个需要时间积累的过程。在创业初衷这点上，我可以自豪地说自己当年最初的想法就是专注Web安全，尽管当时是比较粗的设想，但现在来看当初选择这条道路确实是正确的。更为有趣的是，云安全市场规模的扩大可能超出当初的想象，尤其像现在云计算、物联网所带来的应用安全、数据安全的市场要大于当初纯粹互联网的市场。</p>
<p><span style="COLOR: #333300"><strong>记者：在您看来，国内创业环境适合公司的发展吗？</strong></span></p>
<p>范渊：我觉得目前国内创业的大环境是非常良好的，创业园区的支持工作也做得非常到位，因此我们可以集中精力来把自己专注的产品和市场做好。同时，我认为创业也需要国家的其他支持，比如对知识产权的保护，如果这方面做得不够的话，肯定会潜移默化地扼杀一些有创新力的、有真正技术含量的公司。希望在中国良好的创业环境背景下，我们都能够向创业板发展。</p>
<p>作者简介<strong>：范渊</strong>，安恒信息技术有限公司总裁。</p>
<p>（本文选自《程序员》杂志11年05期，更多精彩内容敬请关注05期杂志）</p>
<img src ="http://www.cppblog.com/zzfmars/aggbug/146355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-14 10:27 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/14/146355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>倪光南：国产软件中的政府意志</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/14/146354.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 14 May 2011 02:26:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/14/146354.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146354.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/14/146354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146354.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146354.html</trackback:ping><description><![CDATA[<p style="TEXT-ALIGN: center"><img style="WIDTH: 265px; HEIGHT: 307px" alt=\ src="http://articles.csdn.net/uploads/allimg/110512/234AVN9-0.jpg"></p>
<p style="TEXT-ALIGN: center">倪光南中国工程院院士</p>
<p>美国和欧盟的实践告诉我们，IT领域的重大反垄断行动往往都由政府主导，所以中国政府需要采取措施打破桌面领域的垄断。</p>
<p>2008年，中国发生了震惊全国的&#8220;黑屏&#8221;事件，微软公司将无数的使用盗版Windows的中国用户电脑屏幕背景变黑，此事给中国的信息安全敲 响了警钟，说明了使用进口软件有重大安全隐患。为保障信息安全，我们必须使用自主可控的软件，特别是自主可控的基础软件。但实践表明，由于Windows 垄断了桌面操作系统，国产操作系统等基础软件很难通过纯市场行为进行推广。</p>
<p>2010年底，俄联邦政府总理普京签署命令，批准了俄联邦行政机构在2011年至2015年期间将其信息系统转用自由软件的预算计划。</p>
<p>这个五年计划是借助行政命令将其信息系统从使用私有软件转换到使用自由软件。该计划首先强调了对联邦公务员的教育和培训，因为推广开源软件的最 大障碍往往不是来自于技术方面，而是来自于人们的观念和使用习惯。计划详细规定了在五年中需逐步实施的14项技术任务，从易到难，循序渐进，每一项都有明 确的目标、实施期限和责任部门，操作性强。此外，计划还规定了财会等非技术方面的支持，并要求为下一个继续推广自由软件的计划制订新的俄政府命令草案，将 它作为一项长期的任务贯彻下去。</p>
<p>俄联邦政府通过此项命令给我国的信息安全以一定的启示，政府等重要信息系统要从基于进口软件转换到基于自主可控的国产软件，理由有两方面：一是 保障信息安全。据报道，不久前，伊朗国内大约有3万个互联网终端感染Stuxnet蠕虫病毒，甚至布什尔核电站一些工作人员的个人计算机都感染了这种病 毒，这说明信息系统采用进口软件有重大安全隐患，政府部门有必要为加强信息安全而转用自主可控的国产软件。二是要打破跨国公司软件的垄断，尤其是在桌面操 作系统领域。</p>
<p>近年来，随着云计算、移动互联网、SaaS等新一代信息技术的发展，在移动通信领域，开源平台已占据优势；在云计算后台、服务器和网络操作系统等领域也呈现了多种系统竞争并存的格局；只有桌面领域仍被Windows所垄断。</p>
<p>目前，我国有约2亿台桌面PC，新一代信息技术虽然降低了桌面PC的地位并减少了转换桌面操作系统的难度，但桌面操作系统的垄断仍需打破，否 则，政府等重要信息系统就不可能转换到国产软件上来。美国和欧盟的实践告诉我们，IT领域的重大反垄断行动往往都由政府主导，所以中国政府需要采取措施打 破桌面领域的垄断。当前，我们的有利条件是，&#8220;核高基&#8221;重大专项已作了相应部署，中国已完全具备条件推广基于开源软件发展起来的、自主可控的桌面操作系统。</p>
<p>当然，中俄两国的国情不同。中国软件与信息服务业的规模和自主创新能力都超过俄国，在2010年，中国实现了软件业务收入13364亿元，占世 界市场份额约14%。鉴于此，我国有关部门和业界历来主张政府等重要信息系统应采用国产软件，其内涵比俄政府命令所指的自由软件更广，包括了自主开发的软 件以及本国厂商发行并提供服务的开源软件。</p>
<p>然而实践表明，缺乏行政措施的支撑，这种主张难以实施。对此，政府采购也几乎无济于事，这是因为我国政府采购对外商投资企业和中资企业在中国开 发生产的产品一视同仁，平等对待，因此，如何界定&#8220;国货&#8221;是个关键。早在2004年底有关部门已拟定：国产软件是在中华人民共和国境内最终形成，且在国内 的开发成本不低于总开发成本的50%的软件，但后来并未实施，致使国产软件的界定至今仍无据可依。</p>
<p>此外，我国《反垄断法》发布不久，还缺乏配套法规和实施经验，三个实施部门之间也缺乏协调机制，因此我国《反垄断法》的作用还不易发挥。在这种情况下，可以考虑采取俄国那样的行政措施来推进国产软件和服务。</p>
<img src ="http://www.cppblog.com/zzfmars/aggbug/146354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-14 10:26 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/14/146354.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谷歌I/O大会暗示谷歌未来发展10大路线</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/14/146353.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 14 May 2011 02:23:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/14/146353.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146353.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/14/146353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146353.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146353.html</trackback:ping><description><![CDATA[<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">据国外媒体报道，美国知名IT杂志《eWeek》网站今天撰文，称谷歌在今年的Google&nbsp;I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O大会上提及的一些产品计划也暗示了该公司今后一段时间的发展路线图。《eWeek》网站的文章如下：<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">谷歌已经在I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O大会上谈论了未来产品发展计划，这些计划显示出谷歌未来几年内可能发展的方向。谷歌在大会第一天的演讲中就表示，在未来几个月或数年时间内，该公司将在尽可能多的市场领域内发挥影响力，仅仅依靠搜索和广告业务的时代将一去不再复返。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">当然，谷歌的这些言论不足为奇。多年以来，谷歌一直借力Android操作系统，抢占智能手机市场。2009年，谷歌将AdMob收购旗下，从而为其在移动广告领域发挥作用提供了力量支持。如今，谷歌又把目光瞄准了苹果的iPad，一些基于Android的平板电脑也已上架。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">但是，从谷歌在I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O大会上的演讲来看，该公司并没有把所有的时间和精力都集中在移动通信或移动广告业务，事实上谷歌还在涉及其认为能够获得很好表现的其它更多市场。谷歌还在大会上宣称，它将在业已建立的市场继续发展，同时还计划拓展新兴市场和领域。从此次I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O大会来看，谷歌今后将沿着以下10大路线发展。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.瞄准iTunes<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">谷歌在今年的I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O大会上作出的最重大宣告就是谷歌音乐（Google&nbsp;Music）服务。目前此服务正在测试之中，将为美国用户提供免费使用网站音乐的功能。在此服务之下，Android用户还能够享受云音乐服务。目前为止，Google&nbsp;Music还没有对苹果的iTunes带来太大威胁，但是，&#8220;云&#8221;技术将成为音乐服务的未来战线。目前，谷歌正在奠定基础，准备成为音乐市场的主导者，这种势头将令苹果感到烦闷。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.谷歌更重视智能手机<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">在今年的I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O大会上，谷歌花费了大量的时间谈论其利用Android进军智能手机市场的情况。谷歌公司明确表示不会松懈，而是会加紧拓展移动业务。据谷歌提供的数据显示，目前已经1亿多台Android设备被激活。另外，每天激活的Android产品也达到了40万台。总之，太多的原因致使谷歌致力于发展智能手机业务。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.谷歌有意拓展平板电脑市场<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">谷歌没有放弃智能手机业务。该公司的举动还表明，其有意拓展在平板电脑市场的影响力，这一点从谷歌积极推出Android&nbsp;Honeycomb&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.1系统中就可以看出来。此更新的系统拥有大量的优异功能和漏洞补丁，而且还能够处理图像显示缓慢的问题。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.谷歌致力于移动娱乐市场<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">随着智能手机和平板电脑人气的日益增长，人们也开始期待这些设备能够提供更多的功能，这也是谷歌为何宣布推出电影服务的原因。谷歌的电影服务可以让用户从Android&nbsp;Market租赁影片，此举有着重要意义。对于那些有意享用移动娱乐服务的用户而言，移动设备的重要性也在与日俱增。看来，谷歌有意成为这种转变格局的主导者。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">.谷歌认识到Android零散分布的问题<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">Android生态系统面临的一个重大问题就是非常零散。目前，大量的Android设备运行在诸多不同版本的Android之上。谷歌希望凭借Android&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.4来解决这一问题。事实上，Android&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.4的主要目标是为了减少Android大量的零散分布状况，这将是谷歌移动计划中的重要一步，令人高兴的是，谷歌最终还是认识到了这一问题。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">.谷歌仍未放弃Google&nbsp;TV<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">尽管谷歌目前仍未详细透露Google&nbsp;TV的未来发展情况，但该公司还是在今年的I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O大会上宣称其不会放弃这一娱乐平台。事实上，谷歌也想将Android&nbsp;Market应用到Google&nbsp;TV业务，但谷歌目前还未透露此业务的更多详情，不过，Google&nbsp;TV目前运营未能取得预期效果。随着Android&nbsp;Market的加入，Google&nbsp;TV最终可能会获得应有的表现。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">.谷歌想控制家庭自动化市场<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">谷歌在今年的I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O大会上最让人惊诧的举措就是宣布将进军家庭自动化市场。谷歌希望把用户使用的Android智能手机或平板电脑打造成可以连接应用、照明或其它家庭产品的平台。这是谷歌非常有意思的举措之一，也表明此搜索巨头有意主宰家庭自动化市场。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">.阻止苹果<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">目前，苹果凭借iPhone和iPad等设备，在移动市场有着很好的表现，此外，苹果公司在Apple&nbsp;TV方面也取得了一些成功。还有，苹果也拥有全球最领先的音乐商店。研究谷歌的宣言就不难看出，谷歌有意改进Android、完善Google&nbsp;TV和Google&nbsp;Music等服务，这些举措也表明谷歌正在努力阻击苹果，甚至是将苹果拉下马。看来，未来几年内，这两大科技巨头之间必将上演一场恶战。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">.应用将成为必不可少的未来业务之一<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">在今年的I</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">O大会上，谷歌宣称Android&nbsp;Market商店目前已经拥有20多万款免费和付费应用，随着谷歌准备将Android&nbsp;Market加入到Google&nbsp;TV之上，并将继续与开发商合作打造更易操作的应用，因此也可以看出，未来发展中，应用将对谷歌起着极其重要的作用，同时也表明谷歌希望能够尽快地超越苹果应用商店App&nbsp;Store。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">.不再只依赖搜索<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">尽管谷歌可能仍以搜索和广告公司而著称，但是，该公司未来的市场身份可能不会再这么简单了。谷歌目前是一家以用户为主的公司，并希望成为普通用户的友好伙伴，包括家庭用户和移动着的用户。谷歌当然还会依赖搜索业务，未来几年要想取得更大的成功，谷歌当然还必须将搜索看成是重要业务对待。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">原文出自：腾讯科技<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<img src ="http://www.cppblog.com/zzfmars/aggbug/146353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-14 10:23 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/14/146353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>10项技能让前端开发者价值百万！</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/14/146352.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 14 May 2011 02:22:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/14/146352.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146352.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/14/146352.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146352.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146352.html</trackback:ping><description><![CDATA[<p>本篇文章介绍了10种，前端开发者要掌握的技能；并且这些技能可以让前端开发者价值百万。准确的说，这些技能可以让你能够轻松步入百万富翁的行列。</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.005.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-460" title='Disclaimer: only my "CEO" perspective' alt='Disclaimer: only my "CEO" perspective' src="http://articles.csdn.net/uploads/allimg/110511/105ZH560-0.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left">哪些技能呢？下面就列出这10项技能，看看你符合价值百万的前段开发者的队伍中嘛？</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.006.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-461" title="Skill 1: be a sucker for new tools" alt="Skill 1: be a sucker for new tools" src="http://articles.csdn.net/uploads/allimg/110511/105ZL2O-1.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left">现在的开发工具，有用的开发工具数以千计。快速掌握新工具将是你的首要技能。比如：<a href="http://www.kissmetrics.com/"><font color=#015fb6>Kissmetrics</font></a>\<a href="http://www.usabilla.com/"><font color=#015fb6>Usabilla</font></a>\<a href="http://www.padiact.com/"><font color=#015fb6>Padi Act。</font></a></p>
<p style="TEXT-ALIGN: left">墨守成规，可不是前端开发者应有的素质。</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.008.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-463" title="Skill 2: It ain't what you do, it's the way that you do it" alt="Skill 2: It ain't what you do, it's the way that you do it" src="http://articles.csdn.net/uploads/allimg/110511/105ZJ346-2.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left"><span id=result_box lang=zh-CN><span title=点击可显示其他翻译>前段开发者的工作，重点在于如何进行设计上的迭代式开发。</span><span title=点击可显示其他翻译>你可以使用大量工具并进行数十次的测试。但同时也要是前段代码、速度、拓展性、质量等的守护者。</span></span></p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.009.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-464" title="Skill 3: communicating with developers" alt="Skill 3: communicating with developers" src="http://articles.csdn.net/uploads/allimg/110511/105ZJ0L-3.jpg" width=512 height=288></a></p>
<p>大部分的前端开发者需要从开发者那里获得帮助，所以良好的沟通技能不可或缺，在没有产品经理的情况下更是如此。</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.010.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-465" title="Skill 4: Understand the tools' inner working" alt="Skill 4: Understand the tools' inner working" src="http://articles.csdn.net/uploads/allimg/110511/105ZM639-4.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left">前端开发者的工作之一是保证站点的前端代码，那么应用如何工作的，那就必须要知道了。更改或优化JS代码，你需要有这个能力。</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.011.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-466" title="Skill 5: have feeling for design" alt="Skill 5: have feeling for design" src="http://articles.csdn.net/uploads/allimg/110511/105ZJ228-5.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left">前端开发者对设计要有感觉，并且可以再利用原有的设计。当然你也许有做Photoshop或HTML/CSS的高手，但是他们也都是很稀缺的。所以前端开发者要对设计有那么一定的感觉。</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.012.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-467" title="Skill 6: have courage or be convincing" alt="Skill 6: have courage or be convincing" src="http://articles.csdn.net/uploads/allimg/110511/105ZI252-6.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left">很努力的优化、测试，但很多时间也会得到糟糕的结果。这就要求前端开发者敢于测试，甚至明知道可能会失败。要拿出令人信服的数据来，可有效规避让你的老板涉入其中，那将非常糟糕。</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.013.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-468" title="Skill 7: Be a conversion-horny UX nerd" alt="Skill 7: Be a conversion-horny UX nerd" src="http://articles.csdn.net/uploads/allimg/110511/105ZJ0R-7.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left">不同的web网站都有转化率的要求，这只是老板关注的？No。某些时候转化率的提升将遇到阻力，而变得很困难。这时候前端开发者需要大胆的尝试。作为这个职位，你应该喜欢转化率提升的请求，否则你将会失去前进0.1%的动力。</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.014.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-469" title="Skill #8: Write non-nerd hackable code" alt="Skill #8: Write non-nerd hackable code" src="http://articles.csdn.net/uploads/allimg/110511/105ZM602-8.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left"><span id=result_box lang=zh-CN><span title=点击可显示其他翻译>你能</span><span title=点击可显示其他翻译>写HTML</span><span title=点击可显示其他翻译>，CSS，以及JavaScript，都应该保证易于后期操作。相信一定会有障碍在于后期的维护和再利用上面。所以你要学会&#8220;轻松重复利用&#8221;的含义，并予以贯彻实施。</span></span></p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.015.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-470" title="Skill #9: Have a need for speed" alt="Skill #9: Have a need for speed" src="http://articles.csdn.net/uploads/allimg/110511/105ZHH0-9.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left">速度很重要，Google已经将速度加入到了搜索排名的因素当中。有的网站已经很快，alexa或其他分析工具或许是如是结果，但是Google可能说它太慢。速度性能优化，必须掌握！</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.016.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-471" title="Skill #10: Be quick with mockups" alt="Skill #10: Be quick with mockups" src="http://articles.csdn.net/uploads/allimg/110511/105ZJ549-10.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left">原型设计的需求，不仅仅是团队分享一个观点。快速的原型设计能力，将让你更好的把控web交互、思想主动传播。所以，精通一件顺手的原型设计工具吧，推荐进入OSCHINA的<a href="http://www.oschina.net/project/tag/291/ui-design"><font color=#015fb6>界面原型设计工具</font></a>分类进行选择。</p>
<p style="TEXT-ALIGN: center"><a href="http://devblog.eduhub.nl/wp-content/uploads/2011/05/fronteers-millions.017.jpg"><img style="BORDER-BOTTOM: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-RIGHT: silver 1px solid" class="aligncenter size-large wp-image-472" title=fronteers-millions.017 alt="" src="http://articles.csdn.net/uploads/allimg/110511/105ZM239-11.jpg" width=512 height=288></a></p>
<p style="TEXT-ALIGN: left">前端开发的重视度将超过（或许已经超过）后端开发，你不觉得吗？前端开发者将越来越重要。确保你掌握了上述的10项技能，那么你离百万富翁不远了。</p>
<p style="TEXT-ALIGN: left">原文出处：<a href="http://devblog.eduhub.nl/frontend-developer-worth-millions" target=_blank><font color=#015fb6>10 Skills to Become a Frontend Developer worth Millions</font></a></p>
<p style="TEXT-ALIGN: left">译文出处：<a href="http://www.oschina.net/news/17875/frontend-developer-worth-millions" target=_blank><font color=#015fb6>10项技能让前端开发者价值百万</font></a></p>
<img src ="http://www.cppblog.com/zzfmars/aggbug/146352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-14 10:22 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/14/146352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>腾讯：开放不是一种态度而是一种能力</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/14/146351.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 14 May 2011 02:17:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/14/146351.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146351.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/14/146351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146351.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146351.html</trackback:ping><description><![CDATA[<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">在过去十数年的时间里，互联网行业的发展可以说是一日千里，前前后后已经造就了不少行业的旗舰，并且将整个互联网行业的生态系统搭建完毕。互联网行业发展至今，不少巨头已经奠定了自己的行业地位，并且拥有比较成熟的商业模式和盈利模式，对于新来者而言，要想在传统的模式中分得一杯羹还是相当有难度的。幸好，云计算的出现给互联网行业带来了全新的机遇与挑战。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">在云计算的推动下，互联网环境中资源的分享、管理以及调度都成为了非常方便的事情，用户可以从互联网中获取更加海量而且丰富的资源。因此不管对用户还是企业，云计算的核心就在于&#8220;开放&#8221;二字，就像当初采用了封闭操作系统的苹果一直在与Wintel联盟的竞争中处于下风，但是通过开放的苹果App&nbsp;Store却获得了众多开发者的青睐并且得到了相当可观的影响力和收益。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">通过开放思路获得成功的绝不仅仅是苹果一家，诸如此类的例子还有相当多，Facebook何以能够打败Myspace成为互动社交网络的绝对老大；谷歌旗下Android智能手机操作系统为何能在短短几年里占据智能手机市场的主流等等。从开放中获得利益的也不仅限于平台企业，不少开发者也是尝到甜头的群体之一，《愤怒的小鸟》、《植物大战僵尸》无不都是非常典型的代表。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">面对着云计算时代互联网行业走向开放的趋势，众多刚刚涉足互联网行业的企业都在为机遇而兴奋，而不少传统互联网巨头则在为新的挑战寻找方案。毕竟在行业面临转化的关头，如果不能迎接挑战、抓住机遇，那么即使是行业巨头也难免逃避衰败的命运，这一点已经有不少企业验证过了。而如今国内的互联网巨头也正面临着同样的趋势，不少企业都已经开始走向了云计算时代，腾讯就是其中的一员。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">开放不是一种态度，而是一种能力<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">毫无疑问，&#8220;3Q大战&#8221;大大加速了其开放进程。它使得腾讯更加清醒地认识到自己所处的位置，暴露了封闭与其长期发展的矛盾。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">开放平台的构建，将让腾讯的世界不再&#8220;二元&#8221;，这使得腾讯能够有步骤地逐渐引入许多其他互联网公司和开发者；同时，将自己引入整个中国互联网的生态系统中。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">从目前已有的实际表现来看，腾讯的开放路径已经逐渐清晰。在马化腾此次讲话不久前，腾讯WebQQ开放平台上线内测，按照腾讯官方描述，这是&#8220;第一个以应用为核心的腾讯应用平台&#8221;，第三方开发者能通过腾讯开放的API接口，将自己的应用放到WebQQ中。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">在此之前，腾讯旗下财付通、QQ空间、腾讯微博等业务已陆续开放。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">腾讯的底层是基于QQ所搭建的人际关系链与腾讯网所汇集的流量，即关系平台与呈现平台。这二者与财付通、腾讯搜搜、腾讯微博、WebQQ、QQ空间、腾讯朋友等基础型产品打通，推动其全方位拓展。这些基础型产品将成为腾讯开放的关键节点。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">它们将同时接入三种资源。比如WebQQ，对接QQ关系链和腾讯网，拥有了通信这一强应用和流量引入；对接腾讯自身可接入的产品，如QQ云输入法；然后开放，有条件地引入互联网中的第三方开发者。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">如果说腾讯是一颗巨大的星球，则WebQQ、腾讯微博等平台型产品则是它放出去的一颗颗卫星。它们在接受了腾讯的给养之后，将飞到高处以开放平台的形式独自成长。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">腾讯目前开放的领域和附着的产品，对其自身而言，是&#8220;增量市场&#8221;。这样沉稳的开放方式——有限度地在增量市场，同与自己矛盾不严重的势力先进行合作，不会过于影响腾讯自身现有业务，又能让大家慢慢看到效果。在这一过程中，腾讯还能在不断尝试中寻找到做平台的感觉，寻找如何进行规则建立和平台运营的方法论。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">不过，这种方式有利也有弊，比如这些&#8220;卫星&#8221;离另外的平台型企业太近了，不管是财付通、腾讯搜搜还是腾讯微博，都有明确的竞争对手，这相当于在战场火线上开辟一块土地让大家来开采。其好处是腾讯仍然可以盯着对手以&#8220;贴身肉搏&#8221;和不断学习的方式成长，拿自己的增量市场去与竞争对手的核心市场竞争。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">但同时，这种做法最大的问题就是对腾讯来说，&#8220;做好做坏&#8221;都算不上决定性的。这多少有点与之前产品竞争时代的&#8220;遏制模式&#8221;似曾相识的感觉。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">而腾讯自己对此并不是没有思考，但对它来说，这样的开放路径或许是一个不得不做出的选择。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">马化腾曾表示，开放不是一种态度，而是一种能力。如何能掌握运作开放平台所需的全部能力，以及在其之上，如何让开放成为腾讯公司的核心主轴，让其产品能力真正为统一的开放内核服务？尽管在腾讯现阶段的开放之路上，还没有摆脱身不由己的阶段。但可以看到的是，腾讯已经在努力树立开放的精神。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">现有的腾讯云计算平台<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">除了以&#8220;聚水为云&#8221;为口号的开放应用平台之外，为了迎接云计算时代的来临，腾讯自己同样具备云计算平台的架构，可以为第三方应用提供从Web接入到上线运营整个过程中涉及到的一系列服务，能够降低技术与运营门槛，节省开发者的运营成本并且提高运营效率，从而让第三方应用开发者和运营团队创造更多价值。目前腾讯的云计算平台主要提供以下的五个服务：<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">.虚拟机服务（CVM）：提供可伸缩虚拟计算资源服务，以多种不同配置类型的虚拟机为服务单元，用户在Web页面上即可进行计算资源的申请、使用、退还。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">.云存储服务（CDB\CMEM）：当一款应用同时在线用户数在短时间内迅猛增加时（例如应用从腾讯朋友内测区升级到腾讯朋友社区），腾讯为开发者提供的自助化和运维透明化的海量存储服务可帮助开发者应对这个挑战。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">.云接入服务（CEE）：支持Java、PHP、Python等多种开发语言，实行强鉴权，负载均衡，流量控制，设备资源及模块间调用信息实时监控和告警，给第三方一个高健壮性、高扩展性、强安全性、高运维性的应用hosting平台。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">.运营、数据分析及安全服务（CM\CBA\CSEC\COS）：腾讯基于自身多年运营SNS应用的经验为开发者提供的运营分析和安全服务，可解决大部分开发者在产品挖掘和应用安全方面意识淡薄或经验不足的短板，对保护用户安全，提升用户体验非常重要。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">.CDN服务（CDN）：腾讯提供的CDN服务与一般意义上的CDN服务是一样的，旨在将网站的静态内容发布到最接近用户的网络的边缘，使用户可以就近取得所需的内容，提高用户访问网站的响应速度。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">马化腾&#8220;腾云&#8221;决心坚定<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&#8220;未来腾讯将会借助云计算等新技术，把用户资源和平台资源更加开放化&#8221;马化腾曾经有过这样的表态，由此我们也能够清楚地认识到腾讯投入云计算时代的决心以及积极向云计算领域进军的态度。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">凭借着自身云计算平台的吸引力以及开放应用平台上众多资源的整合，腾讯在各方面的实力将会得到进一步的加强，对于腾讯在云计算时代的技术以及地位发展都是不小的助推力，如果能够实现与众多硬件厂商之间的良好合作，那么腾讯在云计算时代里的前景将会是非常值得期待的。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<img src ="http://www.cppblog.com/zzfmars/aggbug/146351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-14 10:17 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/14/146351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>世界头号营销大师们的营销素质 </title><link>http://www.cppblog.com/zzfmars/archive/2011/05/09/146061.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Mon, 09 May 2011 15:37:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/09/146061.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/146061.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/09/146061.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/146061.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/146061.html</trackback:ping><description><![CDATA[<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">不论身处什么样的境况，也不论遇到多少次挫折，对于拥有良好素质的营销人来说，他们始终相信的是：没有失败，只有暂时停止成功。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;一个从小口吃、胆怯、害羞的孩子，一个穷得养家糊口都成问题的男人，一个35岁之前换过40个工作仍然一事无成的失败者，但是他依然执着地相信：每个人天生都有做营销的潜质，而他终有一天会凭着他的营销潜质成为亿万富翁。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;一个不可思议的成功故事被这个不可思议的人实现了——他就是世界头号营销大师乔吉拉德。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;作为一名受过生活最残酷磨练的人，乔吉拉德对如何从零起步、成长为一名优秀营销人员有着深刻的理解。他相信每一个人天生都做营销的潜质，每一个人都可以成为一名优秀的营销人，而我们所要做的最重要工作就是发现自己的营销潜质、激发这种潜质、发挥这种潜质。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;营销素质是否与生俱来，我们不敢妄下定论，但是当我们回顾许多伟大的成功者的人生历程时会发现：每一名成功者都是天生的营销大师，无论他们从事何种工作、无论他们的生命起点是如何之低，出色的营销才能帮助他们的事业腾飞发展——松下幸之助向世界成功推销了日本产品的新形象、比尔盖茨向世界推销了一个个人电脑进入千家万户的梦想。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;从松下幸之助、比尔盖茨、乔吉拉德，再到其他成功的营销大师，他们的成功固然离不开天时地利，离不开时代赋予的种种机遇，但在他们生命底色中，有某些素质是与生俱来的，那就是作为一名优秀营销人的四大优秀素质。正是这四大素质使得他们在历经艰难挫折之后，最终成就辉煌事业。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">素质一：自我认知力<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;对于一名追求成功的营销人来说，无论你现在处于什么状态，无论你现在从事什么行业，只要你能深刻地认知自己，明白自己的长处与短处，你就有了获得成功的可能。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;认知自己是困难的，但是能够正确而深刻地认知自己，无疑是一种出色的能力——许多出色的营销人共同拥有的素质之一就是：他们都清晰地知道自己优势何在、自己能做什么、自己要往什么方向去。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;在这个浮华喧嚣的社会中，自我认知能力能够让营销人冷静分析自己与外部世界之间的关系，判断出自己优势与劣势，从而清晰地找准自己的位置。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;华人首富李嘉诚早年生活艰苦，经历过无数磨难。少年他曾在香港的茶楼里做侍应生。虽然身为侍应生，但李嘉诚有种强烈的梦想：就是要成为一名实业家。可是，像他这样没有后台、没有本钱的人，该怎样才能投身实业呢？&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;自小早熟的李嘉诚对自我有强大的认知能力，他相信自己有做销售员的潜质，而且做销售员可以为自己更快积累资本成就实业家的梦想——在这种强烈自我认知引导下，17岁的李嘉诚大胆地迈出了新的一步，他辞掉了茶楼里的安稳的工作，成为一家塑胶厂的推销员。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;在辛苦的推销生涯中，尽管经历种种艰苦困厄，但李嘉诚毫不退缩，因为从17岁那一年他就深刻认识到自己的定位与能力，他相信自己的判断，相信自己凭着自己的潜质终会成就一番惊人事业。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;李嘉诚的成功，虽然有机遇的垂青，更多则是他强烈的自我认知以及不懈的努力的结果。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;自我认知的能力对营销人来说是如此重要——它让每一名营销人冷静地判断、分析自己职业发展前途，从而制定切实的发展方案，而不是成天抱着一夜暴富的幻想，欺骗自我最终一事无成。自我认知也是一种成功的暗示，可以让我们在充满压力与挑战的营销的生涯中，在最失望、最困厄之时，依然能看到远方摇曳着的希望之灯，鼓励着我们不断努力，不断向前，最终抵达辉煌的终点。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">素质二：激励力<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;对于营销人员来说，激励力很多时候是一种比口才更重要的素质：口才不好可能会让你丢掉某个客户，而不懂得如何激励自己则会让自己的营销生涯提前终结。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;日本保险界最成功的推销员原一平，小时候因为家境富裕，他从小就象个标准的小太保，叛逆顽劣的个性使他恶名昭彰而无法立足于家乡，后来家境中落，他在23岁不得不离开家乡到孤身到东京打天下。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;原一平刚刚涉足保险时，毫无经验，不仅言辞笨拙经常得罪客户，而且由于他身材矮小，而饱受讥笑，作为一名曾经家境辉煌的富公子，生活的天空似乎一下子塌了下来。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;但这一切并没有打垮原一平，贫富两重天的生活变化令他明白激励自己的重要性——在原一平内内心，他时刻为自己燃着一把&#8220;永不服输&#8221;的火，激励着他愈挫愈勇。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;27岁时，原一平的业绩成为全公司之冠，并且夺取了全日本的第二名。36岁时，原一平又成为美国百万圆桌协会成员，协助设立全日本寿险推销员协会，并担任会长至几十年。最后因他对日本寿险的卓越贡献，原一平荣获日本政府最高殊荣奖。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;原一平辉煌的营销生涯是由一连串的成功与挫折所构成的，他的成功是一个自我激励、自我超越的过程。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;激励力是自信心与意志力的综合体。作为营销人，最常遇到不会是客户的笑脸与鲜花，而是无穷无尽的压力与挑战。所以，对于追求成功的营销人来说，拥有强大自我激励力是如此重要——他们不再害怕压力，因为没有压力，就不会有辉煌成就；他们不惧挫折，因为生命的乐趣就蕴含在挑战与克服中。在营销生涯中，压力与挫折是磨炼意志的垫脚石，激励力则是协助营销人攀上成功顶峰的助推剂。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">素质三：判断力<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;判断力有多重要？&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;在IBM的大型主机还主宰着商业社会时，比尔盖茨就预见到个人电脑必然会普及：&#8220;让每一个家庭的每台桌子都运行着一部电脑，每部电脑里面都运行着微软的软件。&#8221;正是这种对行业发展趋势、对市场发展的深刻判断能力让盖茨成为世界最富有的人。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;对于营销人员来说，判断能力就是大海航行时的方向标：在茫茫人海中，你必须能够判断出哪里有营销的机会，哪一些会是潜在的客户。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;奥姆是美国赫赫有名营销&#8220;教父&#8221;，他最成功之处并不在于他的说服能力或推销技巧取，而在于他的独具慧眼，总能发现一般营销人员无法发现的商机。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;当奥姆还是保险公司一名小小推销员时，有一次他偶然经过一间小公司，从外面可以看到这个公司里有十几个人正在忙忙碌碌、跑来跑去地组装个人电脑，办公室的桌子上堆满了线路板和各种机箱。办公室虽然简陋而且狭小，但是在奥姆看来，这家公司充满了勃勃生机，具有无限的发展潜力。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;虽然奥姆服务的客户都是大公司，但这一次，他提出要见主管。有人把奥姆带到了一个20岁的年轻人面前，这个年轻人当时正在一张黑色的桌子前工作。奥姆与这位年轻人仔细详谈之后，预感到这个年轻人构想出的公司会有一番大作为，奥姆说服了年轻人接受他们的保单。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;但是，奥姆所在的保险公司在政策上不接纳雇员少于50人的公司作为投保对象，而这位年轻的PC领军人物只有16个雇员，奥姆决心挑战这个屏障，因为他预感这家小公司一定会有所发展。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;奥姆找到自己的经理和有关组织部门，找了他能找的所有人，试图破除这个政策上的限制，经历多次挫折与失败，奥姆甚至签下了军令状，他终于使公司调整了原先的政策，接纳了这家小公司的保单。不出一年的时间，这家小企业就从16名员工发展到了拥有500名员工的大企业！而当时站在桌子前工作的那个年轻人就是迈克尔&#8226;戴尔。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;像奥姆一样，出色的判断能力对于营销人员来说往往是成功的起步。判断能力来自于直觉与经验的混合。如果说直觉是源自于个人主观的感受，那么经验则是不断学习与磨练的结果。任何一名成功的营销人，都必然是经过长时间的磨练，才练就准确的商业与社会判断力。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">素质四：学习力<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;时代不断在变化，客户不断地成长。在这个倍速发展的时代，除了变化，没有什么东西是不变的——而学习则是让营销人了解外部世界、跟上客户步伐的最有效径途。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;学习者不一定是成功者，但成功者必然是擅长学习者。纵使如李嘉诚这类商业巨子，在年逾七旬之时，他依然强迫自己每周读完三本书、几本杂志，让自己时时能了解社会最新知识。而对于身处瞬息万变的营销行业对营销人来说，学习新知识，了解社会、行业、客户最新情况是一种工作必须。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;对于顶级营销人来说，学习力是指这样一种能力：能够快速地汲取最新知识，了解社会发展趋势；能够将学习到的知识，与实际工作进行结合，做到理论与实践相融合。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">后记<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;对于许多营销人来说，营销生涯就像一场战斗，是一场不间断的、让人无喘息余地的追逐。在一次次胜利中间夹杂着许多次失败和拒绝，在喜悦、期待、得意与兴奋之中往往夹杂着恐惧、拒绝和失望。不论身处什么样的境况，也不论遇到多少次挫折，但对于顶级营销人来说，他们拥有的优良素质让他们始终相信：没有失败，只有暂时停止成功。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　　&nbsp;没有失败，只有暂时停止成功。如果你秉持这一观点，如果你一直为此努力不懈，恭喜你！因为，下一个乔吉拉德就是你。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<img src ="http://www.cppblog.com/zzfmars/aggbug/146061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-09 23:37 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/09/146061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用scanf输入字符串空格不识别？？</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/08/145930.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sun, 08 May 2011 02:22:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/08/145930.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/145930.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/08/145930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/145930.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/145930.html</trackback:ping><description><![CDATA[<pre id=best-answer-content class="reply-text mb10">用scanf不是不显示空格，
而是用scanf接收字符串的话，
在串首遇到空格的话，跳过，继续寻找下一个非空格字符，
在串中遇到空格时，结束字符串的输入。
所以如果用户输入"    abcd  efg"的话，
scanf取得的字符串为"abcd"。
而gets取得字符串时，是在遇到EOF(串尾)时停止，所以不存在这个问题。</pre>
<pre class="reply-text mb10">
<pre id=best-answer-content class="reply-text mb10">控制符不同 你用%c说明是输入一个字符  此时可以scanf可以接受空格  </pre>
<pre class="reply-text mb10">但其他控制符都以空格为结束标志 如%d %s都是以空格为结束 所以你的二个不接受空格</pre>
<pre class="reply-text mb10">&nbsp;</pre>
<pre class="reply-text mb10">&nbsp;</pre>
<pre class="reply-text mb10">总结：scanf 接受字符串，遇到空格结束，即以空格为结束符。</pre>
<pre class="reply-text mb10">     printf 输出字符串，遇到空格不结束，而是遇到'\0'这个字符串结束标志才结束。</pre>
<pre class="reply-text mb10">     因此为了处理方便，输入字符串时,scanf和gets永远分开使用。</pre>
<pre class="reply-text mb10">&nbsp;</pre>
<pre class="reply-text mb10">&nbsp;</pre>
</pre>
<img src ="http://www.cppblog.com/zzfmars/aggbug/145930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-08 10:22 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/08/145930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>空格字符和字符串结束字符的区别 </title><link>http://www.cppblog.com/zzfmars/archive/2011/05/08/145929.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sun, 08 May 2011 02:08:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/08/145929.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/145929.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/08/145929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/145929.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/145929.html</trackback:ping><description><![CDATA[当字符串中有字符串结束字符时,字符串会被截断,而空格字符只是显示一个空字符,可以把它当作一个普通字符看待。<br>
<div class=content>
<pre id=content-166585815 class="reply-text mb10">字符串结束字符 \0  ASCII 是 0
空格你看不到。ASCII 是 32 </pre>
</div>
<pre id=content-166586650 class="reply-text mb10">字符串结束字符 \0 ASCII 是 0x00
空格。ASCII 是 0x20 </pre>
<pre class="reply-text mb10">&nbsp;</pre>
<pre class="reply-text mb10">&nbsp;</pre>
<img src ="http://www.cppblog.com/zzfmars/aggbug/145929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-08 10:08 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/08/145929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web of KnowledgeSM在线大讲堂。</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/07/145915.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 07 May 2011 13:48:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/07/145915.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/145915.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/07/145915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/145915.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/145915.html</trackback:ping><description><![CDATA[<a href="http://science.thomsonreuters.com.cn/2011online/">http://science.thomsonreuters.com.cn/2011online/</a>
<img src ="http://www.cppblog.com/zzfmars/aggbug/145915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-07 21:48 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/07/145915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>佩奇和布林让谷歌成功的13妙招：做最简单产品</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/06/145806.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 06 May 2011 04:34:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/06/145806.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/145806.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/06/145806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/145806.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/145806.html</trackback:ping><description><![CDATA[<div class=img_wrapper>
<div title=谷歌创始人谢尔盖&#183;布林和拉里&#183;佩奇 align=center><img title=谷歌创始人谢尔盖&#183;布林和拉里&#183;佩奇 alt=谷歌创始人谢尔盖&#183;布林和拉里&#183;佩奇 src="http://i3.sinaimg.cn/IT/2011/0505/U4672P2DT20110505185258.jpg"></div>
<span class=img_descr>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 谷歌创始人谢尔盖&#183;布林和拉里&#183;佩奇</span></div>
<p>　　<br><br><br><br><span style="FONT-FAMILY: KaiTi_GB2312">导语：谷歌是近十年来最为成功的科技公司，美国科技博客Businessinsider周四撰文分析了创始人谢尔盖&#183;布林(Sergey Brin)和拉里&#183;佩奇(Larry Page)让谷歌成为科技巨头的13种妙招。</span></p>
<p><span style="FONT-FAMILY: KaiTi_GB2312">　　以下是文章全文：</span></p>
<p>　　过去十年，谷歌成为了众多公司攻击的对象。</p>
<p>　　谷歌连续多年蝉联最佳雇主，成为年轻专业人士最向往的公司，他们的名字也一直和搜索联系在一起。</p>
<p>　　那么佩奇和布林是如何使谷歌成为科技巨头的呢，以下是他们使用过的13种妙招：</p>
<p>　　<strong>选择不喜欢的商业伙伴</strong></p>
<p>　　第一印象往往是错误的。如果佩奇和布林仅通过第一印象来判断对方的话，如今的谷歌可能就不存在了。</p>
<p>　　在1995年的斯坦福大学博士生校园游览中，布林是佩奇的向导，但是双方在游览期间一直在争吵。</p>
<p>　　但是就是这两个人共同研究了&#8220;剖析大型超文本网页搜索引擎&#8221;项目，这也是谷歌建立的基础。</p>
<p>　　<strong>并不尝试开办公司</strong></p>
<p>　　佩奇当时在斯坦福大学，他遭遇到了网页的困扰。在他看来，大部分网页都有它的前进链接，这很好操作，但是用户却不知道它的后退链接，于是他就想办法找到网页的后退链接。</p>
<p>　　这个项目就是日后知名的BackRub，谷歌的雏形。</p>
<p>　　<strong>用户就是营销工具</strong></p>
<p>　　如果你打造了一款好产品，用户就肯定乐于讨论它。</p>
<p>　　布林在2000年表示：&#8220;我们实际上依靠用户来帮助我们的营销，大部分用户经常告诉其他人有关我们的产品信息，这极大帮助了谷歌。谷歌自1998年建立以来，谷歌的网站流量每月增长20%多。</p>
<p>　　口头传播成为谷歌广告业务的主要方式，直到2009年他们推出首个电视商业广告。</p>
<p>　　<strong>重视研发</strong></p>
<p>　　2000年，谷歌拥有150名员工，其中一半以上为工程师和研发人员、布林表示：&#8220;我们在研发上投入巨大。&#8221;</p>
<p>　　研发上的巨大投入引入也帮助谷歌取得成功，并开拓了除搜索以外的其它业务。</p>
<p>　　<strong>不作恶</strong></p>
<p>　　谷歌控制着人们的大量信息资源，并努力承担起社会责任。</p>
<p>　　佩奇在1999年接受采访时表示：&#8220;搜索引擎在人们生活中发挥着重大作用，它决定了人们想要看到的信息，用户需要相信为他们提供的信息的人。我们所做的事情必须是正确的，有道德的。&#8221;</p>
<p>　　用简单的词语形容谷歌的行为方式就是&#8220;不作恶&#8221;。</p>
<p>　　<strong>钱不是唯一，要做到最好</strong></p>
<p>　　布林在1999年接受采访时表示：&#8220;我们要达到雅虎、亚马逊和AOL的水准，并希望在搜索领域成为第一，如果你所做的事情正确，你每天就会进步一大块。&#8221;</p>
<p>　　佩奇在2006年接受采访时表示：&#8220;如果我们只能被金钱所激励，那么我们很早之前就已经将公司卖掉了。&#8221;</p>
<p>　　<strong>做出让人担忧的决定</strong></p>
<p>　　佩奇和布林从来不害怕与公众舆论做斗争，布林在谈邮件扫描时称：&#8220;当人们首次听到这项功能时，可能真的很担心，但是事实不是如此，我们为的是让广告能够和你阅读的信息更加匹配，没有人会阅读到邮件内容。&#8221;</p>
<p>　　现在Gmail被看做是互联网上最好的邮件服务。</p>
<p>　　<strong>做最简单的产品</strong></p>
<p>　　很多公司希望用户能够停留在他们的网站上，尽可能久的使用他们的产品。</p>
<p>　　但是佩奇和布林希望用户能够进行快速搜索，找到他们所需要的东西后迅速离开。佩奇表示：&#8220;我们希望用户使用谷歌，我们的搜索能够成功将你带到其它的网站。这就是最重要的事情。&#8221;</p>
<p>　　<strong>让谷歌融入人们的日常生活</strong></p>
<p>　　当人们需要某种产品时，他们就会对这种产品更加忠诚。</p>
<p>　　佩奇表示：&#8220;我们就是人们日常生活的一部分，就像刷牙一样，谷歌也已经被接受成为了人们日常生活的一部分。&#8221;</p>
<p>　　<strong>有趣的公司文化</strong></p>
<p>　　谷歌总部拥有有趣的公司文化，公司员工可以享受滑梯、自行车、踏板车和玩具。</p>
<p>　　佩奇表示：&#8220;我们为了保持公司文化做了很多努力，我们的公司更像是一个包装过的大学校园，而不是典型的郊区办公园区。&#8221;</p>
<p>　　<strong>举行TGIF派对</strong></p>
<p>　　谷歌进行的是人性化管理，每周五都要举行派对，称作TGIF(Thank God It &#8217; s Friday)大会。</p>
<p>　　佩奇表示：&#8220;当我们拥有50名员工时，我们开始在每周五举行TGIF派对，员工们也可以借此回顾一周所发生的一切。&#8221;</p>
<p>　　<strong>高层大变动</strong></p>
<p>　　佩奇现在已经取代施密特成为谷歌CEO，有分析称，尽管施密特之前担任CEO，但是谷歌的决定还是三个人做出。为了加快决策速度，谷歌现在由佩奇一个人进行决策。(晓明)</p>
<!-- publish_helper_end -->
<img src ="http://www.cppblog.com/zzfmars/aggbug/145806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-06 12:34 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/06/145806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设置MFC坐标系</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/05/145732.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Thu, 05 May 2011 04:03:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/05/145732.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/145732.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/05/145732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/145732.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/145732.html</trackback:ping><description><![CDATA[<span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="TEXT-ALIGN: left; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; FONT-SIZE: 14px" class=Apple-style-span>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><strong><span style="LINE-HEIGHT: 21px; TEXT-DECORATION: underline">注意一点：把设置代码放在画图类的前面。即可显示。一味的放在OnDraw（）里有时候是没用的。</span></strong></p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><strong><span style="LINE-HEIGHT: 21px; TEXT-DECORATION: underline">设置MFC坐标系,读懂以下函数：</span></strong></p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">CRect&nbsp;&nbsp; rect;<span class=Apple-converted-space>&nbsp;</span><br>GetClientRect(&amp;rect);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt; SetMapMode(MM_ANISOTROPIC);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt; SetWindowExt(100,-100);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt; SetViewportExt(100,100);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt; SetViewportOrg(rect.left,rect.bottom);<span class=Apple-converted-space>&nbsp;</span><br>CPoint&nbsp;&nbsp; pointOrg(0,0);<span class=Apple-converted-space>&nbsp;</span><br>CPoint&nbsp;&nbsp; pointEnd(100,100);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt; MoveTo(pointOrg);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt; LineTo(pointEnd);<span class=Apple-converted-space>&nbsp;</span><br>但是希望知道在Setwindowext和setviewportext函数中的参数是什么意思？<span class=Apple-converted-space>&nbsp;</span><br>发现把里面的100都改写成1000的话效果是一样的。。。<span class=Apple-converted-space>&nbsp;</span><br>已经知道了这两个函数可以起到放大缩小的类似效果了</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">首先,windows程序在画图时,window有一个设备描述表,比如画一个宽为20,高为10单位长度的矩形,注意这个单位长度是对于设备描述表来说的,默认情况下,一个设备描述表单位长度(即逻辑单位)对应一个像素大小,如果需要将逻辑单位与物理单位这个对应改变,就需要使用SetMapMode函数来设置新的映射模式了.比如SetMapMode(LOENGLISH)表示一个逻辑单位映射到视频窗口或者打印机等物理设备时,对于0.01英寸.而SetMapMode(ANIOSTROPIC)表示x,y轴单独缩放.这是既然要单独缩放,比如支持x,y轴的缩放比例.后面的SetWindowExt(a1,b1)和SetViewportExt(a2,b2)正是表示这个缩放比例的.这里表示,x轴缩放比例是a1逻辑长度缩放为物理长度a2,同理,b1缩放为b2.后面的SetViewportOrg(x,y)表示将物理设备的坐标原点移到(x,y)位置.比如显示器默认坐标原点是屏幕的左上角(0,0)位置,而现在移到(x,y)位置,这是平面坐标平移,这个不用详细说了.假设要话一个矩形(0,0,100,100),物理设备原点移到到(x,y)后,本来要在左上角话的矩形,此时实际话在(x,y,100x,100y)的位置上(这里假设显示器左上角为(0,0)坐标).实际上还有一个函数SetWindowOrg(x,y)这个是设置逻辑设备的原点.如果需要知道比较详细,请参考&lt;&lt;mfcwindow编程&gt;&gt;一书</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br>建立以左上角为原点，X轴和Y轴为1000的坐标<span class=Apple-converted-space>&nbsp;</span><br>我们可以用以下代码：</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">void CTtView::OnDraw(CDC* pDC)<span class=Apple-converted-space>&nbsp;</span><br>{<span class=Apple-converted-space>&nbsp;</span><br>CTtDoc* pDoc = GetDocument();<span class=Apple-converted-space>&nbsp;</span><br>ASSERT_VALID(pDoc);<span class=Apple-converted-space>&nbsp;</span><br>CRect rect;<span class=Apple-converted-space>&nbsp;</span><br>GetClientRect(&amp;rect);</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">pDC-&gt;SetMapMode(MM_ANISOTROPIC);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;SetViewportOrg(0,0);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;SetViewportExt(rect.right,rect.bottom);</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">pDC-&gt;SetWindowOrg(0,0);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;SetWindowExt(1000,1000);</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">pDC-&gt;MoveTo(50,50);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;LineTo(50,950);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;LineTo(950,950);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;LineTo(50,50);<span class=Apple-converted-space>&nbsp;</span><br>}</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">代码分析：</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">1. GetClientRect(&amp;rect); 取得客户区矩形区域，将其存放在rect中</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">2. 用pDC-&gt;SetMapMode(MM_ANISOTROPIC); 设置映射模式</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">3. 通过pDC-&gt;SetViewportOrg(0,0);设置逻辑坐标的原点</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">4. 通过pDC-&gt;SetViewportExt(rect.right,rect.bottom);和</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">pDC-&gt;SetWindowExt(1000,1000);来确定逻辑坐标下和设备坐标下的尺寸对应关系</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">5. 在MM_ANISOTROPIC模式下，X轴单位和Y轴单位可以不相同</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">6. 坐标方向的确定方法是如果逻辑窗范围和视口范围符号相同，则逻辑坐标的方向和视口的方向相同，即X轴向右为正，Y轴向下为正。</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">7. 如果将显示模式改为MM_ISOTROPIC，那么X轴单位和Y轴单位一定相同，感兴趣的读者可以自己使一下。</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">（二） 建立以视窗中心为原点的坐标<span class=Apple-converted-space>&nbsp;</span><br>用如下代码：</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">void CTtView::OnDraw(CDC* pDC)<span class=Apple-converted-space>&nbsp;</span><br>{<span class=Apple-converted-space>&nbsp;</span><br>CTtDoc* pDoc = GetDocument();<span class=Apple-converted-space>&nbsp;</span><br>ASSERT_VALID(pDoc);<span class=Apple-converted-space>&nbsp;</span><br>CRect rect;<span class=Apple-converted-space>&nbsp;</span><br>GetClientRect(&amp;rect);</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">pDC-&gt;SetMapMode(MM_ANISOTROPIC);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;SetViewportOrg(rect.right/2,rect.bottom/2);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;SetViewportExt(rect.right,rect.bottom);</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">pDC-&gt;SetWindowOrg(0,0);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;SetWindowExt(1000,-1000);</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">pDC-&gt;MoveTo(150,150);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;LineTo(-150,-200);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;LineTo(150,-150);<span class=Apple-converted-space>&nbsp;</span><br>pDC-&gt;LineTo(150,150);<span class=Apple-converted-space>&nbsp;</span><br>}</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">代码分析：</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">1. 用 pDC-&gt;SetViewportOrg(rect.right/2,rect.bottom/2); 设置视口的原点。</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">2. 用pDC-&gt;SetViewportExt(rect.right,rect.bottom);和pDC-&gt;SetWindowExt(1000,-1000);来确定设备坐标和逻辑坐标的单位对应关系。</p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">3. 因为逻辑窗范围和视口范围的符号不一致，纵坐标取反，所以Y轴向上为正。</p>
</span></span>
<img src ="http://www.cppblog.com/zzfmars/aggbug/145732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-05 12:03 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/05/145732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>满江红</title><link>http://www.cppblog.com/zzfmars/archive/2011/05/02/145499.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Mon, 02 May 2011 09:24:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/05/02/145499.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/145499.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/05/02/145499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/145499.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/145499.html</trackback:ping><description><![CDATA[<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;【南宋】岳飞&nbsp;　<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　怒发冲冠，凭栏处，潇潇雨歇。&nbsp;　　<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;抬望眼，仰天长啸，壮怀激烈。&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">　三十功名尘与土，八千里路云和月。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;莫等闲，白了少年头，空悲切！<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;靖康耻，犹未雪。臣子恨，何时灭！<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;驾长车，踏破贺兰山缺。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;壮志饥餐胡虏肉，笑谈渴饮匈奴血。<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;待从头收拾旧山河，朝天阙。&nbsp;</span></div>
<img src ="http://www.cppblog.com/zzfmars/aggbug/145499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-05-02 17:24 <a href="http://www.cppblog.com/zzfmars/archive/2011/05/02/145499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mmseg4j中文分词</title><link>http://www.cppblog.com/zzfmars/archive/2011/04/28/145242.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Thu, 28 Apr 2011 12:31:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/04/28/145242.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/145242.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/04/28/145242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/145242.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/145242.html</trackback:ping><description><![CDATA[<a href="http://code.google.com/p/mmseg4j/downloads/list">http://code.google.com/p/mmseg4j/downloads/list</a><br><a href="http://code.google.com/p/mmseg4j/">http://code.google.com/p/mmseg4j/</a><br>
<img src ="http://www.cppblog.com/zzfmars/aggbug/145242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-04-28 20:31 <a href="http://www.cppblog.com/zzfmars/archive/2011/04/28/145242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于鸡与蛋的思考</title><link>http://www.cppblog.com/zzfmars/archive/2011/04/23/144851.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 23 Apr 2011 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/04/23/144851.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/144851.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/04/23/144851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/144851.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/144851.html</trackback:ping><description><![CDATA[<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">先有鸡还是先有蛋，只要有鸡、蛋吃，谁会关心？也许只有鸡和蛋清楚，与类里面的私有方法相似，禁止类外访问，只准本类的方法访问。</span></div>
<img src ="http://www.cppblog.com/zzfmars/aggbug/144851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-04-23 15:35 <a href="http://www.cppblog.com/zzfmars/archive/2011/04/23/144851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>百度和谷歌：局域网战胜互联网</title><link>http://www.cppblog.com/zzfmars/archive/2011/04/20/144645.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Wed, 20 Apr 2011 04:46:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2011/04/20/144645.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/144645.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2011/04/20/144645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/144645.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/144645.html</trackback:ping><description><![CDATA[<p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5年前，也就是2006年04月，百度李彦宏曾经预言，&#8220;5年以后，Google和百度之间的关系是百度一枝独秀，从市场份额来说，大家很难看到Google了。&#8221;</p>
<p align=left>5年后的今天，CNZZ统计，Google搜索引擎在中国的使用率和占有率已经低至10%，而百度则高达76%，李彦宏的预言从某种角度上被验证了。</p>
<p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 周鸿祎对此评论：&#8220;现在看来老李确实北大（NorthBig）（注：NB），很有眼光和远见，确实看到了未来。我们其他人比较南大（SouthBig）（注：SB）只是从产品和技术还有市场用户这些狭隘的角度出发就看不准。&#8221;</p>
<p align=left><strong>猜到了结果，却没有猜到过程</strong></p>
<p align=left>百度于2000年成立，最初的时候专注于中文搜索引擎，在2002年Google被封事件中成长起来，在2003年的时候，在中文搜索领域百度基本上和Google持平，2004年、2005年从30%到40%，到2006年超过50%，之后一直到2009年，百度的市场份额一直在60%左右，在2010年第一季度市场百度占有率上升至64%。谷歌中国的市场份额则从2006年的20%增长至2009年末的35.6%，随着谷歌退出中国事件的影响，2010年第一季度谷歌在中国互联网搜索市场占有率下降至30.9%。</p>
<p style="TEXT-ALIGN: center" align=left><img style="CURSOR: pointer" border=0 alt="" src="http://articles.csdn.net/uploads/allimg/110419/104_110419145301_1.jpg" width=500 height=526></p>
<p style="TEXT-ALIGN: center" align=left>2003-2009年中国搜索引擎市场营收份额（来源：艾瑞咨询）</p>
<p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我在2010年初曾撰文《后谷歌时代的中国互联网生态》，认为其他搜索公司&#8220;瓜分谷歌退出后留下的超过30%的市场份额&#8221;的论调为时尚早，并预见&#8220;百度可能将会是谷歌离开后的最大受益者&#8221;。</p>
<p align=left>一年的时间过去了，百度逐渐垄断了中国的搜索引擎市场，Google搜索引擎受到了变本加厉地限制，先是针对搜索服务的单字屏蔽，之后HTTPS搜索服务被屏蔽，从2011年3月2日开始，Google的全线服务都在中国受到了不同程度的干扰，导致Google各类服务（Gmail、Google Reader、Google分析等）都出现不稳定情况，谷歌地图亦在牌照门的阴影下生死未卜，使得Google服务的可用性逐渐下降。</p>
<p align=left>而现在，据CNZZ数据中心的数据显示，2011年第一季度百度搜索引擎的使用率高达76%，位居国内第一，其次为谷歌10.16%、搜狗4.86%、腾讯SOSO3.43%，而必应、有道、雅虎紧随其后。</p>
<p style="TEXT-ALIGN: center" align=left><img style="CURSOR: pointer" border=0 alt="" src="http://articles.csdn.net/uploads/allimg/110419/104_110419145349_1.jpg" width=409 height=280></p>
<p align=left>然而，百度虽然占据着绝大部分市场份额，但这并不代表其搜索引擎就能尽善尽美。按照CNZZ的数据显示，百度尽管在搜索结果总量、检索结果页面的打开速度、检索结果即时性等方面比较突出，但是对于检索结果竞价广告、检索结果下载效果、微博搜索、购物搜索等方面的控制却落后于谷歌等其他搜索引擎。也就是说，即便在最为核心的搜索领域，百度也不得不面临着来自谷歌等其他搜索引擎的挑战。</p>
<p style="TEXT-ALIGN: center" align=left><img style="CURSOR: pointer" border=0 alt="" src="http://articles.csdn.net/uploads/allimg/110419/104_110419145416_1.jpg" width=494 height=222></p>
<p align=left><strong>百度谷歌搜索质量的对比</strong></p>
<p align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果没有那些人为的干扰，让百度和谷歌在一个公平的环境下竞争，那么百度和谷歌的搜索质量对比哪个更好呢？原谷歌中国的CEO李开复从&#8220;相关度&#8221;、&#8220;索引规模&#8221;、&#8220;速度&#8221;、&#8220;新鲜度&#8221;四个方面给出了一个详细的评测：</p>
<p style="TEXT-ALIGN: center" align=left><img style="CURSOR: pointer" border=0 alt="" src="http://articles.csdn.net/uploads/allimg/110419/104_110419150518_1.jpg" width=450 height=243></p>
<p align=left>一、在2005-2006年时，谷歌和百度的比较：</p>
<p align=left>1、相关度：领先百度2个点（大约是今天的英语谷歌和微软的差距，就是说不大）。</p>
<p align=left>2、索引规模：谷歌规模较大，但是很多重要的内容都没有（例如论坛）。（这里比较的是中文索引，但是其实谷歌的索引是全球所有语言都储存的，因此任何搜索可能搜出任何语言和国家的结果）</p>
<p align=left>3、速度：谷歌远远慢于百度。</p>
<p align=left>4、新鲜度：谷歌落后百度。</p>
<p align=left>二、经过两年的努力，在2008年，谷歌和百度的比较：</p>
<p align=left>1、相关度：谷歌远远领先7个点（大约是谷歌英语刚出来时和雅虎的差距）。</p>
<p align=left>2、索引规模：谷歌是百度的10倍左右（当然，对绝大部分常见搜索词是感觉不出差别的），并且弥补了有些爬取的错误和落差。</p>
<p align=left>3、速度：谷歌和百度大约一样，虽然许多服务器不在国内。</p>
<p align=left>4、新鲜度：谷歌达到6分钟之内，也就是说一个网页上线6分钟后就可以被搜到（如果是PR值够高的话）。</p>
<p align=left>因此可以看出，从搜索引擎技术上看，谷歌当年对于百度来说是领先的，一个具体的例子是，在2007年的时候，谷歌的一个员工做了一个&#8220;谷歌百度比比看&#8221;的程序，对搜索引擎进行盲测，来验证谷歌和百度的搜索质量，结果经过大量匿名用户的测试，最终谷歌搜索胜出。</p>
<p align=left><strong>百度的危机</strong></p>
<p align=left>南方周末的重磅文章《漩涡中的中国首富李彦宏》一文中写到，&#8220;李彦宏认为，&#8216;技术本身不是唯一的决定性因素，商战策略才是决胜千里的关键。&#8217;&#8230;&#8230;李彦宏将微软描述为&#8216;寸土必争&#8217;的&#8216;邪恶帝国&#8217;，十余年后，他所创建和领导的公司面临着同样的指控。百度不仅在做搜索，还在做实时通讯、电子商务、博客、微博、输入法、浏览器、压缩软件&#8230;&#8230;甚至还做过一段时间的内容生产。&#8221;</p>
<p align=left>从某种角度来看，百度的发展似乎一帆风顺，2011年3月10日出炉的福布斯全球富豪排行榜中，内地首富名号被百度CEO李彦宏摘得。3月24日，百度市值超过腾讯，成为目前市值最高的中国互联网企业，这也是腾讯自2006年以来，首次丢掉中国互联网企业市值第一的头衔。</p>
<p align=left>而在另外一方面，百度似乎一下子成为了国内互联网行业的&#8220;众矢之的&#8221;，竞价排名非议颇多、百度文库侵权风波搞的百度灰头土脸，被迫道歉、当当网等合作伙伴纷纷封杀百度广告，乃至于百度自营的&#8220;有啊&#8221;黯然关停，百度MP3被迫转型，各种问题都在一夜间爆发，百度成为互联网行业的&#8220;众矢之的&#8221;和&#8220;头号公敌&#8221;。</p>
<p align=left>百度的盈利模式非常简单其易于理解，就是&#8220;竞价排名&#8221;，百度的&#8220;竞价排名&#8221;早期很脏，那时在百度搜索&#8220;癌症&#8221;，要翻到第七八页才能得到正常的搜索结果，而前面的七八页全是赞助商出钱买的广告位，在众人的猛烈抨击下，百度不得不做出一些修改，减少了广告的数量。</p>
<p align=left>但是百度在&#8220;侵犯版权&#8221;方面的行为却更甚，在百度贴吧已经出现侵权的势头后，百度反而又推出的百度百科、百度文库等系列网站，这些网站虽然给百度带来了很多流量，却存在大量侵权的内容，严重损害了内容创造者的利益，最终引来作家和出版社的围攻，自身的声誉受到了严重影响。</p>
<p align=left>对于第三方网站来说，百度对于原创文章的排名也不如Google，搜素很多关键字，排在前面的都是百度自己的网站，如百度百科、百度知道等，俨然成为了&#8220;百度站内搜索&#8221;，而Google则更多把原创文章排在前面。</p>
<p align=left><strong>框计算</strong></p>
<p align=left>面对种种困境，百度也在思考未来的盈利模式，苹果应用商店的成功引起了百度的关注，百度也开始打造自己的应用商店，试图通过所谓的&#8220;框计算&#8221;应用开放平台来&#8220;建成一个新的生态体系&#8221;，把搜索框变成类似苹果AppStore这样的应用平台，提供应用和服务；对用户来说，有利于用户体验，帮用户节约时间；对开发者来说，开发者或运营商可以将应用直接提交到百度应用开放平台，并实现最佳位置和最佳形式的搜索结果直接展现。</p>
<p style="TEXT-ALIGN: center" align=left><img style="CURSOR: pointer" border=0 alt="" src="http://articles.csdn.net/uploads/allimg/110419/104_110419145556_1.jpg" width=496 height=261></p>
<p align=left>百度&#8220;框计算&#8221;实现了对快递、影视剧、机票和购物等垂直搜索的流量截取，百度数据开放平台导致相对美观、全面的第一条搜索结果会截取到大部分的流量，大型的企业或软件开发商从中获取流量，小网站则丧失掉这部分的流量。</p>
<p align=left>和竞价排名相比，应用平台的商业模式主要是&#8220;免费+广告&#8221;的商业模式。目前这个开放平台（应用商店）以百度搜索框为核心，缺少客户端（百度浏览器可能是未来的客户端），由于百度的用户通常不愿付费，因此在上面做收费服务较为困难，大部分应用以个人应用为主，电子商务类应用很少，第三方开发者的商业模式通常只能采取&#8220;免费+广告&#8221;，其盈利难以和苹果应用商店相比，百度的&#8220;免费&#8221;模式显然是应用商店的最大挑战。</p>
<p align=left><strong>结论</strong></p>
<p align=left>可以看出，百度虽然取得了一些成功，但并不是依靠纯粹的技术和创新获胜，如果不是Google经常间歇性的被屏蔽，中国的搜索引擎市场也不会是今天这个样子，百度赢了市场，失去了口碑。一个可以随意侵犯作家的版权，给钱就可以删除负面消息，竞价排名发布假药广告，这样的企业竟然可以成为中国市值第一的互联网企业，这的确是个劣币驱逐良币的时代。</p>
<p align=left>&nbsp; 引用：<a href="http://news.csdn.net/a/20110419/296177.html">http://news.csdn.net/a/20110419/296177.html</a> </p>
<img src ="http://www.cppblog.com/zzfmars/aggbug/144645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2011-04-20 12:46 <a href="http://www.cppblog.com/zzfmars/archive/2011/04/20/144645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>