﻿<?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>IT博客-大话人生-随笔分类-其他</title><link>http://www.cnitblog.com/stomic/category/7073.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 28 Nov 2014 09:02:36 GMT</lastBuildDate><pubDate>Fri, 28 Nov 2014 09:02:36 GMT</pubDate><ttl>60</ttl><item><title>Html同源策略限制</title><link>http://www.cnitblog.com/stomic/archive/2014/11/26/89866.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 26 Nov 2014 11:01:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2014/11/26/89866.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/89866.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2014/11/26/89866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/89866.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/89866.html</trackback:ping><description><![CDATA[<div><div><strong>同源策略限制</strong></div> <div> Mashups中经常要获取和集成来自于不同提供者的内容，这些内容存在于非常不同的服务器或者域名上，因而有着不同的信任级别。比如：要显示的地图来自 于Google，天气情况来自于问天网，道路交通来自于交通网。他们不仅仅是域名不同，同时集成的内容本身之间还可能存在冲突，Google可能用 jQuery2.3版本，问天可能用jQuery的1.0版本。</div> <div>同源策略就是浏览器的一种保护机制，该机制将来自不同域（假设域代表的是始发者）的 Web 应用程序分离开来。它阻止从一个域上加载的脚本获取或操作另一个域上的文档属性，收到请求的URL 的域必须与当前Web页面的域相同。也就是说，如果多个窗口或框架中的一些应用程序是从不同的服务器下载的，那么它们无法相互访问数据和脚本，这意味着浏览器隔离来自不同源的内容，以防止它们之间的操作。</div> <div>这个浏览器策略很旧，从 Netscape Navigator 2.0 版本开始就存在。在所有主要浏览器实现中都有执行。</div> <div>注意，同源策略只能应用于HTML文档。通过 <code>&lt;script src="..." &gt;</code>标记导入HTML文档的JavaScript文件被认为是该HTML文档的同源的一部分。</div> <div>&nbsp;<wbr></div> <div><strong>何谓同源</strong></div> <div>一般地，同源是指同一个协议，同一个端口，同一个主机。</div> <div> html有个属性：document.domain可以更改当前页面的域，从而可以扩大同源的范围到同一个域名下。但是这个更改有个限制，即只能是当前主机的一部分。</div> <div>&nbsp;<wbr></div> <div><strong>避免同源策略</strong></div>  <div>主要方案有两个：</div> <div>1. 使用代理：让Web页面向它的源服务器请求数据，并且让Web服务器像代理一样将请求转发给真正的第三方服务器。该方法简单实用，获得了普遍使用，但是它不可伸缩。</div> <div>2. 使用JSON：注意到同源策略不阻止动态脚本插入，所以我们可以使用&lt;script src="..."&gt;的方式来获取数据。这个方法同样不可以加载不同源的html文档，但是，可以返回JSON对象。目前比较通用的做法，是通过一个JSONP的方法。</div> <div>&nbsp;<wbr></div> <div><strong>JSON、JSONP和jQuery</strong></div> <div>JSON＝JavaScript Object Notation</div> <div>JSONP＝JSON with Padding</div> <div>jQuery中有很多JSONP的例子。</div></div><img src ="http://www.cnitblog.com/stomic/aggbug/89866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2014-11-26 19:01 <a href="http://www.cnitblog.com/stomic/archive/2014/11/26/89866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsonp详解</title><link>http://www.cnitblog.com/stomic/archive/2014/11/26/89864.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 26 Nov 2014 08:34:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2014/11/26/89864.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/89864.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2014/11/26/89864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/89864.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/89864.html</trackback:ping><description><![CDATA[<div> 	 	 		    	 		<h1> 			<a id="cb_post_title_url" href="http://www.cnblogs.com/lemontea/archive/2012/12/11/2812268.html">jsonp详解</a> 		</h1> 		 		 			<p>json相信大家都用的多，jsonp我就一直没有机会用到，但也经常看到，只知道是&#8220;用来跨域的&#8221;，一直不知道具体是个什么东西。今天总算搞明白了。下面一步步来搞清楚jsonp是个什么玩意。</p>  <h1>同源策略</h1>  <p>首先基于安全的原因，浏览器是存在<a href="https://developer.mozilla.org/zh-CN/docs/JavaScript%E7%9A%84%E5%90%8C%E6%BA%90%E7%AD%96%E7%95%A5">同源策略</a>这个机制的，同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。看起来不知道什么意思，实践一下就知道了。</p>  <h2>1.随便建两个网页</h2>  <p>一个端口是2698，一个2701，按照定义它们是不同源的。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110107145414.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image_thumb4" alt="image_thumb4" src="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110107167658.png" height="346" width="738" border="0" /></a></p>  <h2>2.用jQuery发起不同源的请求</h2>  <p>在2698端口的网页上添加一个按钮，Click事件随便发起两个向端口为2701域的请求。</p>  <pre>$(<span style="color: maroon">"#getOtherDomainThings"</span>).click(<span style="color: blue">function </span>() {     $.get(<span style="color: maroon">"http://localhost:2701/Scripts/jquery-1.4.4.min.js"</span>, <span style="color: blue">function </span>(data) {         console.log(data)     })      $.get(<span style="color: maroon">"http://localhost:2701/home/index"</span>, <span style="color: blue">function </span>(data) {         console.log(data)     }) })</pre>  <p>根据同源策略，很明显会悲剧了。浏览器会阻止，根本不会发起这个请求。（not allowed by Access-Control-Allow-Origin）</p>  <pre><a href="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110107241500.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image_thumb8" alt="image_thumb8" src="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110107324579.png" height="528" width="979" border="0" /></a></pre>  <p>OK，原来jsonp是要解决这个问题的。</p>  <h1>script标签的跨域能力</h1>  <p>不知道大家知不知道CDN这个东西，例如<a href="http://www.asp.net/ajaxlibrary/cdn.ashx">微软的CDN</a>，使用它，我们的网页可以不提供jQuery，由微软的网站帮我们提供：</p>  <pre><span style="color: blue">&lt;</span><span style="color: maroon">script </span><span style="color: red">src</span><span style="color: blue">="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.0.js" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: maroon">script</span><span style="color: blue">&gt; </span></pre>  <p>回到我们的2698端口的网页，上面我们在Click事件里有一个对2701端口域的jQuery文件的请求，这次使用script标签来请求。</p>  <pre><span style="color: blue">&lt;</span><span style="color: maroon">script </span><span style="color: red">type</span><span style="color: blue">="text/javascript" </span><span style="color: red">src</span><span style="color: blue">="http://localhost:2701/Scripts/jquery-1.4.4.min.js"&gt;&lt;/</span><span style="color: maroon">script</span><span style="color: blue">&gt; </span></pre>  <p>当然，200，OK了</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/lemontea/201212/20121211010739821.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image_thumb15" alt="image_thumb15" src="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110107458142.png" height="469" width="926" border="0" /></a></p>  <p>同样是端口2698的网页发起对2701域的请求，放在script里设置scr属性的OK了，另一个方式就悲剧。利用script的跨域能力，这就是jsonp的基础。</p>  <h1>利用script获取不同源的json</h1>  <p>既然它叫jsonp，很明显目的还是json，而且是跨域获取。根据上面的分析，很容易想到：利用js构造一个script标签，把json的url赋给script的scr属性，把这个script插入到dom里，让浏览器去获取。实践：</p>  <pre><span style="color: blue">function </span>CreateScript(src) {     $(<span style="color: maroon">"&lt;script&gt;&lt;//script&gt;"</span>).attr(<span style="color: maroon">"src"</span>, src).appendTo(<span style="color: maroon">"body"</span>) }</pre>  <p>添加一个按钮事件来测试一下：</p>  <pre>$(<span style="color: maroon">"#getJsonByHand"</span>).click(<span style="color: blue">function </span>() {     CreateScript("http://localhost:2701/home/somejson") })</pre>  <p><a href="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110107554328.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image_thumb21" alt="image_thumb21" src="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110108042257.png" height="614" width="929" border="0" /></a></p>  <p>首先，第一个浏览器，http://localhost:2701/home/somejson这个Url的确是存在一个json的，而且在 2698网页上用script标签来请求这个2701这个Url也是200OK的，但是最下面报js语法错误了。原来用script标签加载完后，会立即 把响应当js去执行，很明显{"Email":"zhww@outlook.com","Remark":"我来自遥远的东方"}不是合法的js语句。</p>  <h1>利用script获取异域的jsonp</h1>  <p>显然，把上面的json放到一个回调方法里是最简单的方法。例如，变成这样：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110108065963.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image_thumb[3]" alt="image_thumb[3]" src="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110108081305.png" height="182" width="859" border="0" /></a></p>  <p>如果存在jsonpcallback这个方法，那么jsonpcallback({"Email":"zhww@outlook.com","Remark":"我来自遥远的东方"})就是合法的js语句。</p>  <p>由于服务器不知道客户端的回调是什么，不可能hard code成jsonpcallback，所以就带一个QueryString让客户端告诉服务端，回调方法是什么，当然，QueryString的key要遵从服务端的约定，上面的是&#8221;callback&#8220;。</p>  <p>添加回调函数：</p>  <pre><span style="color: blue">function </span>jsonpcallback(json) {     console.log(json) }</pre>  <p>把前面的方法稍微改改参数：</p>  <pre>$(<span style="color: maroon">"#getJsonpByHand"</span>).click(<span style="color: blue">function </span>() {     CreateScript(<span style="color: maroon">"http://localhost:2701/home/somejsonp?callback=jsonpcallback"</span>) })</pre>  <p><a href="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110108144789.png"><img style="background-image: none; border-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; width: 989px;" title="image_thumb[8]" alt="image_thumb[8]" src="http://images.cnblogs.com/cnblogs_com/lemontea/201212/201212110108201969.png" height="474" width="1002" border="0" /></a></p>  <p>200OK，服务器返回jsonpcallback({"Email":"zhww@outlook.com","Remark":"我来自遥远的 东方"})，我们也写了jsonpcallback方法，当然会执行。OK顺利获得了json。没错，到这里就是jsonp的全部。</p>  <h1>利用jQuery获取jsonp</h1>  <p>上面的方式中，又要插入script标签，又要定义一个回调，略显麻烦，利用jQuery可以直接得到想要的json数据，同样是上面的jsonp：</p>  <pre>$(<span style="color: maroon">"#getJsonpByJquery"</span>).click(<span style="color: blue">function </span>() {     $.ajax({         url: <span style="color: maroon">'http://localhost:2701/home/somejsonp'</span>,         dataType: <span style="color: maroon">"jsonp"</span>,         jsonp: <span style="color: maroon">"callback"</span>,         success: <span style="color: blue">function </span>(data) {             console.log(data)         }     }) })</pre>  <p>得到的结果跟上面类似。</p>  <h1>总结</h1>  <p>一句话就是利用script标签绕过同源策略，获得一个类似这样的数据，jsonpcallback是页面存在的回调方法，参数就是想得到的json。</p>  <p>jsonpcallback({"Email":"zhww@outlook.com","Remark":"我来自遥远的东方"})</p>  <p>到这里不免产生一个疑惑，同源策略是基于安全的原因建立的，发起不同源的请求是被认为不安全的，不可以接受的，但为什么这样绕一个小圈子就可以接受呢？这样就安全了吗？感觉就像洗澡时怕被人看见，把门关上，但侧面的大窗户却是打开的，这样做有意义吗？元芳你怎么看？</p><p><br /></p><p>转自：<div>http://www.cnblogs.com/lemontea/archive/2012/12/11/2812268.html</div><br /></p></div><img src ="http://www.cnitblog.com/stomic/aggbug/89864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2014-11-26 16:34 <a href="http://www.cnitblog.com/stomic/archive/2014/11/26/89864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快递达人跨境电商进口业务通关三种模式</title><link>http://www.cnitblog.com/stomic/archive/2014/11/17/89848.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Mon, 17 Nov 2014 11:16:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2014/11/17/89848.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/89848.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2014/11/17/89848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/89848.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/89848.html</trackback:ping><description><![CDATA[<div><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px "><span style="color: #ffffff; background-color: #00b0f0; "><strong><span style="color: #ffffff; background-color: #00b0f0; font-size: 14px; font-family: 宋体; ">（一）快件清关</span></strong></span></p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">确认订单后，国外供应商通过国际快递将商品直接从境外邮寄至消费者手中。无海关单据。</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">优点：灵活，有业务时才发货，不需要提前备货；</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">缺点：与其他邮快件混在一起，物流通关效率较低，量大时成本会迅速上升；</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">适合：业务量较少，偶尔有零星订单的阶段。</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px "><span style="color: #ffffff; background-color: #00b0f0; "><strong><span style="color: #ffffff; background-color: #00b0f0; font-size: 14px; font-family: 宋体; ">（二）集货清关（先有订单，再发货）</span></strong></span></p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">商家将多个已售出商品统一打包，通过国际物流运至国内的保税仓库，电商企业为每件商品办理海关通关手续，经海关查验放行后，由电商企业委托国内快递派送至消费者手中。每个订单附有海关单据。</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">优点：灵活，不需要提前备货，相对邮快件清关而言，物流通关效率较高，整体物流成本有所降低（对于郑州来说，集货模式不需要商检）</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">缺点：需在海外完成打包操作，海外操作成本高，且从海外发货，物流时间稍长</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">适合：业务量迅速增长的阶段，每周都有多笔订单</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px "><span style="color: #ffffff; background-color: #00b0f0; "><strong><span style="color: #ffffff; background-color: #00b0f0; font-size: 14px; font-family: 宋体; ">（三）备货清关（先备货，后有订单）</span></strong></span></p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">商家将境外商品批量备货至海关监管下的保税仓库，消费者下单后，电商企业根据订单为每件商品办理海关通关手续，在保税仓库完成贴面单和打包，经海关查验放行后，由电商企业委托国内快递派送至消费者手中。每个订单附有海关单据。</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">优点：提前批量备货至保税仓库，国际物流成本最低，有订单后，可立即从保税仓库发货，通关效率最高，可及时响应售后服务要求，用户体验最佳。</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">缺点：使用保税仓库有仓储成本，备货会占用资金。</p><p style=" text-indent:28px;text-autospace:ideograph-numeric;text-autospace:ideograph-other;line-height:32px ">适用：于业务规模较大，业务量稳定的阶段。可通过大批量订货或提前订货降低采购成本，可逐步从空运过渡到海运降低国际物流成本，或采用质押监管融资解决备货引起的资金占用问题（跨境电商）</p></div><img src ="http://www.cnitblog.com/stomic/aggbug/89848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2014-11-17 19:16 <a href="http://www.cnitblog.com/stomic/archive/2014/11/17/89848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>理解HTTP session原理及应用</title><link>http://www.cnitblog.com/stomic/archive/2014/09/17/89764.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 17 Sep 2014 14:01:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2014/09/17/89764.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/89764.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2014/09/17/89764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/89764.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/89764.html</trackback:ping><description><![CDATA[<div>一、术语session<br /> 在我的经验里，session这个词被滥用的程度大概仅次于transaction，更加有趣的是transaction与session在某些语境下的含义是相同的。<br /> &nbsp;<br /> session，中文经常翻译为会话，其本来的含义是指有始有终的一系列动作/消息，比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为 一个session。有时候我们可以看到这样的话&#8220;在一个浏览器会话期间，...&#8221;，这里的会话一词用的就是其本义，是指从一个浏览器窗口打开到关闭这个 期间  &#9312;。最混乱的是&#8220;用户（客户端）在一次会话期间&#8221;这样一句话，它可能指用户的一系列动作（一般情况下是同某个具体目的相关的一系列动作，比如从登录到选购 商品到结账登出这样一个网上购物的过程，有时候也被称为一个transaction），然而有时候也可能仅仅是指一次连接，也有可能是指含义&#9312;，其中的差 别只能靠上下文来推断&#9313;。<br /> &nbsp;<br /> 然而当session一词与网络协议相关联时，它又往往隐含了&#8220;面向连接&#8221;和/或&#8220;保持状态&#8221;这样两个含义，&#8220;面向连接&#8221;指的是在通信双方在通信之前要先 建立一个通信的渠道，比如打电话，直到对方接了电话通信才能开始，与此相对的是写信，在你把信发出去的时候你并不能确认对方的地址是否正确，通信渠道不一 定能建立，但对发信人来说，通信已经开始了。&#8220;保持状态&#8221;则是指通信的一方能够把一系列的消息关联起来，使得消息之间可以互相依赖，比如一个服务员能够认 出再次光临的老顾客并且记得上次这个顾客还欠店里一块钱。这一类的例子有&#8220;一个TCP session&#8221;或者&#8220;一个POP3 session&#8221;&#9314;。<br /> &nbsp;<br /> 而到了web服务器蓬勃发展的时代，session在web开发语境下的语义又有了新的扩展，它的含义是指一类用来在客户端与服务器之间保持状态的解决方 案  &#9315;。有时候session也用来指这种解决方案的存储结构，如&#8220;把xxx保存在session里&#8221;&#9316;。由于各种用于web开发的语言在一定程度上都提供了 对这种解决方案的支持，所以在某种特定语言的语境下，session也被用来指代该语言的解决方案，比如经常把Java里提供的 javax.servlet.http.HttpSession简称为session&#9317;。<br /> &nbsp;<br /> 鉴于这种混乱已不可改变，本文中session一词的运用也会根据上下文有不同的含义，请大家注意分辨。<br /> 在本文中，使用中文&#8220;浏览器会话期间&#8221;来表达含义&#9312;，使用&#8220;session机制&#8221;来表达含义&#9315;，使用&#8220;session&#8221;表达含义&#9316;，使用具体的&#8220;HttpSession&#8221;来表达含义&#9317;<br /> &nbsp;<br /> 二、HTTP协议与状态保持<br /> HTTP协议本身是无状态的，这与HTTP协议本来的目的是相符的，客户端只需要简单的向服务器请求<a href="http://www.2cto.com/soft" target="_blank">下载</a>某些文件，无论是客户端还是服务器都没有必要纪录彼此过去的行为，每一次请求之间都是独立的，好比一个顾客和一个自动售货机或者一个普通的（非会员制）大卖场之间的关系一样。<br /> &nbsp;<br /> 然而聪明（或者贪心？）的人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用，就像给有线电视加上点播功能一样。这种需求一方面迫使 HTML逐步添加了表单、脚本、DOM等客户端行为，另一方面在服务器端则出现了CGI规范以响应客户端的动态请求，作为传输载体的HTTP协议也添加了 文件上载、cookie这些特性。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。至于后来出现的session机制则是又一 种在客户端与服务器之间保持状态的解决方案。<br /> &nbsp;<br /> 让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠，然而一次性消费5杯咖啡的机会微乎其微，这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案：<br /> 1、该店的店员很厉害，能记住每位顾客的消费数量，只要顾客一走进咖啡店，店员就知道该怎么对待了。这种做法就是协议本身支持状态。<br /> 2、发给顾客一张卡片，上面记录着消费的数量，一般还有个有效期限。每次消费时，如果顾客出示这张卡片，则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。<br /> 3、发给顾客一张会员卡，除了卡号之外什么信息也不纪录，每次消费时，如果顾客出示该卡片，则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。<br /> &nbsp;<br /> 由于HTTP协议是无状态的，而出于种种考虑也不希望使之成为有状态的，因此，后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端 保持状态的方案，而session机制采用的是在服务器端保持状态的方案。同时我们也看到，由于采用服务器端保持状态的方案在客户端也需要保存一个标识， 所以session机制可能需要借助于cookie机制来达到保存标识的目的，但实际上它还有其他选择。<br /> &nbsp;<br /> 三、理解cookie机制<br /> cookie机制的基本原理就如上面的例子一样简单，但是还有几个问题需要解决：&#8220;会员卡&#8221;如何分发；&#8220;会员卡&#8221;的内容；以及客户如何使用&#8220;会员卡&#8221;。<br /> &nbsp;<br /> 正统的cookie分发是通过扩展HTTP协议来实现的，服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。<br /> &nbsp;<br /> 而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie，如果某个cookie所声明的作用范围大于 等于将要请求的资源所在的位置，则把该cookie附在请求资源的HTTP请求头上发送给服务器。意思是麦当劳的会员卡只能在麦当劳的店里出示，如果某家 分店还发行了自己的会员卡，那么进这家店的时候除了要出示麦当劳的会员卡，还要出示这家店的会员卡。<br /> &nbsp;<br /> cookie的内容主要包括：名字，值，过期时间，路径和域。<br /> 其中域可以指定某一个域比如.google.com，相当于总店招牌，比如宝洁公司，也可以指定一个域下的具体某台机器比如www.google.com或者froogle.google.com，可以用飘柔来做比。<br /> 路径就是跟在域名后面的URL路径，比如/或者/foo等等，可以用某飘柔专柜做比。<br /> 路径与域合在一起就构成了cookie的作用范围。<br /> 如果不设置过期时间，则表示这个cookie的生命期为浏览器会话期间，只要关闭浏览器窗口，cookie就消失了。这种生命期为浏览器会话期的 cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里，当然这种行为并不是规范规定的。如果设置了过期时间，浏览器 就会把cookie保存到硬盘上，关闭后再次打开浏览器，这些cookie仍然有效直到超过设定的过期时间。<br /> &nbsp;<br /> 存储在硬盘上的cookie可以在不同的浏览器进程间共享，比如两个IE窗口。而对于保存在内存里的cookie，不同的浏览器有不同的处理方式。对于 IE，在一个打开的窗口上按Ctrl-N（或者从文件菜单）打开的窗口可以与原窗口共享，而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存 cookie；对于Mozilla  Firefox0.8，所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗 口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用<a href="http://www.2cto.com/kf" target="_blank">程序开发</a>者造成很大的困扰。<br /> &nbsp;<br /> 下面就是一个goolge设置cookie的响应头的例子<br /> HTTP/1.1 302 Found<br /> Location: http://www.google.com/intl/zh-CN/<br /> Set-Cookie:  PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8;  expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com<br /> Content-Type: text/html<br /> &nbsp;<br /> 这是使用HTTPLook这个HTTP Sniffer软件来俘获的HTTP通讯纪录的一部分<br /> &nbsp;<br /> 浏览器在再次访问goolge的资源时自动向外发送cookie<br /> &nbsp;<br /> 使用Firefox可以很容易的观察现有的cookie的值<br /> 使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理。<br /> &nbsp;<br /> IE也可以设置在接受cookie前询问<br /> &nbsp;<br /> 这是一个询问接受cookie的对话框。<br /> &nbsp;<br /> 四、理解session机制<br /> session机制是一种服务器端的机制，服务器使用一种类似于散列表的结构（也可能就是使用散列表）来保存信息。<br /> &nbsp;<br /> 当程序需要为某个客户端的请求创建一个session的时候，服务器首先检查这个客户端的请求里是否已包含了一个session标识-  称为session id，如果已包含一个session id则说明以前已经为此客户端创建过session，服务器就按照session  id把这个session检索出来使用（如果检索不到，可能会新建一个），如果客户端请求不包含session  id，则为此客户端创建一个session并且生成一个与此session相关联的session id，session  id的值应该是一个既不会重复，又不容易被找到规律以仿造的字符串，这个session id将被在本次响应中返回给客户端保存。  保存这个session  id的方式可以采用cookie，这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于 SEEESIONID，而。比如weblogic对于web应用程序生成的 cookie，JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!- 145788764，它的名字就是JSESSIONID。<br /> &nbsp;<br /> 由于cookie可以被人为的禁止，必须有其他机制以便在cookie被禁止时仍然能够把session  id传递回服务器。经常被使用的一种技术叫做URL重写，就是把session  id直接附加在URL路径的后面，附加方式也有两种，一种是作为URL路径的附加信息，表现形式为http://..... /xxx;jsessionid=ByOK ... 99zWpBng!-145788764<br /> 另一种是作为查询字符串附加在URL后面，表现形式为http://...../xxx?jsessionid=ByOK ... 99zWpBng!-145788764<br /> 这两种方式对于用户来说是没有区别的，只是服务器在解析的时候处理的方式不同，采用第一种方式也有利于把session id的信息和正常程序参数区分开来。<br /> 为了在整个交互过程中始终保持状态，就必须在每个客户端可能请求的路径后面都包含这个session id。<br /> &nbsp;<br /> 另一种技术叫做表单隐藏字段。就是服务器会自动修改表单，添加一个隐藏字段，以便在表单提交时能够把session id传递回服务器。比如下面的表单<br /> &nbsp;<br /> 在被传递给客户端之前将被改写成<br /> &nbsp;<br /> 这种技术现在已较少应用，笔者接触过的很古老的iPlanet6(SunONE应用服务器的前身)就使用了这种技术。<br /> 实际上这种技术可以简单的用对action应用URL重写来代替。<br /> &nbsp;<br /> 在谈论session机制的时候，常常听到这样一种误解&#8220;只要关闭浏览器，session就消失了&#8221;。其实可以想象一下会员卡的例子，除非顾客主动对店家 提出销卡，否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的，除非程序通知服务器删除一个session，否则服务器会一直保留，程 序一般都是在用户做log  off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭，因此服务器根本不会有机会知道浏览器已经关闭，之所 以会有这种错觉，是大部分session机制都使用会话cookie来保存session id，而关闭浏览器后这个session  id就消失了，再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上，或者使用某种手段改写浏览器发出的 HTTP请求头，把原来的session id发送给服务器，则再次打开浏览器仍然能够找到原来的session。<br /> &nbsp;<br /> 恰恰是由于关闭浏览器不会导致session被删除，迫使服务器为seesion设置了一个失效时间，当距离客户端上一次使用session的时间超过这个失效时间时，服务器就可以认为客户端已经停止了活动，才会把session删除以节省存储空间。<br /> &nbsp;<br /> 五、理解javax.servlet.http.HttpSession<br /> HttpSession是Java平台对session机制的实现规范，因为它仅仅是个接口，具体到每个web应用服务器的提供商，除了对规范支持之外，仍然会有一些规范里没有规定的细微差异。这里我们以BEA的Weblogic Server8.1作为例子来演示。<br /> &nbsp;<br /> 首先，Weblogic  Server提供了一系列的参数来控制它的HttpSession的实现，包括使用cookie的开关选项，使用URL重写的开关选项，session持 久化的设置，session失效时间的设置，以及针对cookie的各种设置，比如设置cookie的名字、路径、域，cookie的生存时间等。<br /> &nbsp;<br /> 一般情况下，session都是存储在内存里，当服务器进程被停止或者重启的时候，内存里的session也会被清空，如果设置了session的持久化 特性，服务器就会把session保存到硬盘上，当服务器进程重新启动或这些信息将能够被再次使用，Weblogic  Server支持的持久性方式包括文件、数据库、客户端cookie保存和复制。<br /> &nbsp;<br /> 复制严格说来不算持久化保存，因为session实际上还是保存在内存里，不过同样的信息被复制到各个cluster内的服务器进程中，这样即使某个服务器进程停止工作也仍然可以从其他进程中取得session。<br /> &nbsp;<br /> cookie生存时间的设置则会影响浏览器生成的cookie是否是一个会话cookie。默认是使用会话cookie。有兴趣的可以用它来试验我们在第四节里提到的那个误解。<br /> &nbsp;<br /> cookie的路径对于web应用程序来说是一个非常重要的选项，Weblogic Server对这个选项的默认处理方式使得它与其他服务器有明显的区别。后面我们会专题讨论。<br /> &nbsp;<br /> 关于session的设置参考[5] http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869<br /> &nbsp;<br /> 六、HttpSession常见问题<br /> （在本小节中session的含义为&#9316;和&#9317;的混合）<br /> &nbsp;<br /> 1、session在何时被创建<br /> 一个常见的误解是以为session在有客户端访问时就被创建，然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建，注意如果JSP没有显示的使用  关闭session，则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session =  HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。<br /> &nbsp;<br /> 由于session会消耗内存资源，因此，如果不打算使用session，应该在所有的JSP中关闭它。<br /> &nbsp;<br /> 2、session何时被删除<br /> 综合前面的讨论，session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止（非持久session）<br /> &nbsp;<br /> 3、如何做到在浏览器关闭时删除session<br /> 严格的讲，做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作，然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。<br /> &nbsp;<br /> 4、有个HttpSessionListener是怎么回事<br /> 你可以创建这样的listener去监控session的创建和销毁事件，使得在发生这样的事件时你可以做一些相应的工作。注意是session的创建和 销毁动作触发listener，而不是相反。类似的与HttpSession有关的listener还有 HttpSessionBindingListener，HttpSessionActivationListener和 HttpSessionAttributeListener。<br /> &nbsp;<br /> 5、存放在session中的对象必须是可序列化的吗<br /> 不是必需的。要求对象可序列化只是为了session能够在集群中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。 在Weblogic  Server的session中放置一个不可序列化的对象在控制台上会收到一个警告。我所用过的某个iPlanet版本如果session中有不可序列化 的对象，在session销毁时会有一个Exception，很奇怪。<br /> &nbsp;<br /> 6、如何才能正确的应付客户端禁止cookie的可能性<br /> 对所有的URL使用URL重写，包括超链接，form的action，和重定向的URL，具体做法参见[6]<br /> http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770<br /> &nbsp;<br /> 7、开两个浏览器窗口访问应用程序会使用同一个session还是不同的session<br /> 参见第三小节对cookie的讨论，对session来说是只认id不认人，因此不同的浏览器，不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。<br /> &nbsp;<br /> 8、如何防止用户打开两个浏览器窗口操作导致的session混乱<br /> 这个问题与防止表单多次提交是类似的，可以通过设置客户端的令牌来解决。就是在服务器每次生成一个不同的id返回给客户端，同时保存在session里， 客户端提交表单时必须把这个id也返回服务器，程序首先比较返回的id与保存在session里的值是否一致，如果不一致则说明本次操作已经被提交过了。 可以参看《J2EE核心模式》关于表示层模式的部分。需要注意的是对于使用javascript  window.open打开的窗口，一般不设置这个id，或者使用单独的id，以防主窗口无法操作，建议不要再window.open打开的窗口里做修改 操作，这样就可以不用设置。<br /> &nbsp;<br /> 9、为什么在Weblogic Server中改变session的值后要重新调用一次session.setValue<br /> 做这个动作主要是为了在集群环境中提示Weblogic Server session中的值发生了改变，需要向其他服务器进程复制新的session值。<br /> &nbsp;<br /> 10、为什么session不见了<br /> 排除session正常失效的因素之外，服务器本身的可能性应该是微乎其微的，虽然笔者在iPlanet6SP1加若干补丁的Solaris版本上倒也遇 到过；浏览器插件的可能性次之，笔者也遇到过3721插件造成的问题；理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题。<br /> 出现这一问题的大部分原因都是程序的错误，最常见的就是在一个应用程序中去访问另外一个应用程序。我们在下一节讨论这个问题。<br /> &nbsp;<br /> 七、跨应用程序的session共享<br /> &nbsp;<br /> 常常有这样的情况，一个大项目被分割成若干小项目开发，为了能够互不干扰，要求每个小项目作为一个单独的web应用程序开发，可是到了最后突然发现某几个 小项目之间需要共享一些信息，或者想使用session来实现SSO(single sign  on)，在session中保存login的用户信息，最自然的要求是应用程序间能够访问彼此的session。<br /> &nbsp;<br /> 然而按照Servlet规范，session的作用范围应该仅仅限于当前应用程序下，不同的应用程序之间是不能够互相访问对方的session的。各个应 用服务器从实际效果上都遵守了这一规范，但是实现的细节却可能各有不同，因此解决跨应用程序session共享的方法也各不相同。<br /> &nbsp;<br /> 首先来看一下Tomcat是如何实现web应用程序之间session的隔离的，从Tomcat设置的cookie路径来看，它对不同的应用程序设置的 cookie路径是不同的，这样不同的应用程序所用的session  id是不同的，因此即使在同一个浏览器窗口里访问不同的应用程序，发送给服务器的session id也可以是不同的。<br /> &nbsp;<br /> 根据这个特性，我们可以推测Tomcat中session的内存结构大致如下。<br /> &nbsp;<br /> 笔者以前用过的iPlanet也采用的是同样的方式，估计SunONE与iPlanet之间不会有太大的差别。对于这种方式的服务器，解决的思路很简单， 实际实行起来也不难。要么让所有的应用程序共享一个session id，要么让应用程序能够获得其他应用程序的session id。<br /> &nbsp;<br /> iPlanet中有一种很简单的方法来实现共享一个session id，那就是把各个应用程序的cookie路径都设为/（实际上应该是/NASApp，对于应用程序来讲它的作用相当于根）。<br /> &nbsp;<br /> /NASApp<br /> &nbsp;<br /> 需要注意的是，操作共享的session应该遵循一些<a href="http://www.2cto.com/kf" target="_blank">编程</a>约定，比如在session attribute名字的前面加上应用程序的前缀，使得setAttribute("name", "neo")变成setAttribute("app1.name", "neo")，以防止命名空间冲突，导致互相覆盖。<br /> &nbsp;<br /> 在Tomcat中则没有这么方便的选择。在Tomcat版本3上，我们还可以有一些手段来共享session。对于版本4以上的Tomcat，目前笔者尚 未发现简单的办法。只能借助于第三方的力量，比如使用文件、数据库、JMS或者客户端cookie，URL参数或者隐藏字段等手段。<br /> &nbsp;<br /> 我们再看一下Weblogic Server是如何处理session的。<br /> &nbsp;<br /> 从截屏画面上可以看到Weblogic Server对所有的应用程序设置的cookie的路径都是/，这是不是意味着在Weblogic  Server中默认的就可以共享session了呢？然而一个小实验即可证明即使不同的应用程序使用的是同一个session，各个应用程序仍然只能访问 自己所设置的那些属性。这说明Weblogic Server中的session的内存结构可能如下<br /> &nbsp;<br /> 对于这样一种结构，在session机制本身上来解决session共享的问题应该是不可能的了。除了借助于第三方的力量，比如使用文件、数据库、JMS 或者客户端cookie，URL参数或者隐藏字段等手段，还有一种较为方便的做法，就是把一个应用程序的session放到ServletContext  中，这样另外一个应用程序就可以从ServletContext中取得前一个应用程序的引用。示例代码如下，<br /> &nbsp;<br /> 应用程序A<br /> context.setAttribute("appA", session);<br /> &nbsp;<br /> 应用程序B<br /> contextA = context.getContext("/appA");<br /> HttpSession sessionA = (HttpSession)contextA.getAttribute("appA");<br /> &nbsp;<br /> 值得注意的是这种用法不可移植，因为根据ServletContext的JavaDoc，应用服务器可以处于安全的原因对于context.getContext("/appA");返回空值，以上做法在Weblogic Server 8.1中通过。<br /> &nbsp;<br /> 那么Weblogic  Server为什么要把所有的应用程序的cookie路径都设为/呢？原来是为了SSO，凡是共享这个session的应用程序都可以共享认证的信息。一 个简单的实验就可以证明这一点，修改首先登录的那个应用程序的描述符weblogic.xml，把cookie路径修改为/appA访问另外一个应用程序 会重新要求登录，即使是反过来，先访问cookie路径为/的应用程序，再访问修改过路径的这个，虽然不再提示登录，但是登录的用户信息也会丢失。注意做 这个实验时认证方式应该使用FORM，因为<a href="http://www.2cto.com/os/liulanqi/" target="_blank">浏览器</a>和web服务器对basic认证方式有其他的处理方式，第二次请求的认证不是通过session来实现的。具体请参看[7] secion 14.8 Authorization，你可以修改所附的示例程序来做这些试验。<br /> &nbsp;<br /> 八、总结<br /> session机制本身并不复杂，然而其实现和配置上的灵活性却使得具体情况复杂多变。这也要求我们不能把仅仅某一次的经验或者某一个浏览器，服务器的经验当作普遍适用的经验，而是始终需要具体情况具体分析。<br /> &nbsp;<br /> <br /> &nbsp;<br /> session与cookie区别<br /> &nbsp;<br /> Session是由应用服务器维持的一个服务器端的存储空间，用户在连接服务器时，会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端，用Cookie保存的，用户提交页面时，会将这一 SessionID提交到服务器端，来存取Session数据。这一过程，是不用开发人员干预的。所以一旦客户端禁用Cookie，那么Session也 会失效。<br /> &nbsp;<br /> 服务器也可以通过URL重写的方式来传递SessionID的值，因此不是完全依赖Cookie。如果客户端Cookie禁用，则服务器可以自动通过重写URL的方式来保存Session的值，并且这个过程对程序员透明。<br /> &nbsp;<br /> 可以试一下，即使不写Cookie，在使用request.getCookies();取出的Cookie数组的长度也是1，而这个Cookie的名字就是JSESSIONID，还有一个很长的二进制的字符串，是SessionID的值。<br /> &nbsp;<br /> Cookie是客户端的存储空间，由浏览器来维持。<br /> &nbsp;<br /> 在一些投票之类的场合，我们往往因为公平的原则要求每人只能投一票，在一些WEB开发中也有类似的情况，这时候我们通常会使用COOKIE来实现，例如如下的代码：<br /> &nbsp;<br /> &lt; % cookie[]cookies = request.getCookies();<br /> &nbsp;<br /> if (cookies.lenght == 0 || cookies == null)<br /> &nbsp;<br /> doStuffForNewbie();<br /> &nbsp;<br /> //没有访问过 www.2cto.com<br /> &nbsp;<br /> }<br /> &nbsp;<br /> else<br /> &nbsp;<br /> {<br /> &nbsp;<br /> doStuffForReturnVisitor(); //已经访问过了<br /> &nbsp;<br /> }<br /> &nbsp;<br /> % &gt;<br /> &nbsp;<br /> 这是很浅显易懂的道理，检测COOKIE的存在，如果存在说明已经运行过写入COOKIE的代码了，然而运行以上的代码后，无论何时结果都是执行 doStuffForReturnVisitor()，通过控制面板-Internet选项-设置-察看文件却始终看不到生成的cookie文件，奇怪， 代码明明没有问题，不过既然有cookie，那就显示出来看看。<br /> &nbsp;<br /> cookie[]cookies = request.getCookies();<br /> &nbsp;<br /> if (cookies.lenght == 0 || cookies == null)<br /> &nbsp;<br /> out.println("Has not visited this website");<br /> &nbsp;<br /> }<br /> &nbsp;<br /> else<br /> &nbsp;<br /> {<br /> &nbsp;<br /> for (int i = 0; i &lt; cookie.length; i++)<br /> &nbsp;<br /> {<br /> &nbsp;<br /> out.println("cookie name:" + cookies[ i ].getName() + "cookie value:" +<br /> &nbsp;<br /> cookie[ i ].getValue());<br /> &nbsp;<br /> }<br /> &nbsp;<br /> }<br /> &nbsp;<br /> 运行结果:<br /> &nbsp;<br /> cookie name:JSESSIONID cookie value:KWJHUG6JJM65HS2K6<br /> &nbsp;<br /> 为什么会有cookie呢,大家都知道，http是无状态的协议，客户每次读取web页面时，服务器都打开新的会话，而且服务器也不会自动维护客户的上下 文信息，那么要怎么才能实现网上商店中的购物车呢，session就是一种保存上下文信息的机制，它是针对每一个用户的，变量的值保存在服务器端，通过 SessionID来区分不同的客户,session是以cookie或URL重写为基础的，默认使用cookie来实现，系统会创造一个名为 JSESSIONID的输出cookie，我们叫做session  cookie,以区别persistentcookies,也就是我们通常所说的cookie,注意sessioncookie是存储于浏览器内存中的， 并不是写到硬盘上的，这也就是我们刚才看到的JSESSIONID。<br /> &nbsp;<br /> 我们通常情是看不到JSESSIONID的，但是当我们把浏览器的cookie禁止后，web服务器会采用URL重写的方式传递Sessionid，我们就可以在地址栏看到sessionid=KWJHUG6JJM65HS2K6之类的字符串。<br /> &nbsp;<br /> 明白了原理，我们就可以很容易的分辨出persistent  cookies和sessioncookie的区别了，网上那些关于两者安全性的讨论也就一目了然了，session  cookie针对某一次会话而言，会话结束sessioncookie也就随着消失了，而persistentcookie只是存在于客户端硬盘上的一段 文本（通常是加密的），而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击，自然不如session cookie安全了。<br /> &nbsp;<br /> 通常sessioncookie是不能跨窗口使用的，当你新开了一个浏览器窗口进入相同页面时，系统会赋予你一个新的sessionid，这样我们信息共 享的目的就达不到了，此时我们可以先把sessionid保存在persistentcookie中，然后在新窗口中读出来，就可以得到上一个窗口 SessionID了，这样通过session cookie和persistentcookie的结合我们就实现了跨窗口的session  tracking（会话跟踪）。<br /> &nbsp;<br /> 在一些web开发的书中，往往只是简单的把Session和cookie作为两种并列的http传送信息的方式，sessioncookies位于服务器 端，persistentcookie位于客户端，可是session又是以cookie为基础的，明白的两者之间的联系和区别，我们就不难选择合适的技 术来开发webservice了、<br /> 本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/taoff/articles/1921009.<a href="http://www.2cto.com/kf/web/asp/" target="_blank">asp</a>x						</div><img src ="http://www.cnitblog.com/stomic/aggbug/89764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2014-09-17 22:01 <a href="http://www.cnitblog.com/stomic/archive/2014/09/17/89764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是商品类型</title><link>http://www.cnitblog.com/stomic/archive/2014/08/13/89704.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 13 Aug 2014 07:10:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2014/08/13/89704.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/89704.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2014/08/13/89704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/89704.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/89704.html</trackback:ping><description><![CDATA[<div><div id="cnblogs_post_body"><div> <h5>商品类型不同于商品分类，指的是依据某一类商品的相同属性归纳成的属性集合，例如手机类型有屏幕尺寸、铃声、网络制式等共同的属性；书籍类型有出 版社、作者、ISBN号等共同的属性。商品类型可以在简单商品基础上增加更多的展示点，让顾客能全方位、多角度的来选择商品。商品类型包括扩展属性、参 数、规格等三个部分。</h5> <h3>本小节共包含5点。通过本部分的学习，您可以详细了解属性、扩展属性、详细参数表，为后续设置做准备。</h3> <ol><li style="cursor: pointer;">扩展属性</li><li style="cursor: pointer;">详细参数表</li><li style="cursor: pointer;">规格</li><li style="cursor: pointer;">顾客必填信息</li><li style="cursor: pointer;">通用商品类型</li></ol> <div clearfix"=""><strong>说明：</strong>在目前版本中，商品类型只适用于实体商品，虚拟类商品暂不支持。所谓实体商品就是在现实中看得见、摸得着的商品。</div> </div> <p><strong>接下来，我们根据一个具体商品来说明商品类型的内容</strong></p> <div> <h3>1、扩展属性</h3> <p>先说明一下商品的基本属性，基本属性就是大多数商品所共有的一些内容，如商品名称、货号、重量等基本内容。<br />扩展属性则是某类商品所独有的内容，不同商品内容有所区别。<br />在ECstore网店点击一个复杂商品的详细页面，可看到在前台显示的扩展属性内容。</p> <p><img src="http://www.shopex.cn/help/ecstore/images/8221001.jpg" alt="" height="176" width="335" /><br />本商品中，货号、编号等就是所有商品共有的内容，就称之为基本属性。 <br />而质地、场合、季节、版型等均是这一分类下商品所独有的内容，就是服装类商品的扩展属性。 <br /><br />不同类商品的扩展属性不尽相同，如食品会有保质期、产地、原材料；电脑会有主频、内在大小、显卡等内容，这些均可用扩展属性来表现。 </p> <h3>2、详细参数表</h3> <p>当商品需要展示的内容比较多，而扩展属性又不能完全显示其内容时，可以用详细参数表来更详尽的展示商品的信息。<br />如手机商品中，支持的频段可能有多个、主屏尺寸有多个、屏幕色彩有多种、音乐播放和文件格式有多种，用扩展属性已经不能完全展示商品的内容了，此时就可以用详细参数表来全部展示。<br />参数表可以分组，每一组中可以有详细内容。<br />通过详细参数表配合扩展属性基本可以把商品的所有内容全部展示出来，让顾客更方便的了解商品信息，从而产生相应的购买行动。<br /><img src="http://www.shopex.cn/help/ecstore/images/8221002.gif" alt="" height="312" width="329" /></p> <h3>3、规格</h3> <p>所谓规格是依据顾客的购买习惯而独立出来的一种商品的特殊属性，例如顾客先选好了某一款衬衫，然后必须再选择颜色和尺码才可以订购，这里的颜色和尺码称为规格。<br />具体介绍请参考规格文章</p> <h3>4、顾客必填信息</h3> <p>有些商品，用户购买时需要填写一些信息，以方便店主处理商品。<br />比如商品是鲜花，商店提供送花上门服务，顾客购买鲜花送给他人时可以填写一下收花人的信息，这样就方便店主直接送花上门。<br />比如商品是衬衫，商店提供免费喷字服务，顾客购买时就可以留一下字的内容，方便店主进行后续操作。<br />同时，顾客也可以说一下商品的注意事项或送货时间。<br />总之，这个项目是购物时的一个良好的补充，方便店主与顾客。</p> <h3>5、通用商品类型</h3> <p>在ECstore中，任何一个商品分类都要绑定商品类型才可。<br />而有些简单商品是不需要商品类型的，此时系统就会在这种商品分类下默认一个通用的商品类型。<br />通用商品类型是ECstore系统内置的仅含有商品名、重量、销售价格、简介、库存、品牌等基本属性的一种商品类型。</p> <p>如果是在简单商品分类下添加商品，或没有选择商品分类时，系统会自动启用通用商品类型，如图所示。<br /><img src="http://www.shopex.cn/help/ecstore/images/8221003.jpg" alt="" height="137" width="380" /><br />通用商品类型是一个默认的商品类型，不能删除。</p> </div></div></div><img src ="http://www.cnitblog.com/stomic/aggbug/89704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2014-08-13 15:10 <a href="http://www.cnitblog.com/stomic/archive/2014/08/13/89704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅谈淘宝类目属性体系：商品搜索背后的逻辑架构</title><link>http://www.cnitblog.com/stomic/archive/2014/07/16/89660.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 16 Jul 2014 03:30:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2014/07/16/89660.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/89660.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2014/07/16/89660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/89660.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/89660.html</trackback:ping><description><![CDATA[<p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">淘宝目前在线商品数超过 10 亿，如何精准的帮助用户找到他想要的商品呢？经过多年的探索，淘宝通过建立一套完整的类目属性体系，终于较好的解决了这一问题，今天就跟大家一起来谈谈淘宝的类目属性体系。</p><h2>一点点历史和架构</h2><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">2003 年淘宝刚上线时，商品量很少，没有分类。 后来，商品量上百，开始有了对商品进行单级分类，有点类似于现在的一级行业类目。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">等到商品上万的时候，商品的单级分类已经不能满足需求，开始有了多级分类，就是一颗类目树了。从 06 年开始引入了属性，商家按照属性模板填写属性，用户可以按照属性筛选商品。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">到了 08 年，开始将前后台类目分开，用户根据前台类目筛选商品，商家将商品挂到后台类目上，前后台类目树之间建立好映射。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">今天的淘宝类目属性体系主要由后台类目树、前台类目树、挂载在后来叶子类目上的商品属性模板以及管理前后台类目之间映射关系的类目管理平台组成，整体架构如下：</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">&nbsp;<a href="http://geekpark-img.qiniudn.com/uploads/reading/seed/893af95260fc572c45710d7731bc6a3e.png" target="_blank" style="color: #109eff; -webkit-tap-highlight-color: #ff5e99; outline: none;"><img src="http://geekpark-img.qiniudn.com/uploads/reading/seed/893af95260fc572c45710d7731bc6a3e.png?imageView/2/w/620/q/100" alt="" width="884" height="573" style="margin: 0px auto; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline; max-width: 650px; height: auto; display: block;" /></a></p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">从图中可以看出，淘宝类目属性体系是一个非常基础的数据服务，在商品发布页上商家选择后台类目上传商品信息，详情页上以面包屑的方式给用户显示商品所属的前台类目，在搜索结果页上让用户根据前台类目筛选商品。运营同学可以通过一个管理后台来管理前后台类目之间的映射关系以及后台类目的属性模板。</p><h3>后台类目</h3><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">后台类目面向商家，主要用于商品的分类和属性管理。商家上传商品时见到的就是后台类目，如下图：&nbsp;</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;"><a href="http://geekpark-img.qiniudn.com/uploads/reading/seed/b57b23426d29552e78a6c45e57bd0d88.png" target="_blank" style="color: #109eff; -webkit-tap-highlight-color: #ff5e99; outline: none;"><img src="http://geekpark-img.qiniudn.com/uploads/reading/seed/b57b23426d29552e78a6c45e57bd0d88.png?imageView/2/w/620/q/100" alt="" width="951" height="694" style="margin: 0px auto; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline; max-width: 650px; height: auto; display: block;" /></a></p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">后台类目有如下特点：</p><ul style="margin: 0px 0px 0px 2em; padding: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 22.5px; vertical-align: baseline; color: #444444;"><li style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">后台类目树中最重要的是叶子类目，也就是类目树上不能再往下分的类目,任何商品都必须挂载到后台叶子类目上。</li><li style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">叶子类目挂载属性模版，商家发布商品时选择好类目之后会根据属性模版，补充必填的商品属性信息，方可成功上传商品。</li><li style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">后台类目相对稳定，不能随便删除，叶子类目不能重复。</li></ul><h3>前台类目</h3><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">前台分类面向用户，方便用户筛选查找商品，大部分时候用户见到的类目都是前台类目。下图就是淘宝搜索结果页上的淘宝前台类目树：</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;"><a href="http://geekpark-img.qiniudn.com/uploads/reading/seed/00febb125ec98ad1d1161cc5040cd230.png" target="_blank" style="color: #109eff; -webkit-tap-highlight-color: #ff5e99; outline: none;"><img src="http://geekpark-img.qiniudn.com/uploads/reading/seed/00febb125ec98ad1d1161cc5040cd230.png?imageView/2/w/620/q/100" alt="" width="939" height="510" style="margin: 0px auto; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline; max-width: 650px; height: auto; display: block;" /></a></p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">前台类目有如下特点：</p><ul style="margin: 0px 0px 0px 2em; padding: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 22.5px; vertical-align: baseline; color: #444444;"><li style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">用户购买时看到的类目是前台类目。</li><li style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">前台类目通过跟后台映射间接和商品关联。</li><li style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">前台类目由后台叶子类目+属性组成，一个前台类目可以包含多个后台类目，一个后台类目也可以映射给多个前台类目。</li><li style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">前台类目不直接挂载属性模版，前台类目对应的属性来自后台叶子类目的公共属性。</li><li style="margin: 0px; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline;">前台类目很灵活，可重叠，可删除。</li></ul><h3>为什么要将前后台类目分开呢？</h3><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">介绍完淘宝的类目属性体系，或许你会问为啥要将前台类目和后台类目分开呢？直接用一套类目体系不就行了吗？这里我就给大家解释一下原因，到了 08 年，淘宝商品日益增多，类目层级也越来越深，买家越来越难找到想要的商品。淘宝的小二们就开始不断调整类目属性，把类目树变浅，让商品更容易被买家找到。只有一套类目体系的情况下，小二每次调整，卖家也必须跟着调整。如果只是改一次，卖家也能勉强接受，但这是周期性的。比如，在夏天服装这个类目下可能是连衣裙、衬衫等夏装，到了冬天就会变成打底裤、羽绒服等冬装了，而且卖家也都知道这些调整时合理的，但是一年到头这么调整，意味着他一年到头都在编辑类目，可能还得专门养个把人在那里，一天到晚改类目，无形中卖家的运营成本也就提高了。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">08 年的时候，有个淘宝的产品经理从线下零售巨头沃尔玛得到启发，他发现沃尔玛仓库里面的类目分区和货架区的类目分区是分离的，仓库里面的类目分区比较稳定，很少变化，而货架区的类目分区会根据活动和季节经常调整。类似的，淘宝也可以把原来的一套类目体系分为后台分类和前台分类，后台分类面向商家，用来挂载商品和属性模板，比较稳定很少变化；前台分类面向用户，主要方便用户查找商品，很灵活，可以经常调整。后台类目和前台类目之间通过映射联系起来，一个后台类目可以映射到多个前台类目，一个前台类目也可以包含多个后台类目。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">从技术的角度来看的话，前台类目就是在后台类目的基础上建立了一个虚拟类目。</p><h2>类目属性体系在搜索上的应用</h2><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">先来看看类目属性体系是怎么帮助提升搜索的精准度的，下图是说明了用户 query 到商品搜索结果的全过程：</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;"><a href="http://geekpark-img.qiniudn.com/uploads/reading/seed/2fd3b3a3c7207930bef0ac45e2944648.png" target="_blank" style="color: #109eff; -webkit-tap-highlight-color: #ff5e99; outline: none;"><img src="http://geekpark-img.qiniudn.com/uploads/reading/seed/2fd3b3a3c7207930bef0ac45e2944648.png?imageView/2/w/620/q/100" alt="" width="934" height="312" style="margin: 0px auto; padding: 0px; border: 0px; font-family: inherit; font-size: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; vertical-align: baseline; max-width: 650px; height: auto; display: block;" /></a></p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">用户输入 query：iPhone，淘宝类目属性体系预测到跟这个 query 最相关的前台类目是手机，然后前台类目通过映射找到后台类目手机，最终在这个类目下找到了&#8220;iPhone 5s 土豪金&#8221;这个商品。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">有了类目属性体系，用户搜索 iPhone，淘宝就不会给出手机套这样的配件了，因为它只会到手机类目下去找商品。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">有了类目属性体系，用户可以直接在搜索结果页按照类目和属性筛选商品，更加高效的找到想要的商品。而淘宝搜索可以通过记录用户搜索 query 之后的类目属性筛选行为，精准预测每一个 query 的类目和属性意图，当用户再次搜索的时候，可以根据 query 的类目属性意图，在 query 文本相关性的基础上计算出商品的类目和属性相关性，把包含 query，且跟用户的类目和属性意图最相关的商品优先展示给用户。这也是百度这样的通用搜索引擎所做不到的，因为它没有类目属性体系。</p><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">有了类目属性体系，还可以做好搜索算法的垂直化优化。也就是在每一个细分类目下，可以采用不同的商家权重和品牌权重，甚至可以有不同的排序公式。比如用户选择手机时，更多考虑各项参数和评测文章，这个时候相应的排序权重因子可以加强，而选择服装的时候，一张漂亮的主图就无比重要了，排序因子里面主图质量的权重就需要提升了。 有了类目属性体系，还可以做基于类目和属性的个性化搜索。搜索引擎通过用户的类目属性筛选日志，可以挖掘出用户的一些特征，比如性别，意向价格区间，偏好品牌，偏好品类等，从而可以对这个用户做个性化的展示。</p><h2>类目属性体系无处不在</h2><p style="margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; font-family: sans-serif; font-size: 15px; line-height: 25.5px; vertical-align: baseline; color: #444444;">除了电商，其实在各个需要帮助快速查找信息领域都可以见到类目属性体系的身影。比如：教育行业里面的课程分类，医疗行业的疾病和医院分类。当我们把用户查找的信息看做一个个实体的时候，对实体分类以帮助快速定位查找就是一个非常通用的方法。从这个角度来讲，Google 的 Knowledge Graph 可以看做是将电商网站里面的商品类目属性体系推广到了整个世界中的万事万物，它试图使用一套统一的类目属性网来囊括所有的实体，或许这就是通用搜索引擎的类目属性体系吧。</p><img src ="http://www.cnitblog.com/stomic/aggbug/89660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2014-07-16 11:30 <a href="http://www.cnitblog.com/stomic/archive/2014/07/16/89660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Wireshark抓包工具使用教程以及常用抓包规则</title><link>http://www.cnitblog.com/stomic/archive/2014/07/02/89638.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 02 Jul 2014 07:18:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2014/07/02/89638.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/89638.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2014/07/02/89638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/89638.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/89638.html</trackback:ping><description><![CDATA[<div><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; ">Wireshark是一个非常好用的抓包工具，当我们遇到一些和网络相关的问题时，可以通过这个工具进行分析，不过要说明的是，这只是一个工具，用法是非常灵活的，所以今天讲述的内容可能无法直接帮你解决问题，但是只要你有解决问题的思路，学习用这个软件就非常有用了。<br /> Wireshark官方下载地址：<a target="_blank" rel="external" style="text-decoration: none; color: #2060ff; " href="http://www.wireshark.org/download.html">http://www.wireshark.org/download.html</a><br /> 如果记不住，可以在百度中输入Wir就可以看到百度智能匹配的关键词了，选择第一个地址进去下载即可。</span><a target="_blank" href="http://img1.51cto.com/attachment/201112/100712927.png"><img alt="" src="http://img1.51cto.com/attachment/201112/100712927.png" border="0" /></a> <p><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; ">简单介绍下这个软件的一些常用按钮，因为本人也是接触这个软件不久，所以就简单的说下最常用的按钮好了，打开软件后，下面红框中的按钮从左到右依次是：<br /> -列表显示所有网卡的网络包情况，一般用的很少；<br /> <strong>-显示抓包选项，一般都是点这个按钮开始抓包；</strong><br /> -开始新的抓包，一般用的也很少；<br /> <strong>-停止抓包，当你抓完包之后，就是点这个停止了；<br /> -清空当前已经抓到的数据包，可以防止抓包时间过长机器变卡；</strong><br /> 而实际上，一般我们只要知道上面加粗部分的按钮功能，就可以完成抓包了，剩下的就是如何抓你想要的数据包，如何分析的问题了。</span></p> <p><a target="_blank" href="http://img1.51cto.com/attachment/201112/100819162.png"><img alt="" src="http://img1.51cto.com/attachment/201112/100819162.png" border="0" /></a></p> <p><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; ">接下来说下抓包选项界面，也就是点第二个按钮出来的界面，同样，这里也只介绍最常用的几个功能，首先下图中最上面的红框是选择需要抓的网卡，选择好网卡后会在下面显示这个网卡的IP地址。<br /> 然后Capture Filter中就是要写抓包规则的地方，也叫做&#8220;过滤规则&#8221;，我们下面要说的很多规则都是要写到这个框里的，规则写好后，点下面的Start就开始抓包了。</span></p> <p><a target="_blank" href="http://img1.51cto.com/attachment/201112/100900619.png"><img alt="" src="http://img1.51cto.com/attachment/201112/100900619.png" border="0" /></a></p> <p><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; ">当抓包结束之后，如果你需要把抓到的数据包找其他人分析，那么可以点菜单上的file，然后点Save As保存抓到的数据包，如下图：</span></p> <p><a target="_blank" href="http://img1.51cto.com/attachment/201112/100932901.png"><img alt="" src="http://img1.51cto.com/attachment/201112/100932901.png" border="0" /></a></p> <p><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; ">ok，到这里，基础的使用方法说完了，接下来步入很关键的内容。<br /> <br /> 使用Wireshark时最常见的问题，是当您使用默认设置时，会得到大量冗余信息，以至于很难找到自己需要的部分。这就是为什么过滤器会如此重要。它们可以帮助我们在庞杂的结果中迅速找到我们需要的信息。<br /> <br /> <strong>过滤器的区别</strong><br /> <strong>捕捉过滤器（CaptureFilters）：</strong>用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。<br /> <strong>显示过滤器（DisplayFilters）：</strong>在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。<br /> 那么我应该使用哪一种过滤器呢？<br /> <br /> <strong>两种过滤器的目的是不同的。</strong><br /> 捕捉过滤器是数据经过的第一层过滤器，它用于控制捕捉数据的数量，以避免产生过大的日志文件。<br /> 显示过滤器是一种更为强大（复杂）的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。<br /> <br /> 两种过滤器使用的语法是完全不同的。<br /> <br /> <span style="font-size: 16pt; line-height: 21px; "><span style="color: red; "><strong>捕捉过滤器</strong></span></span><br /> </span><a target="_blank" href="http://img1.51cto.com/attachment/201112/101047482.png"><img alt="" src="http://img1.51cto.com/attachment/201112/101047482.png" border="0" /></a></p> <p><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; "><strong>Protocol（协议）:</strong><br /> 可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.<br /> 如果没有特别指明是什么协议，则默认使用所有支持的协议。<br /> <br /> <strong>Direction（方向）:</strong><br /> 可能的值: src, dst, src and dst, src or dst<br /> 如果没有特别指明来源或目的地，则默认使用 &#8220;src or dst&#8221; 作为关键字。<br /> 例如，&#8221;host 10.2.2.2&#8243;与&#8221;src or dst host 10.2.2.2&#8243;是一样的。<br /> <br /> <strong>Host(s):</strong><br /> 可能的值： net, port, host, portrange.<br /> 如果没有指定此值，则默认使用&#8221;host&#8221;关键字。<br /> 例如，&#8221;src 10.1.1.1&#8243;与&#8221;src host 10.1.1.1&#8243;相同。<br /> <br /> <strong>Logical Operations（逻辑运算）:</strong><br /> 可能的值：not, and, or.<br /> 否(&#8220;not&#8221;)具有最高的优先级。或(&#8220;or&#8221;)和与(&#8220;and&#8221;)具有相同的优先级，运算时从左至右进行。<br /> 例如，<br /> &#8220;not tcp port 3128 and tcp port 23&#8243;与&#8221;(not tcp port 3128) and tcp port 23&#8243;相同。<br /> &#8220;not tcp port 3128 and tcp port 23&#8243;与&#8221;not (tcp port 3128 and tcp port 23)&#8221;不同。<br /> <br /> 例子：<br /> <br /> <strong>tcp dst port 3128</strong>&nbsp;&nbsp;//捕捉目的TCP端口为3128的封包。<br /> <strong>ip src host 10.1.1.1</strong>&nbsp;&nbsp;//捕捉来源IP地址为10.1.1.1的封包。<br /> <strong>host 10.1.2.3</strong>&nbsp;&nbsp;//捕捉目的或来源IP地址为10.1.2.3的封包。<br /> <strong>ether host e0-05-c5-44-b1-3c</strong>&nbsp;//捕捉目的或来源MAC地址为e0-05-c5-44-b1-3c的封包。如果你想抓本机与所有外网通讯的数据包时，可以将这里的mac地址换成路由的mac地址即可。<br /> <strong>src portrange 2000-2500</strong>&nbsp;&nbsp;//捕捉来源为UDP或TCP，并且端口号在2000至2500范围内的封包。<br /> <strong>not imcp</strong>&nbsp;&nbsp;//显示除了icmp以外的所有封包。（icmp通常被ping工具使用）<br /> <strong>src host 10.7.2.12 and not dst net 10.200.0.0/16</strong>&nbsp;//显示来源IP地址为10.7.2.12，但目的地不是10.200.0.0/16的封包。<br /> <strong>(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8</strong>&nbsp;&nbsp;//捕捉来源IP为10.4.1.12或者来源网络为10.6.0.0/16，目的地TCP端口号在200至10000之间，并且目的位于网络 10.0.0.0/8内的所有封包。<br /> <strong>src net 192.168.0.0/24</strong>&nbsp;<br /> <strong>src net 192.168.0.0 mask 255.255.255.0</strong>&nbsp;&nbsp;//捕捉源地址为192.168.0.0网络内的所有封包。<br /> <br /> <strong>注意事项：</strong><br /> <br /> 当使用关键字作为值时，需使用反斜杠&#8220;/&#8221;。<br /> &#8220;ether proto /ip&#8221; (与关键字&#8221;ip&#8221;相同).<br /> 这样写将会以IP协议作为目标。<br /> <br /> &#8220;ip proto /icmp&#8221; (与关键字&#8221;icmp&#8221;相同).<br /> 这样写将会以ping工具常用的icmp作为目标。<br /> <br /> 可以在&#8221;ip&#8221;或&#8221;ether&#8221;后面使用&#8221;multicast&#8221;及&#8221;broadcast&#8221;关键字。<br /> 当您想排除广播请求时，&#8221;no broadcast&#8221;就会非常有用。<br /> <br /> <strong>Protocol（协议）:</strong><br /> 您可以使用大量位于OSI模型第2至7层的协议。点击&#8221;Expression&#8230;&#8221;按钮后，您可以看到它们。<br /> 比如：IP，TCP，DNS，SSH<br /> <br /> <strong>String1, String2 (可选项):</strong><br /> <br /> 协议的子类。<br /> 点击相关父类旁的&#8221;+&#8221;号，然后选择其子类。<br /> <br /> <strong>Comparison operators （比较运算符）:</strong><br /> 可以使用6种比较运算符：<br /> </span></p> <p><a target="_blank" href="http://img1.51cto.com/attachment/201112/101202225.png"><img alt="" src="http://img1.51cto.com/attachment/201112/101202225.png" border="0" /></a><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; "><br /> <strong>Logical e&#173;xpressions（逻辑运算符）:</strong><br /> </span></p> <p><a target="_blank" href="http://img1.51cto.com/attachment/201112/101215970.png"><img alt="" src="http://img1.51cto.com/attachment/201112/101215970.png" border="0" /></a><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; "><br /> <span style="font-size: 16pt; line-height: 21px; "><span style="color: red; "><strong>显示过滤器</strong></span></span></span></p> <p><a target="_blank" href="http://img1.51cto.com/attachment/201112/101236176.png"><img alt="" src="http://img1.51cto.com/attachment/201112/101236176.png" border="0" /></a></p> <p><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; "><strong>例子：</strong><br /> <strong>snmp</strong>&nbsp;||&nbsp;<strong>dns</strong>&nbsp;||&nbsp;<strong>icmp</strong>&nbsp;//显示SNMP或DNS或ICMP封包。&nbsp;<br /> <strong>ip.addr == 10.1.1.1</strong>&nbsp;&nbsp;//显示来源或目的IP地址为10.1.1.1的封包。<br /> ip.src != 10.1.2.3 or ip.dst != 10.4.5.6&nbsp;&nbsp;//显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。<br /> 换句话说，显示的封包将会为：<br /> 来源IP：除了10.1.2.3以外任意；目的IP：任意<br /> 以及<br /> 来源IP：任意；目的IP：除了10.4.5.6以外任意<br /> <strong>ip.src != 10.1.2.3 and ip.dst != 10.4.5.6</strong>&nbsp;&nbsp;//显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包。<br /> 换句话说，显示的封包将会为：<br /> 来源IP：除了10.1.2.3以外任意；同时须满足，目的IP：除了10.4.5.6以外任意<br /> <strong>tcp.port == 25</strong>&nbsp;&nbsp;//显示来源或目的TCP端口号为25的封包。&nbsp;<br /> <strong>tcp.dstport == 25</strong>&nbsp;&nbsp;//显示目的TCP端口号为25的封包。&nbsp;<br /> <strong>tcp.flags</strong>&nbsp;&nbsp;//显示包含TCP标志的封包。&nbsp;<br /> <strong>tcp.flags.syn == 0&#215;02</strong>&nbsp;&nbsp;//显示包含TCP SYN标志的封包。&nbsp;<br /> 如果过滤器的语法是正确的，表达式的背景呈绿色。如果呈红色，说明表达式有误。<br /> 更为详细的说明请见：<a target="_blank" rel="external" style="text-decoration: none; color: #2060ff; " href="http://openmaniak.com/cn/wireshark_filters.php">http://openmaniak.com/cn/wireshark_filters.php</a><br /> <br /> 以上只是抓包和简单的过滤，那么其实如果你要想达到能够分析这些网络包的要求时，还需要了解下一些数据包的标记，比如我们常说的TCP三次握手是怎么回事？<br /> <br /> <span style="font-size: 16pt; line-height: 21px; "><span style="color: red; "><strong>三次握手Three-way Handshake</strong></span></span><br /> 一个虚拟连接的建立是通过三次握手来实现的<br /> <strong>1. (Client) &#8211;&gt; [SYN] &#8211;&gt; (Server)</strong><br /> 假如Client和Server通讯. 当Client要和Server通信时，Client首先向Server发一个SYN (Synchronize) 标记的包，告诉Server请求建立连接.<br /> 注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources).  认识到这点很重要，只有当Server收到Client发来的SYN包，才可建立连接，除此之外别无他法。因此，如果你的防火墙丢弃所有的发往外网接口的 SYN包，那么你将不 能让外部任何主机主动建立连接。<br /> <br /> <strong>2. (Client) &lt;&#8211; [SYN/ACK] &lt;&#8211;(Server)</strong><br /> 接着，Server收到来自Client发来的SYN包后，会发一个对SYN包的确认包(SYN/ACK)给Client，表示对第一个SYN包的确认，并继续握手操作.<br /> 注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.<br /> <br /> <strong>3. (Client) &#8211;&gt; [ACK] &#8211;&gt; (Server)</strong><br /> Client收到来自Server的SYN/ACK 包,Client会再向Server发一个确认包(ACK)，通知Server连接已建立。至此，三次握手完成，一个TCP连接完成。<br /> Note: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后，TCP连接的每个包都会设置ACK位。<br /> <br /> 这就是为何连接跟踪很重要的原因了.  没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接.一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个  好主意). 而当状态型防火墙收到此种包时，它会先在连接表中查找是否属于哪个已建连接，否则丢弃该包。<br /> <br /> <strong>四次握手Four-way Handshake</strong><br /> 四次握手用来关闭已建立的TCP连接<br /> <br /> 1. (Client) &#8211;&gt; ACK/FIN &#8211;&gt; (Server)<br /> 2. (Client) &lt;&#8211; ACK &lt;&#8211; (Server)<br /> 3. (Client) &lt;&#8211; ACK/FIN &lt;&#8211; (Server)<br /> 4. (Client) &#8211;&gt; ACK &#8211;&gt; (Server)<br /> <br /> 注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。<strong>ACK/FIN 包(ACK 和FIN 标记设为1)通常被认为是FIN(终结)包</strong>.然而, 由于连接还没有关闭, FIN包总是打上ACK标记. 没有ACK标记而仅有FIN标记的包不是合法的包，并且通常被认为是恶意的。<br /> <br /> <strong>连接复位Resetting a connection</strong><br /> <br /> 四次握手不是关闭TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送.  注意在，由于RST包不是TCP连接中的必须部分, 可以只发送RST包(即不带ACK标记). 但在正常的TCP连接中RST包可以带ACK确认标记<br /> <br /> 请注意RST包是可以不要收到方确认的?<br /> <br /> 无效的TCP标记Invalid TCP Flags<br /> <br /> 到目前为止，你已经看到了 SYN, ACK, FIN, 和RST 标记. 另外，还有PSH (Push) 和URG (Urgent)标记.<br /> <br /> 最常见的非法组合是SYN/FIN 包. 注意:由于 SYN包是用来初始化连接的, 它不可能和 FIN和RST标记一起出现. 这也是一个恶意攻击.<br /> <br /> 由于现在大多数防火墙已知 SYN/FIN 包, 别的一些组合,例如SYN/FIN/PSH, SYN/FIN/RST, SYN/FIN/RST/PSH。很明显，当网络中出现这种包时，很你的网络肯定受到攻击了。<br /> <br /> 别的已知的非法包有FIN  (无ACK标记)和&#8221;NULL&#8221;包。如同早先讨论的，由于ACK/FIN包的出现是为了关闭一个TCP连接，那么正常的FIN包总是带有 ACK  标记。&#8221;NULL&#8221;包就是没有任何TCP标记的包(URG,ACK,PSH,RST,SYN,FIN都为0)。<br /> <br /> 到目前为止，正常的网络活动下，TCP协议栈不可能产生带有上面提到的任何一种标记组合的TCP包。当你发现这些不正常的包时，肯定有人对你的网络不怀好意。<br /> <br /> <strong>UDP (用户数据包协议User Datagram Protocol)</strong><br /> <br /> TCP是面向连接的，而UDP是非连接的协议。UDP没有对接受进行确认的标记和确认机制。对丢包的处理是在应用层来完成的。(or accidental arrival).<br /> <br /> 此处需要重点注意的事情是：在正常情况下，当UDP包到达一个关闭的端口时，会返回一个UDP复位包。由于UDP是非面向连接的, 因此没有任何确认信息来确认包是否正确到达目的地。因此如果你的防火墙丢弃UDP包，它会开放所有的UDP端口(?)。<br /> <br /> 由于Internet上正常情况下一些包将被丢弃，甚至某些发往已关闭端口(非防火墙的)的UDP包将不会到达目的，它们将返回一个复位UDP包。<br /> <br /> 因为这个原因，UDP端口扫描总是不精确、不可靠的。<br /> <br /> 看起来大UDP包的碎片是常见的DOS (Denial of Service)攻击的常见形式 (这里有个DOS攻击的例子，<a target="_blank" rel="external" style="text-decoration: none; color: #2060ff; " href="http://grc.com/dos/grcdos.htm">http://grc.com/dos/grcdos.htm</a>&nbsp;).<br /> <br /> ICMP (网间控制消息协议Internet Control Message Protocol)<br /> <br /> 如同名字一样， ICMP用来在主机/路由器之间传递控制信息的协议。 ICMP包可以包含诊断信息(ping, traceroute -  注意目前unix系统中的traceroute用UDP包而不是ICMP)，错误信息(网络/主机/端口 不可达 network/host/port  unreachable), 信息(时间戳timestamp, 地址掩码address mask request, etc.)，或控制信息  (source quench, redirect, etc.) 。<br /> <br /> 你可以在<a target="_blank" rel="external" style="text-decoration: none; color: #2060ff; " href="http://www.iana.org/assignments/icmp-parameters">http://www.iana.org/assignments/icmp-parameters</a>&nbsp;中找到ICMP包的类型。<br /> <br /> 尽管ICMP通常是无害的，还是有些类型的ICMP信息需要丢弃。<br /> <br /> Redirect (5), Alternate Host Address (6), Router Advertisement (9) 能用来转发通讯。<br /> <br /> Echo (8), Timestamp (13) and Address Mask Request (17)  能用来分别判断主机是否起来，本地时间 和地址掩码。注意它们是和返回的信息类别有关的。  它们自己本身是不能被利用的，但它们泄露出的信息对攻击者是有用的。<br /> <br /> ICMP消息有时也被用来作为DOS攻击的一部分(例如：洪水ping flood ping,死 ping ?呵呵，有趣 ping of death)?/p&gt;<br /> <br /> 包碎片注意A Note About Packet Fragmentation<br /> <br /> 如果一个包的大小超过了TCP的最大段长度MSS (Maximum Segment Size) 或MTU (Maximum Transmission Unit)，能够把此包发往目的的唯一方法是把此包分片。由于包分片是正常的，它可以被利用来做恶意的攻击。<br /> <br /> 因为分片的包的第一个分片包含一个包头，若没有包分片的重组功能，包过滤器不可能检测附加的包分片。典型的攻击Typical attacks  involve in overlapping the packet data in which packet header is  典型的攻击Typical attacks involve in overlapping the packet data in which  packet header isnormal until is it overwritten with different  destination IP (or port) thereby bypassing firewall rules。包分片能作为 DOS  攻击的一部分，它可以crash older IP stacks 或涨死CPU连接能力。<br /> <br /> Netfilter/Iptables中的连接跟踪代码能自动做分片重组。它仍有弱点，可能受到饱和连接攻击，可以把CPU资源耗光。<br /> <br /> OK，到此为止，关于Wireshark抓包工具的一些小教程已经写完了，而导致我想写这么一个纠结的教程的原因是，前几天通过这个抓包解决了梦幻西游在网维大师无盘上容易掉线的问题，当时捕捉到梦幻西游掉线时的数据包是这样的。<br /> 注意下图中的红色数据，123.58.184.241是梦幻西游的服务器，而192.168.1.41是玩梦幻西游的客户机，在掉线时，发现是先有梦幻西 游的服务器向客户机发送一个[FIN,ACK]数据包，根据上面的解释，FIN标记的数据包是代表要断开连接的意思，而接着客户机又回给服务器一个确认断 开链接包。当看到这个抓包数据时，就意识到，大家说的在网维大师系统虚拟盘上梦幻爱掉线的问题，并非普通的网络问题，因为通过数据包的信息来看，是梦幻服 务器主动要求断开链接，产生这个情况无非是以下几个原因：<br /> 1、服务器发现客户端非法，比如有外挂什么的，踢掉了客户机；<br /> 2、服务器压力大，踢掉了客户机；<br /> 3、总之不是客户端问题导致的掉线；</span></p> <p><a target="_blank" href="http://img1.51cto.com/attachment/201112/101341578.png"><img alt="" src="http://img1.51cto.com/attachment/201112/101341578.png" border="0" width="650" /></a></p> <p><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; ">那 么既然结论是如此，为什么会有在网维大师系统虚拟盘上容易出现梦幻掉线问题呢？原因是由于网维大师系统虚拟盘是模拟真实硬盘方式来实现的，而在模拟过程 中，将硬盘的序列号设置为固定过的OSDIY888了，而梦幻西游刚好后识别客户机硬盘信息，发现大量客户端的硬盘序列号都是一样的，就认为是作弊或者使 用挂机外挂了，结果就导致随机被服务器踢下线的情况发生，后来我们将硬盘序列号设置为空，则没再出现该问题。这个问题在未来的新版本中会解决掉。<br /> <br /> 说这个案例的目的并不是为了说明抓包多有用，而是想说明一些解决问题的思路和方法，有些人是有思路，但是缺方法，比如不会用工具，而有些人收集了很多工具 却不会用，而我其实就属于后者，几年前就收集了n多工具，但是用到的没几个。慢慢的学会用这些工具后，发现思维+工具，解决问题是效率暴增，接下来的几天 里，会陆续介绍写小工具给大家，也希望大家有空学习下，有问题先百度，再自己摸索，而不是一味的求助，毕竟求人不如求己！自己能直接搞定，是皆大欢喜的事 情~</span></p> <p><span style="color: #333333; font-family: 'Microsoft YaHei', calibri, verdana; font-size: 14px; line-height: 22px; "><strong>注意：由于某些系统为了防止ARP攻击，都免疫掉了一个Npptools.dll文件，这会导致该软件无法正常安装，打下这个补丁就可以了。</strong></span></p></div><img src ="http://www.cnitblog.com/stomic/aggbug/89638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2014-07-02 15:18 <a href="http://www.cnitblog.com/stomic/archive/2014/07/02/89638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【案例】电商购物流程设计（组图）</title><link>http://www.cnitblog.com/stomic/archive/2013/03/19/87108.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Tue, 19 Mar 2013 09:34:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2013/03/19/87108.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/87108.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2013/03/19/87108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/87108.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/87108.html</trackback:ping><description><![CDATA[<div> 畅游在各大电商网站的你，在<a href="http://www.boogle.cn/" target="_blank">网购</a>时不知曾否察觉到有些小不同？<br /><br />&nbsp;&nbsp;&nbsp; 排开具体的商品内容、视觉样式，回忆下那些我们熟悉的商品页面。当然，这里并不是玩大家来找茬游戏的，需要火眼金睛审视于细枝末叶。我们可以从界面的细节去体验，甚至还可以眯起眼去发现点什么。<br /><br />&nbsp;&nbsp;&nbsp; 亲，你有没有想起有哪里不同？<br /><br />&nbsp;&nbsp; 好吧，揭晓答案：不同点在于商品详情页面的购买按钮。<center><center><img alt="" src="http://pics.shoes.net.cn/news/2012/10/04/4265157427454.jpg" border="0" height="382" width="550" /><br /></center>&nbsp;&nbsp;&nbsp; <br /></center><p>&nbsp;&nbsp;&nbsp; 抱着打破沙锅问到底的精神去逛了逛其他的电商网站，不经发现这也许和电商网站的类型相关。比如淘宝、拍拍属于C2C类型，有明显的&#8220;直接购买&#8221;、&#8220;加入购物车&#8221;按钮；京东、易迅属于B2C类型，只有&#8220;加入购物车&#8221;按钮。如此设计是出于什么考虑呢？<br /><br /><strong>平台的不同决定了购物车扮演的角色不同<br /></strong><br />&nbsp;&nbsp;&nbsp; 首先，从平台性质上来说，C2C是一个多店铺系统，等同于小店的购物体验；B2C是单个商城系统，等同于大型超市的购物体验。</p><p align="center"><img alt="" src="http://pics.shoes.net.cn/news/2012/10/04/4266153053499.jpg" border="0" height="183" width="550" /></p><p><br />&nbsp;&nbsp;&nbsp; 多店铺系统即店铺是分布各地的，可以比作现实生活中的小店式购物。小店是没有专属<a href="http://www.boogle.cn/" target="_blank">物流</a>系统的，所以在C2C下单付款后也需再到线上确认收货和评价。对于同一种商品在不同的店里可能有多种价格，并且价格是由卖家来定的。我们点击&#8220;加入购物车&#8221;后，会留在当前页面，所以这里的购物车更倾向于在本店里继续购买。<br /><br />&nbsp;&nbsp;&nbsp; B2C可以比作现实生活中的大型超市购物，是单个的商城系统。有统一的商品标签、唯一的商品价格，有自己专属的<a href="http://www.boogle.cn/" target="_blank">物流</a>系统，线下签收后无需再到线上确认收货。在&#8220;加入购物车&#8221;后，会跳转到其它页面，因为不论跳转到哪里都还是属于本商城内，所以这里购物车强调的是网站整体概念，即所有商品为一家所有。<br /></p><center><img alt="" src="http://pics.shoes.net.cn/news/2012/10/04/4267253526838.jpg" border="0" height="372" width="550" /><br /></center><strong><br />1个行动按钮 VS 2个行动按钮<br /></strong><center><img alt="" src="http://pics.shoes.net.cn/news/2012/10/04/4267954922613.jpg" border="0" height="308" width="550" /><br /></center><br />&nbsp;&nbsp;&nbsp; 可以肯定的是，在电子商务网站上，大部分用户会购买单件商品。所以从购买行为上来说，&#8220;立即购买&#8221;应该是用户最需要的操作。假如界面上只有1个按钮，最应该是&#8220;立即购买&#8221;而非&#8220;加入购物车&#8221;，但为什么B2C会仅使用&#8220;加入购物车&#8221;呢？<br /><br />&nbsp;&nbsp;&nbsp;   在体验购买过程中可以看出，B2C的&#8220;加入购物车&#8221;是可以完成所有购买操作的。用户将商品&#8220;加入购物车&#8221;后，网站会询问用户是结算还是继续购物，它为立即 购买的用户增加了一步选择，但也增加了用户选择更多产品的可能性。或许我们可以把B2C这样的设计理解为是一种促进消费的手段，类似于宜家迷宫式购物路线 的设计：独特的店面路线设计使得宜家创造了一个不只是家具店，而是所有商店都达不到的惊人成绩&#9472;&#9472;高达&#8220;60％&#8221;的购买品不在顾客原本想买的清单之内。 （下图为IKEA购物地图）<br /><center><img alt="" src="http://pics.shoes.net.cn/news/2012/10/04/4268256489904.jpg" border="0" /><br /></center><br />&nbsp;而 对于C2C而言，大部分卖家都是小店铺，将&#8220;计划消费&#8221;尽快&#8220;变现&#8221;是最重要的任务。购买过程拖得越久，买家就会查看更多的店铺，会有更多比较，交易的流 失率就会越大。所以，在C2C中&#8220;立即购买&#8221;让卖家尽早进入到订单页才是最关键的。但&#8220;加入购物车&#8221;的合并订单功能又不可少，因此C2C会适合放两个按 钮。<br /><br />&nbsp;另外，淘宝在早期没有购物车功能的，后来是为了可以合并订单、避免邮费叠加，再加上丰富的促销活动，所以才添加了购物车功能。<br /><br /><strong>购物流程的差异<br /></strong><br />&nbsp;商业模式的不同并不仅仅影响到用户的购买行为，同样也对整个后续流程有影响。<br /><br />&nbsp;C2C 的物流体系由各个卖家自己定制，自己想用什么物流就用什么物流。换言之，发不发货、什么时候发货是无法统一管理的。在这种模式下，淘宝和用户都得关注产品 什么时候到货，到货后，用户还需要在线上签收、评价等。用户必须把这些流程都走完才算购买结束，否则就会不停提示你。（下图为淘宝的购买流程）<br /><center><img alt="" src="http://pics.shoes.net.cn/news/2012/10/04/4268856339546.jpg" border="0" height="63" width="550" /><br /></center><br />&nbsp;而B2C则不同，它们有自己专属的、统一的物流系统。从则上来说，网站可以保证每笔货都准时送到，而且质量还没问题。所以用户的注意力只需关注到&#8220;提交订单&#8221;为止，其他要做的完全在线下进行就可以，实际上在线上也没有签收的选项。（下图为京东的购买流程）<br /><center><img alt="" src="http://pics.shoes.net.cn/news/2012/10/04/4269412891191.jpg" border="0" height="125" width="550" /><br /></center><br />&nbsp; 很明显，B2C的买家关注的信息少多了，购物过程也会轻松不少。<br /><br /><strong>个人中心结构的差异<br /></strong><br />&nbsp;先看下<a href="http://www.boogle.cn/detail/2.html" target="_blank">淘宝网</a>和<a href="http://www.boogle.cn/detail/5.html" target="_blank">京东商城</a>的个人中心页面：<br /><center><img alt="" src="http://pics.shoes.net.cn/news/2012/10/04/4269920862838.jpg" border="0" height="208" width="550" /><br /><br /></center><center><img alt="" src="http://pics.shoes.net.cn/news/2012/10/04/4270370397166.jpg" border="0" height="208" width="550" /><br /></center><br />&nbsp;不难发现，淘宝有一套强大的个人中心体系，甚至左侧导航栏不够用，需要占据横向的导航标签。而京东横向导航栏展示的是其他模块标签，跳转到其他页面时头部的导航标签都不会变化。<br /><br />&nbsp;这样做有什么好处呢？还是回到之前的论点，B2C期望的是用户能尽量多买东西，个人中心也应该是可以很方便返回到购买商品页面的。而C2C由于管理系统的庞大，是买家和卖家的共用平台，在这里有许多专项的任务需要处理，所以它独立出来了。<br /><br /><strong>写在最后<br /></strong><br />&nbsp;&nbsp;&nbsp;&nbsp; 由于电商网站类型的不同，购买按钮的设计就会不同。因而购物车在其中扮演的角色也不一样，还会影响到后续的购买流程、个人中心模块的结构。总之，不同商业模式的网站，为用户创造的购物体验也是不同的。（来源：环球鞋网电商频道；编选：中国电子商务研究中心）</div><img src ="http://www.cnitblog.com/stomic/aggbug/87108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2013-03-19 17:34 <a href="http://www.cnitblog.com/stomic/archive/2013/03/19/87108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大话Session</title><link>http://www.cnitblog.com/stomic/archive/2012/01/08/77093.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Sat, 07 Jan 2012 21:05:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2012/01/08/77093.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/77093.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2012/01/08/77093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/77093.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/77093.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在web开发 中，session是个非常重要的概念。在许多动态网站的开发者看来，session就是一个变量，而且其表现像个黑洞，他只需要将东西在合适的时机放进 这个洞里，等需要的时候再把东西取出来。这是开发者对session最直观的感受，但是黑洞里的景象或者说session内部到底是怎么工作的呢？当笔者 向身边的一些同事或朋友问及相关的更进一步的细节时，很多人往往要么含糊其辞要么主观臆断，所谓知其...&nbsp;&nbsp;<a href='http://www.cnitblog.com/stomic/archive/2012/01/08/77093.html'>阅读全文</a><img src ="http://www.cnitblog.com/stomic/aggbug/77093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2012-01-08 05:05 <a href="http://www.cnitblog.com/stomic/archive/2012/01/08/77093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>超时时间已到.错误及Max Pool Size设置</title><link>http://www.cnitblog.com/stomic/archive/2011/09/29/75680.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Thu, 29 Sep 2011 04:22:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2011/09/29/75680.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/75680.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2011/09/29/75680.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/75680.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/75680.html</trackback:ping><description><![CDATA[<div><p>遇到这个错误：</p><p><span style="color: red;">超时时间已到。超时时间已到，但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用，并且达到了最大池大小。 </span><br /></p><p><span style="color: red;" id="intelliTXT" name="intelliTxt">               问题描述：我们获取连接超过连接池最大值时产生如上异常。通常连接池最大值为100。当我们获取连接超过最大值时，ADO.NET等待连接池返回连接而超时，这样将抛出如上异常</span><span id="intelliTXT" name="intelliTxt"><br />                 解决办法：首先要做的是在我们使用连接后立即关闭连接。如果没有关闭连接那么连接将保存到连接池中知道GC来销毁。这种情况下你以为连接池没有到达最大值 但实际上连接池已经到达了最大值               其次我们可以通过连接字符串中的</span><span id="intelliTXT" name="intelliTxt">Max                Pool Size = N;来动态扩大连接池中的连接</span><span id="intelliTXT" name="intelliTxt">最大</span><span id="intelliTXT" name="intelliTxt">数量。<br />               </span><br /></p><p>说明： <br /></p><p>也就是在connectionString中如果未指定<strong>max pool size</strong>的值，则<strong>max pool size</strong>=100，当访问人员同时连接数据库的数量为101人时，则等待SqlConnection.ConnectionTimeout设置的时间（默认是15 秒）后，还是没有可用的Connection则会出现上面的错误。<br /></p><p>当我们设置为：</p><p>"Server=(local);  Integrated Security=SSPI; Database=Northwind;                Max Pool  Size=512; Min Pool Size=5"&nbsp;  时。则访问人员同时连接数据库的数量为513时，则等待SqlConnection.ConnectionTimeout设置的时间（默认是15  秒）后，还是没有可用的Connection则 就会出现上面的错误。<br /></p><p>&nbsp;</p><p>&nbsp;</p><div style="margin-left: 28.5pt; text-indent: -18pt;">-<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>Connection Pool </strong><strong>是什么呢 ?</strong></div> <div>每 当程序需要读写数据库的时候。Connection.Open()会使用ConnectionString连接到数据库，数据库会为程序建立  一个连接，并且保持打开状态，此后程序就可以使用T-SQL语句来查询/更新数据库。当执行到Connection.Close()后，数据库就会关闭当  前的连接。很好，一切看上去都是如此有条不紊。</div> <div>&nbsp;</div> <div>但是如果我的程序需要不定时的打开和关闭连接，（比 如说 ASP.Net 或是 Web Service ），例如当Http  Request发送到服务器的时候、，我们需要打开Connection  然后使用Select* from Table   返回一个DataTable/DataSet给客户端/浏览器，然后关闭当前的Connection。那每次都Open/Close   Connection 如此的频繁操作对于整个系统无疑就成了一种浪费。</div> <div>&nbsp;</div> <div>ADO.Net Team就给出了一个比较好地解决方法。将先前的Connection保存起来，当下一次需要打开连接的时候就将先前的Connection 交给下一个连接。这就是Connection Pool。<br /><br /></div>       <div style="margin-left: 28.5pt; text-indent: -18pt;">-<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong>Connection Pool </strong><strong>如何工作的？</strong></div> <div>首 先当一个程序执行Connection.open()时候，ADO.net就需要判断，此连接是否支持Connection Pool   (Pooling 默认为True)，如果指定为False,   ADO.net就与数据库之间创建一个连接（为了避免混淆，所有数据库中的连接，都使用&#8221;连接&#8221;描述），然后返回给程序。</div><p>如果指定为  True，ADO.net就会根据ConnectString创建一个Connection Pool，然后向Connection   Pool中填充Connection（所有.net程序中的连接，都使用&#8221;Connection&#8221;描述）。填充多少个Connection由Min   Pool Size   (默认为0)属性来决定。例如如果指定为5，则ADO.net会一次与SQL数据库之间打开5个连接，然后将4个Connection，保存在  Connection Pool中，1个Connection返回给程序。</p> <div>&nbsp;</div> <div>当程序执行到Connection.close() 的时候。如果Pooling 为True，ADO.net  就把当前的Connection放到Connection Pool并且保持与数据库之间的连接。</div><p>同 时还会判断Connection  Lifetime(默认为0)属性，0代表无限大，如果Connection存在的时间超过了Connection   LifeTime，ADO.net就会关闭的Connection同时断开与数据库的连接，而不是重新保存到Connection  Pool中。</p><p>（这个设置主要用于群集的SQL 数据库中，达到负载平衡的目的）。如果Pooling指定为False，则直接断开与数据库之间的连接。</p> <div>&nbsp;</div> <div>然后当下一次Connection.Open()  执行的时候，ADO.Net就会判断新的ConnectionString与之前保存在Connection  Pool中的Connection的connectionString是否一致。</div><p>（ADO.Net 会将ConnectionString转成二进制流，所 以也就是说，新的ConnectionString与保存在Connection   Pool中的Connection的ConnectionString必须完全一致，即使多加了一个空格，或是修改了Connection   String中某些属性的次序都会让ADO.Net认为这是一个新的连接，而从新创建一个新的连接。所以如果您使用的UserID,Password的认  证方式，修改了Password也会导致一个Connection，如果使用的是SQL的集成认证，就需要保存两个连接使用的是同一个）。</p><p>然 后 ADO.net需要判断当前的Connection   Pool中是否有可以使用的Connection(没有被其他程序所占用)，如果没有的话，ADO.net就需要判断ConnectionString设  置的Max Pool Size （默认为100），如果Connection Pool中的所有Connection没有达到Max Pool   Size，ADO.net则会再次连接数据库，创建一个连接，然后将Connection返回给程序。</p><p>如果已经达到了  MaxPoolSize，ADO.net就不会再次创建任何新的连接，而是等待Connection   Pool中被其他程序所占用的Connection释放，这个等待时间受SqlConnection.ConnectionTimeout（默认是15  秒）限制，也就是说如果时间超过了15秒，SqlConnection就会抛出超时错误（所以有时候如果SqlConnection.open()方法抛  出超时错误，一个可能的原因就是没有及时将之前的Connnection关闭，同时Connection   Pool数量达到了MaxPoolSize。）</p><p>如果有可用的Connection，从Connection Pool   取出的Connection也不是直接就返回给程序，ADO.net还需要检查ConnectionString的ConnectionReset属性  (默认为True)是否需要对Connection   最一次reset。这是由于，之前从程序中返回的Connection可能已经被修改过，比如说使用  SqlConnection.ChangeDatabase method   修改当前的连接，此时返回的Connection可能就已经不是连接当前的Connection String指定的Initial   Catalog数据库了。所以需要reset一次当前的连接。但是由于所有的额外检查都会增大ADO.net Connection Pool   对系统的开销。</p></div><img src ="http://www.cnitblog.com/stomic/aggbug/75680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2011-09-29 12:22 <a href="http://www.cnitblog.com/stomic/archive/2011/09/29/75680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web Service入门简介(一个简单的WebService示例</title><link>http://www.cnitblog.com/stomic/archive/2011/08/03/74951.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Tue, 02 Aug 2011 18:50:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2011/08/03/74951.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/74951.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2011/08/03/74951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/74951.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/74951.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Web Service入门简介  一、Web Service简介 1.1、Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求，轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务，使用WSDL文件进行说明，并通过UDDI进行注册。 XML：(Ext...&nbsp;&nbsp;<a href='http://www.cnitblog.com/stomic/archive/2011/08/03/74951.html'>阅读全文</a><img src ="http://www.cnitblog.com/stomic/aggbug/74951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2011-08-03 02:50 <a href="http://www.cnitblog.com/stomic/archive/2011/08/03/74951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Skype打不开了，一点打开就显示“skype.exe-应用程序错误”</title><link>http://www.cnitblog.com/stomic/archive/2011/05/30/74322.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Mon, 30 May 2011 01:57:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2011/05/30/74322.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/74322.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2011/05/30/74322.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/74322.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/74322.html</trackback:ping><description><![CDATA[<div><pre id="question-content"><strong>问题：</strong><br />"0x008d5398"指令引用的&#8220;0x00000004&#8221;内存。该内存不能为"read".<br />要终止程序，请单击&#8220;确定&#8221;。<br />要调试程序，请单击&#8220;取消&#8221;。<br /><br /><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/stomic/skype应用错误.jpg" width="200" height="59" /><br /><br /><strong>解决：</strong><br /><div><pre id="best-answer-content" mb10="">1点击开始--运行--键入 %appdata%\skype， 或者找到skype的安装目录。<br />2.删除shared.lck和shared.xml<br />3重新启动skype, shared.xml会被重新创建<br />你应该可以重新正常使用skype</pre></div><br /></pre></div><img src ="http://www.cnitblog.com/stomic/aggbug/74322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2011-05-30 09:57 <a href="http://www.cnitblog.com/stomic/archive/2011/05/30/74322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[精华] 英语基本语法</title><link>http://www.cnitblog.com/stomic/archive/2011/03/21/73143.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Mon, 21 Mar 2011 03:40:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2011/03/21/73143.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/73143.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2011/03/21/73143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/73143.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/73143.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.&nbsp;名词&nbsp;&nbsp;&nbsp;　&nbsp;名词可以分为专有名词（Proper&nbsp;Nouns）和普通名词&nbsp;(Common&nbsp;Nouns），专有名词是某个（些）人，地方，机构等专有的名称，如Beijing，China等。普通名词是一类人或东西或是一个抽象概念的名词，如：book，sadness等。普通名词又可分为下面四类：　&nbs...&nbsp;&nbsp;<a href='http://www.cnitblog.com/stomic/archive/2011/03/21/73143.html'>阅读全文</a><img src ="http://www.cnitblog.com/stomic/aggbug/73143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2011-03-21 11:40 <a href="http://www.cnitblog.com/stomic/archive/2011/03/21/73143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)WEB应用中的SESSION知多少? </title><link>http://www.cnitblog.com/stomic/archive/2010/05/17/66134.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Mon, 17 May 2010 05:04:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2010/05/17/66134.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/66134.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2010/05/17/66134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/66134.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/66134.html</trackback:ping><description><![CDATA[作为一名WEB开发程序员，对session的理解是最基础的，但是现状是WEB程序员遍地都是，随便一划拉一大把，不过估计能把session能透彻理解的人应该不是很多，起码我之前对此是知之甚少，偶然看到的一个关于session的文章，经过适当整理，特拿来与大家分享，因为时间太久，文章出处已然记不清楚，无法附上，请原作理解，若有必要我会删除，谢谢！<br><br>
<p><span style="COLOR: #0000ff"><strong>目 录 <br>一、Session <br>二、Cookies <br>三、Cookies机制 <br>四、Session机制 <br>五、Cookies机制与Session机制的区别和联系 <br>六、常见问题 <br>七、Session的用法</strong> </span></p>
<p>Session是WEB上有效的信息交互手段，因其使用方便、稳定、安全、可靠而被众多WEB开发者所认知。尤其在互联网身份验证、网上电子购物等方面的应用更为广泛。下面就着重来介绍下Session。 </p>
<p><span style="COLOR: #ff00ff"><span style="COLOR: #cc99ff"><strong style="COLOR: #ff0000">一、Session </strong></span></span><br>Session，在汉语中表示通话、会话、对话(期)、话路［对谈时间］的意思，其本来的含义一个终端用户与交互系统进行通信的时间(间隔),通常是指从注册(进入系统)到注销(退出系统)之间所经过的时间。比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个Session。有时候我们可以看到这样的话&#8220;在一个浏览器会话期间，&#8230;&#8221;，这里的会话一词用的就是这个意思，是指从一个浏览器窗口打开到关闭这个期间。Session在我们的网络应用中就是一种客户端与服务器端保持状态的解决方案，有时候Session也用来指这种解决方案的存储结构， <br>Session对象，就是客户端浏览器与服务器之间建立的互动信息状态。每一个不同的用户连接将得到不同的Session，也就是说Session与用户之间是一种一对一的关系。Session在用户进入网站时由服务器自动产生，并在用户正常离开站点时释放。使用Session的好处就在于，可以将很多与用户相关的信息，例如用户的帐号、昵称等保存到Session中；利用Session，可以跟踪用户在网站上的活动。例如：当你上网进入一个网站时，如果你没有登陆，无论你访问哪几个页面都会跳转回登陆页。还有就是你在购物时，不可能把你的东西放到别人的购物车里去，这就得用一个信息变量来判断！ <br>如果能够提供一些按需生成的动态信息会使web变得更加有用，就像给有线电视加上点播功能一样。这种需求一方面迫使HTML逐步添加了表单、脚本、DOM等客户端行为，另一方面在服务器端则出现了CGI规范以响应客户端的动态请求，作为传输载体的HTTP协议也添加了文件上载、cookie这些特性。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。至于后来出现的Session机制则是又一种在客户端与服务器之间保持状态的解决方案。 </p>
<p><span style="COLOR: #ff0000"><strong>二、Cookies </strong></span><br>Cookie是WEB上最常用的跟踪用户会话方式，当&nbsp; Cookie被禁止后，一般都用URL重写来跟踪会话。Cookie是一种由服务器发送给客户的片段信息，存储在客户环境中，并在客户所有的对服务器的请求中都要发回它。就好比我们在用IE登陆某个电子购物商城时，IE在得到商品列表页面的 同时还收到Set-Cookie应答头信息，我们打开一个Cookie文件，我们所看到的格式一般都是： <br>Cookie：NAME=VALUE；Comment=COMMENT；Domain=DOMAINNMAM；Max-age=SECONDS；Path=PATH；secure；Version=1*DIGIT <br>其中NAME值对（值对间用分号分隔）是必须的，其余都是可选的。最重要的信息当然也在所必须的值对里了，VALUE是NAME的值，也是这个Cookie的标识，Max-age定义了Cookie的最长生存时间，其它几个可选值对可参阅http://www.faqs.org/rfcs/rfc2109.html。当我们选购了某种商品，向服务器发送选购清单时，会自动在你的请求信息头里加上NAME值对,如果Cookie被禁止，则用URL重写方式在URL请求地址上附加NAME值对。当Web服务器收到这个请求后，会检查该Cookie是否存在，然后相应的跟踪会话。从以上分析不难理解，其实Web服务器跟踪会话就靠Set-Cookie头信息，跟踪NAME值对进行身份验证。假如我们用非Web终端接收Web服务器的响应信息，从中解析出Cookie头信息，当再次向Web服务器发送请求时附加上解析出的Cookie信息，Web服务器据此不就可以进行身份认证了吗？ <br>Cookies中文是饼干的意思，对于为何引用Cookies，从网上查找了一些资料： <br>在浏览器与WEB服务器之间是使用HTTP协议进行通信的，当某个用户发出页面请求时，WEB服务器只是简单的进行响应，然后就关闭与该用户的连接。因此当一个请求发送到WEB服务器时，无论其是否是第一次来访，服务器都会把它当作第一次来对待，这样的不好之处可想而知。为了弥补这个缺陷，Netscape开发出了cookie这个有效的工具来保存某个用户的识别信息，因此人们昵称为&#8220;小甜饼&#8221;。cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段：Netscape Navigator使用一个名为cookies.txt本地文件保存从所有站点接收的Cookie信息；而IE浏览器把Cookie信息保存在类似于c:\Internet 临时文件\的目录下。当用户再次访问某个站点时，服务端将要求浏览器查找并返回先前发送的Cookie信息，来识别这个用户。Cookies给网站和用户带来的好处： <br>　　(1)、Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径 <br>　　(2)、Cookie能告诉在线广告商广告被点击的次数，从而可以更精确的投放广告 <br>　　(3)、Cookie有效期限未到时，Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (4)、Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务，其实，cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. </p>
<p><span style="COLOR: #ff0000"><strong>三．Cookie机制 </strong></span><br>Cookie机制采用的是在客户端保持状态的方案。 <br>Cookie机制，就是当服务器对访问它的用户生成了一个Session的同时服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie，保存在客户端，里面记录着用户当前的信息，当用户再次访问服务器时，浏览器检查所有存储的cookie，如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置也就是对应的Cookie文件。 若存在，则把该cookie附在请求资源的HTTP请求头上发送给服务器，例如：当我们登陆了一个网站，并且填写了有关资料，以本站会员的名义登陆上了有关网页，这时你把浏览器关闭，再重启进入该网站的某一个页面时是以你登陆过的会员进去的，当然，不是所有网站都是这样，我们知道，cookie的保存有临时性的和持久性的，大多都是临时性的，也就是cookie只保存在客户端的内存中，而没有保存在硬盘上，当关闭浏览器，cookie也就销毁。以下是有关cookie机制的一些具体说明： <br>cookie的内容主要包括：名字，值，过期时间，路径和域。 <br>其中域可以指定某一个域比如.google.com，相当于总店招牌，比如宝洁公司，也可以指定一个域下的具体某台机器比如www.google.com或者froogle.google.com，可以用飘柔来做比。 <br>路径就是跟在域名后面的URL路径，比如/或者/foo等等，可以用某飘柔专柜做比。路径与域合在一起就构成了cookie的作用范围。 <br>如果不设置过期时间，则表示这个cookie的生命期为浏览器会话期间，只要关闭浏览器窗口，cookie就消失了。这种生命期为浏览器会话期的 cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里，当然这种行为并不是规范规定的。如果设置了过期时间，浏览器就会把cookie保存到硬盘上，关闭后再次打开浏览器，这些cookie仍然有效直到超过设定的过期时间。 <br>存储在硬盘上的cookie可以在不同的浏览器进程间共享，比如两个IE窗口。而对于保存在内存里的cookie，不同的浏览器有不同的处理方式。对于微软的IE浏览器，在一个打开的窗口上按Ctrl-N（或者从文件菜单）打开的窗口可以与原窗口共享，而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie；对于火狐狸firefox浏览器，所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用Session机制的web应用程序开发者造成很大的困扰。 </p>
<p><span style="COLOR: #ff0000"><strong>四、Session机制 </strong></span><br>Session机制采用的是在服务器端保持状态的方案。 <br>当用户访问到一个服务器，服务器就要为该用户创建一个SESSION，在创建这个SESSION的时候，服务器首先检查这个用户发来的请求里是否包含了一个SESSIONID，如果包含了一个SESSIONID则说明之前该用户已经登陆过并为此用户创建过SESSION，那服务器就按照这个SESSIONID把这个SESSION在服务器的内存中查找出来（如果查找不到，就有可能为他新创建一个），如果客户端请求里不包含有SESSIONID，则为该客户端创建一个SESSION并生成一个与此SESSION相关的SESSIONID。这个SESSIONID是唯一的、不重复的、不容易找到规律的字符串，这个SESSIONID将被在本次响应中返回到客户端保存，而保存这个SESSIONID的正是COOKIE，这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。 <br>我们知道在IE中，我们可以在工具的internet选项中把COOKIE禁止，那么会不会出现把客户端的COOKIE禁止了，SESSIONID就无法再用了呢？找了一些资料说明，可以有其他机制在COOKIE被禁止时仍然能够把Session id传递回服务器。经常被使用的一种技术叫做URL重写，就是把Session id直接附加在URL路径的后面一种是作为URL路径的附加信息,表现形式为： <br>http://&#8230;./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764； <br>另一种是作为查询字符串附加在URL后面，表现形式为： <br>http://&#8230;../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 <br>还有一种就是表单隐藏字段。就是服务器会自动修改表单，添加一个隐藏字段，以便在表单提交时能够把Session id传递回服务器。这里就不介绍了。 <br>我们常说的在一个IE被打开是创建一个Session，当关闭IE时Session也就被删除，事实上，除非程序通知服务器删除Session，否则Session会被服务器一直保留，直到Session的失效时间到了自动删除。服务器不知道IE被关闭，IE不会主动在其关闭之前通知服务器它将要关闭。程序一般都是在用户做注销时删除Session。我们产生这种错觉的原因是：一般Session机制都使用cookie来保存Session id，而一旦关闭IE浏览器，Session id就不存在了，再连接服务器时找不到原来的Session了.如果服务器设置的cookie被保存到硬盘上，或者使用某种手段改写浏览器发出的 HTTP请求头，把原来的Session id发送给服务器，则再次打开浏览器仍然能够找到原来的Session。恰恰是由于关闭浏览器不会导致Session被删除，迫使服务器为seesion设置了一个失效时间，当距离客户端上一次使用Session的时间超过这个失效时间时，服务器就可以认为客户端已经停止了活动，才会把Session删除以节省存储空间。 <br>一般情况下，Session都是存储在内存里，当服务器进程被停止或者重启的时候，内存里的Session也会被清空，如果设置了Session的持久化特性，服务器就会把Session保存到硬盘上，当服务器进程重新启动或这些信息将能够被再次使用。 </p>
<p><span style="COLOR: #ff0000"><strong>五、cookie机制与Session机制的区别和联系 <br></strong></span>具体来说cookie机制采用的是在客户端保持状态的方案，而Session机制采用的是在服务器端保持状态的方案。同时我们也看到，由于在服务器端保持状态的方案在客户端也需要保存一个标识，所以Session机制可能需要借助于cookie机制来达到保存标识的目的，但实际上还有其他选择。例如，我们经常用到的会员卡，也就相当于这种情况。消费到了一定程度就有奖，就如下面例子说明： <br>1.发给顾客一张卡片，上面记录着消费的数量，一般还有个有效期限。每次消费时，如果顾客出示这张卡片，则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。 <br>2、发给顾客一张会员卡，除了卡号之外什么信息也不纪录，每次消费时，如果顾客出示该卡片，则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。 <br>以下是一些关于两者的区别与联系： <br>具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制，他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力.而Session机制采用的是一种在客户端与服务器之间保持状态的解决方案。同时我们也看到，由于采用服务器端保持状态的方案在客户端也需要保存一个标识，所以Session机制可能需要借助于cookie机制来达到保存标识的目的。而Session提供了方便管理全局变量的方式。 <br>Session是针对每一个用户的，变量的值保存在服务器上，用一个Session来区分是哪个用户Session变量,这个值是通过用户的浏览器在访问的时候返回给服务器，当客户禁用cookie时，这个值也可能设置为由get来返回给服务器。 <br>就安全性来说：当你访问一个使用Session 的站点，同时在自己机子上建立一个cookie，建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。 <br>正统的cookie分发是通过扩展HTTP协议来实现的，服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。 <br>从网络服务器观点看所有HTTP请求都独立于先前请求。就是说每一个HTTP响应完全依赖于相应请求中包含的信息. <br>状态管理机制克服了HTTP的一些限制并允许网络客户端及服务器端维护请求间的关系。在这种关系维持的期间叫做会话(Session)。 <br>Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向客户端发送cookies，在客户终端，浏览器解析这些cookies并将它们保存为一个本地文件，它会自动将同一服务器的任何请求缚上这些cookies 。 <br>来看一下Tomcat是如何实现web应用程序之间session的隔离的，从Tomcat设置的cookie路径来看，它对不同的应用程序设置的cookie路径是不同的，这样不同的应用程序所用的session id是不同的，因此即使在同一个浏览器窗口里访问不同的应用程序，发送给服务器的session id也可以是不同的。 </p>
<p><span style="COLOR: #ff0000"><strong>六、常见问题 </strong></span><br>1、Session在何时被创建 <br>Session在有客户端访问时就被创建，然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建，注意如果JSP没有显示的使用 &lt;%@page Session=&#8221;false&#8221;%&gt; 关闭Session，则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession Session = HttpServletRequest.getSession(true);这也是JSP中隐含的Session对象的来历。由于Session会消耗内存资源，因此，如果不打算使用Session，应该在所有的JSP中关闭它。 <br>2、Session何时被删除 <br>综合前面的讨论，Session在下列情况下被删除： <br>a.程序调用HttpSession.invalidate(); <br>b.距离上一次收到客户端发送的Session id时间间隔超过了Session的超时设置; <br>c.服务器进程被停止（非持久Session）。 <br>3、如何做到在浏览器关闭时删除Session <br>严格的讲，做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作，然后向服务器发送一个请求来删除Session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。 <br>4、有个HttpSessionListener是怎么回事 <br>你可以创建这样的listener去监控Session的创建和销毁事件，使得在发生这样的事件时你可以做一些相应的工作。注意是Session的创建和销毁动作触发listener，而不是相反。类似的与HttpSession有关的listener还有HttpSessionBindingListener，HttpSessionActivationListener和 HttpSessionAttributeListener。 <br>5、存放在Session中的对象必须是可序列化的吗 <br>不是必需的。要求对象可序列化只是为了Session能够在集群中被复制或者能够持久保存或者在必要时server能够暂时把Session交换出内存。在Weblogic Server的Session中放置一个不可序列化的对象在控制台上会收到一个警告。 <br>6、开两个浏览器窗口访问应用程序会使用同一个Session还是不同的Session <br>对Session来说是只认id不认人，因此不同的浏览器，不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。 <br>7、如何防止用户打开两个浏览器窗口操作导致的Session混乱 <br>这个问题与防止表单多次提交是类似的，可以通过设置客户端的令牌来解决。就是在服务器每次生成一个不同的id返回给客户端，同时保存在Session里，客户端提交表单时必须把这个id也返回服务器，程序首先比较返回的id与保存在Session里的值是否一致，如果不一致则说明本次操作已经被提交过了。可以参看《J2EE核心模式》关于表示层模式的部分。需要注意的是对于使用javascript window.open打开的窗口，一般不设置这个id，或者使用单独的id，以防主窗口无法操作，建议不要再window.open打开的窗口里做修改操作，这样就可以不用设置。 <br>8、为什么Session不见了 <br>排除Session正常失效的因素之外，服务器本身的可能性应该是微乎其微的；理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题。出现这一问题的大部分原因都是程序的错误，最常见的就是在一个应用程序中去访问另外一个应用程序。 <br>9、服务器关掉后，当前Session会丢掉吗 <br>这个取决于你使用什么样的web服务器以及web服务器是如何配置的。tomcat在shutdown前默认会自动将Session保存到指定的目录中，重新启动是重新加载，因此tomcat重新启动后，Session是可以继续使用的。此外，你还何以将Session保存到数据库中，这个要在server.xml中配置。 <br>10、Cookie的过期和Session的超时有什么区别 <br>会话的超时由服务器来维护，它不同于Cookie的失效日期。首先，会话一般基于驻留内存的cookie不是持续性的cookie，因而也就没有截至日期。即使截取到JSESSION cookie，并为它设定一个失效日期发送出去。浏览器会话和服务器会话也会截然不同。 </p>
<p><span style="COLOR: #ff0000"><strong>七、Session的用法 </strong></span><br>Session 对象 <br>可以使用 Session 对象存储特定用户会话所需的信息。这样，当用户在应用程序的 Web 页之间跳转时，存储在 Session 对象中的变量将不会丢失，而是在整个用户会话中一直存在下去。 <br>当用户请求来自应用程序的 Web 页时，如果该用户还没有会话，则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后，服务器将终止该会话。 <br>Session 对象最常见的一个用法就是存储用户的首选项。例如，如果用户指明不喜欢查看图形，就可以将该信息存储在 Session 对象中。 <br>注意：会话状态仅在支持 cookie 的浏览器中保留。 <br>语法 <br>Session.collection|property|method <br>集合 <br>Contents 包含已用脚本命令添加到会话中的项目。 <br>StaticObjects 包含通过 &lt;OBJECT&gt; 标记创建的并给定了会话作用域的对象。 <br>属性 <br>CodePage 将用于符号映射的代码页。 <br>LCID 现场标识。 <br>SessionID 返回用户的会话验证。 <br>Timeout 应用程序会话状态的超时时限，以分钟为单位。 <br>方法 <br>Abandon 该方法破坏 Session 对象并释放其资源。 <br>事件 <br>asa 文件中声明下列事件的脚本。 <br>Session_OnEnd <br>Session_OnStart <br>注释 <br>您可以在 Session 对象中存储值。存储在 Session 对象中的信息在会话及会话作用域内有效。 </p>
<img src ="http://www.cnitblog.com/stomic/aggbug/66134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2010-05-17 13:04 <a href="http://www.cnitblog.com/stomic/archive/2010/05/17/66134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] 一个HR的离职感悟</title><link>http://www.cnitblog.com/stomic/archive/2010/01/20/63835.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 20 Jan 2010 05:17:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2010/01/20/63835.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/63835.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2010/01/20/63835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/63835.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/63835.html</trackback:ping><description><![CDATA[<div id=blogDetailDiv style="FONT-SIZE: 12px">一、关于公司：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不要把公司当成自己的家，公司的根本存在价值是经济效益。要坚定自己做职业人的想法。当公司利益和个人利益实现最大化的时候，可以全身心地投入。当双方结果相背离的时候，应该选择潇洒地走开。<br>二、关于老板：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 听过无数有志之士的抱怨，看过无数的人才因为老总始终无法重视人才的选育用留而黯然离去。当我们苦口婆心的劝导老总们明白，人是重中之重，没有鼓舞人心的士气，没有核心的团队，没有吸引人的企业文化，没有再培训，没有有效的激励机制，任何企业都将会万劫不复。可是，老总总是忽略了人才的重要性，不断的强调业绩，企业的拓展，市场竞争。殊不知，这一切都是靠人才去完成的。<br>三、关于改变：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不要奢望你的努力会换来老总甚至企业的改变，在有些公司，一旦企业业绩下滑，什么人力资源，什么培训，什么企业文化，都通通被老总弃置不顾。从他们的角度想想看，那是他们自己的钱，自己辛辛苦苦的原始积累。当他看到自己的钱就这样流走，他哪里还有精力注重人才的流失？对于他来说，反正钱有了，人自然会来。<br>四、关于文化：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 即使公司不赚钱，也不要小看文化这东西，文化能决定公司能否壮大并长久。员工的忠诚需要用文化来凝聚，主管的管理风格需要用文化来引导。管理中，有很多规则是应该遵守的，譬如工资的刚性；有很多雷区是不可以碰的，譬如诚信。<br>五、关于融入：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用关注和尊重赢得员工的信赖！营造<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>坦诚<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>、<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>透明<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>、<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>积极<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>、<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>向上<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>的氛围。必要的成本投入是必须的，因为投入产出比。管理需要细腻，需要替别人着想，需要懂得<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>利用<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>，需要抓住<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>心结<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>。把希望传递，让激情感染。定期跟他们一对一地聊聊，关注一下他们的将来。<br>六、关于留人：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 留人的原则是<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>情感留人<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>、<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>待遇留人<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>和<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>事业留人<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>，我们的待遇难以具备明显优势，公司前进的路上也绝非一帆风顺。这种情况下，情感留人是最实际的留人手段。管理情绪、凝聚人心，不失一切时机地捕捉动情点。我们一定要保持这种敏感和细腻。<br>七、关于家庭：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择的时候不要任何理由。因为你是你，你想做的是你自己的事情。没有人认为或感觉你的委屈和痛苦。分居也好，孩子缺少父爱也好，你个人能否解决那是你的私事。年薪代表什么？是你的个人价值还是你养家糊口的依靠。北漂有多少？难道就是郁闷吗？意识里面不要有抱怨和无奈，生活本无奈，何苦让自己更无奈呢？你对他有感情，他未必在乎你！工作就是工作，没有太多的感情。<br>八、关于敬业：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 即使只是一名最基层的员工，也要把公司当成自己的公司。唯有如此，才能迅速融入迅速提升。所以，骨子里无比的高傲<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">——&#8220;</span><wbr></font>公司需要我<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>；<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>我要把公司推向成功<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>。将公司当成家，将自己当成了总经理！这是曾经引以为豪的一种心态，现在看来需要改变的是心理预期。<br>九、关于离职：<br><font size=2><span style="LINE-HEIGHT: 1.8em">&nbsp;&nbsp;&nbsp;&nbsp;&#8220;</span><wbr></font>我的心已不在公司，但还要为公司凝聚人心。<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>这是<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">HR</span><wbr></font>离职前的哀歌。与其在<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>适应环境或让环境适应你<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>这个老掉牙的话题中思考，离开比留下来做痛苦的哲学思考更明智。跳槽，不意味着好逸恶劳，而是给自己的勤奋努力找对地方。忠诚理论上是一种美德，可是忠诚到伤害到自己的程度，就只能是一种迂腐了！中国人经常是羞于谈钱，这不是健康的心态。古语云：<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8220;</span><wbr></font>礼赏不倦，则士争先。德同势敌，乃揽英雄之心。<font size=2><span style="LINE-HEIGHT: 1.8em">&#8221; </span><wbr><br></font>十、关于性情：<br><font size=2><span style="LINE-HEIGHT: 1.8em">&nbsp;&nbsp;&nbsp;&nbsp; &#8220;</span><wbr></font>有血有肉重情重义<font size=2><span style="LINE-HEIGHT: 1.8em; FONT-FAMILY: 'Times'">&#8221;</span><wbr></font>意味着付出和投入，有时会情不自禁达忘我状态。付出之后我们未必能有回报，甚至收获了委屈。有****衡之后会选择理智和机械，有人调整之后会改变心理预期。前者自我防卫能力越来越强但趋于封闭，后者承受打击的能力越来越强且更加豁达。因为透明，圈内朋友曾戏言自己是温室里长大的。我承认自己经历不够坎坷，但相信－－生命力强弱与否不在于环境，而在于种子。<br>十一、关于自励：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我知道自己骨子里有一种潜在的也是可怕的东西－－惰性，所以尽力去给自己找压力、动力。或将自己置于风口浪尖之上，或将自己置于众人瞩目之下。这样，做每一样事的时候，自己都不再仅仅代表一个人。所以，命中注定自己这辈子会很投入！<br>十二、关于心态：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 率真、执著、努力、理性、热血、理想。做得越多，责任越重，能力越强，成长也就越快。牢骚、抱怨、偏激和冲动越少越好。激情和责任则是每一个人不可或缺的。利用有限资源最大限度地挖潜做出一番事情，同时也最大限度地提升自己。在我们离开这个世界的时候，无论我们的生理年龄有多大，我们都要有一颗二十岁的心。 <!--v:3.2--></div>
<img src ="http://www.cnitblog.com/stomic/aggbug/63835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2010-01-20 13:17 <a href="http://www.cnitblog.com/stomic/archive/2010/01/20/63835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>( 转)代码自动生成工具MyGeneration之一（程序员必备工具）</title><link>http://www.cnitblog.com/stomic/archive/2009/11/11/62523.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 11 Nov 2009 06:56:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2009/11/11/62523.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/62523.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2009/11/11/62523.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/62523.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/62523.html</trackback:ping><description><![CDATA[<p>前段时间用C#做网站，用到了大量数据库相关的东西。网站采用3层结构，即数据访问层(Data Access Layer),业务逻辑层(Business Logic Layer),页面表现层().做了一段时间，发现向数据访问层和业务逻辑层加入新的类，数据库的表结构改了，还要对应的修改数据访问层和业务逻辑层的代码，这个工作很是繁琐，无聊，而且容易出错。做了几次之后就想有什么办法可以让机器自动完成呢？</p>
<p>&nbsp; 联想到以前看过Java似乎有个Hibernate，可以很方便的实现对象关系映射(ORM),即自动的从数据库的表生成对应的对象,.Net也应该有类似的功能吧。于是找啊找，发现了很多.Net的ORM工具，不过都有缺点，就是代码得依赖于那些ORM工具，我希望能够让机器按我的要求生成我自己的代码，这样就更加灵活了。</p>
<p>&nbsp; 于是乎，发现了CodeSmith和MyGeneration，CodeSmith是 网上传的.NET 程序员十种必备工具之一,我们写代码时，经常需要重复完成某些特定的任务，例如编写数据访问代码或者生成自定义集合。我们可以用CodeSmith编写模板自动完成这些任务，从而不仅提高工作效率，而且能够自动完成那些最为乏味的任务。可惜，CodeSmith是需要注册的，试用版只能用15天。而MyGeneration基本上和CodeSmith的功能差不多哦，但是他是开源的。我选软件的原则是能开源免费的就用，实在没替代了才选那些需要注册的，有版权的软件。所以就选MyGeneration了。</p>
<p>&nbsp; 用过一段时间后感觉MyGeneration主要是为了自动生成数据库相关的代码的，可能C#用得比较多，其实我们可以用它生成任何代码，C++，JavaScript...而且还不仅仅局限于数据库，其他方面的代码也可以用MyGeneration自动生成。比如我们经常用数据访问层和业务逻辑层，用MyGeneration就可以自动生成这些代码，我们可以不用手动写代码了。比如数据访问层，我们需要调用一个存储过程，用MyGeneration我们只需要选择生成存储过程代码的模板，执行一下脚本，然后在界面上选择数据库上某个存储过程，然后就自动生成了数据库访问代码，整个过程只需要点几下鼠标，代码就自动生成了。这对于需要大量操作数据库的程序员来说，效率是多大的提升啊。</p>
<p>&nbsp; 废话少说，还是来点实在的吧。首先声明，我的MyGeneration版本是：1.3.0.3</p>
<p>&nbsp; 安装完MyGeneration后，第一次启动会要求进行一些数据库相关的配置。如图：</p>
<p>&nbsp;<img height=543 alt="" src="http://www.cnitblog.com/images/cnitblog_com/stomic/Config.PNG" width=591 border=0></p>
<p>&nbsp; ConnectionString: 就是指定连接哪个数据库了，填好这个就可以点确定了。</p>
<p>&nbsp; 下面来看一看其他的项都是什么。</p>
<p>&nbsp; Language Mapping:就是指定数据库和对象基本类型的映射关系。让我们打开Languages.xml文件看一下吧：</p>
<p>&nbsp;&nbsp;&nbsp; &lt;Language From="SQL" To="C#"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="bigint" To="long" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="binary" To="object" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="bit" To="bool" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="char" To="string" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="datetime" To="DateTime" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="decimal" To="decimal" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="float" To="double" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="image" To="byte[]" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="int" To="int" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="money" To="decimal" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="nchar" To="string" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="ntext" To="string" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="numeric" To="decimal" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="nvarchar" To="string" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="real" To="float" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="smalldatetime" To="DateTime" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="smallint" To="short" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="smallmoney" To="decimal" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="text" To="string" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="timestamp" To="byte[]" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="tinyint" To="byte" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="uniqueidentifier" To="Guid" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="varbinary" To="byte[]" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="varchar" To="string" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="xml" To="string" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="sql_variant" To="object" /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/Language&gt;<br>&nbsp; 这是里面的一段内容,很明显，是数据库SQL的字段转到C#是什么类型，里面没有C++的，假如我们要让它支持C++的话，需要在这里加入SQL到C++的类型转换。<br>&nbsp; Database Target Mapping：先看里面的内容吧：</p>
<p>&nbsp;&nbsp;&nbsp; &lt;DbTarget From="ACCESS" To="DAO"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Text" To="DAO.dbText" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Memo" To="DAO.dbMemo" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="DateTime" To="DAO.dbDate" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Currency" To="DAO.dbCurrency" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Yes/No" To="DAO.dbBoolean" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="OLE Object" To="DAO.dbLongBinary" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Hyperlink" To="DAO.dbMemo" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Double" To="DAO.dbDouble" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Replication ID" To="DAO.dbGUID" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Long" To="DAO.dbLong" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Single" To="DAO.dbSingle" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Decimal" To="DAO.dbDecimal" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Byte" To="DAO.dbByte" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Type From="Integer" To="DAO.dbInteger" /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/DbTarget&gt;<br>&nbsp; 呵呵，一目了然，就是Access数据库用DAO的方式访问，数据库的列的类型对应的DAO里是什么类型。</p>
<p>&nbsp; UseMetaData目前没什么用。</p>
<p>&nbsp; 看看MyGeneration的界面吧：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <img height=685 alt="" src="http://www.cnitblog.com/images/cnitblog_com/stomic/FrameWork.PNG" width=883 border=0></p>
<p>&nbsp;&nbsp; Template Browser 面板 列出了一些模板，这是自动生成代码需要用到的模板。安装的时候会自己带很多模板。</p>
<p>&nbsp;&nbsp; MyMeta Browser则列出了当前连接的数据库上有些什么库，表，存储过程。</p>
<p>&nbsp;&nbsp; 工作区则是具体模板对应的代码。</p>
<p>&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp; 先让我们体验一下吧。</p>
<p>&nbsp;&nbsp; 展开Template Browser面板下"d00dads - C#", 双击 &#8220;d00dads - Invoke a Stored Procedure", 让工作区显示其内容，</p>
<p>然后点击工具栏上的 "Execute" 按钮，如图红框所示：</p>
<p>&nbsp;</p>
<p>&nbsp; 弹出对话框，如图：</p>
<p>&nbsp;<img height=600 alt="" src="http://www.cnitblog.com/images/cnitblog_com/stomic/CreateSP.PNG" width=340 border=0></p>
<p>&nbsp; 选择数据库，存储过程，存储过程类型,点确定（OK）。</p>
<p>&nbsp; </p>
<p>&nbsp; 然后可以看到工作区 Output 里输出了代码了。例如：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using System.Data;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using System.Collections.Specialized;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using System.Data.SqlClient;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public virtual void dm_exec_cursors (int spid)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListDictionary parameters = new ListDictionary();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parameters.Add( new SqlParameter("@spid", SqlDbType.Int, 0), spid);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadFromSqlNoExec("dm_exec_cursors", parameters);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp; 这就是MyGeneration自动获取了存储过程的输入参数，然后在代码里构造相应的参数，然后生成的代码。<br>&nbsp; 这只是MyGeneration自带的模板生成的，大家可以试一试其他的模板的效果。</p>
<p>&nbsp; 里面有自动根据表结构生成BLL的类......看下效果：</p>
<p>/*<br>'===============================================================================<br>'&nbsp; Generated From - CSharp_dOOdads_BusinessEntity.vbgen<br>' <br>'&nbsp; ** IMPORTANT&nbsp; ** <br>'&nbsp; How to Generate your stored procedures:<br>' <br>'&nbsp; SQL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = SQL_StoredProcs.vbgen<br>'&nbsp; ACCESS&nbsp;&nbsp;&nbsp;&nbsp; = Access_StoredProcs.vbgen<br>'&nbsp; ORACLE&nbsp;&nbsp;&nbsp;&nbsp; = Oracle_StoredProcs.vbgen<br>'&nbsp; FIREBIRD&nbsp;&nbsp; = FirebirdStoredProcs.vbgen<br>'&nbsp; POSTGRESQL = PostgreSQL_StoredProcs.vbgen<br>'<br>'&nbsp; The supporting base class OleDbEntity is in the Architecture directory in "dOOdads".<br>'&nbsp; <br>'&nbsp; This object is 'abstract' which means you need to inherit from it to be able<br>'&nbsp; to instantiate it.&nbsp; This is very easilly done. You can override properties and<br>'&nbsp; methods in your derived class, this allows you to regenerate this class at any<br>'&nbsp; time and not worry about overwriting custom code. <br>'<br>'&nbsp; NEVER EDIT THIS FILE.<br>'<br>'&nbsp; public class YourObject :&nbsp; _YourObject<br>'&nbsp; {<br>'<br>'&nbsp; }<br>'<br>'===============================================================================<br>*/<br>// Generated by MyGeneration Version # (1.3.0.3)<br>using System;<br>using System.Data;<br>using System.Data.OleDb;<br>using System.Collections;<br>using System.Collections.Specialized;<br>using MyGeneration.dOOdads;<br>namespace Your.Namespace<br>{<br>&nbsp;&nbsp;&nbsp; public abstract class _Users : OleDbEntity<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public _Users()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.QuerySource = "Users";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.MappingName = "Users";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=================================================================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; public Overrides void AddNew()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=================================================================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=================================================================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void AddNew()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.AddNew();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override string GetAutoKeyColumn()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "ID";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void FlushData()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._whereClause = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._aggregateClause = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.FlushData();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=================================================================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Function LoadAll() As Boolean<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=================================================================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; Loads all of the records in the database, and sets the currentRow to the first row<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=================================================================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public bool LoadAll() <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListDictionary parameters = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return base.LoadFromSql("[" + this.SchemaStoredProcedure + "proc_UsersLoadAll]", parameters);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=================================================================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // public Overridable Function LoadByPrimaryKey()&nbsp; As Boolean<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=================================================================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; Loads a single row of via the primary key<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //=================================================================<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public virtual bool LoadByPrimaryKey()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ListDictionary parameters = new ListDictionary();<br>&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; return base.LoadFromSql("[" + this.SchemaStoredProcedure + "proc_UsersLoadByPrimaryKey]", parameters);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region Parameters<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected class Parameters<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static OleDbParameter ID<br>&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; get<br>&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; return new OleDbParameter("@ID", OleDbType.Integer, 0);<br>&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; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static OleDbParameter Alias<br>&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; get<br>&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; return new OleDbParameter("@Alias", OleDbType.VarChar, 2147483647);<br>&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; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region ColumnNames<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class ColumnNames<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public const string ID = "ID";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public const string Alias = "Alias";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static public string ToPropertyName(string columnName)<br>&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; if(ht == null)<br>&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; ht = new Hashtable();<br>&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; ht[ID] = _Users.PropertyNames.ID;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ht[Alias] = _Users.PropertyNames.Alias;<br>&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; return (string)ht[columnName];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static private Hashtable ht = null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region PropertyNames<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class PropertyNames<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public const string ID = "ID";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public const string Alias = "Alias";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static public string ToColumnName(string propertyName)<br>&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; if(ht == null)<br>&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; ht = new Hashtable();<br>&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; ht[ID] = _Users.ColumnNames.ID;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ht[Alias] = _Users.ColumnNames.Alias;<br>&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; return (string)ht[propertyName];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static private Hashtable ht = null;&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; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region StringPropertyNames<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public class StringPropertyNames<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public const string ID = "s_ID";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public const string Alias = "s_Alias";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region Properties<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public virtual Integer ID<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br>&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; return base.GetInteger(ColumnNames.ID);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<br>&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; base.SetInteger(ColumnNames.ID, value);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public virtual String Alias<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br>&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; return base.GetString(ColumnNames.Alias);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<br>&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; base.SetString(ColumnNames.Alias, value);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region String Properties<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public virtual string s_ID<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br>&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; return this.IsColumnNull(ColumnNames.ID) ? string.Empty : base.GetIntegerAsString(ColumnNames.ID);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<br>&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; if(string.Empty == value)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.SetColumnNull(ColumnNames.ID);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ID = base.SetIntegerAsString(ColumnNames.ID, value);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public virtual string s_Alias<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br>&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; return this.IsColumnNull(ColumnNames.Alias) ? string.Empty : base.GetStringAsString(ColumnNames.Alias);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set<br>&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; if(string.Empty == value)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.SetColumnNull(ColumnNames.Alias);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Alias = base.SetStringAsString(ColumnNames.Alias, value);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private AggregateClause _aggregateClause = null;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected override IDbCommand GetInsertCommand() <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand cmd = new OleDbCommand();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.CommandType = CommandType.StoredProcedure;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.CommandText = "[" + this.SchemaStoredProcedure + "proc_UsersInsert]";<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CreateParameters(cmd);<br>&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; return cmd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected override IDbCommand GetUpdateCommand()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand cmd = new OleDbCommand();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.CommandType = CommandType.StoredProcedure;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.CommandText = "[" + this.SchemaStoredProcedure + "proc_UsersUpdate]";<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CreateParameters(cmd);<br>&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; return cmd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected override IDbCommand GetDeleteCommand()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbCommand cmd = new OleDbCommand();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.CommandType = CommandType.StoredProcedure;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.CommandText = "[" + this.SchemaStoredProcedure + "proc_UsersDelete]";<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbParameter p;<br>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return cmd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private IDbCommand CreateParameters(OleDbCommand cmd)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OleDbParameter p;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = cmd.Parameters.Add(Parameters.ID);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.SourceColumn = ColumnNames.ID;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.SourceVersion = DataRowVersion.Current;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = cmd.Parameters.Add(Parameters.Alias);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.SourceColumn = ColumnNames.Alias;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.SourceVersion = DataRowVersion.Current;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return cmd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>}<br>&nbsp;&nbsp; 这就是自动获得表结构，然后从字段映射成类里面的成员，并且还有一些插入，更新，删除的代码。</p>
<p>&nbsp;&nbsp; 当然自带的模板生成的代码不一定符合我们的需要，但是我们可以根据需要自己写一些模板来生成符合自己需要的代码，这也是非常容易的事，欲知如何实现，请看下回文章。</p>
<p><br>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/zxcred/archive/2008/08/06/2778193.aspx">http://blog.csdn.net/zxcred/archive/2008/08/06/2778193.aspx</a></p>
<img src ="http://www.cnitblog.com/stomic/aggbug/62523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2009-11-11 14:56 <a href="http://www.cnitblog.com/stomic/archive/2009/11/11/62523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IIS5.1和IIS6.0一些显著的重要区别</title><link>http://www.cnitblog.com/stomic/archive/2009/06/17/59452.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 17 Jun 2009 05:26:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2009/06/17/59452.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/59452.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2009/06/17/59452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/59452.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/59452.html</trackback:ping><description><![CDATA[　　<strong>核心功能和服务</strong><br><br>　　已对 IIS 6.0 进行了重新设计以便利用基本 Windows 内核 HTTP.sys。这使其具有内置的响应和请求缓存和队列功能，并能够将应用程序进程请求直接路由到工作进程，从而改善可靠性和性能。<br><br>　　IIS 6.0 引入了两种用于配置应用程序环境的操作模式：工作进程隔离模式和 IIS 5.0 隔离模式。在安装 IIS 6.0 时默认的隔离模式取决于您执行的是全新安装还是升级。<br><br>　　在全新安装 IIS 6.0 之后，IIS 以工作进程隔离模式运行。<br><br>　　在从较低版本的 IIS 6.0 升级之后，隔离模式与以前安装的 IIS 6.0 版本所配置的相同。<br><br>　　在从 IIS 5.0 或 IIS 4.0 升级之后，在默认情况下，IIS 6.0 以 IIS 5.0 隔离模式运行，这样可保持与现有应用程序的兼容性。<br><br>　　有关从一种隔离模式切换到另一种隔离模式的信息，请参阅配置隔离模式。<br><br>　　
<center><img src="http://doc.linuxpk.com/imgfiles/2003.11.4.21.33.28.iis6.jpg"></center><br><br>　　<strong>IIS 5.0 隔离模式</strong><br><br>　　IIS 5.0 隔离模式按照与 IIS 5.0 中的进程管理相似的方式管理应用程序进程：所有的进程内应用程序都在 Inetinfo.exe 内运行，进程外应用程序在单独的 DLL 宿主中运行。一些现有应用程序可能无法并发运行或将会话状态与应用程序分开存储。因此，在 IIS 5.0 隔离模式中运行进程可以确保与大多数现有应用程序的兼容性。下图显示如何在 IIS 5.0 隔离模式中处理应用程序进程。<br><br>　　<strong>配置数据库配置</strong><br><br>　　IIS 6.0 的配置数据库以 XML 文件形式存储，而不是以早期版本中的二进制格式存储。位置仍在原处，但是操作方式（更新、回滚、还原和扩展）已发生了变化。有两个重要文件，并非一个：MetaBase.xml 和 MBSchema.xml。<br><br>　　有关 IIS 配置数据库的详细信息，请参阅关于配置数据库。<br><br>　　<strong>管理</strong><br><br>　　在 IIS 4.0 中，应用程序既可以在与 Internet 服务相同的进程中运行，也可以在单独的进程中运行。在 IIS 5.0 和 5.1 中，应用程序现在可以分为若干汇集的进程以增强性能并提高可伸缩性。 详细信息，请参阅关于应用程序。在 IIS 6.0 工作进程隔离模式中，可将应用程序组合到任意数量的应用程序池中。<br><br>　　&#8220;应用程序映射&#8221;属性页包含一个超文本传输协议 (HTTP) 动作列表，它们可由映射到特定文件类型的应用程序进行处理。该动作列表与 IIS 4.0 有一处不同。在 IIS 4.0 中，列表中包含&#8220;已排除&#8221;或未被处理的动作。这个改变是为了适应新的 HTTP 动作，以便将其添加到协议中。 有关应用程序映射的详细信息，请参阅设置应用程序映射。<br><br>　　群集不是 IIS 6.0 的功能（不支持 IISsynche.exe）。群集是 Windows Server 2003 家族的功能。有关 Windows 群集 (MSCS) 的信息，请参阅 Windows Server 2003 家族的帮助。<br><br>　　与 IIS 4.0 相比，IIS 5.0 中自定义错误文件的位置已经改变。 详细信息，请参阅启用详细的自定义错误消息。<br><br>　　已经添加了新的自定义错误文件，以便报告更详细的错误信息以及与新功能有关的错误。 有关可用的自定义错误消息的完整列表，请参阅关于自定义错误消息。<br><br>　　基于 Web 的 Internet 服务管理器 (HTML) 已经由 Web 工具应用。要使用 Internet 服务管理器 (HTML) 远程管理 IIS， 请参阅如何远程管理服务器。<br><br>　　<strong>以编程方式管理</strong><br><br>　　在早期版本的 IIS 中，可以从编译的 C++ 应用程序使用管理基本对象 (ABO) 或者从 C++ 或脚本文件使用 Active Directory 服务界面 (ADSI) 以编程方式管理 IIS。IIS 6.0 包括了 Windows 管理规范 (WMI) 提供程序，WMI 这一技术允许管理员以编程方式控制所有服务和应用程序。详细信息，请参阅使用 IIS WMI 提供程序。有关新的 ADSI 方法的信息，请参阅 IIS 6.0 中的配置数据库更改。<br><br>　　<strong>Active Server Pages</strong><br><br>　　从 IIS 6.0 开始，Microsoft Active Server Pages (ASP) 可以与 Microsoft ASP.NET 一起使用。有关配置 IIS 以运行 ASP.NET 应用程序的信息，请参阅 ASP.NET。有关 IIS 6.0 中 ASP 功能更改的信息，请参阅 ASP 中的重要更改。<br><br>　　<strong>ASP 挂起检测</strong><br><br>　　当 IIS 网站繁忙时，可能会出现这种情况：已经产生了最大数量的 ASP 线程，而一些 ASP 线程却挂起，这会导致性能降低。IIS 6.0 能够通过回收作为 ASP ISAPI 扩展 (ASP.dll) 的特定实例宿主的工作进程来解决线程挂起问题。当 ASP 线程在 IIS 6.0 中挂起时，ASP.dll 调用 ISAPI 服务器支持函数 HSE_REQ_REPORT_UNHEALTHY，WWW 服务回收作为 ASP.dll 宿主的工作进程，并在事件日志中创建一个项目。<br><br>　　有关 ISAPI 服务器支持函数的详细信息，请参阅 MSDN&#174; Online 上 ISAPI 扩展参考中的 ServerSupportFunction。<br><br>　　<strong>安全性</strong><br><br>　　IIS 6.0 中的一个最重要的变动涉及 Web 服务器安全性。为了更好地预防恶意用户和攻击者的攻击，在默认情况下，没有将 IIS 安装在 Microsoft Windows Server 2003 家族的成员上。<br><br>　　要点 为了更好地预防恶意用户和攻击者的攻击，没有将 IIS 默认安装到 Microsoft&#174; Windows&#174; Server 2003 家族的成员上。而且，当您最初安装 IIS 时，该服务在高度安全和&#8220;锁定&#8221;的模式下安装。在默认情况下，IIS 只为静态内容提供服务 － 即，ASP、ASP.NET、服务器端包含、WebDAV 发布和 FrontPage&#174; Server Extensions 等功能只有在启用时才工作。如果安装 IIS 之后未启用该功能，则 IIS 返回一个 404 错误。您可以为动态内容提供服务，并通过 IIS 管理器中的 Web 服务扩展节点启用这些功能。同样，如果应用程序扩展未在 IIS 中进行映射，则 IIS 返回一个 404 错误。要映射扩展，请参阅设置应用程序映射。有关如何排解 404 错误（包括 404.2 和 404.3）、与 IIS 6.0 的新安装相关的问题或从低版本的 IIS 进行升级的详细信息，请参阅疑难解答。<br><br>　　通过 Web 服务器证书向导和 CTL 向导，您可以同步 Web 和 NTFS 的安全设置、获得并安装服务器证书以及创建和修改证书信任列表。还可以选择一个加密服务提供程序 (CSP) 以使用证书加密数据。 详细信息，请参阅使用证书向导。<br><br>　　<strong>IIS 6.0 中的其他安全性变动包括下列内容：</strong><br><br>　　在升级版本上禁用：除非满足下列条件之一，否则在 Windows Server 2003 家族的升级版本上禁用万维网发布服务（WWW 服务）：<br><br>　　在开始升级过程之前，您已在 Windows 2000 Server 上运行了 IIS 锁定向导。IIS 锁定向导通过禁用不必要的功能来减少攻击面，并且它允许您确定为站点启用哪些功能。IIS Lockdown Tool 中提供了 IIS 锁定向导。<br><br>　　要点 如果使用 WWW 服务，则强烈建议您在升级到 Windows Server 2003 家族中的产品之前，在 Windows 2000 Server 上运行 IIS 锁定向导。IIS 锁定向导通过禁用或删除 Windows 2000 Server 安装中不需要的功能来保护计算机的安全。否则，升级后计算机上仍保留这些功能，这会使您的服务器易受攻击。<br><br>　　注册表项 RetainW3SVCStatus 已添加到注册表中 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW3SVC 的下面。在 RetainW3SVCStatus 下，您可以添加任何值，然后给它赋予一个 DWORD 值。例如，您可以创建注册表项 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW3SVCRetainW3SVCStatusdo_not_disable，并且 DWORD 值为 1。<br><br>　　对于无人参与的安装，&#8220;DisableWebServiceOnUpgrade = false&#8221;项存在于无人参与的安装脚本中。<br><br>　　通过组策略禁用 IIS：通过使用 Windows Server 2003 家族成员，域管理员可以禁止用户在其计算机上安装 IIS。<br><br>　　以具有低级访问权限的帐户运行：IIS 工作进程在访问权限极少的用户上下文中运行。这大大减少了潜在攻击的影响。<br><br>　　提高 ASP 的安全性：所有的 ASP 内置功能总是以具有极少访问权限的帐户 IUSR_computername 运行。<br><br>　　运行可执行文件的限制：为了运行系统文件夹中的大多数可执行文件（如 cmd.exe），您必须是 Administrators 组、LocalSystem、Interactive 或 Service 帐户的成员。该限制限制了对 Administrators 的远程访问，因此匿名用户无法运行可执行文件。<br><br>　　修补程序管理：对于修补程序管理，管理员可在不中断服务的情况下安装最新的安全修补程序。<br><br>　　已知的扩展：IIS 只为对具有已知文件扩展名的文件的请求提供服务。如果请求内容的文件扩展名未映射到已知的扩展，则服务器拒绝请求。<br><br>　　内容的写保护：在默认情况下，拒绝匿名用户（以 IUSR_computername 帐户运行）对 Web 内容进行写入访问。<br><br>　　超时和限制：在 IIS 6.0 中，默认设置是安全而主动的，这样可最大限度地减少因以前太宽松的超时和限制而造成的攻击。<br><br>　　上载数据限制：管理员可以限制能上载到服务器的数据。<br><br>　　缓冲区溢出保护：工作进程会检测缓冲区溢出,并在检测到时退出程序。<br><br>　　文件验证：IIS 在将请求发送到请求处理程序（ISAPI 扩展）之前会验证请求的内容是否存在。<br><br>　　索引资源：该权限现在会在默认情况下启用。<br><br>　　脚本资源访问：该权限允许访问 ASP 页脚本和其他脚本的&#8220;源代码&#8221;，它是新增功能，且在默认情况下被禁用。它可在选择了&#8220;读取&#8221;或&#8220;写入&#8221;权限时可用。<br><br>　　子验证：在新安装的 IIS 6.0 中，在默认情况下不再启用。有关详细信息，请参阅 匿名身份验证中的&#8220;使用子验证&#8221;部分。<br><br>　　UNC 身份验证：在此版本的 IIS 中，UNC 身份验证方法检查是否有用户凭据。详细信息，请参阅 UNC 身份验证。<br><br>　　新策略：&#8220;禁止安装 IIS&#8221;策略已经添加到 Windows Server 2003 产品家族中。该策略允许域管理员控制可以在域中哪些计算机上安装 IIS。详细信息， 请参阅 Windows 帮助中的组策略。
<img src ="http://www.cnitblog.com/stomic/aggbug/59452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2009-06-17 13:26 <a href="http://www.cnitblog.com/stomic/archive/2009/06/17/59452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>惠普前总裁孙振耀指点职业规划</title><link>http://www.cnitblog.com/stomic/archive/2009/02/01/54079.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Sun, 01 Feb 2009 01:41:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2009/02/01/54079.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/54079.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2009/02/01/54079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/54079.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/54079.html</trackback:ping><description><![CDATA[<h1 class="xspace-title">惠普前总裁孙振耀指点职业规划</h1>
我有个有趣的观察，外企公司多的是25-35岁的白领，40岁以上的员工很少，二三十岁的外企员工是意气风发的，但外企公司40岁附近的经理人是很尴尬
的。我见过的40岁附近的外企经理人大多在一直跳槽，最后大多跳到民企，比方说，唐骏。外企员工的成功很大程度上是公司的成功，并非个人的成功，西门子的
确比国美大，但并不代表西门子中国经理比国美的老板强，甚至可以说差得很远。而进外企的人往往并不能很早理解这一点，把自己的成功90%归功于自己的能
力，实际上，外企公司随便换个中国区总经理并不会给业绩带来什么了不起的影响。好了问题来了，当这些经理人40多岁了，他们的薪资要求变得很高，而他们的
才能其实又不是那么出众，作为外企公司的老板，你会怎么选择？有的是只要不高薪水的，要出位的精明强干精力冲沛的年轻人，有的是，为什么还要用你？ <span style="display: none;">51Testing软件测试网.R1_(tJ0J)_</span><br><br><span style="display: none;">	lz8m^-`H�n }+N�{0</span>从上面这个例子，其实可以看到我们的<a  href="javascript:;" onclick="javascript:tagshow(event, '%b9%a4%d7%f7');" target="_self"><u><strong>工作</strong></u></a>轨迹，二三十岁的时候，<a  href="javascript:;" onclick="javascript:tagshow(event, '%c9%fa%bb%ee');" target="_self"><u><strong>生活</strong></u></a>的
压力还比较小，身体还比较好，上面的父母身体还好，下面又没有孩子，不用还房贷，也没有孩子要上大学，当个外企小白领还是很光鲜的，挣得不多也够花了。但
是人终归要结婚生子，终归会老，到了40岁，父母老了，要看病要吃药，要有人看护，自己要还房贷，要过基本体面的生活，要养小孩&#8230;&#8230;那个时候需要挣多少钱
才够花才重要。所以，看待工作，眼光要放远一点，一时的谁高谁低并不能说明什么。 <span style="display: none;">51Testing软件测试网)Y'}�@4`x"?^</span><br><br><span style="display: none;">f.gi
N$p3Es)y0</span>从
这个角度上来说，我不太赞成过于关注第一份工作的薪水，更没有必要攀比第一份工作的薪水，这在刚刚出校园的学生中间是很常见的。正常人大概要工作35年，
这好比是一场马拉松比赛，和真正的马拉松比赛不同的是，这次比赛没有职业选手，每个人都只有一次机会。要知到，有很多人甚至坚持不到终点，大多数人最后是
走到终点的，只有少数人是跑过终点的，因此在刚开始的时候，去抢领先的位置并没有太大的意义。刚进社会的时候如果进500强公司，大概能拿到3k-6k/
月的工资，有些特别技术的人才可能可以到8k/月，可问题是，5年以后拿多少？估计5k-10k了不起了。起点虽然高，但增幅有限，而且，后面的年轻人追
赶的压力越来越大。 <br><span style="display: none;">Sr)U
p3pb0</span><span style="display: none;">51Testing软件测试网&amp;V;s6Y.n8cZF#{#}]</span><br>我前两天问我的一个销售，你会的这些东西一个新人2年就都学会了，但新人所要求的薪水却只是你的一半，到时候，你怎么办？ <span style="display: none;">51Testing软件测试网j9E!t+J_�[a*{ZC</span><br><span style="display: none;">51Testing软件测试网F^!sJ9{*{7^�L</span><br>职
业生涯就像一场体育比赛，有初赛、复赛、决赛。初赛的时候大家都刚刚进社会，大多数都是实力一般的人，这时候努力一点认真一点很快就能让人脱颖而出，于是
有的人二十多岁做了经理，有的人迟些也终于赢得了初赛，三十多岁成了经理。然后是复赛，能参加复赛的都是赢得初赛的，每个人都有些能耐，在聪明才智上都不
成问题，这个时候再想要胜出就不那么容易了，单靠一点点努力和认真还不够，要有很强的坚忍精神，要懂得靠团队的力量，要懂得收服人心，要有长远的眼光&#8230;&#8230;
<br><span style="display: none;">#a2ea8@ E(n0</span><span style="display: none;">51Testing软件测试网r2E5Z.Ke,gP~</span><br>看上去赢得复赛并不容易，但，还不是那么难。因为这个世界的规律就是给人一点成功的同时让人骄傲自满，刚刚赢得初赛的人往往不知道自己赢得的仅仅是初赛，有了一点小小的成绩大多数人都会骄傲自满起来，认为自己已经懂得了全部，不需要再努力再<a  href="javascript:;" onclick="javascript:tagshow(event, '%d1%a7%cf%b0');" target="_self"><u><strong>学习</strong></u></a>了，
他们会认为之所以不能再进一步已经不是自己的原因了。虽然他们仍然不好对付，但是他们没有耐性，没有容人的度量，更没有清晰长远的目光。就像一只愤怒的斗
牛，虽然猛烈，最终是会败的，而赢得复赛的人则象斗牛士一样，不急不躁，跟随着自己的节拍，慢慢耗尽对手的耐心和体力。赢得了复赛以后，大约已经是一位很
了不起的职业经理人了，当上了中小公司的总经理，大公司的副总经理，主管着每年几千万乃至几亿的生意。 <span style="display: none;">51Testing软件测试网m	Kg1g
kb</span><br><span style="display: none;">51Testing软件测试网Fy
v!~R_'S</span><br>最
终的决赛来了，说实话我自己都还没有赢得决赛，因此对于决赛的决胜因素也只能凭自己的猜测而已，这个时候的输赢或许就像武侠小说里写得那样，大家都是高
手，只能等待对方犯错了，要想轻易击败对手是不可能的，除了使上浑身解数，还需要一点运气和时间。世界的规律依然发挥着作用，赢得复赛的人已经不只是骄傲
自满了，他们往往刚愎自用，听不进去别人的话，有些人的脾气变得暴躁，<a  href="javascript:;" onclick="javascript:tagshow(event, '%d0%c4%c7%e9');" target="_self"><u><strong>心情</strong></u></a>变得浮躁，身体变得糟糕，他们最大的敌人就是他们自己，在决赛中要做的只是不被自己击败，等着别人被自己击败。这和体育比赛是一样的，最后高手之间的比赛，就看谁失误少谁就赢得了决赛。 <br><span style="display: none;">#jiz
fu�zcn0</span><span style="display: none;">51Testing软件测试网G
m]/B1^]g!wz)w</span><br><span style="color: #ff0000;">你工作快乐么？你的工作好么？</span> <br><span style="display: none;">U{fa!y!p0h*u%A0</span><span style="display: none;">51Testing软件测试网c4G.yU.xc\1Bx/Af^5]</span><br>有
没有觉得干了一段时间以后工作很不开心？有没有觉得自己入错了行？有没有觉得自己没有得到应有的待遇？有没有觉得工作像一团乱麻每天上班都是一种痛苦？有
没有很想换个工作？有没有觉得其实现在的公司并没有当初想象得那么好？有没有觉得这份工作是当初因为生存压力而找的，实在不适合自己？你从工作中得到你想
要得到的了么？你每天开心么？ <br><span style="display: none;">
e~F-NW#kj{0</span><span style="display: none;">51Testing软件测试网[+V+DM�K:t$y</span><br>天涯上愤怒的人很多，你有没有想过，你为什么不快乐？你为什么愤怒？ <span style="display: none;">51Testing软件测试网m"qqTy9We2g4F</span><br><span style="display: none;">51Testing软件测试网 e6Q!j~)n4aA"L%u</span><br>其实，你不快乐的根源，是因为你不知道要什么！你不知道要什么，所以你不知道去追求什么，你不知道追求什么，所以你什么也得不到。 <br><span style="display: none;"> ufB(K/k0</span><br><span style="display: none;">m�sr2xd'BWB`0</span>我
总觉得，职业生涯首先要关注的是自己，自己想要什么？大多数人大概没想过这个问题，唯一的想法只是——我想要一份工作，我想要一份不错的薪水，我知道所有
人对于薪水的渴望，可是，你想每隔几年重来一次找工作的过程么？你想每年都在这种对于工作和薪水的焦急不安中度过么？不想的话，就好好想清楚。饮鸩止渴，
不能因为口渴就拼命喝毒药。越是焦急，越是觉得自己需要一份工作，越饥不择食，越想不清楚，越容易失败，你的经历越来越差，下一份工作的人看着你的简历就
皱眉头。于是你越喝越渴，越渴越喝，陷入恶性循环。最终只能哀叹世事不公或者生不逢时，只能到天涯上来发泄一把，在失败者的共鸣当中寻求一点心理平衡罢
了。大多数人都有生存压力，我也是，有生存压力就会有很多焦虑，积极的人会从焦虑中得到动力，而消极的人则会因为焦虑而迷失方向。所有人都必须在压力下做
出选择，这就是世道，你喜欢也罢不喜欢也罢。 <br><span style="display: none;">qqteP%H"L_s
[0</span><span style="display: none;">51Testing软件测试网7[ N%}'Rk-ez0W</span><br>一
般我们处理的事情分为重要的事情和紧急的事情，如果不做重要的事情就会常常去做紧急的事情。比如锻炼身体保持健康是重要的事情，而看病则是紧急的事情。如
果不锻炼身体保持健康，就会常常为了病痛烦恼。又比如防火是重要的事情，而救火是紧急的事情，如果不注意防火，就要常常救火。找工作也是如此，想好自己究
竟要什么是重要的事情，找工作是紧急的事情，如果不想好，就会常常要找工作。往往紧急的事情给人的压力比较大，迫使人们去赶紧做，相对来说重要的事情反而
没有那么大的压力，大多数人做事情都是以压力为导向的，压力之下，总觉得非要先做紧急的事情，结果就是永远到处救火，永远没有停歇的时候。(很多人的工作
也像是救火队一样忙碌痛苦，也是因为工作中没有做好重要的事情。)那些说自己活在水深火热为了生存顾不上那么多的朋友，今天找工作困难是当初你们没有做重
要的事情，是结果不是原因。如果今天你们还是因为急于要找一份工作而不去思考，那么或许将来要继续承受痛苦找工作的结果。 <br><span style="display: none;">M"I9^,Gp0</span><span style="display: none;">51Testing软件测试网\.}y/^.Q|\%|</span><br>我始终觉得我要说的话题，沉重了点，需要很多思考，远比唐笑打武警的话题来的枯燥乏味，但是，天下没有轻松的成功，成功，要付代价。请先忘记一切的生存压力，想想这辈子你最想要的是什么？所以，最要紧的事情，先想好自己想要什么。 <br><span style="display: none;">4@+Tz:r;i
C4Q1F5K�i0</span><br><span style="display: none;">	TZB
I&amp;p0</span><span style="color: #ff0000;">什么是好工作</span> <br><span style="display: none;">x8i-AcU3M+I0</span><br><span style="display: none;">%~O,hu^0P7O0</span>当初<a  href="javascript:;" onclick="javascript:tagshow(event, '%ce%a2%c8%ed');" target="_self"><u><strong>微软</strong></u></a>有
个唐骏，很多大学里的年轻人觉得这才是他们向往的职业生涯，我在清华bbs里发的帖子被这些学子们所不屑，那个时候学生们只想出国或者去外企，不过如今看
来，我还是对的，唐骏去了盛大，陈天桥创立的盛大，一家民营公司。一个高学历的海归在500强的公司里拿高薪水，这大约是很多年轻人的梦想，问题是，每年
毕业的大学生都在做这个梦，好的职位却只有500个。 <br><span style="display: none;">$yt^/V9i#}^W0</span><br><span style="display: none;">q0|9Y&amp;WR^0</span>人
都是要面子的，也是喜欢攀比的，即使在工作上也喜欢攀比，不管那是不是自己想要的。大家认为外企公司很好，可是好在哪里呢？好吧，他们在比较好的写字楼，
这是你想要的么？他们出差住比较好的酒店，这是你想要的么？别人会羡慕一份外企公司的工作，这是你想要的么？那一切都是给别人看的，你干吗要活得那么辛苦
给别人看？另一方面，他们薪水福利一般，并没有特别了不起，他们的晋升机会比较少，很难做到很高阶的主管，他们虽然厌恶常常加班，却不敢不加班，因为&#8220;你
不干有得是人干&#8221;，大部分情况下会找个台湾人香港人新加坡人来管你，而这些人又往往有些莫名其妙的优越感。你想清楚了么？500强一定好么？找工作究竟是
考虑你想要什么，还是考虑别人想看什么？ <span style="display: none;">51Testing软件测试网5BJ#b*?K`</span><br><span style="display: none;">51Testing软件测试网#Z1GtN&amp;nw2mE</span><br>我
的大学同学们大多数都到美国了，甚至毕业这么多年了，还有人最近到国外去了。出国真的有那么好么？我的大学同学们，大多数还是在博士、博士后、访问学者地
挣扎着，至今只有一个正经在一个美国大学里拿到个正式的教职。国内的教授很难当么？我有几个表亲也去了国外了，他们的父母独自在国内，没有人照顾，有好几
次人在家里昏倒都没人知道，出国，真的这么光彩么？就像有人说的&#8220;很多事情就像看A片，看的人觉得很爽，做的人未必。&#8221; <br><span style="display: none;">/p$rr6@.h5]G0</span><span style="display: none;">51Testing软件测试网 F)\MU|G</span><br>人总想找到那个最好的，可是，什么是最好的？你觉得是最好的那个，是因为你的确了解，还是因为别人说他是最好的？即使他对于别人是最好的，对于你也一定是最好的么？ <span style="display: none;">51Testing软件测试网,op*t(u0e.n
L}</span><br><br><span style="display: none;">$xLJ&amp;Q)t	Xm0</span>对
于自己想要什么，自己要最清楚，别人的意见并不是那么重要。很多人总是常常被别人的意见所影响，亲戚的意见，朋友的意见，同事的意见&#8230;&#8230;问题是，你究竟是
要过谁的一生？人的一生不是父母一生的续集，也不是儿女一生的前传，更不是朋友一生的外篇，只有你自己对自己的一生负责，别人无法也负不起这个责任。自己
做的决定，至少到最后，自己没什么可后悔。对于大多数正常智力的人来说，所做的决定没有大的对错，无论怎么样的选择，都是可以尝试的。比如你没有考自己上
的那个学校，没有入现在这个行业，这辈子就过不下去了？就会很失败？不见得。 <br><span style="display: none;">wOn`9D5k[0</span><span style="display: none;">51Testing软件测试网TMM#KvBK'U(IX#o</span><br>我
想，好工作，应该是适合你的工作，具体点说，应该是能给你带来你想要的东西的工作，你或许应该以此来衡量你的工作究竟好不好，而不是拿公司的大小，规模，
外企还是国企，是不是有名，是不是上市公司来衡量。小公司，未必不是好公司，赚钱多的工作，也未必是好工作。你还是要先弄清楚你想要什么，如果你不清楚你
想要什么，你就永远也不会找到好工作，因为你永远只看到你得不到的东西，你得到的，都是你不想要的。 <span style="display: none;">51Testing软件测试网6z*l(LC
o@A0G8@N:C;Y</span><br><br><span style="display: none;">7Y;Y)CA
B1@`0</span>可能，最好的，已经在你的身边，只是，你还没有学会珍惜。人们总是盯着得不到的东西，而忽视了那些已经得到的东西。 <span style="display: none;">51Testing软件测试网 |'E;{6VFO</span><br><span style="display: none;">51Testing软件测试网g'A\ [:i+s-q7?.e-i</span><br>我
发现中国人的励志和国外的励志存在非常大的不同，中国的励志比较鼓励人立下大志愿，卧薪尝胆，有朝一日成富成贵。而国外的励志比较鼓励人勇敢面对现实生
活，面对普通人的困境，虽然结果也是成富成贵，但起点不一样，相对来说，我觉得后者在操作上更现实，而前者则需要用999个失败者来堆砌一个成功者的故
事。 <br><span style="display: none;">si-E#T(X	z0</span><br><span style="display: none;">:t7i(PUe'LO.LG0</span>我们都是普通人，普通人的意思就是，概率这件事是很准的。因此，我们不会买彩票中500万，我们不会成为比尔盖茨或者李嘉诚，我们不会坐飞机掉下来，我们当中很少的人会创业成功，我们之中有30%的人会离婚，我们之中大部分人会活过65岁&#8230;&#8230; <span style="display: none;">51Testing软件测试网!C'G.\LV*Ii</span><br><br><span style="display: none;">+|?l+NJ?0</span>所
以请你在想自己要什么的时候，要得&#8220;现实&#8221;一点，你说我想要做李嘉诚，抱歉，我帮不上你。成为比尔盖茨或者李嘉诚这种人，是靠命的，看我写的这篇文章绝对
不会让你成为他们，即使你成为了他们，也绝对不是我这篇文章的功劳。&#8220;王侯将相宁有种乎&#8221;但真正当皇帝的只有一个人，王侯将相，人也不多。目标定得高些对
于喜欢挑战的人来说有好处，但对于大多数普通人来说，反而比较容易灰心沮丧，很容易就放弃了。 <span style="display: none;">51Testing软件测试网p.VsxtAg.S</span><br><br><span style="display: none;">U;S3F6v.m#|Z0</span>回
过头来说，李嘉诚比你有钱大致50万倍，他比你更快乐么？或许。有没有比你快乐50万倍，一定没有。他比你最多也就快乐一两倍，甚至有可能还不如你快乐。
寻找自己想要的东西不是和别人比赛，比谁要得更多更高，比谁的目标更远大。虽然成为李嘉诚这个目标很宏大，但你并不见得会从这个目标以及追求目标的过程当
中获得快乐，而且基本上你也做不到。你必须听听你内心的声音，寻找真正能够使你获得快乐的东西，那才是你想要的东西。 <br><span style="display: none;">q`5j'Ju
r$Z0</span><br><span style="display: none;">GuJDqz6[V T0</span>你
想要的东西，或者我们把它称之为目标，目标其实并没有高低之分，你不需要因为自己的目标没有别人远大而不好意思，达到自己的目标其实就是成功，成功有大有
小，快乐却是一样的。我们追逐成功，其实追逐的是成功带来的快乐，而非成功本身。职业生涯的道路上，我们常常会被攀比的心态蒙住眼睛，忘记了追求的究竟是
什么，忘记了是什么能使我们更快乐。 <br><span style="display: none;">Z0x-r^*HR0</span><br><span style="display: none;">l8S["L#]NP5l0</span>社
会上一夜暴富的新闻很多，这些消息，总会在我们的心里面掀起很多涟漪，涟漪多了就变成惊涛骇浪，心里的惊涛骇浪除了打翻承载你目标的小船，并不会使得你也
一夜暴富。&#8220;只见贼吃肉，不见贼挨揍。&#8221;我们这些普通人既没有当贼的勇气，又缺乏当贼的狠辣绝决，虽然羡慕吃肉，却更害怕挨揍，偶尔看到几个没挨揍的贼就
按奈不住，或者心思活动，或者大感不公，真要叫去做贼，却也不敢。 <span style="display: none;">51Testing软件测试网I+D(\}mly
z_9d</span><br><br><span style="display: none;">h4go.u(h#aT0</span>我还是过普通人的日子，要普通人的快乐，至少，晚上睡得着觉。 <br><span style="display: none;">$Mty [+q7~-`$m'F){+b0</span><span style="display: none;">51Testing软件测试网H"K
k-l	Icm*@(u0}</span><br><span style="color: #ff0000;">跳槽与积累</span> <span style="display: none;">51Testing软件测试网@V5Vw9Nq
A3tV
S</span><br><br><span style="display: none;">	g#Onu1l�]0</span>首
先要说明，工作是一件需要理智的事情，所以不要在工作上耍个性，天涯上或许会有人觉得你很有个性而叫好，煤气公司电话公司不会因为觉得你很有个性而免了你
的帐单。当你很帅地炒掉了你的老板，当你很酷地挖苦了一番招聘的HR，账单还是要照付，只是你赚钱的时间更少了，除了你自己，没人受损失。 <span style="display: none;">51Testing软件测试网kuCnxb+x#yN9Z</span><br><br><span style="display: none;">n{!N^"Ej"x(A0</span>我
并不反对跳槽，但跳槽决不是解决问题的办法，而且频繁跳槽的后果是让人觉得没有忠诚度可言，而且不能安心工作。现在很多人从网上找工作，很多找工作的网站
常常给人出些馊主意，要知道他们是盈利性企业，当然要从自身盈利的角度来考虑，大家越是频繁跳槽频繁找工作他们越是生意兴隆，所以鼓动人们跳槽是他们的工
作。所以他们会常常告诉你，你拿的薪水少了，你享受的福利待遇差了，又是&#8220;薪情快报&#8221;又是&#8220;赞叹自由奔放的灵魂&#8221;。至于是否会因此让你不能安心，你跳了槽
是否解决问题，是否更加开心，那个，他们管不着。 <span style="display: none;">51Testing软件测试网
?8I;Bx(@*PuU6U</span><br><span style="display: none;">51Testing软件测试网]3X9},a|H:X"z+@L</span><br>要
跳槽肯定是有问题，一般来说问题发生了，躲是躲不开的，很多人跳槽是因为这样或者那样的不开心，如果这种不开心，在现在这个公司不能解决，那么在下一个公
司多半也解决不掉。你必须相信，90%的情况下，你所在的公司并没有那么烂，你认为不错的公司也没有那么好。就像围城里说的，&#8220;城里的人拼命想冲出来，而
城外的人拼命想冲进去。&#8221;每个公司都有每个公司的问题，没有问题的公司是不存在的。换个环境你都不知道会碰到什么问题，与其如此，不如就在当下把问题解决
掉。很多问题当你真的想要去解决的时候，或许并没有那么难。有的时候你觉得问题无法解决，事实上，那只是&#8220;你觉得&#8221;。 <br><span style="display: none;">r!k&amp;WHhf0U%[	Lb0</span><span style="display: none;">51Testing软件测试网)m�tS1R#_(gddd</span><br>人生的曲线应该是曲折向上的，偶尔会遇到低谷但大趋势总归是曲折向上的，而不是象脉冲波一样每每回到起点，我见过不少<a  href="javascript:;" onclick="javascript:tagshow(event, '%c3%e6%ca%d4');" target="_self"><u><strong>面试</strong></u></a>者，30多岁了，四五份工作经历，每次多则3年，少则1年，30多岁的时候回到起点从一个初级职位开始干起，拿基本初级的薪水，和20多岁的年轻人一起竞争，不觉得有点辛苦么？这种日子好过么？ <br><span style="display: none;">(W]:r
zh_C+w
P0</span><span style="display: none;">51Testing软件测试网%b:`\+e Fo</span><br>资
本靠的就是积累，这种积累包括人际关系，经验，人脉，口碑&#8230;&#8230;如果常常更换行业，代表几年的积累付之东流，一切从头开始，如果换了两次行业，35岁的时候
大概只有5年以下的积累，而一个没有换过行业的人至少有了10年的积累，谁会占优势？工作到2-3年的时候，很多人觉得工作不顺利，好像到了一个瓶颈，心
情烦闷，就想辞职，乃至换一个行业，觉得这样所有一切烦恼都可以抛开，会好很多。其实这样做只是让你从头开始，到了时候还是会发生和原来行业一样的困难，
熬过去就向上跨了一大步，要知道每个人都会经历这个过程，每个人的职业生涯中都会碰到几个瓶颈，你熬过去了而别人没有熬过去你就领先了。跑长跑的人会知
道，开始的时候很轻松，但是很快会有第一次的难受，但过了这一段又能跑很长一段，接下来会碰到第二次的难受，坚持过了以后又能跑一段，如此往复，难受一次
比一次厉害，直到坚持不下去了。大多数人第一次就坚持不了了，一些人能坚持到第二次，第三次虽然大家都坚持不住了，可是跑到这里的人也没几个了，这点资本
足够你安稳活这一辈子了。 <br><span style="display: none;">$^} h%}?9D0</span><span style="display: none;">51Testing软件测试网xo+?p{"M8E-d	{d	K*w</span><br>一
份工作到两三年的时候，大部分人都会变成熟手，这个时候往往会陷入不断的重复，有很多人会觉得厌倦，有些人会觉得自己已经搞懂了一切，从而懒得去寻求进步
了。很多时候的跳槽是因为觉得失去兴趣了，觉得自己已经完成比赛了。其实这个时候比赛才刚刚开始，工作两三年的人，无论是客户关系，人脉，手下，和领导的
关系，在业内的名气&#8230;&#8230;还都是远远不够的，但稍有成绩的人总是会自我感觉良好的，每个人都觉得自己跟客户关系铁得要命，觉得自己在业界的口碑好得很。其实
可以肯定地说，一定不是，这个时候，还是要拿出前两年的干劲来，稳扎稳打，积累才刚刚开始。 <span style="display: none;">51Testing软件测试网4p3Gf
U!\`+Md9a#{.~</span><br><span style="display: none;">51Testing软件测试网HE8r2\3paW</span><br>你
足够了解你的客户吗？你知道他最大的烦恼是什么吗？你足够了解你的老板么？你知道他最大的烦恼是什么吗？你足够了解你的手下么？你知道他最大的烦恼是什么
吗？如果你不知道，你凭什么觉得自己已经积累够了？如果你都不了解，你怎么能让他们帮你的忙，做你想让他们做的事情？如果他们不做你想让他们做的事情，你
又何来的成功？ <span style="display: none;">51Testing软件测试网%Z0A
R^A/Y</span><br><span style="display: none;">51Testing软件测试网 V(k8qP$`'QD�h</span><br><span style="color: #ff0000;">等待</span> <span style="display: none;">51Testing软件测试网N.h$hw{SF%h*c?</span><br><span style="display: none;">51Testing软件测试网�l0Qg;mY</span><br>这是个浮躁的人们最不喜欢的话题，本来不想说这个话题，因为会引起太多的争论，而我又无意和人争论这些，但是考虑到对于职业生涯的长久规划，这是一个躲避不了的话题，还是决定写一写，不爱看的请离开吧。 <span style="display: none;">51Testing软件测试网` J4K(Wz�D
nE4pj*\</span><br><br><span style="display: none;">
v5k1M	I&amp;W2P^`u0</span>并
不是每次穿红灯都会被汽车撞，并不是每个罪犯都会被抓到，并不是每个错误都会被惩罚，并不是每个贪官都会被枪毙，并不是你的每一份努力都会得到回报，并不
是你的每一次坚持都会有人看到，并不是你每一点付出都能得到公正的回报，并不是你的每一个善意都能被理解&#8230;&#8230;这个，就是世道。好吧，世道不够好，可是，你
有推翻世道的勇气么？如果没有，你有更好的解决办法么？有很多时候，人需要一点耐心，一点信心。每个人总会轮到几次不公平的事情，而通常，安心等待是最好
的办法。 <br><span style="display: none;">dY{+qv*UO0</span><span style="display: none;">51Testing软件测试网0xsMm^%U
{-j</span><br>有
很多时候我们需要等待，需要耐得住寂寞，等待属于你的那一刻。周润发等待过，刘德华等待过，周星驰等待过，王菲等待过，张艺谋也等待过&#8230;&#8230;看到了他们如今
的功成名就的人，你可曾看到当初他们的等待和耐心？你可曾看到金马奖影帝在街边摆地摊？你可曾看到德云社一群人在剧场里给一位观众说相声？你可曾看到周星
驰的角色甚至连一句台词都没有？每一个成功者都有一段低沉苦闷的日子，我几乎能想象得出来他们借酒浇愁的样子，我也能想象得出他们为了生存而挣扎的窘迫。
在他们一生最中灿烂美好的日子里，他们渴望成功，但却两手空空，一如现在的你。没有人保证他们将来一定会成功，而他们的选择是耐住寂寞。如果当时的他们总
念叨着&#8220;成功只是属于特权阶级的&#8221;，你觉得他们今天会怎样？ <br><span style="display: none;">;m%Y]3GL�Xo0</span><span style="display: none;">51Testing软件测试网j8w,~N1QZ4dX(?</span><br>曾
经我也不明白有些人为什么并不比我有能力却要坐在我的头上，年纪比我大就一定要当我的领导么？为什么有些烂人不需要努力就能赚钱？为什么刚刚改革开放的时
候的人能那么容易赚钱，而轮到我们的时候，什么事情都要正规化了？有一天我突然想，我还在上学的时候他们就在社会里挣扎奋斗了，他们在社会上奋斗积累了十
几二十年，我们新人来了，他们有的我都想要，我这不是在要公平，我这是在要抢劫。因为我要得太急，因为我忍不住寂寞。二十多岁的男人，没有钱，没有事业，
却有蓬勃的欲望。 <br><span style="display: none;">;T8ac%~/pmAA|}0</span><br><span style="display: none;">
R.HE2\4u0h_KKP0</span>人
总是会遇到挫折的，人总是会有低潮的，人总是会有不被人理解的时候的，人总是有要低声下气的时候，这些时候恰恰是人生最关键的时候，因为大家都会碰到挫
折，而大多数人过不了这个门槛，你能过，你就成功了。在这样的时刻，我们需要耐心等待，满怀信心地去等待，相信，生活不会放弃你，机会总会来的。至少，你
还年轻，你没有坐牢，没有生治不了的病，没有欠还不起的债。比你不幸的人远远多过比你幸运的人，你还怕什么？路要一步步走，虽然到达终点的那一步很激动人
心，但大部分的脚步是平凡甚至枯燥的，但没有这些脚步，或者耐不住这些平凡枯燥，你终归是无法迎来最后的那些激动人心。 <span style="display: none;">51Testing软件测试网9y5DfK$S</span><br><span style="display: none;">51Testing软件测试网A$E9w[rtAx</span><br>逆境，是上帝帮你淘汰竞争者的地方。要知道，你不好受，别人也不好受，你坚持不下去了，别人也一样，千万不要告诉别人你坚持不住了，那只能让别人获得坚持的信心，让竞争者看着你微笑的面孔，失去信心，退出比赛。胜利属于那些有耐心的人。 <br><span style="display: none;">9JR	V�a7Rz-S/A-i3W0</span><span style="display: none;">51Testing软件测试网.nj0x'E+Ei&amp;r3^*b</span><br>在
最绝望的时候，我会去看电影《The Pursuit of Happyness》《Jerry
Maguire》，让自己重新鼓起勇气，因为，无论什么时候，我们总还是有希望。当所有的人离开的时候，我不失去希望，我不放弃。每天下班坐在车里，我喜
欢哼着《隐形的翅膀》看着窗外，我知道，我在静静等待，等待属于我的那一刻。 <span style="display: none;">51Testing软件测试网d�F4U)X rb/Y$`,| Y</span><br><span style="display: none;">51Testing软件测试网(^J	C"SD+X5y</span><br><span style="display: none;">51Testing软件测试网W|�bh%q0N</span><br>原贴里伊吉网友的话我很喜欢，抄录在这里： <br><span style="display: none;">*sN,R?&amp;T%H0</span><span style="display: none;">51Testing软件测试网s7|(w1[(\^	h</span><br>每个人都希望，自己是独一无二的特殊者 <br><span style="display: none;">'n2h,E%g�U2y$r0</span><br><span style="display: none;">y0hz4T%?9J]J0</span>含着金匙出生、投胎到好家庭、工作安排到电力局拿1w月薪这样的小概率事件，当然最好轮到自己 <br><span style="display: none;">F@CCo3z1f0</span><br><span style="display: none;">k'R*Uxg7E!Q[0</span>红军长征两万五、打成右派反革命、胼手胝足牺牲尊严去奋斗，最好留给祖辈父辈和别人 自然，不是每个吃过苦的人都会得到回报 <span style="display: none;">51Testing软件测试网n*\%]U%U]5}"k5B'Z</span><br><br><span style="display: none;">#G
hr1}	`0</span>&nbsp;&nbsp;&nbsp; 但是，任何时代，每一个既得利益者身后，都有他的祖辈父辈奋斗挣扎乃至流血付出生命的身影 <br><span style="display: none;">a
i#QUFzj#Q0</span><br><span style="display: none;">4k;\9Q sQ4~#XK%?]0</span>&nbsp;&nbsp;&nbsp; 羡慕别人有个好爸爸，没什么不可以问题是，你的下一代，会有一个好爸爸吗？ <span style="display: none;">51Testing软件测试网2NHOKA,Nx!~m)x</span><br><br><span style="display: none;">
]"B*a;vx'gX,W0</span>&nbsp;&nbsp;&nbsp; 至于问到为什么不能有同样的赢面概率？我只能问：为什么物种竞争中，人和猴子不能有同样的赢面概率？ <br><span style="display: none;">
n(IH&amp;q]}0</span><span style="display: none;">51Testing软件测试网P7v{u
g'?%G3{p</span><br>&nbsp;&nbsp;&nbsp; 物竞天择。猴子的灵魂不一定比你卑微，但你身后有几十万年的类人猿进化积淀。 <span style="display: none;">51Testing软件测试网O3C'?J0G</span><br><br><span style="display: none;">"R s(c:c-lPD0</span><span style="color: #ff0000;">入对行跟对人</span> <span style="display: none;">51Testing软件测试网r.Xv*Oi6Qy3t*M8M E</span><br><span style="display: none;">51Testing软件测试网t
q|f#E9Z</span><br>&nbsp;&nbsp;&nbsp;
在中国，大概很少有人是一份职业做到底的，虽然如此，第一份工作还是有些需要注意的地方，有两件事情格外重要，第一件是入行，第二件事情是跟人。第一份工
作对人最大的影响就是入行，现代的职业分工已经很细，我们基本上只能在一个行业里成为专家，不可能在多个行业里成为专家。很多案例也证明即使一个人在一个
行业非常成功，到另外一个行业，往往完全不是那么回事情，&#8220;你想改变世界，还是想卖一辈子汽水？&#8221;是乔布斯邀请百事可乐总裁约翰&#183;斯考利加盟苹果时所说的
话，结果这位在百事非常成功的约翰，到了苹果表现平平。其实没有哪个行业特别好，也没有哪个行业特别差，或许有报道说哪个行业的平均薪资比较高，但是他们
没说的是，那个行业的平均压力也比较大。看上去很美的行业一旦进入才发现很多地方其实并不那么完美，只是外人看不见。 <span style="display: none;">51Testing软件测试网1Vrc)V7C#uV)a</span><br><span style="display: none;">51Testing软件测试网I}
@%ZoT:M+@\</span><br>&nbsp;&nbsp;&nbsp;
说实话，我自己都没有发大财，所以我的建议只是让人快乐工作的建议，不是如何发大财的建议，我们只讨论一般普通打工者的情况。我认为选择什么行业并没有太
大关系，看问题不能只看眼前。比如，从前年开始，国家开始整顿医疗行业，很多医药公司开不下去，很多医药行业的销售开始转行。其实医药行业的不景气是针对
所有公司的，并非针对一家公司，大家的日子都不好过，这个时候跑掉是非常不划算的，大多数正规的医药公司即使不做新生意撑个两三年总是能撑的，大多数医药
销售靠工资撑个两三年也是可以撑的，国家不可能永远捏着医药行业不放的，两三年以后光景总归还会好起来的，那个时候别人都跑了而你没跑，那时的日子应该会
好过很多。有的时候觉得自己这个行业不行了，问题是，再不行的行业，做得人少了也变成了好行业，当大家都觉得不好的时候，往往却是最好的时候。大家都觉得
金融行业好，金融行业门槛高不说，有多少人削尖脑袋要钻进去，竞争激励，进去以后还要时时提防，一个疏忽，就被后来的人给挤掉了，压力巨大，又如何谈得上
快乐？也就未必是&#8220;好&#8221;工作了。 <br><span style="display: none;">s)nxox)fY0</span><span style="display: none;">51Testing软件测试网d5if�e)N+_Z</span><br>&nbsp;&nbsp;&nbsp;
太阳能这个东西至今还不能进入实际应用的阶段，但是中国已经有7家和太阳能有关的公司在纽交所上市了，国美苏宁永乐其实是贸易型企业，也能上市，鲁泰纺织
连续10年利润增长超过50%，卖茶的一茶一座，卖衣服的海澜之家都能上市&#8230;&#8230;其实选什么行业真的不重要，关键是怎么做。事情都是人做出来的，关键是人。
<br><span style="display: none;">a't"x8t4_H-j0</span><br><span style="display: none;">?e/~A
}5y+|2R2^0</span>&nbsp;&nbsp;&nbsp;
有一点是需要记住的，这个世界上，有史以来直到我们能够预见得到的未来，成功的人总是少数，有钱的人总是少数，大多数人是一般的，普通的，不太成功的。因
此，大多数人的做法和看法，往往都不是距离成功最近的做法和看法。因此大多数人说好的东西不见得好，大多数人说不好的东西不见得不好。大多数人都去炒股的
时候说明跌只是时间问题，大家越是热情高涨的时候，跌的日子越近。大多数人买房子的时候，房价不会涨，而房价涨的差不多的时候，大多数人才开始买房子。不
会有这样一件事情让大家都变成功，发了财，历史上不曾有过，将来也不会发生。有些东西即使一时运气好得到了，还是会在别的时候别的地方失去的。 <span style="display: none;">51Testing软件测试网C#_Kel0cl</span><br><span style="display: none;">51Testing软件测试网6d5]
Ap]k&amp;z(g</span><br>&nbsp;&nbsp;&nbsp;
年轻人在职业生涯的刚开始，尤其要注意的是，要做对的事情，不要让自己今后几十年的人生总是提心吊胆，更不值得为了一份工作赔上自己的青春年华。我的公司
是个不行贿的公司，以前很多人不理解，甚至自己的员工也不理解，不过如今，我们是同行中最大的企业，客户乐意和我们打交道，尤其是在国家打击腐败的时候，
每个人都知道我们做生意不给钱的名声，都敢于和我们做生意。而勇于给钱的公司，不是倒了，就是跑了，要不就是每天睡不好觉，人还是要看长远一点。很多时
候，看起来最近的路，其实是最远的路，看起来最远的路，其实是最近的路。 <br><span style="display: none;">vW{jt
X_2b0</span><br><span style="display: none;">iFX;^N;ftz0</span>&nbsp;&nbsp;&nbsp; 跟对人是说，入行后要跟个好领导好老师，刚进社会的人做事情往往没有经验，需要有人言传身教。对于一个人的发展来说，一个好领导是非常重要的。所谓&#8220;好&#8221;的标准，不是他让你少干活多拿钱，而是以下三个。 <span style="display: none;">51Testing软件测试网9fvt/E#N6v</span><br><br><span style="display: none;">e3waYl+h#J0</span>&nbsp;&nbsp;&nbsp;
首先，好领导要有宽广的心胸，如果一个领导每天都会发脾气，那几乎可以肯定他不是个心胸宽广的人，能发脾气的时候却不发脾气的领导，多半是非常厉害的领
导。中国人当领导最大的毛病是容忍不了能力比自己强的人，所以常常可以看到的一个现象是，领导很有能力，手下一群庸才或者手下一群闲人。如果看到这样的环
境，还是不要去的好。 <span style="display: none;">51Testing软件测试网\
q(G%sX</span><br><br><span style="display: none;">tErN#]"Bd$zQ0</span>&nbsp;&nbsp;&nbsp;
其次，领导要愿意从下属的角度来思考问题，这一点其实是从面试的时候就能发现的，如果这位领导总是从自己的角度来考虑问题，几乎不听你说什么，这就危险
了。从下属的角度来考虑问题并不代表同意下属的说法，但他必须了解下属的立场，下属为什么要这么想，然后他才有办法说服你，只关心自己怎么想的领导往往难
以获得下属的信服。 <br><span style="display: none;">^R2B/XR{4L%_0</span><span style="display: none;">51Testing软件测试网o
g$B,a6H$^5vM</span><br>&nbsp;&nbsp;&nbsp; 第三，领导敢于承担责任，如果出了问题就把责任往下推，有了功劳就往自己身上揽，这样的领导不跟也罢。选择领导，要选择关键时刻能抗得住的领导，能够为下属的错误买单的领导，因为这是他作为领导的责任。 <br><span style="display: none;">qx$KB7U
i3c0</span><span style="display: none;">51Testing软件测试网
qnr,bZ]
x'S&amp;Y5\</span><br>&nbsp;&nbsp;&nbsp;
有可能，你碰不到好领导，因为，中国的领导往往是屁股决定脑袋的领导，因为他坐领导的位置，所以他的话就比较有道理，这是传统观念官本位的误区，可能有大
量的这种无知无能的领导，只是，这对于你其实是好事，如果将来有一天你要超过他，你希望他比较聪明还是比较笨？相对来说这样的领导其实不难搞定，只是你要
把自己的身段放下来而已。多认识一些人，多和比自己强的人打交道，同样能找到好的老师，不要和一群同样郁闷的人一起控诉社会，控诉老板，这帮不上你，只会
让你更消极。和那些比你强的人打交道，看他们是怎么想的，怎么做的，学习他们，然后跟更强的人打交道。 <br><span style="display: none;">Imf9B:m.q
lY0</span><span style="color: #ff0000;">选择</span> <br><span style="display: none;">(agz,l#Z|0</span><span style="display: none;">51Testing软件测试网Z2@[$l(u$N</span><br>&nbsp;&nbsp;&nbsp; 我们每天做的最多的事情，其实是选择，因此在谈职业生涯的时候不得不提到这个话题。 <span style="display: none;">51Testing软件测试网+b&amp;g2C.W
\K{c</span><br><span style="display: none;">51Testing软件测试网.M~$V:nbJ+r-c</span><br>&nbsp;&nbsp;&nbsp;
我始终认为，在很大的范围内，我们究竟会成为一个什么样的人，决定权在我们自己，每天我们都在做各种各样的选择，我可以不去写这篇文章，去别人的帖子拍拍
砖头，也可以写下这些文字，帮助别人的同时也整理自己的思路，我可以多注意下格式让别人易于阅读，也可以写成一堆，我可以就这样发上来，也可以在发以前再
看几遍，你可以选择不刮胡子就去面试，也可以选择出门前照照镜子&#8230;&#8230;每天，每一刻我们都在做这样那样的决定，我们可以漫不经心，也可以多花些心思，成千上
万的小选择累计起来，就决定了最终我们是个什么样的人。 <br><span style="display: none;">;X/K6JGm|1Td0</span><span style="display: none;">51Testing软件测试网2wbv:y)U/T hI7I6JbE</span><br>&nbsp;&nbsp;&nbsp; 从某种意义上来说我们的未来不是别人给的，是我们自己选择的，很多人会说我命苦啊，没得选择阿，如果你认为&#8220;去微软还是去<a  href="javascript:;" onclick="javascript:tagshow(event, 'ibm');" target="_self"><u><strong>IBM</strong></u></a>&#8221;&#8220;
上清华还是上北大&#8221;&#8220;当销售副总还是当厂长&#8221;这种才叫选择的话，的确你没有什么选择，大多数人都没有什么选择。但每天你都可以选择是否为客户服务更周到一
些，是否对同事更耐心一些，是否把工作做得更细致一些，是否把情况了解得更清楚一些，是否把不清楚的问题再弄清楚一些&#8230;&#8230;你也可以选择在是否在痛苦中继续
坚持，是否抛弃掉自己的那些负面的想法，是否原谅一个人的错误，是否相信我在这里写下的这些话，是否不要再犯同样的错误&#8230;&#8230;生活每天都在给你选择的机会，
每天都在给你改变自己人生的机会，你可以选择赖在地上撒泼打滚，也可以选择咬牙站起来。你永远都有选择。有些选择不是立杆见影的，需要累积，比如农民可以
选择自己常常去浇地，也可以选择让老天去浇地，诚然你今天浇水下去苗不见得今天马上就长出来，但常常浇水，大部分苗终究会长出来的，如果你不浇，收成一定
很糟糕。 <span style="display: none;">51Testing软件测试网q+_!tV'O/U</span><br><br><span style="display: none;">$U	SIk9D0</span>&nbsp;&nbsp;&nbsp;&nbsp;
每天生活都在给你机会，他不会给你一叠现金也不会拱手送你个好工作，但实际上，他还是在给你机会。我的家庭是一个普通的家庭，没有任何了不起的社会关系，
我的父亲在大学毕业以后就被分配到了边疆，那个小县城只有一条马路，他们那一代人其实比我们更有理由抱怨，他们什么也没得到，年轻的时候文化大革命，书都
没得读，支援边疆插队落户，等到老了，却要给年轻人机会了。他有足够的理由象成千上万那样的青年一样坐在那里抱怨生不逢时，怨气冲天。然而在分配到边疆的
十年之后，国家恢复招研究生，他考回了原来的学校。研究生毕业，他被分配到了安徽一家小单位里，又是3年以后，国家第一届招收博士生，他又考回了原来的学
校，成为中国第一代博士，那时的他比现在的我年纪还大。生活并没有放弃他，他也没有放弃生活。10年的等待，他做了他自己的选择，他没有放弃，他没有破罐
子破摔，所以时机到来的时候，他改变了自己的人生。你最终会成为什么样的人，就决定在你的每个小小的选择之间。 <span style="display: none;">51Testing软件测试网6^|@(L:lg</span><br><span style="display: none;">51Testing软件测试网0D*o{RI+J
y</span><br>&nbsp;&nbsp;&nbsp;
你选择相信什么？你选择和谁交朋友？你选择做什么？你选择怎么做？&#8230;&#8230;我们面临太多的选择，而这些选择当中，意识形态层面的选择又远比客观条件的选择来得
重要得多，比如选择做什么产品其实并不那么重要，而选择怎么做才重要。选择用什么人并不重要，而选择怎么带这些人才重要。大多数时候选择客观条件并不要
紧，大多数关于客观条件的选择并没有对错之分，要紧的是选择怎么做。一个大学生毕业了，他要去微软也好，他要卖猪肉也好，他要创业也好，他要做游戏代练也
好，只要不犯法，不害人，都没有什么关系，要紧的是，选择了以后，怎么把事情做好。 <br><span style="display: none;">,dlkW9n0</span><span style="display: none;">51Testing软件测试网g4|
k7E@;bzd*T</span><br>&nbsp;&nbsp;&nbsp;
除了这些，你还可以选择时间和环境，比如，你可以选择把这辈子最大的困难放在最有体力最有精力的时候，也可以走一步看一步，等到了40岁再说，只是到了
40多岁，那正是一辈子最脆弱的时候，上有老下有小，如果在那个时候碰上了职业危机，实在是一件很苦恼的事情。与其如此不如在20多岁30多岁的时候吃点
苦，好让自己脆弱的时候活得从容一些。你可以选择在温室里成长，也可以选择到野外磨砺，你可以选择在办公室吹冷气的工作，也可以选择40度的酷热下，去见
你的客户，只是，这一切最终会累积起来，引导你到你应得的未来。 <span style="display: none;">51Testing软件测试网!DL5u"B"sw%H]b</span><br><span style="display: none;">51Testing软件测试网d,CP;PzM</span><br>&nbsp;&nbsp;&nbsp; 我不敢说所有的事情你都有得选择，但是绝大部分事情你有选择，只是往往你不把这当作一种选择。认真对待每一次选择，才会有比较好的未来。 <br><span style="display: none;">R T$t-n�I%A9g/m,d0</span><span style="display: none;">51Testing软件测试网$`_p4M2ZRc#D3~t</span><br><span style="color: #ff0000;">选择职业</span> <span style="display: none;">51Testing软件测试网$A;M2^q~ kS</span><br><span style="display: none;">51Testing软件测试网\!C#b]2Ei</span><br>&nbsp;&nbsp;&nbsp;
职业的选择，总的来说，无非就是销售、市场、客服、物流、行政、人事、财务、技术、管理几个大类，有个有趣的现象就是，500强的CEO当中最多的是销售
出身，第二多的人是财务出身，这两者加起来大概超过95%。现代IT行业也有技术出身成为老板的，但实际上，后来他们还是从事了很多销售和市场的工作，并
且表现出色，公司才获得了成功，完全靠技术能力成为公司老板的，几乎没有。这是有原因的，因为销售就是一门跟人打交道的学问，而管理其实也是跟人打交道的
学问，这两者之中有很多相通的东西，他们的共同目标就是&#8220;让别人去做某件特定的事情。&#8221;而财务则是从数字的层面了解生意的本质，从宏观上看待生意的本质，
对于一个生意是否挣钱，是否可以正常运作有着最深刻的认识。 <span style="display: none;">51Testing软件测试网&amp;Z.C0h6y0UH;s</span><br><span style="display: none;">51Testing软件测试网&amp;d:v"G#h,U,}9z0|</span><br>&nbsp;&nbsp;&nbsp;
公司小的时候是销售主导公司，而公司大的时候是财务主导公司，销售的局限性在于只看人情不看数字，财务的局限性在于只看数字不看人情。公司初期，运营成本
低，有订单就活得下去，跟客户也没有什么谈判的条件，别人肯给生意做已经谢天谢地了，这个时候订单压倒一切，客户的要求压倒一切，所以当然要顾人情。公司
大了以后，一切都要规范化，免得因为不规范引起一些不必要的风险，同时运营成本也变高，必须提高利润率，把有限的资金放到最有产出的地方。对于上市公司来
说，股东才不管你客户是不是最近出国，最近是不是那个省又在搞严打，到了时候就要把业绩拿出来，拿不出来就抛股票，这个时候就是数字压倒一切。 <span style="display: none;">51Testing软件测试网X;fV?E6C_w]</span><br><br><span style="display: none;">&amp;q#Vh;FI1F4JI0</span>&nbsp;&nbsp;&nbsp;
前两天听到有人说一句话觉得很有道理，开始的时候我们想&#8220;能做什么？&#8221;，等到公司做大了有规模了，我们想&#8220;不能做什么。&#8221;很多人在工作中觉得为什么领导这
么保守，这也不行那也不行，错过很多机会。很多时候是因为，你还年轻，你想的是&#8220;能做什么&#8221;，而作为公司领导要考虑的方面很多，他比较关心&#8220;不能做什么
&#8221;。 <br><span style="display: none;">)PPc5jY&amp;iu8o{x0</span><br><span style="display: none;">~L]:T,tRQ t0</span>&nbsp;&nbsp;&nbsp;
我并非鼓吹大家都去做销售或者财务，究竟选择什么样的职业，和你究竟要选择什么样的人生有关系，有些人就喜欢下班按时回家，看看书听听音乐，那也挺好，但
就不适合找个销售的工作了，否则会是折磨自己。有些人就喜欢出风头，喜欢成为一群人的中心，如果选择做财务工作，大概也干不久，因为一般老板不喜欢财务太
积极，也不喜欢财务话太多。先想好自己要过怎样的人生，再决定要找什么样的职业。有很多的不快乐，其实是源自不满足，而不满足，很多时候是源自于心不定，
而心不定则是因为不清楚究竟自己要什么，不清楚要什么的结果就是什么都想要，结果什么都没得到。 <span style="display: none;">51Testing软件测试网}0hjSs#VA</span><br><span style="display: none;">51Testing软件测试网kNjjG'x;[I</span><br>&nbsp;&nbsp;&nbsp;
我想，我们还是因为生活而工作，不是因为工作而生活，生活是最要紧的，工作只是生活中的一部分。我总是觉得生活的各方方面都是相互影响的，如果生活本身一
团乱麻，工作也不会顺利。所以要有娱乐、要有社交、要锻炼身体，要有和睦的家庭&#8230;&#8230;最要紧的，要开心，我的两个销售找我聊天，一肚子苦水，我问他们，2年
以前，你什么都没有，工资不高，没有客户关系，没有业绩，处于被开的边缘，现在的你比那时条件好了很多，为什么现在却更加不开心了？如果你做得越好越不开
心，那你为什么还要工作？首先的首先，人还是要让自己高兴起来，让自己心态好起来，这种发自内心的改变会让你更有耐心，更有信心，更有气质，更能包容&#8230;&#8230;
否则，看看镜子里的你，你满意么？ <br><span style="display: none;">
K"F m)uk8\&amp;]1?pV2U�D0</span><span style="display: none;">51Testing软件测试网
sj�EN
[]K</span><br>&nbsp;&nbsp;&nbsp;
有人会说，你说得容易，我每天加班，不加班老板就会把我炒掉，每天累得要死，哪有时间娱乐、社交、锻炼？那是人们把目标设定太高的缘故，如果你还在动不动
就会被老板炒掉的边缘，那么你当然不能设立太高的目标，难道你还想每天去打高尔夫？你没时间去健身房锻炼身体，但是上下班的时候多走几步可以吧，有楼梯的
时候走走楼梯不走电梯可以吧？办公的间隙扭扭脖子拉拉肩膀做做俯卧撑可以吧？谁规定锻炼就一定要拿出每天2个小时去健身房？你没时间社交，每月参加郊游一
次可以吧，周末去参加个什么音乐班，绘画班之类的可以吧，去尝试认识一些同行，和他们找机会交流交流可以吧？开始的时候总是有些难的，但迈出这一步就会向
良性循环的方向发展。而每天工作得很苦闷，剩下的时间用来咀嚼苦闷，只会陷入恶性循环，让生活更加糟糕。<img src ="http://www.cnitblog.com/stomic/aggbug/54079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2009-02-01 09:41 <a href="http://www.cnitblog.com/stomic/archive/2009/02/01/54079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）IT职场里的某些人感悟</title><link>http://www.cnitblog.com/stomic/archive/2009/01/05/53495.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Mon, 05 Jan 2009 02:57:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2009/01/05/53495.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/53495.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2009/01/05/53495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/53495.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/53495.html</trackback:ping><description><![CDATA[<div class=xspace-itemmessage id=xspace-showmessage><font face=幼圆 color=#006699 size=4>IT职场里的某些人</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%B8%D0%CE%F2');"><u><font face=幼圆 color=#006699 size=4>感悟</font></u></a><font face=幼圆 color=#006699 size=4>（转）<br>1.一个企业，80％的价值是由20％的人创造的，其他80％的人只创造了20％的价值，而他们最大的作用就是刺激这20％的人创造出 80％的价值，而能获得企业肯定和好处，也仅仅是这20％的人，所以，想要站的稳，爬的高，就只有成为这20％中的一员，这是千古不变的真理，所谓的团队，说粗俗点就是拉帮结派，兄弟，现实一点，人的社会就是这样，看看历史如此，现在如此，将来还是如此，不管</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%D6%B0%B3%A1');"><u><font face=幼圆 color=#006699 size=4>职场</font></u></a><font face=幼圆 color=#006699 size=4>，管场，都是如此，呵呵，一点浅见。<br>2.过人的头脑比</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%BC%BC%CA%F5');"><u><font face=幼圆 color=#006699 size=4>技术</font></u></a><font face=幼圆 color=#006699 size=4>更重要！有了技术你可以独当一面，可是懂了权术，你就可以独挡八面了！钱花花的来了，多看看书，厚黑学，鬼谷子之类的，保证有好处，揣测别人的心理啊！<br>3.人本来就是复杂的，世界上没有绝对的好人，也没有绝对的坏蛋，好与坏只是一念之差。人人都可以做好人，有时候，人人也都可以成为坏蛋，这个世界上，没有永远的敌人，也没有永久的朋友，只有永恒不变的利益。但是你不能欺骗自己的兄弟！<br>4.等咸鱼翻身的时候，也就是这锅汤煮熟的时候了！做好人有什么用？人善被人欺，马善被人骑，他妈的，一代天子一朝臣，这是自古不变的道理。谁不想将重权交给忠于自己的人来掌握！<br>5.智，谋天下。勇，争天下。这个世界上，没有什么东西是得不到的，只有抓不住而从掌心中悄然流走的。做人要讲究城府，在你未成为三军统帅之前，不要暴露自己，等你成为将军了，大刀阔斧的给杀！但是要记住：先纳新，后吐故！如果先吐故，势必完蛋！康熙用此法一统朝政！<br>6.不管他是谁，不管他的为人如何，只要对我们有利，就应该想办法让他为我们做事！不是不报时候未到！<br>7.自己要懂技术，还要学会驾驭权术。<br>8.鄙人最近看了小说《无以言退》，里面经典话很多，对你这种情况，可以录几句：&#8220;走很容易，留下来才是修行&#8221;，&#8220;不要说别人卑鄙狡诈，只能说自己无知愚蠢&#8221; ，&#8220;可以忍受物质的匮乏，但要学会在新时代下竞争的残酷。&#8221;<br>9. 我说的这个高管，我来这个公司，就是他把我从另一家当地比较有规模的企业里生生的挖过去的，因为他知道我们这里另一家通过了</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, 'cmmi');"><u><font face=幼圆 color=#006699 size=4>cmmi</font></u></a><font face=幼圆 color=#006699 size=4> L3级的企业就是我负责EPG里非常重要的</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%B9%A4%D7%F7');"><u><font face=幼圆 color=#006699 size=4>工作</font></u></a><font face=幼圆 color=#006699 size=4>，而且是已经获得SEI认证的cmmi定级评估员，所以他死活要把我挖过去，我过去后，由于cmmi当时是这个公司里的一项很重要的工作，所以我的工作是直接像他汇报。同时，我过来也不是什么很基层的员工，是</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%D6%CA%C1%BF%B9%DC%C0%ED');"><u><font face=幼圆 color=#006699 size=4>质量管理</font></u></a><font face=幼圆 color=#006699 size=4>部经理，所以对他汇报也符合汇报机制，不存在越级，所以他对我的工作是很了解的，不过由于这个公司里的软件部门从技术到工程管理简直垃圾的不是一般，一个项目经理基本没有听说过什么WBS是什么，连V模型都不知道是怎么回事。给他们一个瀑布模型的计划日程，他们都看不出来是什么生命周期，像什么</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%C5%E4%D6%C3%B9%DC%C0%ED');"><u><font face=幼圆 color=#006699 size=4>配置管理</font></u></a><font face=幼圆 color=#006699 size=4>，集成构建，</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%D0%E8%C7%F3%B9%DC%C0%ED');"><u><font face=幼圆 color=#006699 size=4>需求管理</font></u></a><font face=幼圆 color=#006699 size=4>，需求开发，分析设计，</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%B2%E2%CA%D4');"><u><font face=幼圆 color=#006699 size=4>测试</font></u></a><font face=幼圆 color=#006699 size=4>，等等等等，更是做得一踏糊涂。我来之后名称是一个部门经理，但是下大力气作了大量的一线工作，很多事情是一手一手教，就连个接口记录和管理这样的事情，我要给技术人员手把手的教，如何规划设计，如何识别接口（这里不是说的<a onclick="javascript:tagshow(event, 'Java');" href="javascript:;" target=_self><u><strong><font color=#0000ff>Java</font></strong></u></a>等语言里的接口类型定义），如何记录和管理，以及发展对接口的设计等等。不然他们在需求里说，&#8220;XX系统和XX子系统需要接口&#8221;，在概要设计里还是这句话，到了详细设计里，还是这样一句话。这种事情多得数不胜数。在项目管理方面就更不要说了，教项目经理写项目计划和做日程安排的时候，简直是我说一句，他们就往计划里写一句，同时我还要解释为什么这么写，日程的安排如何去符合生命周期，任务的分配和进度控制如何管理，配置管理如何设计符合生命周期的配置结构，等等等等，还有测试，我兼任测试部门负责人，对测试人员作了的培训，手把手的教他们如何设计测试用例。 所以，我的所有工作他是看得到的，企业由于我的存在发生的变化也是有目共睹的。但是，我过来大概半年后，这个高管就调任</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%C6%E4%CB%FB');"><u><font face=幼圆 color=#006699 size=4>其他</font></u></a><font face=幼圆 color=#006699 size=4>部门做管理了，新来的软件部经理来了之后，倒是对我的没有怎么着，因为当时cmmi还处于非常紧张的工作阶段，他当时不能动我，但在这期间，软件部有4个下属部门经理，他赶走了另外2个，到了 cmmi通过了，我就是成了第三个，他容不下不属于自己人的有能力的人。你说得不错，这就是政治斗争，一朝天子一朝臣，但是拿我们这些做实事有没有什么野心的人来做他政治斗争的牺牲品，我觉得很郁闷，觉得这个圈子里很肮脏。 <br>10.公司越大越不会要高手。你看看世界500强，有哪个高手进去了？世界500强的技术，大部分都是吞并小公司得来的。公司越大人事关系越复杂。你要知道你不是直接跟老板打交道的，你的表现在中层向上层回报的时候就全变样了。但大公司的收入高。所以，如果给人打工，最好不要露出你的本事太强。特别是在大公司。当然小公司露本事了，不会有好处，收入不会高了。但太大的坏处也没有。<br>11. 有时候，程序员应该心胸开阔点，不要觉得有人比自己技术强，就觉得不舒服，不服气。没有这一点很难站在领导岗位上，换个角度想想，不是这个社会怎么着了，而往往是自己的心胸变的狭窄了，你无法左右这个社会，但是你可以左右你自己。勇于认可别人是一种美德，也是受到别人尊重的基础！<br>12.人在屋檐下，不得不低头，要学会夹起尾巴做人。 必要的时候，反咬一口才是真的。伯乐不是那么好当的，如果你威胁到了他的利益，你说他会让你好过吗？开国皇帝杀重臣的是普遍现象，反倒是稀里糊涂的人能长寿。<br>13.看《明朝那些事儿》感觉到，真正有发展的都是既能干又能混的。<br>14.管理需要跟人打好关系，上头〉下级〉平级。如果你不想升迁，想做个普通的技术人员，你得私下跟你的新上司说，丑话就是表忠心。男人三件事：入对行，跟对人，做对事。好好琢磨吧。<br>15. 对于</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, 'CMM');"><u><font face=幼圆 color=#006699 size=4>CMM</font></u></a><font face=幼圆 color=#006699 size=4>，我觉得对实际工作没什么用。我在2003年的时候，在某个世界顶级的通讯设备生产商的某个部门里参加了该部门的CMM流程制定工作，在一帮老印下面工作了一段时间。后来因为该部门持续亏损，公司决定退出这个领域，把整个部门给卖了，所以我跳槽到另外一家公司，属于该领域的上游厂商，接触了很多这个领域里小的公司，看到其中有些公司从10几个人开始发展，最后2000人，6000人，分拆，上市，茁壮成长。而以前那个部门被出售以后，还在不停的亏损。我觉得CMM那些鬼东西是其中的一个原因。这些流程极大的拉长了开发周期。在你做了需求分析，概要分析，详细设计，</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%B5%A5%D4%AA%B2%E2%CA%D4');"><u><font face=幼圆 color=#006699 size=4>单元测试</font></u></a><font face=幼圆 color=#006699 size=4>计划，集成测试计划，开了无数的review meeting，总结出了一堆的matrix，虽然你投入的人力是别人的两三倍，虽然你还迭代开发，来缩短周期，但是你的产品周期还是别人的四五倍。这不是夸张，的确是四到五倍。CMM只适合那些几乎完全垄断，没有竞争压力下生存的企业。印度人CMM搞得很好，但是他们还是只能做做代工，而且我接触过的印度人的代码，质量极其低下，完全没有保障。我现在在另一家公司，它倒是很庞大，在这个领域很垄断，但是没有CMM，甚至连像样的 schedule都没有，给一个大致的项目日程，几个重要的milestone，工程师自己的schedule，自己看着办，开始的时候让我很瞠目。<br>16.cmm/cmmi 只是一套模型，就像其他的很多行业，如：银行业、建筑业、汽车工业、或者航空业，需要一套衡量其技术和管理水平的标尺一样，它只是一把衡量软件业管理和技术水平的标尺，当然，为了使决定采用cmm/cmmi的企业更好的实施cmm/cmmi所提出的目标，SEI将软件研发生产领域的诸多方面作了逐级的解释和有机的结合，形成了从cmm到cmmi的不断演化完善的各种版本，提出研发cmm/cmmi需求的人和研发cmm/cmmi的人，他们无非是希望软件 -----这个相对较新的技术产业，也能够逐步的成熟起来，能够适应软件应用相关行业对软件日益提高的各种要求。<br>&nbsp;&nbsp;&nbsp; cmm/cmmi是在经历了软件危机之后，在大量的业内企业和专家在为了克服软件危机而做了大量的理论研究和实践之后，系统的总结的一种软件的方法论，不同的地域，不同的企业，不同的商业目标，不同的技术类型，不同的应用要求，这导致cmm/cmmi不可能非常具体的为我们提供某种直接的方法，因为它面向全世界所有的软件企业和他们研发的所有项目，所以，cmm/cmmi是一个高度抽象的模型，它所提出的目标和实践要求，也是在非常高度的抽象上的，换句话说，它为我们指出了目标，给我们说了要做什么，但是，怎么做，这就是企业自身去实例话这写目标和实践的东西了。我的意思就是说，在同一个cmm/cmmi目标下，不同的企业，有的成功，有的失败，这完全是自己的做法不同，这很正常，如果失败了就在cmm/cmmi上找原因，那么你看看人家成功的呢？是不是人家的成功和cmm /cmmi一点关系没有？？所以，要客观公正的看待cmm/cmmi。 这里我要再谈谈软件危机，什么是软件危机？如果项目预算准确，产品质量可靠，成本控制到位，客户笑容满面，一派和谐祥和的大家发财的局面，这叫软件危机？？？而很多人提到软件业的困难的时候就会说，这是我们中国的国情，我们这里项目紧，周期短，开发人员技术不怎么样，还经常无能控制得住成本，客户的需求变更很多很无理。言下之意，就我们中国是这样，在国外一切都不是这样，国外的软件开发人员日子都很好过，诚然，现在放眼世界，发达国家的软件行业各方各面都要优于我们目前的状况，但是这是人家与生俱来的吗？？难道&#8220;软件危机&#8221;一词的出现不是在60年代的西方，而是在今天的中国吗？？？4-5十千，人家同样经历着我们现在经历的一切，这，就是软件危机。如果说现在还有人cmm/cmmi 只适合那些市场环境良好，企业素质优秀的地方玩，那就是大错特错了，cmm/cmmi就是为了解决60年代后的软件危机而诞生的，换句话说，就是用在我们现在这样的行业环境下的东西，当然，实践有成功，有失败，经验和教训并存，如果没有失败的实践者去当炮灰，也就换不来后来人吸取教训必然无谓的失败，唯有这样，我们的行业环境也才能像欧美发达国家的IT业一样，经历阵痛，涅磐重生。<br>17.做技术的人，能努力干活了，好技术留着以后自己创业的时候再用。要多用心思在跟人斗上。因为你要知道你是在打工，不是在给自己干。特别在500强的大公司更是如此。有人捣鬼，你就要捣更大的鬼。特别是大公司，每个人都有自己的算盘。他们都不是从公司利益出发的。这些话都是肺腑之言，你要好好体会。别人不会告诉你这些，只有你载跟斗了才能体会到。 <br>18.根据个人经历观察，高层才会重视CMMI，下面一线研发人员包括PM都比较抵触，特别是任务紧时最怕弄些繁文缛节。可能根本原因还是QA部门与项目规划没沟通好吧，让coder们又要马儿跑又要马儿不吃草。<br>19.这个世界从来就没有公平过。我原来也以为只要把事情做好就可以了。可现实环境中，总会存在很多因素阻止你把事情做好！这个时候，就不光是修炼自己的内功了，还要</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%D1%A7%CF%B0');"><u><font face=幼圆 color=#006699 size=4>学习</font></u></a><font face=幼圆 color=#006699 size=4>很多的策略，和别人相处的方式。只有这样才能把事情做好。也就是外圆内方，但自己内心需要坚持的东西还要坚持。在任何时候都要保持虚心，多做事，少说话，特别是抱怨是没有用的，反而让你自己迷失了自己。将每一次挫折都看作一种成长！相信你总会实现自己的理想！ <br>20. 关于CMM，有一点很想说的。 本人曾经亲身参与过一个500人规模的软件公司CMM4级的评估，自己的项目也作为参评项目并且得到认可，不过我个人对于CMM并不看好，原因如下： 1，CMM的来源其实是美国军方，为了能够对军方超大规模的项目研发进行控制以及评估，而设计的一个模型，由卡耐基梅隆的软件工程研究所完成。这个模型的初衷就是要不计成本的完善软件质量，因为军方的很多软件项目（比如航天飞机的控制软件）不允许出现错误的。至于说CMM模型是否能够应用到民用项目中来，还有待探讨，最关键是CMM产生的成本很高，不仅仅是时间的问题，还有培训、实施等一系列的问题。我个人的观点除了大规模量产的产品（比如手机）中应用CMM会比较适合，其他类型的项目应用这个模型会得不偿失，毕竟软件项目做到最后还是利润摆在第一位的。 2，至于说能力太强，我觉得每个人的能力就像是那个&#8220;木桶原理&#8221;一样，由最短的那根木头决定，这么多人不认可你肯定有你自己的原因在里面，不要总是看到别人的不是。&#8220;让别人认可你&#8221;也是一种很重要的能力，如果你真的能力那么强，雇用你能够给公司带来大笔的收入，哪个老板会不愿意给你付薪水呢？而且要是真那么有本事，找投资商自己开公司也不是什么很难的事情。<br>21.狼</font><a href="http://www.51testing.com/javascrīpt:;" target=_self ōnclick="javascrīpt:tagshow(event, '%C9%FA%BB%EE');"><u><font face=幼圆 color=#006699 size=4>生活</font></u></a><font color=#660099><font face=幼圆 color=#006699 size=4>再战场，狗生活在职场。能力最强，也要低调。<br>22.事业靠利用人力，不是靠朋友。人和人就是互相利用，在一个单位里同行就没什么朋友，都等看你笑话呐！ 生存靠手段而不是技术，他过河拆桥，你不会釜底抽薪么？显然企业的领导目光也有点短浅。 如果不知道该干什么就开培训机构，弄不好你的学生会替你出口气~~<br>23. 其实,中国就是这么一个社会,经历了那么长久的封建社会,权术这个东西还是在后代人的脑袋里扎了根.只要一遇到似乎可以威胁到自己地位的东西,就会用尽一切办法来把这些东西排除。 其实,我并不是说我们的祖国不是一个好的国家,只是我觉得现状是这个样子的,中国人只有到了山穷水尽的地步才会懂得团结,只有被别的国家侵略的无路可退才会奋起反抗.说的好是我们中国人大度不和别人挣,说的不好,就是没有血性!&nbsp; 我个人觉得,中国的IT事业处于一个急速发展的阶段,就像一个土富豪,拥有巨大的财富,却不知道自己该做些什么.现在中国的IT企业几乎上都是引进别人的先进技术,而大多IT人才都觉得IT这个行业很挣钱才会来投身IT事业,但是有几个人想过,要想自己赚钱安安稳稳只有等中国的IT行业成熟了,才会有可能吗?总觉得现在人,只顾自己赚钱,忽略了太多东西了.一个人的生活过的好不好,并不代表一个国家。 以前总觉得网络游戏很好玩,很新颖.但到现在人长大了,才发现自己所玩的游戏竟然没有一个是自己国家出的.都是韩国,美国的.现在看着中国人玩的不是自己国家出品的游戏, 总觉得很心酸.。现在的企业,为的不就是赚钱吗?谁不想赚钱,是人都想赚钱,都想让自己的生活过的很好,但是有时候自己的行为有可能会影响到别人的利益. 只要有利益冲突,就会有斗争,"忍"这是一个很好的办法,想要赚钱,并不是有很强的职业技术就可以的,左右逢源很重要,也不是要你缩着头,性格是这样,也不要去强制的改变什么,那样不是失了工作又是了真诚了吗? 我觉得做人要厚道是对的,但是遇什么人做什么事.看清楚自己在的什么位置上,做好本分的事情, 不要强出头... 如果你想生活的好,就请收敛你一身的光芒做人，如果你想做一个真实,对的起自己的人,就请你按自己的性格,思想去做所有的事情..</font> </font></div>
<img src ="http://www.cnitblog.com/stomic/aggbug/53495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2009-01-05 10:57 <a href="http://www.cnitblog.com/stomic/archive/2009/01/05/53495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)如何批处理自动安装winxp系统补丁? </title><link>http://www.cnitblog.com/stomic/archive/2008/06/19/45873.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 18 Jun 2008 16:06:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2008/06/19/45873.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/45873.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2008/06/19/45873.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/45873.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/45873.html</trackback:ping><description><![CDATA[<div>由于工作需要经常要帮一些领导重装他们的笔记本电脑，装好操作系统后花费时间最长的就是下载补丁安装补丁了，往往下载补丁安装补丁都花去了大半天的事情，没办法只能研究一下如何将补丁全部下载下来再自动<br>安装上去，通过参照一些资料，终于成功的实现了该项功能,现说明如何：<br><br>说明：补丁程序放在移动硬盘中的一个盘符里，包括了至sp2发布以来到2007.3.11日所有补丁，总共75个，大小为：120M左右,可惜没有Ftp服务器，要不然可以把这些补丁及批处理程序上传上去供大家下载使用,批处理程序中千万不要加盘符，因为移动硬盘的盘符在不同的电脑中是不同的，如果涉及到盘符的话，每次使用都需要去修改批处理，比较麻烦<br><br>步骤一：<br>运行--cmd--命令行方式--进入补丁所在盘符(比如e盘)则输入：e:　--进入补丁所在目录(比如fix)则输入：cd fix <br>--命令 dir /b /o-d e:\fix&gt;fix.txt<br>以上命令行的意思是仅提取"e:\fix"目录中的所有文件的文件名并将其保存在fix.txt<br>参数"/b"的意思是不显示文件的头信息及统计信息,参数/o-d 是要求文件名按时间先后顺序进行排序(注意:补丁的安装是有有先后顺序的，必须先安装旧的再安装新的),接着打开fix.txt,里面的内容大概如下形式:<br>WindowsXP-KB927802-x86-CHS.exe<br>WindowsXP-KB928843-x86-CHS.exe<br>WindowsXP-KB927779-x86-CHS.exe<br>WindowsXP-KB926436-x86-CHS.exe<br>WindowsXP-KB924667-x86-CHS.exe<br>WindowsXP-KB918118-x86-CHS.exe</div>
<div>通过查找/替换的方式将之修改为：<br>start /wait&nbsp;&nbsp; WindowsXP-KB927802-x86-CHS.exe&nbsp; /U /Q /Z <br>start /wait&nbsp; WindowsXP-KB928843-x86-CHS.exe&nbsp; /U /Q /Z <br>start /wait&nbsp; WindowsXP-KB927779-x86-CHS.exe /U /Q /Z <br><br>说明：&#8220;Start&#8221;是Windows系统自带的DOS命令，它的作用是用来调用应用程序的；&#8220;/wait&#8221;表示启用应用程序并等待其结束，然后再执行下一个应用程序；参数&#8220;/U&#8221;表示使用无人参与模式，参数&#8220;/Q&#8221;表示无用户交互，参数&#8220;/Z&#8221;表示安装完成时不重新启动计算机。<br>最后将fix.txt修改为fix.bat，这样一个全自动安装补丁的批处理程序就完成了，制作完成后马上在刚安装好的一台笔记本电脑上试了一试，运行批处理程序后30分钟左右就完成了，好爽！！大家不妨试一试。<br><br>注：曾经试过从网上下载了一个巳经实现窗口化的自动安装补丁程序，但是安装过程尽然需要近2个小时并且补丁还不全，没有办法只能自力更生了。</div>
<p>本文出自 &#8220;<a href="http://bigzhu168.blog.51cto.com/"><u><font color=#0000ff>我的学习之路</font></u></a>&#8221; 博客，请务必保留此出处<a href="http://bigzhu168.blog.51cto.com/124715/20062"><u><font color=#0000ff>http://bigzhu168.blog.51cto.com/124715/20062</font></u></a></p>
<img src ="http://www.cnitblog.com/stomic/aggbug/45873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2008-06-19 00:06 <a href="http://www.cnitblog.com/stomic/archive/2008/06/19/45873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)HP大中华区总裁孙振耀退休十五天后九大感言</title><link>http://www.cnitblog.com/stomic/archive/2008/04/21/42572.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Mon, 21 Apr 2008 01:59:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2008/04/21/42572.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/42572.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2008/04/21/42572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/42572.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/42572.html</trackback:ping><description><![CDATA[<h1 id=articletitle>HP大中华区总裁孙振耀退休十五天后九大感言</h1>
<div id=articlebody>
<p>一、关于工作与生活<br><br>　　我有个有趣的观察，外企公司多的是25-35岁的白领，40岁以上的员工很少，二三十岁的外企员工是意气风发的，但外企公司40岁附近的经理人是很尴尬的。我见过的40岁附近的外企经理人大多在一直跳槽，最后大多跳到民企，比方说，唐骏。外企员工的成功很大程度上是公司的成功，并非个人的成功，西门子的确比国美大，但并不代表西门子中国经理比国美的老板强，甚至可以说差得很远。而进外企的人往往并不能很早理解这一点，把自己的成功90％归功于自己的能力，实际上，外企公司随便换个中国区总经理并不会给业绩带来什么了不起的影响。好了问题来了，当这些经理人40多岁了，他们的薪资要求变得很高，而他们的才能其实又不是那么出众，作为外企公司的老板，你会怎么选择？有的是只要不高薪水的，要出位的精明强干精力冲沛的年轻人，有的是，为什么还要用你？<br>　　从上面这个例子，其实可以看到我们的工作轨迹，二三十岁的时候，生活的压力还比较小，身体还比较好，上面的父母身体还好，下面又没有孩子，不用还房贷，也没有孩子要上大学，当个外企小白领还是很光鲜的，挣得不多也够花了。但是人终归要结婚生子，终归会老，到了40岁，父母老了，要看病要吃药，要有人看护，自己要还房贷，要过基本体面的生活，要养小孩&#8230;&#8230;那个时候需要挣多少钱才够花才重要。所以，看待工作，眼光要放远一点，一时的谁高谁低并不能说明什么。<br>　　从这个角度上来说，我不太赞成过于关注第一份工作的薪水，更没有必要攀比第一份工作的薪水，这在刚刚出校园的学生中间是很常见的。正常人大概要工作35年，这好比是一场马拉松比赛，和真正的马拉松比赛不同的是，这次比赛没有职业选手，每个人都只有一次机会。要知到，有很多人甚至坚持不到终点，大多数人最后是走到终点的，只有少数人是跑过终点的，因此在刚开始的时候，去抢领先的位置并没有太大的意义。刚进社会的时候如果进500强公司，大概能拿到3k-6k/月的工资，有些特别技术的人才可能可以到8k/月，可问题是，5年以后拿多少？估计5k-10k了不起了。起点虽然高，但增幅有限，而且，后面的年轻人追赶的压力越来越大。<br>　　我前两天问我的一个销售，你会的这些东西一个新人2年就都学会了，但新人所要求的薪水却只是你的一半，到时候，你怎么办？<br>　　职业生涯就像一场体育比赛，有初赛、复赛、决赛。初赛的时候大家都刚刚进社会，大多数都是实力一般的人，这时候努力一点认真一点很快就能让人脱颖而出，于是有的人二十多岁做了经理，有的人迟些也终于赢得了初赛，三十多岁成了经理。然后是复赛，能参加复赛的都是赢得初赛的，每个人都有些能耐，在聪明才智上都不成问题，这个时候再想要胜出就不那么容易了，单靠一点点努力和认真还不够，要有很强的坚忍精神，要懂得靠团队的力量，要懂得收服人心，要有长远的眼光&#8230;&#8230;<br>　　看上去赢得复赛并不容易，但，还不是那么难。因为这个世界的规律就是给人一点成功的同时让人骄傲自满，刚刚赢得初赛的人往往不知道自己赢得的仅仅是初赛，有了一点小小的成绩大多数人都会骄傲自满起来，认为自己已经懂得了全部，不需要再努力再学习了，他们会认为之所以不能再进一步已经不是自己的原因了。虽然他们仍然不好对付，但是他们没有耐性，没有容人的度量，更没有清晰长远的目光。就像一只愤怒的斗牛，虽然猛烈，最终是会败的，而赢得复赛的人则象斗牛士一样，不急不躁，跟随着自己的节拍，慢慢耗尽对手的耐心和体力。赢得了复赛以后，大约已经是一位很了不起的职业经理人了，当上了中小公司的总经理，大公司的副总经理，主管着每年几千万乃至几亿的生意。<br>　　最终的决赛来了，说实话我自己都还没有赢得决赛，因此对于决赛的决胜因素也只能凭自己的猜测而已，这个时候的输赢或许就像武侠小说里写得那样，大家都是高手，只能等待对方犯错了，要想轻易击败对手是不可能的，除了使上浑身解数，还需要一点运气和时间。世界的规律依然发挥着作用，赢得复赛的人已经不只是骄傲自满了，他们往往刚愎自用，听不进去别人的话，有些人的脾气变得暴躁，心情变得浮躁，身体变得糟糕，他们最大的敌人就是他们自己，在决赛中要做的只是不被自己击败，等着别人被自己击败。这和体育比赛是一样的，最后高手之间的比赛，就看谁失误少谁就赢得了决赛。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;二、 根源<br><br>　　你工作快乐么？你的工作好么？<br>　　有没有觉得干了一段时间以后工作很不开心？有没有觉得自己入错了行？有没有觉得自己没有得到应有的待遇？有没有觉得工作像一团乱麻每天上班都是一种痛苦？有没有很想换个工作？有没有觉得其实现在的公司并没有当初想象得那么好？有没有觉得这份工作是当初因为生存压力而找的，实在不适合自己？你从工作中得到你想要得到的了么？你每天开心么？<br>　　天涯上愤怒的人很多，你有没有想过，你为什么不快乐？你为什么愤怒？<br>　　其实，你不快乐的根源，是因为你不知道要什么！你不知道要什么，所以你不知道去追求什么，你不知道追求什么，所以你什么也得不到。<br>　　我总觉得，职业生涯首先要关注的是自己，自己想要什么？大多数人大概没想过这个问题，唯一的想法只是——我想要一份工作，我想要一份不错的薪水，我知道所有人对于薪水的渴望，可是，你想每隔几年重来一次找工作的过程么？你想每年都在这种对于工作和薪水的焦急不安中度过么？不想的话，就好好想清楚。饮鸩止渴，不能因为口渴就拼命喝毒药。越是焦急，越是觉得自己需要一份工作，越饥不择食，越想不清楚，越容易失败，你的经历越来越差，下一份工作的人看着你的简历就皱眉头。于是你越喝越渴，越渴越喝，陷入恶性循环。最终只能哀叹世事不公或者生不逢时，只能到天涯上来发泄一把，在失败者的共鸣当中寻求一点心理平衡罢了。大多数人都有生存压力，我也是，有生存压力就会有很多焦虑，积极的人会从焦虑中得到动力，而消极的人则会因为焦虑而迷失方向。所有人都必须在压力下做出选择，这就是世道，你喜欢也罢不喜欢也罢。<br>　　一般我们处理的事情分为重要的事情和紧急的事情，如果不做重要的事情就会常常去做紧急的事情。比如锻炼身体保持健康是重要的事情，而看病则是紧急的事情。如果不锻炼身体保持健康，就会常常为了病痛烦恼。又比如防火是重要的事情，而救火是紧急的事情，如果不注意防火，就要常常救火。找工作也是如此，想好自己究竟要什么是重要的事情，找工作是紧急的事情，如果不想好，就会常常要找工作。往往紧急的事情给人的压力比较大，迫使人们去赶紧做，相对来说重要的事情反而没有那么大的压力，大多数人做事情都是以压力为导向的，压力之下，总觉得非要先做紧急的事情，结果就是永远到处救火，永远没有停歇的时候。（很多人的工作也像是救火队一样忙碌痛苦，也是因为工作中没有做好重要的事情。）那些说自己活在水深火热为了生存顾不上那么多的朋友，今天找工作困难是当初你们没有做重要的事情，是结果不是原因。如果今天你们还是因为急于要找一份工作而不去思考，那么或许将来要继续承受痛苦找工作的结果。<br>　　我始终觉得我要说的话题，沉重了点，需要很多思考，远比唐笑打武警的话题来的枯燥乏味，但是，天下没有轻松的成功，成功，要付代价。请先忘记一切的生存压力，想想这辈子你最想要的是什么？所以，最要紧的事情，先想好自己想要什么。<br><br>三、什么是好工作<br><br>　　当初微软有个唐骏，很多大学里的年轻人觉得这才是他们向往的职业生涯，我在清华bbs里发的帖子被这些学子们所不屑，那个时候学生们只想出国或者去外企，不过如今看来，我还是对的，唐骏去了盛大，陈天桥创立的盛大，一家民营公司。一个高学历的海归在500强的公司里拿高薪水，这大约是很多年轻人的梦想，问题是，每年毕业的大学生都在做这个梦，好的职位却只有500个。<br>　　人都是要面子的，也是喜欢攀比的，即使在工作上也喜欢攀比，不管那是不是自己想要的。大家认为外企公司很好，可是好在哪里呢？好吧，他们在比较好的写字楼，这是你想要的么？他们出差住比较好的酒店，这是你想要的么？别人会羡慕一份外企公司的工作，这是你想要的么？那一切都是给别人看的，你干吗要活得那么辛苦给别人看？另一方面，他们薪水福利一般，并没有特别了不起，他们的晋升机会比较少，很难做到很高阶的主管，他们虽然厌恶常常加班，却不敢不加班，因为&#8220;你不干有得是人干&#8221;，大部分情况下会找个台湾人香港人新加坡人来管你，而这些人又往往有些莫名其妙的优越感。你想清楚了么？500强一定好么？找工作究竟是考虑你想要什么，还是考虑别人想看什么？<br>　　我的大学同学们大多数都到美国了，甚至毕业这么多年了，还有人最近到国外去了。出国真的有那么好么？我的大学同学们，大多数还是在博士、博士后、访问学者地挣扎着，至今只有一个正经在一个美国大学里拿到个正式的教职。国内的教授很难当么？我有几个表亲也去了国外了，他们的父母独自在国内，没有人照顾，有好几次人在家里昏倒都没人知道，出国，真的这么光彩么？就像有人说的&#8220;很多事情就像看A片，看的人觉得很爽，做的人未必。&#8221;<br>　　人总想找到那个最好的，可是，什么是最好的？你觉得是最好的那个，是因为你的确了解，还是因为别人说他是最好的？即使他对于别人是最好的，对于你也一定是最好的么？<br>　　对于自己想要什么，自己要最清楚，别人的意见并不是那么重要。很多人总是常常被别人的意见所影响，亲戚的意见，朋友的意见，同事的意见&#8230;&#8230;问题是，你究竟是要过谁的一生？人的一生不是父母一生的续集，也不是儿女一生的前传，更不是朋友一生的外篇，只有你自己对自己的一生负责，别人无法也负不起这个责任。自己做的决定，至少到最后，自己没什么可后悔。对于大多数正常智力的人来说，所做的决定没有大的对错，无论怎么样的选择，都是可以尝试的。比如你没有考自己上的那个学校，没有入现在这个行业，这辈子就过不下去了？就会很失败？不见得。<br>　　我想，好工作，应该是适合你的工作，具体点说，应该是能给你带来你想要的东西的工作，你或许应该以此来衡量你的工作究竟好不好，而不是拿公司的大小，规模，外企还是国企，是不是有名，是不是上市公司来衡量。小公司，未必不是好公司，赚钱多的工作，也未必是好工作。你还是要先弄清楚你想要什么，如果你不清楚你想要什么，你就永远也不会找到好工作，因为你永远只看到你得不到的东西，你得到的，都是你不想要的。<br>　　可能，最好的，已经在你的身边，只是，你还没有学会珍惜。人们总是盯着得不到的东西，而忽视了那些已经得到的东西。</p>
<p>&nbsp;</p>
<p>四、普通人<br><br>　　我发现中国人的励志和国外的励志存在非常大的不同，中国的励志比较鼓励人立下大志愿，卧薪尝胆，有朝一日成富成贵。而国外的励志比较鼓励人勇敢面对现实生活，面对普通人的困境，虽然结果也是成富成贵，但起点不一样，相对来说，我觉得后者在操作上更现实，而前者则需要用999个失败者来堆砌一个成功者的故事。<br>　　我们都是普通人，普通人的意思就是，概率这件事是很准的。因此，我们不会买彩票中500万，我们不会成为比尔盖茨或者李嘉诚，我们不会坐飞机掉下来，我们当中很少的人会创业成功，我们之中有30％的人会离婚，我们之中大部分人会活过65岁&#8230;&#8230;<br>　　所以请你在想自己要什么的时候，要得&#8220;现实&#8221;一点，你说我想要做李嘉诚，抱歉，我帮不上你。成为比尔盖茨或者李嘉诚这种人，是靠命的，看我写的这篇文章绝对不会让你成为他们，即使你成为了他们，也绝对不是我这篇文章的功劳。&#8220;王侯将相宁有种乎&#8221;但真正当皇帝的只有一个人，王侯将相，人也不多。目标定得高些对于喜欢挑战的人来说有好处，但对于大多数普通人来说，反而比较容易灰心沮丧，很容易就放弃了。<br>　　回过头来说，李嘉诚比你有钱大致50万倍，他比你更快乐么？或许。有没有比你快乐50万倍，一定没有。他比你最多也就快乐一两倍，甚至有可能还不如你快乐。寻找自己想要的东西不是和别人比赛，比谁要得更多更高，比谁的目标更远大。虽然成为李嘉诚这个目标很宏大，但你并不见得会从这个目标以及追求目标的过程当中获得快乐，而且基本上你也做不到。你必须听听你内心的声音，寻找真正能够使你获得快乐的东西，那才是你想要的东西。<br>　　你想要的东西，或者我们把它称之为目标，目标其实并没有高低之分，你不需要因为自己的目标没有别人远大而不好意思，达到自己的目标其实就是成功，成功有大有小，快乐却是一样的。我们追逐成功，其实追逐的是成功带来的快乐，而非成功本身。职业生涯的道路上，我们常常会被攀比的心态蒙住眼睛，忘记了追求的究竟是什么，忘记了是什么能使我们更快乐。<br>　　社会上一夜暴富的新闻很多，这些消息，总会在我们的心里面掀起很多涟漪，涟漪多了就变成惊涛骇浪，心里的惊涛骇浪除了打翻承载你目标的小船，并不会使得你也一夜暴富。&#8220;只见贼吃肉，不见贼挨揍。&#8221;我们这些普通人既没有当贼的勇气，又缺乏当贼的狠辣绝决，虽然羡慕吃肉，却更害怕挨揍，偶尔看到几个没挨揍的贼就按奈不住，或者心思活动，或者大感不公，真要叫去做贼，却也不敢。<br>　　我还是过普通人的日子，要普通人的快乐，至少，晚上睡得着觉。<br>&nbsp; &nbsp;<br>五、跳槽与积累<br><br>　　首先要说明，工作是一件需要理智的事情，所以不要在工作上耍个性，天涯上或许会有人觉得你很有个性而叫好，煤气公司电话公司不会因为觉得你很有个性而免了你的帐单。当你很帅地炒掉了你的老板，当你很酷地挖苦了一番招聘的HR，账单还是要照付，只是你赚钱的时间更少了，除了你自己，没人受损失。<br>　　我并不反对跳槽，但跳槽决不是解决问题的办法，而且频繁跳槽的后果是让人觉得没有忠诚度可言，而且不能安心工作。现在很多人从网上找工作，很多找工作的网站常常给人出些馊主意，要知道他们是盈利性企业，当然要从自身盈利的角度来考虑，大家越是频繁跳槽频繁找工作他们越是生意兴隆，所以鼓动人们跳槽是他们的工作。所以他们会常常告诉你，你拿的薪水少了，你享受的福利待遇差了，又是&#8220;薪情快报&#8221;又是&#8220;赞叹自由奔放的灵魂&#8221;。至于是否会因此让你不能安心，你跳了槽是否解决问题，是否更加开心，那个，他们管不着。<br>　　要跳槽肯定是有问题，一般来说问题发生了，躲是躲不开的，很多人跳槽是因为这样或者那样的不开心，如果这种不开心，在现在这个公司不能解决，那么在下一个公司多半也解决不掉。你必须相信，90%的情况下，你所在的公司并没有那么烂，你认为不错的公司也没有那么好。就像围城里说的，&#8220;城里的人拼命想冲出来，而城外的人拼命想冲进去。&#8221;每个公司都有每个公司的问题，没有问题的公司是不存在的。换个环境你都不知道会碰到什么问题，与其如此，不如就在当下把问题解决掉。很多问题当你真的想要去解决的时候，或许并没有那么难。有的时候你觉得问题无法解决，事实上，那只是&#8220;你觉得&#8221;。<br>　　人生的曲线应该是曲折向上的，偶尔会遇到低谷但大趋势总归是曲折向上的，而不是象脉冲波一样每每回到起点，我见过不少面试者，30多岁了，四五份工作经历，每次多则3年，少则1年，30多岁的时候回到起点从一个初级职位开始干起，拿基本初级的薪水，和20多岁的年轻人一起竞争，不觉得有点辛苦么？这种日子好过么？<br>　　我非常不赞成在一个行业超过3年以后换行业，基本上，35岁以前我们的生存资本靠打拼，35岁以生存的资本靠的就是积累，这种积累包括人际关系，经验，人脉，口碑&#8230;&#8230;如果常常更换行业，代表几年的积累付之东流，一切从头开始，如果换了两次行业，35岁的时候大概只有5年以下的积累，而一个没有换过行业的人至少有了10年的积累，谁会占优势？工作到2-3年的时候，很多人觉得工作不顺利，好像到了一个瓶颈，心情烦闷，就想辞职，乃至换一个行业，觉得这样所有一切烦恼都可以抛开，会好很多。其实这样做只是让你从头开始，到了时候还是会发生和原来行业一样的困难，熬过去就向上跨了一大步，要知道每个人都会经历这个过程，每个人的职业生涯中都会碰到几个瓶颈，你熬过去了而别人没有熬过去你就领先了。跑长跑的人会知道，开始的时候很轻松，但是很快会有第一次的难受，但过了这一段又能跑很长一段，接下来会碰到第二次的难受，坚持过了以后又能跑一段，如此往复，难受一次比一次厉害，直到坚持不下去了。大多数人第一次就坚持不了了，一些人能坚持到第二次，第三次虽然大家都坚持不住了，可是跑到这里的人也没几个了，这点资本足够你安稳活这一辈子了。<br>　　一份工作到两三年的时候，大部分人都会变成熟手，这个时候往往会陷入不断的重复，有很多人会觉得厌倦，有些人会觉得自己已经搞懂了一切，从而懒得去寻求进步了。很多时候的跳槽是因为觉得失去兴趣了，觉得自己已经完成比赛了。其实这个时候比赛才刚刚开始，工作两三年的人，无论是客户关系，人脉，手下，和领导的关系，在业内的名气&#8230;&#8230;还都是远远不够的，但稍有成绩的人总是会自我感觉良好的，每个人都觉得自己跟客户关系铁得要命，觉得自己在业界的口碑好得很。其实可以肯定地说，一定不是，这个时候，还是要拿出前两年的干劲来，稳扎稳打，积累才刚刚开始。<br>　　你足够了解你的客户吗？你知道他最大的烦恼是什么吗？你足够了解你的老板么？你知道他最大的烦恼是什么吗？你足够了解你的手下么？你知道他最大的烦恼是什么吗？如果你不知道，你凭什么觉得自己已经积累够了？如果你都不了解，你怎么能让他们帮你的忙，做你想让他们做的事情？如果他们不做你想让他们做的事情，你又何来的成功？<br><br>六、等待<br><br>　　这是个浮躁的人们最不喜欢的话题，本来不想说这个话题，因为会引起太多的争论，而我又无意和人争论这些，但是考虑到对于职业生涯的长久规划，这是一个躲避不了的话题，还是决定写一写，不爱看的请离开吧。<br>　　并不是每次穿红灯都会被汽车撞，并不是每个罪犯都会被抓到，并不是每个错误都会被惩罚，并不是每个贪官都会被枪毙，并不是你的每一份努力都会得到回报，并不是你的每一次坚持都会有人看到，并不是你每一点付出都能得到公正的回报，并不是你的每一个善意都能被理解&#8230;&#8230;这个，就是世道。好吧，世道不够好，可是，你有推翻世道的勇气么？如果没有，你有更好的解决办法么？有很多时候，人需要一点耐心，一点信心。每个人总会轮到几次不公平的事情，而通常，安心等待是最好的办法。<br>　　有很多时候我们需要等待，需要耐得住寂寞，等待属于你的那一刻。周润发等待过，刘德华等待过，周星驰等待过，王菲等待过，张艺谋也等待过&#8230;&#8230;看到了他们如今的功成名就的人，你可曾看到当初他们的等待和耐心？你可曾看到金马奖影帝在街边摆地摊？你可曾看到德云社一群人在剧场里给一位观众说相声？你可曾看到周星驰的角色甚至连一句台词都没有？每一个成功者都有一段低沉苦闷的日子，我几乎能想象得出来他们借酒浇愁的样子，我也能想象得出他们为了生存而挣扎的窘迫。在他们一生最中灿烂美好的日子里，他们渴望成功，但却两手空空，一如现在的你。没有人保证他们将来一定会成功，而他们的选择是耐住寂寞。如果当时的他们总念叨着&#8220;成功只是属于特权阶级的&#8221;，你觉得他们今天会怎样？<br>　　曾经我也不明白有些人为什么并不比我有能力却要坐在我的头上，年纪比我大就一定要当我的领导么？为什么有些烂人不需要努力就能赚钱？为什么刚刚改革开放的时候的人能那么容易赚钱，而轮到我们的时候，什么事情都要正规化了？有一天我突然想，我还在上学的时候他们就在社会里挣扎奋斗了，他们在社会上奋斗积累了十几二十年，我们新人来了，他们有的我都想要，我这不是在要公平，我这是在要抢劫。因为我要得太急，因为我忍不住寂寞。二十多岁的男人，没有钱，没有事业，却有蓬勃的欲望。<br>　　人总是会遇到挫折的，人总是会有低潮的，人总是会有不被人理解的时候的，人总是有要低声下气的时候，这些时候恰恰是人生最关键的时候，因为大家都会碰到挫折，而大多数人过不了这个门槛，你能过，你就成功了。在这样的时刻，我们需要耐心等待，满怀信心地去等待，相信，生活不会放弃你，机会总会来的。至少，你还年轻，你没有坐牢，没有生治不了的病，没有欠还不起的债。比你不幸的人远远多过比你幸运的人，你还怕什么？路要一步步走，虽然到达终点的那一步很激动人心，但大部分的脚步是平凡甚至枯燥的，但没有这些脚步，或者耐不住这些平凡枯燥，你终归是无法迎来最后的那些激动人心。<br>　　逆境，是上帝帮你淘汰竞争者的地方。要知道，你不好受，别人也不好受，你坚持不下去了，别人也一样，千万不要告诉别人你坚持不住了，那只能让别人获得坚持的信心，让竞争者看着你微笑的面孔，失去信心，退出比赛。胜利属于那些有耐心的人。<br>　　在最绝望的时候，我会去看电影《The Pursuit of Happyness》《JerryMaguire》，让自己重新鼓起勇气，因为，无论什么时候，我们总还是有希望。当所有的人离开的时候，我不失去希望，我不放弃。每天下班坐在车里，我喜欢哼着《隐形的翅膀》看着窗外，我知道，我在静静等待，等待属于我的那一刻。<br>　　原贴里伊吉网友的话我很喜欢，抄录在这里：<br>　　每个人都希望，自己是独一无二的特殊者<br>　　含着金匙出生、投胎到好家庭、工作安排到电力局拿1w月薪这样的小概率事件，当然最好轮到自己<br>　　红军长征两万五、打成右派反革命、胼手胝足牺牲尊严去奋斗，最好留给祖辈父辈和别人<br>　　自然，不是每个吃过苦的人都会得到回报<br>　　但是，任何时代，每一个既得利益者身后，都有他的祖辈父辈奋斗挣扎乃至流血付出生命的身影<br>　　羡慕别人有个好爸爸，没什么不可以<br>　　问题是，你的下一代，会有一个好爸爸吗？<br>　　至于问到为什么不能有同样的赢面概率？我只能问：为什么物种竞争中，人和猴子不能有同样的赢面概率？<br>　　物竞天择。猴子的灵魂不一定比你卑微，但你身后有几十万年的类人猿进化积淀。</p>
<br>
<p><br></p>
<p>七、入对行跟对人<br><br>　　在中国，大概很少有人是一份职业做到底的，虽然如此，第一份工作还是有些需要注意的地方，有两件事情格外重要，第一件是入行，第二件事情是跟人。第一份工作对人最大的影响就是入行，现代的职业分工已经很细，我们基本上只能在一个行业里成为专家，不可能在多个行业里成为专家。很多案例也证明即使一个人在一个行业非常成功，到另外一个行业，往往完全不是那么回事情，&#8220;你想改变世界，还是想卖一辈子汽水？&#8221;是乔布斯邀请百事可乐总裁约翰&#183;斯考利加盟苹果时所说的话，结果这位在百事非常成功的约翰，到了苹果表现平平。其实没有哪个行业特别好，也没有哪个行业特别差，或许有报道说哪个行业的平均薪资比较高，但是他们没说的是，那个行业的平均压力也比较大。看上去很美的行业一旦进入才发现很多地方其实并不那么完美，只是外人看不见。<br>　　说实话，我自己都没有发大财，所以我的建议只是让人快乐工作的建议，不是如何发大财的建议，我们只讨论一般普通打工者的情况。我认为选择什么行业并没有太大关系，看问题不能只看眼前。比如，从前年开始，国家开始整顿医疗行业，很多医药公司开不下去，很多医药行业的销售开始转行。其实医药行业的不景气是针对所有公司的，并非针对一家公司，大家的日子都不好过，这个时候跑掉是非常不划算的，大多数正规的医药公司即使不做新生意撑个两三年总是能撑的，大多数医药销售靠工资撑个两三年也是可以撑的，国家不可能永远捏着医药行业不放的，两三年以后光景总归还会好起来的，那个时候别人都跑了而你没跑，那时的日子应该会好过很多。有的时候觉得自己这个行业不行了，问题是，再不行的行业，做得人少了也变成了好行业，当大家都觉得不好的时候，往往却是最好的时候。大家都觉得金融行业好，金融行业门槛高不说，有多少人削尖脑袋要钻进去，竞争激励，进去以后还要时时提防，一个疏忽，就被后来的人给挤掉了，压力巨大，又如何谈得上快乐？也就未必是&#8220;好&#8221;工作了。<br>　　太阳能这个东西至今还不能进入实际应用的阶段，但是中国已经有7家和太阳能有关的公司在纽交所上市了，国美苏宁永乐其实是贸易型企业，也能上市，鲁泰纺织连续10年利润增长超过50%，卖茶的一茶一座，卖衣服的海澜之家都能上市&#8230;&#8230;其实选什么行业真的不重要，关键是怎么做。事情都是人做出来的，关键是人。<br>　　有一点是需要记住的，这个世界上，有史以来直到我们能够预见得到的未来，成功的人总是少数，有钱的人总是少数，大多数人是一般的，普通的，不太成功的。因此，大多数人的做法和看法，往往都不是距离成功最近的做法和看法。因此大多数人说好的东西不见得好，大多数人说不好的东西不见得不好。大多数人都去炒股的时候说明跌只是时间问题，大家越是热情高涨的时候，跌的日子越近。大多数人买房子的时候，房价不会涨，而房价涨的差不多的时候，大多数人才开始买房子。不会有这样一件事情让大家都变成功，发了财，历史上不曾有过，将来也不会发生。有些东西即使一时运气好得到了，还是会在别的时候别的地方失去的。<br>　　年轻人在职业生涯的刚开始，尤其要注意的是，要做对的事情，不要让自己今后几十年的人生总是提心吊胆，更不值得为了一份工作赔上自己的青春年华。我的公司是个不行贿的公司，以前很多人不理解，甚至自己的员工也不理解，不过如今，我们是同行中最大的企业，客户乐意和我们打交道，尤其是在国家打击腐败的时候，每个人都知道我们做生意不给钱的名声，都敢于和我们做生意。而勇于给钱的公司，不是倒了，就是跑了，要不就是每天睡不好觉，人还是要看长远一点。很多时候，看起来最近的路，其实是最远的路，看起来最远的路，其实是最近的路。<br>　　跟对人是说，入行后要跟个好领导好老师，刚进社会的人做事情往往没有经验，需要有人言传身教。对于一个人的发展来说，一个好领导是非常重要的。所谓&#8220;好&#8221;的标准，不是他让你少干活多拿钱，而是以下三个。<br>　　首先，好领导要有宽广的心胸，如果一个领导每天都会发脾气，那几乎可以肯定他不是个心胸宽广的人，能发脾气的时候却不发脾气的领导，多半是非常厉害的领导。中国人当领导最大的毛病是容忍不了能力比自己强的人，所以常常可以看到的一个现象是，领导很有能力，手下一群庸才或者手下一群闲人。如果看到这样的环境，还是不要去的好。<br>　　其次，领导要愿意从下属的角度来思考问题，这一点其实是从面试的时候就能发现的，如果这位领导总是从自己的角度来考虑问题，几乎不听你说什么，这就危险了。从下属的角度来考虑问题并不代表同意下属的说法，但他必须了解下属的立场，下属为什么要这么想，然后他才有办法说服你，只关心自己怎么想的领导往往难以获得下属的信服。<br>　　第三，领导敢于承担责任，如果出了问题就把责任往下推，有了功劳就往自己身上揽，这样的领导不跟也罢。选择领导，要选择关键时刻能抗得住的领导，能够为下属的错误买单的领导，因为这是他作为领导的责任。<br>　　有可能，你碰不到好领导，因为，中国的领导往往是屁股决定脑袋的领导，因为他坐领导的位置，所以他的话就比较有道理，这是传统观念官本位的误区，可能有大量的这种无知无能的领导，只是，这对于你其实是好事，如果将来有一天你要超过他，你希望他比较聪明还是比较笨？相对来说这样的领导其实不难搞定，只是你要把自己的身段放下来而已。多认识一些人，多和比自己强的人打交道，同样能找到好的老师，不要和一群同样郁闷的人一起控诉社会，控诉老板，这帮不上你，只会让你更消极。和那些比你强的人打交道，看他们是怎么想的，怎么做的，学习他们，然后跟更强的人打交道。<br><br>八、选择<br><br>　　我们每天做的最多的事情，其实是选择，因此在谈职业生涯的时候不得不提到这个话题。<br>　　我始终认为，在很大的范围内，我们究竟会成为一个什么样的人，决定权在我们自己，每天我们都在做各种各样的选择，我可以不去写这篇文章，去别人的帖子拍拍砖头，也可以写下这些文字，帮助别人的同时也整理自己的思路，我可以多注意下格式让别人易于阅读，也可以写成一堆，我可以就这样发上来，也可以在发以前再看几遍，你可以选择不刮胡子就去面试，也可以选择出门前照照镜子&#8230;&#8230;每天，每一刻我们都在做这样那样的决定，我们可以漫不经心，也可以多花些心思，成千上万的小选择累计起来，就决定了最终我们是个什么样的人。<br>　　从某种意义上来说我们的未来不是别人给的，是我们自己选择的，很多人会说我命苦啊，没得选择阿，如果你认为&#8220;去微软还是去IBM&#8221;&#8220;上清华还是上北大&#8221;&#8220;当销售副总还是当厂长&#8221;这种才叫选择的话，的确你没有什么选择，大多数人都没有什么选择。但每天你都可以选择是否为客户服务更周到一些，是否对同事更耐心一些，是否把工作做得更细致一些，是否把情况了解得更清楚一些，是否把不清楚的问题再弄清楚一些&#8230;&#8230;你也可以选择在是否在痛苦中继续坚持，是否抛弃掉自己的那些负面的想法，是否原谅一个人的错误，是否相信我在这里写下的这些话，是否不要再犯同样的错误&#8230;&#8230;生活每天都在给你选择的机会，每天都在给你改变自己人生的机会，你可以选择赖在地上撒泼打滚，也可以选择咬牙站起来。你永远都有选择。有些选择不是立杆见影的，需要累积，比如农民可以选择自己常常去浇地，也可以选择让老天去浇地，诚然你今天浇水下去苗不见得今天马上就长出来，但常常浇水，大部分苗终究会长出来的，如果你不浇，收成一定很糟糕。<br>　　每天生活都在给你机会，他不会给你一叠现金也不会拱手送你个好工作，但实际上，他还是在给你机会。我的家庭是一个普通的家庭，没有任何了不起的社会关系，我的父亲在大学毕业以后就被分配到了边疆，那个小县城只有一条马路，他们那一代人其实比我们更有理由抱怨，他们什么也没得到，年轻的时候文化大革命，书都没得读，支援边疆插队落户，等到老了，却要给年轻人机会了。他有足够的理由象成千上万那样的青年一样坐在那里抱怨生不逢时，怨气冲天。然而在分配到边疆的十年之后，国家恢复招研究生，他考回了原来的学校。研究生毕业，他被分配到了安徽一家小单位里，又是3年以后，国家第一届招收博士生，他又考回了原来的学校，成为中国第一代博士，那时的他比现在的我年纪还大。生活并没有放弃他，他也没有放弃生活。10年的等待，他做了他自己的选择，他没有放弃，他没有破罐子破摔，所以时机到来的时候，他改变了自己的人生。你最终会成为什么样的人，就决定在你的每个小小的选择之间。<br>　　你选择相信什么？你选择和谁交朋友？你选择做什么？你选择怎么做？&#8230;&#8230;我们面临太多的选择，而这些选择当中，意识形态层面的选择又远比客观条件的选择来得重要得多，比如选择做什么产品其实并不那么重要，而选择怎么做才重要。选择用什么人并不重要，而选择怎么带这些人才重要。大多数时候选择客观条件并不要紧，大多数关于客观条件的选择并没有对错之分，要紧的是选择怎么做。一个大学生毕业了，他要去微软也好，他要卖猪肉也好，他要创业也好，他要做游戏代练也好，只要不犯法，不害人，都没有什么关系，要紧的是，选择了以后，怎么把事情做好。<br>　　除了这些，你还可以选择时间和环境，比如，你可以选择把这辈子最大的困难放在最有体力最有精力的时候，也可以走一步看一步，等到了40岁再说，只是到了40多岁，那正是一辈子最脆弱的时候，上有老下有小，如果在那个时候碰上了职业危机，实在是一件很苦恼的事情。与其如此不如在20多岁30多岁的时候吃点苦，好让自己脆弱的时候活得从容一些。你可以选择在温室里成长，也可以选择到野外磨砺，你可以选择在办公室吹冷气的工作，也可以选择40度的酷热下，去见你的客户，只是，这一切最终会累积起来，引导你到你应得的未来。<br>　　我不敢说所有的事情你都有得选择，但是绝大部分事情你有选择，只是往往你不把这当作一种选择。认真对待每一次选择，才会有比较好的未来。<br><br>九、选择职业<br><br>　　职业的选择，总的来说，无非就是销售、市场、客服、物流、行政、人事、财务、技术、管理几个大类，有个有趣的现象就是，500强的CEO当中最多的是销售出身，第二多的人是财务出身，这两者加起来大概超过95％。现代IT行业也有技术出身成为老板的，但实际上，后来他们还是从事了很多销售和市场的工作，并且表现出色，公司才获得了成功，完全靠技术能力成为公司老板的，几乎没有。这是有原因的，因为销售就是一门跟人打交道的学问，而管理其实也是跟人打交道的学问，这两者之中有很多相通的东西，他们的共同目标就是&#8220;让别人去做某件特定的事情。&#8221;而财务则是从数字的层面了解生意的本质，从宏观上看待生意的本质，对于一个生意是否挣钱，是否可以正常运作有着最深刻的认识。<br>　　公司小的时候是销售主导公司，而公司大的时候是财务主导公司，销售的局限性在于只看人情不看数字，财务的局限性在于只看数字不看人情。公司初期，运营成本低，有订单就活得下去，跟客户也没有什么谈判的条件，别人肯给生意做已经谢天谢地了，这个时候订单压倒一切，客户的要求压倒一切，所以当然要顾人情。公司大了以后，一切都要规范化，免得因为不规范引起一些不必要的风险，同时运营成本也变高，必须提高利润率，把有限的资金放到最有产出的地方。对于上市公司来说，股东才不管你客户是不是最近出国，最近是不是那个省又在搞严打，到了时候就要把业绩拿出来，拿不出来就抛股票，这个时候就是数字压倒一切。<br>　　前两天听到有人说一句话觉得很有道理，开始的时候我们想&#8220;能做什么？&#8221;，等到公司做大了有规模了，我们想&#8220;不能做什么。&#8221;很多人在工作中觉得为什么领导这么保守，这也不行那也不行，错过很多机会。很多时候是因为，你还年轻，你想的是&#8220;能做什么&#8221;，而作为公司领导要考虑的方面很多，他比较关心&#8220;不能做什么&#8221;。<br>　　我并非鼓吹大家都去做销售或者财务，究竟选择什么样的职业，和你究竟要选择什么样的人生有关系，有些人就喜欢下班按时回家，看看书听听音乐，那也挺好，但就不适合找个销售的工作了，否则会是折磨自己。有些人就喜欢出风头，喜欢成为一群人的中心，如果选择做财务工作，大概也干不久，因为一般老板不喜欢财务太积极，也不喜欢财务话太多。先想好自己要过怎样的人生，再决定要找什么样的职业。有很多的不快乐，其实是源自不满足，而不满足，很多时候是源自于心不定，而心不定则是因为不清楚究竟自己要什么，不清楚要什么的结果就是什么都想要，结果什么都没得到。<br>　　我想，我们还是因为生活而工作，不是因为工作而生活，生活是最要紧的，工作只是生活中的一部分。我总是觉得生活的各方方面都是相互影响的，如果生活本身一团乱麻，工作也不会顺利。所以要有娱乐、要有社交、要锻炼身体，要有和睦的家庭&#8230;&#8230;最要紧的，要开心，我的两个销售找我聊天，一肚子苦水，我问他们，2年以前，你什么都没有，工资不高，没有客户关系，没有业绩，处于被开的边缘，现在的你比那时条件好了很多，为什么现在却更加不开心了？如果你做得越好越不开心，那你为什么还要工作？首先的首先，人还是要让自己高兴起来，让自己心态好起来，这种发自内心的改变会让你更有耐心，更有信心，更有气质，更能包容&#8230;&#8230;否则，看看镜子里的你，你满意么？<br>　　有人会说，你说得容易，我每天加班，不加班老板就会把我炒掉，每天累得要死，哪有时间娱乐、社交、锻炼？那是人们把目标设定太高的缘故，如果你还在动不动就会被老板炒掉的边缘，那么你当然不能设立太高的目标，难道你还想每天去打高尔夫？你没时间去健身房锻炼身体，但是上下班的时候多走几步可以吧，有楼梯的时候走走楼梯不走电梯可以吧？办公的间隙扭扭脖子拉拉肩膀做做俯卧撑可以吧？谁规定锻炼就一定要拿出每天2个小时去健身房？你没时间社交，每月参加郊游一次可以吧，周末去参加个什么音乐班，绘画班之类的可以吧，去尝试认识一些同行，和他们找机会交流交流可以吧？开始的时候总是有些难的，但迈出这一步就会向良性循环的方向发展。而每天工作得很苦闷，剩下的时间用来咀嚼苦闷，只会陷入恶性循环，让生活更加糟糕。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 虽然离开惠普仅有十五天，但感觉上惠普已经离我很远。我的心思更多放在规划自己第二阶段的人生，这并非代表我对惠普没有任何眷恋，主要还是想以此驱动自己往前走。<br>　　万科王石登珠穆朗玛峰的体验给我很多启发，虽然在出发时携带大量的物资，但是登顶的过程中，必须不断减轻负荷，最终只有一个氧气瓶和他登上峰顶。登山如此，漫长的人生又何尝不是。<br>　　我宣布退休后，接到同事朋友同学的祝贺。大部分人都认为我能够在这样的职位上及年龄选择退休，是一种勇气，也是一种福气。&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>　　还有一部分人怀疑我只是借此机会换个工作，当然还有一些人说我在HP做不下去了，趁此机会离开。<br>　　我多年来已经习惯别人对我的说三道四，但对于好友，我还是挺关心大家是否真正理解我的想法，这也是写这篇文章的目的。<br>　　由于受我父亲早逝的影响，我很早就下定决心，要在有生之年实现自己的愿望，我不要像我父亲一样，为家庭生活忙碌一辈子，临终前感伤，懊恼自己有很多没有实现的理想。<br>　　一本杂志的文章提到我们在生前就应该思考自己的墓志铭，因为那代表你自己对完美人生的定义，我们应该尽可能在有生之年去实现它。<br>　　我希望我的墓志铭上除了与家人及好友有关的内容外，是这样写着：<br>　　1.这个人曾经服务于一家全球最大的IT公司（HP）25年，和她一起经历过数次重大的变革，看着她从以电子仪表为主要的业务变革成全球最大的IT公司。<br>　　2.这个人曾经在全球发展最快的国家（中国）工作16年，并担任HP中国区总裁7年，见证及经历过中国改革开放的关键最新突破阶段，与中国一起成长。<br>　　3.这个人热爱飞行，曾经是一个有执照的飞行员，累积飞行时数超过X小时，曾经在X个机场起降过。<br>　　4.这个人曾经获得管理硕士学位，在领导管理上特别关注中国企业的组织行为及绩效，并且在这个领域上获得中国企业界的认可。<br>　　我费时25年才总结1和2两项成果，我不知还要费时多久才能达成3和4的愿望，特别是第4个愿望需要经历学术的训练，才能将我的经验总结成知识。<br>否则我的经验将无法有效影响及传授他人。因此重新进入学校学习，拿一个管理学位是有必要的，更何况这是我一个非常重要的愿望。<br>　　另一方面，我25年的时间都花在运营(operation)的领域，兢兢业业的做好职业人士的工作，它是一份好工作，特别是在HP，这份工作也帮助我建立财务的基础，支持家庭的发展。<br>　　但是我不想终其一生，都陷入在运营的领域，我想象企业家一样，有机会靠一些点子(ideas)赚钱，虽然风险很高，但是值得一试，即使失败，也不枉走一回，这也是第4个愿望其中的一部份。<br>　　Carly Fiorina曾经对我说过&#8220;这个世界上有好想法的人很多，但有能力去实现的人很少&#8221;，2007年5月21日在北大演讲时，有人问起那些书对我影响较大，我想对我人生观有影响的其中一本书叫&#8220;TriggerPoint&#8221;，它的主要观点是：人生最需要的不是规划，而是在适当的时机掌握机会，采取行动。<br>　　我这些愿望在我心中已经酝酿一段很长的时间，开始的时候，也许一年想个一两次，过了也就忘掉，但逐渐的，这个心中的声音，愈来愈大，出现的频率也愈来愈高，当它几乎每一个星期都会来与我对话时，我知道时机已经成熟。<br>　　但和任何人一样，要丢掉自己现在所拥有的，所熟悉的环境及稳定的收入，转到一条自己未曾经历过，存在未知风险的道路，需要绝大的勇气，家人的支持和好友的鼓励。有舍才有得，真是知易行难，我很高兴自己终于跨出了第一步。<br>　　我要感谢HP的EER提前退休优惠政策，它是其中一个关键的TriggerPoints,另一个关键因素是在去年五六月发生的事。<br>　　当时我家老大从大学毕业，老二从高中毕业，在他们继续工作及求学前，这是一个黄金时段，让我们全家可以相聚一段较长的时间，我为此很早就计划休一个长假，带着他们到各地游玩。<br>　　但这个计划因为工作上一件重要的事情（Mark Hurd访华）不得不取消。这个事件刺激了我必须严肃的去对待那心中的声音，我会不会继续不断的错失很多关键的机会?<br>　　我已经年过50，我会不会走向和我父亲一样的道路？人事部老总Charles跟我说，很多人在所有对他有利的星星都排成一列时，还是错失时机。<br>　　我知道原因，因为割舍及改变对人是多么的困难，我相信大部分的人都有自己人生的理想，但我也相信很多人最终只是把这些理想当成是<br>　　幻想，然后不断的为自己寻找不能实现的藉口，南非前总统曼德拉曾经说过，&#8220;与改变世界相比，改变自己更困难&#8221;，真是一针见血。<br>　　什么是快乐及有意义的人生？我相信每一个人的定义都不一样，对我来说，能实现我墓志铭上的内容就是我的定义。<br>　　在中国惠普总裁的位置上固然可以吸引很多的关注及眼球，但是我太太及较亲近的好友，都知道那不是我追求的，那只是为扮演好这个角色必须尽力做好的地方。<br>　　做一个没有名片的人士，虽然只有十多天的时间，但我发现我的脑袋里已经空出很多空间及能量，让我可以静心的为我ChapterII的新生活做细致的调研及规划。<br>　　我预订以两年的时间来完成转轨的准备工作，并且花多点时间与家人共处。这两年的时间我希望拿到飞行执照，拿到管理有关的硕士学位，提升英文的水平，建立新的网络，多认识不同行业的人，保持与大陆的联系。希望两年后，我可以顺利回到大陆去实现我第四个愿望。<br>　　毫不意外，在生活上，我发现很多需要调整的地方。<br>　　二十多年来，我生活的步调及节奏，几乎完全被公司及工作所左右，不断涌出的deadline及任务驱动我每天的安排，一旦离开这样的环境，第一个需要调整的就是要依靠自己的自律及意志力来驱动每天的活动，睡觉睡到自然醒的态度绝对不正确，放松自己，不给事情设定目标及时间表，或者对错失时间目标无所谓，也不正确，没有年度，季度，月及周计划也不正确。<br>　　担任高层经理多年，已经养成交待事情的习惯，自己的时间主要花在思考，决策及追踪项目的进展情况，更多是依靠一个庞大的团队来执行具体的事项及秘书来处理很多协调及繁琐的事情。<br>　　到美国后，很多事情需要打800号电话联系，但这些电话很忙，常让你在waitingline上等待很长的时间，当我在等待时，我可以体会以前秘书工作辛苦的地方，但同时也提醒我自己，在这个阶段要改变态度，培养更大的耐性及自己动手做的能力。<br>　　生活的内容也要做出很大的调整，多出时间锻炼身体，多出时间关注家人，多出时间关注朋友，多出时间体验不同的休闲活动及飞行，一步步的，希望生活逐步调整到我所期望的轨道上，期待这两年的生活既充实又充满乐趣及意义。<br>　　第一个快乐的体验就是准备及参加大儿子的订婚礼，那种全心投入，不需担忧工作数字的感觉真好。同时我也租好了公寓，买好了家具及车子，陪家人在周末的时候到Reno及Lake Tahoe玩了一趟，LakeTahoe我去了多次，但这次的体验有所不同，我从心里欣赏到它的美丽。<br>　　但同时我也在加紧调研的工作，为申请大学及飞行学校做准备，这段时间也和在硅谷的朋友及一些风险投资公司见面，了解不同的产业。<br>　　我的人生观是&#8220;完美的演出来自充分的准备&#8221;，&#8220;勇于改变自己，适应不断变化的环境，机会将不断出现&#8221;，&#8220;快乐及有意义的人生来自于实现自己心中的愿望，而非外在的掌声&#8221;。<br>　　我离开时，有两位好朋友送给我两个不同的祝语，Baron的是&#8220;多年功过化烟尘&#8221;，杨华的是&#8220;莫春者，风乎舞雩，咏而归&#8221;，它们分别代表了我离开惠普及走向未来的心情。<br>　　我总结人生有三个阶段，一个阶段是为现实找一份工作，一个阶段是为现实，但可以选择一份自己愿意投入的工作，一个阶段是为理想去做一些事情。<br>　　我珍惜我的福气，感激HP及同事、好朋友给我的支持，鼓励及协助，这篇文字化我心声的文章与好友分享。</p>
</div>
<img src ="http://www.cnitblog.com/stomic/aggbug/42572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2008-04-21 09:59 <a href="http://www.cnitblog.com/stomic/archive/2008/04/21/42572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转 ）一位软件工程师的6年总结</title><link>http://www.cnitblog.com/stomic/archive/2008/04/17/42478.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Thu, 17 Apr 2008 07:35:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2008/04/17/42478.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/42478.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2008/04/17/42478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/42478.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/42478.html</trackback:ping><description><![CDATA[&#8220;又是一年毕业时&#8221;，看到一批批学子离开人生的象牙塔，走上各自的<a onclick="javascript:tagshow(event, '%B9%A4%D7%F7');" href="javascript:;" target=_self><u><strong>工作</strong></u></a>岗位；想想自己也曾经意气风发、踌躇满志，不觉感叹万千&#8230;&#8230;本文是自己工作6年的经历沉淀或者经验提炼，希望对所有的软件工程师们有所帮助，早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业<a onclick="javascript:tagshow(event, '%BC%BC%CA%F5');" href="javascript:;" target=_self><u><strong>技术</strong></u></a>方面的具体建议，前面几点旨在确定大的方向，算是废话吧。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员：PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、分享第一条经验：&#8220;学历代表过去、能力代表现在、<a onclick="javascript:tagshow(event, '%D1%A7%CF%B0');" href="javascript:;" target=_self><u><strong>学习</strong></u></a>力代表未来。&#8221;其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要：&#8220;重要的道理明白太晚将抱憾终生！&#8221;所以放在每一条，让刚刚毕业的朋友们早点看到哈！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、一定要确定自己的发展方向，并为此目的制定可行的计划。不要说什么，&#8220;我刚毕业，还不知道将来可能做什么？&#8221;，&#8220;跟着感觉走，先做做看&#8221;。因为，这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术，将来成为专家级人物？向管理方向走，成为职业经理人？先熟悉行业和领域，将来自立门户？还是先在行业里面混混，过几年转行做点别的？这很重要，它将决定你近几年、十年内&#8220;做什么事情才是在做正确的事情！&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、软件开发团队中，技术不是万能的，但没有技术是万万不能的！在技术型团队中，技术与人品同等重要，当然长相也比较重要哈，尤其在MM比较多的团队中。在软件项目团队中，技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码，还是产品管理、<a onclick="javascript:tagshow(event, '%B2%E2%CA%D4');" href="javascript:;" target=_self><u><strong>测试</strong></u></a>、文档、实施、维护，多少你都要有技术基础。算我孤陋寡闻，我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目，哪怕就一个，也没有看到。倒是曾经看到过一个&#8220;高学历的牛人&#8221;(非技术型)带一堆人做完过一个项目，项目交付的第二天，项目组成员扔下一句&#8220;再也受不了啦！&#8221;四分五裂、各奔东西。那个项目的&#8220;成功度&#8221;大家可想而知了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、详细制定自己软件开发专业知识学习计划，并注意及时修正和调整(软件开发技术变化实在太快)。请牢记：&#8220;如果一个软件开发人员在1、2年内都没有更新过自己的知识，那么，其实他已经不再属于这个行业了。&#8221;不要告诉自己没有时间。来自时间管理领域的著名的&#8220;三八原则&#8221;告诫我们：另外的那8小时如何使用将决定你的人生成败！本人自毕业以来，平均每天实际学习时间超过2小时。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、书籍是人类进步的阶梯，对软件开发人员尤其如此。书籍是学习知识的最有效途径，不要过多地指望在工作中能遇到&#8220;世外高人&#8221;，并不厌其烦地教你。对于花钱买书，我个人经验是：千万别买国内那帮人出的书！我买的那些家伙出的书，!00%全部后悔了，无一本例外。更气愤的是，这些书在二手市场的地摊上都很难卖掉。&#8220;拥有书籍并不表示拥有知识；拥有知识并不表示拥有技能；拥有技能并不表示拥有文化；拥有文化并不表示拥有智慧。&#8221;只有将书本变成的自己智慧，才算是真正拥有了它。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6、不要仅局限于对某项技术的表面使用上，哪怕你只是偶尔用一、二次。&#8220;对任何事物不究就里&#8221;是任何行业的工程师所不应该具备的素质。开发<a onclick="javascript:tagshow(event, 'Windows');" href="javascript:;" target=_self><u><strong>Windows</strong></u></a>应用程序，看看Windows程序的设计、加载、执行原理，分析一下PE文件格式，试试用SDK开发从头开发一个Windows应用程序；用VC＋＋、 Delphi、Java、.Net开发应用程序，花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码；除了会用J2EE、 JBoss、Spring、Hibernate等等优秀的开源产品或者框架，抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。试着这样做做，你以后的工作将会少遇到一些让你不明就里、一头雾水的问题，因为，很多东西你&#8220;知其然且知其所以然&#8221;！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7、在一种语言上编程，但别为其束缚了思想。&#8220;代码大全&#8221;中说：&#8220;深入一门语言编程，不要浮于表面&#8221;。深入一门语言开发还远远不足，任何编程语言的存在都有其自身的理由，所以也没有哪门语言是&#8220;包治百病&#8221;的&#8220;灵丹妙药&#8221;。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是：用面对对象工具开发某些关键模块时，为什么不可以借鉴C、C51、汇编的模块化封装方式？用传统的桌面开发工具(目前主要有VC++、Delphi)进行系统体统结构设计时，为什么不可以参考来自Java社区的IoC、AOP设计思想，甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源框架？在进行类似于实时通信、数据采集等功能的设计、实现时，为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式？为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题？？？&#8220;他山之石、可以攻玉&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8、养成总结与反思的习惯，并有意识地提炼日常工作成果，形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知，对软件开发人员而言，有、无经验的一个显著区别是：无经验者完成任何任务时都从头开始，而有经验者往往通过重组自己的可复用模块、类库来解决问题（其实这个结论不应该被局限在软件开发领域、可以延伸到很多方面）。这并不是说，所有可复用的东西都必须自己实现，别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是，最好还是自己实现，这样没有知识产权、版权等问题，关键是自己实现后能真正掌握这个知识点，拥有这个技能。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9、理论与实践并重，内外双修。工程师的内涵是：以工程师的眼光观察、分析事物和世界。一个合格的软件工程师，是真正理解了软件产品的本质及软件产品研发的思想精髓的人（个人观点、欢迎探讨）。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作，但从软件工程师这个角度来看，这只是外在的东西，并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论，并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题，才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题，并在具体实践中验证和修正这些思想与方式，最终形成自己的理论体系和实用方法论。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10、心态有多开放，视野就有多开阔。不要抱着自己的技术和成果，等到它们都已经过时变成垃圾了，才拿出来丢人现眼。请及时发布自己的研究成果：开发的产品、有创意的设计或代码，公布出来让大家交流或者使用，你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具，5、6年之后的今天，还是那个样子，今天流行的好多Windows系统工具都比自己的晚，但进化得很好，且有那么多用户在使用。并且，不要保守自己的技术和思想，尽可能地与人交流与分享，或者传授给开发团队的成员。&#8220;与人交换苹果之后，每个人还是只有一个苹果；但交换思想之后，每个人都拥有两种思想&#8221;，道理大家都懂，但有多少人真正能做到呢？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品，千万不要因为没有钱赚而不做。网络早已不再只是&#8220;虚拟世界&#8221;，网上有很多的开源项目、合作开发项目、外包项目，这都是涉猎工作以外的知识的绝好机会，并且能够结识更广的人缘。不要因为工作是做ERP，就不去学习和了解嵌入式、实时、通信、网络等方面的技术，反过来也是一样。如果当他别人拿着合同找你合作，你却这也不会，那也不熟时，你将后悔莫及。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12、书到用时方恨少，不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明： &#8220;对于一个有一定基础的人来说，他只要真正肯下功夫，在6个月内就可以掌握任何一门学问。&#8221;教育心理学界为感谢西蒙教授的研究成果，故命名为西蒙学习法。可见，掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识，有空花时间看看，韬光养晦、未雨绸缪。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13、本文的总结与反思：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A：不要去做技术上的高手，除非你的目标如此。虽然本文是关于提高软件开发知识的建议，做技术的高手是我一向都不赞同的。你可以提高自己的专业知识，但能胜任工作即止。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B：提高软件知识和技术只是问题的表面，本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理，可以很容易地延伸、应用到<a onclick="javascript:tagshow(event, '%C9%FA%BB%EE');" href="javascript:;" target=_self><u><strong>生活</strong></u></a>的<a onclick="javascript:tagshow(event, '%C6%E4%CB%FC');" href="javascript:;" target=_self><u><strong>其它</strong></u></a>方面。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C：在能胜任工作的基础上，立即去涉猎其它领域的专业知识，丰富自己的知识体系、提高自己的综合素质，尤其是那些目标不在技术方面的朋友。</p>
<img src ="http://www.cnitblog.com/stomic/aggbug/42478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2008-04-17 15:35 <a href="http://www.cnitblog.com/stomic/archive/2008/04/17/42478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当项目组长的一些体会</title><link>http://www.cnitblog.com/stomic/archive/2008/04/16/42420.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 16 Apr 2008 02:59:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2008/04/16/42420.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/42420.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2008/04/16/42420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/42420.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/42420.html</trackback:ping><description><![CDATA[<p>对组员负责</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要做一个项目负责人，首先要做一个好人。最自己负责，对领导负责，对组员负责，而如果想形成一个好的团队对组员负责是一个关键的问题。93年我第一次带团队的时候，我们在江苏开发一个项目，有一次，我的领导找到我谈<a onclick="javascript:tagshow(event, '%B9%A4%D7%F7');" href="javascript:;" target=_self><u><strong><font color=#0000ff>工作</font></strong></u></a>，在谈到一个组员的时候，我问他为什么自己花钱给那个人买皮鞋。领导对我说，你难道没有看到他的手和脚都长冻疮了吗？你作为项目组长，你的组员才大学毕业，就和我们一起出差，第一次独身在外，你难道不能更加关心他吗？这件事情给我感触很大。作为一个项目负责人，不但要在专业上关心你的组员，在平时的<a onclick="javascript:tagshow(event, '%C9%FA%BB%EE');" href="javascript:;" target=_self><u><strong><font color=#0000ff>生活</font></strong></u></a>中也要关心他们。这样才能形成一个好的团队。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关心组员,有几个方面,其中一个是注意组员可能的发展方向,比如我原来的领导建议我做<a onclick="javascript:tagshow(event, '%B2%E2%CA%D4');" href="javascript:;" target=_self><u><strong><font color=#0000ff>测试</font></strong></u></a>或者QA,说我比较适合做个工作.开始的时候个人认为测试并没有什么重要的,还是喜欢做开发,后来因为一些偶然的原因作测试和QA工作,的确很爽.(不过要没有那些年的开发经验会这么爽吗?),在我自己的项目组里也出现这种情况,比如我原来的一个开发人员就是不愿意做开发,搞锝我很难受,后来和他交流发现他想做网络管理,在项目结束后,给他找了一个会做单位的网络系统管理员,他又自学了CCNP什么,干得不错.所以,作为一个项目组长,在关心你的组员的时候,要注意他们的特长和潜质,如果我的组员愿意做开发工作,我会为他们订制一个培养计划,然后给他们提一些要求,这样可以帮他们快速提高开发水平.而如果他们他们不愿意做开发工作,就要及时获得他们的真实想法,并帮助他们去实现他们的目标.这样开发组的内的气氛会很好, </p>
<p>对新参加工作的同志的关心要细致&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新参加工作的同志和老同志的差别很大,我们这里的新同志都是刚毕业的大学生或者研究生.社会经验都比较少,对他们的关心就需要格外细致,比如在他们刚来的时候,机器设备的配置,软件的安装,各部门情况的介绍,都要和他们讲得比较细,这样比较容易消除他们的陌生感,很快的融合到集体中来,另外一个要注意的是,对他们的工作的安排和检查要细致.一般来说,我对他们工作的安排一般一个阶段不会超过两天,也就是说,两天比检查他们工作一次,在检查工作的时候,首先要表扬他们的成绩,然后告诉他们存在的问题,以及问题的解决方法.在让他们去试验(不可包办代替,让他们自己去做,这样才可以积累他们的工作经验).而且在检查的过程中尽量保持谈话环境的轻松愉快,(可以讲一些我们原来的臭事,避免单纯的说教式的检查方法),这样新同志一般都会接受我们建议,同时为以后的工作打下一个好的工作氛围,工作要细致的另外一个体现是要根据不同的人安排工作.比如我们今年招的测试人员,其中一个是计算机专业的本科,又在单位实习了3个月,我安排他的工作就是学习TD和<a onclick="javascript:tagshow(event, 'QTP');" href="javascript:;" target=_self><u><strong><font color=#0000ff>QTP</font></strong></u></a>进行测试,原因很简单.他在单位做过测试,对测试理论的认识也比较到位,而且有一定的开发经验,那么如何早日将他培养成一个优秀的测试人员就是我的目标.而测试工作的使用实施对他的个人发展就显得很重要了.另外一个是本科非计算机专业,他的主要工作就是不断重复的作一个系统的测试.每测试一次,我都要给他讲解一次,没有办法,他累我也累.但他没有开发经验也没有测试经验,如果一下上太复杂的东西,他不但不能掌握所学的知识,而且对工作会产生一种畏惧心理,这对他以后的发展是很不利的.所以我对他的安排就是在3个月内不断的进行实际的测试,并且不断总结经验,这样三个月的时间内,他基本就可以掌握测试的基本方法和理论,而在三个月之后,他也要开始<a onclick="javascript:tagshow(event, '%B2%E2%CA%D4%B9%A4%BE%DF');" href="javascript:;" target=_self><u><strong><font color=#0000ff>测试工具</font></strong></u></a>的<a onclick="javascript:tagshow(event, '%D1%A7%CF%B0');" href="javascript:;" target=_self><u><strong><font color=#0000ff>学习</font></strong></u></a>,而那时我的第一个测试人员已经记基本掌握了QTP,可以帮助他了.对不同开发人员测试人员的具体情况进行分析,让他们做适合他们做的工作,并且在每一次工作中都让他们不断增强自信心,而且提高自己的<a onclick="javascript:tagshow(event, '%BC%BC%CA%F5');" href="javascript:;" target=_self><u><strong><font color=#0000ff>技术</font></strong></u></a>水平,你的组员怎么会不听你的指挥。 </p>
<p><br>作为一个项目要勇于决断 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作为一个项目组长要勇于决断,项目组长是最了解项目的管理人员,无论是用户,组员还是测试人员和质量保证人员以及客户都是以项目组长为中心的,这个地位决定了项目组长应该是对项目最了解的人,那么他在关键时刻的判断和决断就对项目起着关键的作用.而作为项目组长如果不敢和不能决断的话,必然给项目的开发造成极大的困难,说两个故事.&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个是我的哥们,有一次他去客户那里没有参加技术讨论会,回来的时候,他的开发人员的讨论会还在激烈的争吵着,见他回来了,分成两派的开发人员就让他来判断那个算法更好,我的哥们听了一会说,我来告诉你们如何取舍,于是从兜里掏出一个硬币,正面用A方案,背面用B方案,然后一扔,于是结果出来了.当时我听了这个故事直笑.问他为什么这么做.他说,我不搞技术很多年了,但听他们说得,两个方案差别不多,不过是A+B=C还是B+A=C的问题,这个时候如果你去参加参加讨论,无论采用A还是B都要费很多的口舌,而有那个时间早开发出来了,于是就想了这个方法.当然采用这个方案的时候,开发人员都看傻了,别忘了给你的开发人员讲解一下你为什么采用这样的选择方法&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外一个项目就很有意思了,表面上这个项目组长很尊重开发人员,每周都要开一次周会,而且开会的时间还不短,可很快开发人员就不在会议上发言了,有一次和他们组的开发人员闲谈的时候,问他们为什么不在会上发言了,那个开发人员告诉我,每一次提出问题,组长都是侃侃而谈一番,没有任何实质内容,最好的情况是说这个问题下面让某某,于是坐在一边不说话了,更多的情况是说这个问题很重要,我们先放一放.下回讨论.可是问题既没有记录,也没有安排人去做专门的研究,往往是不了了之.一次两次,慢慢的开发人员都认为提的问题不可能得到解决,于是每次的周会就成了项目组长的独角戏,而<a onclick="javascript:tagshow(event, '%C6%E4%CB%FB');" href="javascript:;" target=_self><u><strong><font color=#0000ff>其他</font></strong></u></a>人员的手机发短信的水平,以及图画水平倒提高了很多.&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很多项目组长往往感觉自己的权威性不够,经常会说给我这个权力那个权力,我就可以怎么怎么样,其实,项目组长的权威不是建立在对开发人员的工资或者其他的控制上,而是建立在你的做事方法,开发能力等这些软件水平上的,如果在你的组员遇到问题的时候,你可以为他们解决,提出可行的解决方法,什么和他们一起同甘共苦的去完成那些最艰难的问题,你的组员怎么会不信服你,你又怎么会没有威信呢. </p>
<p><br>对不同的人员采用不同工作的方法 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作为项目组长最重要的一个特点是要细致，在安排和检查工作的时候尤其要细致。对待刚参加工作的工作人员和老工作人员也要区别对待，一般来说刚参加工作的人员工作热情都比较高，但工作方法的掌握都会有一些这样或者那样的缺陷，如何做到既不打击他们的工作热情，又防止他们的工作走偏是一个很重要的事情，我带项目组的时候，有一次给了我四个刚毕业的工作人员。我给自己定了几个原则，1要大胆使用他们，2要帮助他们解决主要的开发问题，3检查工作要仔细，防止工作出现大的偏差，4分层次，区别使用，尽量作到用对他们。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 先说1大胆使用他们，新同志一般工作都会存在这样或那样的问题，而且有时候问题比较明显，我原来也觉得使用他们不如自己开发快，所以总是越俎代庖，这样的结果就是我自己累得够呛，开发人员闲得要命，而且工作情绪不高i。为了防止这个问题的发生。这回我努力克制自己开发的欲望，将所有的设计、编码的任务都安排给他们，自己只负责总体设计、关键技术问题的解决和工作的检查。事实证明，只要你控制得好，开发人员都会比较好的完成开发任务，而且在开发过程中进步也是很明显的。我的这几个开发人员由于我敢于放权，不但开发完成的比较好，而且经验的积累也比同时间来的开发人员要快，很快成为了单位的开发骨干。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2放权不是不管，而是该管的管，不该管的不管。对于新同志他们都有一定的开发能力的欠缺，但主要问题体现在两个地方，一个是设计能力，一个是开发的规范性。总体设计是我来做的，然后给他们逐步讲解，使他们了解我这么设计的目的和方法。再让他们做自己部分的设计，开始这是很困难的事情。因为我们的系统需要很强的可扩充性和维护性，所以很多方面的设计方法和他们原来的开发有很大的区别。而他们在学校做的设计根本不用考虑系统的可扩充性和维护性，所以在很多设计思路上彼此差别很大，我不但要完成设计，讲解给他们听，而且要让他们接受我的观点，说实在的真是很困难的，我采用了和实际相结合的方法，告诉他们每一个设计的目的和实现的方法，如果他们有不同的设计也可以，大家一起讨论，如果他们的设计可以满足系统的需求那么我也很乐意接受。另外一个是开发的规范性，我们的同志在学校的时候基本上都没有接受过规范性开发的培训，而这是在实际工作中必须特别强调的东西，比如代码的规范性、文档格式的规范性等，我就作为强制执行。当然如果一味的强调这是规范必须执行还是不够的（容易产生逆反心理），在具体执行过程，还要和他们去交流。比如如何写文档效果会比较好，如何避免有话说不出来的问题，一般来说，我都采用他们先写文档（或代码），我来检查，然后讲解，他们再修改。再检查、讲解，（编码也是一样），一般来说，第一次的文档他们会写4-6次，但经过一次这种训练，他们的文档撰写水平和编写代码的规范性就可以过关了。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3新同志的工作周期我一般安排是1.5---2天的时间。一般来说。新同志的工作我都安排得比较细，他们的工作都在一天之内可以完成，这样主要是防止工作出现比较大的偏差。而且即使出现了问题，我也可以及时发现和调整，不至于对工作造成太大的危害。工作检查不是一个简单的评判过程，更是对他们的一个培养过程。一些工作方法，工作技巧都是在这个时候教授的。在这个环节要特别注意简单粗暴地对待开发人员，一定要将问题讲透讲清楚，最后还要让开发人员再讲一遍你的讲解内容和后面的工作安排（很重要的，在你听他们叙述的时候，往往会发现他们的理解和你的想法有很大的差别），防止交流的无效性发生，一般来说新参加工作的人员如果真接受了你的观点，使会主动改正他自己的问题的（虽然会有反复）&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4即使是新工作人员，也会有很大的差别，作为项目负责人，要善于发现发现这些差别。比如在这个项目中，有一个工作人员作过OA项目（毕业设计），对OA的理解比较多，那我就让他负责系统最重要部分的设计，有的人比较细心，就让他负责<a onclick="javascript:tagshow(event, '%C5%E4%D6%C3%B9%DC%C0%ED');" href="javascript:;" target=_self><u><strong><font color=#0000ff>配置管理</font></strong></u></a>，有的人比较善于钻研，就让他负责权限管理部分的设计（那部分比较难），总之，没有不可用的人，关键是看你是否用的对地方。只要用对地方，便可以达到事半功倍的效果 </p>
<p>学会向用户汇报工作 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当然了，也包括领导汇报工作。道理基本一样。说一个在科委项目的课题的故事吧，那个课题是一个做的不太好的项目。用户对我们很不满意。项目组长被撤了，开发人员也都走了，让我接手这个项目，我的目标是完善项目，我到项目经费（还有40%），其中的开发工作就不多说了，只说说向用户汇报的事情，用户的领导是一个50多岁的大妈(大妈是很聪明的，否则也不会在那里做到这个职位)，对我们很不满意，开始的时候，我坚决承认错误，绝不隐瞒（获得对方的认可），其次在后来的时候每次去用户那里，我都会琢磨一下是否要去向她汇报，如果没有太重要的事情，就想想最近在做什么事情，这样在见到大妈的时候，可以汇报，如果真是需要汇报，就要特别考虑一下几个问题，1我现在的工作进展，2我遇到的问题，3问题那些是我可以解决的，什么时候会有答复，4什么问题需要用户配合。（比如硬件设备的改善等）具体配合的内容是什么。在汇报的时候，我会私下掰手指头，一个问题一个问题说，防止遗漏，同时要记住对方的回答。这样几回之后，大妈对我的感觉很好，后边的工作就好做了，后来项目顺利完成。经费自然也回来了，所以在和用户汇报工作的时候要特别注意几点&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1项目是最重要的，无论你采用什么作客户关系的方法，项目或产品必须过关，否则一切都是无用功（国家项目不一定）&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2在汇报的时候，态度要认真。特别是出现问题的时候不要一味推卸责任，讲理由，这是没有效果的（在单位汇报工作的时候也一样，没有人会理会你的理由）&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3汇报之前一定要准备，这样条例清楚，事情完整。防止因为一点小事情连续打扰客户。要让客户在每一次交流时都有很大的成果。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4汇报的时候要掰手指头，主要是防止问题的遗忘，特别是大家在就具体问题讨论的时候容易干扰你的思路，使你遗忘事情&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5在汇报之后要将所有问题都过一遍，是否所有的问题都有解决方法了，如果什么事情不清楚，马上问，这样总比再次来好，在说出来，和用户一起确认问题的解决方法&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6实在怕遗忘，最好带一个录音笔，但千万不要让用户看到，也不要用这个东西作为以后争执的证据用（没有好处的），只是作为资料整理的一个备份，否则用户会反感而不配合你以后的工作。 </p>
<img src ="http://www.cnitblog.com/stomic/aggbug/42420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2008-04-16 10:59 <a href="http://www.cnitblog.com/stomic/archive/2008/04/16/42420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)月薪80000的小姐给我上了震撼一课</title><link>http://www.cnitblog.com/stomic/archive/2008/03/22/41328.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Fri, 21 Mar 2008 16:47:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2008/03/22/41328.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/41328.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2008/03/22/41328.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/41328.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/41328.html</trackback:ping><description><![CDATA[<span class=tpc_title>月薪80000的小姐给我上了震撼一课 (确实需要认真看下)</span><br><br><span class=tpc_content>
<div id=cont1149 style="WIDTH: 600px"><br>　　　　 <br>　　　　这个小姐做CSI恐怕也行。 <br>　　　　这个站街小姐太强劲了，要做生意额朋友好好看看。。。 <br>　　　　 <br>　　　　我突然觉得想找个女人，于是匆匆结束了一个会议，在国贸现代城前搜索站街女。一个短裙mm发现了我，非常专业的、径直的走在我的面前。这一走，于是有了后面的这个让我深感震撼的故事，象上了一堂生动的MBA案例课。为了忠实于这名小姐的原意，我凭记忆尽量重复她原来的话。 <br>　　　　 <br>　　　　&#8220;先生想做什么？&#8230;&#8230;好的，全套冰火毒龙红绳。我在朝阳就喜欢做现代城的生意。这里我只做两个地方。现代城，京广中心。你知道吗？看到你之前，我在现代城门口兜了两圈，终于被我看到你了！从写字楼里出来的，肯定做全套~~~&#8221; <br>　　　　 <br>　　　　&#8220;哦？你很有方法嘛！&#8221;我附和了一下。 <br>　　　　 <br>　　　　&#8220;做小姐，也要用科学的方法。&#8221;她说。我一愣，顿时很有些兴趣&#8220;什么科学的方法？&#8221; <br>　　　　 <br>　　　　&#8220;要懂得统计。我做过精确的计算。我说给你听啊。我个月做22天的生意，每天成本272.7元&#8230;&#8230;&#8221; <br>　　　　 <br>　　　　&#8220;怎么算出来的？&#8221;我追问。 <br>　　　　 <br>　　　　&#8220;你算啊，为了客人有好的环境，我租高级公寓每个月要交3000元房租，为了使自己上档次区别于一般的小姐，每个月买衣服和化妆品要1500左右，加上每月吃饭1500元左右。一个月做22天生意，平均每天固定成本是不是就是272.7元？&#8221;，我有些惊讶。我找了10年的小姐，第一次听到有小姐这么计算成本。以前的小姐都和我说，每炮300元，另外包夜800之类的。 <br>　　　　 <br>　　　　&#8220;成本是不能按次数算的，只能按时间算。你看，我每天都记帐。我可以看到一个月的详细记录。我做过数据分析，每次接客之间的空闲时间平均为7小时。如果找了一个做推油的，100元，大概要做一小时。也就是每一个 100元的客人要花8小时的成本，就是每小时赚12.5元。不赚钱啊！如果说做冰火，漫游，毒龙的客人是吃饭，做100元的客人连吃菜都算不上，只能算是撒了些味精。&#8221; <br>　　　　 <br>　　　　强！这个mm听上去真不象站街女，到象是一位成本核算师。&#8220;那你怎么办呢？&#8221;我更感兴趣了，继续问。看来去小姐家的路上还能学到新东西。 <br>　　　　 <br>　　　　&#8220;千万不能傻站在一个地方等客人。而是通过选择站街的地点，时间，和客人，主动地决定你要做的项目。&#8221;我非常惊讶，这听上去很有意思。&#8220;有人说做小姐是靠运气吃饭的职业。我以为不是。你要站在客人的位置上，从客户人的角度去思考。&#8221;这句话听上去很专业，有点象很多商业管理培训老师说的&#8220;put yourself into others' shoes.&#8221; <br>　　　　 <br>　　　　&#8220;给你举个例子，医院门口，一个拿着药的，一个拿着脸盆的，你接哪一个。&#8221;我想了想，说不知道。 <br>　　　　 <br>　　　　&#8220;你要接那个拿脸盆的。一般人病小痛的到医院看一看，拿点药，不一定会想怎么放纵，说不定生着病连女人都不想。拿着脸盆打车的，那是出院的。住院哪有不死人的？今天二楼的谁死了，明天三楼又死了一个。从医院出来的人通常会有一种重获新生的感觉，重新认识生命的意义，生命苦短，及时行乐才最重要。那天这个说：操，去宾馆开房，给你2000包夜，你穿护士服，让我出了对那些狗日的护士的一口恶气。伸手给了我2000，眼睛都不眨一下。你说他会做个按摩，然后做推油吗？绝对不会！&#8221; <br>　　　　 <br>　　　　我不由得开始佩服。 <br>　　　　 <br>　　　　&#8220;再给你举个例子。那天在潘家园，三个人对我招手。一个年轻男人，从商场出来，手里拿着礼品盒。还有一对老男人西装革履，红光满面的，一看就是刚喝完酒的。第三个是个里面穿绒衬衫的，外面羽绒服的男子，背着笔记本包拖着拉杆箱。我看一个人只要3秒钟。我毫不犹豫地停在这个男子面前。这个男的跟我开房后说：沙漠风暴，水晶之恋~~~还没说后面就忍不住问，为什么你毫不犹豫地跟我走了？前面还有两个人，你要是跟他们走，我也不好意思和他们抢。我回答说，那个小p孩拿着礼品盒，是晚上要去跟女朋友约会的，肯定不会包夜；那两老男人刚喝完酒，做完就睡，也不会包夜，而且喝完就一次就做特长时间；你是来出差的，拿着笔记本包和拉杆箱，一看就是能报销。而且一个人住宾馆，估计是包夜。那个男的就说，你说对了，包夜。&#8221; <br>　　　　 <br>　　　　&#8220;那些在发廊门口，穿着裤衩背心的人可能是有钱的主吗？可能去宾馆开房包夜吗？高级点的宾馆也不会让他进啊。&#8221; <br>　　　　 <br>　　　　有道理！我越听越有意思。 <br>　　　　 <br>　　　　&#8220;很多小姐都抱怨，生意不好做啊，最近又严打了啊，都从别人身上找原因。我说，你永远从别人身上找原因，你永远不能提高。从自己身上找找看，问题出在哪里。&#8221;这话听起来好熟，好像是&#8220;如果你不能改变世界，就改变你自己&#8221;，或者Steven Corvey的&#8220;影响圈和关注圈&#8221;的翻版。&#8220;有一次，在动物园一个人叫我，做推油。后来又有一次，一个人在动物园叫我，还是做推油。我就问了，怎么你们在动物园这找小姐的人，很多都是做推油呢？人家说，在动物园有一个公交车枢纽，我们都是在这里等车没事干，顺便做个推油的。我恍然大悟。比如你动物园那一块，没有写字楼，没有酒店，什么都没有，只有公共汽车站，在这里找小姐的多半都是刚下公共汽车的，再换另一趟车回家的。在这里找小姐的客人通常都是速战速决推个油。&#8221; <br>　　　　 <br>　　　　&#8220;所以我说，态度决定一切！&#8221;我听十几个总裁讲过这句话，第一次听小姐这么说。 <br>　　　　 <br>　　　　&#8220;要用科学的方法，统计学来做生意。天天等在三里屯排队，怎么能赚到钱？每个月就赚5000块钱怎么买得起化妆品好衣服打扮自己？这就是在谋杀啊！慢性谋杀你的青春。要用知识武装自己。学习知识可以把一个人变成聪明的人，一个聪明的人学习知识可以变成很聪明的人。一个很聪明的人学习知识，可以变成天才。&#8221; <br>　　　　 <br>　　　　&#8220;有一次一个人去我家，问做什么。他说做按摩加胸推。我说不爽，直接xx吧。他说，这多贵啊。我说，没关系，你经常出来玩你有经验，你做胸推200块，你按我说的，你只给200快就好了，多的算我的。最后，按我的做了，多做了一些服务，xx可比胸推快多了，按摩加胸推一耽误就是半天没法做别人的生意， xx10分钟搞定。我只收了200块。客人很高兴，省了100元钱左右。这对我来说就是闭上眼睛躺一会。我相当于躺一会患了半天的时候。我刚才说了，我一天的成本272.7块，我多合算啊！&#8221; <br>　　　　 <br>　　　　&#8220;在北京，不算高级夜总会里做的，一般一个小姐7、8千，拿回家。做的好的大概2万左右。顶级的小姐大概每月能有5万。全北京10万个小姐，大概只有2-3个小姐，万里挑一，每月能拿到8万以上。我就是这2-3个人中间的一个。而且很稳定，基本不会大的波动。&#8221; <br>　　　　 <br>　　　　太强了！到此为止，我越来越佩服这个小姐。 <br>　　　　 <br>　　　　&#8220;我常常说我是一个快乐的鸡。有人说，你是因为赚的钱多，所以当然快乐。我对他们说，你们正好错了。是因为我有快乐、积极的心态，所以赚的钱多。&#8221; <br>　　　　 <br>　　　　说的多好啊！ <br>　　　　 <br>　　　　&#8220;要懂得体味工作带给你的美。大冬天的在三里屯站街，很多小姐抱怨，这他妈破天！真是倒霉。千万不要这样，用心体会一下这个城市的美，身边有很多同性恋帅哥经过，非常现代的高楼大厦，虽然买不起，但是却可以用欣赏的眼光去享受。开公园打野炮，看着草地的绿色，冬天是白色的，多美啊。再看看钱包，1000 多了，就更美了！每一样工作都有她美丽的地方，我们要懂得从工作中体会这种美丽。&#8221; <br>　　　　 <br>　　　　&#8220;我5年前是天上人间的领班。3年前在作三个不同桑拿做过头牌。后来我不干了，一个月就3、5万块，没意思。就主动来做站街。我愿意做一个快乐的野鸡。哈哈哈哈。&#8221; <br>　　　　 <br>　　　　到了机场，我给她留了一张名片，说：&#8220;你有没有兴趣这个星期五，到我办公室，给微软的员工讲一讲你怎么当小姐的？你就当在床上，一个全套一小时，你讲多久，我就付你多少钱。给我电话。&#8221; <br>　　　　 <br>　　　　我迫不及待的在小姐家的卫生间里记录下他这堂生动的MBA课.</div>
</span>
<img src ="http://www.cnitblog.com/stomic/aggbug/41328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2008-03-22 00:47 <a href="http://www.cnitblog.com/stomic/archive/2008/03/22/41328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）有趣的字母</title><link>http://www.cnitblog.com/stomic/archive/2008/02/21/40002.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Thu, 21 Feb 2008 02:32:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2008/02/21/40002.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/40002.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2008/02/21/40002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/40002.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/40002.html</trackback:ping><description><![CDATA[<a onclick="showLinkBubble(this);return false" href="http://parki.blogcn.com/diary,111164787.shtml" target=_blank link="http://parki.blogcn.com/diary,111164787.shtml"><font style="LINE-HEIGHT: 1.3em" color=#0000ff><u>人生的圆满</u></font><wbr></a><wbr> 如果令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于百分之 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <br><br>　　那么Hard work （努力工作） <br><br>　　H+A+R+D+W+O+R+K = 8+1+18+4+23+15+18+11 = 98% <br><br>　　Knowledge（知识） <br><br>　　K+N+O+W+L+E+D+G+E = 11+14+15+23+12+5+4+7+5 = 96% <br><br>　　Love（爱情） <br><br>　　L+O+V+E = 12+15+22+5 = 54% <br><br>　　Luck（好运） <br><br>　&nbsp;&nbsp;L+U+C+K = 12+21+3+11 = 47% <br><br>　 （这些我们通常认为重要的东西往往并不是最重要的） <br><br>　　什么能使得生活变得圆满？ <br><br>　　是Money（金钱）吗? ... <br><br>　　不! M+O+N+E+Y = 13+15+14+5+25 = 72% <br><br>　　是Leaadership（领导能力）吗? ... <br><br>　　不! L+E+A+D+E+R+S+H+I+P = 12+5+1+4+5+18+19+9+16 = 89% <br><br>　　那么，什么能使生活变成100%的圆满呢？ <br><br>　&nbsp;&nbsp;每个问题都有其解决之道，只要你把目光放得远一点！ <br><br>　　ATTITUDE（心态） <br><br>　&nbsp;&nbsp;A+T+T+I+T+U+D+E = 1+20+20+9+20+21+4+5 = 100% 
<img src ="http://www.cnitblog.com/stomic/aggbug/40002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2008-02-21 10:32 <a href="http://www.cnitblog.com/stomic/archive/2008/02/21/40002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新版劳动法</title><link>http://www.cnitblog.com/stomic/archive/2008/01/02/38377.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 02 Jan 2008 05:12:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2008/01/02/38377.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/38377.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2008/01/02/38377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/38377.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/38377.html</trackback:ping><description><![CDATA[<font size=5>&nbsp;</font>
<p align=center><strong><font size=5>中华人民共和国主席令</font></strong></p>
<p align=center><font size=4>第六十五号</font></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;</strong><font size=4>《中华人民共和国劳动合同法》已由中华人民共和国第十届全国人民代表大会常务委员会第二十八次会议于2007年6月29日通过，现予公布，自2008年1月1日起施行。</font></p>
<p align=right><font size=4>中华人民共和国主席　胡锦涛</font></p>
<p align=right><font size=4>2007年6月29日</font></p>
<p align=center><strong><font size=5>中华人民共和国劳动合同法</font></strong></p>
<p align=center><strong>（2007年6月29日第十届全国人民代表大会常务委员会第二十八次会议通过）</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;目　录</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第一章　总　则</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二章　劳动合同的订立</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三章　劳动合同的履行和变更</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第四章　劳动合同的解除和终止</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第五章　特别规定</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第一节　集体合同</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二节　劳务派遣</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三节　非全日制用工</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第六章　监督检查</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第七章　法律责任</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第八章　附　则</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第一章　总　则</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第一条　为了完善劳动合同制度，明确劳动合同双方当事人的权利和义务，保护劳动者的合法权益，构建和发展和谐稳定的劳动关系，制定本法。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二条　中华人民共和国境内的企业、个体经济组织、民办非企业单位等组织（以下称用人单位）与劳动者建立劳动关系，订立、履行、变更、解除或者终止劳动合同，适用本法。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;国家机关、事业单位、社会团体和与其建立劳动关系的劳动者，订立、履行、变更、解除或者终止劳动合同，依照本法执行。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三条　订立劳动合同，应当遵循合法、公平、平等自愿、协商一致、诚实信用的原则。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;依法订立的劳动合同具有约束力，用人单位与劳动者应当履行劳动合同约定的义务。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第四条　用人单位应当依法建立和完善劳动规章制度，保障劳动者享有劳动权利、履行劳动义务。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位在制定、修改或者决定有关劳动报酬、工作时间、休息休假、劳动安全卫生、保险福利、职工培训、劳动纪律以及劳动定额管理等直接涉及劳动者切身利益的规章制度或者重大事项时，应当经职工代表大会或者全体职工讨论，提出方案和意见，与工会或者职工代表平等协商确定。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在规章制度和重大事项决定实施过程中，工会或者职工认为不适当的，有权向用人单位提出，通过协商予以修改完善。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位应当将直接涉及劳动者切身利益的规章制度和重大事项决定公示，或者告知劳动者。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第五条　县级以上人民政府劳动行政部门会同工会和企业方面代表，建立健全协调劳动关系三方机制，共同研究解决有关劳动关系的重大问题。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第六条　工会应当帮助、指导劳动者与用人单位依法订立和履行劳动合同，并与用人单位建立集体协商机制，维护劳动者的合法权益。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二章　劳动合同的订立</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第七条　用人单位自用工之日起即与劳动者建立劳动关系。用人单位应当建立职工名册备查。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第八条　用人单位招用劳动者时，应当如实告知劳动者工作内容、工作条件、工作地点、职业危害、安全生产状况、劳动报酬，以及劳动者要求了解的其他情况；用人单位有权了解劳动者与劳动合同直接相关的基本情况，劳动者应当如实说明。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第九条　用人单位招用劳动者，不得扣押劳动者的居民身份证和其他证件，不得要求劳动者提供担保或者以其他名义向劳动者收取财物。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十条　建立劳动关系，应当订立书面劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;已建立劳动关系，未同时订立书面劳动合同的，应当自用工之日起一个月内订立书面劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位与劳动者在用工前订立劳动合同的，劳动关系自用工之日起建立。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十一条　用人单位未在用工的同时订立书面劳动合同，与劳动者约定的劳动报酬不明确的，新招用的劳动者的劳动报酬按照集体合同规定的标准执行；没有集体合同或者集体合同未规定的，实行同工同酬。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十二条　劳动合同分为固定期限劳动合同、无固定期限劳动合同和以完成一定工作任务为期限的劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十三条　固定期限劳动合同，是指用人单位与劳动者约定合同终止时间的劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位与劳动者协商一致，可以订立固定期限劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十四条　无固定期限劳动合同，是指用人单位与劳动者约定无确定终止时间的劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位与劳动者协商一致，可以订立无固定期限劳动合同。有下列情形之一，劳动者提出或者同意续订、订立劳动合同的，除劳动者提出订立固定期限劳动合同外，应当订立无固定期限劳动合同：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（一）劳动者在该用人单位连续工作满十年的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（二）用人单位初次实行劳动合同制度或者国有企业改制重新订立劳动合同时，劳动者在该用人单位连续工作满十年且距法定退休年龄不足十年的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（三）连续订立二次固定期限劳动合同，且劳动者没有本法第三十九条和第四十条第一项、第二项规定的情形，续订劳动合同的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位自用工之日起满一年不与劳动者订立书面劳动合同的，视为用人单位与劳动者已订立无固定期限劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十五条　以完成一定工作任务为期限的劳动合同，是指用人单位与劳动者约定以某项工作的完成为合同期限的劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位与劳动者协商一致，可以订立以完成一定工作任务为期限的劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十六条　劳动合同由用人单位与劳动者协商一致，并经用人单位与劳动者在劳动合同文本上签字或者盖章生效。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;劳动合同文本由用人单位和劳动者各执一份。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十七条　劳动合同应当具备以下条款：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（一）用人单位的名称、住所和法定代表人或者主要负责人；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（二）劳动者的姓名、住址和居民身份证或者其他有效身份证件号码；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（三）劳动合同期限；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（四）工作内容和工作地点；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（五）工作时间和休息休假；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（六）劳动报酬；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（七）社会保险；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（八）劳动保护、劳动条件和职业危害防护；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（九）法律、法规规定应当纳入劳动合同的其他事项。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;劳动合同除前款规定的必备条款外，用人单位与劳动者可以约定试用期、培训、保守秘密、补充保险和福利待遇等其他事项。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十八条　劳动合同对劳动报酬和劳动条件等标准约定不明确，引发争议的，用人单位与劳动者可以重新协商；协商不成的，适用集体合同规定；没有集体合同或者集体合同未规定劳动报酬的，实行同工同酬；没有集体合同或者集体合同未规定劳动条件等标准的，适用国家有关规定。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第十九条　劳动合同期限三个月以上不满一年的，试用期不得超过一个月；劳动合同期限一年以上不满三年的，试用期不得超过二个月；三年以上固定期限和无固定期限的劳动合同，试用期不得超过六个月。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;同一用人单位与同一劳动者只能约定一次试用期。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;以完成一定工作任务为期限的劳动合同或者劳动合同期限不满三个月的，不得约定试用期。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;试用期包含在劳动合同期限内。劳动合同仅约定试用期的，试用期不成立，该期限为劳动合同期限。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十条　劳动者在试用期的工资不得低于本单位相同岗位最低档工资或者劳动合同约定工资的百分之八十，并不得低于用人单位所在地的最低工资标准。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十一条　在试用期中，除劳动者有本法第三十九条和第四十条第一项、第二项规定的情形外，用人单位不得解除劳动合同。用人单位在试用期解除劳动合同的，应当向劳动者说明理由。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十二条　用人单位为劳动者提供专项培训费用，对其进行专业技术培训的，可以与该劳动者订立协议，约定服务期。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;劳动者违反服务期约定的，应当按照约定向用人单位支付违约金。违约金的数额不得超过用人单位提供的培训费用。用人单位要求劳动者支付的违约金不得超过服务期尚未履行部分所应分摊的培训费用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位与劳动者约定服务期的，不影响按照正常的工资调整机制提高劳动者在服务期期间的劳动报酬。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十三条　用人单位与劳动者可以在劳动合同中约定保守用人单位的商业秘密和与知识产权相关的保密事项。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;对负有保密义务的劳动者，用人单位可以在劳动合同或者保密协议中与劳动者约定竞业限制条款，并约定在解除或者终止劳动合同后，在竞业限制期限内按月给予劳动者经济补偿。劳动者违反竞业限制约定的，应当按照约定向用人单位支付违约金。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十四条　竞业限制的人员限于用人单位的高级管理人员、高级技术人员和其他负有保密义务的人员。竞业限制的范围、地域、期限由用人单位与劳动者约定，竞业限制的约定不得违反法律、法规的规定。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在解除或者终止劳动合同后，前款规定的人员到与本单位生产或者经营同类产品、从事同类业务的有竞争关系的其他用人单位，或者自己开业生产或者经营同类产品、从事同类业务的竞业限制期限，不得超过二年。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十五条　除本法第二十二条和第二十三条规定的情形外，用人单位不得与劳动者约定由劳动者承担违约金。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十六条　下列劳动合同无效或者部分无效：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（一）以欺诈、胁迫的手段或者乘人之危，使对方在违背真实意思的情况下订立或者变更劳动合同的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（二）用人单位免除自己的法定责任、排除劳动者权利的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（三）违反法律、行政法规强制性规定的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;对劳动合同的无效或者部分无效有争议的，由劳动争议仲裁机构或者人民法院确认。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十七条　劳动合同部分无效，不影响其他部分效力的，其他部分仍然有效。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十八条　劳动合同被确认无效，劳动者已付出劳动的，用人单位应当向劳动者支付劳动报酬。劳动报酬的数额，参照本单位相同或者相近岗位劳动者的劳动报酬确定。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三章　劳动合同的履行和变更</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二十九条　用人单位与劳动者应当按照劳动合同的约定，全面履行各自的义务。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十条　用人单位应当按照劳动合同约定和国家规定，向劳动者及时足额支付劳动报酬。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位拖欠或者未足额支付劳动报酬的，劳动者可以依法向当地人民法院申请支付令，人民法院应当依法发出支付令。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十一条　用人单位应当严格执行劳动定额标准，不得强迫或者变相强迫劳动者加班。用人单位安排加班的，应当按照国家有关规定向劳动者支付加班费。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十二条　劳动者拒绝用人单位管理人员违章指挥、强令冒险作业的，不视为违反劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;劳动者对危害生命安全和身体健康的劳动条件，有权对用人单位提出批评、检举和控告。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十三条　用人单位变更名称、法定代表人、主要负责人或者投资人等事项，不影响劳动合同的履行。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十四条　用人单位发生合并或者分立等情况，原劳动合同继续有效，劳动合同由承继其权利和义务的用人单位继续履行。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十五条　用人单位与劳动者协商一致，可以变更劳动合同约定的内容。变更劳动合同，应当采用书面形式。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;变更后的劳动合同文本由用人单位和劳动者各执一份。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第四章　劳动合同的解除和终止</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十六条　用人单位与劳动者协商一致，可以解除劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十七条　劳动者提前三十日以书面形式通知用人单位，可以解除劳动合同。劳动者在试用期内提前三日通知用人单位，可以解除劳动合同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十八条　用人单位有下列情形之一的，劳动者可以解除劳动合同：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（一）未按照劳动合同约定提供劳动保护或者劳动条件的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（二）未及时足额支付劳动报酬的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（三）未依法为劳动者缴纳社会保险费的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（四）用人单位的规章制度违反法律、法规的规定，损害劳动者权益的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（五）因本法第二十六条第一款规定的情形致使劳动合同无效的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（六）法律、行政法规规定劳动者可以解除劳动合同的其他情形。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位以暴力、威胁或者非法限制人身自由的手段强迫劳动者劳动的，或者用人单位违章指挥、强令冒险作业危及劳动者人身安全的，劳动者可以立即解除劳动合同，不需事先告知用人单位。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三十九条　劳动者有下列情形之一的，用人单位可以解除劳动合同：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（一）在试用期间被证明不符合录用条件的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（二）严重违反用人单位的规章制度的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（三）严重失职，营私舞弊，给用人单位造成重大损害的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（四）劳动者同时与其他用人单位建立劳动关系，对完成本单位的工作任务造成严重影响，或者经用人单位提出，拒不改正的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（五）因本法第二十六条第一款第一项规定的情形致使劳动合同无效的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（六）被依法追究刑事责任的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第四十条　有下列情形之一的，用人单位提前三十日以书面形式通知劳动者本人或者额外支付劳动者一个月工资后，可以解除劳动合同：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（一）劳动者患病或者非因工负伤，在规定的医疗期满后不能从事原工作，也不能从事由用人单位另行安排的工作的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（二）劳动者不能胜任工作，经过培训或者调整工作岗位，仍不能胜任工作的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（三）劳动合同订立时所依据的客观情况发生重大变化，致使劳动合同无法履行，经用人单位与劳动者协商，未能就变更劳动合同内容达成协议的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第四十一条　有下列情形之一，需要裁减人员二十人以上或者裁减不足二十人但占企业职工总数百分之十以上的，用人单位提前三十日向工会或者全体职工说明情况，听取工会或者职工的意见后，裁减人员方案经向劳动行政部门报告，可以裁减人员：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（一）依照企业破产法规定进行重整的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（二）生产经营发生严重困难的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（三）企业转产、重大技术革新或者经营方式调整，经变更劳动合同后，仍需裁减人员的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（四）其他因劳动合同订立时所依据的客观经济情况发生重大变化，致使劳动合同无法履行的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;裁减人员时，应当优先留用下列人员：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（一）与本单位订立较长期限的固定期限劳动合同的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（二）与本单位订立无固定期限劳动合同的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（三）家庭无其他就业人员，有需要扶养的老人或者未成年人的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;用人单位依照本条第一款规定裁减人员，在六个月内重新招用人员的，应当通知被裁减的人员，并在同等条件下优先招用被裁减的人员。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;第四十二条　劳动者有下列情形之一的，用人单位不得依照本法第四十条、第四十一条的规定解除劳动合同：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（一）从事接触职业病危害作业的劳动者未进行离岗前职业健康检查，或者疑似职业病病人在诊断或者医学观察期间的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（二）在本单位患职业病或者因工负伤并被确认丧失或者部分丧失劳动能力的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（三）患病或者非因工负伤，在规定的医疗期内的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（四）女职工在孕期、产期、哺乳期的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（五）在本单位连续工作满十五年，且距法定退休年龄不足五年的；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;（六）法律、行政法规规定的其他情形。</p>
<p>　　第四十三条　用人单位单方解除劳动合同，应当事先将理由通知工会。用人单位违反法律、行政法规规定或者劳动合同约定的，工会有权要求用人单位纠正。用人单位应当研究工会的意见，并将处理结果书面通知工会。</p>
<p>　　第四十四条　有下列情形之一的，劳动合同终止：</p>
<p>　　（一）劳动合同期满的；</p>
<p>　　（二）劳动者开始依法享受基本养老保险待遇的；</p>
<p>　　（三）劳动者死亡，或者被人民法院宣告死亡或者宣告失踪的；</p>
<p>　　（四）用人单位被依法宣告破产的；</p>
<p>　　（五）用人单位被吊销营业执照、责令关闭、撤销或者用人单位决定提前解散的；</p>
<p>　　（六）法律、行政法规规定的其他情形。</p>
<p>　　第四十五条　劳动合同期满，有本法第四十二条规定情形之一的，劳动合同应当续延至相应的情形消失时终止。但是，本法第四十二条第二项规定丧失或者部分丧失劳动能力劳动者的劳动合同的终止，按照国家有关工伤保险的规定执行。</p>
<p>　　第四十六条　有下列情形之一的，用人单位应当向劳动者支付经济补偿：</p>
<p>　　（一）劳动者依照本法第三十八条规定解除劳动合同的；</p>
<p>　　（二）用人单位依照本法第三十六条规定向劳动者提出解除劳动合同并与劳动者协商一致解除劳动合同的；</p>
<p>　　（三）用人单位依照本法第四十条规定解除劳动合同的；</p>
<p>　　（四）用人单位依照本法第四十一条第一款规定解除劳动合同的；</p>
<p>　　（五）除用人单位维持或者提高劳动合同约定条件续订劳动合同，劳动者不同意续订的情形外，依照本法第四十四条第一项规定终止固定期限劳动合同的；</p>
<p>　　（六）依照本法第四十四条第四项、第五项规定终止劳动合同的；</p>
<p>　　（七）法律、行政法规规定的其他情形。</p>
<p>　　第四十七条　经济补偿按劳动者在本单位工作的年限，每满一年支付一个月工资的标准向劳动者支付。六个月以上不满一年的，按一年计算；不满六个月的，向劳动者支付半个月工资的经济补偿。</p>
<p>　　劳动者月工资高于用人单位所在直辖市、设区的市级人民政府公布的本地区上年度职工月平均工资三倍的，向其支付经济补偿的标准按职工月平均工资三倍的数额支付，向其支付经济补偿的年限最高不超过十二年。</p>
<p>　　本条所称月工资是指劳动者在劳动合同解除或者终止前十二个月的平均工资。</p>
<p>　　第四十八条　用人单位违反本法规定解除或者终止劳动合同，劳动者要求继续履行劳动合同的，用人单位应当继续履行；劳动者不要求继续履行劳动合同或者劳动合同已经不能继续履行的，用人单位应当依照本法第八十七条规定支付赔偿金。</p>
<p>　　第四十九条　国家采取措施，建立健全劳动者社会保险关系跨地区转移接续制度。</p>
<p>　　第五十条　用人单位应当在解除或者终止劳动合同时出具解除或者终止劳动合同的证明，并在十五日内为劳动者办理档案和社会保险关系转移手续。</p>
<p>　　劳动者应当按照双方约定，办理工作交接。用人单位依照本法有关规定应当向劳动者支付经济补偿的，在办结工作交接时支付。</p>
<p>　　用人单位对已经解除或者终止的劳动合同的文本，至少保存二年备查。　　</p>
<p>　　第五章　特别规定 　　</p>
<p>　　第一节　集体合同 　　</p>
<p>　　第五十一条　企业职工一方与用人单位通过平等协商，可以就劳动报酬、工作时间、休息休假、劳动安全卫生、保险福利等事项订立集体合同。集体合同草案应当提交职工代表大会或者全体职工讨论通过。</p>
<p>　　集体合同由工会代表企业职工一方与用人单位订立；尚未建立工会的用人单位，由上级工会指导劳动者推举的代表与用人单位订立。</p>
<p>　　第五十二条　企业职工一方与用人单位可以订立劳动安全卫生、女职工权益保护、工资调整机制等专项集体合同。</p>
<p>　　第五十三条　在县级以下区域内，建筑业、采矿业、餐饮服务业等行业可以由工会与企业方面代表订立行业性集体合同，或者订立区域性集体合同。</p>
<p>　　第五十四条　集体合同订立后，应当报送劳动行政部门；劳动行政部门自收到集体合同文本之日起十五日内未提出异议的，集体合同即行生效。</p>
<p>　　依法订立的集体合同对用人单位和劳动者具有约束力。行业性、区域性集体合同对当地本行业、本区域的用人单位和劳动者具有约束力。</p>
<p>　　第五十五条　集体合同中劳动报酬和劳动条件等标准不得低于当地人民政府规定的最低标准；用人单位与劳动者订立的劳动合同中劳动报酬和劳动条件等标准不得低于集体合同规定的标准。</p>
<p>　　第五十六条　用人单位违反集体合同，侵犯职工劳动权益的，工会可以依法要求用人单位承担责任；因履行集体合同发生争议，经协商解决不成的，工会可以依法申请仲裁、提起诉讼。　　</p>
<p>　　第二节　劳务派遣 　　</p>
<p>　　第五十七条　劳务派遣单位应当依照公司法的有关规定设立，注册资本不得少于五十万元。</p>
<p>　　第五十八条　劳务派遣单位是本法所称用人单位，应当履行用人单位对劳动者的义务。劳务派遣单位与被派遣劳动者订立的劳动合同，除应当载明本法第十七条规定的事项外，还应当载明被派遣劳动者的用工单位以及派遣期限、工作岗位等情况。</p>
<p>　　劳务派遣单位应当与被派遣劳动者订立二年以上的固定期限劳动合同，按月支付劳动报酬；被派遣劳动者在无工作期间，劳务派遣单位应当按照所在地人民政府规定的最低工资标准，向其按月支付报酬。</p>
<p>　　第五十九条　劳务派遣单位派遣劳动者应当与接受以劳务派遣形式用工的单位（以下称用工单位）订立劳务派遣协议。劳务派遣协议应当约定派遣岗位和人员数量、派遣期限、劳动报酬和社会保险费的数额与支付方式以及违反协议的责任。</p>
<p>　　用工单位应当根据工作岗位的实际需要与劳务派遣单位确定派遣期限，不得将连续用工期限分割订立数个短期劳务派遣协议。</p>
<p>　　第六十条　劳务派遣单位应当将劳务派遣协议的内容告知被派遣劳动者。</p>
<p>　　劳务派遣单位不得克扣用工单位按照劳务派遣协议支付给被派遣劳动者的劳动报酬。</p>
<p>　　劳务派遣单位和用工单位不得向被派遣劳动者收取费用。</p>
<p>　　第六十一条　劳务派遣单位跨地区派遣劳动者的，被派遣劳动者享有的劳动报酬和劳动条件，按照用工单位所在地的标准执行。</p>
<p>　　第六十二条　用工单位应当履行下列义务：</p>
<p>　　（一）执行国家劳动标准，提供相应的劳动条件和劳动保护；</p>
<p>　　（二）告知被派遣劳动者的工作要求和劳动报酬；</p>
<p>　　（三）支付加班费、绩效奖金，提供与工作岗位相关的福利待遇；</p>
<p>　　（四）对在岗被派遣劳动者进行工作岗位所必需的培训；</p>
<p>　　（五）连续用工的，实行正常的工资调整机制。</p>
<p>　　用工单位不得将被派遣劳动者再派遣到其他用人单位。</p>
<p>　　第六十三条　被派遣劳动者享有与用工单位的劳动者同工同酬的权利。用工单位无同类岗位劳动者的，参照用工单位所在地相同或者相近岗位劳动者的劳动报酬确定。</p>
<p>　　第六十四条　被派遣劳动者有权在劳务派遣单位或者用工单位依法参加或者组织工会，维护自身的合法权益。</p>
<p>　　第六十五条　被派遣劳动者可以依照本法第三十六条、第三十八条的规定与劳务派遣单位解除劳动合同。</p>
<p>　　被派遣劳动者有本法第三十九条和第四十条第一项、第二项规定情形的，用工单位可以将劳动者退回劳务派遣单位，劳务派遣单位依照本法有关规定，可以与劳动者解除劳动合同。</p>
<p>　　第六十六条　劳务派遣一般在临时性、辅助性或者替代性的工作岗位上实施。</p>
<p>　　第六十七条　用人单位不得设立劳务派遣单位向本单位或者所属单位派遣劳动者。</p>
<p>　　第三节　非全日制用工 　　</p>
<p>　　第六十八条　非全日制用工，是指以小时计酬为主，劳动者在同一用人单位一般平均每日工作时间不超过四小时，每周工作时间累计不超过二十四小时的用工形式。</p>
<p>　　第六十九条　非全日制用工双方当事人可以订立口头协议。</p>
<p>　　从事非全日制用工的劳动者可以与一个或者一个以上用人单位订立劳动合同；但是，后订立的劳动合同不得影响先订立的劳动合同的履行。</p>
<p>　　第七十条　非全日制用工双方当事人不得约定试用期。</p>
<p>　　第七十一条　非全日制用工双方当事人任何一方都可以随时通知对方终止用工。终止用工，用人单位不向劳动者支付经济补偿。</p>
<p>　　第七十二条　非全日制用工小时计酬标准不得低于用人单位所在地人民政府规定的最低小时工资标准。</p>
<p>　　非全日制用工劳动报酬结算支付周期最长不得超过十五日。 　　</p>
<p>　　第六章　监督检查 　　</p>
<p>　　第七十三条　国务院劳动行政部门负责全国劳动合同制度实施的监督管理。</p>
<p>　　县级以上地方人民政府劳动行政部门负责本行政区域内劳动合同制度实施的监督管理。</p>
<p>　　县级以上各级人民政府劳动行政部门在劳动合同制度实施的监督管理工作中，应当听取工会、企业方面代表以及有关行业主管部门的意见。</p>
<p>　　第七十四条　县级以上地方人民政府劳动行政部门依法对下列实施劳动合同制度的情况进行监督检查：</p>
<p>　　（一）用人单位制定直接涉及劳动者切身利益的规章制度及其执行的情况；</p>
<p>　　（二）用人单位与劳动者订立和解除劳动合同的情况；</p>
<p>　　（三）劳务派遣单位和用工单位遵守劳务派遣有关规定的情况；</p>
<p>　　（四）用人单位遵守国家关于劳动者工作时间和休息休假规定的情况；</p>
<p>　　（五）用人单位支付劳动合同约定的劳动报酬和执行最低工资标准的情况；</p>
<p>　　（六）用人单位参加各项社会保险和缴纳社会保险费的情况；</p>
<p>　　（七）法律、法规规定的其他劳动监察事项。</p>
<p>　　第七十五条　县级以上地方人民政府劳动行政部门实施监督检查时，有权查阅与劳动合同、集体合同有关的材料，有权对劳动场所进行实地检查，用人单位和劳动者都应当如实提供有关情况和材料。</p>
<p>　　劳动行政部门的工作人员进行监督检查，应当出示证件，依法行使职权，文明执法。</p>
<p>　　第七十六条　县级以上人民政府建设、卫生、安全生产监督管理等有关主管部门在各自职责范围内，对用人单位执行劳动合同制度的情况进行监督管理。</p>
<p>　　第七十七条　劳动者合法权益受到侵害的，有权要求有关部门依法处理，或者依法申请仲裁、提起诉讼。</p>
<p>　　第七十八条　工会依法维护劳动者的合法权益，对用人单位履行劳动合同、集体合同的情况进行监督。用人单位违反劳动法律、法规和劳动合同、集体合同的，工会有权提出意见或者要求纠正；劳动者申请仲裁、提起诉讼的，工会依法给予支持和帮助。</p>
<p>　　第七十九条　任何组织或者个人对违反本法的行为都有权举报，县级以上人民政府劳动行政部门应当及时核实、处理，并对举报有功人员给予奖励。 　　</p>
<p>　　第七章　法律责任 　　</p>
<p>　第八十条　用人单位直接涉及劳动者切身利益的规章制度违反法律、法规规定的，由劳动行政部门责令改正，给予警告；给劳动者造成损害的，应当承担赔偿责任。</p>
<p>　　第八十一条　用人单位提供的劳动合同文本未载明本法规定的劳动合同必备条款或者用人单位未将劳动合同文本交付劳动者的，由劳动行政部门责令改正；给劳动者造成损害的，应当承担赔偿责任。</p>
<p>　　第八十二条　用人单位自用工之日起超过一个月不满一年未与劳动者订立书面劳动合同的，应当向劳动者每月支付二倍的工资。</p>
<p>　　用人单位违反本法规定不与劳动者订立无固定期限劳动合同的，自应当订立无固定期限劳动合同之日起向劳动者每月支付二倍的工资。</p>
<p>　　第八十三条　用人单位违反本法规定与劳动者约定试用期的，由劳动行政部门责令改正；违法约定的试用期已经履行的，由用人单位以劳动者试用期满月工资为标准，按已经履行的超过法定试用期的期间向劳动者支付赔偿金。</p>
<p>　　第八十四条　用人单位违反本法规定，扣押劳动者居民身份证等证件的，由劳动行政部门责令限期退还劳动者本人，并依照有关法律规定给予处罚。</p>
<p>　　用人单位违反本法规定，以担保或者其他名义向劳动者收取财物的，由劳动行政部门责令限期退还劳动者本人，并以每人五百元以上二千元以下的标准处以罚款；给劳动者造成损害的，应当承担赔偿责任。</p>
<p>　　劳动者依法解除或者终止劳动合同，用人单位扣押劳动者档案或者其他物品的，依照前款规定处罚。</p>
<p>　　第八十五条　用人单位有下列情形之一的，由劳动行政部门责令限期支付劳动报酬、加班费或者经济补偿；劳动报酬低于当地最低工资标准的，应当支付其差额部分；逾期不支付的，责令用人单位按应付金额百分之五十以上百分之一百以下的标准向劳动者加付赔偿金：</p>
<p>　　（一）未按照劳动合同的约定或者国家规定及时足额支付劳动者劳动报酬的；</p>
<p>　　（二）低于当地最低工资标准支付劳动者工资的；</p>
<p>　　（三）安排加班不支付加班费的；</p>
<p>　　（四）解除或者终止劳动合同，未依照本法规定向劳动者支付经济补偿的。</p>
<p>　　第八十六条　劳动合同依照本法第二十六条规定被确认无效，给对方造成损害的，有过错的一方应当承担赔偿责任。</p>
<p>　　第八十七条　用人单位违反本法规定解除或者终止劳动合同的，应当依照本法第四十七条规定的经济补偿标准的二倍向劳动者支付赔偿金。</p>
<p>　　第八十八条　用人单位有下列情形之一的，依法给予行政处罚；构成犯罪的，依法追究刑事责任；给劳动者造成损害的，应当承担赔偿责任：</p>
<p>　　（一）以暴力、威胁或者非法限制人身自由的手段强迫劳动的；</p>
<p>　　（二）违章指挥或者强令冒险作业危及劳动者人身安全的；</p>
<p>　　（三）侮辱、体罚、殴打、非法搜查或者拘禁劳动者的；</p>
<p>　　（四）劳动条件恶劣、环境污染严重，给劳动者身心健康造成严重损害的。</p>
<p>　　第八十九条　用人单位违反本法规定未向劳动者出具解除或者终止劳动合同的书面证明，由劳动行政部门责令改正；给劳动者造成损害的，应当承担赔偿责任。</p>
<p>　　第九十条　劳动者违反本法规定解除劳动合同，或者违反劳动合同中约定的保密义务或者竞业限制，给用人单位造成损失的，应当承担赔偿责任。</p>
<p>　　第九十一条　用人单位招用与其他用人单位尚未解除或者终止劳动合同的劳动者，给其他用人单位造成损失的，应当承担连带赔偿责任。</p>
<p>　　第九十二条　劳务派遣单位违反本法规定的，由劳动行政部门和其他有关主管部门责令改正；情节严重的，以每人一千元以上五千元以下的标准处以罚款，并由工商行政管理部门吊销营业执照；给被派遣劳动者造成损害的，劳务派遣单位与用工单位承担连带赔偿责任。</p>
<p>　　第九十三条　对不具备合法经营资格的用人单位的违法犯罪行为，依法追究法律责任；劳动者已经付出劳动的，该单位或者其出资人应当依照本法有关规定向劳动者支付劳动报酬、经济补偿、赔偿金；给劳动者造成损害的，应当承担赔偿责任。</p>
<p>　　第九十四条　个人承包经营违反本法规定招用劳动者，给劳动者造成损害的，发包的组织与个人承包经营者承担连带赔偿责任。</p>
<p>　　第九十五条　劳动行政部门和其他有关主管部门及其工作人员玩忽职守、不履行法定职责，或者违法行使职权，给劳动者或者用人单位造成损害的，应当承担赔偿责任；对直接负责的主管人员和其他直接责任人员，依法给予行政处分；构成犯罪的，依法追究刑事责任。　　</p>
<p>　　第八章　附　则 　　</p>
<p>　　第九十六条　事业单位与实行聘用制的工作人员订立、履行、变更、解除或者终止劳动合同，法律、行政法规或者国务院另有规定的，依照其规定；未作规定的，依照本法有关规定执行。</p>
<p>　　第九十七条　本法施行前已依法订立且在本法施行之日存续的劳动合同，继续履行；本法第十四条第二款第三项规定连续订立固定期限劳动合同的次数，自本法施行后续订固定期限劳动合同时开始计算。</p>
<p>　　本法施行前已建立劳动关系，尚未订立书面劳动合同的，应当自本法施行之日起一个月内订立。</p>
<p>　　本法施行之日存续的劳动合同在本法施行后解除或者终止，依照本法第四十六条规定应当支付经济补偿的，经济补偿年限自本法施行之日起计算；本法施行前按照当时有关规定，用人单位应当向劳动者支付经济补偿的，按照当时有关规定执行。</p>
<p>　　第九十八条　本法自2008年1月1日起施行。</p>
<img src ="http://www.cnitblog.com/stomic/aggbug/38377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2008-01-02 13:12 <a href="http://www.cnitblog.com/stomic/archive/2008/01/02/38377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于现在的房价</title><link>http://www.cnitblog.com/stomic/archive/2007/09/24/33955.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Mon, 24 Sep 2007 05:45:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2007/09/24/33955.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/33955.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2007/09/24/33955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/33955.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/33955.html</trackback:ping><description><![CDATA[让我来告诉大家为什么房价这么高，肉价会涨得这么厉害本文以最浅显得道理阐述经济的原理，进而阐述经济的真相。不会有任何所谓的学术妓女们常用来欺骗人民的深奥的学术理论，还事实以清白，真相只有一个，让我们擦亮眼睛，洞观今天发生的一切。我不是经济学家，但我比经济学诚实，本文在以下九个方面阐述中国经济的真相。&nbsp;<br><br>　　1、什么是经济发展？&nbsp;<br><br>　　2、什么是对外贸易？&nbsp;<br><br>　　3、什么是通货膨胀？&nbsp;<br><br>　　4、房价能绑架中国经济吗？&nbsp;<br><br>　　5、房价和通货膨胀有关系吗？&nbsp;<br><br>　　6、房价高涨的原动力是什么？&nbsp;<br><br>　　7、房价一直涨下去，开发商会笑还是会哭？什么情况下会笑？什么情况下会哭？&nbsp;<br><br>　　8、坐在华尔街办公室的财团们是如何吸干中国山区一个农民的血汗的&nbsp;<br><br>　　9、在有关这场围绕房价和通货膨胀之间的各方博弈中可能选择的中庸路线&nbsp;<br><br>　　一、什么是经济发展？&nbsp;<br><br>　　简单的讲经济发展就是有钱，但钱从何来？钱只能印出来。那么到底是什么使印钞机不停的运转？&nbsp;<br><br>　　假设一个岛上有1000口人，与世隔绝，人与人之间交换物品过活，但有时候你手里用来交换的东西不一定就是对方想要的，怎么办？于是人们就用都喜欢的金银作为交换的东西，于是交换方便了。但金银要磨损，携带也不方便，当交换活动频繁时，发现这个东西太繁琐，限制了交换活动，于是为了解决这个问题，想了一个办法，就是由岛上的管理者发行一种符号，用它来代替金银，于是钞票出现了。&nbsp;<br><br>　　刚开始这种钞票可以随时兑换金银。大家都很放心，因为钞票就是金银。可是岛上金银的产量太小，当人们的交换活动更加频繁时，钞票不够用了，只能暂停交换。暂停交换的后果就是大家不生产别人想要的东西了，因为虽然别人用，但交换不出去，套用现在的话说就是经济发展减速了。&nbsp;<br><br>　　于是大家想了一个办法，成立一家钱庄，这个钱庄是大家的，由钱庄来发行钞票，印出的钞票借给想用钱的人，然后这个人有钱了再还给钱庄。于是银行就出现了。&nbsp;<br><br>　　银行的出现，能保证交换活动更持续的进行，大家都拼命的生产，岛上的东西越来越多，银行根据产品的生产数量，不停的印制钞票，以保证交换能更深入的进行。&nbsp;<br><br>　　后来人们的交换活动更频繁了，一家钱庄太少了，于是出现了很多钱庄，总要有个管钱庄的吧，于是指定一家钱庄管理其他钱庄，并且钞票只能由这家钱庄印刷，然后通过其他钱庄借给用钱的人，中央银行就这么也出现了。&nbsp;<br><br>　　二、什么是对外贸易？&nbsp;<br><br>　　有一天岛上的人发明了船，于是就到处划船跑，发现了另一个岛屿，那上面也有人，也有钞票，也像自己岛上这么活动。但自己岛上生产的东西多，那个岛上生产的东西少，1元钱在自己的岛上能买1斤大米，那个岛上的一元钱只能买半斤大米，于是另外岛上的钱来这个岛上买东西时只能2元换1元才行。于是汇率出现了。算好汇率后，他们开始互相买卖东西到对方岛上，这就是对外贸易。对外贸易丰富了人们的生活生产需要，使交换活动到了一个空前的高潮。&nbsp;<br><br>　　三、什么是通货膨胀？&nbsp;<br><br>　　由于岛上生产的产品太多了，以至于没法准确估计到底该发行多少钞票，发行多了的时候，因为没有那么多产品可买，产品就开始涨价，发行少了呢就开始降价，为了保证价格稳定，央行要求各钱庄要把一部分钱放在央行里面用来调节产品的价格，根据价格情况多放和少放。这就是存款准备金率。&nbsp;<br><br>　　可是有一部分聪明人开始怎么才能把钱弄到自己手上，他在海边捡了一颗石子，说这个石子值100万快钱，把它卖给了一个人，这个人觉得整个岛上的钱加一起也没有100万啊，怎么办，于是向钱庄借，钱庄也没有这么多钱，于是把印钞机打开，印了这100万，借给了他买了这个石子。&nbsp;<br><br>　　然后这个人开始卖这个石子，100万卖给了第二个人，由于第一个卖石子的人把钱花了，所以岛上的钱多了，所以这一百万可以筹集到，多买些产品就有了。但当把这个石子以200万转让的时候，钱庄只能又印了100万钞票，就这样钞票越印越多，可是当这个石子不停的流动转让时，大家并不觉得岛上的钱多，产品价格还是原来的那样。可是当这个石子不流通或流通的慢时，大家觉得钱多了，可是如果当持有石子的人把它扔到大海里，那就等于岛上凭空多出N多个100万来，怎么办，央行最害怕的就是这颗石子没了。它没了岛上产品的价格就会飞涨，就会通货膨胀。那么持有石子的人就绑架了岛上的经济。&nbsp;<br><br>　　四、房价能绑架中国经济吗？&nbsp;<br><br>　　中国的房地产已经使中国央行发行了太多的人民币，如果房价下降，等于把那颗石子投进了海里，那么多印出来的钱会使中国产品价格飞涨，会发生严重的通货膨胀。&nbsp;<br><br>　　看似房价与石子毫无相干，可是他们的属性是一样的，就是价格和价值严重的背离。实际上房地产的崩盘受害最大的并不是中国的商业银行，而是整个中国经济体系。为什么go-vern-ment迟迟没有把房价降下来，不是降不下来，如果真想降房价，只需要一道政令，房地产价格会在一夜之间土崩瓦解。可是后果谁能承担，严重通货膨胀谁来负责？&nbsp;<br><br>　　房地产业已经绑架了中国的经济，是无可置疑的，是客观实在的，没有人能改变。&nbsp;<br><br>　　不管谁是总理，廉洁也好，贪污也好，都希望社会和谐，可这是一个棘手的问题。&nbsp;<br><br>　　五、房价和通货膨胀有关系吗？&nbsp;<br><br>　　可更棘手的问题还不仅仅在这里。如果降房价，面对的是马上的通货膨胀，可不降房价，那么面对的就是更严重的通货膨胀，何去何从？&nbsp;<br><br>　　所以最可靠的办法就是稳定房价，然后在社会产品增加时，减少货币的投放量，加上其他政策如加息、增加商业银行准备金率、缩小信贷规模等辅助手段，来使中国经济软着陆，这是最好的办法，我们看到的一切政令也是这个逻辑。不信的话，可以查阅一下近年来go-vern-ment发布的一系列调控房地产业的措施。&nbsp;<br><br>　　可是为什么房价不稳定而且更加的疯长呢？难道是KFS与go-vern-ment在博弈吗？告诉你在中国没有人能和party叫板，几个肚子大点的KFS是没有这个实力的。实际上是幕后的另一只黑手在和中国go-vern-ment博弈，这支黑手就是外资，以美国为代表的帝国主义攫取中国人民血汗的黑手。&nbsp;<br><br>　　六、房价高涨的原动力是什么？&nbsp;<br><br>　　使房价上涨的动力很多，房价上涨对其有利的人就是动力之一，比如：为了GDP和个人利益的地方go-vern-ment、为了赚钱的KFS、炒房族、以至于买了房的所谓&#8220;房奴&#8221;都是是房价上涨的动力，可是最大的原动力不是这些，是外资，是美国的以攫取超额利润的各大财团。&nbsp;<br><br>　　KFS作为商人，为了赚取高额利润不是什么伤天害理的事情，可是各行各业都有商人，难道想赚就有吗？那除非是神话。房地产业的开发商也一样，不是他们想赚多少就有多少的。根据价值规律，当商品的价格和价值严重背离时，会有一种趋向正常价格回归的力量钳制价格的上涨，可是在中国的房地产业，这种规律似乎不起作用，一个重要的原因是忽视了一个参考范围的原因，如果以中国经济本身而言确实打破了这个规律，可是目前的情况是有一股力量在维持着房地产业的价格，即托市，那么谁在托市呢？&nbsp;<br><br>　　谁能在房地产业失控能得到巨额利润的人就是托市的人。&nbsp;<br><br>　　讨论这个问题前，现看一下中国的外汇储备情况。中国的外汇储备在近几年迅速由1、2千亿突破万亿，并且还在迅速的增长，难道是中国人民奋发图强，挣来的吗？这个不需要证明，看中国的GDP增幅就知道，外汇储备的增长速度明显大于GDP的增幅。显然不是挣来的，那么除了挣来的一部分，那么就是所谓的&#8220;国际热钱&#8221;的涌入，而国际热钱的涌入的目的只有一个，就是要取得高额的回报。&nbsp;<br><br>　　国际热钱进入中国市场后，首先要兑换成人民币，那么一下子哪有这么多人民币呢？只有一个办法就是让印钞机没日没夜的工作，然后这笔钱用来托住已是烫手山芋的房地产市场，就是拼命的投资房地产业，当房地产价格因背离价值而向下波动时，通过托市再把它抬高，反复如此，给人的表象就是房产价格决没有偏离价值。导致房价越涨越高。&nbsp;<br><br>　　而KFS呢，他们一到房子将要卖不出去的时候，就有人出高价买下来，他们怎么会降价，如果没有这部分资金在运作，别说是KFS联盟，就是全国只有一个KFS，价格也会降下来，没有人买了，难道等房子发霉吗？&nbsp;<br><br>　　那么外资持有这么多高价房产做什么？不怕砸到手里吗？&nbsp;<br><br>　　不怕！为什么呢？在这个资本运作的过程中，有一个冤大头在最底下接着呢，是谁呢？就是中国的商业银行，由于火爆的房地产市场，一流的流通性，近年来没有看到任何萎缩的迹象，放了贷款就盈利，为什么不贷款呢？没有理由不放贷款。&nbsp;<br><br>　　加之中国老百姓买房的心情，外资可以轻易的把高价房转嫁到中国的银行和消费者身上，连炒房的农民都能赚到一杯羹，职业的外资会赔钱吗？&nbsp;<br><br>　　那么房价一直涨下去，会怎样呢？请看下一节：&#8220;房价一直涨下去，开发商会笑还是会哭？什么情况下会笑？什么情况下会哭？&#8221;&nbsp;<br><br>　　七、房价一直涨下去，开发商会笑还是会哭？什么情况下会笑？什么情况下会哭？&nbsp;<br><br>　　在中国go-vern-ment近几年来密集的几十道金牌的调控下，房价还是如脱了缰的野马一样狂奔不止。暂且不论何时能停止上涨的势头，毕竟房价在目前还是上涨的，所以我们就看看房价上涨不止会带来什么。&nbsp;<br><br>　　首先：由于GDP上涨，中国go-vern-ment为了维持上文说的&#8220;保持产品交换的继续&#8221;要不断地投放人民币，即开动印钞机。只要房地产这个石子还没有投入到大海里去，还有一定的流通性，那么就不会有通货膨胀的发生。&nbsp;<br><br>　　其次：开发商会在这个过程中也赚取巨大的利润。&nbsp;<br><br>　　再次：能看到的是，炒房族会赚钱、所谓的买房的&#8220;房奴&#8221;会增值。&nbsp;<br><br>　　都赚钱！可是在这个过程中到底谁亏了呢？钱从哪里来呢？如果你是有炒股的经验就会知道，如果投资价格和价值背离的商品，你赚的钱就是别人赔的钱，那么套用到房地产上，就是买房自住的人，现在看似增值，那是镜中月、水中花，你不变现就不是你的。再有就是当价格完全回归真实价值的时候，有时甚至会到真实价值一下，被高价房套住的投资者。还有一个就是开发商！&nbsp;<br><br>　　为什么说开发商也有赔钱呢？大家知道商人的本性是赚钱，赚取利润。如果一个商人投机一次就永远都不做这个生意了，他是赚钱了，可他不是商人，这种商业行为没有意义。由于商人的本性，所以赚来的钱会继续扩大再生产，在能赚钱的领域不断的加大投资。这个道理从生活中就可看出来，越是做大生意的人总喊没钱，因为要更大的流动资金来维持其扩大再生产的需要。&nbsp;<br><br>　　所以一旦房价回归真实的价值之时，就是有一大批开发商崩溃之日。这个是不以任何人的意志和任何行为为转移的。如果现在有开发商逃离房地产业的角斗场，那么跑得慢的就是最后的输家。如果都不跑，就像击鼓传花一样，最后拿到接力棒的就是接盘者。有句话叫：&#8220;出来混迟早是要还的&#8221;。也许只不过是方式不一样，看谁的运气好而已。&nbsp;<br><br>　　可是现在却没有任何的KFS赔钱的迹象，有的是KFS不断的赚钱，老百姓送钱都来不及。只是因为目前房价还在上涨，房产还在不断的流动。&nbsp;<br><br>　　一个巨大的问题来了，这样不断上涨的房价何时是个头啊，请看下一节：&#8220;8、坐在华尔街办公室的财团们是如何吸干中国山区一个农民的血汗的&#8221;&nbsp;<br><br>　　八、坐在华尔街办公室的财团们是如何吸干中国山区一个农民的血汗的&nbsp;<br><br>　　Mao.ZD说过：&#8220;帝国主义没有睡大觉,而是天天在蠢蠢欲动,在图谋不轨,想达到他们的罪恶目的。诚然他们的气焰的确没有以前那么嚣张,但他们确实在活动着。&#8221;是不是冷战结束就代表着人类的和平得以实现呢？&#8220;一句上帝面前人人平等&#8221;就能掩盖帝国主义噬血的本质吗？人人平等的理念是对的，但它只不过是帝国主义用来欺骗人们的伎俩罢了，说到和做到永远是两码事。&nbsp;<br><br>　　国际财团通过国际热钱涌入中国，使人民币加大发行量，然后通过房地产炒作，把中国的国内价格水平无限制的提高，GDP的增长又一次使人民币的发行量被迫提高。国际财团心黑手狠，双管齐下，目的就是使中国经济热到烫手，热到让每个中国人为之疯狂。&nbsp;<br><br>　　我们暂不去关心这个过程，我们放眼未来，看看这一过程的结果是什么样呢？换句话说财团的目的是什么呢？&nbsp;<br><br>　　很明显，中国人最不愿意看到的事情，就是财团们最乐见的结果。先做个假设，比如国际热钱在投资的中国房地产领域里上演最后的疯狂后，然后把房产成功解套全部变现，如果此时人民币兑美元的汇率达到美国预期最高时，汇率是热钱逃离时需要相乘的那个倍数，会发生什么谁都能想到，所有热钱会一夜之间全部兑换美元逃离。财团们会赚得沟满壕平，中国市场上除了钱就是钱，能遮住天的大把人民币将成为中国人民的噩梦。&nbsp;<br><br>　　这是中国人最不愿意看到的事情，也是财团最乐见的结果。近期美国不断的通过政治、贸易等手段逼迫人民币升值，而中国go-vern-ment迟迟不升值或小范围的升值，远远没有达到美国go-vern-ment的预期，这是在出口处的中美之间的博弈。美国逼迫人民币升值的狼子野心昭然若揭！&nbsp;<br><br>　　顺便提一句，如果真的这个升值预期达到了，中国楼市将重演日本上世纪90年代崩盘的历史。只是那时中国经济也会像日本一样进入一个连续低迷不振的不归路。&nbsp;<br><br>　　在这种攸关民族生存的问题上，go-vern-ment会坐视不管吗？就算是退一步来讲，一个完全不负责任的go-vern-ment遇到这种情况，因为这个资本运作同时也极大侵犯了go-vern-ment的利益，也会拼命反搏的。&nbsp;<br><br>　　那么中国go-vern-ment会以什么样的方式来化解这一&#8220;经济危机&#8221;呢？请看下一节：&#8220;在有关这场围绕房价和通货膨胀之间的各方博弈中可能选择的中庸路线&#8221;。&nbsp;<br><br>　　九、在有关这场围绕房价和通货膨胀之间的各方博弈中可能选择的中庸路线&nbsp;<br><br>　　我一直相信：物极必反，中庸，是老祖宗留给后人解决棘手问题的杀手锏！&nbsp;<br><br>　　既然是中国房地产&#8220;绑架&#8221;了中国的经济，那么我们就从&#8220;绑架&#8221;说起。何为&#8220;绑架&#8221;，应该是相对弱的一方，拿着相对强的一方的&#8220;要害&#8221;，使相对强的一方即便有能力对付弱的一方，但碍于投鼠忌器，无力可施。&nbsp;<br><br>　　我们先来看看绑架双方的阵容和各自手上的筹码。房地产业的主体是KFS，所以KFS算一方，它绑架的要害是中国经济，那中国经济是谁的要害呢？是中国人民的要害，代表中国人民的，目前只能是中国go-vern-ment。中国go-vern-ment算一方。外资呢？它是煽风点火者，划到KFS一方。中国go-vern-ment一方有公权力，可以通过税收、财政、经济政策、行政手段对KFS阵营施力，KFS阵营通过源源不断的后备资金来绑架中国经济，且不断的提高赎金。&nbsp;<br><br>　　问题已经摆在这里，怎么办呢？冲上去一枪击毙，那歹徒非撕票不可，太极端不可行。所以有为go-vern-ment开出药方，只要实现了某某一条既可降低房价的主意，就犹如这一枪击毙一样是不可行的。我们想象如何解救绑架事件的，首先要稳定住对方的情绪，再一步步地靠近，但这种靠近虽会引起歹徒的敌意，但不会导致他撕票，然后再进一步稳定情绪，再靠近，然后条件成熟时，再稳准狠，即保证人质的安全，又要保证歹徒一举拿下。这才是真正的营救。&nbsp;<br><br>　　所以中庸才是解决棘手问题的杀手锏。极端、盲目、冒进是要不得的。&nbsp;<br><br>　　针对如何解决中国房地产市场的绑架问题，就要围绕问题的关键部分一步步地施加反作用力，然后一举成功，才是正道。&nbsp;<br><br>　　第一个关键的部分就是汇率，中国go-vern-ment会严把汇率关，我们可以预期的是，人民币兑灭元的汇率决不会过快升值，但会小幅升值，就是要稳定对方的情绪，如果一点不升，对方会狗急跳墙，如果升的过快，是给自己掘墓，所以为什么中国汇率升幅总是犹抱琵琶半遮面，看看美国go-vern-ment的态度跟一个绑匪是多么的贴切，我要一瓶果汁，为什么拿来半瓶水。可又说不出什么来，毕竟还能暂时解渴。&nbsp;<br><br>　　第二个关键是限制资产流动性，既然房地产能绑架中国经济，说明它举足轻重，限制房产的流通性，就可以限制资产的流动性，注意这里是两个概念，&#8220;资产流动性&#8221;和&#8220;房产流通性&#8221;。两者完全不同，但又息息相关。房产流通性减弱，资产流动性减弱，那么需要印刷的人民币就减少。就像那个石子，不流通马上通胀，不涨价流通没问题，可是行不通，外资也不同意。既然是不断的上涨价格，只能一步步地限制房产流通，只要房产流通性少一点，通胀就会显现一点，然后再通过上调准备金率和加息等柔性政策来调整一点，用柳叶棉丝掌来化解泰森的一记重拳，以绵柔克强刚、化千钧于无形，这就是中国go-vern-ment的策略（这好像是中国人最擅长的事情）。我们从官方媒体就能看到相关的消息，楼市签约率在下降，即流通性在下降，然后物价开始有所涨幅，如猪肉等副食产品，但央行马上上调准备金率和加息，来稳定物价。不知各位看官是否也看出些端倪。可预期的是，到完全化解危机之前，会不断地加息和调高准备金率，同时房产流通性会越来越弱，这个预言是否准确可在以后的央行政策上验证。等完全消除了由于经济过热导致的通货膨胀预期，那么就是房地产价格回归真实价值之时。&nbsp;<br><br>　　不管你看到没看到，这已是最后的疯狂，我们从两方面来分析：&nbsp;<br><br>　　第一，如果这场博弈以外资胜利而告终，那么中国经济将步日本90年代持续下滑的深渊，由于外资撤走，房市赖以生存的支柱坍塌，房价会一落千丈，可到时候不管是KFS还是老百姓都将承受经济下滑之苦，持有的货币迅速贬值，即便房价落下，也不一定买的起。这是中国go-vern-ment和中国人民不可接受的，也是无法接受的。&nbsp;<br><br>　　第二，如果外资以失败而告终，即在汇率上把住出口，让房价回归真实价值，把外资同样套在中国，这才是胜利的前提。那么以美国财团为首的帝国主义噬血者必将疯狂报复，会在投资、出口等各方面对中国施加压力。我们今天人民币升值没有达到美国预期，已经导致中国出口到美国的产品受打压，进而引起了众多的贸易摩擦，由此可见一斑。我们知道，经济发展的三套马车是，投资、出口和消费，在投资、出口领域遭到报复会影响中国经济的发展，但我相信不会影响我们的发展速度，别忘了还有一套马车是&#8220;消费&#8221;，房价下降后，如果你是爱国者，请现在保护好你的钱包，到时千万别羞羞答答，要果断地出手买房，中国经济会在消费领域异军突起，继续独占世界经济引擎的鳌头。<br><br>解说：文章没有高深的经济学术语，浅显易懂。但是因为篇幅太长，可能有部分读者阅读过程中无法前后衔接，为了让所有的中国人都看懂这篇贴子，下面本人对该文主要内容和中心思想作一简要阐述：&nbsp;<br><br>　　文中写了三个主角：中国政府、中国房地产开发商、美帝国主义的外资&nbsp;<br><br>　　中国因为在经济发展过程中，因为开放政策，大量的美帝国主义的外资涌入。外资涌入来干什么呢？美帝国主义当然不是为了支持中国经济的发展，而是为了吸干中国老百姓的血汗。外资的进入，象歹徒一样绑架了中国的房市！&nbsp;<br><br>　　外资在进入中国的时候，因为美元是不能在中国直接流通的，所以要先按照人民币与美元的汇率把美元换成人民币进入中国市场流通，但是中国以前人民币的发行量不够兑换这些美元，于是就加大印刷，增大人民币发行量。外资在进入中国后，利用中国人民全民急于购房的心理，选择了房地产业作为依托，大肆炒作房地产，使房地产价格严重背离价值规律，只要中国的开发商修起来的房子一不好卖了，外资就立即介入，把这些房子买掉，以此托起中国的房子价格不下滑，对于开发商来说，房子只要卖得掉，就会不断的修房子出来。就象大家在电视里看到的大户炒股票一样，一有人抛出，就立即吃掉，稳定该支股票的价格。&nbsp;<br><br>　　大家可能会问，外资持有这么多高价房产做什么？不怕砸到手里吗？不怕！为什么呢？在这个资本运作的过程中，有一个冤大头在最底下接着呢，是谁呢？就是中国的商业银行，由于火爆的房地产市场，一流的流通性，近年来没有看到任何萎缩的迹象，放了贷款就盈利，为什么不放贷款呢？没有理由不放贷款。加之中国老百姓买房的心情，外资可以轻易的把高价房转嫁到中国的银行和消费者身上，连炒房的农民都能赚到一杯羹，职业的外资会赔钱吗？&nbsp;<br><br>　　大家又会问，外资怎么赚中国人民的钱呢？中国的政府在干什么呢？为什么不限制中国人房子价格？外资的介入，使中国的房地产价格居高不下，急于买房的中国人民，更害怕今后的房子价格上涨，所以不惜一切代价购置房产，而在外资想要撤出的时候，就会高价格把这些房子卖出，赚到中国人民的钱。这个时候，政府不能硬性把房价压下来，因为外资的进入，人民币的大量发行，稍有一点经济常识的人都知道，如果政府一道政令把房地产价格压下来，外资就会撤出，这样很不利于中国经济的发展，而且大量的人民币留在中国流通领域，必然导致人民币迅速贬值，物价飞涨，那个时候，通货澎涨将成为中国人民的恶梦。&nbsp;<br><br>　　外资的如意算盘是，等在中国赚够了中国人民的钱，然后把人民币换成美元，逃回美国去。这里提醒大家注意一个问题，即人民币对美元汇率。这是中国政府和美国政府的一场无硝烟的战争。美国逼中国人民币升值，而中国政府揭力控制。为什么呢？大家想想，人民币兑换美元8.2：1的时候，1万人民币可以换1219.5美元。如果人民币升值到7.6:1，那么1万元人民币可以换1315.8美元。也就是说，假如外资在中国赚了1万人民币，在人民币升值的情况下，美帝国主义就可以多换得96.3美元拿回美国。这样中国的外汇储备就会大量损失。&nbsp;<br><br>　　面对美帝国主义的阴谋，看我们的政府采用什么方法对付——首先，最重要的是保持人民币的汇率不升值或小幅升值，这个大家已经看到了；其次是加息，让人民币尽可能存进银行，减少市面上流通的人民币；第三、当更多的社会产品生产出来时，减少人民币的投入量，让社会产品与人民币发行量相符合，实现中国经济&#8220;软着陆&#8221;，这样，保护了中国的经济，而且也把外资套在国内。这就有点象中国太极拳的&#8220;以柔克刚&#8221;。&nbsp;<br><br>　　所以，终有一天，中国的房子价格会回到价值规律线上来，同时提醒大家：帝国主义没有睡大觉,而是天天在蠢蠢欲动,在图谋不轨,想达到他们的罪恶目的。 
<img src ="http://www.cnitblog.com/stomic/aggbug/33955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2007-09-24 13:45 <a href="http://www.cnitblog.com/stomic/archive/2007/09/24/33955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不要一辈子靠技术生存</title><link>http://www.cnitblog.com/stomic/archive/2007/08/15/31876.html</link><dc:creator>大话人生</dc:creator><author>大话人生</author><pubDate>Wed, 15 Aug 2007 07:20:00 GMT</pubDate><guid>http://www.cnitblog.com/stomic/archive/2007/08/15/31876.html</guid><wfw:comment>http://www.cnitblog.com/stomic/comments/31876.html</wfw:comment><comments>http://www.cnitblog.com/stomic/archive/2007/08/15/31876.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/stomic/comments/commentRss/31876.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/stomic/services/trackbacks/31876.html</trackback:ping><description><![CDATA[我现在是自己做，但我此前有多年在从事软件开发工作，当回过头来想一想自己，觉得特别想对那些初学<font style="LINE-HEIGHT: 1.3em" face=Times>JAVA/DOT</font><wbr>。<font style="LINE-HEIGHT: 1.3em" face=Times>NET</font><wbr>技术的朋友说点心里话，希望你们能从我们的体会中，多少受点启发<font style="LINE-HEIGHT: 1.3em" face=Times>(</font><wbr>也许我说的不好，你不赞同但看在我真心的份上别扔砖头啊<font style="LINE-HEIGHT: 1.3em" face=Times>).</font><wbr><wbr><br><br><font style="LINE-HEIGHT: 1.3em" size=3>一。在中国你千万不要因为学习技术就可以换来稳定的生活和高的薪水待遇，你千万更不要认为哪些从事市场开发，跑腿的人，没有前途。不知道你是不是知道，咱们中国有相当大的一部分软件公司，他们的软件开发团队都小的可怜，甚至只有<font style="LINE-HEIGHT: 1.3em" face=Times>1-3</font><wbr>个人，连一个项目小组都算不上，而这样的团队却要承担一个软件公司所有的软件开发任务，在软件上线和开发的关键阶段需要团队的成员没日没夜的加班，还需要为测试出的<font style="LINE-HEIGHT: 1.3em" face=Times>BUG</font><wbr>和不能按时提交的软件模块功能而心怀忐忑，有的时候如果你不幸加入现场开发的团队你则需要背井离乡告别你的女友，进行封闭开发，你平时除了编码之外就是吃饭和睡觉（有钱的公司甚至请个保姆为你做饭，以让你节省出更多的时间来投入到工作中，让你一直在那种累了就休息，不累就立即工作的状态）更可怕的是，会让你接触的人际关系非常单一，除了有限的技术人员之外你几乎见不到做其他行业工作和职位的人，你的朋友圈子小且单一，甚至破坏你原有的爱情（想象一下，你在外地做现场开发<font style="LINE-HEIGHT: 1.3em" face=Times>2</font><wbr>个月以上，却从没跟女友见过一面的话，你的女友是不是会对你呲牙裂嘴）<font style="LINE-HEIGHT: 1.3em" face=Times>.</font><wbr>也许你拿到了所谓的白领的工资，但你却从此失去享受生活的自由，如果你想做技术人员尤其是开发人员，我想你很快就会理解，你多么想在一个地方长期待一段时间，认识一些朋友，多一些生活时间的愿望<font style="LINE-HEIGHT: 1.3em" face=Times>.</font><wbr>比之于我们的生活和人际关系及工作，那些从事售前和市场开发的朋友，却有比我们多的多的工作之外的时间，甚至他们工作的时间有的时候是和生活的时间是可以兼顾的，他们可以通过市场开发，认识各个行业的人士，可以认识各种各样的朋友，他们比我们坦率说更有发财和发展的机会，只要他们跟我们一样勤奋。（有一种勤奋的普通人，如果给他换个地方，他马上会成为一个勤奋且出众的人。）</font><wbr><br><br><font style="LINE-HEIGHT: 1.3em" size=3>二。在学习技术的时候千万不要认为如果做到技术最强，就可以成为<font style="LINE-HEIGHT: 1.3em" face=Times>100%</font><wbr>受尊重的人。有一次一个人在面试项目经理的时候说了这么一段话：我只用最听话的人，按照我的要求做只要是听话就要，如果不听话不管他技术再好也不要。随后这个人得到了试用机会，如果没意外的话，他一定会是下一个项目经理的继任者。朋友们你知道吗？不管你技术有多强，你也不可能自由的腾出时间象别人那样研究一下<font style="LINE-HEIGHT: 1.3em" face=Times>LINUX</font><wbr>源码，甚至写一个<font style="LINE-HEIGHT: 1.3em" face=Times>LINUX</font><wbr>样的杰作来表现你的才能。你需要做的就是按照要求写代码，写代码的含义就是都规定好，你按照规定写，你很快就会发现你昨天写的代码，跟今天写的代码有很多类似，等你写过一段时间的代码，你将领略：复制，拷贝，粘贴那样的技术对你来说是何等重要。（如果你没有做过<font style="LINE-HEIGHT: 1.3em" face=Times>1</font><wbr>年以上的真正意义上的开发不要反驳我）。如果你幸运的能够听到市场人员的谈话，或是领导们的谈话，你会隐约觉得他们都在把技术人员当作编码的机器来看，你的价值并没有你想象的那么重要。而在你所在的团队内部，你可能正在为一个技术问题的讨论再跟同事搞内耗，因为他不服你，你也不服他，你们都认为自己的对，其实你们两个都对，而争论的目的就是为了在关键场合证明一下自己比对方技术好，比对方强。（在一个项目开发中，没有人愿意长期听别人的，总想换个位置领导别人。）</font><wbr><br><br><font style="LINE-HEIGHT: 1.3em" size=3>三。你更不要认为，如果我技术够好，我就自己创业，自己有创业的资本，因为自己是搞技术的<font style="LINE-HEIGHT: 1.3em" face=Times>.</font><wbr>如果你那样认为，真的是大错特错了，你可以做个调查在非技术人群中，没有几个人知道<font style="LINE-HEIGHT: 1.3em" face=Times>C#</font><wbr>与<font style="LINE-HEIGHT: 1.3em" face=Times>JAVA</font><wbr>的，更谈不上来欣赏你的技术是好还是不好。一句话，技术仅仅是一个工具，善于运用这个工具为别人干活的人，却往往不太擅长用这个工具来为自己创业，因为这是两个概念，训练的技能也是完全不同的。创业最开始的时候，你的人际关系，你处理人际关系的能力，你对社会潜规则的认识，还有你明白不明白别人的心，你会不会说让人喜欢的话，还有你对自己所提供的服务的策划和推销等等，也许有一万，一百万个值得我们重视的问题，但你会发现技术却很少有可能包含在这一万或一百万之内，如果你创业到了一个快成功的阶段，你会这样告诉自己：我干吗要亲自做技术，我聘一个人不就行了，这时候你才真正会理解技术的作用，和你以前做技术人员的作用。基于上面的讨论，我奉劝那些学习技术的朋友，千万不要拿科举考试样的心态去学习技术<font style="LINE-HEIGHT: 1.3em" face=Times>,</font><wbr>对技术的学习几近的痴迷，想掌握所有所有的技术，以让自己成为技术领域的权威和专家，以在必要的时候或是心里不畅快的时候到网上对着菜鸟说自己是前辈。技术仅仅是一个工具，是你在人生一个阶段生存的工具，你可以一辈子喜欢他，但最好不要一辈子靠它生存。掌握技术的唯一目的就是拿它找工作（如果你不想把技术当作你第二生命的话），就是干活。所以你在学习的时候千万不要去做那些所谓的技术习题或是研究那些帽泡算法，最大数算法了，什么叫干活？就是做一个东西让别人用，别人用了，可以提高他们的工作效率，想象吧，你做<font style="LINE-HEIGHT: 1.3em" face=Times>1</font><wbr>万道技术习题有什么用？只会让人觉得酸腐，还是在学习的时候，多培养些自己务实的态度吧，比如研究一下当地市场目前有哪些软件公司用人，自己离他们的要求到底有多远，自己具体应该怎么做才可以达到他们的要求。等你分析完这些，你就会发现，找工作成功，技术的贡献率其实并没有你原来想象的那么高<font style="LINE-HEIGHT: 1.3em" face=Times>.</font><wbr>不管你是学习技术为了找工作还是创业，你都要对技术本身有个清醒的认识，在中国不会出现<font style="LINE-HEIGHT: 1.3em" face=Times>BILL&amp;nbsp;GATES</font><wbr>，因为，中国目前还不是十分的尊重技术人才，还仅仅的停留在把软件技术人才当作人才机器来用的尴尬境地。（如果你不理解，一种可能是你目前仅仅从事过技术工作，你的朋友圈子里技术类的朋友占了大多数，一种可能是你还没有工作，但喜欢读比尔。盖茨的传记）。</font><wbr> 
<img src ="http://www.cnitblog.com/stomic/aggbug/31876.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/stomic/" target="_blank">大话人生</a> 2007-08-15 15:20 <a href="http://www.cnitblog.com/stomic/archive/2007/08/15/31876.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>