??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲高清免费视频,色视频www在线播放,男女羞羞视频在线观看http://www.aygfsteel.com/frostwood/zh-cnFri, 20 Jun 2025 00:51:50 GMTFri, 20 Jun 2025 00:51:50 GMT60[转]Linux下如何用VI~辑?/title><link>http://www.aygfsteel.com/frostwood/archive/2010/01/16/309742.html</link><dc:creator>Alfred. Yao</dc:creator><author>Alfred. Yao</author><pubDate>Fri, 15 Jan 2010 17:06:00 GMT</pubDate><guid>http://www.aygfsteel.com/frostwood/archive/2010/01/16/309742.html</guid><wfw:comment>http://www.aygfsteel.com/frostwood/comments/309742.html</wfw:comment><comments>http://www.aygfsteel.com/frostwood/archive/2010/01/16/309742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/frostwood/comments/commentRss/309742.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/frostwood/services/trackbacks/309742.html</trackback:ping><description><![CDATA[转蝲自:http://blog.csdn.net/ourife/archive/2007/06/07/1641918.aspx<br /> Author: keith<br /> <br /> <h1 class="title_txt">Linux下如何用Vi~辑? <cite class="fav_csdnstylebykimi"><a href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();" class="fav_csdnstylebykimi" title="收藏到我的网摘中Qƈ分nl我的朋?>收藏</a> </cite> </h1> <div id="wmqeeuq" class="blogstory"> <script type="text/javascript"> document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length > 300) { text = text + "\r\n\n本文来自CSDN博客Q{载请标明出处Q? + location.href; clipboardData.setData("text", text); } }, 100); } } </script> <script type="text/javascript"> function StorePage() { d = document; t = d.selection ? (d.selection.type != 'None' ? d.selection.createRange().text : '') : (d.getSelection ? d.getSelection() : ''); void (keyit = window.open('http://www.365key.com/storeit.aspx?t=' + escape(d.title) + '&u=' + escape(d.location.href) + '&c=' + escape(t), 'keyit', 'scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes')); keyit.focus(); }</script> <h3><font size="2">vi 的工作模?/font></h3> <p><font size="2">Vi 在初始启动后首先q入~辑模式Q这时用户可以利用一些预先定义的按键来移动光标、删除文字? 复制或粘贴文字等。这些按键均是普通的字符Q例?l 是向右移动光标,相当于向右箭头键Qk ? 向下Ud光标Q相当于向下头键。在~辑模式下,用户q可以利用一些特D按键选定文字Q然?再进行删除、或复制{操作?</font></p> <p><font size="2">当用户在~辑模式下键?i, a, o {命令之后,可进入插入模式;键入 : 可进入命名模式?在插入模式下Q用户随后输入的Q除 Esc 之外的Q何字W均被看成是插入到~辑~冲Z 的字W。按 Esc 之后Q从插入模式切换到编辑模式?</font></p> <p><font size="2">在命令模式,Vi 把光标挪到屏幕的最下方Qƈ在第一个字W的位置昄一?:Q冒P。这Ӟ 用户可以键入一些命令。这些命令可用来保存文g、读取文件内宏V执?Shell 命o、设|?Vi 参数、以正则表达式的方式查找字符串或替换字符串等?</font></p> <h3><font size="2"> ~辑模式</font></h3> <h4><font size="2">1. Ud光标</font></h4> <pre><font size="2">要对正文内容q行修改Q首先必L光标Ud到指定位|。移动光标的最单的方式是按键盘的上、下、左?br /> 右箭头键。除了这U最原始的方法之外,用户q可以利?vi 提供的众多字W组合键Q在正文中移动光标,q?br /> 速到达指定的行或列,实现定位。例如:<br /> k、j、h、l 功能分别{同于上、下、左、右头?br /> Ctrl+b 在文件中向上Ud一(相当?PageUp 键)<br /> Ctrl+f 在文件中向下Ud一(相当?PageDown 键)<br /> H 光标移到屏q的最上行QHighestQ?br /> nH 光标移到屏q的W?n ?br /> 2H 光标移到屏q的W?2 ?br /> M 光标移到屏q的中间QMiddleQ?br /> L 光标移到屏q的最下行QLowestQ?br /> nL 光标移到屏q的倒数W?n ?br /> 3L 光标移到屏q的倒数W?3 ?br /> w 在指定行内右Ud标,C一个字的开?br /> e 在指定行内右Ud标,C个字的末?br /> b 在指定行内左Ud标,到前一个字的开?br /> 0 数字0Q左Ud标,到本行的开?br /> $ 右移光标Q到本行的末?br /> ^ Ud光标Q到本行的第一个非I字W?br /> </font></pre> <h4><font size="2">2. 替换和删?/font></h4> <pre><font size="2">光标定位于文g内指定位|后Q可以用其他字符来替换光标所指向的字W,或从当前光标位置删除一个或?br /> 个字W。例如:<br /> rc ?c 替换光标所指向的当前字W?br /> nrc ?c 替换光标所指向的前 n 个字W?br /> 5rc ?c 替换光标所指向的前 5 个字W?br /> x 删除光标所指向的当前字W?br /> nx 删除光标所指向的前 n 个字W?br /> 3x 删除光标所指向的前 3 个字W?br /> dw 删除光标右侧的字<br /> ndw 删除光标右侧?n 个字<br /> 3dw 删除光标右侧?3 个字<br /> db 删除光标左侧的字<br /> ndb 删除光标左侧?n 个字<br /> 5db 删除光标左侧?5 个字<br /> dd 删除光标所在行Qƈ去除I隙<br /> ndd 删除 n 行内容,q去除空?br /> 3dd 删除 3 行内容,q去除空?br /> </font></pre> <h4><font size="2">3. _脓和复?/font></h4> <pre><font size="2">从正文中删除的内容(如字W、字或行Qƈ没有真正丢失Q而是被剪切ƈ复制C一个内存缓冲区中。用户可<br /> 其_脓到正文中的指定位|。完成这一操作的命令是Q?br /> p 写字母 pQ将~冲区的内容_脓到光标的后面<br /> P 大写字母 PQ将~冲区的内容_脓到光标的前面<br /> 如果~冲区的内容是字W或字,直接_脓在光标的前面或后面;如果~冲区的内容为整行正文,则粘贴在当前<br /> 光标所在行的上一行或下一行?br /> 注意上述两个命o中字母的大小写。vi ~辑器经总一对大、小写字母(?p ?PQ来提供一对相似的功能<br /> 。通常Q小写命令在光标的后面进行操作,大写命o在光标的前面q行操作?br /> 有时需要复制一D|文到C|,同时保留原有位置的内宏V这U情况下Q首先应当把指定内容复制Q而不?br /> 剪切Q到内存~冲区。完成这一操作的命令是Q?br /> yy 复制当前行到内存~冲?br /> nyy 复制 n 行内容到内存~冲?br /> 5yy 复制 5 行内容到内存~冲?br /> </font></pre> <h4><font size="2">4. 搜烦字符?/font></h4> <pre><font size="2">和许多先q的~辑器一Pvi 提供了强大的字符串搜索功能。要查找文g中指定字或短语出现的位置Q可?br /> ?vi 直接q行搜烦Q而不必以手工方式q行。搜索方法是Q键入字W?/ Q后面跟以要搜烦的字W串Q然?br /> 按回车键。编辑程序执行正向搜索(x文g末尾方向Q,q在扑ֈ指定字符串后Q将光标停到该字W串?br /> 开_键入 n 命o可以l箋执行搜烦Q找一字符串下ơ出现的位置。用字符 ? 取代 / Q可以实现反?br /> 搜烦Q朝文g开头方向)。例如:<br /> /str1 正向搜烦字符?str1<br /> n l箋搜烦Q找?str1 字符串下ơ出现的位置<br /> ?str2 反向搜烦字符?str2<br /> 无论搜烦方向如何Q当到达文g末尾或开头时Q搜索工作会循环到文件的另一端ƈl箋执行?br /> </font></pre> <h4><font size="2">5. 撤销和重?/font></h4> <pre><font size="2">在编辑文档的q程中,为消除某个错误的~辑命o造成的后果,可以用撤消命令。另外,如果用户希望在新<br /> 的光标位|重复前面执行过的编辑命令,可用重复命o?br /> u 撤消前一条命令的l果<br /> . 重复最后一条修Ҏ文的命o<br /> </font></pre> <h4><font size="2">6. 文本选中</font></h4> <p><font size="2">vi 可进入到一U成?Visual 的模式,在该模式下,用户可以用光标移动命令可视地选择文本Q然后再 执行其他~辑操作Q例如删除、复制等?v 字符选中命o V 行选中命o </font></p> <h3><font size="2">插入模式</font></h3> <h4><font size="2">1. q入插入模式</font></h4> <pre><font size="2">在编辑模式下正确定位光标之后Q可用以下命令切换到插入模式Q?br /> i 在光标左侧输入正?br /> a 在光标右侧输入正?br /> o 在光标所在行的下一行增L?br /> O 在光标所在行的上一行增L?br /> I 在光标所在行的开头输入正?br /> A 在光标所在行的末输入正?br /> 上面介绍了几U切换到插入模式的简单方法。另外还有一些命令,它们允许在进入插入模式之前首先删MD?br /> 正文Q从而实现正文的替换。这些命令包括:<br /> s 用输入的正文替换光标所指向的字W?br /> ns 用输入的正文替换光标右侧 n 个字W?br /> cw 用输入的正文替换光标右侧的字<br /> ncw 用输入的正文替换光标右侧?n 个字<br /> cb 用输入的正文替换光标左侧的字<br /> ncb 用输入的正文替换光标左侧?n 个字<br /> cd 用输入的正文替换光标的所在行<br /> ncd 用输入的正文替换光标下面?n ?br /> c$ 用输入的正文替换从光标开始到本行末尾的所有字W?br /> c0 用输入的正文替换从本行开头到光标的所有字W?br /> </font></pre> <h4><font size="2">2. 退出插入模?/font></h4> <pre><font size="2">退出插入模式的Ҏ是,?ESC 键或l合键Ctrl+[ ?br /> </font></pre> <h3><font size="2">1.6.4  命o模式</font></h3> <p><font size="2">?vi 的命令模式下Q可以用复杂的命o。在~辑模式下键?#8220;:”Q光标就跛_屏幕最后一行,q在 那里昄冒号Q此时已q入命o模式。命令模式又U?#8220;末行模式”Q用戯入的内容均显C在屏幕的最?一行,按回车键Qvi 执行命o?</font></p> <h4><font size="2">1. 退出命?/font></h4> <pre><font size="2">在编辑模式下可以?ZZ 命o退?vi ~辑E序Q该命o保存Ҏ文所作的修改Q覆盖原始文件。如果只需?br /> 退出编辑程序,而不打算保存~辑的内容,可用下面的命令:<br /> : q 在未作修改的情况下退?br /> : q! 攑ּ所有修改,退出编辑程?br /> </font></pre> <h4><font size="2">2. 行号与文?/font></h4> <pre><font size="2">~辑中的每一行正文都有自q行号Q用下列命o可以Ud光标到指定行Q?br /> : n 光标移到第 n ?br /> 命o模式下,可以规定命o操作的行可围。数值用来指定绝对行P字符“.”表示光标所在行的行P字符<br /> W?#8220;___FCKpd___8rdquo;表示正文最后一行的行号Q简单的表达式,例如“.+5”表示当前行往下的W?5 行。例如:<br /> :345 光标移到第 345 ?br /> :345w file 第 345 行写?file 文g<br /> :3,5w file 第 3 行至W?5 行写?file 文g<br /> :1,.w file 第 1 行至当前行写?file 文g<br /> :.,$w file 当前行x后一行写?file 文g<br /> :.,.+5w file 从当前行开始将 6 行内容写?file 文g<br /> :1,$w file 所有内容写?file 文gQ相当于 :w file 命o<br /> 在命令模式下Q允总文g中读取正文,或将正文写入文g。例如:<br /> :w 编辑的内容写入原始文gQ用来保存编辑的中间l果<br /> :wq 编辑的内容写入原始文gq出编辑程序(相当?ZZ 命oQ?br /> :w file 编辑的内容写入 file 文gQ保持原有文件的内容不变<br /> :a,bw file 第 a 行至W?b 行的内容写入 file 文g<br /> :r file d file 文g的内容,插入当前光标所在行的后?br /> :e file ~辑新文?file 代替原有内容<br /> :f file 当前文仉命名?file<br /> :f 打印当前文g名称和状态,如文件的行数、光标所在的行号{?br /> </font></pre> <h4><font size="2">3. 字符串搜?/font></h4> <pre><font size="2">l出一个字W串Q可以通过搜烦该字W串到达指定行。如果希望进行正向搜索,待搜烦的字W串|于两个“<br /> /”之间Q如果希望反向搜索,则将字符串放在两?#8220;?”之间。例如:<br /> :/str/ 正向搜烦Q将光标Ud下一个包含字W串 str 的行<br /> :?str? 反向搜烦Q将光标Ud上一个包含字W串 str 的行<br /> :/str/w file 正向搜烦Qƈ第一个包含字W串 str 的行写入 file 文g<br /> :/str1/,/str2/w file 正向搜烦Qƈ包含字W串 str1 的行臛_含字W串 str2 的行?br /> ?file 文g<br /> </font></pre> <h4><font size="2">4. 正文替换</font></h4> <pre><font size="2">利用 :s 命o可以实现字符串的替换。具体的用法包括Q?br /> :s/str1/str2/ 用字W串 str2 替换行中首次出现的字W串 str1<br /> :s/str1/str2/g 用字W串 str2 替换行中所有出现的字符?str1<br /> :.,$ s/str1/str2/g 用字W串 str2 替换正文当前行到末尾所有出现的字符?str1<br /> :1,$ s/str1/str2/g 用字W串 str2 替换正文中所有出现的字符?str1<br /> :g/str1/s//str2/g 功能同上<br /> 从上q替换命令可以看刎ͼg 攑֜命o末尾Q表C对搜烦字符串的每次出现q行替换Q不?gQ表C只Ҏ?br /> 字符串的首次出现q行替换Qg 攑֜命o开_表示Ҏ文中所有包含搜索字W串的行q行替换操作?br /> </font></pre> <h4><font size="2">5. 删除正文</font></h4> <pre><font size="2">在命令模式下Q同样可以删除正文中的内宏V例如:<br /> :d 删除光标所在行<br /> :3d 删除 3 ?br /> :.,$d 删除当前行至正文的末?br /> :/str1/,/str2/d 删除从字W串 str1 ?str2 的所有行<br /> </font></pre> <h3><font size="2">6. 恢复文g</font></h3> <pre><font size="2">vi 在编辑某个文件时Q会另外生成一个时文Ӟq个文g的名U通常?. 开_q以 .swp l尾。vi ?br /> 正常退出时Q该文g被删除,若意外退出,而没有保存文件的最C改内容,则可以用恢复命令:<br /> :recover 恢复文g<br /> 也可以在启动 vi 时利?-r 选项?br /> </font></pre> <p><font size="2">选项讄</font></p> <pre><font size="2">为控制不同的~辑功能Qvi 提供了很多内部选项。利?:set 命o可以讄选项。基本语法ؓQ?br /> :set option 讄选项 option<br /> 常见的功能选项包括Q?br /> autoindent 讄该选项Q则正文自动~进<br /> ignorecase 讄该选项Q则忽略规则表达式中大小写字母的区别<br /> number 讄该选项Q则昄正文行号<br /> ruler 讄该选项Q则在屏q底部显C光标所在行、列的位|?br /> tabstop 讄?Tab 键蟩q的I格数。例?:set tabstop=nQn 默认gؓ 8<br /> mk 选项保存在当前目录的 .exrc 文g?br /> </font></pre> <h3><font size="2">shell 切换</font></h3> <pre><font size="2">在编辑正文时Q利?vi 命o模式下提供的 shell 切换命oQ无退?vi 卛_执行 Linux 命oQ十?br /> 方便。语法格式ؓQ?br /> :! command 执行?shell 命o command 后回?vi<br /> 另外Q在~辑模式下,键入 K Q可命o vi 查找光标所在单词的手册,相当于运?man命o?/font></pre> <h3><font size="2">vim ?gvim 的高U特?/font></h3> <p><font size="2">Vim 代表 Vi IMprovedQ如同其名称所暗示的那PVim 作ؓ标准 UNIX pȝ vi ~辑器的提高版而存在?Vim 除提供和 vi ~辑器一样强大的功能外,q提供有多恢复、命令行历史以及命o及文件名补全{?功能?</font></p> <p><font size="2">gvim ?vi ?X Window 版本Q该版本支持鼠标选中Q一些高U光标移动功能,q且带有菜单和工h钮?</font></p> </div> <br /> <br /> <img src ="http://www.aygfsteel.com/frostwood/aggbug/309742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/frostwood/" target="_blank">Alfred. Yao</a> 2010-01-16 01:06 <a href="http://www.aygfsteel.com/frostwood/archive/2010/01/16/309742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转蝲]Java设计模式使用率排行榜http://www.aygfsteel.com/frostwood/archive/2010/01/06/308485.htmlAlfred. YaoAlfred. YaoWed, 06 Jan 2010 11:25:00 GMThttp://www.aygfsteel.com/frostwood/archive/2010/01/06/308485.htmlhttp://www.aygfsteel.com/frostwood/comments/308485.htmlhttp://www.aygfsteel.com/frostwood/archive/2010/01/06/308485.html#Feedback0http://www.aygfsteel.com/frostwood/comments/commentRss/308485.htmlhttp://www.aygfsteel.com/frostwood/services/trackbacks/308485.html无意间发现这个排行榜Q有Ҏ?.. (修改了一些模式名U?

[转蝲自竹W炒?Hedong’s blog November 24, 2009]

Java设计模式使用率爬行榜

使用频率 所属类?/td> 模式名称 模式 单定?/td>
5 创徏?/td> Singleton 单例模式 保证一个类只有一个实例,q提供一个访问它的全局讉K炏V?/td>
5 l构?/td> Composite 复合模式 对象组合成树Şl构以表C部分整体的关系QComposite使得用户对单个对象和l合对象的用具有一致性?/td>
5 l构?/td> FASADE 面模?/td> 为子pȝ中的一l接口提供一致的界面Qfasade提供了一高层接口Q这个接口得子pȝ更容易用?/td>
5 l构?/td> Proxy 代理 为其他对象提供一U代理以控制对这个对象的讉K
5 行ؓ?/td> Iterator q代?/td> 提供一个方法顺序访问一个聚合对象的各个元素Q而又不需要暴露该对象的内部表C?/td>
5 行ؓ?/td> Observer 观察?/td> 定义对象间一对多的依赖关p,当一个对象的状态发生改变时Q所有依赖于它的对象都得到通知自动更新?/td>
5 行ؓ?/td> Template Method 模板Ҏ 定义一个操作中的算法的骨架Q而将一些步骤gq到子类中,TemplateMethod使得子类可以不改变一个算法的l构卛_以重定义该算法得某些特定步骤?/td>
4 创徏?/td> Abstract Factory 抽象工厂 提供一个创Zpd相关或相互依赖对象的接口Q而无L定它们的具体cR?/td>
4 创徏?/td> Factory Method 工厂Ҏ 定义一个用于创建对象的接口Q让子类军_实例化哪一个类QFactory Method使一个类的实例化延迟C子类?/td>
4 l构?/td> Adapter 适配?/td> 一cȝ接口转换成客户希望的另外一个接口,Adapter模式使得原本׃接口不兼容而不能一起工作那些类可以一起工作?/td>
4 l构?/td> Decrator 装饰模式 动态地l一个对象增加一些额外的职责Q就增加的功能来_Decorator模式相比生成子类更加灉|?/td>
4 行ؓ?/td> Command 指o模式 一个请求封装ؓ一个对象,从而你可以用不同的请求对客户q行参数化,对请求排队和记录h日志Q以及支持可撤销的操作?/td>
4 行ؓ?/td> State 状态模?/td> 允许对象在其内部状态改变时改变他的行ؓ。对象看hg改变了他的类?/td>
4 行ؓ?/td> Strategy {略模式 定义一pd的算法,把他们一个个装hQƈ使他们可以互相替换,本模式得算法可以独立于使用它们的客戗?/td>
3 创徏?/td> Builder 生成?/td> 一个复杂对象的构徏与他的表C相分离Q得同L构徏q程可以创徏不同的表C?/td>
3 l构?/td> Bridge 桥模?/td> 抽象部分与它的实现部分相分,使他们可以独立的变化?/td>
3 行ؓ?/td> Chain of Responsibility 职责?/td> 使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系
2 创徏?/td> Prototype 原型 用原型实例指定创建对象的U类Qƈ且通过拯q些原型来创建新的对象?/td>
2 l构?/td> Flyweight 享元  
2 行ؓ?/td> Mediator 中介?/td> 用一个中介对象封装一些列的对象交互?/td>
2 行ؓ?/td> Visitor 讉K?/td> 表示一个作用于某对象结构中的各元素的操作,它你可以在不改变各元素cȝ前提下定义作用于q个元素的新操作?/td>
1 行ؓ?/td> Interpreter 解释?/td> l定一个语aQ定义他的文法的一个表C,q定义一个解释器Q这个解释器使用该表C来解释语言中的句子?/td>
1 行ؓ?/td> Memento 备忘?/td> 在不破坏对象的前提下Q捕获一个对象的内部状态,q在该对象之外保存这个状态?/td>

转自2004q?期《CSDN开发高手?/p>

Alfred. Yao 2010-01-06 19:25 发表评论
]]>
Singleton设计模式再研I?/title><link>http://www.aygfsteel.com/frostwood/archive/2010/01/06/308475.html</link><dc:creator>Alfred. Yao</dc:creator><author>Alfred. Yao</author><pubDate>Wed, 06 Jan 2010 09:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/frostwood/archive/2010/01/06/308475.html</guid><wfw:comment>http://www.aygfsteel.com/frostwood/comments/308475.html</wfw:comment><comments>http://www.aygfsteel.com/frostwood/archive/2010/01/06/308475.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/frostwood/comments/commentRss/308475.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/frostwood/services/trackbacks/308475.html</trackback:ping><description><![CDATA[<p>在Java~程中,Singleton 模式可算得上是应用最q泛的一U设计模式了。它大量得被用于各种行的框架中Q包括最基本?JDK 代码中。从代码来说Q?Singleton 的实现很单,但是真正用好q不ҎQ几q的开发设计工作中l常都遇到由于没有弄清实例的单态或非单态性,以及不恰当得使用单态导致的问题?/p> <p><strong>基本概念Q?/strong></p> <p>从分cL_Singleton 属于创徏?Construction)模式Q最基本的目标是要保证在一个JVM中,一?Class 最多只有一个实例存在。而要达成q个目标背后的驱动力是: 减少不必要的资源和时间的开销?/p> <ul> <li>资源Q在内存中每个对象实例都要占据一定空_当程序不需要ؓ每个U程在该对象中保存不同的状态时Q就可以用Singleton 模式Q永q只用一个对象实例ؓ所有线E服务? <li>旉Q在JVM中每ơ构造一个对象实例都是有一定时间消耗的Q用Singleton 模式可以帮助E序提高性能Q只有第一ơ初始化实例旉要时间消耗,以后每次引用的时间消耗都几乎为零?</li></ul> <p>Singleton 最Ҏ的h值就在于“节省资源”!管q种设计被广泛用,但是在单U程或低q发环境中,它在性能和资源节省上带来的h值ƈ不大Q越是高q发的多U程环境QSingleton 所能带来的价D明显Q?当然前提是你能够正确使用?</p> <p><strong>反驳Q?/strong></p> <p>1. 现在有些文章Q其实是老外Nq前p的问题)在评论到底还需不需要用 Singleton 模式Q在讨论 Singleton 是不是邪恶的Q) 其实辩证地看Q世间被没有什么东西是l对好或不好Q关键看你怎么利用它。如果程序员?Singleton 模式理解不深Q不恰当使用Q确实会D严重问题Q但q不代表q个模式是不该存在的。就如同C语言的指针,很多人用错,但是不能说指针就是一个错误的设计。是天ɘq是鬼都取决与利用它的人?/p> <p>2. 现在有些 Singleton 已经q时了,不需要了Q仿?IOC 模式已经把一切关?bean 创徏的问题都解决了。我不这栯为。也许现在程序员或架构师已经不需要自己实?Singleton 了,但这只是因ؓ Singleton 的实现已l被一些成熟的框架包办Q程序员不需要自己去兛_了,q不是说 Singleton 不存在。我们仍焉要控制对象实例的数目来达到节省资源,减少开销的目的!如果E序员对 Singleton 没有_的理解,也很难正有效得使用帮我们包办一切的框架Q如 Spring?/p> <p><strong>模式实现Q?/strong></p> <p>l过Z?Singleton 多年的用,通常有两U公认的U程安全的实玎ͼq全部Q:</p> <p>1. Lazy initialization:</p> <p>提供一个synchronized getInstance() Ҏ来检查对象实例是否已创徏。如果是Q直接返回引用;如果不是Q创建实例ƈq回。ƈ缺省的构造器Ҏ定义?privateQ?/p> <p>class Singleton { </p> <p>    private static Singleton _instance; </p> <p>    private int _state;</p> <p>    private Singleton() {</p> <p>        _state = 0;</p> <p>    }</p> <p>    public static synchronized Singleton getInstance() {</p> <p>        if (_instance == null)</p> <p>            _instance = new Singleton();</p> <p>    return _instance;</p> <p>    }</p> <p>}</p> <p>2. Aggressive initialization:</p> <p>抛弃 synchronizedQ而用静态属性,在类载入时立卛_始化Q同样需要把~省的构造器Ҏ定义?private:</p> <p>class Singleton { </p> <p>    private int _state;</p> <p>    private static Singleton _instance = new Singleton();</p> <p></p> <p>    private Singleton() {</p> <p>        _state = 0;</p> <p>    }</p> <p>    public static Singleton getInstance() {</p> <p>        return _instance;</p> <p>    }</p> <p>}</p> <p><strong>问题分析Q?/strong></p> <p>1. 上面的第一U实现虽然可行,但是有一个缺点就是多余的 synchronized 消耗:事实?Singleton 的实例化只有在第一ơ实际进?new Singleton() 的时候需?synchronizedQ从那以后每ơ调?getInstance() Ҏ只需要简单返?_instance 引用可以了Q而此?synchronized 需要的消耗就成了费Q?/p> <p>2. 我曾l在不止一ơ的目中看到过如下的代码来实现 SingletonQ这是ؓ了解决上面的 synchronized 费Q?/p> <p>class Singleton { </p> <p>    private static Singleton _instance; </p> <p>    private int _state;</p> <p>    private Singleton() {</p> <p>        _state = 0;</p> <p>    }</p> <p>    public static Singleton getInstance() {</p> <p>        if (_instance == null) {</p> <p>            synchronized (Singleton.class) {</p> <p>                _instance = new Singleton();</p> <p>            }</p> <p>        }</p> <p>        return _instance;</p> <p>    }</p> <p>}</p> <p>q个实现在单U程环境下不会出问题Q但是放到ƈ发的环境中是有问题的Q线Eƈ不真正安全。多个线E有可能同时q入 if(_instance == null) 内部Q而导致程序实际创建出多个对象实例Q?/p> <p>3. q有一U?Double-checked locking 的实玎ͼ试图解决上面两个问题Q?/p> <p>class Singleton { </p> <p>    private static Singleton _instance; </p> <p>    private int _state;</p> <p>    private Singleton() {</p> <p>        _state = 0;</p> <p>    }</p> <p>    public static Singleton getInstance() {</p> <p>        if (_instance == null) {</p> <p>            synchronized (Singleton.class) {</p> <p>                if (_instance == null) </p> <p>                    _instance = new Singleton();</p> <p>            }</p> <p>        }</p> <p>        return _instance;</p> <p>    }</p> <p>}</p> <p>可以看到q个实现煞费苦心Q在 synchronized 内部再判断一?if(_instance == null)。于是在单线E和低ƈ发环境下Q这个实现很隑և问题了,但是C_高ƈ发的环境中,U程再次变得不安全。这个问题是?Java q_的内存模式引LQ也与不同的 JIT ~译器的~译方式有关Q称之ؓ“out-of-order writes”:一个实?_instance 有可能在 new Singleton() 没有完全初始化的时候就已经不再?nullQ于是ƈ发线E可能得C个没有完全初始化的实例,从而引起错误?/p> <p>有很多关?Double-checked locking ?out-of-order writes 的分析文章,推荐Q?/p> <p><a title="http://www.ibm.com/developerworks/java/library/j-dcl.html?dwzone=java" target="_blank">Double-checked locking and the Singleton pattern</a></p> <p>4. 看过一些关?Singleton 的文章,提到 Singleton 的另一个用途,可以用来保持全局状态,如网站计数器。确?Singleton 可以帮助我们辑ֈq个目的Q但是仔l想惻I其实L一个类静态变量都可以辑ֈq个目的QSingleton不是必需。而且考虑 Singleton 模式使用中带有的陷阱Q它q不是一个好的办法来辑ֈ保持全局状态的目的?/p> <p>5. Singleton 模式只能保证在单 JVM 中只创徏一个对象实例!相同的代码一旦部|到集群或分布式环境中就可能出错QSingleton 完全失效了!在分布式环境中,StatelessSession bean 是一个好的选择?/p> <p>6. lg所qͼSingleton 模式有它特定的适用场合Q达到特定的目的Q节省资源!Q。除非必要,量不要?SingletonQ?/p><img src ="http://www.aygfsteel.com/frostwood/aggbug/308475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/frostwood/" target="_blank">Alfred. Yao</a> 2010-01-06 17:57 <a href="http://www.aygfsteel.com/frostwood/archive/2010/01/06/308475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu9.10安装和配|?/title><link>http://www.aygfsteel.com/frostwood/archive/2010/01/06/308474.html</link><dc:creator>Alfred. Yao</dc:creator><author>Alfred. Yao</author><pubDate>Wed, 06 Jan 2010 09:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/frostwood/archive/2010/01/06/308474.html</guid><wfw:comment>http://www.aygfsteel.com/frostwood/comments/308474.html</wfw:comment><comments>http://www.aygfsteel.com/frostwood/archive/2010/01/06/308474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/frostwood/comments/commentRss/308474.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/frostwood/services/trackbacks/308474.html</trackback:ping><description><![CDATA[<p>记录下我在安装和配置Ubuntu9.10中遇到和解决的问题,按顺序:</p> <p>首先是安装:</p> <p>Ubuntu的安装其实很单,但因为我光驱的问题(唉,怀疑我的DVD-RAM光驱老化了)Q折腾了好几?#8230; 最l放弃想d一张启动DVD盘的试Q另辟蹊径,却发C个简单得多的办法QU盘启动:Q?/p> <p>先说明,从官|下载了 ubuntu-9.10-desktop-i386.iso 镜像后,其实随便用一个光盘镜像工具就可以加蝲q安?Ubuntu 了,但是q种方式不能?Ubuntu 安装C个独立的Linux分区Q它?Windows 使用相同的分区,像其它应用E序一Ppȝ性能会受到很大的影响?/p> <p>q是我的ҎQ当然是|上扑ֈ的方?<a title="http://ubuntuforums.org/showthread.php?t=427540" >http://ubuntuforums.org/showthread.php?t=427540</a>Q:</p> <p>1. 从官|下?<font color="#0000ff">ubuntu-9.10-desktop-i386.iso</font> 镜像 <a title="http://www.ubuntu.org.cn/" >http://www.ubuntu.org.cn/</a>;</p> <p>2. 下蝲一?<font color="#0000ff">UNetbootin</font> 工具(<a title="http://zh.wikipedia.org/wiki/UNetbootin" >http://zh.wikipedia.org/wiki/UNetbootin</a>)Q该工具用于制作 Live USB pȝQ可以制作各U?Linux pȝ的安装盘Q而不需要光盘?</p> <p>    UNetbootin 讄Q?/p> <p>     a. <font color="#000000">Distribution</font>:<font color="#000000"> Ubuntu, Daily Live; (我下载的 UNetbootin 中暂时还没有专门针对 v9.10 的,所以我选了q个)</font></p> <p><font color="#000000">     b. Diskimage: ISO, <选择我下载的iso镜像></font></p> <p><font color="#000000">     c. Type: USB Drive, <U盘的盘符></font></p> <p>    定之后该工具会把所有安装Ubuntu需要的文g复制到U盘,q且制作引导E序Q之后重?#8230;</p> <p>3. 重启后选择从U盘启动,GRUBE序会自动运行,之后的安装和用光盘启动是一LQ不用多讲的Q非常简单?/p> <p>    唯一需要指出的是:安装q程中会让你选择?Ubuntu 安装到哪个盘Q徏议你安装C个独立的分区Q而不要和 Windows side by side (如果你要保留 Windows 的话)Q另外创Z个和物理内存大小相同?<font color="#0000ff">Linux Swap</font> 分区Q这些都是安?Linux 的常识了?/p> <p> </p> <p>配置应用Q?/p> <p>1. 无线|连?/p> <p>    Ubuntu 可以很好地支持大多数|卡Q自动检到附近的无U网。点d上角的无U网图标Q选择我的|络q输入WEP密钥QOK了,非常单!</p> <p>2. 中文输入Q我装的是英文系l,如果Ubuntu安装时就是选择体中文,可能没有q么ȝ吧)</p> <p>    首先需要给pȝ安装语言包,使得 Linux 支持该语a的文字显C和输入。进?System"- "Administration" - "<font color="#0000ff">Language Support</font>" H口, 首先是一大推包下载和安装Q应该是pȝ基本的语a支持包;</p> <p>    完成后,?"Language Support" H口中点?"<font color="#0000ff">Install/Remove Language</font>"Q选择 "Chinese(simplified)" q中所有的选项Q应?#8230; 于是开?5个语a包的下蝲和安装(q回肯定是支持简体中文的了)Q?/p> <p>    上一步完成后中文输入已l安装了Q不q需要手动添加到可用的输入法中:?"Language Support" 中输入法选择 "<font color="#0000ff">ibus</font>"Q这是一?Linux 下的输入法^収ͼ代替以前老的 SCIMQ。再?"System"- "iBus Setup" 中启?ibus 应用Qƈ且选择 “PinYin”{你需要的中文输入法添加到列表Q设|输入法切换快捷键,完成Q?/p> <p>    重启… 搞定Q(之前我尝试安装基于SCIM的fcitx和fitxQLp|… 攑ּQ?个h觉得Z ibus 的输入法已经很不错了?/p> <p><br /> </p> 附一个文件系l结构图Q?br /> <span id="zoom" class="a14c"> <pre>/ 根目?<br /> ?<br /> ├boot/ 启动文g。所有与pȝ启动有关的文仉保存在这?<br /> ? └grub/ Grub引导器相关的文g <br /> ?<br /> ├dev/ 讑֤文g <br /> ├proc/ 内核与进E镜?<br /> ?<br /> ├mnt/ 临时挂蝲 <br /> ├media/ 挂蝲媒体讑֤ <br /> ?<br /> ├root/ root用户?HOME目录 <br /> ├home/ <br /> ? ├user/ 普通用L$HOME目录 <br /> ? ?../ <br /> ?<br /> ├bin/ pȝE序 <br /> ├sbin/ 理员系l程?<br /> ├lib/ pȝE序库文?<br /> ├etc/ pȝE序和大部分应用E序的全局配置文g <br /> ? ├init.d/ SystemV风格的启动脚?<br /> ? ├rcX.d/ 启动脚本的链接,定义q行U别 <br /> ? ├network/ |络配置文g <br /> ? ├X11/ 囑Ş界面配置文g <br /> ?<br /> ├usr/ <br /> ? ├bin/ 应用E序 <br /> ? ├sbin/ 理员应用程?<br /> ? ├lib/ 应用E序库文?<br /> ? ├share/ 应用E序资源文g <br /> ? ├src/ 应用E序源代?<br /> ? ├local/ <br /> ? ? ├soft/ 用户E序 <br /> ? ? ?../ 通常使用单独文g?<br /> ? ├X11R6/ 囑Ş界面pȝ <br /> ?<br /> ├var/ 动态数?<br /> ?<br /> ├temp/ 临时文g <br /> ├lost+found/ 盘修复文g</pre> </span><br /> <img src ="http://www.aygfsteel.com/frostwood/aggbug/308474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/frostwood/" target="_blank">Alfred. Yao</a> 2010-01-06 17:54 <a href="http://www.aygfsteel.com/frostwood/archive/2010/01/06/308474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux常用命o和用问?/title><link>http://www.aygfsteel.com/frostwood/archive/2010/01/06/308472.html</link><dc:creator>Alfred. Yao</dc:creator><author>Alfred. Yao</author><pubDate>Wed, 06 Jan 2010 09:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/frostwood/archive/2010/01/06/308472.html</guid><wfw:comment>http://www.aygfsteel.com/frostwood/comments/308472.html</wfw:comment><comments>http://www.aygfsteel.com/frostwood/archive/2010/01/06/308472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/frostwood/comments/commentRss/308472.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/frostwood/services/trackbacks/308472.html</trackback:ping><description><![CDATA[<p>一些命令:</p> <p>1. 改变路径Q?span style="color: #0000ff">cd</span> /home/yaoanf</p> <p>2. 删除目录Q?span style="color: #0000ff">rm -r</span> /usr/HTTPServer/htdocs/en_US/wwprt/modelReport</p> <p>3. FTP上传Q?span style="color: #0000ff">ftp</span> D:/workspace/modelReport <span style="color: #0000ff">to</span> /home/yaoanf</p> <p>4. Ud目录Q?span style="color: #0000ff">mv</span> /home/yaoanf/modelReport /usr/HTTPServer/htdocs/en_US/wwprt</p> <p>5. 修改权限Q?span style="color: #0000ff">chmod -R 755</span> /usr/HTTPServer/htdocs/en_US/wwprt/modelReport</p><img src ="http://www.aygfsteel.com/frostwood/aggbug/308472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/frostwood/" target="_blank">Alfred. Yao</a> 2010-01-06 17:53 <a href="http://www.aygfsteel.com/frostwood/archive/2010/01/06/308472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ũ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">IJ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ȷɽ</a>| <a href="http://" target="_blank">ֳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¤</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ͻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ¥</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ζ</a>| <a href="http://" target="_blank">ͼ</a>| <a href="http://" target="_blank">ϲ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>