你1、基于JDK 1.8進(jìn)行開發(fā)刻帚,可以邊開發(fā)邊學(xué)習(xí)JDK 1.7的新特性潦嘶。1.6是JDK很穩(wěn)定的版本,講JDK1.8是因?yàn)楝F(xiàn)在的技術(shù)體系在下一個(gè)版本會(huì)發(fā)生一個(gè)變化崇众,如果再不學(xué)習(xí)一些新的特性你會(huì)發(fā)現(xiàn)要學(xué)的東西越來越多掂僵,以后就追不上去,所以是基于JDK 1.8進(jìn)行學(xué)習(xí)顷歌,它是基于JDK 1.6和 1.7加了一些新的特性锰蓬,不是完全的推翻之前的,只是在原來的基礎(chǔ)之上進(jìn)行了一些新的改進(jìn)眯漩。
2芹扭、java歷史-很干,可以選擇不看
android:android運(yùn)行于Linux的服務(wù)器基礎(chǔ)之上坤塞,但是它的API依托于java的虛擬機(jī)冯勉,所以說android它編寫的時(shí)候是java,但是運(yùn)行的時(shí)候是基于安裝在手機(jī)Linux上的虛擬機(jī)摹芙,它只是在安卓操作系統(tǒng)里面那個(gè)你運(yùn)行的手機(jī)端的Linux里面內(nèi)置了一個(gè)這樣的虛擬機(jī)灼狰。手機(jī)里面肯定會(huì)安裝一個(gè)Linux版的虛擬機(jī)在里面,只是肯定有點(diǎn)不一樣浮禾,肯定改進(jìn)了谷歌公司交胚。
3份汗、語言
學(xué)習(xí)編程的時(shí)候不要求多,學(xué)任何一個(gè)語言都行蝴簇,新學(xué)一個(gè)杯活,另外的了解,可以入個(gè)門熬词,這樣你不可能走到終點(diǎn)旁钧,走到最后,接觸的都是些皮毛互拾。
如果沒有語言基礎(chǔ)歪今,一開始新不要學(xué)C語言,它里面主要講的是數(shù)據(jù)結(jié)構(gòu)和指針的一些概念颜矿,更加的偏向底層寄猩,C++的底層就接近于C了,可能學(xué)幾個(gè)月也上不了項(xiàng)目骑疆,等以后用到的時(shí)候也忘差不多了田篇;如果是開發(fā)一個(gè)新的語言,C語言的學(xué)習(xí)是必須的箍铭,還要學(xué)一些硬件泊柬、內(nèi)存、還要對操作系統(tǒng)有一些了解坡疼。
語言是什么彬呻?是用來溝通的衣陶,語言是雙方的柄瑰,人和人之間的溝通是因?yàn)槿擞辛苏J(rèn)知,大腦里面存儲(chǔ)了大量的知識(shí)剪况,通過知識(shí)去組織你的話語教沾,你就可以進(jìn)行溝通。編程語言就是講我們現(xiàn)實(shí)生活中的東西進(jìn)行抽象化了译断,我們編程語言授翻,如果計(jì)算機(jī)要實(shí)現(xiàn)人與人之間的溝通的話,那么它必須符合幾點(diǎn)條件孙咪,第一:數(shù)據(jù)要找地方存儲(chǔ)起來堪唐,第二:必須有計(jì)算能力,說白了語言就是人機(jī)交互的手段而已翎蹈,根據(jù)語言的規(guī)則計(jì)算機(jī)就可以幫你執(zhí)行掉淮菠。存儲(chǔ)起來,存哪里荤堪?計(jì)算機(jī)里面會(huì)有CPU合陵、內(nèi)存條枢赔、磁盤。編程就是人機(jī)交互的過程拥知,這些東西怎么進(jìn)行運(yùn)作和原理踏拜。在電腦里面的計(jì)算都是CPU,只有CPU才有計(jì)算的能力低剔,它是核心的核心速梗,相當(dāng)于大腦,任何的指令都是CPU棒我們計(jì)算的襟齿,它怎么計(jì)算的镀琉?每個(gè)電腦里面應(yīng)用太多了,可能要打開QQ又要打開word文檔等等蕊唐,它的CPU怎么進(jìn)行運(yùn)作的屋摔,它肯定找了個(gè)東西做了緩沖,在早期是那樣內(nèi)存的概念的替梨,用過軟盤的知道钓试,以前的數(shù)據(jù)都是安裝在磁盤里面,你打開都是從磁盤里面進(jìn)行打開副瀑,CPU從IO進(jìn)行讀取的時(shí)候都是跟磁盤打交道的弓熏,但是有個(gè)問題IO瓶頸太嚴(yán)重了,打開非常的慢糠睡,會(huì)卡頓挽鞠,IO尋道的時(shí)候就會(huì)產(chǎn)生很大的延遲和你的電腦根本承受不住,后面有一種東西叫著軟區(qū)狈孔,就是軟盤信认,插個(gè)軟盤進(jìn)去,你把那些應(yīng)用放在哪里就超快均抽,后來隨著軟區(qū)的流行嫁赏,就出現(xiàn)了內(nèi)存條,64兆油挥、128潦蝇、256的內(nèi)存啊。后面就出現(xiàn)了內(nèi)存的概念深寥,內(nèi)存就會(huì)有一些寄存器攘乒,就會(huì)把這些東西緩存到內(nèi)存里面,為什么要緩存在內(nèi)存里面惋鹅?內(nèi)存里面又開始分一個(gè)東西则酝,叫著進(jìn)程,但是內(nèi)存肯定是個(gè)多線程负饲,內(nèi)存里面肯定有個(gè)寄存器去寄存數(shù)據(jù)堤魁,寄存器里面有很多的進(jìn)程喂链,進(jìn)程是干什么的?每個(gè)應(yīng)用它都會(huì)對應(yīng)一個(gè)進(jìn)程妥泉,進(jìn)程肯定是一個(gè)可執(zhí)行的文件(exe)椭微,接下來就會(huì)把它打包成一個(gè)可執(zhí)行的文件,安裝在我們的內(nèi)存里面盲链,讓它在哪里運(yùn)行著蝇率,為什么會(huì)一定是一個(gè)進(jìn)程,因?yàn)檫M(jìn)程是獨(dú)立的刽沾,數(shù)據(jù)存儲(chǔ)的空間本慕,就是說白了,我開一個(gè)進(jìn)程接下來就會(huì)產(chǎn)生一個(gè)內(nèi)存區(qū)域侧漓,這個(gè)內(nèi)存區(qū)域內(nèi)的所有東西都在這個(gè)進(jìn)程里面進(jìn)行執(zhí)行锅尘,它們之間是互不干擾互補(bǔ)牽制的,那么內(nèi)存的產(chǎn)生同時(shí)可以緩解CPU的計(jì)算壓力布蔗,沒有內(nèi)存會(huì)爆掉藤违,就像人又想喝咖啡又想看書又想去睡覺,你說如果沒有進(jìn)程沒有內(nèi)存是什么概念尼纵揍,一個(gè)人想做很多的事情就相當(dāng)于多線程顿乒,CPU就相當(dāng)于這個(gè)人,CPU要處理這種多任務(wù)的方式泽谨,如果把這些東西一次性直接塞進(jìn)去璧榄,是不可能做得了的,CPU里面的東西就那么一點(diǎn)點(diǎn)吧雹,CPU會(huì)執(zhí)行不了的骨杂,一次給這么多的任務(wù),到時(shí)候電腦直接藍(lán)屏吮炕,CPU肯定堵死在那了腊脱,就是進(jìn)程阻塞访得,電腦很可能藍(lán)屏或者重啟龙亲,現(xiàn)在很好解決藍(lán)屏,藍(lán)屏要不就是你的內(nèi)存里的東西CPU出現(xiàn)紊亂了悍抑,計(jì)算不過來鳄炉,大腦卡死在那里了,給的任務(wù)太多堵死在那里搜骡,內(nèi)存的東西是很復(fù)雜的拂盯,有了內(nèi)存的東西,就會(huì)有多線程的監(jiān)控记靡,它會(huì)幫你檢測哪些應(yīng)用是閑置的谈竿,哪些是正在運(yùn)行中的团驱,正在運(yùn)行中的會(huì)多給你一些內(nèi)存,它會(huì)有這樣一些機(jī)制在里面空凸,它會(huì)有一些內(nèi)存回收和分配在里面嚎花,在內(nèi)存里面全幫你做掉了,那么CPU拿到內(nèi)存中的東西就是穩(wěn)定的運(yùn)行掉呀洲,當(dāng)然里面有一些算法紊选,像堆棧。java也是一個(gè)可執(zhí)行的應(yīng)用程序道逗,它里面也會(huì)產(chǎn)生一個(gè)exe文件兵罢,產(chǎn)生一個(gè)進(jìn)程在里面,進(jìn)程里面的東西都是一個(gè)獨(dú)立的內(nèi)存空間區(qū)域滓窍,它有自己的一個(gè)維護(hù)的東西卖词,也就是你打開一個(gè)PHP的應(yīng)用和一個(gè)java的應(yīng)用,它在電腦里面都不會(huì)影響的吏夯,兩個(gè)應(yīng)用互不影響坏平,但是CPU也就是大腦只有一個(gè),現(xiàn)在CPU的計(jì)算速度是非辰跻啵快的舶替,可能一個(gè)應(yīng)用是0.000幾微秒就會(huì)執(zhí)行掉,具體和CPU本身有關(guān)杠园。
內(nèi)存顾瞪?硬盤?磁盤抛蚁?內(nèi)存和硬盤都有讀取數(shù)據(jù)和記錄數(shù)據(jù)的能力陈醒,但是內(nèi)存的東西它響應(yīng)的速度是非常快的瞧甩,內(nèi)存它有一個(gè)致命的缺點(diǎn)钉跷,它是臨時(shí)的,如果把電腦重啟或者關(guān)閉了肚逸,那么內(nèi)存的東西會(huì)全部的丟失爷辙,比如打開QQ,你電腦關(guān)機(jī)之后再次打開QQ要重新登錄一樣朦促,磁盤里的東西是永久存儲(chǔ)的膝晾,只要在你電腦不壞的情況下都是永久存儲(chǔ)在那里面的。數(shù)據(jù)庫是屬于磁盤性的東西务冕,保存的每一條數(shù)據(jù)都存儲(chǔ)到磁盤里面某一個(gè)文件里面血当,只是它的文件比較的特殊進(jìn)行了一些加密和壓縮一些算法,非常的優(yōu)化,查找起來更方便更快速臊旭,如果數(shù)據(jù)庫的數(shù)據(jù)不存在磁盤里面難道下次出現(xiàn)服務(wù)器爆掉了落恼,難道你的數(shù)據(jù)全都丟失?或者重啟了里面的數(shù)據(jù)丟失了离熏,這是災(zāi)難性的领跛。這就是為什么一定要學(xué)數(shù)據(jù)庫,數(shù)據(jù)庫中的數(shù)據(jù)都是存在磁盤里面的撤奸。當(dāng)然可以對數(shù)據(jù)加索引存到內(nèi)存吠昭,后面會(huì)遇到,它為了響應(yīng)查詢速度更快胧瓜,會(huì)把一些數(shù)據(jù)存到內(nèi)存中去矢棚,所以要學(xué)索引。
所有的語言府喳,java蒲肋、PHP等等它們都屬于內(nèi)存型語言,只要你把電腦關(guān)了钝满,你的應(yīng)用就關(guān)了兜粘。你的那些東西就會(huì)全部的丟了,但是通過語言進(jìn)行磁盤操作就必須通過一個(gè)東西弯蚜,所有語言都提供的和磁盤打交道的操作-IO孔轴,可以通過這樣語言直接去刪磁盤的文件,javascript沒有但是它現(xiàn)在通過nodejs去彌補(bǔ)了碎捺,java有PHP肯定有路鹰,Ruby肯定也有操作磁盤的東西的,通過語言去進(jìn)行操作收厨,這些操作都是CPU去控制的晋柱,CPU去幫我們?nèi)?zhí)行,比如java調(diào)用命令去寫文件诵叁,CPU立馬做相應(yīng)雁竞,它是IO進(jìn)行讀寫。
下面以java為例:
java是內(nèi)存型語言(只要你把電腦關(guān)了那么你的應(yīng)用就關(guān)了拧额,那些東西全部丟了)碑诉,內(nèi)存是不是有極限,內(nèi)存既然有大小那么內(nèi)存就有極限势腮,理解了這些原理下面學(xué)習(xí)負(fù)載均衡就會(huì)很清楚也很有方向感联贩,接下來學(xué)負(fù)載均衡,那大數(shù)據(jù)的數(shù)據(jù)集群服務(wù)器集群等等捎拯,你就很清楚你要怎么做,要有方向性,內(nèi)存有極限8G署照、6G祸泪,不說內(nèi)存有極限磁盤也有極限,你的硬盤1T你最多存1T的東西建芙,存完了之后尼没隘,你就開始加硬盤,我們處理應(yīng)用越來越大的時(shí)候禁荸,舉個(gè)例子右蒲,既然內(nèi)存是有大小的,所以會(huì)學(xué)一個(gè)東西叫著字節(jié)赶熟,1MB=1024KB瑰妄,1KB=1024B,1B(字節(jié))=8位映砖,和網(wǎng)速有關(guān)系已開始學(xué)習(xí)的時(shí)候间坐,不知道和磁盤和內(nèi)存有什么關(guān)系,位就是很多的格子邑退,內(nèi)存既然有大小竹宋,是不是會(huì)把內(nèi)存的8G都給java,肯定不會(huì)的地技,因?yàn)殡娔X里面除了java這個(gè)應(yīng)用還有很多其它的應(yīng)用需要去打開蜈七,所有的語言都有一個(gè)內(nèi)存大小的劃分,在所有的語言它都會(huì)設(shè)定它內(nèi)存的上限莫矗,到了這個(gè)設(shè)定的上限之后它就會(huì)出現(xiàn)警告或者內(nèi)存溢出宪潮,不可能全部給你,因?yàn)槊總€(gè)語言它會(huì)核算一個(gè)數(shù)量趣苏,根據(jù)這個(gè)極限來核實(shí)到底多大的數(shù)值狡相,語言它都是規(guī)定了的,不是我們來規(guī)定的食磕,但是我們可以改變它這個(gè)是可以的尽棕,這就是我們開發(fā)應(yīng)用的時(shí)候突然內(nèi)存溢出是什么原因,是因?yàn)橐呀?jīng)超出了JDK里面虛擬機(jī)設(shè)定我們內(nèi)存的上限彬伦,它就會(huì)出現(xiàn)內(nèi)存溢出滔悉。磁盤你的MYSQL和Oracle一樣會(huì)出現(xiàn)磁盤溢出的,磁盤溢出单绑,就是磁盤IO什么什么space回官,說明磁盤滿了,超出了磁盤的存儲(chǔ)能力搂橙,接下來要趕緊的加磁盤歉提,或者做數(shù)據(jù)庫的集群,這是接下來要做的事情。
java是內(nèi)存型語言苔巨,java給我們的內(nèi)存到底瓜分了多少尼版扩,現(xiàn)在已經(jīng)瓜分了64MB,在JDK1.6里面是64MB侄泽,不知道JDK1.7和JDK1.8中到底提升了沒有礁芦,這個(gè)東西是可以改變的,提升到128悼尾,說白了就是內(nèi)存中給java128柿扣,上線最大128,這個(gè)很重要闺魏,未來一定會(huì)出現(xiàn)內(nèi)存溢出的未状,除非只寫一個(gè)helloworld的程序,那肯定不會(huì)出現(xiàn)內(nèi)存溢出舷胜,當(dāng)然是可以調(diào)整娩践,調(diào)整也是根據(jù)你的電腦去進(jìn)行調(diào)整,不可能說調(diào)個(gè)1280烹骨,這是不可能的翻伺,這是不可以的,這種調(diào)配是根據(jù)電腦的配置和這些東西有關(guān)系沮焕,不是隨便給一個(gè)數(shù)字就可以的吨岭。既然有大小,那么它里面是怎樣去寫入的峦树,以什么樣的形態(tài)去寫入的辣辫,既然是語言,那么計(jì)算機(jī)最終都會(huì)轉(zhuǎn)換成計(jì)算機(jī)代碼魁巩,也就是我們的bit代碼(二進(jìn)制代碼)急灭。在編碼的過程中java是一種給予編譯和運(yùn)行的一門語言,它寫代碼和運(yùn)行代碼是進(jìn)行分離的谷遂,說白了葬馋,就是編寫代碼的過程和運(yùn)行代碼的過程它是進(jìn)行分離的,它最終會(huì)幫我們轉(zhuǎn)換成機(jī)器碼肾扰,也就是0畴嘶、1代碼(不只是java語言,適用于所有的語言)集晚,這就是為什么在學(xué)java里面要去學(xué)二進(jìn)制轉(zhuǎn)換窗悯,無需深入了解就可以了,這就是為什么一定要了解二進(jìn)制是什么原因偷拔,因?yàn)橐私鈨?nèi)部的存儲(chǔ)結(jié)構(gòu)是什么樣子蒋院。我們的語言接收到我們的解析器亏钩,java有java的解析器、虛擬機(jī)悦污,根據(jù)它的語意去寫代碼的時(shí)候它會(huì)去編譯铸屉,在解析階段就會(huì)把它變成我們的0钉蒲、1代碼進(jìn)行存儲(chǔ)切端,存儲(chǔ)在java的內(nèi)存區(qū)域里面也就是java的虛擬機(jī),我們寫的任何代碼都會(huì)把它放在java的虛擬機(jī)里面進(jìn)行運(yùn)行顷啼,當(dāng)放到這個(gè)內(nèi)存區(qū)域之后它是運(yùn)行著的踏枣,因?yàn)樗旁趦?nèi)存里面的,當(dāng)讀到這個(gè)內(nèi)存區(qū)域的時(shí)候钙蒙,它會(huì)發(fā)指令茵瀑,java這個(gè)可執(zhí)行程序它會(huì)給我們的CPU發(fā)送指令,java JDK里面有個(gè)指令器躬厌,它會(huì)不斷的給CPU去發(fā)送指令马昨,這里有東西要執(zhí)行了你(CPU)趕緊過來執(zhí)行,java虛擬機(jī)不斷的給CPU發(fā)送指令扛施,就像有蛋糕了鸿捧,告訴CPU你趕緊過來吃,CPU把執(zhí)行的結(jié)果返回給java的指令器疙渣,趕緊去執(zhí)行匙奴,執(zhí)行之后就會(huì)改變這個(gè)內(nèi)存區(qū)域的狀態(tài),CPU是很忙的妄荔,一直在工作泼菌。所以在開發(fā)里面要知道什么是二進(jìn)制,內(nèi)存區(qū)域是怎么去存儲(chǔ)的啦租,