﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-忆风</title><link>http://www.blogjava.net/yifeng/</link><description>光是知道是不够的，必须要加以应用；光是希望是不够的，非去做不可。</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 16:21:01 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 16:21:01 GMT</pubDate><ttl>60</ttl><item><title>Facebook公布Apollo，一种新的用于在线低延迟存储的NoSQL数据库</title><link>http://www.blogjava.net/yifeng/archive/2014/08/16/417020.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Sat, 16 Aug 2014 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2014/08/16/417020.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/417020.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2014/08/16/417020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/417020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/417020.html</trackback:ping><description><![CDATA[<p align="left" style="line-height: 15.75pt; background: white;"><span style="font-family: 宋体;">来自</span><span style="font-family: Arial, sans-serif;">Facebook</span><span style="font-family: 宋体;">核心数据组的</span><span style="font-family: Arial, sans-serif;">Jeff Johnson</span><span style="font-family: 宋体;">周三在</span><span style="font-family: Arial, sans-serif;">QCon</span><span style="font-family: 宋体;">纽约的演讲中公布了</span><span style="font-family: Arial, sans-serif;">Apollo</span><span style="font-family: 宋体;">，它是</span><span style="font-family: Arial, sans-serif;">Facebook</span><span style="font-family: 宋体;">的一种类似于</span><span style="font-family: Arial, sans-serif;"><a href="http://the-paper-trail.org/blog/consensus-protocols-paxos/"><span style="color:#286AB2;text-decoration:none;text-underline: none">Paxos</span></a></span><span style="font-family: 宋体;">的</span><span style="font-family: Arial, sans-serif;">NoSQL</span><span style="font-family: 宋体;">数据库。</span><span style="font-family: Arial, sans-serif;">Apollo</span><span style="font-family: 宋体;">构建于</span><span style="font-family: Arial, sans-serif;">Apache</span>&nbsp;<span style="font-family: Arial, sans-serif;"><a href="https://thrift.apache.org/"><span style=" color:#286AB2;text-decoration:none;text-underline:none">Thrift 2</span></a></span>&nbsp;<span style="font-family: Arial, sans-serif;">RPC</span><span style="font-family: 宋体;">框架，采用</span><span style="font-family: Arial, sans-serif;">C++11</span><span style="font-family: 宋体;">开发，是一种分层存储系统，所有数据被划分到</span><span style="font-family: Arial, sans-serif;">Shard</span><span style="font-family: 宋体;">，非常类似于</span><span style="font-family: Arial, sans-serif;"><a href="https://hbase.apache.org/"><span style=" color:#286AB2;text-decoration:none;text-underline:none">HBase</span></a></span><span style="font-family: 宋体;">中的区域服务器。</span><span style="font-family: Arial, sans-serif;">Johnson</span><span style="font-family: 宋体;">表示它最大的好处是在线低延迟存储，特别是在</span><span style="font-family: Arial, sans-serif;">Flash</span><span style="font-family: 宋体;">和内存中。</span></p>  <p align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span style="font-family: 宋体;">区别于面向文档和键值的存储，</span><span style="font-family: Arial, sans-serif;">Apollo</span><span style="font-family: 宋体;">是一种修改的数据结构，允许你存储</span><span style="font-family: Arial, sans-serif;">Map</span><span style="font-family: 宋体;">、队列、树以及键值等等。系统中每个单独的数据块都非常小，从</span><span style="font-family: Arial, sans-serif;">1</span><span style="font-family: 宋体;">字节到</span><span style="font-family: Arial, sans-serif;">1MB</span><span style="font-family: 宋体;">，而所有的总大小则从</span><span style="font-family: Arial, sans-serif;">1MB</span><span style="font-family: 宋体;">到</span><span style="font-family: Arial, sans-serif;">10+PB</span><span style="font-family: 宋体;">。它支持的服务器从最少三台到数千台之多。</span></p>  <p align="left" style="line-height: 15.75pt; background: white;"><span style="font-family: 宋体;">每个</span><span style="font-family: Arial, sans-serif;">Shard</span><span style="font-family: 宋体;">有四个组件。第一个是</span><span style="font-family: Arial, sans-serif;">Quorum</span><span style="font-family: 宋体;">一致性协议，它基于来自斯坦福的强</span><span style="font-family: Arial, sans-serif;">Leader</span><span style="font-family: 宋体;">一致性协议</span><span style="font-family: Arial, sans-serif;"><a href="https://ramcloud.stanford.edu/wiki/download/attachments/11370504/raft.pdf"><span style="color:#286AB2;text-decoration:none;text-underline: none">Raft</span></a></span><span style="font-family: 宋体;">。</span><span style="font-family: Arial, sans-serif;">Johnson</span><span style="font-family: 宋体;">说他的团队非常喜欢</span><span style="font-family: Arial, sans-serif;">Raft</span><span style="font-family: 宋体;">的一个原因是</span><span style="font-family: Arial, sans-serif;">Leader</span><span style="font-family: 宋体;">的故障恢复非常好定义，因为就是</span><span style="font-family: Arial, sans-serif;">Quorum</span><span style="font-family: 宋体;">视图的变化。话虽如此，他说这真的不比</span><span style="font-family: Arial, sans-serif;">Multi-paxos</span><span style="font-family: 宋体;">简单：</span></p>  <p align="left" style="margin-bottom: 11.25pt; background: #f4f4f4;"><span style="font-family: 宋体;">我们不得不做大量的工作，从让你异步读写磁盘到处理</span><span style="font-family: Arial, sans-serif;">Follower</span><span style="font-family: 宋体;">忙于后台事务等场景，因为服务器上有其它东西或者磁盘非常慢，错误检查等等。</span></p>  <p align="left" style="line-height: 15.75pt; background: white;"><span style="font-family: 宋体;">第二个组件是存储。目前主存储基于</span><span style="font-family: Arial, sans-serif;"><a href="http://rocksdb.org/"><span style="color:#286AB2; text-decoration:none;text-underline:none">RocksDB</span></a></span><span style="font-family: 宋体;">，是一种构建于</span><span style="font-family: Arial, sans-serif;">Google</span>&nbsp;<span style="font-family: Arial, sans-serif;"><a href="https://code.google.com/p/leveldb/"><span style=" color:#286AB2;text-decoration:none;text-underline:none">LevelDB</span></a></span><span style="font-family: 宋体;">的</span><span style="font-family: Arial, sans-serif;">Key/Value</span><span style="font-family: 宋体;">存储结构。虽然它是</span><span style="font-family: Arial, sans-serif;">Key/Value</span><span style="font-family: 宋体;">存储，</span><span style="font-family: Arial, sans-serif;">Facebook</span><span style="font-family: 宋体;">使用它来模拟其它数据结构。</span><span style="font-family: Arial, sans-serif;">Apollo</span><span style="font-family: 宋体;">被设计为可以存储未知的结构，团队也正在增加对</span><span style="font-family: Arial, sans-serif;">MySQL</span><span style="font-family: 宋体;">的支持以作为一种替代存储引擎。</span></p>  <p align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span style="font-family: 宋体;">第三个组件是客户端</span><span style="font-family: Arial, sans-serif;">API</span><span style="font-family: 宋体;">，它拥有</span><span style="font-family: Arial, sans-serif;">read()</span><span style="font-family: 宋体;">和</span><span style="font-family: Arial, sans-serif;">write()</span><span style="font-family: 宋体;">方法。</span><span style="font-family: Arial, sans-serif;">Apollo</span><span style="font-family: 宋体;">在</span><span style="font-family: Arial, sans-serif;">Shard</span><span style="font-family: 宋体;">层执行的所有操作都是原子操作，因此你可以描述前置条件，如果满足，它返回</span><span style="font-family: Arial, sans-serif;">reads</span><span style="font-family: 宋体;">或</span><span style="font-family: Arial, sans-serif;">writes</span><span style="font-family: 宋体;">。代码示例如下：</span></p>  <div style="border:solid #E8E8E8 1.0pt;padding:8.0pt 8.0pt 8.0pt 4.0pt;background:#F4F4F4">  <p align="left" style="margin: 7.5pt 0cm; line-height: 13.5pt; border: none; padding: 0cm; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-size: 8.5pt;font-family:&quot;Courier New&quot;;color:#314E64;">read(conditions : {map(m1).contains(x)}, </span></p>  <p align="left" style="margin: 7.5pt 0cm; line-height: 13.5pt; border: none; padding: 0cm; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-size: 8.5pt;font-family:&quot;Courier New&quot;;color:#314E64;">&nbsp;&nbsp;&nbsp;&nbsp; reads : {deque(d2).back()})</span></p>  </div>  <p align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span style="font-family: 宋体;">上面的代码表示</span><span style="font-family: Arial, sans-serif;">&#8220;</span><span style="font-family: 宋体;">如果</span><span style="font-family: Arial, sans-serif;">Map m1</span><span style="font-family: 宋体;">包含</span><span style="font-family: Arial, sans-serif;">x</span><span style="font-family: 宋体;">，就返回双端队列（</span><span style="font-family: Arial, sans-serif;">Deque</span><span style="font-family: 宋体;">）</span><span style="font-family: Arial, sans-serif;">d2</span><span style="font-family: 宋体;">的</span><span style="font-family: Arial, sans-serif;">back</span><span style="font-family: 宋体;">上的值。</span><span style="font-family: Arial, sans-serif;">&#8221;</span></p>  <p align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span style="font-family: 宋体;">你能将任意多个条件和任意数量的</span><span style="font-family: Arial, sans-serif;">Read</span><span style="font-family: 宋体;">结合在一起。</span></p>  <p align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span style="font-family: Arial, sans-serif;">Write</span><span style="font-family: 宋体;">也非常类似，同样允许你描述条件：</span></p>  <div style="border:solid #E8E8E8 1.0pt;padding:8.0pt 8.0pt 8.0pt 4.0pt;background:#F4F4F4">  <p align="left" style="margin: 7.5pt 0cm; line-height: 13.5pt; border: none; padding: 0cm; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-size: 8.5pt;font-family:&quot;Courier New&quot;;color:#314E64;">write(conditions : {ver(k1) == v}, reads : {}, </span></p>  <p align="left" style="margin: 7.5pt 0cm; line-height: 13.5pt; border: none; padding: 0cm; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-size: 8.5pt;font-family:&quot;Courier New&quot;;color:#314E64;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; writes : {val(k1) := x})</span></p>  </div>  <p align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span style="font-family: 宋体;">最后一个组件是容错状态机（</span><span style="font-family: Arial, sans-serif;">Fault Tolerant State Machine</span><span style="font-family: 宋体;">，</span><span style="font-family: Arial, sans-serif;">FTSM</span><span style="font-family: 宋体;">）。它们主要由系统代码使用，但也可以被用户代码使用。每个</span><span style="font-family: Arial, sans-serif;">FTSM</span><span style="font-family: 宋体;">都属于</span><span style="font-family: Arial, sans-serif;">Shard</span><span style="font-family: 宋体;">，例如，在一个有三台机器的</span><span style="font-family: Arial, sans-serif;">Shard</span><span style="font-family: 宋体;">中，它们全部同时执行相同的代码。它们能存取每台机器的持久化存储。最重要的是，如果一个节点故障，代码将按所有节点都同意的正确顺序继续执行。</span></p>  <p align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span style="font-family: 宋体;">状态机还被用于负载均衡、数据迁移、</span><span style="font-family: Arial, sans-serif;">Shard</span><span style="font-family: 宋体;">创建和销毁，以及协调跨</span><span style="font-family: Arial, sans-serif;">Shard</span><span style="font-family: 宋体;">事务。状态机也存在外部副作用，例如它们能发送</span><span style="font-family: Arial, sans-serif;">RPC</span><span style="font-family: 宋体;">请求到远程机器，但不论何时它们要变更持久化状态，都必须提交给</span><span style="font-family: Arial, sans-serif;">Raft</span><span style="font-family: 宋体;">以取得所有服务器的同意。</span></p>  <p align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span style="font-family: Arial, sans-serif;">Facebook</span><span style="font-family: 宋体;">目前将</span><span style="font-family: Arial, sans-serif;">Apollo</span><span style="font-family: 宋体;">用于替换</span><span style="font-family: Arial, sans-serif;">Memcached</span><span style="font-family: 宋体;">的一些应用场景，同时</span><span style="font-family: Arial, sans-serif;">Johnson</span><span style="font-family: 宋体;">也明确表示</span><span style="font-family: Arial, sans-serif;">Facebook</span><span style="font-family: 宋体;">大规模地使用了</span><span style="font-family: Arial, sans-serif;">Memcached</span><span style="font-family: 宋体;">。该公司同时正在尝试使用它作为一种可靠的队列系统，用于发送</span><span style="font-family: Arial, sans-serif;">Facebook</span><span style="font-family: 宋体;">消息到</span><span style="font-family: Arial, sans-serif;">iOS</span><span style="font-family: 宋体;">、</span><span style="font-family: Arial, sans-serif;">Android</span><span style="font-family: 宋体;">和运营商</span><span style="font-family: Arial, sans-serif;">SMS</span><span style="font-family: 宋体;">。它也可能用于更快速的分析。</span></p>  <p align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span style="font-family: Arial, sans-serif;">Apollo</span><span style="font-family: 宋体;">仍处于开发阶段，还没有开源，但</span><span style="font-family: Arial, sans-serif;">Johnson</span><span style="font-family: 宋体;">说那是</span><span style="font-family: Arial, sans-serif;">Facebook</span><span style="font-family: 宋体;">寻求并乐意去做的方式。</span><span style="font-family: Arial, sans-serif;">Johnson</span><span style="font-family: 宋体;">的演示稿已经提供给</span><span style="font-family: Arial, sans-serif;">QCon</span><span style="font-family: 宋体;">纽约的参会者，在适当的时候会发布给所有人。</span></p>  <p align="left" style="line-height: 15.75pt; background: white;"><strong><span style="font-family: 宋体; border: 1pt none windowtext; padding: 0cm;">查看英文原文：</span></strong><span style="font-family: Arial, sans-serif;"><a href="http://www.infoq.com/news/2014/06/facebook-apollo"><span style="color:#286AB2;text-decoration:none;text-underline: none">Facebook Announces Apollo, a New NoSQL Database for On-line Low Latency Storage</span></a></span></p>  <p>&nbsp;</p><img src ="http://www.blogjava.net/yifeng/aggbug/417020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2014-08-16 09:50 <a href="http://www.blogjava.net/yifeng/archive/2014/08/16/417020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于内存的分布式关系数据库：MemSQL 3.1 发布</title><link>http://www.blogjava.net/yifeng/archive/2014/08/16/417016.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Fri, 15 Aug 2014 19:04:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2014/08/16/417016.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/417016.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2014/08/16/417016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/417016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/417016.html</trackback:ping><description><![CDATA[<p class="MsoNormal" align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><span lang="EN-US" style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">MemSQL</span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">是由<span lang="EN-US">Eric Frenkiel</span>（前<span lang="EN-US">Facebook</span>员工）和<span lang="EN-US">Nikita Shamgunov</span>（前微软<span lang="EN-US">SQL Server</span>高级工程师）创建的一款基于内存的分布式关系数据库，它通过将数据存储在内存中，并将<span lang="EN-US">SQL</span>语句预编译为<span lang="EN-US">C++</span>而获得极速的执行效率。它兼容<span lang="EN-US">MySQL</span>，且速度要比<span lang="EN-US">MySQL</span>快<span lang="EN-US">30</span>倍，能实现每秒<span lang="EN-US">150</span>万次事务。近日，<span lang="EN-US">MemSQL 3.1</span>发布，该版本 提供了多种升级和安装<span lang="EN-US">3.1</span>版本的方法，改进了事务和安全访问控制的支持，值得关注的改进包括：<span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal" align="left" style="margin-bottom: 11.25pt; line-height: 15.75pt; background: white;"><br /></p><p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">视图支持表级别的安全访问控制，支持在线修改视图</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">使用REPLICATE DATABASE命令可以实现自动、跨数据中心的数据复制。</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">INSERT</span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">和LOAD DATA支持分布式事务</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">支持ALTER TABLE、DROP INDEX、ALTER TABLE、MODIFY COLUMN等操作</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">新增使用IN支持不相关子查询</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">新增SQL_BIG_RESULT关键词支持分组查询</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">通过多个途径提高了LOAD DATA的性能</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">使用SNAPSHOT命令手动触发全库的快照</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">INSERT</span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">和SELECT支持分布式环境下的操作</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">新增ATTACH LEAF ALL命令</span></p>  <p align="left" style="line-height: 15.75pt; background: white;"><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">MemSQL</span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">宣称是世界上最快的分布式关系型数据库，从<a href="http://www.memsql.com/"><span style="color:#286AB2;text-decoration:none; text-underline:none">MemSQL</span><span style="color:#286AB2; text-decoration:none;text-underline:none">官网</span></a>上了解到，它具有以下几大特色：</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">无可比拟的效率：MemSQL执行效率比传统的基于磁盘的数据库要快30倍，它优于其他内存数据库，因为它将SQL语句预编译为C++。</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">强大的SQL执行能力：支持全功能的关系型数据库，开发者不必修改现有程序即可获得NoSQL键/值存储系统的效率。</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">支持横向和纵向扩展：MemSQL支持纵向扩展，CPU越好效率就越高；而且支持向多CPU扩展；此外，MemSQL还可与MySQL节点结合起来处理PB级的负载。</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">默认支持数据持久化：MemSQL缺省支持数据从内存到磁盘/SSD的同步，保证数据的安全可靠。</span></p>  <p align="left" style="margin-left: 18.75pt; text-indent: -18pt; line-height: 15.75pt; background: white;"><span style="font-size: 10pt; font-family: Symbol;">&#183;<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">安装极其简易：只需30秒即可完成安装并能够使用MemSQL，兼容MySQL，学习曲线平滑。</span></p>  <p align="left" style="line-height: 15.75pt; background: white;"><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">说起MemSQL，不得不说下NewSQL。NewSQL一词是由451 Group的分析师Matthew Aslett在研究论文中提出的。NewSQL是一类兼顾了NoSQL和SQL优点的新型数据库系统，其目的是把关系模型的优势发挥到分布式体系结构中，或者提高关系数据库的性能到一个不必进行横向扩展的程度。这类数据库不仅具有<span style="color:#286AB2;text-decoration:none;text-underline:none"><a href="http://baike.baidu.com/view/2677528.htm">NoSQL</a></span></span><span style="font-size: 12pt; font-family: 微软雅黑, sans-serif;">对海量数据的存储管理能力，还保持了传统<a href="http://baike.baidu.com/view/1088.htm"><span style="color:#286AB2;text-decoration:none;text-underline:none">数据库</span></a></span>支持<a href="http://baike.baidu.com/view/600227.htm"><span style="color:#286AB2; text-decoration:none;text-underline:none">ACID</span></a>和<a href="http://baike.baidu.com/view/34.htm"><span style="color: #286AB2;text-decoration:none;text-underline:none">SQL</span></a>等特性。它们有两个显着的共同特点，一是它们都支持<a href="http://baike.baidu.com/view/3309779.htm"><span style="color:#286AB2;text-decoration:none;text-underline:none">关系数据模型</span></a>，二是它们都使用<a href="http://baike.baidu.com/view/34.htm"><span style="color:#286AB2; text-decoration:none;text-underline:none">SQL</span></a>作为其主要的接口。</p><p>&nbsp;</p><img src ="http://www.blogjava.net/yifeng/aggbug/417016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2014-08-16 03:04 <a href="http://www.blogjava.net/yifeng/archive/2014/08/16/417016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分析型嵌入式键值数据库hamsterdb</title><link>http://www.blogjava.net/yifeng/archive/2014/08/16/417015.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Fri, 15 Aug 2014 19:01:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2014/08/16/417015.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/417015.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2014/08/16/417015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/417015.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/417015.html</trackback:ping><description><![CDATA[<p style="margin:0cm;margin-bottom:.0001pt;background:white"><span style="font-family: 微软雅黑, sans-serif;">近日，<span lang="EN-US"> Christoph Rupp</span>在<span lang="EN-US">highscalability.com</span>上发表了一篇<span lang="EN-US"><a href="http://highscalability.com/blog/2014/8/13/hamsterdb-an-analytical-embedded-key-value-store.html" style="outline: none !important"><span lang="EN-US" style="color:#286AB2;
border:none windowtext 1.0pt;mso-border-alt:none windowtext 0cm;padding:0cm;
text-decoration:none;text-underline:none"><span lang="EN-US">文章</span></span></a></span>，介绍由他创建的分析型嵌入式键值数据库<span lang="EN-US"><a href="http://hamsterdb.com/" style="outline: none !important"><span style="color:#286AB2;border:none windowtext 1.0pt;mso-border-alt:none windowtext 0cm;
padding:0cm;text-decoration:none;text-underline:none">hamsterdb</span></a></span>。它用<span lang="EN-US">C/C++</span>编写，是一个速度非常快的轻量级<span lang="EN-US">NoSQL</span>数据库引擎，支持事务、数据库游标、内存数据库和远程网络访问，类似谷歌的<span lang="EN-US">leveldb</span>和甲骨文的<span lang="EN-US">BerkeleyDB</span>。<span lang="EN-US"><o:p></o:p></span></span></p><p style="margin:0cm;margin-bottom:.0001pt;background:white"><br /></p><p style="margin: 0cm 0cm 11.25pt; float: none; background: white;"><span style="font-family: 微软雅黑, sans-serif;">据作者介绍，hamsterdb并不是细分市场上的一个新晋竞争者。事实上，它已经出现超过9年了。在这段时间里，它发展非常快，其重点已经从单纯的键值存储转向了分析型数据库，提供类似列式存储数据库的功能。</span></p>  <p style="margin: 0cm 0cm 11.25pt; float: none; background: white;"><span style="font-family: 微软雅黑, sans-serif;">hamsterdb</span><span style="font-family: 微软雅黑, sans-serif;">是单线程、非分布式的，用户通常直接将它链接到他们自己的应用程序中。它提供了独特的事务实现以及其它独特的功能，非常适合于分析型工作负载。它可以在本地C/C++中使用，也有面向Erlang、Python、Java、 .NET，甚至是 Ada的绑定。它被用在嵌入式设备和本地应用程序中，也可以为云实例提供缓存和索引服务，已经有数以百万计的部署。</span></p>  <p style="margin: 0cm 0cm 11.25pt; float: none; background: white;"><span style="font-family: 微软雅黑, sans-serif;">hamsterdb</span><span style="font-family: 微软雅黑, sans-serif;">有一个独特的功能，它能识别模式信息。大多数键值存储并不关心键的类型，而它支持两种类型的键：二进制键和数值键。hamsterdb数据库是BTree索引，既可以存储在文件中，也可以存储在内存中。而BTree的实现是它成为分析型数据库的关键。其实现方式非常紧凑，减少了I/O，而且可以更好的利用CPU缓存。</span></p>  <p style="margin: 0cm 0cm 11.25pt; float: none; background: white;"><span style="font-family: 微软雅黑, sans-serif;">另外，hamsterdb有与SQL命令COUNT、COUNT DISTINCT、SUM和AVERAGE等价的API，并支持可变长度的键，允许键重复，以及支持read-committed隔离级别的ACID事务。</span></p>  <p style="margin: 0cm 0cm 11.25pt; float: none; background: white;"><span style="font-family: 微软雅黑, sans-serif;">按照Rupp的说法，hamsterdb最强力的特性是可测试性。数据库的根本&#8212;&#8212;甚至比性能都重要&#8212;&#8212;就是不应该丢失数据。在9年的开发过程中，他不断地重写部分代码或者尝试新的想法，但高测试覆盖率给了他自信，认为这些更改不会破坏任何东西。他有大约1800个单元测试和35000个验收测试，以及一组模拟崩溃的测试，用于测试hamsterdb的可恢复性。这些测试都是高度自动化的。</span></p>  <p style="margin: 0cm 0cm 11.25pt; float: none; background: white;"><span style="font-family: 微软雅黑, sans-serif;">Rupp</span><span style="font-family: 微软雅黑, sans-serif;">还介绍了hamsterdb的商业版本hamsterdb pro。该版本提供了针对键、记录、日志的重量级压缩，AES加密，及针对叶节点查找的SIMD优化。还有更多的压缩算法正在进行或规划中。</span></p>  <p style="margin: 0cm 0cm 11.25pt; float: none; background: white;"><span style="font-family: 微软雅黑, sans-serif;">在文章的最后，Rupp用谷歌的基准测试将hamster 2.1.8与leveldb 1.15作了性能对比。他得出了下面的结论：</span></p>  <p style="margin-top:0cm;margin-right:0cm;margin-bottom:11.25pt;margin-left: 0cm;background:#F4F4F4;word-wrap: break-word !important;float:none"><span style="font-family: 微软雅黑, sans-serif;">对于随机读，hamsterdb性能要好于leveldb。对于随机写的情况，只要数据量不是太大，hamsterdb就更快。而从1千万键及以上开始，hamsterdb就会遭受BTree数据库的传统问题：大量的非序列性I/O和高磁盘寻道延迟。</span></p>  <p style="margin: 0cm 0cm 11.25pt; float: none; background: white;"><span style="font-family: 微软雅黑, sans-serif;">作者认为，这可以很好地说明hamsterdb的分析能力。尤其是，sum和count运算都可以很好地扩展。序列性插入和扫描也是其亮点，不管数据量多大，它都可以非常快。</span></p>  <p style="margin: 0cm 0cm 0.0001pt; float: none; background: white;"><span style="font-family: 微软雅黑, sans-serif;">有兴趣的读者可以下载查看全部的<a href="http://files.hamsterdb.com/dl/hs20140728/results.ods" style="outline: none !important"><span style="color:#286AB2; border:none windowtext 1.0pt;padding:0cm; text-decoration:none;text-underline:none">测试结果</span></a>，以及从GitHub上下载<a href="http://github.com/cruppstahl/hamsterdb" style="outline: none !important"><span style="color:#286AB2;border:none windowtext 1.0pt; padding:0cm;text-decoration:none;text-underline:none">hamsterdb</span><span style="color:#286AB2;border:none windowtext 1.0pt;padding:0cm;text-decoration:none;text-underline:none">的源代码</span></a>。</span></p>  <p>&nbsp;</p><img src ="http://www.blogjava.net/yifeng/aggbug/417015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2014-08-16 03:01 <a href="http://www.blogjava.net/yifeng/archive/2014/08/16/417015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>毕业后的五年拉开大家差距的原因</title><link>http://www.blogjava.net/yifeng/archive/2010/05/13/320759.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Wed, 12 May 2010 16:46:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2010/05/13/320759.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/320759.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2010/05/13/320759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/320759.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/320759.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">有人工作，有人继续上学，大家千万不要错过这篇文章，能看到这篇文章也是一种幸运，真的受益匪浅，对我有很大启迪，这篇文章将会改变我的一生，真的太好了，希望与有缘人分享，也希望对有缘人有所帮助！看完之后有种&#8220;相见恨晚&#8221;的感觉，特别激动，希望大家好好的珍藏这篇文章，相信多年以后，再来看这篇文章，一定有不同的感觉。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;正如"打工皇帝"唐骏说："我觉得有两种人不要跟别人争利益和价值回报。第一种人就是刚刚进入企业的人，头5年千万不要说你能不能多给我一点儿工资，最重要的是能在企业里学到什么，对发展是不是有利&#8230;&#8230;"</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;人总是从平坦中获得的教益少，从磨难中获得的教益多；从平坦中获得的教益浅，从磨难中获得的教益深。一个人在年轻时经历磨难，如能正确视之，冲出黑暗，那就是一个值得敬慕的人。最要紧的是先练好内功，毕业后这5年就是练内功的最佳时期，练好内功，才有可能在未来攀得更高。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;出路在哪里？出路在于思路！</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　其实，没有钱、没有经验、没有阅历、没有社会关系，这些都不可怕。没有钱，可以通过辛勤劳动去赚；没有经验，可以通过实践操作去总结；没有阅历，可以一步一步去积累；没有社会关系，可以一点一点去编织。但是，没有梦想、没有思路才是最可怕的，才让人感到恐惧，很想逃避!</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　人必须有一个正确的方向。无论你多么意气风发，无论你是多么足智多谋，无论你花费了多大的心血，如果没有一个明确的方向，就会过得很茫然，渐渐就丧失了斗志，忘却了最初的梦想，就会走上弯路甚至不归路，枉费了自己的聪明才智，误了自己的青春年华。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;荷马史诗《奥德赛》中有一句至理名言："没有比漫无目的地徘徊更令人无法忍受的了。"毕业后这5年里的迷茫，会造成10年后的恐慌，20年后的挣扎，甚至一辈子的平庸。如果不能在毕业这5年尽快冲出困惑、走出迷雾，我们实在是无颜面对10年后、20年后的自己。毕业这5年里，我们既有很多的不确定，也有很多的可能性。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　毕业这5年里，我们既有很多的待定，也有很多的决定。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　迷茫与困惑谁都会经历，恐惧与逃避谁都曾经有过，但不要把迷茫与困惑当作可以自我放弃、甘于平庸的借口，更不要成为自怨自艾、祭奠失意的苦酒。生命需要自己去承担，命运更需要自己去把握。在毕业这5年里，越早找到方向，越早走出困惑，就越容易在人生道路上取得成就、创造精彩。无头苍蝇找不到方向，才会四处碰壁；一个人找不到出路，才会迷茫、恐惧。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;生活中，面对困境，我们常常会有走投无路的感觉。不要气馁，坚持下去，要相信年轻的人生没有绝路，困境在前方，希望在拐角。只要我们有了正确的思路，就一定能少走弯路，找到出路！</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;成功的人不是赢在起点，而是赢在转折点。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;不少刚刚毕业的年轻人，总是奢望马上就能找到自己理想中的工作。然而，很多好工作是无法等来的，你必须选择一份工作作为历练。职业旅程中的第一份工作，无疑是踏入社会这所大学的起点。也许你找了一份差强人意的工作，那么从这里出发，好好地沉淀自己，从这份工作中汲取到有价值的营养，厚积薄发。千里之行，始于足下，只要出发，就有希望到达终点。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;起点可以相同，但是选择了不同的拐点，终点就会大大不同！</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;毕业这几年，我们的生活、感情、职业等都存在很多不确定的因素，未来也充满了各种可能。这个时候，必须学会选择，懂得放弃，给自己一个明确的定位，使自己稳定下来。如果你不主动定位，就会被别人和社会"定型"！</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　可以这么说：一个人在毕业这5年培养起来的行为习惯，将决定他一生的高度。我们能否成功，在某种程度上取决于自己对自己的评价，这就是定位。你给自己定位是什么，你就是什么。定位能决定人生，定位能改变命运。丑小鸭变成白天鹅，只要一双翅膀；灰姑娘变成美公主，只要一双水晶鞋。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;人的命，三分天注定，七分靠打拼，有梦就"会红"，爱拼才会赢。只要不把自己束缚在心灵的牢笼里，谁也束缚不了你去展翅高飞。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;现实情况远非他们所想的那样。于是，当优越感逐渐转为失落感甚至挫败感时，当由坚信自己是一块"金子"到怀疑自己是一粒"沙子"时，愤怒、迷茫、自卑就开始与日俱增。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;其实，应该仔细掂量一下自己，你是否真是金子？是真金，手中要有绝活，才能上要有过人之处才行。一句话：真金是要靠实力来证明的，只有先把自己的本领修炼好了，才有资格考虑伯乐的事情</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp; 每颗珍珠原本都是一粒沙子，但并不是每一粒沙子都能成为一颗珍珠。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp; 想要卓尔不群，就要有鹤立鸡群的资本。忍受不了打击和挫折，承受不住忽视和平淡，就很难达到辉煌。年轻人要想让自己得到重用，取得成功，就必须把自己从一粒沙子变成一颗价值连城的珍珠。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;天有下雨与日出，人生高峰与低谷。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;莫为浮云遮望眼，风物长宜放眼量。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;只要拂去阴霾，就能亮出朗朗晴空。如果你在工作上有些不如意，要相信自己不会一直处于人生的低谷期，总有一天能冲破重重云层。告诉自己：我并没有失败，只是暂时没有成功！只要在内心点亮一盏希望之灯，一定能驱散黑暗中的阴霾，迎来光明。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;的确，论资历，他们是不折不扣的职场菜鸟，业务涉及不深，人脉一穷二白，在工作中经常碰壁。他们的压力并不一定都像千钧大石，而是像大雨来临前的天色，灰色低沉，明明有空间，却被灰色填满每个缝隙，只能等待大雨倾盆之后的晴空。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　"起得比鸡早，睡得比狗晚，干得比驴多，吃得比猪差。"这是很多刚刚毕业的人喜欢用来调侃自己生活状态的话。虽然有点儿夸张，但是，他们中的很多人的确一直都被灰色心情所笼罩--心里永远是多云转阴。记得有位哲人曾说："我们的痛苦不是问题本身带来的，而是我们对这些问题的看法产生的。"换个角度看人生，是一种突破、一种解脱、一种超越、一种高层次的淡泊与宁静，从而获得自由自在的快乐。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;一位哲人说："人生就是一连串的抉择，每个人的前途与命运，完全把握在自己手中，只要努力，终会有成。"就业也好，择业也罢，创业亦如此，只要奋发努力，都会成功。你是不是准备把生命的承诺全部都交给别人？</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　毕业后这5年，是改变自己命运的黄金时期。在最能决定自己命运时，如果还不把握，那你还要等到什么时候呢？我的人生我做主，命运由己不由人。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　不要活在别人的嘴里，不要活在别人的眼里，而是把命运握在自己手里。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　别说你没有背景，自己就是最大的背景。美国作家杰克&#183;凯鲁亚克说过一句话："我还年轻，我渴望上路。"在人生的旅途中，我们永远都是年轻人，每天都应该满怀渴望。每个人的潜能都是无限的，关键是要发现自己的潜能和正确认识自己的才能，并找到一个能充分发挥潜能的舞台，而不能只为舞台的不合适感到不快。要客观公正地看待自己的能力，结合自己的实际情况和爱好冷静选择，尽可能到最需要自己、最适合自己的地方。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　&nbsp;&nbsp;&nbsp;&nbsp;在人力资源管理界，特别流行一个说法，即"骑马，牵牛，赶猪，打狗"理论：人品很好，能力又很强的，是千里马，我们要骑着他；人品很好但能力普通的，是老黄牛，我们要牵着他；人品、能力皆普通的，就是"猪"，我们要赶走他；人品很差能力很强的，那是"狗"，我们要打击他。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;我想，刚刚毕业几年的你，一样胸怀大志，一样想成为一匹被人赏识、驰骋沙场的千里马吧？那么，就好好沉淀下来。低就一层不等于低人一等，今日的俯低是为了明天的高就。所谓生命的价值，就是我们的存在对别人有价值。能被人利用是一件好事，无人问津才是真正的悲哀！</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;能干工作、干好工作是职场生存的基本保障。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;任何人做工作的前提条件都是他的能力能够胜任这项工作。能干是合格员工最基本的标准，肯干则是一种态度。一个职位有很多人都能胜任，都有干好这份工作的基本能力，然而，能否把工作做得更好一些，就要看是否具有踏实肯干、苦于钻研的工作态度了。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;在能干的基础上踏实肯干。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;工作中，活干得比别人多，你觉得吃亏；钱拿得比别人少，你觉得吃亏；经常加班加点，你觉得吃亏&#8230;&#8230;其实，没必要这样计较，吃亏不是灾难，不是失败，吃亏也是一种生活哲学。现在吃点儿小亏，为成功铺就道路，也许在未来的某个时刻，你的大福突然就来了。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;能吃亏是做人的一种境界，是处世的一种睿智。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;在工作中并不是多做事或多帮别人干点儿活就是吃亏。如果领导让你加加班、赶赶任务，别以为自己吃了大亏，反而应该感到庆幸，因为领导只叫了你，而没叫其他人，说明他信任你、赏识你。吃亏是一种贡献，你贡献得越多，得到的回报也就越多。乐于加班，就是这样的一种吃亏。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;舍得舍得，有舍才有得；学会在适当时吃些亏的人绝对不是弱智，而是大智。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　给别人留余地就是给自己留余地，予人方便就是予己方便，善待别人就是善待自己。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　傻人有傻福，因为傻人没有心计。和这样的人在一起，身心放松，没有太多警惕，就能相互靠近。傻在很多时候意味着执着和忠贞，也意味着宽厚和诚实，让人不知不觉站到他一边。傻人无意中得到的，比聪明人费尽心机得到的还多。毕业这几年，你的天空中只飘着几片雪花，这样你就满足了吗？成功需要坚持与积累，与其专注于搜集雪花，不如省下力气去滚雪球。巴菲特说："人生就像滚雪球，最重要的是发现很湿的雪和很长的坡。"让自己沉淀下来，学着发现"很湿的雪"，努力寻找"很长的坡"。记住：散落的雪花会很快融化，化为乌有，只有雪球才更实在，才能长久。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">在毕业这几年里，你要是能做到比别人多付出一分努力，就意味着比别人多积累一分资本，就比别人多一次成功的机会。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;什么是职业化呢？职业化就是工作状态的标准化、规范化、制度化，即在合适的时间、合适的地点用合适的方式说合适的话、做合适的事，使知识、技能、观念、思维、态度、心理等符合职业规范和标准。"在每个行业里，都有很多出色的人才，他们之所以能存在，是因为比别人更努力、更智慧、更成熟。但是，最重要的是，他们比一般人更加职业化！这就是为什么我现在能当你老板的原因。一个人仅仅专业化是不够的，只有职业化的人才能飞在别人前面，让人难以超越！"不要以为我们现在已经生存得很安稳了。对于毕业5年的人来讲，一定要认清即将面临的五大挑战。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">一、赡养父母。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">二、结婚生子。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">三、升职加薪。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">四、工作压力。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">五、生活质量。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;有的人为生存而雀跃，目光总是停在身后，三天打鱼两天晒网，有始无终。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　&nbsp;&nbsp;有的人为发展而奋斗，目光总是盯在正前方，每天进步一点点，坚持不懈。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　毕业这几年，不能没有追求和探索，不能没有理想和目标。人生如逆水行舟，不进则退。甘于现状的生活就是不再前行的船，再也无法追上时代前进的步伐。一定要抓紧每一秒钟的时间来学习，要明白学习不是学生的专利。小聪明的人最得意的是：自己做过什么？大智慧的人最渴望的是：自己还要做什么？</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　小聪明是战术，大智慧是战略；小聪明看到的是芝麻，大智慧看到的是西瓜。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　在这个世界上，既有大人物，也有小角色，大人物有大人物的活法，小人物有小人物的潇洒，每个人都有自己的生活方式，谁也勉强不了谁。但是，小聪明只能有小成绩和小视野，大智慧才能有大成就和大境界。小企业看老板，中企业看制度，大企业看文化。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;小公司与大企业都有生存之道，没有好坏之分，但对一个人不同阶段的影响会不同。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　小公司肯定想要发展为大企业，这是一种目标，年轻人也要给自己的职业生涯制定目标。毕业几年的你，是否经常会怯场或者是感到没有底气？居安思危绝对不是危言耸听！此刻打盹，你将做梦；此刻学习，你将圆梦。在竞争激烈的人生战场上，打盹的都是输家！</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp; 每个人在年轻的时候似乎都豪情万丈，什么都不怕，可是随着年龄的增长，每天想着房子、工作、养家糊口这些俗事儿，再也没有年轻时那种敢于"上天探星、下海捞月"的勇气了。是我们改变了生活，还是生活改变了我们？我们的思想越来越复杂，因为有了越来越多的舍不得、越来越多的顾虑，我们总是在徘徊、总是在犹豫。毕业开始一两年，生活的重担会压得我们喘不过气来，挫折和障碍堵住四面八方的通口，我们往往在压迫得自己发挥出潜能后，才能杀出重围，找到出路。可是两三年后，身上的重担开始减轻，工作开始一帆风顺，我们就松懈了下来，渐渐忘记了潜在的危险。直到有一天危机突然降临，我们在手足无措中被击败&#8230;&#8230;毕业这几年，仍然处于危险期，一定要有居安思危的意识，好好打拼，这样才能有一个真正的安全人生！</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;生于忧患，死于安乐。如果你想跨越自己目前的成就，就不能画地自限，而是要勇于接受挑战。对畏畏缩缩的人来说，真正的危险正在于不敢冒险！</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;年轻人在社会的重压下，适应能力已变得越来越强，只是他们不自觉地习惯被环境推着走。他们不敢冒险，怕给自己带来终身的遗憾，于是告慰自己："我对得起自己、对得起家人，因为我已竭尽全力。"其实，人只有不断挑战和突破才能逐渐成长。长期固守于已有的安全感中，就会像温水里的青蛙一样，最终失去跳跃的本能。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;经历了这几年社会生活，你应该明白：这个世界上有富也有贫，有阴也有亮，有丑也有美，到底看到什么，取决于自己是积极还是消极。在年轻时学会勤勉地工作，用一种光明的思维对待生活，那么，只要张开手掌，你就会发现，里面有一片灿烂的人生。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;把感恩刻在石头上，深深地感谢别人帮助过你，永远铭记，这是人生应有的一种境界；把仇恨写在沙滩上，淡淡忘掉别人伤害过你，学会宽容，让所有的怨恨随着潮水一去不复返，这也是一种人生境界。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;学会倒出水，才能装下更多的水。从毕业那天开始，学会把每天都当成一个新的起点，每一次工作都从零开始。如果你懂得把"归零"当成一种生活的常态，当成一种优秀的延续，当成一种时刻要做的事情，那么，经过短短几年，你就可以完成自己职业生涯的正确规划与全面超越。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　在职业起步的短短道路上，想要得到更好、更快、更有益的成长，就必须以归零思维来面对这个世界。不要以大学里的清高来标榜自己，不要觉得自己特别优秀，而是要把自己的姿态放下，把自己的身架放低，让自己沉淀下来，抱着学习的态度去适应环境、接受挑战。放下"身段"才能提高身价，暂时的俯低终会促成未来的高就。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　年轻人从校园或者从一个环境进入一个新环境，就要勇于将原来环境里熟悉、习惯、喜欢的东西放下，然后从零开始。我们想在职场上获得成功，首先就要培养适应力。从自然人转化为单位人是融入职场的基本条件。一个人起点低并不可怕，怕的是境界低。越计较自我，便越没有发展前景；相反，越是主动付出，那么他就越会快速发展。很多今天取得一定成就的人，在职业生涯的初期都是从零开始，把自己沉淀再沉淀、倒空再倒空、归零再归零，正因为这样，他们的人生才一路高歌，一路飞扬。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">　　在毕业这几年里，我们要让过去归零，才不会成为职场上那只背着重壳爬行的蜗牛，才能像天空中的鸟儿那样轻盈地飞翔。请好好品味一下杰克&#183;韦尔奇说过的一句话："纠正自己的行为，认清自己，从零开始，你将重新走上职场坦途。"　吐故才能纳新，心静才能身凉，有舍才能有得，杯空才能水满，放下才能超越。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;归零思维五大表现：心中无我，眼中无钱，念中无他，朝中无人，学无止境。</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; "><br />
</span><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">&nbsp;&nbsp;&nbsp;&nbsp;年轻人难免带着几分傲气，认为自己无所不能、所向披靡，其实不然，初入职场的新人还是个"婴儿"，正处在从爬到走的成长阶段。在毕业这几年里，一定要让自己逐步培养起学徒思维、海绵思维、空杯思维，具有这样思维的人心灵总是敞开的，能随时接受启示和一切能激发灵感的东西，他们时刻都能感受到成功女神的召唤。</span>
<img src ="http://www.blogjava.net/yifeng/aggbug/320759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2010-05-13 00:46 <a href="http://www.blogjava.net/yifeng/archive/2010/05/13/320759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IntelliJ IDEA 9.0 Released</title><link>http://www.blogjava.net/yifeng/archive/2009/12/10/305363.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Thu, 10 Dec 2009 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2009/12/10/305363.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/305363.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2009/12/10/305363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/305363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/305363.html</trackback:ping><description><![CDATA[<span style="border-collapse: collapse; color: #3f3f3f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16px; ">
<h2 style="padding-bottom: 5px; margin-top: 15px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; font-size: 22px; color: #004c88; ">What's New in Version 9</h2>
<p style="margin-top: 10px; margin-bottom: 15px; ">This release delivers many major updates to IntelliJ IDEA including better performance, support for Java EE 6 and other new frameworks, lots of productivity improvements in the editor, a more streamlined user interface and much more.</p>
<table border="0" style="width: 535px; height: 42px; ">
    <tbody>
        <tr>
            <td>&nbsp;
            <ul style="margin-left: 10px; ">
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Faster_Environment" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Faster Environment</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Improved_Code_Understanding" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Improved Code Understanding</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Cleaner_More_Productive_Coding" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Cleaner, More Productive Coding</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#More_Efficient_User_Interface" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>More Efficient User Interface</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#More_Flexible_Project_Structure" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>More Flexible Project Structure</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Preliminary_Java_7_Features_Support" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Preliminary Java 7 Features Support</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Java_EE_6_Support" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Java EE 6 Support</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Improved_Groovy_support" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Improved Groovy support</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Extended_Polyglot_Arsenal" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Extended Polyglot Arsenal</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#New_Web_Frameworks_Support" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>New Web Frameworks Support</u></a></li>
            </ul>
            </td>
            <td>&nbsp;
            <ul style="margin-left: 10px; ">
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#OSGi_Application_Development" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>OSGi Application Development</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Enhanced_Maven_Support" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Enhanced Maven Support</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Android_Development" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Android Development</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Better_JavaScript_and_HTML" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Better JavaScript and HTML</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Flex_Development" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Flex Development</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Context_Management" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Context Management</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#UML_Support" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>UML Support</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Version_Control_Integration" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Version Control Integration</u></a></li>
                <li class="lead" style="padding-left: 0px; padding-bottom: 15px; "><a href="http://www.intellij.org.cn/portal/index.php?option=com_content&amp;task=view&amp;id=318&amp;Itemid=1#Other_Interesting_Things" class="on_page" style="text-decoration: none; color: #ee7a00; "><u>Other Interesting Things</u></a></li>
            </ul>
            </td>
        </tr>
    </tbody>
</table>
<p style="margin-top: 10px; margin-bottom: 15px; ">Please visit&nbsp;<a href="http://www.jetbrains.com/idea/whatsnew/index.html" style="text-decoration: none; color: #ee7a00; ">http://www.jetbrains.com/idea/whatsnew/index.html</a>&nbsp;for detail!</p>
<div><br />
</div>
</span>
<img src ="http://www.blogjava.net/yifeng/aggbug/305363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2009-12-10 09:24 <a href="http://www.blogjava.net/yifeng/archive/2009/12/10/305363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>塑造阳光心态</title><link>http://www.blogjava.net/yifeng/archive/2009/11/04/300999.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Tue, 03 Nov 2009 16:20:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2009/11/04/300999.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/300999.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2009/11/04/300999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/300999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/300999.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 塑造阳光心态 (讲课人为清华大学某教授)                                                    今天很高兴和建行北京市分行的朋友们作一个交流，我今天上午要讲的专题是：塑造阳光心态。            现在大家面临的是一个什么样的环境呢?我们的财富在增加，但是满意感在下降；我们拥有的越来越多，但是快乐越来越少；我们沟通的工具...&nbsp;&nbsp;<a href='http://www.blogjava.net/yifeng/archive/2009/11/04/300999.html'>阅读全文</a><img src ="http://www.blogjava.net/yifeng/aggbug/300999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2009-11-04 00:20 <a href="http://www.blogjava.net/yifeng/archive/2009/11/04/300999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IntelliJ IDEA Completion features</title><link>http://www.blogjava.net/yifeng/archive/2009/10/28/300007.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Wed, 28 Oct 2009 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2009/10/28/300007.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/300007.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2009/10/28/300007.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/300007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/300007.html</trackback:ping><description><![CDATA[<div><br />
</div>
<div><span  style="font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 17px; ">
<h1 id="title-heading" class="pagetitle" style="line-height: 2; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18pt; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; color: #003366; width: 1401px; "><a href="http://www.jetbrains.net/confluence/display/IDEADEV" style="color: #003366; text-decoration: none; "><img class="logo space" src="http://www.jetbrains.net/confluence/download/userResources/IDEADEV/logo" alt="" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; float: left; margin-top: 0px; margin-right: 0.3em; margin-bottom: 0px; margin-left: 0px; height: 2em; " /></a><span id="title-text"><a href="http://www.jetbrains.net/confluence/display/IDEADEV/Completion+features" style="color: #336699; text-decoration: none; border-bottom-color: #003366; ">Completion features</a></span></h1>
<div id="content" class="page view" style="clear: left; ">
<div class="page-metadata" style="color: #666666; font-size: 0.9em; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; ">Added by&nbsp;<a href="http://www.jetbrains.net/confluence/display/~peter" style="color: #666666; font-style: normal; ">Peter Gromov</a>, last edited by&nbsp;<a href="http://www.jetbrains.net/confluence/display/~peter" style="color: #666666; font-style: normal; ">Peter Gromov</a>&nbsp;on Sep 22, 2009 &nbsp;(<a class="noprint" href="http://www.jetbrains.net/confluence/pages/diffpages.action?pageId=17924246&amp;originalId=17924309" style="color: #666666; font-style: normal; ">view change</a>)</div>
<div class="wiki-content" style="font-size: 10pt; line-height: 13pt; ">
<p style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Feature list isn't complete, this page is subject to change.</p>
<p style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">There are three completion types:</p>
<table class="confluenceTable" style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; clear: left; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; border-collapse: collapse; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
    <tbody>
        <tr style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
            <th class="confluenceTh" style="font-size: 10pt; line-height: 13pt; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; background-color: #f0f0f0; text-align: left; vertical-align: top; color: #003366; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Logical name</th><th class="confluenceTh" style="font-size: 10pt; line-height: 13pt; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; background-color: #f0f0f0; text-align: left; vertical-align: top; color: #003366; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Shortcut</th>
        </tr>
        <tr style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
            <td class="confluenceTd" style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; vertical-align: top; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Basic</td>
            <td class="confluenceTd" style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; vertical-align: top; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><em>Ctrl+Space</em></td>
        </tr>
        <tr style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
            <td class="confluenceTd" style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; vertical-align: top; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Smart (SmartType)</td>
            <td class="confluenceTd" style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; vertical-align: top; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><em>Ctrl+Shift+Space</em></td>
        </tr>
        <tr style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; ">
            <td class="confluenceTd" style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; vertical-align: top; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Class Name</td>
            <td class="confluenceTd" style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; vertical-align: top; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><em>Ctrl+Alt+Space</em></td>
        </tr>
    </tbody>
</table>
<p style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Pressing the same shortcut twice results in 'second' completion, which may give more variants.</p>
<p style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">The&nbsp;<font color="red"><strong>New!</strong></font>&nbsp;mark means a feature is available in&nbsp;<a href="http://www.jetbrains.net/confluence/display/IDEADEV/Maia+EAP" rel="nofollow" style="color: #003366; ">Maia</a>&nbsp;only.</p>
<h1 style="line-height: 2; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18pt; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; color: #003366; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #3c78b5; width: 1401px; "><a name="Completionfeatures-Alllanguages" style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>All languages</h1>
<p style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">You may choose item in completion list not only with Enter, but also with variety of other keys:&nbsp;<em>space</em>,&nbsp;<em>dot</em>,&nbsp;<em>colon</em>,&nbsp;<em>semicolon</em>, '(' etc. Basically this will result in inserting that character after the completed identifier, but sometimes more will be done. For example, finishing Java method call with '(' will, of course, insert also ')'.</p>
<p style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Choosing item with&nbsp;<em>Tab</em>&nbsp;has special meaning. In this case, if you are inside identifier, it will be overwritten completely instead of just inserting the item string into caret position.</p>
<p style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Class Name completion works everywhere and typically displays all class names that are accessible from the current location. On second invocation it displaysall the classes that may become visible if you change their access modifiers or add necessary module dependencies.</p>
<p style="font-size: 10pt; line-height: 13pt; color: #000000; font-weight: normal; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="red"><strong>New!</strong></font>&nbsp;If you don't like some suggested classes and you don't want to see it anymore, you may easily&nbsp;<a href="http://blogs.jetbrains.com/idea/2009/04/easy-exclusion-of-classes/" rel="nofollow" style="color: #003366; ">exclude it from import and completion</a>.</p>
<h1 style="line-height: 2; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18pt; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; color: #003366; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #3c78b5; width: 1401px; "><a name="Completionfeatures-Java" style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>Java</h1>
<h3 style="line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; margin-top: 20px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #003366; "><a name="Completionfeatures-Basic" style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>Basic</h3>
<ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc; color: #000000; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-left: 22px; ">
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Context-specific reference and keyword completion, inserts parentheses, semicolons etc. where necessary.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Variable/method name suggestion based on type name, super methods and unresolved references in context file</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Getter/setter name completion based on class fields</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Property name/file path in string literal</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Second:
    <ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc; color: #000000; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 22px; ">
        <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Inaccessible members (e.g. private fields) are shown.</li>
        <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">If prefix starts with an uppercase letter, shows all classes (like Class Name completion). Suggested in first completion invocation if there were no matching variants.</li>
    </ul>
    </li>
</ul>
<h3 style="line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; margin-top: 20px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #003366; "><a name="Completionfeatures-Smart" style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>Smart</h3>
<ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc; color: #000000; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-left: 22px; ">
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Performs reference variants filtering based on expected type. If say an&nbsp;<strong>int</strong>&nbsp;is expected, only the variables/fields/methods of&nbsp;<strong>int</strong>&nbsp;type will be suggested.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="red"><strong>New!</strong></font>&nbsp;If there is a one-element array of expected type (like the one created automatically to communicate with inner classes), and its name is say&nbsp;<tt>ref</tt>, then&nbsp;<tt>ref[0]</tt>&nbsp;is completed.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">After&nbsp;<strong>new</strong>&nbsp;suggests all the classes descending from the expected type, inserts parentheses, if the selected class is abstract, will generate anonymous class body and suggest methods to implement.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">After&nbsp;<strong>throw new</strong>&nbsp;suggests only the runtime exceptions merged with those explicitly declared in&nbsp;<strong>throws</strong>-clause.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">In Javadoc&nbsp;<strong>throws</strong>&nbsp;tag suggests exceptions from method's throws-clause.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">After&nbsp;<strong>catch</strong>&nbsp;suggests the exceptions that are thrown inside&nbsp;<strong>try</strong>.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">After&nbsp;<strong>instanceof</strong>&nbsp;suggests inheritors of the checked expression type.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">When&nbsp;<tt>Class&lt;? extends X&gt;</tt>&nbsp;is expected, suggests&nbsp;<tt>Class&lt;Y&gt;</tt>&nbsp;for all Y inheriting from X.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Completes generic parameters where missing:&nbsp;<tt>List&lt;String&gt; l = new ArrayList&lt;|&gt;();</tt></li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Inserts explicit method type parameters where necessary:&nbsp;<tt>collect(Collections.emptyLis|)</tt>&nbsp;where&nbsp;<tt>collect</tt>&nbsp;expects&nbsp;<tt>List&lt;String&gt;</tt></li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Suggests to cast to expected type after opening parenthesis:&nbsp;<tt>String s = (|</tt></li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="red"><strong>New!</strong></font>&nbsp;When calling a method or constructor with matching signature (e.g. a super method),&nbsp;<a href="http://blogs.jetbrains.com/idea/2009/09/super-method-completion/" rel="nofollow" style="color: #003366; ">fills all the parameters immediately</a>.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Suggests live templates with statically-determineable type and 'Smart completion' checkbox on.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Searches expected class's static members for matching values:&nbsp;<tt>Singleton s = |</tt>&nbsp;will result in&nbsp;<tt>Singleton s = Singleton.getInstance();</tt></li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Searches method containing class for&nbsp;<a href="http://blogs.jetbrains.com/idea/2009/03/smart-completion-of-java-primitive-method-parameters/" rel="nofollow" style="color: #003366; ">primitive constant fields</a>&nbsp;which may suit.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="red"><strong>New!</strong></font>&nbsp;<a href="http://blogs.jetbrains.com/idea/2009/08/original-intellij-cast/" rel="nofollow" style="color: #003366; ">Analyzes dataflow</a>&nbsp;in search for typecasts and *instanceof*s and suggests to cast expressions to expected type where possible.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Keywords:&nbsp;<strong>class</strong>,&nbsp;<strong>this</strong>&nbsp;(possibly qualified),&nbsp;<strong>true</strong>,&nbsp;<strong>false</strong>,&nbsp;<strong>null</strong></li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><a href="http://blogs.jetbrains.com/idea/2008/08/smart-type-completion-becomes-even-smarter/" rel="nofollow" style="color: #003366; ">Second</a>:
    <ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc; color: #000000; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 22px; ">
        <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Iterates over the visible methods/fields to check if their return value contains members of expected type, resulting in chained calls like&nbsp;<tt>getModule().getProject()</tt>. Prefix matching is done on both the first and the second member in chain (so you may get this result from both&nbsp;<tt>getMo|</tt>&nbsp;and&nbsp;<tt>getPro|</tt>).</li>
        <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Converts between arrays and lists when you have one in context and need another.</li>
        <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Adds&nbsp;<a href="http://blogs.jetbrains.com/idea/2009/04/second-smart-completion-for-array-elements/" rel="nofollow" style="color: #003366; ">array member access</a>&nbsp;when you have an array of expected type:&nbsp;<tt>int a = |</tt>&nbsp;will result in&nbsp;<tt>int a = intArray[|]</tt>.</li>
    </ul>
    </li>
</ul>
<h3 style="line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; margin-top: 20px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #003366; "><a name="Completionfeatures-BothBasic%26Smart" style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>Both Basic &amp; Smart</h3>
<ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc; color: #000000; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-left: 22px; ">
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="red"><strong>New!</strong></font>&nbsp;When completing a qualified expression analyzes dataflow and checks if there are any typecasts or *instanceof*s concerning the qualifier. If yes, suggests the variants based on the casted type and&nbsp;<a href="http://blogs.jetbrains.com/idea/2009/08/original-intellij-cast/" rel="nofollow" style="color: #003366; ">inserts the cast automatically</a>.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="red"><strong>New!</strong></font>&nbsp;In debugger's Evaluate Expression dialog does similar casting to&nbsp;<a href="http://blogs.jetbrains.com/idea/2009/09/debugger-evaluate-expression-enhancements/" rel="nofollow" style="color: #003366; ">runtime type</a>. When expression is simple variable/field access, it's done immediately, when it involves method calls, on second completion.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">If all variants are method overloads with the same name, lookup isn't shown, method name is inserted with caret placed inside parentheses.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">When completing a method with boolean return type, you may finish completion with '!' and the call result will be negated.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">You may finish completion with&nbsp;<strong>Complete Current Statement</strong>&nbsp;action (<em>Ctrl+Shift+Enter</em>), which will attempt to syntactically correct your code, e.g. wrap the following expression into parentheses if you've chosen a method call.</li>
</ul>
<h3 style="line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; margin-top: 20px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #003366; "><a name="Completionfeatures-ClassName" style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>Class Name</h3>
<ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc; color: #000000; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-left: 22px; ">
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">After&nbsp;<strong>new</strong>&nbsp;also inserts parentheses for constructor invocation.</li>
</ul>
<h1 style="line-height: 2; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18pt; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; color: #003366; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #3c78b5; width: 1401px; "><a name="Completionfeatures-Groovy" style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>Groovy</h1>
<h3 style="line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; margin-top: 20px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #003366; "><a name="Completionfeatures-Basic" style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>Basic</h3>
<ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc; color: #000000; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-left: 22px; ">
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Context-specific reference and keyword completion, inserts parentheses, semicolons etc. where necessary.</li>
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Runtime members:
    <ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc; color: #000000; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-left: 22px; ">
        <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">DefaultGroovyMethods</li>
        <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">SwingBuilder</li>
        <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="red"><strong>New!</strong></font>&nbsp;Grails domain class &amp; controller dynamic properties and methods</li>
        <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Gant script dynamic methods (e.g. depends, target) and properties (e.g. includeTargets, message)</li>
    </ul>
    </li>
</ul>
<h3 style="line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 14pt; margin-top: 20px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #003366; "><a name="Completionfeatures-Smart" style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>Smart</h3>
<ul style="font-size: 10pt; line-height: 13pt; list-style-type: disc; color: #000000; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-left: 22px; ">
    <li style="font-size: 10pt; line-height: 13pt; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="red"><strong>New!</strong></font>&nbsp;After&nbsp;<strong>new</strong>&nbsp;in variable initializer with known type suggests possible inheritors:&nbsp;<tt>CharSequence c = new |</tt></li>
</ul>
</div>
<div id="labels-section" class="pageSection" style="margin-top: 10px; clear: both; ">
<div id="labels-section">
<div id="labels-header" class="section-header" style="margin-bottom: 5px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; ">
<h2 class="section-title" style="line-height: normal; font-weight: bold; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 12pt; margin-top: 20px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; color: black; display: inline; ">Labels</h2>
&nbsp;</div>
<div id="labelsList">(None)</div>
</div>
</div>
</div>
</span></div>
<img src ="http://www.blogjava.net/yifeng/aggbug/300007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2009-10-28 09:19 <a href="http://www.blogjava.net/yifeng/archive/2009/10/28/300007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IntelliJ IDEA走向开源</title><link>http://www.blogjava.net/yifeng/archive/2009/10/18/298778.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Sun, 18 Oct 2009 13:36:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2009/10/18/298778.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/298778.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2009/10/18/298778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/298778.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/298778.html</trackback:ping><description><![CDATA[<span  style="border-collapse: collapse; color: #3f3f3f; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16px; "><span style="font-size: 14pt; "><span style="font-size: 12pt; "><span style="font-size: 14pt; ">为软件开发商提供增效型智能工具的创建商 JetBrains(R) 宣布了其获奖的 Java IDE -- IntelliJ(R) IDEA 免费社区版 (Community Edition) 的首个公开预览。<br />
&nbsp;&nbsp;&nbsp; 从即将推出的9.0版开始，IntelliJ IDEA 将以两个版本提供：社区版，免费且开源；终极版 (Ultimate Edition)，今天之前，终极版一直只是指 IntelliJ IDEA。<br />
&nbsp;&nbsp;&nbsp; 最好的消息便是，社区版的推出消除了 IntelliJ IDEA 更广泛用于纯 Java 开发的唯一障碍 -- 价格问题。该版本不仅是免费的，而且 -- 也是特别重要的 -- 它还是完全开源的。<br />
&nbsp;&nbsp;&nbsp; JetBrains 首席执行官 Sergey Dmitriev 表示："我们一直通过我们的公共 Early Access Program（简称'EAP'）、发行追踪者、论坛等面向社区开放。这使得我们与用户之间形成了紧密而又直接的反馈环，甚至在业界还没广泛认可这一实践时。自那以后，我们通过免费的产品授权为数百个开源计划提供了支持；为 Groovy 和 Scala 等各种开源计划贡献了代码；并为我们自己开发了数个开源 IntelliJ IDEA 插件。因此，您可以明白通过开源授权免费提供 IntelliJ IDEA 体验是如何与我们致力于社区的重心相结合的。开源已经成为了主流，我们继续将其作为一个激动人心的挑战。简单说来，我们并没有改变方向 -- 我们正在向前发展。"<br />
&nbsp;&nbsp;&nbsp; 该全新的社区版建基于 IntelliJ 平台，包括其源代码。JetBrains 通过将大众化 Apache 2.0 授权应用于社区版和 IntelliJ 平台，使得它们源代码的获得和使用变得尽可能简单。<br />
&nbsp;&nbsp;&nbsp; 说实在的，IntelliJ 平台可以看作是 JetBrains 构建智能 IDE 的专门知识。它不仅是 IntelliJ IDEA 本身的基础，而且还是其它众多创新型 JetBrains 工具（旨在用于以特定语言和/或域进行的开发）的基础。这些著名的新工具包括 RubyMine、网络开发 IDE（已经在公开预览中）MPS 以及其它目前正在开发的工具。<br />
&nbsp;&nbsp;&nbsp; 根据非常合理且显而易见的实用原则，IntelliJ IDEA 被分为两个版本：<br />
&nbsp;&nbsp;&nbsp; -- 社区版 -- 依靠纯 Java/Groovy 应用工作或进行 Swing 开发的人们的完美之选。它拥有 IntelliJ IDEA 的所有优势，包括各种代码重构和代码检查、编码辅助、调试、TestNG 和 JUnit 测试；CVS、Subversion 和 Git 支持以及 Ant 和 Maven 构建整合。<br />
&nbsp;&nbsp;&nbsp; 垂询详情，或下载社区版公开预览，请访问&nbsp;<a href="http://www.jetbrains.com/idea/nextversion/free_java_ide.html" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.com/idea/nextversion/free_java_ide.html</u></a>&nbsp;。<br />
&nbsp;&nbsp;&nbsp; -- 终极版 -- 一个功能齐全的商业化 IntelliJ IDEA，拥有完整的网络和企业开发工具组合，一贯为最重要的现代技术和框架提供最高质量的支持。9版本的新功能包括：<br />
&nbsp;&nbsp;&nbsp; -- Java EE 6，拥有 JSF 2.0、JPA 2.0、Servlets 3.0、Bean 验证等。<br />
&nbsp;&nbsp;&nbsp; -- Android、Google App Engine、GWT<br />
&nbsp;&nbsp;&nbsp; -- Adobe AIR、FlexUnit<br />
&nbsp;&nbsp;&nbsp; -- JavaScript 重构和调试<br />
&nbsp;&nbsp;&nbsp; -- Tapestry、OSGi<br />
&nbsp;&nbsp;&nbsp; -- PHP，等。<br />
&nbsp;&nbsp;&nbsp; 将 IntelliJ IDEA 终极版区分开的主要功能包括：紧密的 Perforce、Rational ClearCase 和微软 (Microsoft) Team Foundation Server 整合、依存结构矩阵、带有结构搜寻和替换的先进代码管理。这些以及其它诸多性能使得它成为面向 Java 平台上广泛的专业开发的独特工具。<br />
&nbsp;&nbsp;&nbsp; 欲查看 IntelliJ IDEA Ultimate 9 的更多新功能的列表，或下载预览构建，请访问&nbsp;<a href="http://www.jetbrains.com/idea/nextversion/index.html" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.com/idea/nextversion/index.html</u></a>&nbsp;。<br />
&nbsp;&nbsp;&nbsp; 阅读社区版和终极版的差异，请访问&nbsp;<a href="http://www.jetbrains.com/idea/nextversion/editions_comparison_matrix.html" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.com/idea/nextversion/editions_comparison_matrix.html</u></a>&nbsp;。<br />
&nbsp;&nbsp;&nbsp; 垂询 IntelliJ IDEA 社区版开源计划详情，或下载其源码，请访问&nbsp;<a href="http://www.jetbrains.org/" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.org</u></a>&nbsp;。<br />
&nbsp;&nbsp;&nbsp; JetBrains 简介<br />
&nbsp;&nbsp;&nbsp; JetBrains 是一家技术领先的软件开发公司，专门从事增效型智能软件的开发。该公司因其获奖的创新型 Java(TM) 集成开发环境 IntelliJ(TM) IDEA（详情请见<a href="http://www.jetbrains.com/idea/" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.com/idea/</u></a>&nbsp;）、面向 .NET 开发人员的 ReSharper 和 dotTrace Profiler（请见&nbsp;<a href="http://www.jetbrains.com/resharper/index.html" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.com/resharper/index.html</u></a>&nbsp;和<a href="http://www.jetbrains.com/profiler/index.html" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.com/profiler/index.html</u></a>&nbsp;）、持续集成和构建管理环境 TeamCity (&nbsp;<a href="http://www.jetbrains.com/teamcity/index.html" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.com/teamcity/index.html</u></a>&nbsp;) 以及 Ruby 和 Rails 集成开发环境 RubyMine (&nbsp;<a href="http://www.jetbrains.com/ruby" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.com/ruby</u></a>&nbsp;) 而享誉各地。JetBrains 总部位于捷克布拉格，在俄罗斯圣彼得堡和马萨诸塞州波士顿设有研发实验室。垂询详情，请访问<a href="http://www.jetbrains.com/index.html" target="_blank" style="text-decoration: none; color: #ee7a00; "><u>http://www.jetbrains.com/index.html</u></a>&nbsp;。</span></span></span></span>
<img src ="http://www.blogjava.net/yifeng/aggbug/298778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2009-10-18 21:36 <a href="http://www.blogjava.net/yifeng/archive/2009/10/18/298778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RBAC模型（转载）</title><link>http://www.blogjava.net/yifeng/archive/2009/08/18/291655.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Tue, 18 Aug 2009 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2009/08/18/291655.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/291655.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2009/08/18/291655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/291655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/291655.html</trackback:ping><description><![CDATA[<span  style="font-family: 'times new roman'; ">
<p style="color: #000000; ">访问控制策略一般有以下几种方式：</p>
<div class="itemizedlist" style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
<ul type="disc" style="color: #000000; padding-top: 0px; padding-bottom: 0px; margin-top: auto; margin-right: auto; margin-bottom: auto; margin-left: auto; ">
    <li style="color: #000000; ">
    <p style="color: #000000; ">自主型访问控制（Discretionary Access Control-DAC）：用户/对象来决定访问权限。信息的所有者来设定谁有权限来访问信息以及操作类型（读、写、执行。。。）。是一种基于身份的访问控制。例如UNIX权限管理。</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">强制性访问控制（Mandatory Access Control-MAC）：系统来决定访问权限。安全属性是强制型的规定，它由安全管理员或操作系统根据限定的规则确定的，是一种规则的访问控制。</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">基于角色的访问控制（格/角色/任务）：角色决定访问权限。用组织角色来同意或拒绝访问。比MAC、DAC更灵活，适合作为大多数公司的安全策略，但对一些机密性高的政府系统部适用。</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">规则驱动的基于角色的访问控制：提供了一种基于约束的访问控制，用一种灵活的规则描述语言和一种ixn的信任规则执行机制来实现。</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">基于属性证书的访问控制：访问权限信息存放在用户属性证书的权限属性中，每个权限属性描述了一个或多个用户的访问权限。但用户对某一资源提出访问请求时，系统根据用户的属性证书中的权限来判断是否允许或句句</p>
    </li>
</ul>
</div>
<p style="color: #000000; ">模型的主要元素</p>
<div class="itemizedlist" style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
<ul type="disc" style="color: #000000; padding-top: 0px; padding-bottom: 0px; margin-top: auto; margin-right: auto; margin-bottom: auto; margin-left: auto; ">
    <li style="color: #000000; ">
    <p style="color: #000000; ">可视化授权策略生成器</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">授权语言控制台</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">用户、组、角色管理模块</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">API接口</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">授权决策引擎</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">授权语言解释器</p>
    </li>
</ul>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="color: #000000; font-weight: 500; margin-top: 10px; padding-top: 15px; font-size: 22px; clear: both; "><a name="d0e4641" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.1.&nbsp;RBAC模型介绍</h2>
</div>
</div>
</div>
<p style="color: #000000; ">RBAC(Role-Based Access Control - 基于角色的访问控制)模型是20世纪90年代研究出来的一种新模型，但从本质上讲，这种模型是对前面描述的访问矩阵模型的扩展。这种模型的基本概念是把许可权（Permission）与角色（Role）联系在一起，用户通过充当合适角色的成员而获得该角色的许可权。</p>
<p style="color: #000000; ">这种思想世纪上早在20世纪70年代的多用户计算时期就被提出来了，但直到20世纪90年代中后期，RBAC才在研究团体中得到一些重视。本章将重点介绍美国George Mason大学的RBAC96模型。</p>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="color: #000000; font-weight: 500; margin-top: 10px; padding-top: 15px; font-size: 22px; clear: both; "><a name="d0e4648" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.2.&nbsp;有关概念</h2>
</div>
</div>
</div>
<p style="color: #000000; ">在实际的组织中，为了完成组织的业务工作，需要在组织内部设置不同的职位，职位既表示一种业务分工，又表示一种责任与权利。根据业务分工的需要，支援被划分为不同群体，各个群体的人根据其工作任务的需要被赋予不同的职责和权利，每个人有权了解与使用与自己任务相关的信息与资源，对于那些不应该被知道的信息则应该限制他们访问。这就产生了访问控制的需求。</p>
<p style="color: #000000; ">例如，在一个大学中，有校长、副校长、训练部长、组织处长、科研处长、教保处长等不同的职位，在通常情况下，职位所赋予的权利是不变的，但在某个职位上工作的人可以根据需要调整。RBAC模型对组织内部的这些关系与访问控制要求给出了非常恰当的描述。</p>
<div class="sect2" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h3 class="title" style="color: #000000; font-weight: bold; margin-top: 10px; padding-top: 15px; font-size: 18px; "><a name="d0e4655" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.2.1.&nbsp;什么是角色</h3>
</div>
</div>
</div>
<p style="color: #000000; ">在RBAC模型中，工作职位被描述为&#8220;角色&#8221;，职位所具有的权利称为许可权。角色是RBAC模型中的核心概念，围绕这一概念实现了访问控制策略的形式化。特殊的用户集合和许可权的集合通过角色这一媒介在某个特定的时间内联系在一起。而角色确实相对稳定的，因为任何组织的分工、活动或功能一般是很少经常改变的。</p>
<p style="color: #000000; ">可以有不同的动机去构造一个角色。角色可以表示完成特殊任务的资格，例如，是一个医师还是一个药师；橘色也可以表示一种权利与责任，如工程监理。权利与责任不同于资格，例如，Alice可能有资格领导几个部门，但他只能被分配负责一个部门的领导。通过多个用户的轮转，角色可以映射特殊责任的分配，例如，医师可以转换为管理者。RBAC的模式及其实现可以方便的适应这种角色概念的多种表现。</p>
<p style="color: #000000; ">在实际的计算机信息系统中，角色由系统管理员定义，角色的增加与删除、角色权利的增加与减少等uanli工作都是由系统管理员完成的。根据RBAC的要求，用户被分配为某个特定角色后，就被赋予了该角色所拥有的权利和责任，这种授权方式是强制性的，用户只能被动的接受，不能自主的决定为角色增加或减少权力，也不能把自己角色的权利转首给用户，显然，这是一种非自主型的访问控制模式。</p>
</div>
<div class="sect2" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h3 class="title" style="color: #000000; font-weight: bold; margin-top: 10px; padding-top: 15px; font-size: 18px; "><a name="d0e4664" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.2.2.&nbsp;角色与用户组</h3>
</div>
</div>
</div>
<p style="color: #000000; ">角色与用户组有何区别？</p>
<p style="color: #000000; ">两者的主要区别是：用户组是用户的集合，但不可许可权的集合；而角色却同时具有用户集合和许可权集合的概念，角色的作用是把这两个集合联系在一起的中间媒介。</p>
<p style="color: #000000; ">在一个系统中，如果用户组的许可权和成员仅可以被系统安全员修改的话，在这种机制下，用户组的机制是非常接近于角色的概念的。角色也可以在用户组的基础上实现，这有利于保持原有系统中的控制关系。在这种情况下，角色相当于一个策略不见，与用户组的授权及责任关系相联系，而用户组是实现角色的机制，因此，两者之间是策略与实现机制之间的关系。</p>
</div>
</div>
<p style="color: #000000; ">虽然RBAC是一种无确定性质策略的模型，但它支持公认的安全原则：最小特权原则、责任分离原则和数据抽象原则。最小特权原则得到支持，是因为在RBAC模型中可以通过限制分配给角色权限的多少和大小来实现，分配给与某用户对应的角色的权限只要不超过该用户完成其任务的需要就可以了。</p>
<p style="color: #000000; ">责任分离原则的实现，是因为在RBAC模型中可以通过在完成敏感任务过程中分配两个责任上互相约束的两个角色来实现，例如在清查账目时，只需要设置财务管理员和会计连个角色参加就可以了。</p>
<p style="color: #000000; ">数据抽象是借助于抽象许可权这样的概念实现的，如在账目管理活动中，可以使用信用，借方等抽象许可权，而不是使用操作系统提供的读、写、执行等具体的许可权。但RBAC并不强迫实现这些原则，安全管理员可以允许配置 RBAC模型使它不支持这些原则。因此，RBAC支持数据抽象的程度与RBAC模型的实现细节有关。</p>
<p style="color: #000000; ">在20世纪90年代期间，大量的专家学者和专门研究单位对RBAC的概念进行了深入研究，先后提出了许多类型的RBAC模型，其中以美国George Mason大学信息安全技术实验室（LIST）提出的RBAC96模型最具有系统性，得到普遍的公认。</p>
<p style="color: #000000; ">RBAC96是一个模型族，其中包括RBAC<sub>0</sub>~RBAC<sub>3</sub>四个概念性模型。基本模型RBAC<sub>0</sub>定义了完全支持RBAC概念的任何系统的最低需求。RBAC<sub>1</sub>和RBAC<sub>2</sub>两者都包含RBAC<sub>0</sub>，但各自都增加了独立的特点，它们被成为高级模型。在RBAC<sub>1</sub>中增加了角色分级的概念，一个角色可以从另一个角色继承许可权。RBAC<sub>2</sub>增加了一些限制，强调在RBAC的不同组件中在配置方面的一些限制。</p>
<p style="color: #000000; ">RBAC<sub>1</sub>和RBAC<sub>2</sub>之间是不可比的。RBAC<sub>3</sub>被成为统一模型，它包含了RBAC<sub>1</sub>和RBAC<sub>2</sub>，利用传递性，也把RBAC<sub>0</sub>包括在内。这些模型构成了RBAC96模型族。图ap08-01表示了族内各模型间的关系，图ap08-02是RBAC<sub>3</sub>模型的概念示意图。</p>
<div class="figure" style="text-align: center; "><a name="d0e4730" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>
<div class="figure-contents">
<div><img src="http://family168.com/oa/springsecurity/shared/images/ap08-01.png" alt="RBAC96内各模型间的关系" /></div>
</div>
<p class="title" style="color: #000000; "><strong>图&nbsp;H.1.&nbsp;RBAC96内各模型间的关系</strong></p>
</div>
<br class="figure-break" />
<div class="figure" style="text-align: center; "><a name="d0e4734" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>
<div class="figure-contents">
<div><img src="http://family168.com/oa/springsecurity/shared/images/ap08-02.png" alt="RBAC96模型族" /></div>
</div>
<p class="title" style="color: #000000; "><strong>图&nbsp;H.2.&nbsp;RBAC96模型族</strong></p>
</div>
<br class="figure-break" />
<div class="sect1" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="color: #000000; font-weight: 500; margin-top: 10px; padding-top: 15px; font-size: 22px; clear: both; "><a name="d0e4738" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.3.&nbsp;基本模型RBAC<sub>0</sub></h2>
</div>
</div>
</div>
<p style="color: #000000; ">RBAC<sub>0</sub>的模型结构可以参看图ap08-02，但需要把途中的限制和角色等级两部分不包含在RBAC<sub>0</sub>模型中。该模型中包括用户（U）、角色（R）和许可权（P）的那个三类实体集合，此外还有一个会话集合（S）。</p>
<p style="color: #000000; ">其中用户代表一个组织的职员；角色表示该组织内部的一项任务的功能或某个工作职务，它也表示该角色成员所拥有的权利和职责；许可权是用户对系统中各课题访问或操作的权利，客体是指系统中的数据客体和资源客体，例如，目录、文件、记录、端口、设备、内存或子网都是客体。</p>
<p style="color: #000000; ">许可权因客体不同而不同，例如，对于目录、文件、设备、端口等类客体的操作权是读、写、执行等；对应数据库管理系统的客体是关系、元素、属性、记录、库文件、视图等，相应的操作权是Select、Update、Delete、Insert等；在会计应用中，相应的操作权是预算、信用、转移、创建和删除一个账目等。</p>
<p style="color: #000000; ">图ap08-02说明了关系用户指派UA（User Assignment）与许可权指派PA（Permission Assignment）的含义，两者都是多对多的关系。RBAC的关键就在于这两个关系，通过它们，一个用户将最终获得某些许可权并执行的权力。从图中角色的位置可以看粗，它是用户能够获取许可权的中间媒介。</p>
<p style="color: #000000; ">会话集中的每个会话表示一个用户可以对应多个角色（指向角色有两个箭头）。在某个会话的持续期间，一个用户可以同时激活多个角色，而该用户所获得的许可权是所有这些角色的所拥有许可权的并集。</p>
<p style="color: #000000; ">每个用户可以同时打开多个回话，每个会话都可以在工作站屏幕上用一个窗口显示。每个会话可以有不同活动角色的组合。RBAC<sub>0</sub>的这一特点将受到最小特权原则的限制。如果一个用户在一次会话中激活所有角色的权利超过该用户被允许的权利，将受到最小权利原则的限制。</p>
<div class="sect2" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h3 class="title" style="color: #000000; font-weight: bold; margin-top: 10px; padding-top: 15px; font-size: 18px; "><a name="d0e4764" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.3.1.&nbsp;RBAC<sub>0</sub>模型的形式定义如下</h3>
</div>
</div>
</div>
<p style="color: #000000; ">定义1 RBAC<sub>0</sub>模型由以下描述确定：</p>
<p style="color: #000000; ">U、R、P、S分别表示用户集合、角色集合、许可权集合和会话集合。</p>
<p style="color: #000000; ">PA P&#215;R表示许可权与角色之间多对多的指派关系。</p>
<p style="color: #000000; ">UA U&#215;R表示用户与角色之间多对多的指派关系。</p>
<p style="color: #000000; ">用户：S&#8594;U 每个会话s<sub>i</sub>到单个用户user(s<sub>i</sub>)的映射函数（常量代表会话的声明周期）。</p>
<p style="color: #000000; ">角色：S&#8594;2<sup>R</sup>&nbsp;每个会话s<sub>i</sub>到角色子集roles(s<sub>i</sub>) {r|user(s<sub>i</sub>, r')&#8712;UA}（能随时间改变）的映射函数，会话s<sub>i</sub>有许可权U<sub>r</sub>&#8712;roles(s<sub>i</sub>){p|(p,r')&#8712;PA}。</p>
<p style="color: #000000; ">在使用RBAC<sub>0</sub>模型时，应该要求每个许可权和每个用户至少应该被分配给一个角色。两个角色被分配的许可权完全一样是可能的，但仍是两个完全独立的角色，用户也有类似情况。角色可以适当的被看做是一种语义结构，是访问控制策略形式化的基础。</p>
<p style="color: #000000; ">RBAC<sub>0</sub>把许可权处理未非解释符号，因为其精确含义只能由实现确定且与系统有关。RBAC<sub>0</sub>中的许可权只能应用于数据和资源类客体，但不能应用于模型本身的组件。修改集合U、R、P和关系PA和UA的权限称为管理权限，后面将介绍RBAC的管理模型。因此，在RBAC<sub>0</sub>中假定只有安全管理员才能修改这些组件。</p>
<p style="color: #000000; ">会话是由单个用户控制的，在模型中，用户可以创建会话，并有选择的激活用户角色的某些子集。在一个会话中的角色的激活是由用户来决断的，会话的终止也是由用户初始化的。RBAC<sub>0</sub>不允许由一个会话去创建另一个会话，会话只能由用户创建。</p>
</div>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="color: #000000; font-weight: 500; margin-top: 10px; padding-top: 15px; font-size: 22px; clear: both; "><a name="d0e4833" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.4.&nbsp;角色分级模型RBAC<sub>1</sub></h2>
</div>
</div>
</div>
<p style="color: #000000; ">RBAC<sub>1</sub>模型的特色是模型中的角色是分级的，不同级别的角色由不同的职责与权力，橘色的级别形成偏序关系。图ap08-03说明了角色等级的概念。在途中位置处于较高处的角色的等级高于较低位置角色的等级。利用角色的分级概念可以限制继承的范围（scope）。</p>
<div class="figure" style="text-align: center; "><a name="d0e4843" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>
<div class="figure-contents">
<div><img src="http://family168.com/oa/springsecurity/shared/images/ap08-03.png" alt="角色分级的概念" /></div>
</div>
<p class="title" style="color: #000000; "><strong>图&nbsp;H.3.&nbsp;角色分级的概念</strong></p>
</div>
<br class="figure-break" />
<p style="color: #000000; ">图中项目成员的等级最低，角色程序员和测试员的等级都高于角色项目成员，并都可以继承项目成员的权利；角色管理员具有最高的等级，它可以继承测试员和程序员的权利。为了满足实际组织中一个角色不完全继承另一个角色所有权利与责任的需求，模型中引入了私有角色的概念，如图中的测试员'和程序员'分别是测试员和程序员的私有uese，它们可以分别继承测试员和程序员的某些专用权利。</p>
<p style="color: #000000; ">显然，角色的等级关系具有自反性（自己可以继承自己）、传递性（A继承B，B继承C，则A继承C）和反对称性（A继承B，B继承A，则A=B），因此是偏序关系，下面是RBAC<sub>1</sub>的形式定义。</p>
<div class="sect2" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h3 class="title" style="color: #000000; font-weight: bold; margin-top: 10px; padding-top: 15px; font-size: 18px; "><a name="d0e4854" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.4.1.&nbsp;定义2：RBAC<sub>1</sub>由以下内容确定</h3>
</div>
</div>
</div>
<p style="color: #000000; ">U、R、P、S分别表示用户集合、角色集合、许可权集合和会话集合。</p>
<p style="color: #000000; ">PA P&#215;R表示许可权与角色之间多对多的指派关系。</p>
<p style="color: #000000; ">UA U&#215;R表示用户与角色之间多对多的指派关系。</p>
<p style="color: #000000; ">RH R&#215;R是对R的偏序关系，称为角色等级或角色支配关系，也可用&#8805;符号表示。</p>
<p style="color: #000000; ">用户：S&#8594;U 每个会话s<sub>i</sub>到单个用户user(s<sub>i</sub>)的映射函数（常量代表会话的声明周期）。</p>
<p style="color: #000000; ">角色：S&#8594;2<sup>R</sup>&nbsp;每个会话s<sub>i</sub>到角色子集roles(s<sub>i</sub>) {r|(r'&#8805;r)[user(s<sub>i</sub>, r')&#8712;UA]}（能随时间改变）的映射函数，会话s<sub>i</sub>有许可权U<sub>r</sub>&#8712;roles(s<sub>i</sub>){p|(r''&#8804;r)[(p,r'')&#8712;PA]}。</p>
</div>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="color: #000000; font-weight: 500; margin-top: 10px; padding-top: 15px; font-size: 22px; clear: both; "><a name="d0e4899" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.5.&nbsp;限制模型RBAC<sub>2</sub></h2>
</div>
</div>
</div>
<p style="color: #000000; ">RBAC<sub>2</sub>模型是在RBAC<sub>0</sub>模型增加限制后形成的，它与RBAC<sub>1</sub>并不兼容。RBAC<sub>2</sub>定义如下：</p>
<div class="sect2" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h3 class="title" style="color: #000000; font-weight: bold; margin-top: 10px; padding-top: 15px; font-size: 18px; "><a name="d0e4918" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.5.1.&nbsp;定义3：</h3>
</div>
</div>
</div>
<p style="color: #000000; ">除了在RBAC<sub>0</sub>中增加了一些限制因素外，RBAC<sub>2</sub>未加改变的来自于RBAC<sub>0</sub>，这些限制是用于确定RBAC<sub>0</sub>中各个组件的值是否是可接受的，只有那些可接受的值才是允许的。</p>
<p style="color: #000000; ">RBAC<sub>2</sub>中引入的限制可以施加到RBAC<sub>0</sub>模型中的所有关系和组件上。RBAC<sub>2</sub>中的一个基本限制时互斥角色的限制，互斥角色是指各自权限尅一互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色，不能同时获得两个角色的使用权。</p>
<p style="color: #000000; ">例如，在审计活动中，一个角色不能同时被指派给会计角色和审计员角色。又如，在公司中，经理和副经理的角色也是互斥的，合同或支票只能由经理签字，不能由副经理签字。在为公司建立的RBAC<sub>2</sub>模型中，一个用户不能同时兼得经理和副经理两个角色。模型汇总的互斥限制可以支持权责分离原则的实现。</p>
<p style="color: #000000; ">更一般化而言，互斥限制可以控制在不同的角色组合中用户的成员关系是否是可接受的。例如，一个用户可以既是项目A的程序言，也可以是项目B的测试员和项目C的验收员，但他不能同时成为同一个项目中的这3个角色。RBAC<sub>2</sub>模型可以对这种情况进行限制。</p>
<p style="color: #000000; ">另一个用户指派限制的例子是一个角色限制其最大成员数，这被称为角色的基数限制。例如，一个单位的最高领导只能为1人，中层干部的数量也是有限的，一旦分配给这些角色的用户数超过了角色基数的限制，就不再接受新配给的用户了。</p>
<p style="color: #000000; ">限制角色的最小基数实现起来有些困难。例如，如果规定占用某个角色的最小用户数，问题是系统如何在任何时刻都能知道这些占用者中的某个人没有消失，如果消失的话，系统又应该如何去做。</p>
<p style="color: #000000; ">在为用户指派某个角色A时，在有的情况下要求该用户必须是角色B的一个成员，B角色成为角色A的先决角色。先决角色（Prerequisite Roles）的概念来自于能力和适应性。对先决绝对的限制成为先决限制。一个通俗的例子是，一个数学副教授应该从数学讲师中提拔，讲师是任副教授的先决角色。但在实际系统中，不兼容角色之间的先决限制的情况也会发生。</p>
<p style="color: #000000; ">在图ap08-03中，可以限制只有本项目的成员才有资格担任程序员的角色，通常在一个系统中，先决角色比新指派的角色的级别要低一些。但有的情况下，却要求只有当用户不是某个特殊角色时，才能担任另一个角色A。如，需要执行回避策略时需要这样做，例如，本课题组成员不应当是本项目成果鉴定委员会的成员。这类限制也可以推广到许可权方面。</p>
<p style="color: #000000; ">由于用户与角色的作用会与会话联系在一起，因此对会话也可以施加限制。例如，可以允许一个用户被指派给两个角色，但不允许在同一时间内把该用户在两个角色中都激活。另外，还可以限制一个用户在同一时间内可以激活的会话的数量，相应的，对该用户所激活的会话中所分配许可权的数量也可以施加限制。</p>
<p style="color: #000000; ">前面提到的继承概念也可以视为一种限制。被分配给低级别角色的权限，也必须分配给该角色的所有上级角色。或等价的，一个指派给较高级别的角色的用户必须指派给该角色的所有下级角色。因此从某种角度上讲，RBAC<sub>1</sub>模型是冗余的，它被包含在RBAC<sub>2</sub>中。但RBAC<sub>1</sub>模型比较简洁，用继承代替限制可使概念更清晰。</p>
<p style="color: #000000; ">实现时可以用函数来实现限制，当为用户指定角色或为角色分配权限时就调用这些函数进行检查，根据函数返回的结果决定分配是否满足限制的要求，通常只对那些可被有效检查和那些惯例性的一些简单限制给与实现，因为这些限制可以保持较长的时间。</p>
<p style="color: #000000; ">模型中的限制机制的有效性建立在每个用户只有唯一标识符的基础上，如果一个实际系统支持用户拥有多标识符，限制将会失效。同样，如果同一个操作可以有两个以上的许可权来比准，那么，RBAC系统也无法实施加强的基本限制和责任分离饿限制。因此要求用户与其标识符，许可与对应的操作之间一一对应。</p>
</div>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="color: #000000; font-weight: 500; margin-top: 10px; padding-top: 15px; font-size: 22px; clear: both; "><a name="d0e4981" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.6.&nbsp;统一模型RBAC<sub>3</sub></h2>
</div>
</div>
</div>
<p style="color: #000000; ">RBAC<sub>3</sub>把RBAC<sub>1</sub>和RBAC<sub>2</sub>组合在一起，提供角色的分级和继承的能力。但把这两种概念组合在一起也引起一些新问题。</p>
<p style="color: #000000; ">限制也可以应用于角色等级本身，由于角色间的等级关系满足偏序关系，这种限制对模型而言是本质性的，可能会影响这种偏序关系。例如，附加的限制可能会限制一个给定角色的应有的下级角色的数量。</p>
<p style="color: #000000; ">两个或多个角色由可能被限制成没有公共的上级角色或下级角色。这些类型的限制在概念角色等级的权力已经被分散化的情况下是有用哦，但是安全主管却希望对所有允许这些改变的方法加以限制。</p>
<p style="color: #000000; ">在限制和角色的等级之间也会产生敏感的相互影响。在图ap08-03的环境中，一个项目成员不允许同时担任程序言与测试员的角色，但项目管理员所处的位置显然是违反了该限制。在某种情况i下由高等级的角色违反这种限制是可接受的，但在其他情况下又不允许这种违反现象发生。</p>
<p style="color: #000000; ">从严格性的角度来讲，模型的规则不应该是一些情况下不允许而在另一情况下是允许的。类似的情况也会发生在对基数的限制上。假定限制一个用户之多能分配给一个橘色，那么对图中的测试员的一个指派能够未被这种限制吗？换句话说，基数限制是不是只能用于直接成员，是否也能应用于继承成员上？</p>
<p style="color: #000000; ">私有角色的概念可以说明这些限制是有用的。同样在图ap08-03的环境中，可以把测试员'，程序员'和项目管理员3个角色说明为互斥的，它们处于同一等级，没有共同的上级角色，所以管理员角色没有违反互斥限制。通常私有角色和其他角色之间没有公共上级角色，因为它们是这个等级的最大元素，所以私有角色之间互斥关系可以无冲突的定义。</p>
<p style="color: #000000; ">诸私有角色之间的相同部分可以被说明为具有0成员的最大技术限制。根据这种方法，测试员必须被指派给测试员'这个角色，而测试员角色就作为与管理员角色共享许可权的一种工具。</p>
<p style="color: #000000; ">在前面的讨论中，我们都假设RBAC的所有组件都是由单个的安全员来管理里。但是，对于一个大系统而言，系统中的角色可能成百上千，再加上它们之间的复杂关系，使得集中式的管理任务成为非常可怕的工作，因此通常由几个管理员小组来完成。能否用RBAC管理自己本身呢？</p>
<p style="color: #000000; ">RBAC的管理模型示于图ap08-04。该图的上半部分本质上与图ap08-02相同，图中的限制时针对所有成分的，图的下半部分是对上半部分关于管理角色AR和管理许可权AP与正规角色集R和许可权集P是分别不可相交的。这个模型显示，正规许可权只能分配给正规角色（RBAC模型中定义的角色），管理许可权只能分配给管理角色。</p>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="color: #000000; font-weight: 500; margin-top: 10px; padding-top: 15px; font-size: 22px; clear: both; "><a name="d0e5013" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.7.&nbsp;定义4</h2>
</div>
</div>
</div>
<p style="color: #000000; ">管理许可权AP有权改变组成RBAC<sub>0</sub>、RBAC<sub>1</sub>、RBAC<sub>2</sub>或RBAC<sub>3</sub>的所有成分，但正规许可权P不能。管理许可权与正规许可权不相交，即AP&#8745;P=。管理许可权和正规许可权只能分别分配给管理角色AR和正规角色R，并且AR&#8745;R=。</p>
<div class="figure" style="text-align: center; "><a name="d0e5030" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>
<div class="figure-contents">
<div><img src="http://family168.com/oa/springsecurity/shared/images/ap08-04.png" alt="管理模型示意图" /></div>
</div>
<p class="title" style="color: #000000; "><strong>图&nbsp;H.4.&nbsp;管理模型示意图</strong></p>
</div>
<br class="figure-break" />
<p style="color: #000000; ">在图ap08-04的上半部可以对应RBAC<sub>0</sub>、RBAC<sub>1</sub>、RBAC<sub>2</sub>和RBAC<sub>3</sub>模型，类似地下半部可以对应ARBAC<sub>0</sub>、ARBAC<sub>1</sub>、ARBAC<sub>2</sub>和ARBAC<sub>3</sub>模型，此处的A表示&#8220;管理&#8221;。ARBAC<sub>0</sub>~ARBAC<sub>3</sub>形成了RBAC的管理模型族，成为ARBAC97。通常我们期望管理模型比RBAC模型本身简单一些，因此可以利用ARBAC<sub>0</sub>管理RBAC<sub>3</sub>，而不是用ARBAC<sub>3</sub>去管理RBAC<sub>0</sub>模型。</p>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="color: #000000; font-weight: 500; margin-top: 10px; padding-top: 15px; font-size: 22px; clear: both; "><a name="d0e5078" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.8.&nbsp;在ARBAC97中，包括三种组件</h2>
</div>
</div>
</div>
<p style="color: #000000; ">URA87：用户-角色指派。该组件涉及用户-指派关系UA的管理，该关系把用户与角色关联在一起。对该关系的修改权由管理角色控制，这样，管理角色中的成员有权管理正规角色中的成员关系。把一个用户指定为管理角色是在URA97以外完成的，并假定是由安全员完成的。</p>
<p style="color: #000000; ">PRA97：许可权-角色指派。该组件涉及角色-许可权的指派与撤销。从角色观点来看，用户和许可权有类似的特点，它们都是由角色联系在一起的实在实体。因此，可以把PRA97看做是URA97的对偶组件。</p>
<p style="color: #000000; ">RRA97：角色-角色指派。为了便于对角色的管理，对角色又进行了分类。该组件涉及3类角色，它们是：</p>
<div class="orderedlist">
<ol type="1" style="color: #000000; ">
    <li style="color: #000000; ">
    <p style="color: #000000; ">能力（Abilities）角色——进以许可权和其他能力做成成员的角色。</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">组（Groups）角色——仅以用户和其他组为成员的一类角色。</p>
    </li>
    <li style="color: #000000; ">
    <p style="color: #000000; ">UP-角色——表示用户与许可权的角色，这类角色对其成员没有限制，成员可以使用户、角色、许可权、能力、组或其他UP-角色。</p>
    </li>
</ol>
</div>
<p style="color: #000000; ">区别这三类模型的主要原因是可以应用不同的管理模型去建立不同类型角色之间的关系。区分的动因首先是对能力的考虑，能力是许可权的集合，可以把该集合中所有许可权作为一个单位指派给一个角色。类似的，组是用户的集合，可以把该集合中所有许可权作为一个单位指派给一个角色。组和能力角色都似乎可以划分等级的。</p>
<p style="color: #000000; ">在一个UP-角色中，一个能力是否是其的一个成员是由UP-角色是否支配该能力决定的，如果支配就是，否则就不是。相反的，如果一个UP-角色被一个组角色支配，则这个组就是该UP-角色的成员。</p>
<p style="color: #000000; ">对ARBAC97管理模型的研究还在继续之中，对能力-指派与组-指派的形式化已基本完成，对UP-角色概念的研究成果还未形式化。</p>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="color: #000000; font-weight: 500; margin-top: 10px; padding-top: 15px; font-size: 22px; clear: both; "><a name="d0e5103" style="color: #003399; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>H.9.&nbsp;RBAC模型的特点</h2>
</div>
</div>
</div>
<p style="color: #000000; ">符合各类组织机构的安全管理需求。RBAC模型支持最小特权原则、责任分离原则，这些原则是任何组织的管理工作都需要的。这就使得RBAC模型由广泛的应用前景。</p>
<p style="color: #000000; ">RBAC模型支持数据抽象原则和继承概念。由于目前主流程序设计语言都支持面向对象技术，RBAC的这一特性便于在实际系统中应用实现。</p>
<p style="color: #000000; ">模型中概念与实际系统紧密对应。RBAC模型中的角色、用户和许可权等概念都是实际系统实际存在的实体，便于设计者建立现存的或待建系统的RBAC模型。</p>
<p style="color: #000000; ">RBAC模型仍素具访问控制类模型，本质是对访问矩阵模型的扩充，能够很好的解决系统中主体对客气的访问控制访问权力的分配与控制问题，但模型没有提供信息流控制机制，还不能完全满足信息系统的全部安全需求。</p>
<p style="color: #000000; ">虽然也有人认为可以用RBAC去仿真基于格的访问控制系统（LBAC），但RBAC对系统内部信息流的控制不是直观的，需要模型外的功能支持。有关信息流控制的作用域原理将在第四章介绍，届时读者可以进一步理解RBAC模型的这种缺陷。</p>
<p style="color: #000000; ">RBAC模型没有提供操作顺序控制机制。这一缺陷使得RBAC模型很难应用关于那些要求有严格操作次序的实体系统，例如，在购物控制系统中要求系统对购买步骤的控制，在客户未付款之前不应让他把商品拿走。RBAC模型要求把这种控制机制放到模型外去实现。</p>
<p style="color: #000000; ">RBAC96模型和RBAC97uanli模型都故意回避了一些问题，如是否允许一个正在会话的用户再创建一个新会话，管理模型不支持用户和许可权的增加与删除等管理工作灯，都是需要解决而未提供支持的问题，这些问题都还在研究中，但是如果缺少这些能力的支持，模型的而应用也将受到影响。相反，访问绝阵模型提供了用户和权限修改功能，因此，不能说RBAC模型能够完全取代访问矩阵模型。</p>
</div>
</span>
<img src ="http://www.blogjava.net/yifeng/aggbug/291655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2009-08-18 17:18 <a href="http://www.blogjava.net/yifeng/archive/2009/08/18/291655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用IntelliJ IDEA自动在线升级服务</title><link>http://www.blogjava.net/yifeng/archive/2009/02/05/253428.html</link><dc:creator>忆风</dc:creator><author>忆风</author><pubDate>Thu, 05 Feb 2009 10:03:00 GMT</pubDate><guid>http://www.blogjava.net/yifeng/archive/2009/02/05/253428.html</guid><wfw:comment>http://www.blogjava.net/yifeng/comments/253428.html</wfw:comment><comments>http://www.blogjava.net/yifeng/archive/2009/02/05/253428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yifeng/comments/commentRss/253428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yifeng/services/trackbacks/253428.html</trackback:ping><description><![CDATA[IDEA 8.1会添加自动在线升级服务（auto update)，也就是自动升级IDEA本身。下面我们就讲述一下如何使用这一特性，这样会让IDEA的版本升级更加简单。在本文中，假定我已经安装了IDEA EAP 9684版本，而目前IDEA的最新EAP版本为9712。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1. 选择Updates：打开IDEA的控制面板，选择&#8220;Updates&#8221;，然后点击&#8220;Check Now&#8221;按钮：<br />
<img title="选择update" style="margin: 5px; width: 829px; height: 390px" height="390" alt="选择update" src="http://www.intellij.org.cn/portal/images/stories/artciles/auto_update/auto_update_1.png" width="829" align="bottom" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 下载Patch：在&#8220;Update Info&#8221;对话框中会出现升级信息：如果JetBrains站点提供目前使用版本到最新版本的升级补丁，就会提示你下载补丁进行升级，否则你就要去下载完整IDEA安装包啦。<br />
<img title="下载patch" style="margin: 5px; width: 898px; height: 397px" height="397" alt="下载patch" src="http://www.intellij.org.cn/portal/images/stories/artciles/auto_update/auto_update_2.png" width="898" align="bottom" /><br />
&nbsp;&nbsp;&nbsp;&nbsp; 3. 安装Patch：点击&#8221;Download Patch and Shutdown&#8220;后，IDEA就会下载升级补丁，同时重新启动IDEA，在重启动IDEA的过程中，会提示你是否安装升级补丁，你只需点击&#8221;Install Patch&#8220;就可以啦，最后IDEA会提示你手动重新启动IDEA。<br />
<img title="安装patch" style="margin: 5px; width: 502px; height: 318px" height="318" alt="安装patch" src="http://www.intellij.org.cn/portal/images/stories/artciles/auto_update/auto_update_3.png" width="502" align="bottom" /><br />
&nbsp;&nbsp;&nbsp;&nbsp; 整个升级过程（3步）还是比较流畅的，这样升级IDEA就方便很多啦。IDEA的安装包也越来越大（目前为128M），通过这种方式升级IDEA不需要再下载安装包，安装也便捷，且IDEA的相关配置也不会更改。<strong>注意：</strong>如果你通过代理服务器进行升级，可能代理服务器保留缓存，导致你看不到最新的更新信息，要注意一下。 <!-- JOM COMMENT START -->
<img src ="http://www.blogjava.net/yifeng/aggbug/253428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yifeng/" target="_blank">忆风</a> 2009-02-05 18:03 <a href="http://www.blogjava.net/yifeng/archive/2009/02/05/253428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>