java面試題-基礎(chǔ)篇(一)

試了好多博客平臺(tái)杉武,最后決定留在掘金啦艺智。準(zhǔn)備好好整理一下java的一些面試經(jīng)典問題圾亏,文章部分來(lái)源網(wǎng)上加入一些自己的見解十拣,PS: 別小看基礎(chǔ)題

1.關(guān)于 JVM JDK 和 JRE

JVM

Java虛擬機(jī)(JVM)是運(yùn)行Java字節(jié)碼的虛擬機(jī)。JVM有針對(duì)不同系統(tǒng)的特定實(shí)現(xiàn)志鹃,目的是使用相同的字節(jié)碼夭问,它們都會(huì)給出相同的結(jié)果。

JVM可以理解的代碼就叫做字節(jié)碼(即擴(kuò)展名為 .class 的文件)

Java 程序從源代碼到運(yùn)行一般有下面3步:


java程序運(yùn)行過程

我們需要格外注意的是 .class->機(jī)器碼這一步曹铃。在這一步JVM類加載器首先加載字節(jié)碼文件缰趋,然后通過解釋器逐行解釋執(zhí)行,這種方式的執(zhí)行速度會(huì)相對(duì)比較慢陕见。而且秘血,有些方法和代碼塊是經(jīng)常需要被調(diào)用的(也就是所謂的熱點(diǎn)代碼),所以后面引進(jìn)了JIT編譯器评甜,而JIT屬于運(yùn)行時(shí)編譯灰粮。當(dāng)JIT編譯器完成第一次編譯后,其會(huì)將字節(jié)碼對(duì)應(yīng)的機(jī)器碼保存下來(lái)忍坷,熱點(diǎn)代碼則下次可以直接使用而不用再次解釋粘舟。而我們知道,機(jī)器碼的運(yùn)行效率肯定是高Java解釋器的佩研。這也解釋了我們?yōu)槭裁唇?jīng)常會(huì)說(shuō)Java是編譯與解釋共存的語(yǔ)言柑肴。

HotSpot采用了惰性評(píng)估法,根據(jù)二八定律旬薯,消耗大部分系統(tǒng)資源的只有那一小部分的代碼(熱點(diǎn)代碼)晰骑,而這也就是JIT所需要編譯的部分。JVM會(huì)根據(jù)代碼每次被執(zhí)行的情況收集信息并相應(yīng)地做出一些優(yōu)化绊序,因此執(zhí)行的次數(shù)越多些侍,它的速度就越快。JDK 9引入了一種新的編譯模式AOT(Ahead ofTimeCompilation)政模,它是直接將字節(jié)碼編譯成機(jī)器碼,這樣就避免了JIT預(yù)熱等各方面的開銷蚂会。JDK支持分層編譯和AOT協(xié)作使用淋样。但是 ,AOT 編譯器的編譯質(zhì)量是肯定比不上 JIT 編譯器的胁住。

字節(jié)碼和不同系統(tǒng)的 JVM 實(shí)現(xiàn)是 Java 語(yǔ)言“一次編譯趁猴,隨處可以運(yùn)行”的關(guān)鍵所在刊咳。

JDK和JRE

JDK是Java Development Kit,它是功能齊全的Java SDK儡司。它擁有JRE所擁有的一切娱挨,還有編譯器(javac)和工具(如javadoc和jdb)。它能夠創(chuàng)建和編譯程序捕犬。

JRE 是 Java運(yùn)行時(shí)環(huán)境跷坝。它是運(yùn)行已編譯 Java 程序所需的所有內(nèi)容的集合,包括 Java虛擬機(jī)(JVM)碉碉,Java類庫(kù)柴钻,java命令和其他的一些基礎(chǔ)構(gòu)件。但是垢粮,它不能用于程序開發(fā)贴届。

2.基礎(chǔ)到枯的面試題-見一個(gè)加一個(gè)

  • Java 面向?qū)ο缶幊倘筇匦? 封裝(private...) 繼承(extends) 多態(tài)(implements)
  • 構(gòu)造器 (Constructor) 不能 重寫(override) 但是可以重載。
  • 抽象類和類都可以實(shí)現(xiàn)多個(gè)接口蜡吧,但是抽象類可以不實(shí)現(xiàn)或選擇性實(shí)現(xiàn)接口方法毫蚓。
  • 接口可以被接口(interface)繼承(extends)。
  • 字符常量相當(dāng)于一個(gè)整型值( ASCII 值),可以參加表達(dá)式運(yùn)算 eg: 'C'; 字符串常量代表一個(gè)地址值(該字符串在內(nèi)存中存放位置) eg: "C"
  • 靜態(tài)方法里面不能調(diào)用非靜態(tài)變量昔善,不能訪問非靜態(tài)成員變量元潘。
  • 如果有二貨問你java和javax有什么區(qū)別,emm就說(shuō)是歷史遺留名字而已其實(shí)沒什么區(qū)別耀鸦。
  • 接口在Java8 以后方法可以有默認(rèn)方法和靜態(tài)方法了柬批,接口中的成員變量必須是public static final的
  • 抽象類中的抽象方法(其前有abstract修飾)不能用private、static袖订、protected氮帐、final、synchronized洛姑、native訪問修飾符修飾上沐。
  • 外部接口和類不能被private和protected修飾,但是內(nèi)部接口和內(nèi)部類可以被四種訪問修飾符修飾楞艾。
  • 如果同時(shí)實(shí)現(xiàn)兩個(gè)接口参咙,接口中定義了一樣的默認(rèn)方法,必須重寫硫眯,不然會(huì)報(bào)錯(cuò)
  • 成員變量可以被 public,private,static 等修飾符所修飾蕴侧,而局部變量不能被訪問控制修飾符及 static 所修飾;但是两入,成員變量和局部變量都能被 final 所修飾

3.String StringBuild StringBuffer 用法和區(qū)別

String是不可變的净宵,值由final修飾,StringBuild和StringBuffer都繼承自AbstractStringBuilder。值可變择葡。這也導(dǎo)致了每次對(duì)String類型進(jìn)行改變時(shí)都會(huì)生成一個(gè)新的String對(duì)象紧武,改變內(nèi)存地址指向新的對(duì)象。而StringBuffer每次都會(huì)對(duì)StringBuffer 對(duì)象本身進(jìn)行操作敏储,而不是生成新的對(duì)象并改變對(duì)象引用阻星,StringBuilder 與StringBuffer對(duì)象不同的地方是,StringBuilder對(duì)象沒有同步鎖已添,性能更高但同時(shí)也是線程不安全的妥箕。

使用總結(jié):

1.操作少量的數(shù)據(jù): 適用String(少量數(shù)據(jù)時(shí)更方便)

2.單線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù): 適用StringBuilder(線程不安全)

3.多線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù): 適用StringBuffer(有同步鎖線程安全)

4.空構(gòu)造器的作用

Java 程序在執(zhí)行子類的構(gòu)造方法之前,如果沒有用 super() 來(lái)調(diào)用父類特定的構(gòu)造方法酝碳,則會(huì)調(diào)用父類中“沒有參數(shù)的構(gòu)造方法”矾踱。因此,如果父類中只定義了有參數(shù)的構(gòu)造方法疏哗,而在子類的構(gòu)造方法中又沒有用 super() 來(lái)調(diào)用父類中特定的構(gòu)造方法呛讲,則編譯時(shí)將發(fā)生錯(cuò)誤,因?yàn)?Java 程序在父類中找不到?jīng)]有參數(shù)的構(gòu)造方法可供執(zhí)行返奉。解決辦法是在父類里加上一個(gè)不做事且沒有參數(shù)的構(gòu)造方法贝搁。

也就是說(shuō)很有可能被繼承的類都需要一個(gè)空構(gòu)造方法。

5.== 與 equals

== : 它的作用是判斷兩個(gè)對(duì)象的地址是不是相等芽偏。即雷逆,判斷兩個(gè)對(duì)象是不是同一個(gè)對(duì)象(基本數(shù)據(jù)類型==比較的是值,引用數(shù)據(jù)類型==比較的是內(nèi)存地址)污尉。

equals() : 它的作用也是判斷兩個(gè)對(duì)象是否相等膀哲。但它一般有兩種使用情況:

  • 情況1:類沒有覆蓋 equals() 方法。則通過 equals() 比較該類的兩個(gè)對(duì)象時(shí)被碗,等價(jià)于通過“==”比較這兩個(gè)對(duì)象某宪。
  • 情況2:類覆蓋了 equals() 方法。一般锐朴,我們都覆蓋 equals() 方法來(lái)比較兩個(gè)對(duì)象的內(nèi)容是否相等兴喂;若它們的內(nèi)容相等,則返回 true (即焚志,認(rèn)為這兩個(gè)對(duì)象相等)衣迷。

舉個(gè)例子:

public class test1 {
    public static void main(String[] args) {
        String a = new String("ab"); // a 為一個(gè)引用
        String b = new String("ab"); // b為另一個(gè)引用,對(duì)象的內(nèi)容一樣
        String aa = "ab"; // 放在常量池中
        String bb = "ab"; // 從常量池中查找
        if (aa == bb) // true
            System.out.println("aa==bb");
        if (a == b) // false,非同一對(duì)象
            System.out.println("a==b");
        if (a.equals(b)) // true
            System.out.println("aEQb");
        if (42 == 42.0) { // true
            System.out.println("true");
        }
    }
}

說(shuō)明:

String 中的 equals 方法是被重寫過的酱酬,因?yàn)?object 的 equals 方法是比較的對(duì)象的內(nèi)存地址壶谒,而 String 的 equals 方法比較的是對(duì)象的值。
當(dāng)創(chuàng)建 String 類型的對(duì)象時(shí)膳沽,虛擬機(jī)會(huì)在常量池中查找有沒有已經(jīng)存在的值和要?jiǎng)?chuàng)建的值相同的對(duì)象佃迄,如果有就把它賦給當(dāng)前引用泼差。如果沒有就在常量池中重新創(chuàng)建一個(gè) String 對(duì)象。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呵俏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滔灶,更是在濱河造成了極大的恐慌普碎,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件录平,死亡現(xiàn)場(chǎng)離奇詭異麻车,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斗这,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門动猬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人表箭,你說(shuō)我怎么就攤上這事赁咙。” “怎么了免钻?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵彼水,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我极舔,道長(zhǎng)凤覆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任拆魏,我火速辦了婚禮盯桦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渤刃。我一直安慰自己拥峦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布溪掀。 她就那樣靜靜地躺著事镣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揪胃。 梳的紋絲不亂的頭發(fā)上璃哟,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音喊递,去河邊找鬼随闪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛骚勘,可吹牛的內(nèi)容都是我干的铐伴。 我是一名探鬼主播撮奏,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼当宴!你這毒婦竟也來(lái)了畜吊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤户矢,失蹤者是張志新(化名)和其女友劉穎玲献,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梯浪,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捌年,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挂洛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片礼预。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖虏劲,靈堂內(nèi)的尸體忽然破棺而出托酸,到底是詐尸還是另有隱情,我是刑警寧澤伙单,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布获高,位于F島的核電站,受9級(jí)特大地震影響吻育,放射性物質(zhì)發(fā)生泄漏念秧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一布疼、第九天 我趴在偏房一處隱蔽的房頂上張望摊趾。 院中可真熱鬧,春花似錦游两、人聲如沸砾层。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肛炮。三九已至,卻和暖如春宝踪,著一層夾襖步出監(jiān)牢的瞬間侨糟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工瘩燥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留秕重,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓厉膀,卻偏偏與公主長(zhǎng)得像溶耘,于是被迫代替她去往敵國(guó)和親二拐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

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

  • 轉(zhuǎn)自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,538評(píng)論 3 93
  • 由于時(shí)間倉(cāng)促,有些地方未寫完,后面會(huì)繼續(xù)補(bǔ)充.如有不妥之處,歡迎及時(shí)與我溝通. 如果你也是在學(xué)習(xí)java,給你們推...
    分不清java閱讀 2,835評(píng)論 0 15
  • 所有知識(shí)點(diǎn)已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數(shù)凳兵? 在 Jav...
    侯蛋蛋_閱讀 2,450評(píng)論 1 4
  • 01 西門吹雪者百新,劍神也,但劍神也是人留荔,既然是人吟孙,就有七情六欲。 而今天玄霄要說(shuō)的聚蝶,正是西門劍神的大男子主義。 玄...
    不工閱讀 903評(píng)論 0 2
  • 你看藻治,早春的花蕾 有沒有送去最嬌滴滴的露珠給你 那盛夏的玉蓮 是否也捎過去一縷清風(fēng) 好讓你透心涼爽 還有那深秋翻飛...
    夏風(fēng)吹紅了眼閱讀 122評(píng)論 0 5