<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>阳光男孩</title>
	<atom:link href="http://www.shiningboys.cn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.shiningboys.cn</link>
	<description>Never give up!</description>
	<lastBuildDate>Sun, 20 May 2012 12:59:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Java基础之如何学习Java程序设计</title>
		<link>http://www.shiningboys.cn/640.html</link>
		<comments>http://www.shiningboys.cn/640.html#comments</comments>
		<pubDate>Wed, 13 Jul 2011 11:54:39 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[基础]]></category>
		<category><![CDATA[学习]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=640</guid>
		<description><![CDATA[JAVA是一种平台，也是一种程序设计语言，如何学好程序设计不仅仅适用于JAVA，对C++等其他程序设计语言也一样管用。有编程高手认为，JAVA也好C也好没什么分别，拿来就用。为什么他们能达到如此境界？我想是因为编程语言之间有共通之处，领会了编程的精髓，自然能够做到一通百通。如何学习程序设计理所当然也有许多共通的地方。 一、 培养兴趣 兴趣是能够让你坚持下去的动力。如果只是把写程序作为谋生的手段的话，你会活的很累，也太对不起自己了。多关心一些行业趣事，多想想盖茨。不是提倡天天做白日梦，但人要是没有了梦想，你觉得有味道吗？可能像许多深圳本地农民一样，打打麻将，喝喝功夫茶，拜拜财神爷；每个月就有几万十几万甚至更多的进帐，凭空多出个”食利阶层”。你认为，这样有味道吗？有空多到一些程序员论坛转转，你会发现，他们其实很乐观幽默，时不时会冒出智慧的火花。 二、 慎选程序设计语言 男怕入错行，女怕嫁错郎。初学者选择程序设计语言需要谨慎对待。软件开发不仅仅是掌握一门编程语言了事，它还需要其他很多方面的背景知识。软件开发也不仅仅局限于某几个领域，而是已经渗透到了各行各业几乎每一个角落。 如果你对硬件比较感兴趣，你可以学习C语言/汇编语言，进入硬件开发领域。如果你对电信的行业知识及网络比较熟悉，你可以在C/C++等之上多花时间，以期进入电信软件开发领域。如果你对操作系统比较熟悉，你可以学习C/Linux等等,为Linux内核开发/驱动程序开发/嵌入式开发打基础。 如果你想介入到应用范围最广泛的应用软件开发（包括电子商务电子政务系统）的话，你可以选择J2EE或.NET，甚至LAMP组合。每个领域要求的背景知识不一样。做应用软件需要对数据库等很熟悉。总之，你需要根据自己的特点来选择合适你的编程语言。 三、 要脚踏实地,快餐式的学习不可取 先分享一个故事。 有一个小朋友，他很喜欢研究生物学，很想知道那些蝴蝶如何从蛹壳里出来，变成蝴蝶便会飞。有一次，他走到草原上面看见一个蛹，便取了回家，然后看着，过了几天以后，这个蛹出了一条裂痕，看见里面的蝴蝶开始挣扎，想抓破蛹壳飞出来。这个过程达数小时之久，蝴蝶在蛹里面很辛苦地拼命挣扎，怎么也没法子走出来。 这个小孩看着看着不忍心，就想不如让我帮帮它吧，便随手拿起剪刀在蛹上剪开，使蝴蝶破蛹而出。但蝴蝶出来以后，因为翅膀不够力，变得很臃肿，飞不起来。 这个故事给我们的启示是：欲速则不达。 浮躁是现代人最普遍的心态，能怪谁？也许是贫穷落后了这么多年的缘故，就像当年的大跃进一样，都想大步跨入共产主义社会。现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气。就拿笔者比较熟悉的深圳IT培训行业来说吧，居然有的打广告宣称”参加培训，100%就业”，居然报名的学生不少，简直是藐视天下程序员。社会环境如是，我们不能改变，只能改变自己,闹市中的安宁，弥足珍贵。 许多初学者C++/JAVA没开始学，立马使用VC/JBuilder,会使用VC/JBuilder开发一个HelloWorld程序，就忙不迭的向世界宣告，”我会软件开发了”，简历上也大言不惭地写上”精通VC/JAVA”。结果到软件公司面试时要么被三两下打发走了，要么被驳的体无完肤，无地自容。到处碰壁之后才知道捧起《C++编程思想》《JAVA编程思想》仔细钻研，早知如此何必当初呀。 “你现在讲究简单方便，你以后的路就长了”，好象也是佛经中的劝戒。 四、多实践,快实践 彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。 从前，四川边境有两个和尚，一个贫穷，一个有钱。一天，穷和尚对富和尚说：”我打算去南海朝圣，你看怎么样？”富和尚说：”这里离南海有几千里远，你靠什么去呢？”穷和尚说：”我只要一个水钵，一个饭碗就够了。”富和尚为难地说：”几年前我就打算买条船去南海，可至今没去成，你还是别去吧！”一年以后，富和尚还在为租赁船只筹钱，穷和尚却已经从南海朝圣回来了。 这个故事可解读为：任何事情，一旦考虑好了，就要马上上路，不要等到准备周全之后，再去干事情。假如事情准备考虑周全了再上路的话，别人恐怕捷足先登了。软件开发是一门工程学科，注重的就是实践，”君子动口不动手”对软件开发人员来讲根本就是错误的，他们提倡”动手至上”，但别害怕，他们大多温文尔雅，没有暴力倾向，虽然有时候蓬头垢面的一副”比尔盖茨”样。 有前辈高人认为，学习编程的秘诀是：编程、编程、再编程，笔者深表赞同。不仅要多实践，而且要快实践。我们在看书的时候，不要等到你完全理解了才动手敲代码，而是应该在看书的同时敲代码，程序运行的各种情况可以让你更快更牢固的掌握知识点。 五、 多参考程序代码 程序代码是软件开发最重要的成果之一，其中渗透了程序员的思想与灵魂。许多人被《仙剑奇侠传》中凄美的爱情故事感动,悲剧的结局更有一种缺憾美。为什么要以悲剧结尾？据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局，他把自己的感觉融入到游戏中，却让众多的仙剑迷扼腕叹息。 参考代码例子，也可以研究一些开源的软件或框架。 六、 加强英文阅读能力  对学习编程来说，不要求英语,但不能一点不会,。最起码像JAVAAPI文档(参考文献[4.4])这些东西还是要能看懂的,连猜带懵都可以；旁边再开启一个”金山词霸”。 看多了就会越来越熟练。在学JAVA的同时学习英文，一箭双雕多好。另外好多软件需要到英文网站下载，你要能够找到它们，这些是最基本的要求。英语好对你学习有很大的帮助。口语好的话更有机会进入管理层，进而可以成为剥削程序员的”周扒皮”。 七、 万不得已才请教别人 笔者在ChinaITLab网校的在线辅导系统中解决学生问题时发现，大部分的问题学生稍做思考就可以解决。请教别人之前，你应该先回答如下几个问题。 你是否在google中搜索了问题的解决办法？ 你是否查看了JAVAAPI文档？ 你是否查找过相关书籍？ 你是否写代码测试过？ 如果回答都是”是”的话，而且还没有找到解决办法，再问别人不迟。要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的。 八、 多读好书 书中自有颜如玉。比尔?盖茨是一个饱读群书的人。虽然没有读完大学，但九岁的时候比尔?盖茨就已经读完了所有的百科全书，所以他精通天文、历史、地理等等各类学科，可以说比尔?盖茨不仅是当今世界上金钱的首富，而且也可以称得上是知识的巨富。 笔者在给学生上课的时候经常会给他们推荐书籍，到后来学生实在忍无可忍开始抱怨，”天呐，这么多书到什么时候才能看完了”，”学软件开发，感觉上了贼船”。这时候，我的回答一般是，”别着急，什么时候带你们去看看我的书房，到现在每月花在技术书籍上的钱400元，这在软件开发人员之中还只能够算是中等的”，学生当场晕倒。 九、 使用合适的工具 工欲善其事必先利其器。软件开发包含各种各样的活动，需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等，没有工具帮忙可以说是寸步难行。工具可以提高开发效率，使软件的质量更高BUG更少。组合称手的武器。到飞花摘叶皆可伤人的境界就很高了，无招胜有招，手中无剑心中有剑这样的境界几乎不可企及。 希望通过本文的介绍，能给你带来帮助。]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/640.html/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>阳光男孩定义</title>
		<link>http://www.shiningboys.cn/70.html</link>
		<comments>http://www.shiningboys.cn/70.html#comments</comments>
		<pubDate>Sun, 03 Jan 2010 11:05:56 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[定义]]></category>
		<category><![CDATA[阳光男孩]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=70</guid>
		<description><![CDATA[　　如果能让你身边的人因为你的笑容而感到舒心，因为你的行为而快乐那你就可以算是个阳光男孩了！ 　　凡事总能乐观处之,对待他人能经常微笑,(特别是女生),潇洒,风趣幽默,给人的第一印象就像和煦的阳光照在身上。什么是阳光男孩呢？他们热爱运动、朝气蓬勃、充满活力，可以在校园的各个活动舞台看到他们忙碌的身影；他们爱好丰富，个性鲜明，或许他们就是当代校园中最具代表性的男生了。 　　什么是阳光男孩？什么是让女生疯狂、让男生崇拜？他拥有所有男生梦想的特质，俊美的面容，娴熟的球技，他有疾速的启动，迅捷的突破，他是最好的影子前锋。 　　阳光男孩十大标准 　　衣着整洁 体魄强健 　　举止稳重 坚强执著 　　宽容豁达 幽默风趣 　　乐观开朗 礼貌教养 　　有责任感 照顾弱小]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/70.html/feed</wfw:commentRss>
		<slash:comments>696</slash:comments>
		</item>
		<item>
		<title>新手要记住的Java中生成文件的10条建议</title>
		<link>http://www.shiningboys.cn/915.html</link>
		<comments>http://www.shiningboys.cn/915.html#comments</comments>
		<pubDate>Sun, 20 May 2012 12:59:32 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[建议]]></category>
		<category><![CDATA[文件]]></category>
		<category><![CDATA[新手]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=915</guid>
		<description><![CDATA[1. 记住 &#8211; “越少越好”并非总是如此(Keep in Mind – “Less is more” is not always better)。 – 高效率的代码是件好事，但很多情况下，并非代码行数越少效率就越高 2. 不要把简单事情复杂化(Do not complicate things)。 – 我曾经这么做过，我相信你也一样。开发者都倾向于采用复杂方式解决简单问题。我们在一个只有5个用户的系统中引入EJB,为一个并不需要框架的应用实现一套框架，采用属性文件、采用面向对象解决方案、使用线程，而这些根本用不着。为什么会这么做？一些人可能不知道有更好的解决方案，但另一些人可能故意这样做来学习新知识，或仅仅是因为有趣。对那些不知道更好解决方案的人，要多听有经验程序员的建议。对于那些纯粹出于个人目的而将设计复杂化的人，我建议你要更加专业一点。 3. 不要”硬编码”(No hard coding please)。 – 由于时间紧迫，开发者总是会忘记或故意忽略这一条。然而另一种可能是，遵循这条戒律，我们就不会陷入”时间紧迫”的困境。定义一个static final 变量，增加一行代码，又能花多长时间呢？ 4. 为代码添加注释(Add comments to your code)。 – 每个人都知道这一点，但不是每个人都会这么做。你有多少次”忘记”添加注释了？确实，注释不会为你的程序增加任何函数功能。但是，有多少次，看到2周前写的代码，你都记不起它是干什么的？你很幸运，那些未注释的代码是你自己写的，你脑海中还会有残存的印象。非常不幸，大多时候，代码是别人写的，并且那个人很可能已经离开公司了。有句谚语说的好：”有来有往，互惠互利”,因此程序员应该体谅彼此(还有你自己)，给你的代码加上注释。 5. 不要发明你自己的框架(Do not invent your own frameworks)。 – 不夸张地讲，已经有几千个框架存在了，大多数还是开源的。很多框架都是极完美的解决方案，并已被用到成千的系统中。我们只要关注最新的流行的框架，至少表面上要熟悉一下。一个最成功的、也是被广泛使用的例子是Struts框架，这个开源的web框架是建立web系统的极佳选择，不要试图构造你自己的Struts版本，会累死的。但你必须记住第2条(译注：原文是”第3条”,显然不对)戒律&#8211; 不要把简单事情复杂化。如果你要开发的系统只有3个界面，就不要用Struts. 对于这样一个系统，没有足够的需要被”控制”的东西(译注：Struts将界面做MVC划分，C即controller,所以作者说there isn&#8217;t much “controlling” required)。 [...]]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/915.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IT专业人士口碑差的十大原因</title>
		<link>http://www.shiningboys.cn/912.html</link>
		<comments>http://www.shiningboys.cn/912.html#comments</comments>
		<pubDate>Sun, 20 May 2012 12:43:03 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[口碑]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=912</guid>
		<description><![CDATA[IT从业人员常常日夜操劳，整体与机器和代码为伍，号称码农，可是为什么在某些人那里却得不到好口碑呢？TR的Alan Norton列举了十大缘由，请诸位给评评看，是不是这个道理。 1：报酬丰厚惹人嫌 IT属于高薪行业是普遍共识（在中国未必如此？）。在美国，其薪资水平仅次于管理和法律专业。但是对于其他职业中赚得少的人来说。有的也许就会认为这样对自己不公平。在往往以金钱衡量个人价值的社会里，这会给别的职业的自我意识造成打击。 2：问题响应不及时 办公系统或者秘书的电脑宕机时，肯定需要尽快能修好。但有时候IT工程师就像酷热夏日里的空调维修员一样，手上的单子太多，客户必须排队等。但是，对于关键系统来说，哪怕几分钟的宕机时间也是不能忍受的。 3：尝试不可能任务 医生不可能通过电话对病人做出诊断，但这就是IT支持人员每天都在做的事情。对问题知之甚少的客户指望你通过电话就能远程诊断和修复问题。Alan拿自己的老爹作为例子，说他曾花了4个多小时与IT支持人员通话来解决一个问题。这个过程令双方都沮丧不已，在无法直接接触到客户硬件的情况下，有时候问题的解决就相当于一个不可能完成的任务—哪怕你的耐心和奉献精神再高 。如果你曾试过在电话上通话一个多小时来试图解决问题，你就会理解为什么技术支持人员常常被骂了。从短期看，这种情况仍难以得到改善，除非IT学会了如何更简便地收集相关信息。 4：知其不可而为之 Alan在CSC工作的时候曾遭遇过一些不可能完成的任务。CSC的客户范围很广，有的自家系统既陈旧又神秘。比方说，他曾经装过几次OS/2，然后就被奉为OS/2专家并被邀请去解决一个客户的OS/2问题。他只好硬着头皮顶上去，最后的确装好了网络打印机和一些硬件，但是也留下了一堆烂摊子。 5：有技术没有态度 IT专业人士通常技术能力都很高，但是其对待患者（客户）的态度还有待改进。IT与客户的技术鸿沟日渐拉大，但与客户沟通解决问题的单纯化、人性化更是充满挑战。如何提供真正的客户服务而不仅仅是修复问题，许多IT人员还需要深入学习。 6：IT人员形象差 形象很重要。但IT人的形象可不太好，不合群的极客在键盘上奋笔疾书，把自己的秘密作品捂得严严实实，远离愚蠢的大众。对于极客的刻板形象大众总是爱恨交加。他们虽不认同，但的确享受作为极客及其怪异行为的看客。一提到极客，Chloe和Edgar（《反恐二十四小时》中的人物），Maurice和Roy（《IT狂人》中的人物）、谢耳朵和伦纳德（《生活大爆炸》中的人物），Abigail和Timothy（《海军罪案调查处》中的人物）马上跃然脑海中。如果极客只是出现在电视里，公众也许会表达出自己的热爱，但真的要是跟IT人打交道时，他们往往就会把对方归类为极客，避而远之。 7：被视为工作威胁 在经济不景气的时候谁都害怕失去工作。而IT往往会抢走某些传统岗位的饭碗，因此做IT的也被视为坏小子。实际上，剥夺工人工作的是技术，但“受害者”却不会这么认为。IT专业人员变成了敌人和替罪羊。 8：患上“金童”综合症 要什么给什么，IT已经享受这种待遇多年。任何能令公司提高效率的项目都能够得到充分的资金和资源支持。不过IT已经长大成人，逐渐失去了“不会做错任何事”的光环，但是金童的形象依旧萦绕。自己手头紧的经理看着IT预算还在见长自然会没有羡慕只有嫉妒恨。 9：IT人不可或缺 主管对IT技术和维系IT的人变得越来越依赖。复杂系统需要数据库维护、技术支撑以及软件升级维护。但非IT专业人士不喜欢依赖别人。同时还害怕赋予IT太多的权力。 10：IT太大手太长 极客无孔不入，任何机构都无法幸免。在上世纪九十年代，个人计算机仿佛雨后春笋般在员工的办公桌上冒出。人力资源、财务、制造、法律—各行各业均被IT渗透。这些PC收集信息并发送到极客总部的服务器上。此等水平的信息访问是空前的。信息就是力量，而IT控制着信息。IT的一手遮天令经理们担忧自己能在多大程度上信任IT。]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/912.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java操作Excel方法详解</title>
		<link>http://www.shiningboys.cn/908.html</link>
		<comments>http://www.shiningboys.cn/908.html#comments</comments>
		<pubDate>Sun, 15 Apr 2012 10:50:30 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[操作]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=908</guid>
		<description><![CDATA[JAVA 通常有两种方法来操作Excel，分别是POI和JExcelAPI，而且都是开源的。POI是Apache公司开发的，对中文的支持比较弱一些；而JExcelAPI是韩国公司开发的，不仅对中文的支持好，而且由于是纯JAVA编写的，所以可以跨平台操作。本文介绍的也是JExcelAPI的使用方法。 1、环境配置 如下网址，可以下载到API：http://www.andykhan.com/jexcelapi/download.html 下载完成的包解压之后，可以得到如下几个重要的文件： （1）jxl.jar —— JExcelAPI 函数库； （2）docs —— 帮助文档； （3）src —— 源码文件夹； 将jxl.jar复制到%JAVA_HOME%\jre\ext\文件夹下面，在CLASSPATH变量里面添加”%JAVA_HOME%\jre\ext”，然后就可以调用JExcelAPI了。如果出现编译报错“找不到java.jxl包”，则可能是没有设置成功。这时，如果有Eclipse开发工具，可以在”Build Path”中添加”External Library”，找到jxl.jar的路径，然后就能编译成功了。 2、Excel基础操作实例 (1) 创建Excel文件 /**读取Excel文件的内容 * @param file 待读取的文件 * @return // 生成Excel的类 */ package createxls; import java.io.File; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; public class CreateXLS { public static void main(String args[]) { try { [...]]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/908.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java编程中“为了性能”尽量要做到的一些地方</title>
		<link>http://www.shiningboys.cn/905.html</link>
		<comments>http://www.shiningboys.cn/905.html#comments</comments>
		<pubDate>Mon, 02 Apr 2012 13:35:53 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[性能]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=905</guid>
		<description><![CDATA[最近的机器内存又爆满了，除了新增机器内存外，还应该好好review一下我们的代码，有很多代码编写过于随意化，这些不好的习惯或对程序语言的不了解是应该好好打压打压了。 &#160; 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担，缩短加载的时间，提高加载的效率，但并不是所有地方都适用于单例，简单来说，单例主要适用于以下三个方面： 第一，控制资源的使用，通过线程同步来控制资源的并发访问； 第二，控制实例的产生，以达到节约资源的目的； 第三，控制数据共享，在不建立直接关联的条件下，让多个不相关的进程或线程之间实现通信。 2. 尽量避免随意使用静态变量 要知道，当某个对象被定义为stataic变量所引用，那么gc通常是不会回收这个对象所占有的内存，如 public class A{ static B b = new B(); } 此时静态变量b的生命周期与A类同步，如果A类不会卸载，那么b对象会常驻内存，直到程序终止。 3. 尽量避免过多过常的创建Java对象 尽量避免在经常调用的方法，循环中new对象，由于系统不仅要花费时间来创建对象，而且还要花时间对这些对象进行垃圾回收和处理，在我们可以控制的范围内，最大限度的重用对象，最好能用基本的数据类型或数组来替代对象。 4. 尽量使用final修饰符 带有final修饰符的类是不可派生的。在Java核心API中，有许多应用final的例子，例如java.lang.String。为String类指定final防止了使用者覆盖length()方法。另外，如果一个类是final的，则该类所有方法都是final的。Java编译器会寻找机会内联（inline）所有的final方法（这和具体的编译器实现有关）。此举能够使性能平均提高50%。 5. 尽量使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈（Stack）中，速度较快。其他变量，如静态变量、实例变量等，都在堆（Heap）中创建，速度较慢。 6. 尽量处理好包装类型和基本类型两者的使用场所 虽然包装类型和基本类型在使用过程中是可以相互转换，但它们两者所产生的内存区域是完全不同的，基本类型数据产生和处理都在栈中处理，包装类型是对象，是在堆中产生实例。 在集合类对象，有对象方面需要的处理适用包装类型，其他的处理提倡使用基本类型。 7. 慎用synchronized，尽量减小synchronize的方法 都知道，实现同步是要很大的系统开销作为代价的，甚至可能造成死锁，所以尽量避免无谓的同步控制。synchronize方法被调用时，直接会把当前对象锁 了，在方法执行完之前其他线程无法调用当前对象的其他方法。所以synchronize的方法尽量小，并且应尽量使用方法同步代替代码块同步。 8. 尽量使用StringBuilder和StringBuffer进行字符串连接 这个就不多讲了。 9. 尽量不要使用finalize方法 实际上，将资源清理放在finalize方法中完成是非常不好的选择，由于GC的工作量很大，尤其是回收Young代内存时，大都会引起应用程序暂停，所以再选择使用finalize方法进行资源清理，会导致GC负担更大，程序运行效率更差。 10. 尽量使用基本数据类型代替对象 String str = “hello”; 上面这种方式会创建一个“hello”字符串，而且JVM的字符缓存池还会缓存这个字符串； String str = new String(“hello”); 此时程序除创建字符串外，str所引用的String对象底层还包含一个char[]数组，这个char[]数组依次存放了h,e,l,l,o 11. 单线程应尽量使用HashMap、ArrayList HashTable、Vector等使用了同步机制，降低了性能。 [...]]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/905.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java程序自动下载谷歌音乐歌词</title>
		<link>http://www.shiningboys.cn/897.html</link>
		<comments>http://www.shiningboys.cn/897.html#comments</comments>
		<pubDate>Sat, 11 Feb 2012 13:05:42 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Andriod]]></category>
		<category><![CDATA[下载]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=897</guid>
		<description><![CDATA[  近期写了一个android音乐播放器,但是苦于找不到可以自动下载歌词的网站。网上搜的那个已经不能用了。这时候想起可以调用百度或者谷歌的接口来搜索歌词，由于谷歌刚刚推出了谷歌音乐，于是我就想着去尝试下。    进入谷歌音乐的主页，然后随便输了首歌去搜索，跳转至歌曲搜索。发现真的有歌词，可惜歌词不是嵌套在网页里的，并且打开歌词网页的地址里包含的是歌词的id，这可这么半呢？    于是我就去搜索页面寻找歌曲的id,果然在html源代码中找到了歌曲的id,然后我就用这个id拼接在歌词网址的字符串中，最后顺利地进入了歌词页面。    不过歌词页面中的信息很少，连歌词都是从别的地方读取过来的，html源代码中也没有歌词相应的地址。还好，在页面的框架信息中我看到了歌词的地址，在浏览器输入后就可以直接下载，并且下载后的文件就是歌曲的歌词，不含其他信息。     这样就有思路了：     1.接收参数为歌曲名和歌手（这样可以准确的定位歌词文件），然后把参数拼接在查询字符串后面，进行歌词页面的查询。     2.获取歌词页面的html源代码并进行解析，获取歌曲的id     3.将歌曲的id拼接在歌词框架页面地址的后面，获取歌词框架页面的html源代码     4.解析框架页面的源代码，获取歌词下载地址。     5.下载歌词并保存至文件。 需要注意的是： 1.谷歌音乐的歌曲、歌手都不是很多，有些歌曲可能搜索不到歌词，甚至谷歌就没有收录这些歌曲。 2.谷歌服务器不稳定，歌词可能会下载失败，原因大家都懂得。 3.下载的歌词默认放在工程目录下，可以自行修改歌词位置。 4.谷歌音乐页面编码都是UTF-8的，不需要考虑乱码的问题。 PS：本程序仅仅是抛砖引玉,具体怎么使用就看大家的了。 下面上代码： 工具类 &#160; [java] &#60;span style=”font-family:FangSong_GB2312;”&#62;&#60;span style=”font-size: 14px;”&#62;&#60;/span&#62;&#60;/span&#62;&#60;pre name=”code” class=”java”&#62;package com.zyc.download_lrc; /**  * Get lrc from google music  * Version 1.00  * @author zyc  * 2012.2.2  */ /*  * Step:  * 1.Input music&#8217;s name and artist,use google music search engine  * The url like ”http://www.google.cn/music/search?q=name+artist”  * 2.Get music id,the id is starts with ”http://g.top100.cn/16667639/html/lyrics.html?id”  * and id is after  * 3.Use id to get lrc framework html,find download lrc url  * 4.download lrc  * 5.write lrc to file  *  * NOTICE:google work may abnormal,you known  */ import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; [...]]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/897.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JDK 8（Lambda版）开发者预览版发布</title>
		<link>http://www.shiningboys.cn/894.html</link>
		<comments>http://www.shiningboys.cn/894.html#comments</comments>
		<pubDate>Sat, 11 Feb 2012 12:50:11 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[发布]]></category>
		<category><![CDATA[开发者]]></category>
		<category><![CDATA[预览版]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=894</guid>
		<description><![CDATA[之前有报道称，Java 8中将支持Lambda语法，在JDK 8开发者预览版发布之后，Java社区的Lambda项目又在JDK中添加了Lambda功能。 Lambda项目旨在通过在Java语言中添加闭包（closures）及相关功能，来支持在多核心环境下编程。 该开发者预览版基于最新的OpenJDK 7源码库，使用了一些尚未在JDK8中使用的源码文件，届时如果这些源码文件可用，将会被整合进JDK8中。 需要注意的是，此次发布的预览版意味着允许开发者试验Lambda功能，而不需要他们自己编译相关功能的包。该版本并非官方正式版，仅用于开发者测试交流。 下载： JavaSE 8 Developer Preview JavaSE 8 Developer Preview with Lambda Support]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/894.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAVA可移植性广泛应用</title>
		<link>http://www.shiningboys.cn/891.html</link>
		<comments>http://www.shiningboys.cn/891.html#comments</comments>
		<pubDate>Sat, 11 Feb 2012 12:44:29 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[可移植性]]></category>
		<category><![CDATA[应用]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=891</guid>
		<description><![CDATA[JAVA可移植性广泛应用。软件可移植性指与软件从某一环境转移到另一环境下的难易程度。为获得较高的可移植性，在设计过程中常采用通用的程序设计语言和运行支撑环境。尽量不用与系统的底层相关性强的语言。下面介绍JAVA的可移植性。 一、JAVA作为一种编程语言：源代码可移植性 作为一种编程语言，JAVA提供了一种最简单同时也是人们最熟悉的可移植性–源代码移植。这意味着任意一个JAVA程序，不论它运行在何种CPU、操作系统或JAVA编译器上，都将产生同样的结果。这并不是一个新的概念。人们使用C、C++也可以产生同样的效果。 但是使用C或C++编程人们可以有太多的选择，在许多细节上它都没有严格定义，如：未初始化变量的值、对已释放的内存的存取、浮点运算的尾数值等等。所以除非你一开始就严格按照系统无关的概念来进行设计，否则这种可移植性只能是一种理论上的设想而不能形成实践。 总之，尽管C和C++有严密的语法定义，它们的语意(symantics)定义还不是标准的。这种语意上的不统一使得同一段程序在不同的系统环境下会产生不同的结果。有时即使系统情况完全相同而仅仅由于编译器的设置不同也会产生令人意想不到的结果。而JAVA就不同了。它定义了严密的语意结构，而使编译器不承担这方面的工作。 另外，JAVA对程序的行为的定义也比C和C++严格，如：它提供了内存自动回收功能(GarbageCollection)，使程序不能访问越界内存;它对未初始化的变量提供确定值等等。它的这些特性能够减小在不同平台上运行的JAVA程序之间的差异，也使得JAVA具有即使没有JAVA虚拟机的存在的情况下比C和C++更好的平台无关性。 然而，这些特点也有它不利的一面。JAVA设想运行于具有32位字节长度且每字节为8位的计算机上，这就使得那些8位字长的计算机和一些巨型机不能有效的运行JAVA程序。在这样的平台上就只能运行那些可移植的C和C++程序了。 二、JAVA作为一个虚拟机：CPU可移植性 大多数编译器产生的目标代码只能运行在一种CPU上(如Intel的x86系列)，即使那些能支持多种CPU的编译器也不能同时产生适合多种CPU的目标代码。如果你需要在三种CPU(如x86、SPARC和MIPS)上运行同一程序，就必须编译三次。 但JAVA编译器就不同了。JAVA编译器产生的目标代码(J-Code)是针对一种并不存在的CPU–JAVA虚拟机(JAVAVirtualMachine)，而不是某一实际的CPU.JAVA虚拟机能掩盖不同CPU之间的差别，使J-Code能运行于任何具有JAVA虚拟机的机器上。 虚拟机的概念并不是JAVA所特有的：加州大学几年前就提出了PASCAL虚拟机的概念;广泛用于Unix服务器的Perl脚本也是产生与机器无关的中间代码用于执行。但针对Internet应用而设计的JAVA虚拟机的特别之处在于它能产生安全的不受病毒威胁的目标代码。正是由于Internet对安全特性的特别要求才使得JVM能够迅速被人们接受。当今主流的操作系统如OS/2、MacOS、Windows95/NT都已经或很快提供对J-Code的支持。 作为一种虚拟的CPU，JAVA虚拟机对于源代码(SourceCode)来说是独立的。我们不仅可以用JAVA语言来生成J-Code，也可以用Ada95来生成。事实上，已经有了针对若干种源代码的J-Code编译器，包括Basic、Lisp和Forth.源代码一经转换成J-Code以后，JAVA虚拟机就能够执行而不区分它是由哪种源代码生成的。这样做的结果就是CPU可移植性。 将源程序编译为J-Code的好处在于可运行于各种机器上，而缺点是它不如本机代码运行的速度快。 三、JAVA作为一种虚拟的操作系统(OS)和图形用户界面(GUI)：操作系统可移植性 即使经过重新编译，大多数的用C和C++编写的Windows程序也不能在Unix或Macintosh系统上运行。这是为什么呢？因为程序员在编写Windows程序时使用了大量的WindowsAPI和中断调用，而Windows程序对系统功能的调用与Unix和Macintosh程序有很大的差别，所以除非将全套WindowsAPI移植到其它操作系统上，否则重编译的程序仍不能运行。 JAVA采用了提供一套与平台无关的库函数(包括AWT、UTIL、LANG等等)的方法来解决这个问题。就象JVM提供了一个虚拟的CPU一样，JAVA库函数提供了一个虚拟的GUI环境。JAVA程序仅对JAVA库函数提出调用，而库函数对操作系统功能的调用由各不同的虚拟机来完成。 JAVA也在它的OS/GUI库中使用了一种“罕见名称符”(least-commom-denominator)来提供对某种特定操作系统的功能调用，即此功能只在特定环境下生效而在其它操作系统下则被忽略。 这样做的好处在于可以针对某操作系统生成拥有人们熟悉的界面的应用程序而同时此程序又能在其它系统下运行。缺点则是系统中的某些功能调用有很强的依赖性因而在JAVA的虚拟OS/API中难以实现。遇到这种情况，程序员就只能写不可移植的程序了。 总之，JAVA在可移植性方面的特点使它在Internet上具有广泛的应用前景。同时它本身具有的防病毒的能力也使它在需要高可靠性的应用中占有一席之地。]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/891.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>二级经验心得：菜鸟入门Java语言学习的要点</title>
		<link>http://www.shiningboys.cn/889.html</link>
		<comments>http://www.shiningboys.cn/889.html#comments</comments>
		<pubDate>Sat, 11 Feb 2012 12:42:19 +0000</pubDate>
		<dc:creator>孤独de枫</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[二级]]></category>
		<category><![CDATA[学习]]></category>
		<category><![CDATA[菜鸟]]></category>
		<category><![CDATA[要点]]></category>
		<category><![CDATA[计算机等级考试]]></category>

		<guid isPermaLink="false">http://www.shiningboys.cn/?p=889</guid>
		<description><![CDATA[一、掌握静态方法和属性          静态方法和属性用于描述某一类对象群体的特征，而不是单个对象的特征。Java中大量应用了静态方法和属性，这是一个通常的技巧。但是这种技巧在很多语言中不被频繁地使用。理解静态方法和属性对于理解类与对象的关系是十分有帮助的，在大量的Java规范中，静态方法和属性被频繁使用。因此学习者应该理解静态方法和属性。Java在方法和属性的调用上是一致的，区别只表现在声明的时候，这和c++是不同的。 二、重视接口        在面向对象早期的应用中大量使用了类继承。随着软件工程理论的不断发展，人们开始意识到了继承的众多缺点，开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述，直接使用的工具就是接口。接口近年来逐渐成为Java编程方法的核心。另一方面，就应用而言，大部分开发是建立在规范基础之上的，不需要自己建立复杂的继承关系和庞大的类。因此读懂规范和用好规范已经成为应用程序开发人员的首要任务，Java各项规范的主要描述手段就是接口。 三、学好集合框架         Java描述复杂数据结构的主要方式是集合框架。Java没有指针，而是通过强大的集合框架描述数组、对象数组等复杂的数据结构。学好这些数据结构的描述方法对于应用程序编写，特别是涉及到服务器方、3层结构编程至关重要。程序员在这个时候不能再用诸如数据库结果集之类的结构描述数据了。 由于很多语言没有这么强大的集合框架体系，很多初学者不知所措，更不知道拿来做什么用，因此应该引起足够的重视。 四、例外捕捉         Java对例外捕捉的强调是空前的，它强迫程序员用显著的与逻辑方法完全不同的方式描述例外捕捉，对于程序描述的完整性和严谨性有很大的意义。c++也有类似的机制，但是我们看到很多c++程序员并不习惯使用这些机制。 Java的初学者应该充分学习好这种例外捕捉机制，养成良好的编程习惯。 五、多线程需要理解机理         很多Java程序员热衷于多线程程序编写，认为是对逻辑能力的挑战。其实在大量应用中根本就不需要编写多线程程序，或者说大多数编写应用程序的程序员不会去写多线程程序。这是因为多线程机制都内置到基础平台当中了。 程序员应该了解的是多线程原理和多线程安全，这对于今后准确地把握程序是至关重要的。 例如JSP中编写到不同的位置对于多个用户环境的安全影响完全不同，又如著名的Super Servlet是每一个访问作为一个进程，但是每一个页面是一个线程，和Servlet正好相反，对程序的性能和安全的影响有天壤之别。 六、了解网络编程         Java号称是最强的网络编程语言，但是大多数应用程序开发人员是从来不会自己开发什么底层的网络程序的。 需要做只是了解原理就够了。网络机制的实现是靠平台实现的，除非自己开发平台，否则是不需要知道socket怎么实现，怎么监听访问的。因此在这方面花太多的功夫就偏离了“将来的应用开发是在成熟的平台上展开，而不是自己从底层开发平台”这一假设。]]></description>
		<wfw:commentRss>http://www.shiningboys.cn/889.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

