第一篇:如何成為高級(jí)Java程序員
如何成為高級(jí)Java程序員
給一個(gè)剛出社會(huì)的程序員新生一個(gè)建議,想成為一個(gè)優(yōu)秀的程序員,高級(jí)程序員,不能眼高手低,不能認(rèn)為開(kāi)發(fā)新項(xiàng)目,技術(shù)研發(fā)才學(xué)到東西,不能看不起維護(hù)系統(tǒng),不要以為自己懂的技術(shù)越多自認(rèn)為自己很牛叉。假如你忽略了一個(gè)問(wèn)題那么你永遠(yuǎn)成為不了優(yōu)秀的程序員、高級(jí)程序員,那就是系統(tǒng)優(yōu)化。
一、JAVA。要想成為JAVA(高級(jí))工程師肯定要學(xué)習(xí)JAVA。一般的程序員或許只需知道一些JAVA的語(yǔ)法結(jié)構(gòu)就可以應(yīng)付了。但要成為JAVA(高級(jí))工程師,您要對(duì)JAVA做比較深入的研究。您應(yīng)該多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、線(xiàn)程。如果可能,希望您對(duì)JAVA的所有包都瀏覽一下,知道大概的API,這樣您就發(fā)現(xiàn)其實(shí)您想實(shí)現(xiàn)的很多功能,通過(guò)JAVA的API都可以實(shí)現(xiàn)了,就不必自己費(fèi)太多的腦經(jīng)了。
二、設(shè)計(jì)模式。其實(shí)寫(xiě)代碼是很容易的事情,我相信您也有同感。但如何寫(xiě)得好就比較難了。這個(gè)“好”字包括代碼可重用性,可維護(hù)性,可擴(kuò)展性等。如何寫(xiě)出好的代碼往往要借助一些設(shè)計(jì)模式。當(dāng)然長(zhǎng)期的代碼經(jīng)驗(yàn)積累,只要您用心,會(huì)使您形成自己代碼風(fēng)格。相信您的代碼也比較符合代碼的可重用性,可維護(hù)性,可擴(kuò)展性。但既然前人已經(jīng)給我們總結(jié)出了經(jīng)驗(yàn),我們何不踩著前人的肩膀前進(jìn)?
三、XML。現(xiàn)在的系統(tǒng)中不使用XML幾乎是不可能的。XML的功能非常強(qiáng)大,它可以做數(shù)據(jù)轉(zhuǎn)換、做系統(tǒng)的配置、甚至可保存您的系統(tǒng)業(yè)務(wù)數(shù)據(jù)。因此您必須了解XML,包括它的語(yǔ)法,結(jié)構(gòu)。您還需要比較熟練的使用解析XML的一些API,比如JDOM,SAX等,因?yàn)樵谖覀円话愕捻?xiàng)目中,XML往往擔(dān)當(dāng)系統(tǒng)配置信息的作用,您需要用這些API解析這些配置信息,開(kāi)發(fā)完美的項(xiàng)目。
四、精通使用一種或兩種框架。像在《如何成為java初級(jí)程序員》中提到的那樣,“框架都會(huì)有許多可重用的代碼,良好的層次關(guān)系和業(yè)務(wù)控制邏輯,基于框架的開(kāi)發(fā)使你可以省出很多的開(kāi)發(fā)成本”。但我這里希望您能精通,更多的是希望您能通過(guò)框架的使用了解框架的思想。這樣您在開(kāi)發(fā)一個(gè)項(xiàng)目時(shí)思路會(huì)開(kāi)闊一些,比如您會(huì)想到把SQL語(yǔ)句與您的java代碼分開(kāi),再比如您會(huì)考慮把您的業(yè)務(wù)邏輯配置到XML或者數(shù)據(jù)庫(kù)中,這樣整個(gè)項(xiàng)目就很容易擴(kuò)張了。
五、熟悉主流數(shù)據(jù)庫(kù)。其實(shí)真正比較大的項(xiàng)目都是有人專(zhuān)門(mén)做數(shù)據(jù)庫(kù)的,但往往很多項(xiàng)目要求作為(高級(jí))工程師的您也參與數(shù)據(jù)庫(kù)的設(shè)計(jì)以及SQL的編寫(xiě)。所以為了更好的為國(guó)家做貢獻(xiàn),建議您還是多了解一些主流數(shù)據(jù)庫(kù),比如SQLSERVER,ORACLE,多連接SQL和存儲(chǔ)過(guò)程以及觸發(fā)器。如果您不是“科班”出身,您還需要補(bǔ)充一些數(shù)據(jù)庫(kù)原理方面的知識(shí)。
六、精通一種或兩種WEBServer。盡管我再《如何成為java初級(jí)程序員》里講過(guò)它,我還是要強(qiáng)調(diào)您要精通一種或兩種。因?yàn)樽鳛閖ava工程師,特別時(shí)想成為高級(jí)JAVA工程師的您,您不可避免地要部署您的項(xiàng)目到WebServer上,而且只有當(dāng)您精通一種WebServer,您才可能最大限度地使用它的資源,這往往可以節(jié)省很多時(shí)間和精力。
七、UML。我知道您肯定想成為高級(jí)工程師,因此您有必要了解或熟練或精通UML,這取決于您有多大決心想成為高級(jí)工程師和項(xiàng)目經(jīng)理。在比較正規(guī)的開(kāi)發(fā)團(tuán)隊(duì)中,UML是討論項(xiàng)目的交流工具,您要想做一個(gè)軟件工程師,您至少要能看懂,您要想做高級(jí)工程師,您要能通過(guò)它來(lái)描述您對(duì)項(xiàng)目的理解,盡管這不是必須,但卻很重要。
八、站在高度分析問(wèn)題:這不是一個(gè)知識(shí)點(diǎn),也不是通過(guò)書(shū)本就能學(xué)得到的。只所以提到這一點(diǎn),是因?yàn)槲冶饶€著急,我希望您更快的成為一個(gè)高級(jí)的軟件工程師,而不是一個(gè)一般的軟件工程師。希望您在工作中多向您的系統(tǒng)分析員、需求分析員、系統(tǒng)設(shè)計(jì)員學(xué)習(xí),多站在他們角度上去看您在開(kāi)發(fā)的項(xiàng)目。在最好在項(xiàng)目之初先在您的腦海里對(duì)項(xiàng)目有個(gè)大致的分析、設(shè)計(jì),然后和他們進(jìn)行比較,找找差別,想想缺點(diǎn)。
九、工具。與在《如何成為java初級(jí)程序員》里提到的不同,您在這個(gè)階段可能接觸到不同的工具了,盡管您還需要使用JB或者IDEA,但能可能對(duì)ROSE,Together要多了解一些,因?yàn)槟?huà)UML了。不要再對(duì)Dreamweaver等HTML編輯器情有獨(dú)鐘了,那些JSP頁(yè)面讓初級(jí)程序員去寫(xiě)吧。
1、具有1-5工作經(jīng)驗(yàn)的,面對(duì)目前流行的技術(shù)不知從何下手,需要突破技術(shù)瓶頸的可以加群。
第二篇:成為Java頂尖程序員
成為Java頂尖程序員,看這11本書(shū)就夠了
“學(xué)習(xí)的最好途徑就是看書(shū)“,這是我自己學(xué)習(xí)并且小有了一定的積累之后的第一體會(huì)。個(gè)人認(rèn)為看書(shū)有兩點(diǎn)好處:
1.能出版出來(lái)的書(shū)一定是經(jīng)過(guò)反復(fù)的思考、雕琢和審核的,因此從專(zhuān)業(yè)性的角度來(lái)說(shuō),一本好書(shū)的價(jià)值遠(yuǎn)超其他資料
2.對(duì)著書(shū)上的代碼自己敲的時(shí)候方便
“看完書(shū)之后再次提升自我的最好途徑是看一些相關(guān)的好博文“,我個(gè)人認(rèn)為這是學(xué)習(xí)的第二步,因?yàn)橐槐緯?shū)往往有好幾百頁(yè),好的博文是自己看書(shū)學(xué)習(xí)之后的一些總結(jié)和提煉,對(duì)于梳理學(xué)習(xí)的內(nèi)容很有好處,當(dāng)然這里不是說(shuō)自己的學(xué)習(xí)方法,就不再扯下去了。
很多程序員們往往有看書(shū)的沖動(dòng),但不知道看哪些書(shū),下面我就給各位Java程序猿們推薦一些好書(shū)(每本書(shū)的作者會(huì)加粗標(biāo)紅),其中絕大多數(shù)都是我自己平時(shí)在看的書(shū),也算是我對(duì)于平時(shí)讀的書(shū)做一個(gè)小總結(jié)和讀后感吧。
首先推薦的不是一本書(shū),而是一個(gè)博客,也是我們博客園另外一位博友java_my_life。
目前市面上講解設(shè)計(jì)模式的書(shū)很多,雖然我前面講了看書(shū)是最好的,但是對(duì)設(shè)計(jì)模式感興趣的朋友們,我推薦的是這個(gè)博客。這位博友的設(shè)計(jì)模式講得非常非常好,我認(rèn)為90%的內(nèi)容都是沒(méi)有問(wèn)題且很值得學(xué)習(xí)的,其講解設(shè)計(jì)模式的大體路線(xiàn)是:
1、隨便開(kāi)篇點(diǎn)明該設(shè)計(jì)模式的定義
2、圖文并茂講解該設(shè)計(jì)模式中的結(jié)構(gòu)
3、以詳細(xì)的代碼形式寫(xiě)一下該種設(shè)計(jì)模式的實(shí)現(xiàn)
4、補(bǔ)充內(nèi)容
5、講解該設(shè)計(jì)模式的優(yōu)缺點(diǎn)
對(duì)于一個(gè)設(shè)計(jì)模式我們關(guān)注、學(xué)習(xí)的知識(shí)點(diǎn),不就是上面這些嗎?
不 過(guò)我要重點(diǎn)提醒一下網(wǎng)友們,同一種設(shè)計(jì)模式的寫(xiě)法有多種,并不是說(shuō)只有按某種寫(xiě)法來(lái)寫(xiě)才是這種設(shè)計(jì)模式。比方說(shuō)適配器模式,我們關(guān)注適配器模式一定要關(guān)注 的是什么是適配器模式不是怎么寫(xiě)適配器模式,不要認(rèn)為某段代碼不是按照適配器模式的寫(xiě)法寫(xiě)下來(lái)的它就不是適配器模式了,記住這一點(diǎn),你在學(xué)習(xí)設(shè)計(jì)模式的時(shí) 候一定會(huì)對(duì)代碼中用到的設(shè)計(jì)模式有更深入的理解。
《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》
如果你不滿(mǎn)足于做一個(gè)只會(huì)寫(xiě)if?else?的Java程序員,而是希望更進(jìn)一步,我隨便舉幾個(gè)例子吧:
1、了解Java代碼的底層運(yùn)行機(jī)制
2、定位性能問(wèn)題
3、對(duì)整個(gè)系統(tǒng)進(jìn)行性能調(diào)優(yōu)
4、解決各種奇奇怪怪的線(xiàn)上線(xiàn)下問(wèn)題
5、更加高級(jí)別的,為自己的項(xiàng)目量身定做一款適合自己項(xiàng)目的虛擬機(jī)
那 么Java虛擬機(jī)是你必學(xué)的一門(mén)技術(shù)。《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》作者是周志明,這本書(shū)可以說(shuō)是國(guó)內(nèi)寫(xiě)得最好的有關(guān)Java虛 擬機(jī)的書(shū)籍,近半年,前前后后這本書(shū)我起碼看了有5遍。國(guó)內(nèi)寫(xiě)虛擬機(jī)的書(shū)除了這本,其實(shí)還有一些其他的,我也買(mǎi)過(guò),不過(guò)粗略看下來(lái),很多內(nèi)容也是《深入理 解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》此書(shū)里面的。
另外值得一提的是,《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》這本 書(shū),有電子版的,網(wǎng)上搜一下就能下載到了。不過(guò)建議有興趣的朋友還是去買(mǎi)書(shū)看,電子版本下載到的一般是比較老的版本,相比最新修訂版的《深入理解Java 虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》,有很多作者新補(bǔ)充的知識(shí)點(diǎn)是沒(méi)有的。
《HotSpot實(shí)戰(zhàn)》
所有的Java虛擬機(jī)都是遵循著Java虛擬機(jī)規(guī)范來(lái)的,市面上的Java虛擬機(jī)幾十款,《深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐》一書(shū)里面講的虛擬機(jī)并不針對(duì)某種特定的虛擬機(jī),而是從Java虛擬機(jī)規(guī)范的角度來(lái)講解Java虛擬機(jī)。
我們平時(shí)使用的乃至商用的大多數(shù)Java虛擬機(jī)都是Sun公司的HotSpot,大家cmd進(jìn)入命令行,使用”java-version”命令就可以看到了。如果希望在Java虛擬機(jī)規(guī)范的基礎(chǔ)上更加深入地去理解虛擬機(jī)的一些細(xì)節(jié)是怎么實(shí)現(xiàn)的,就可以看一下《HotSpot實(shí)戰(zhàn)》一書(shū),作者是陳濤。不過(guò)由于HotSpot的源碼都是C/C++寫(xiě)的,所以要求讀者有非常好的C/C++基礎(chǔ),如果對(duì)這兩門(mén)語(yǔ)言不是很熟悉的朋友,看這本書(shū)可能對(duì)你幫助不是很大。最后提一句,如果有興趣的朋友,不妨先去網(wǎng)上下載一個(gè)openJDK,HotSpot的源碼就在里面。
《Java并發(fā)編程實(shí)戰(zhàn)》
這本書(shū)常常被列入Java程序員必讀十大書(shū)籍排行榜前幾位,不過(guò)個(gè)人不是很推薦這本書(shū)。
《Java并發(fā)編程實(shí)戰(zhàn)》作者是Brian Goetz,怎么說(shuō)呢,這本書(shū)前前后后我也看了兩遍左右,個(gè)人感受是:
1、文字多代碼少
2、講解多實(shí)踐少
我 覺(jué)得這可能就是老外寫(xiě)書(shū)的特點(diǎn)吧,因?yàn)镴ava是北美國(guó)家(加拿大、美國(guó))開(kāi)發(fā)和維護(hù)的,所以老外對(duì)Java方方面面的理論知識(shí)體系都掌握得是非常清楚和 透徹的。翻開(kāi)這本書(shū)看,多線(xiàn)程什么用、什么是死鎖、什么是競(jìng)爭(zhēng)、什么是線(xiàn)程安全等等,方方面面的知識(shí)點(diǎn)都用大量的文字篇幅講解,不免讓人感覺(jué)十分枯燥,也 難讓讀者有實(shí)質(zhì)性的進(jìn)步。我這本書(shū)看了兩遍也屬于一目十行意思,有興趣的地方就重點(diǎn)看一下。
無(wú)論如何,作為一本常常位于Jva程序員必讀十大書(shū)籍排行榜前幾名的書(shū),還是一定要推薦給大家的。
《java多線(xiàn)程編程核心技術(shù)》
《Java多線(xiàn)程編程核心技術(shù)》作者高洪巖。想要學(xué)習(xí)多線(xiàn)程的朋友,這本書(shū)是我大力推薦的,我的個(gè)人博客里面二十多篇的多線(xiàn)程博文都是基于此書(shū),并且在這本書(shū)的基礎(chǔ)上進(jìn)行提煉和總結(jié)而寫(xiě)出來(lái)的。
此書(shū)和《Java并發(fā)編程實(shí)戰(zhàn)》 相反,這本書(shū)的特點(diǎn)是大篇幅的代碼+小篇幅的精講解,可能這和中國(guó)人寫(xiě)的書(shū)比較偏向?qū)嵱弥髁x的風(fēng)格有關(guān)。本書(shū)關(guān)于線(xiàn)程安全、synchronized、Reentrant、Timer等等都用詳細(xì)的代碼進(jìn)行了講解,而且每個(gè)大知識(shí)點(diǎn)下的多個(gè)小知識(shí)點(diǎn)都會(huì)詳細(xì)講解到,非常有實(shí)踐價(jià)值。
有興趣的朋友們,我相信只要你們跟著這本書(shū)里面的代碼敲、運(yùn)行、思考,三步走,對(duì)于多線(xiàn)程的使用與理解一定會(huì)進(jìn)幾大步。
不 過(guò)這本書(shū)的缺點(diǎn)就是對(duì)于Java并發(fā)包下的一些類(lèi)像CountDownLatch、Semphore、CyclicBarrier、Future、Callable等都沒(méi)有講到,重點(diǎn)的CAS和AQS也沒(méi)有觸及,重點(diǎn)類(lèi)的實(shí)現(xiàn)原理也沒(méi)有提。當(dāng)然,這很深入了,在學(xué)習(xí)了這本書(shū)之后如果能再去對(duì)這些知識(shí) 進(jìn)行一些學(xué)習(xí)、研究的話(huà),你一定會(huì)慢慢成長(zhǎng)為一個(gè)很厲害的多線(xiàn)程高手。
《Effective Java中文版》
這是唯一一本我沒(méi)有買(mǎi)的書(shū)。初識(shí)這本書(shū),是在我的博文Java代碼優(yōu)化(長(zhǎng)期更新)里面,底下評(píng)論的時(shí)候有朋友提到了這本書(shū),當(dāng)時(shí)我說(shuō)要去買(mǎi),不過(guò)這兩個(gè)月一直都沒(méi)時(shí)間去逛書(shū)店,甚是遺憾,之后肯定會(huì)找時(shí)間去買(mǎi)這本書(shū)的。
《Effective Java中文版》的作者是Joshua Bloch,這個(gè)人就很厲害了,他是谷歌的首席架構(gòu)師,屬于超級(jí)技術(shù)大牛級(jí)別了吧,呵呵。由于沒(méi)有看過(guò)這本書(shū),所以我不好發(fā)表評(píng)論,但是從這本書(shū)的知名度 以及其作者的來(lái)頭來(lái)看(多提一句,這本書(shū)也是Java之父James Gosling博士推崇的一本書(shū)),我相信這一定是一本值得一看的好書(shū)。
好 的代碼是每個(gè)Java程序員都應(yīng)該去追求的,不是說(shuō)我今天寫(xiě)一段好代碼相比寫(xiě)一段爛代碼對(duì)性能會(huì)有多大的提升,更多的應(yīng)該是提升了代碼的可讀性以及可以規(guī) 避許多潛在的、未知的問(wèn)題,避免代碼上線(xiàn)之后出問(wèn)題而花時(shí)間去維護(hù)—-無(wú)論從時(shí)間成本、人力成本還是風(fēng)險(xiǎn)成本來(lái)說(shuō),這都是非常高的。
《深入分析Java Web技術(shù)內(nèi)幕》
《深入分析Java Web技術(shù)內(nèi)幕》,作者許令波,淘寶工程師。
這本書(shū)我用一個(gè)字概括就是:全。真的非常全,HTTP、DNS、CDN、靜態(tài)化、Jetty、Tomcat、Servlet、Spring、MyBatis等等,什么都有,涉及知識(shí)面非常廣,但又不像專(zhuān)門(mén)精講某個(gè)知識(shí)點(diǎn)的書(shū)籍一樣講得非常深入,感覺(jué)這本書(shū)就是盡量去用短的篇幅講清楚一些Java Web使用到的技術(shù)的內(nèi)幕,讓讀者對(duì)這些知識(shí)點(diǎn)的技術(shù)內(nèi)幕有一個(gè)理性的認(rèn)識(shí)。
不過(guò),盡管每個(gè)知識(shí)點(diǎn)的篇幅都不多,但是重點(diǎn)都基本講到了,是一本讓人真正有收獲的書(shū)。如果想進(jìn)一步了解這些技術(shù)的技術(shù)內(nèi)幕,就要自己去買(mǎi)相關(guān)書(shū)籍或者自己上網(wǎng)查資料了,有種拋磚引玉,或者說(shuō)師傅領(lǐng)進(jìn)門(mén)、修行在個(gè)人的感覺(jué)。
《大型網(wǎng)站技術(shù)架構(gòu) 核心原理與案例分析》
一個(gè)字評(píng)價(jià)這本書(shū),屌;兩個(gè)字評(píng)價(jià)這本書(shū),很屌;三個(gè)字評(píng)價(jià)這本書(shū),非常屌。呵呵,好了,再說(shuō)下去可能別人以為我是水軍了。
《大型網(wǎng)站技術(shù)架構(gòu) 核心原理與案例分析》的作者是李智慧,原阿里巴巴技術(shù)專(zhuān)家。Java 的大多數(shù)應(yīng)用都是用在Web上的,現(xiàn)在只要稍微大型一點(diǎn)的Web應(yīng)用,都一定是一個(gè)分布式系統(tǒng),那么一個(gè)分布式系統(tǒng)用到了哪些技術(shù)?一個(gè)大型網(wǎng)站是如何從 一個(gè)小型網(wǎng)站成長(zhǎng)起來(lái)的?如何保證你的網(wǎng)站安全?分布式系統(tǒng)使用到了緩存,有哪些緩存?緩存的使用有哪些值得注意的事項(xiàng)?
關(guān) 于分布式的知識(shí)點(diǎn),都在這本書(shū)里面有體現(xiàn),只有你想不到,沒(méi)有他寫(xiě)不到,而且寫(xiě)得非常易懂,基本屬于看一兩遍,再記一些筆記就知道是怎么一回事兒了。多看 幾遍,對(duì)分布式的理解一定會(huì)加深不少。而且里面不僅僅是分布式的知識(shí),還非常接地氣地寫(xiě)了如何做一個(gè)好的架構(gòu)師,其實(shí)我認(rèn)為這不僅僅是寫(xiě)給想做架構(gòu)師的讀 者看的,就是給讀者一些建議,如何更好地提出意見(jiàn)、如何更讓別人關(guān)注你的聲音、如何看到他人的優(yōu)點(diǎn),入木三分,讓人獲益匪淺。
《大型網(wǎng)站系統(tǒng)與Java中間件實(shí)踐》
《大型網(wǎng)站系統(tǒng)與Java中間件實(shí)踐》作者曾憲杰,是淘寶的技術(shù)總監(jiān),算起來(lái)應(yīng)該在阿里有至少P8的級(jí)別了吧。
這本書(shū)的部分內(nèi)容和上面一本李智慧的《大型網(wǎng)站技術(shù)架構(gòu) 核心原理與案例分析》有所重合,像分布式系統(tǒng)的演化、CDN、CAP理論和BASE理論等等,這也更說(shuō)明這些都是分布式系統(tǒng)或者說(shuō)是一個(gè)大型網(wǎng)站重點(diǎn)關(guān)注的內(nèi)容,當(dāng)作一次再學(xué)習(xí)也不錯(cuò)。
本書(shū)要突出的重點(diǎn)是中間件三個(gè)字,中間件是分布式系統(tǒng)中一個(gè)非常重要的東西,其最重要的作用應(yīng)該就是解耦,降低模塊與模塊之間的強(qiáng)依賴(lài),不同的模塊之間的依賴(lài)度降低,便可以各自獨(dú)立地開(kāi)發(fā)自己的功能,這也可以說(shuō)是軟件工程發(fā)展的目標(biāo)和驅(qū)動(dòng)力。
因此,本書(shū)有一部分的內(nèi)容就是基于中間件,詳細(xì)講解了中間件與JMS的各種知識(shí),適合對(duì)分布式系統(tǒng)比較熟悉并且想要往中間件方面有一定研究的讀者。
《從Paxos到ZooKeeper 分布式一致性原理與實(shí)踐》
《從Paxos到ZooKeeper 分布式一致性原理與實(shí)踐》,作者倪超,阿里巴巴工程師。
這本書(shū)是我最近在研讀的一本書(shū),和上面的《大型網(wǎng)站系統(tǒng)與Java中間件實(shí)踐》一樣,屬于分布式組件的范疇,屬于有些深入的內(nèi)容,當(dāng)然也是我自己的個(gè)人興趣。當(dāng)然,如果有志向做一個(gè)出色的大型網(wǎng)站架構(gòu)師、公司的技術(shù)總監(jiān)之類(lèi),這些知識(shí)當(dāng)然是必須掌握的。
本書(shū)從分布式系統(tǒng)基本理論開(kāi)始講起,講到Paxos算法,最后慢慢引入到Zookeeper,循序漸進(jìn)。當(dāng)然,更多的我目前還不方便發(fā)表什么看法,因?yàn)檫@本書(shū)的第二張Paxos算法我都還沒(méi)有弄懂(Paxos算法確實(shí)有些難以理解和不太易懂),接下來(lái)的章節(jié)還沒(méi)有看下去。如果網(wǎng)友們所在的公司在使用Zookeeper,并且你又對(duì)Zookeeper感興趣想要研究一下它的原理的,這本書(shū)將是不二之選。
《MySQL5.6從零開(kāi)始學(xué)》
《MySQL5.6從零開(kāi)始學(xué)》,作者劉增杰和李坤。
作為一名Java程序員,我認(rèn)為我們千萬(wàn)不要覺(jué)得數(shù)據(jù)庫(kù)是DBA的事情,數(shù)據(jù)庫(kù)對(duì)一個(gè)Java程序員來(lái)說(shuō)也是必須掌握的一門(mén)知識(shí),豐富的數(shù)據(jù)庫(kù)性能優(yōu)化經(jīng)驗(yàn)是一個(gè)頂尖程序員必備技能。
目前主流的數(shù)據(jù)庫(kù)有Oracle和MySQL,當(dāng)然推薦大家的是MySQL,主要原因我認(rèn)為有兩點(diǎn):
1、MySQL相比Oracle更輕量級(jí)、更小、安裝和卸載更方便,SQL其實(shí)都是差不多的,如果想學(xué)數(shù)據(jù)庫(kù),學(xué)MySQL就可以了,在家里面可以自己方便地研究,如果你的公司使用Oracle,只要再用對(duì)比學(xué)習(xí)法,關(guān)注一下Oracle和MySQL的差別即可
2、隨著2009年阿里巴巴去IOE的運(yùn)動(dòng)的進(jìn)行,目前國(guó)內(nèi)的很多互聯(lián)網(wǎng)公司都會(huì)選擇MySQL作為它們使用的數(shù)據(jù)庫(kù),因?yàn)镸ySQL免費(fèi),所以既省錢(qián)又不需要出了問(wèn)題就依賴(lài)甲骨文公司
MySQL學(xué)習(xí)我推薦的是這本我自己學(xué)習(xí)看的《MySQL5.6從零開(kāi)始學(xué)》,我是覺(jué)得挺好的這本書(shū),書(shū)里面的知識(shí)點(diǎn)很細(xì)致、很全面,讀者選擇書(shū)籍的標(biāo)準(zhǔn)大多不就是這兩點(diǎn)嗎?
《Spring源碼深度解析》
《Spring源碼深度解析》,作者郝佳。
Spring 這個(gè)框架做得太好了,功能太強(qiáng)大了,以至于很多開(kāi)發(fā)者都只知Spring,不知什么是工廠、什么是單例、什么是代理(我面試別人的真實(shí)體會(huì))。這種功能強(qiáng) 大的框架內(nèi)部一定是很復(fù)雜的實(shí)現(xiàn),這就導(dǎo)致一旦你的程序使用Spring,出了問(wèn)題,可能是Error、可能是Exception、可能是程序運(yùn)行結(jié)果不 是你的預(yù)期的,出現(xiàn)諸如此類(lèi)問(wèn)題的時(shí)候,將會(huì)讓你感到困惑,除了上網(wǎng)查資料或者問(wèn)別人似乎沒(méi)有更好的解決辦法。
研讀Spring的源代碼不失為一種很好的學(xué)習(xí)方法,我個(gè)人認(rèn)為這有很多好處:
1、理解框架內(nèi)部的實(shí)現(xiàn)之后,可以主動(dòng)去解決問(wèn)題,而不需要依賴(lài)別人
2、Spring框架內(nèi)部實(shí)現(xiàn)用到了很多設(shè)計(jì)模式,很好的代碼設(shè)計(jì)思路,這將會(huì)對(duì)你寫(xiě)代碼、對(duì)你理解設(shè)計(jì)模式有很大的提高
3、研究Spring框架將會(huì)大大增強(qiáng)你讀代碼的能力,我相信只要你能研究清楚Spring內(nèi)部是如何實(shí)現(xiàn)的,其他任何一個(gè)框架的源代碼都難不倒你
總而言之,我認(rèn)為讀代碼的能力是一個(gè)普通的程序員和一個(gè)好的程序員之間最大的差別之一,前者只會(huì)把別人寫(xiě)好的東西拿來(lái)用,后者不僅能用好,還清楚知道別人寫(xiě)好的東西底層是如何實(shí)現(xiàn)的,在出現(xiàn)問(wèn)題的時(shí)候可以輕松解決。
Spring源代碼,個(gè)人推薦《Spring源碼深度解析》一書(shū),真要研究透并且寫(xiě)清楚Spring源代碼,恐怕三四本書(shū)都不夠,作者在近400頁(yè)的篇幅中盡量去講解Spring源代碼是如何實(shí)現(xiàn)的,殊為不易,盡管無(wú)法講得完全,但是相信作者的講解配合上讀者自己的研究,一定可以對(duì)Spring的實(shí)現(xiàn)有更深度的理解。
后記
以 上就是我推薦給Java開(kāi)發(fā)者們的一些值得一看的好書(shū)。但是這些書(shū)里面并沒(méi)有Java基礎(chǔ)、Java教程之類(lèi)的書(shū),不是我不推薦,而是離我自己學(xué)習(xí)Java基礎(chǔ)技術(shù)也過(guò)去好幾年了,我學(xué)習(xí)的時(shí)候看的什么也忘了,所以我不能不負(fù)責(zé)任地推薦一些我自己都沒(méi)有看過(guò)的書(shū)給大家。對(duì)于Java基礎(chǔ)知識(shí)的學(xué)習(xí),我提兩點(diǎn)建議吧:
1、多寫(xiě)多敲代碼,好的代碼與扎實(shí)的基礎(chǔ)知識(shí)一定是實(shí)踐出來(lái)的
2、可以去尚學(xué)堂下載一下馬士兵的視頻來(lái)學(xué)習(xí)一下Java基礎(chǔ),還挺不錯(cuò)的,如果尚學(xué)堂官網(wǎng)上下載不了可以底下回復(fù),我的電腦里有
最后,每一位讀到這里的網(wǎng)友,感謝你們能耐心地看完。希望在成為一名更優(yōu)秀的Java程序員的道路上,我們可以一起學(xué)習(xí)、一起進(jìn)步。
【編輯推薦】
1.我們來(lái)談?wù)劽嫦蛑羔樉幊痰哪切┦?/p>
2.普通Java程序員學(xué)習(xí)使用的6個(gè)JDK內(nèi)建工具 3.如何才能成為一個(gè)高級(jí)的C++程序員 4.2015年我最喜愛(ài)的一些前端工具
5.再戰(zhàn)明年!2016年最值得關(guān)注的16個(gè)網(wǎng)頁(yè)設(shè)計(jì)趨勢(shì) 6.作為程序員,你最理想的公司是什么樣的?
第三篇:如何成為優(yōu)秀的Java程序員
如何成為優(yōu)秀的Java程序員
每一個(gè)優(yōu)秀的人在做事的時(shí)候都有自己的做事風(fēng)格,那么那些優(yōu)秀的Java程序員的編程風(fēng)格如何呢?下面我們具體講講,希望對(duì)想學(xué)習(xí)或正在學(xué)習(xí)編程的同學(xué)有一些幫助。
優(yōu)秀JAVA程序員幾個(gè)原則如下: 1.保持原有風(fēng)格 2.堅(jiān)持最小驚奇原則 3.第一次就做對(duì) 4.記錄所有非規(guī)范行為 格式規(guī)范:
1.縮進(jìn)嵌套的代碼:在每個(gè)代碼塊和嵌套中加入縮進(jìn),縮進(jìn)代碼,加強(qiáng)可讀性。這些地方包括【類(lèi)定義,內(nèi)部類(lèi)定義,方法定義,靜態(tài)塊,for循環(huán)語(yǔ)句,if-else語(yǔ)句,try、catch和finally塊,匿名內(nèi)部類(lèi),while語(yǔ)句,do-while語(yǔ)句】
2.斷開(kāi)很長(zhǎng)的句子:第一,如果包含了逗號(hào),那么在每一個(gè)逗號(hào)后面都另起一行,把逗號(hào)后面的每一個(gè)表達(dá)式都和逗號(hào)前面的表達(dá)式的第一個(gè)字母對(duì)齊。第二,應(yīng)該在優(yōu)先級(jí)最低的運(yùn)算符之前斷行。
3.使用空白:關(guān)鍵字和左括號(hào)之間,右括號(hào)和緊隨其后的關(guān)鍵字,除了”.”之外的運(yùn)算符與其前后的表達(dá)式之間用空格隔開(kāi)。每個(gè)邏輯上獨(dú)立的方法和代碼段之間,定義類(lèi)或者接口的成員之間,每個(gè)類(lèi)和接口之間應(yīng)該加入空白行。
4.不要直接使用Tab控制符:不同環(huán)境對(duì)Tab控制符的解釋也是不同的。命名約定:
1.名稱(chēng)應(yīng)該具有實(shí)際意義
2.使用人們熟悉的名稱(chēng)
3.謹(jǐn)慎使用過(guò)長(zhǎng)的名字,可以使用簡(jiǎn)明通用的縮寫(xiě) 4.盡量保留元音字母 5.縮寫(xiě)詞的第一個(gè)字母大寫(xiě) 6.不要使用大小寫(xiě)來(lái)區(qū)分的名字 包命名:
1.用你所在組織的域名的倒序小寫(xiě)形式作為包的根限定詞 2.使用單獨(dú)的小寫(xiě)詞作為每個(gè)包的根名
3.僅當(dāng)新舊版本二進(jìn)制兼容的時(shí)候,其包可以使用相同的名字,否則,請(qǐng)使用新名字 類(lèi)型命名:
1.類(lèi)和接口名中的每個(gè)單詞的第一個(gè)字母大寫(xiě) 類(lèi)命名: 1.用名詞命名類(lèi)
2.具有成組相關(guān)屬性,靜態(tài)服務(wù)或者常量的類(lèi)名字使用復(fù)數(shù)形式 接口命名:
1.用名詞或者形容詞命名接口 方法命名:
1.方法名中的第一個(gè)單詞小寫(xiě),其后每個(gè)單詞的第一個(gè)字母大寫(xiě) 2.用動(dòng)詞命名方法
3.遵循JavaBean中命名屬性訪(fǎng)問(wèn)函數(shù)方法:set,get,is 變量命名:
1.變量命中的第一個(gè)單詞小寫(xiě),其后的每個(gè)單詞的第一個(gè)字母大寫(xiě)
2.用名詞命名變量 3.集合引用名要用復(fù)數(shù)形式
4.為不重要的臨時(shí)變量簡(jiǎn)歷并使用一套標(biāo)準(zhǔn)名字 字段命名:
1.使用this字段變量可以區(qū)分開(kāi)局部變量 參數(shù)命名:
1.構(gòu)造函數(shù)或者”set”方法給字段分配參數(shù)賦值,參數(shù)名應(yīng)該和字段名相同 常量命名:
1.常量的每個(gè)單詞均大寫(xiě),單詞之間使用下劃線(xiàn)連接 文檔約定:
1.為使用和維護(hù)你的代碼的人編寫(xiě)文檔 2.注釋和代碼要同步
3.使用積極的語(yǔ)氣,省略無(wú)用的詞語(yǔ) 注釋類(lèi)型:
1.用文檔注釋來(lái)描述編程接口
2.用標(biāo)準(zhǔn)注釋格式隱藏代碼而不必刪除它們 3.用單行注釋解釋實(shí)現(xiàn)細(xì)節(jié) 文檔注釋?zhuān)?/p>
1.在編寫(xiě)代碼前描述編程接口
2.為公用,受保護(hù),包,私有成員建立文檔 3.為每個(gè)包編寫(xiě)總結(jié)和概述 4.為包的每個(gè)應(yīng)用程序或組編寫(xiě)概述
注釋風(fēng)格:
1.對(duì)所有文檔注釋使用統(tǒng)一的格式和組織結(jié)構(gòu)
2.關(guān)鍵字,標(biāo)識(shí)符和常量應(yīng)放到…
標(biāo)簽中 3.將代碼放入
…標(biāo)簽中 4.在標(biāo)識(shí)符第一次出現(xiàn)的時(shí)候用{@link}標(biāo)簽 5.為Javadoc標(biāo)簽簡(jiǎn)歷并使用一套固定的順序 6.使用第三人稱(chēng)敘述的形式 7.編寫(xiě)?yīng)毩⒌母攀?/p>
8.省略概述中動(dòng)作和服務(wù)的主語(yǔ) 9.省略事物概述中的對(duì)象和動(dòng)詞
10.使用this而不是the來(lái)指代當(dāng)前類(lèi)中的實(shí)例
11.方法名或者構(gòu)造函數(shù)名不需圓括號(hào),除非你想突出一個(gè)特殊的簽名 注釋內(nèi)容:
1.每個(gè)類(lèi)、接口、字段和方法都編寫(xiě)概述 2.完整描述每個(gè)方法的簽名 3.包含示例
4.為前置、后置、不變條件編寫(xiě)文檔 5.為已知的缺陷和不足編寫(xiě)文檔 6.為同步語(yǔ)法編寫(xiě)文檔 內(nèi)部注釋?zhuān)?/p>
1.僅添加有助于理解你的代碼的內(nèi)部注釋 2.描寫(xiě)代碼為什么這樣做,而不是在做什么
3.避免使用行尾注釋
4.用行尾注釋解釋局部變量聲明
5.建立并使用一套關(guān)鍵詞來(lái)標(biāo)識(shí)尚未解決的問(wèn)題 6.在嵌套程度高的控制結(jié)構(gòu)中標(biāo)記出嵌套結(jié)束位置
7.如果兩個(gè)case標(biāo)記之間沒(méi)有break語(yǔ)句,就在中間加入“fall-through”注釋 8.標(biāo)記空語(yǔ)句 編程約定:
1.將表示基礎(chǔ)數(shù)據(jù)類(lèi)型的類(lèi)聲明為final類(lèi)型 2.通過(guò)本地類(lèi)型和其他具體類(lèi)型建立具體類(lèi)型 3.定義小的類(lèi)和小的方法
4.定義子類(lèi),以便任何使用超類(lèi)的地方都可以使用子類(lèi) 5.使所有字段私有
6.使用多態(tài)來(lái)替代instanceof 類(lèi)型安全:
1.以java.lang.Object包裝通用類(lèi),提供靜態(tài)類(lèi)型檢查 2.以類(lèi)的形式封裝枚舉類(lèi)型 3.盡量使用泛型 語(yǔ)句和表達(dá)式:
1.用等價(jià)的方法替換重復(fù)的、復(fù)雜的表達(dá)式 2.使用塊語(yǔ)句代替控制流結(jié)構(gòu)的表達(dá)式 3.使用括號(hào)明確操作順序
4.在switch語(yǔ)句中的最后一個(gè)case體使用break語(yǔ)句
5.使用equals(),而不是==來(lái)檢測(cè)對(duì)象的對(duì)等關(guān)系 構(gòu)造:
1.構(gòu)造狀態(tài)有效的對(duì)象
2.不要從構(gòu)造函數(shù)中調(diào)用非final方法 3.用嵌套的構(gòu)造函數(shù)消除冗余代碼 異常處理:
1.使用不受檢查、運(yùn)行時(shí)的異常來(lái)報(bào)告可能在程序邏輯中出錯(cuò)的嚴(yán)重未查明錯(cuò)誤 2.使用檢查異常來(lái)報(bào)告可能發(fā)生,而在正常的程序運(yùn)行時(shí)極少發(fā)生的錯(cuò)誤 3.用返回代碼報(bào)告可預(yù)知的狀態(tài)改變 4.僅轉(zhuǎn)化異常來(lái)添加信息
5.不要私自處置運(yùn)行時(shí)或者錯(cuò)誤異常 6.用finally語(yǔ)句塊釋放資源 斷言: 1.按照約定編程
2.用無(wú)用代碼消除機(jī)制實(shí)現(xiàn)斷言 3.用斷言捕捉代碼中的邏輯錯(cuò)誤 4.用斷言檢測(cè)方法的前置條件和后置條件 并發(fā):
1.僅在適當(dāng)?shù)牡胤绞褂镁€(xiàn)程 同步: 1.避免同步
2.用同步的包裝器,提供同步接口
3.如果方法包含幾個(gè)不需要同步的重要操作,那么不要同步整個(gè)方法 4.讀寫(xiě)實(shí)例變量的時(shí)候避免不必要的同步 5.使用notify()而不是notifyAll()6.為同步初始化使用雙重檢查模式 效率:
1.使用懶惰初始化 2.避免創(chuàng)建不必要的對(duì)象
3.重新初始化并重新使用對(duì)象,盡量不要新建對(duì)象 4.把優(yōu)化工作留在日后 打包約定:
1.將經(jīng)常使用、更改、同時(shí)發(fā)布或者互相依存的類(lèi)型,放在同一個(gè)包里 2.共同封閉原則 3.重用/發(fā)布等價(jià)原則 4.無(wú)環(huán)依賴(lài)原則
5.將不穩(wěn)定的類(lèi)和接口隔離在單獨(dú)的包中 6.易于修改的包不要依賴(lài)于難以修改的包 7.最大化抽象最大化穩(wěn)定性
8.將高層設(shè)計(jì)和架構(gòu)作為穩(wěn)定的抽象,組織為穩(wěn)定的包
如果你想在IT技能上得到提升,那么北大青鳥(niǎo)就是不錯(cuò)的選擇。北大青鳥(niǎo)是中國(guó)電腦教育著名品牌,積累了雄厚的師資和豐碩的教學(xué)經(jīng)驗(yàn),學(xué)校的管理、就業(yè)、環(huán)境等都很優(yōu)越。學(xué)校擁有多個(gè)IT相關(guān)專(zhuān)業(yè),是西北地區(qū)比較齊全和綜合的大型電腦培訓(xùn)學(xué)校。
學(xué)以致用,所學(xué)即所用,是北大青鳥(niǎo)多年如一日的秉承的教育方針。不讓學(xué)生浪費(fèi)無(wú)謂的時(shí)間和精力在那些并不重要的技能學(xué)習(xí)上。為學(xué)生節(jié)約時(shí)間和精力去學(xué)習(xí)那些在工作中需要經(jīng)常用到的技能,那些重點(diǎn)技能,才是學(xué)校教授的重點(diǎn),也是學(xué)生需要學(xué)習(xí)的重點(diǎn)。
詳情點(diǎn)擊咨詢(xún)。
第四篇:JAVA高級(jí)程序員招聘考題
姓名:日期:時(shí)間:
1.請(qǐng)問(wèn)您在開(kāi)發(fā)中或?qū)W習(xí)中運(yùn)用過(guò)哪些架構(gòu)(struts,hibernate,spring,webwork,xword等),請(qǐng)談?wù)勀鷮?duì)所使用的架構(gòu)的理解及使用心得?
2.請(qǐng)問(wèn)您是否用JAVA開(kāi)發(fā)過(guò)web service,請(qǐng)談?wù)勀鷮?duì)它的理解及心得。
3.請(qǐng)問(wèn)您對(duì)LINUX的使用熟不熟?有沒(méi)有在LINUX下配置過(guò)WEB 服務(wù)?LINUX下的常用命令你記得哪些?
4.有兩個(gè)表,學(xué)生記錄表(STU_ID,學(xué)生名稱(chēng),班級(jí)名),學(xué)生成績(jī)表(REC_ID,STU_ID,學(xué)科名,成績(jī)分?jǐn)?shù)),a)請(qǐng)寫(xiě)一個(gè)SQL語(yǔ)句,統(tǒng)計(jì)出每個(gè)學(xué)生的總成績(jī)。
b)請(qǐng)寫(xiě)一個(gè)SQL語(yǔ)句,查出A學(xué)生B科的成績(jī)。
5.您是否使用過(guò)EJB,請(qǐng)描述一下您對(duì)EJB的理解及使用心得。
6.請(qǐng)簡(jiǎn)要說(shuō)明一下JAVA中的接口的用處。
7.請(qǐng)寫(xiě)一個(gè)簡(jiǎn)單的單例類(lèi),并說(shuō)明一般在什么情況下會(huì)使用單例類(lèi),有什么好處。
第五篇:高級(jí)JAVA、PHP程序員崗位職責(zé)
1.負(fù)責(zé)公產(chǎn)品軟件設(shè)計(jì)、開(kāi)發(fā)、測(cè)試和維護(hù)工作,主要為C++、java、php。
2.負(fù)責(zé)任務(wù)的質(zhì)量和完整性,包含故障分析、解決、修復(fù),一般文檔編制。
3.發(fā)現(xiàn)和指出項(xiàng)目或計(jì)劃中的設(shè)計(jì)問(wèn)題。
4.總結(jié)產(chǎn)品研發(fā)經(jīng)驗(yàn),持續(xù)改進(jìn)產(chǎn)品性能。
5.為產(chǎn)品的市場(chǎng)推廣提供技術(shù)支持。
6.報(bào)據(jù)用戶(hù)或公司其他部門(mén)的要求進(jìn)行設(shè)計(jì)修改和設(shè)計(jì)改進(jìn)。
7.研究項(xiàng)目技術(shù)細(xì)節(jié),編寫(xiě)相應(yīng)的說(shuō)明書(shū)。