JavaBase-1

我是fattiger--胖小虎

如果讀完覺得有收獲的話,歡迎關(guān)注贊賞。

轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處,多謝大家。


前言:估計(jì)很多人像我一樣,在程序的海洋里迷失了自己,為什么說迷失了自己,語(yǔ)言層出不窮,框架層出不窮,業(yè)務(wù)需求千變?nèi)f化。而你呢,如果沒有進(jìn)入一線互聯(lián)網(wǎng)公司,或者說沒有進(jìn)入好的技術(shù)氛圍的公司,在以技術(shù)為主導(dǎo)的職業(yè)生涯中,很難把自己的職業(yè)規(guī)劃好,也沒有什么清晰的目標(biāo),你所學(xué)所做的事情會(huì)受公司業(yè)務(wù)產(chǎn)品的影響,也有可能你三五年以來一直在做一些企業(yè)應(yīng)用的業(yè)務(wù),用戶量在三五百,好的上千上萬(wàn),并發(fā)就更不用說了,你最后的收獲可能就是對(duì)這塊業(yè)務(wù)比較熟悉,讓你整體挑起來這件事情,你也做不好,因?yàn)橹車娜硕己湍悴畈欢啵龊米约悍輧?nèi)的事情就好了,牽扯到別人的一點(diǎn)東西就不愿意去思考。上面提到的這樣的業(yè)務(wù)場(chǎng)景或者說這樣的技術(shù)氛圍很難讓在自己的技術(shù)成長(zhǎng)起來,導(dǎo)致技術(shù)面試一次失望一次,面試一次失望一次,最終的結(jié)果是要么不去考慮,在目前公司里一直混下去,要么有點(diǎn)血腥的人會(huì)考慮一下,心血來潮的學(xué)習(xí)一把,有多少人能把學(xué)習(xí)真正的堅(jiān)持下來,跳出你當(dāng)前的安逸,真正把自己的能力提升上去。你總說你還有時(shí)間去學(xué),而且還有人說學(xué)習(xí)什么時(shí)候都不晚,真的是這樣嗎?你是不晚,可是誰(shuí)愿意等你,你為這個(gè)不晚付出了多少的代價(jià)。如果有人看到了我寫的,而且你們的現(xiàn)狀和我描述的很相似,那么現(xiàn)在就行動(dòng)起來吧,要不你以后付出的代價(jià)會(huì)更大。心中要有清晰的目標(biāo)公司,要對(duì)自己的定位非常明確,有多少人30多歲了,還在自己的舒適區(qū),30歲之前不吃苦,往后更難熬,身邊的例子不少了,PPT寫不好被辭退,大公司大齡裁員的,90后是怎么蠶食80后飯碗的,時(shí)刻要有危機(jī)感,覺得以前荒廢了太多時(shí)光,可以和我一起從基礎(chǔ)開始,慢慢把自己的知識(shí)架構(gòu)搭建起來。接下來的博文,適合Java路線的人員,所有的知識(shí)必須較真,不要一看而過,不要一知半解,最后你能說出來多少,證明你掌握了多少,能給別人講明白到多少證明你理解有多深,千萬(wàn)不要有一知半解的狀態(tài)。這些基礎(chǔ)是你看源碼,看框架的必備知識(shí)點(diǎn),也是面試的利器。我的目的很簡(jiǎn)單就是為自己梳理知識(shí)框架的。

1. 關(guān)鍵字含義(運(yùn)算符[& | ~ ^]、位操作[>> >>> << ]、static、final、synchronzed[底層實(shí)現(xiàn)原理]、volatile[底層實(shí)現(xiàn)原理]、transient、foreach)

1.1

& 與操作 兩個(gè)位的數(shù)值都為1 則為1,否則為0。

| ?或操作 兩個(gè)位的數(shù)值有一個(gè)為1 就為1,否則為0。

~ 非操作 按位取反

^ 異或 兩個(gè)位的數(shù)值 不同為1,相同為0。

% ?取模或者說求余 結(jié)果符號(hào)和被除數(shù)保持一直 其實(shí)就是百分號(hào)左邊的值的符號(hào)

1.2

>> ?有符號(hào)左移1位 由于位移操作比算術(shù)運(yùn)算效率高,代碼中經(jīng)常用于替代除以2的操作 丟棄最高位,0補(bǔ)最低位

>>> 無符號(hào)左移1位 高位補(bǔ)0 針對(duì)負(fù)數(shù)有意義

<< ?丟棄最高位,0補(bǔ)最低位

這兩部分主要是幫助了解一下hash操作的一些操作,熟讀JDK源碼的同學(xué)都會(huì)看到,在一些hash操作的時(shí)候,這兩個(gè)操作是離不開的,目的是為了更好的把數(shù)據(jù)散列到數(shù)組中。

為什么要用一般和0xff做與操作?

主要是因?yàn)?1是一個(gè)奇質(zhì)數(shù),二進(jìn)制位都為1,所以31*i=(32-1)*i = 32*i – 1*i = (i<<5) –i 式子就是這樣轉(zhuǎn)換的結(jié)果,

這種位移與減法結(jié)合的計(jì)算相比一般的運(yùn)算快很多。

得出結(jié)論移位的操作比算術(shù)運(yùn)算要快,而為什么要快呢,其實(shí)在程序的底層,最終還是轉(zhuǎn)換成了移位操作。

還有就是31而進(jìn)制 0001 1111 ? 16+8+4+2+1 = 16 + 15 這樣實(shí)際數(shù)據(jù)與其做與操作,數(shù)據(jù)能均勻散列,

如果最后位是0,不管真是數(shù)據(jù)末尾是多少,結(jié)果都是0,只能放在偶數(shù)下標(biāo)的桶里,浪費(fèi)了好多空間,而且增加了碰撞的概率,

增加了查找的時(shí)間復(fù)雜度。

1.3 static 修飾變量、靜態(tài)塊、方法、內(nèi)部類、靜態(tài)導(dǎo)包

靜態(tài)塊何時(shí)執(zhí)行?這個(gè)例子發(fā)在父子類的案例中比較能說明類初始化順序 父類靜態(tài)塊 子類靜態(tài)塊 父類非靜態(tài)塊 父構(gòu)造函數(shù) 子非靜態(tài)塊 子構(gòu)造函數(shù)類的加載的第二個(gè)連接階段(驗(yàn)證、準(zhǔn)備、解析)中的解析階段的對(duì)靜態(tài)變量的賦初始值(0/false/null),如果是被final修飾的靜態(tài)常量,此階段直接賦最終值,否則在類初始化階段在執(zhí)行putstatic指令。

GCRoot方法區(qū)中類靜態(tài)屬性引用的對(duì)象 方法區(qū)中常量引用的對(duì)象

1.4 final 修飾變量、方法、類

宗旨是不可變 變量不能被修改 方法不能被覆蓋 類不能被繼承 不可變對(duì)象都是線程安全對(duì)象。會(huì)和finally,finalize做區(qū)別?finally代碼在return之前執(zhí)行。

1.5 synchronized

Java關(guān)鍵字 可用于修飾同步塊(同步類、同步對(duì)象)、同步方法(靜態(tài)方法、非靜態(tài)方法)。

1. 修飾一個(gè)代碼塊,被修飾的代碼塊稱為同步語(yǔ)句塊,其作用的范圍是大括號(hào){}括起來的代碼,作用的對(duì)象是調(diào)用這個(gè)代碼塊的對(duì)象;

2. 修飾一個(gè)方法,被修飾的方法稱為同步方法,其作用的范圍是整個(gè)方法,作用的對(duì)象是調(diào)用這個(gè)方法的對(duì)象;

3. 修飾一個(gè)靜態(tài)的方法,其作用的范圍是整個(gè)靜態(tài)方法,作用的對(duì)象是這個(gè)類的所有對(duì)象;

4. 修飾一個(gè)類,其作用的范圍是synchronized后面括號(hào)括起來的部分,作用主的對(duì)象是這個(gè)類的所有對(duì)象。

總結(jié) 修飾靜態(tài)方法和類的時(shí)候,鎖的整個(gè)類,所有的對(duì)象用同一把鎖。而如果是鎖的對(duì)象或者是非靜態(tài)方法,則鎖的是對(duì)象。

【實(shí)現(xiàn)原理】

修飾代碼塊的時(shí)候,會(huì)在同步塊的入口位置和退出位置分別插入monitorenter和monitorexit

修飾方法的時(shí)候,在VM層面沒有任何特別指令,而是在Class文件的方法表中把a(bǔ)ccess_flags標(biāo)志名稱為ACC_SYNCHROINZED標(biāo)志為1

和juc包中l(wèi)ock的區(qū)別:1、lock必須finally手動(dòng)釋放鎖,lock等待可中斷,可實(shí)現(xiàn)公平鎖,多條件鎖 在并發(fā)包中會(huì)詳細(xì)說明。

1.6 volatile

內(nèi)存可見 修飾的變量 在變化后 馬上更新到主內(nèi)存 所有工作內(nèi)存的變量失效 獲取主內(nèi)存信息

防止指令重排 Java編譯時(shí) 由于優(yōu)化會(huì)對(duì)指令的前后順序重新排列 volatile修飾的代碼 不會(huì)重新排序

典型的例子 修飾變量i 多線程進(jìn)行i++操作 i變量就不是線程安全的 為什么呢?

1.7 transient

transient是類型修飾符,只能用來修飾字段。在對(duì)象序列化的過程中,標(biāo)記為transient的變量不會(huì)被序列化。

ArrayList 源碼中數(shù)據(jù)對(duì)象為什么是transient?為什么要重寫序列化的讀寫方法?

1.8 foreach

循環(huán)原理 其實(shí)就是iterator 可查看反編譯后的字節(jié)碼

遍歷數(shù)組 就和for一樣

遍歷集合 是用的集合的迭代器

未完待續(xù)。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,706評(píng)論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,036評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,203評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,451評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,677評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,857評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評(píng)論 1 295
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,407評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,643評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容

  • 本系列出于AWeiLoveAndroid的分享,在此感謝,再結(jié)合自身經(jīng)驗(yàn)查漏補(bǔ)缺,完善答案。以成系統(tǒng)。 Java基...
    濟(jì)公大將閱讀 1,537評(píng)論 1 6
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,258評(píng)論 0 2
  • 面向?qū)ο笾饕槍?duì)面向過程。 面向過程的基本單元是函數(shù)。 什么是對(duì)象:EVERYTHING IS OBJECT(萬(wàn)物...
    sinpi閱讀 1,082評(píng)論 0 4
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,686評(píng)論 0 11
  • 九種基本數(shù)據(jù)類型的大小,以及他們的封裝類。(1)九種基本數(shù)據(jù)類型和封裝類 (2)自動(dòng)裝箱和自動(dòng)拆箱 什么是自動(dòng)裝箱...
    關(guān)瑋琳l(shuí)inSir閱讀 1,902評(píng)論 0 47