﻿<?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/kissjava/category/30794.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 17 Jan 2011 13:21:44 GMT</lastBuildDate><pubDate>Mon, 17 Jan 2011 13:21:44 GMT</pubDate><ttl>60</ttl><item><title>二十个你必须知道的SEO概念</title><link>http://www.blogjava.net/kissjava/archive/2011/01/17/343081.html</link><dc:creator>kissjava</dc:creator><author>kissjava</author><pubDate>Mon, 17 Jan 2011 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/kissjava/archive/2011/01/17/343081.html</guid><wfw:comment>http://www.blogjava.net/kissjava/comments/343081.html</wfw:comment><comments>http://www.blogjava.net/kissjava/archive/2011/01/17/343081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kissjava/comments/commentRss/343081.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kissjava/services/trackbacks/343081.html</trackback:ping><description><![CDATA[如果你拥有一个网站或独立博客，或者你的工作多少和互联网有关，那你一定耳濡目染多多少少对<a href="http://www.williamlong.info/?tags=Seo" target="_blank">SEO</a>（搜索引擎优化）有一定了解。本文将列举其中20个SEO领域最常用的名词和概念，如果你打算熟悉和了解他们请继续阅读。当然，如果你已经无所不晓，那你可以权当补习功课，或可以直接忽略本文。<br />
<strong>1. 搜索引擎营销 （SEM）</strong>
<p>　　搜索引擎营销（SEM）英文全称为Search Engine Marketing，意指通过搜索引擎进行服务和产品的营销。搜索引擎营销又主要分为两种：搜索引擎优化（SEO）和付费点击（PPC，Pay-Per-Click）。搜索引擎优化（SEO）指通过优化网站和页面并让它们在搜索结果的页面中展示，而付费点击（PPC）指通过购买搜索引擎的点击将用户带到自己的网站。（通常）这些点击来自搜索结果页面中的&#8220;赞助商链接&#8221;（译注：显然不适用于百度）。</p>
<p>　　<strong>2. 反向链接（Backlink）</strong></p>
<p>　　反向链接（Backlink）又称为&#8220;回指链接&#8221;&#8220;入链&#8221;和&#8220;简易链接&#8221;，指从其他网站指向你的网站的一个超级链接。反向链接之所以对SEO异常重要，是因为它们直接影响一个网页的页面等级（PageRank），以及这个页面在搜索结果中的排名。</p>
<p>　　<strong>3. 页面等级（PageRank）</strong></p>
<p>　　页面等级（ PageRank） 是Goolgle用来评估一个页面相对于其他页面的重要性的一个算法规则。这个算法规则最基本的意思就是说，如果A页面有一个链接指向B页面，那就可以看作是A页面对B页面的一种信任或推荐。所以，如果一个页面的反向链接越多，再根据这些链接的价值加权越高，那搜索引擎就会判断这样的页面更为重要，页面等级（PageRank）也就越高。</p>
<p>　　<strong>4. 链接诱饵（饵链）（Linkbait）</strong></p>
<p>　　链接诱饵（Linkbait），顾名思义这是一个网站或一个博客上为了尽可能多地吸引反向链接（目的是提高网站的PR值）而存在的一段内容。通常，这些做为诱饵的内容为文字内容，但也可以是一段视频、一张图片、一个测验或其他的热门的内容。最经典的诱饵内容的例子是&#8220;十大（Top 10）&#8221;，因为这样的内容在一些社交网站很容易流行起来成为热门话题（译注：这个话题貌似已经臭街了）。</p>
<p>　　<strong>5. 互链车间或互链作坊（Link farm）</strong></p>
<p>　　互链工厂或互链作坊（Link farm）是指很多网站（通常数量很大）为了提高组成一个类似车间或作坊式的团体，通过彼此的互相链接来提高团体每一个的网站的页面评级的手段。早期，这种方法很有用，但现在已经成为一种不耻的作弊手段（并可能会收到惩罚）。</p>
<p>　　<strong>6. 锚文本（Anchor text）</strong></p>
<p>　　锚文本（Anchor text）在反向链接中是指一个页面中可点击的文本，而其中的关键词对搜索引擎优化（SEO）有很大的帮助，因为Google会将这些关键词和你的内容关联起来。</p>
<p>　　<strong>7. 链接属性-NoFollow</strong></p>
<p>　　Nofollow是网站管理员使用的一个链接属性，其目的是告诉搜索引擎他们并不是为该链接所指向的网站投票。这种链接也可能是网站用户自己创造的内容（比如博客评论中的链接），或者是一个付费交易的链接（比如广告或赞助商的链接）。当Google识别到这些反向链接的NoFollow属性后，基本就不会在页面评级和搜索结果排名的算法中将这些链接的贡献计算在内了。</p>
<p>　　<strong>8. 链接修饰（Link Sculpting）</strong></p>
<p>　　链接修饰（Link Sculpting）是指网站管理员对网站上其他网站的反向链接进行属性设置。比如，管理员给链接添加Nofollow属性，这可以让管理员决定利用自己的网站为具体某个网站提高页面评级，或者不帮助具体某个网站提高网页评级。不过，现在这种做法的作用已经微乎其微，因为Google已经决定要用自己的算法来决定怎么处理链接的Nofollow属性。</p>
<p>　　<strong>9. 页面标题（Title Tag）</strong></p>
<p>　　页面标题（Title Tag），顾名思义是指一个页面的标题中，这也是Google搜索算法中最重要的一个参考。理论上，你的页面标题要独一无二并尽可能多地包括页面内容中的关键词。你在浏览网页时可以从浏览器最上方看到一个网页的标题。</p>
<p>　　<strong>10. 元标签（Meta Tags）</strong></p>
<p>　　元标签（Meta Tags）和页面标题一般，主要用于为搜索引擎提供更多关于你页面内容的信息。元标签位于HTML代码的头部，还有就是对长眼睛的访客是不可见的。</p>
<p>　　<strong>11. 搜索算法（Search Algorithm）</strong></p>
<p>　　Google的搜索算法是为了给每一次搜索请求找到最为相关的网站和页面而设定。这个算法考量的因素超过200种（谷歌自称），其中包括页面等级、标题、元标签、网站内容，以及域名的年龄等。</p>
<p>　　<strong>12. 搜索结果页面（SERP）</strong></p>
<p>　　搜索结果页面（SERP）的英文全称为Search Engine Results Page.基本上，这就是你平时在Google键入关键词回车后的页面了。你的网站从这个页面得到的流量取决于你的网站在搜索结果中的排名等级。</p>
<p>　　<strong>13. 沙盒（Sandbox）</strong></p>
<p>　　Google除了所有网站的索引之外，还有一个单独的索引沙盒，那里面是新近发现和收录的网站。当你的网站存在这个沙盒之中时，它就不会在一般的搜索结果中出现，而只有当Google确认了你的网站是合法的，这才会将其从沙盒中移出进入所有网站的索引。</p>
<p>　　<strong>14. 关键词密度（Keyword Density）</strong></p>
<p>　　如何判断一个特定页面的关键词密度？你只要将一个关键词使用的次数除以页面的总词数就可以了。关键词密度过去是搜索引擎优化中非常重要的一个因素，因为早期的搜索算法对此十分看重，但现在已经时过境迁了。</p>
<p>　　<strong>15.关键词堆积（Keyword Stuffing）</strong></p>
<p>　　因为早期搜索算法对关键词密度非常看重，站长们便通过使用人工堆积关键词的手法来作弊和蒙骗搜索引擎。这种手法就叫做关键词堆积，当然现在已经没用了，而且你还可能会因此受到惩罚。</p>
<p>　　<strong>16. 障眼法（Cloaking）</strong></p>
<p>　　障眼法（Cloaking）是指利用代码在同一个页面上让机器人和真人看到不一样的内容。其目的是为了让页面通过关键词而提升页面评级，而真正的目的是推销和出售各种不相关的产品或服务。当然，这也是一种作弊的手段，有很大可能会受到搜索引擎惩罚，甚至剔除。</p>
<p>　　<strong>17. 网络爬虫或网络蜘蛛（Web Crawler）</strong></p>
<p>　　网络爬虫或网络蜘蛛（Web Crawler）也简称为爬虫或蜘蛛，代表搜索引擎在网路上进行浏览，目的是发现新的链接和页面，这是进行索引的第一个环节。</p>
<p>　　<strong>18. 复制内容（Duplicate Content）</strong></p>
<p>　　复制内容（Duplicate Content）也叫&#8220;重复内容&#8221;，通常是指一个页面在引用了站内或站外的大段实质内容，或者是存在完全相同和极其相似的情况，而这也是一个网站应该尽量避免发生的情况，否则很容易让你的网站受到惩罚。</p>
<p>　　<strong>19. 标准链接（Canonical URL）</strong></p>
<p>　　标准链接（Canonical URL）是指一个网页的链接要符合规范和标准。</p>
<p>　　<strong>20. 机器人协议（Robots.txt）</strong></p>
<p>　　机器人协议（Robots.txt）不过是一个TXT文本文件，存在于你域名根目录之下，作用是将网站的目录结构信息告诉爬虫和蜘蛛，并限制其对特定文件夹和内容的访问，或者是完全将它们关在门外。</p>
<p>　　英文链接：<a href="http://www.blogingbloging.com/20-seo-terms" target="_blank">20 SEO Terms You Should Know</a></p>
<img src ="http://www.blogjava.net/kissjava/aggbug/343081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kissjava/" target="_blank">kissjava</a> 2011-01-17 10:52 <a href="http://www.blogjava.net/kissjava/archive/2011/01/17/343081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vector、ArrayList和hashtable hashmap的异同【转】</title><link>http://www.blogjava.net/kissjava/archive/2008/04/18/194063.html</link><dc:creator>kissjava</dc:creator><author>kissjava</author><pubDate>Fri, 18 Apr 2008 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/kissjava/archive/2008/04/18/194063.html</guid><wfw:comment>http://www.blogjava.net/kissjava/comments/194063.html</wfw:comment><comments>http://www.blogjava.net/kissjava/archive/2008/04/18/194063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kissjava/comments/commentRss/194063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kissjava/services/trackbacks/194063.html</trackback:ping><description><![CDATA[线性表，链表，哈希表是常用的数据结构，在进行Java开发时，JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述，向读者阐述各个类的作用以及如何正确使用这些类。 <br />
<br />
Collection<br />
├List<br />
│├LinkedList<br />
│├ArrayList<br />
│└Vector<br />
│　└Stack<br />
└Set<br />
Map<br />
├Hashtable<br />
├HashMap<br />
└WeakHashMap<br />
<br />
Collection接口<br />
　　Collection是最基本的集合接口，一个Collection代表一组Object，即Collection的元素（Elements）。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类，Java SDK提供的类都是继承自Collection的&#8220;子接口&#8221;如List和Set。<br />
　　所有实现Collection接口的类都必须提供两个标准的构造函数：无参数的构造函数用于创建一个空的Collection，有一个Collection参数的构造函数用于创建一个新的Collection，这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。<br />
　　如何遍历Collection中的每一个元素？不论Collection的实际类型如何，它都支持一个iterator()的方法，该方法返回一个迭代子，使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下：<br />
　　　　Iterator it = collection.iterator(); // 获得一个迭代子<br />
　　　　while(it.hasNext()) {<br />
　　　　　　Object obj = it.next(); // 得到下一个元素<br />
　　　　}<br />
　　由Collection接口派生的两个接口是List和Set。<br />
<br />
List接口<br />
　　List是有序的Collection，使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引（元素在List中的位置，类似于数组下标）来访问List中的元素，这类似于Java的数组。<br />
和下面要提到的Set不同，List允许有相同的元素。<br />
　　除了具有Collection接口必备的iterator()方法外，List还提供一个listIterator()方法，返回一个ListIterator接口，和标准的Iterator接口相比，ListIterator多了一些add()之类的方法，允许添加，删除，设定元素，还能向前或向后遍历。<br />
　　实现List接口的常用类有LinkedList，ArrayList，Vector和Stack。<br />
<br />
LinkedList类<br />
　　LinkedList实现了List接口，允许null元素。此外LinkedList提供额外的get，remove，insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈（stack），队列（queue）或双向队列（deque）。<br />
　　注意LinkedList没有同步方法。如果多个线程同时访问一个List，则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List：<br />
　　　　List list = Collections.synchronizedList(new LinkedList(...));<br />
<br />
ArrayList类<br />
　　ArrayList实现了可变大小的数组。它允许所有元素，包括null。ArrayList没有同步。<br />
size，isEmpty，get，set方法运行时间为常数。但是add方法开销为分摊的常数，添加n个元素需要O(n)的时间。其他的方法运行时间为线性。<br />
　　每个ArrayList实例都有一个容量（Capacity），即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加，但是增长算法并没有定义。当需要插入大量元素时，在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。<br />
　　和LinkedList一样，ArrayList也是非同步的（unsynchronized）。<br />
<br />
Vector类<br />
　　Vector非常类似ArrayList，但是Vector是同步的。由Vector创建的Iterator，虽然和ArrayList创建的Iterator是同一接口，但是，因为Vector是同步的，当一个Iterator被创建而且正在被使用，另一个线程改变了Vector的状态（例如，添加或删除了一些元素），这时调用Iterator的方法时将抛出ConcurrentModificationException，因此必须捕获该异常。<br />
<br />
Stack 类<br />
　　Stack继承自Vector，实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法，还有peek方法得到栈顶的元素，empty方法测试堆栈是否为空，search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。<br />
<br />
Set接口<br />
　　Set是一种不包含重复的元素的Collection，即任意的两个元素e1和e2都有e1.equals(e2)=false，Set最多有一个null元素。<br />
　　很明显，Set的构造函数有一个约束条件，传入的Collection参数不能包含重复的元素。<br />
　　请注意：必须小心操作可变对象（Mutable Object）。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。<br />
<br />
Map接口<br />
　　请注意，Map没有继承Collection接口，Map提供key到value的映射。一个Map中不能包含相同的key，每个key只能映射一个value。Map接口提供3种集合的视图，Map的内容可以被当作一组key集合，一组value集合，或者一组key-value映射。<br />
<br />
Hashtable类<br />
　　Hashtable继承Map接口，实现一个key-value映射的哈希表。任何非空（non-null）的对象都可作为key或者value。<br />
　　添加数据使用put(key, value)，取出数据使用get(key)，这两个基本操作的时间开销为常数。<br />
Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大，这会影响像get和put这样的操作。<br />
使用Hashtable的简单示例如下，将1，2，3放到Hashtable中，他们的key分别是&#8221;one&#8221;，&#8221;two&#8221;，&#8221;three&#8221;：<br />
　　　　Hashtable numbers = new Hashtable();<br />
　　　　numbers.put(&#8220;one&#8221;, new Integer(1));<br />
　　　　numbers.put(&#8220;two&#8221;, new Integer(2));<br />
　　　　numbers.put(&#8220;three&#8221;, new Integer(3));<br />
　　要取出一个数，比如2，用相应的key：<br />
　　　　Integer n = (Integer)numbers.get(&#8220;two&#8221;);<br />
　　　　System.out.println(&#8220;two = &#8221; + n);<br />
　　由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置，因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object，如果你用自定义的类当作key的话，要相当小心，按照散列函数的定义，如果两个对象相同，即obj1.equals(obj2)=true，则它们的hashCode必须相同，但如果两个对象不同，则它们的hashCode不一定不同，如果两个不同对象的hashCode相同，这种现象称为冲突，冲突会导致操作哈希表的时间开销增大，所以尽量定义好的hashCode()方法，能加快哈希表的操作。<br />
　　如果相同的对象有不同的hashCode，对哈希表的操作会出现意想不到的结果（期待的get方法返回null），要避免这种问题，只需要牢记一条：要同时复写equals方法和hashCode方法，而不要只写其中一个。<br />
　　Hashtable是同步的。<br />
<br />
HashMap类<br />
　　HashMap和Hashtable类似，不同之处在于HashMap是非同步的，并且允许null，即null value和null key。，但是将HashMap视为Collection时（values()方法可返回Collection），其迭代子操作时间开销和HashMap的容量成比例。因此，如果迭代操作的性能相当重要的话，不要将HashMap的初始化容量设得过高，或者load factor过低。<br />
<br />
WeakHashMap类<br />
　　WeakHashMap是一种改进的HashMap，它对key实行&#8220;弱引用&#8221;，如果一个key不再被外部所引用，那么该key可以被GC回收。<br />
<br />
总结<br />
　　如果涉及到堆栈，队列等操作，应该考虑用List，对于需要快速插入，删除元素，应该使用LinkedList，如果需要快速随机访问元素，应该使用ArrayList。<br />
　　如果程序在单线程环境中，或者访问仅仅在一个线程中进行，考虑非同步的类，其效率较高，如果多个线程可能同时操作一个类，应该使用同步的类。<br />
　　要特别注意对哈希表的操作，作为key的对象要正确复写equals和hashCode方法。<br />
　　尽量返回接口而非实际的类型，如返回List而非ArrayList，这样如果以后需要将ArrayList换成LinkedList时，客户端代码不用改变。这就是针对抽象编程。<br />
<br />
同步性<br />
Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的，因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率，所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择，这样可以避免由于同步带来的不必要的性能开销。<br />
数据增长<br />
从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候，如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度，Vector缺省情况下自动增长原来一倍的数组长度，ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势，因为你可以通过设置集合的初始化大小来避免不必要的资源开销。<br />
使用模式<br />
在ArrayList和Vector中，从一个指定的位置（通过索引）查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的，这个时间我们用O(1)表示。但是，如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长：O(n-i)，其中n代表集合中元素的个数，i代表元素增加或移除元素的索引位置。为什么会这样呢？以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢？<br />
这意味着，你只是查找特定位置的元素或只在集合的末端增加、移除元素，那么使用Vector或ArrayList都可以。如果是其他操作，你最好选择其他的集合操作类。比如，LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1)，但它在索引一个元素的使用缺比较慢－O(i),其中i是索引的位置.使用ArrayList也很容易，因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象，所有你要明白它也会带来额外的开销。<br />
<br />
#################################################<br />
Hashtable和<span class="hilite2">HashMap</span> <br />
Hashtable和<span class="hilite2">HashMap</span>类有三个重要的不同之处。<br />
第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的，<span class="hilite2">HashMap</span>是Java 1.2引进的Map接口的一个实现。 <br />
第二个也许最重要的不同是Hashtable的方法是同步的，而<span class="hilite2">HashMap</span>的方法不是。这就意味着，虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable，但你必须同样地为一个<span class="hilite2">HashMap</span>提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法，它创建一个线程安全的Map对象，并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的<span class="hilite2">HashMap</span>。这么做的结果就是当你不需要同步时，你不能切断Hashtable中的同步（比如在一个单线程的应用程序中），而且同步增加了很多处理费用。 <br />
第三点不同是，只有<span class="hilite2">HashMap</span>可以让你将空值作为一个表的条目的key或value。<span class="hilite2">HashMap</span>中只有一条记录可以是一个空的key，但任意数量的条目可以是空的value。这就是说，如果在表中没有发现搜索键，或者如果发现了搜索键，但它是一个空的值，那么get()将返回null。如果有必要，用containKey()方法来区别这两种情况。 <br />
一些资料建议，当需要同步时，用Hashtable，反之用<span class="hilite2">HashMap</span>。但是，因为在需要时，<span class="hilite2">HashMap</span>可以被同步，<span class="hilite2">HashMap</span>的功能比Hashtable的功能更多，而且它不是基于一个陈旧的类的，所以有人认为，在各种情况下，<span class="hilite2">HashMap</span>都优先于Hashtable<br />
<br />
以上摘自：<br />
http://www.javaedu.com/bbs/viewthread?thread=75<br />
<a href="http://zztu.javaeye.com/blog/173964">http://zztu.javaeye.com/blog/173964</a><br />
<img src ="http://www.blogjava.net/kissjava/aggbug/194063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kissjava/" target="_blank">kissjava</a> 2008-04-18 16:47 <a href="http://www.blogjava.net/kissjava/archive/2008/04/18/194063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>国际：十个习惯让你精通新的开发技术【转】</title><link>http://www.blogjava.net/kissjava/archive/2008/04/14/192763.html</link><dc:creator>kissjava</dc:creator><author>kissjava</author><pubDate>Mon, 14 Apr 2008 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/kissjava/archive/2008/04/14/192763.html</guid><wfw:comment>http://www.blogjava.net/kissjava/comments/192763.html</wfw:comment><comments>http://www.blogjava.net/kissjava/archive/2008/04/14/192763.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kissjava/comments/commentRss/192763.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kissjava/services/trackbacks/192763.html</trackback:ping><description><![CDATA[<p><font face="Arial">这篇文章，是从我的《高效<nobr><strong class="kgb" onmouseover='isShowAds = true;isShowAds2 = true;KeyGate_ads.Move(this,"","","-100835","开发","ROR%u5E94%u7528%u63A2%u7D22","http%3A//www.sd2china.cn/track1.html", event)' style="border-top-width: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; cursor: hand; color: #0000ff; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://s4.17luntan.com/ClickPortal/WebClick.aspx?id=-100835&amp;k=%u5F00%u53D1&amp;siteid=0098295a-e262-40f7-ae50-7a6fbbdb678b&amp;url=http%3A//news.csdn.net/n/20080408/115015.html&amp;gourl=http%3A//www.sd2china.cn/track1.html&amp;parm=B233C05BE9F1653F04711934DB72CFCDD4D652BE6A702FDA&amp;alliedsiteid=0");' onmouseout="isShowAds = false;isShowAds2 = false">开发</strong></nobr>人员的五个特征》一文中抽出的一个观点。从我自身的事业和习惯中，我考虑了很多方式怎么样才能有效地<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u5B66_u4E60";KeyGate_ads.ShowGgAds(this,"_u5B66_u4E60",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BP20nHPUCSJbsCILm6wPQ_8HiCMT0yT_s0KnyBMCNtwGQvwUQFBgUIM-BhwooFDgAUNeBmvr-_____wFgnaHfgdgFoAHInZD9A7IBDW5ld3MuY3Nkbi5uZXTIAQHaAStodHRwOi8vbmV3cy5jc2RuLm5ldC9uLzIwMDgwNDA4LzExNTAxNS5odG1sgAIBqQIP2DeRVCiDPqgDAegD2wXoAxb1AwAEAAA&amp;num=20&amp;adurl=http://www.yygww.com/&amp;client=ca-pub-3578421812762734");GgKwClickStat("学习","www.yygww.com","afc","2000084115");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u5B66_u4E60"'>学习</strong></nobr>。</font></p>
<p><font face="Arial"><strong>1. 要看书。</strong><br />
在成千上万的<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u7F16_u7A0B";KeyGate_ads.ShowGgAds(this,"_u7F16_u7A0B",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=Byx44HPUCSJbsCILm6wPQ_8HiCK6yrzHOloa1A8CNtwGQvwUQBBgEIM-BhwooFDgAUL_IsMP7_____wFgnaHfgdgFsgENbmV3cy5jc2RuLm5ldMgBAdoBK2h0dHA6Ly9uZXdzLmNzZG4ubmV0L24vMjAwODA0MDgvMTE1MDE1Lmh0bWypAg_YN5FUKIM-yALuw98DqAMB6APbBegDFvUDAAQAAA&amp;num=4&amp;adurl=http://www.szleadtech.com.cn&amp;client=ca-pub-3578421812762734");GgKwClickStat("编程","www.szleadtech.com.cn","afc","2000084115");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u7F16_u7A0B"'>编程</strong></nobr>图书中，可能很大一部分根本毫无用处。但是仍然有很多图书对你的(编程)能力有很大的提升。我一直坚持，相比在网络上查找很多有用信息，在同类图书中查找要来得更容易更快捷。阅读<nobr><strong class="kgb" onmouseover='isShowAds = true;isShowAds2 = true;KeyGate_ads.Move(this,"","","-100826","技术","Web%u6280%u672F%u5728%u4F01%u4E1A%u4E2D%u5E94%u7528","http%3A//www.sd2china.cn/track2.html", event)' style="border-top-width: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; cursor: hand; color: #0000ff; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://s4.17luntan.com/ClickPortal/WebClick.aspx?id=-100826&amp;k=%u6280%u672F&amp;siteid=0098295a-e262-40f7-ae50-7a6fbbdb678b&amp;url=http%3A//news.csdn.net/n/20080408/115015.html&amp;gourl=http%3A//www.sd2china.cn/track2.html&amp;parm=B233C05BE9F1653F04711934DB72CFCDD4D652BE6A702FDA&amp;alliedsiteid=0");' onmouseout="isShowAds = false;isShowAds2 = false">技术</strong></nobr>图书可心更好地抓住核心内容。对于理论，架构和设计等方面来说，图书也一样很有帮助。只不过要找到高质量的、权威的信息，就不如网络上可供查找的范围广。</font></p>
<p><font face="Arial"><strong>2. 读代码。<br />
</strong>这也是我很喜欢的一种方式。如果我并没有几年的专业编程<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u5DE5_u4F5C";KeyGate_ads.ShowGgAds(this,"_u5DE5_u4F5C",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BNZvaHPUCSJbsCILm6wPQ_8HiCN3h9DHlq82eA8CNtwHwkwkQARgBIM-BhwooFDgAUMSJte0BYJ2h34HYBbIBDW5ld3MuY3Nkbi5uZXTIAQHaAStodHRwOi8vbmV3cy5jc2RuLm5ldC9uLzIwMDgwNDA4LzExNTAxNS5odG1sgAIBqAMB6APbBegDFvUDAAQAAA&amp;num=1&amp;adurl=http://discovery.skillsone.com/FWP.asp%3Flanguage%3D12%26adid%3D133&amp;client=ca-pub-3578421812762734");GgKwClickStat("工作","discovery.skillsone.com","afc","2000084115");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u5DE5_u4F5C"'>工作</strong></nobr>经验，在学习之初我并不会去读很多复杂的代码。如果我要是早些开始学习，我将是一个比现在更好的程序员。但是，开始时我会从一些开源<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u9879_u76EE";KeyGate_ads.ShowGgAds(this,"_u9879_u76EE",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=Bco2UHPUCSJbsCILm6wPQ_8HiCMOroTXP3eGgBMCNtwHAqQcQBhgGIM-BhwooFDgAUKjXpPIBYJ2h34HYBaABw6Kp_QOyAQ1uZXdzLmNzZG4ubmV0yAEB2gEraHR0cDovL25ld3MuY3Nkbi5uZXQvbi8yMDA4MDQwOC8xMTUwMTUuaHRtbIACAakCD9g3kVQogz7IArPelQGoAwHoA9sF6AMW9QMABAAA&amp;num=6&amp;adurl=http://www.freelancerchina.com/%3Freferrer%3DGooglecn&amp;client=ca-pub-3578421812762734");GgKwClickStat("项目","www.FreelancerChina.com","afc","2000084115");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u9879_u76EE"'>项目</strong></nobr>里，去学习那些源代码(当然，这些代码不能与我的工作有关，也不是我自己写的)。要从自己会使用到的，或者自己感兴趣的程序开始这项工作。我是从 Paint.net 这个网站里开始学习的，而且已经积累了很多关于 .NET 的编程技术。<br />
</font><font face="Arial">读别人的代码可以为你提供更多不同的工作思路，这比你完全凭自己思考得到的工作方式要多。</font></p>
<p><font face="Arial"><strong>3. 写代码。</strong><br />
谨记，要写大量的代码。从根本上来讲，最好的<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u5B66_u4E60_u65B9_u6CD5";KeyGate_ads.ShowGgAds(this,"_u5B66_u4E60_u65B9_u6CD5",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BP20nHPUCSJbsCILm6wPQ_8HiCMT0yT_s0KnyBMCNtwGQvwUQFBgUIM-BhwooFDgAUNeBmvr-_____wFgnaHfgdgFoAHInZD9A7IBDW5ld3MuY3Nkbi5uZXTIAQHaAStodHRwOi8vbmV3cy5jc2RuLm5ldC9uLzIwMDgwNDA4LzExNTAxNS5odG1sgAIBqQIP2DeRVCiDPqgDAegD2wXoAxb1AwAEAAA&amp;num=20&amp;adurl=http://www.yygww.com/&amp;client=ca-pub-3578421812762734");GgKwClickStat("学习方法","www.yygww.com","afc","2000084115");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u5B66_u4E60_u65B9_u6CD5"'>学习方法</strong></nobr>就是实践。如果不写代码，你根本不能把(某种语言中)内在的东西学习透彻。学习之初，可以从一些技术指南和图书中照搬一些尽量简单的程序。当然，这种照搬是要自己完全手工输入，而不是复制和粘贴，这两种之间的效果差别是很大的。这种方法的主旨就在于，使知识内在化，并思考其用法，而不是盲目照抄。学习过程中，要时常查找新的 API 调用方法，这其实是简单的事情。<br />
</font><font face="Arial">最重要的是，要写一个你自己的程序，不管它是一个简单的游戏，或者是一个参与开源项目的程序，还是一个公为你自己使用的简单插件。用不同的方式来写程序，尽量尝试使用新的技术，新的技巧，新的设计方式。一定要让现在的项目比以往的项目更好。想要成一个优秀的开发者，这一点是核心。</font></p>
<p><font face="Arial"><strong>4. 与其他开发者交流。<br />
</strong>像 Apple，微软，Google 等大公司一样的新闻描述的一样，(与其他开发者交流)可以让你解决一些复杂的问题。虽然这并不能让你感觉到自己已经成一个团队或是社区的成员，但是这种方法可以让你接触到更多不同的想法。<br />
</font><font face="Arial">不同类型的项目要求不同的设计方法，代码技术，开发流程和设计思想。如果你工作在一个小团队里，你不必与太多的人接触，只要在用户群会议中找到一些人(来讨论)即可。如果这样还不行的话，参与到在线论坛中与其他人讨论(这时你需要更努力地寻找高质量的讨论内容)。</font></p>
<p><font face="Arial"><strong>6. 教会别人。<br />
</strong>相对于仅仅读代码之类的工作，教其他人学习可以让你更深入地学习某个技术，这种方法有着非凡的效果。教会别人某个技术，同样也会让你更专注于这种技术，并且可以比别人更深层次地理解它。同样你也会面对一些问题。<br />
</font><font face="Arial"><u>&#8220;如果你不能向一个六岁的儿童解析清楚一个概念，那么其实是你并没有完全理解它。&#8221;Albert Einstein说。<br />
</u></font><font face="Arial">教学场景可以是无穷无尽的：与工作搭档一对一交流，休息碰面，非正式周会，学习茶会，教室，讨论发表会，等等。每周在相同理念开发者之间举办一次30分钟的非正式会议怎么样？每周，让几个人来就他们想要更深入了解话题，向大家传授这些技术知识，并且展开讨论。如果你知道你将要向团队成员们传授正学学习的知识，你是不是更想要了解这项技术的每个细节呢？</font></p>
<p><font face="Arial"><strong>6. 收听网络电台。<br />
</strong>如果你有空闲的时间，可以订阅网络电台节目。我现在最喜欢的编程节目就是 .Net Rocks。这个节目还会做一些视频节目，叫做 dnrTV 。这样会让你即时捕捉到最新最好的技术。一个人是不能学习到所有知识的，而网络电台刚是一个学习了解广泛知识的途径。</font></p>
<p><font face="Arial"><strong>7. 阅读博客。<br />
</strong>博客远远比阅读者要多，但是其中有一些却是极其优秀的。我这里不并不是要推荐博客，因为网络上已经有了足够多的博客。这是与真正在开发你所喜欢和使用的软件的开者联系的好方法。</font></p>
<p><font face="Arial"><strong>8. 学习新的语言。<br />
</strong>即使你已经在 C(++,#) / JAVA 等语言上有很好的造诣，仍然有很多其他可以解决问题的编程语言。学习新的语言，是对你已有思维方式的挑战。这不仅仅是另一种语言，更是对思维的重新架构。的确，所有的语言最后都会被编译成汇编程序，但是这并不意味着<nobr><strong class="kgb" onmouseover='isShowAds = false;isShowAds2 = false;isShowGg = true;InTextAds_GgLayer="_u9AD8_u7EA7_u8BED_u8A00";KeyGate_ads.ShowGgAds(this,"_u9AD8_u7EA7_u8BED_u8A00",event)' style="border-top-width: 0px; padding-right: 0px; padding-left: 0px; font-weight: normal; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin: 0px; cursor: hand; color: #0000ff; padding-top: 0px; border-right-width: 0px; text-decoration: underline" onclick='javascript:window.open("http://pagead2.googlesyndication.com/pagead/iclk?sa=l&amp;ai=BPPseHPUCSJbsCILm6wPQ_8HiCMKYpzT-2cKVBMCNtwHQ6AwQBxgHIM-BhwooFDgAUPqv95H6_____wFgnaHfgdgFsgENbmV3cy5jc2RuLm5ldMgBAdoBK2h0dHA6Ly9uZXdzLmNzZG4ubmV0L24vMjAwODA0MDgvMTE1MDE1Lmh0bWyAAgGpAg_YN5FUKIM-yAKO6fUDqAMB6APbBegDFvUDAAQAAA&amp;num=7&amp;adurl=http://www.cbdjob.com&amp;client=ca-pub-3578421812762734");GgKwClickStat("高级语言","www.cbdjob.com.cn","afc","2000084115");' onmouseout='isShowGg = false;InTextAds_GgLayer="_u9AD8_u7EA7_u8BED_u8A00"'>高级语言</strong></nobr>毫无价值。</font></p>
<p><font face="Arial"><strong>9. 学习不正确的方式。<br />
</strong>除</font><font face="Arial">了要学习应该怎么做，还要学习不应该怎么做。经常阅读 Dailywtf.com ，学习你并不知道的经验与教训。学习适当的面向对象设计方式，代码写作方式，和必须要写的代码等，是很好的方式，但是如果不细心的话也容易养成不良习惯。学习认识不正确的思路是负责项目开发至关重要的一环。<br />
</font><font face="Arial">维基百科对很多觉的不正确方式有十分透彻的分类。</font></p>
<p><font face="Arial"><strong>10. 要谦虚。</strong></font></p>
<p><font face="Arial">学习，意味着：<br />
<font face="Arial">1、用更好的知识代替不完美的知识；<br />
</font><font face="Arial">2、增长你所不知道的知识；<br />
</font></font><font face="Arial">只有承认自己有所不足，才能有学习的动力。归根到底，就是谦虚，不对吗？如果你开始认为你已经掌握了所有需要的知识，那么你就危险了。真正的学习是如饥似渴地追逐知识并使其内在化，这需要很大的努力。我们都知道这一点，但是要必须时常不断地提醒自己。<br />
<br />
来自：http://news.csdn.net/n/20080408/115015.html</font></p>
 <img src ="http://www.blogjava.net/kissjava/aggbug/192763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kissjava/" target="_blank">kissjava</a> 2008-04-14 14:17 <a href="http://www.blogjava.net/kissjava/archive/2008/04/14/192763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>