1. JAVA基礎(chǔ)

  1. JDK和JRE區(qū)別
    JDK:Java Development Kit, Java開發(fā)工具包,包含開發(fā)環(huán)境和運(yùn)行環(huán)境请毛。
    JRE:Java Runtime Environment车胡,Java運(yùn)行環(huán)境。
    簡(jiǎn)而言之:JDK包含了JRE隙姿,還包含編譯源碼的編譯器javac。

如果你需要運(yùn)行 java 程序唉擂,只需安裝 JRE 就可以了餐屎,如果你需要編寫 java 程序,需要安裝 JDK玩祟。

  1. == 和 equals 的區(qū)別是什么腹缩?

對(duì)于==的比較,分基本類型和引用類型:

  • 基本類型:在比較值空扎;
  • 引用類型:比較的引用

對(duì)于equals比較藏鹊,一直是比較值

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

代碼解讀:因?yàn)?x 和 y 指向的是同一個(gè)引用,所以 == 也是 true勺卢,而 new String()方法則重寫開辟了內(nèi)存空間伙判,所以 == 結(jié)果為 false,而 equals 比較的一直是值黑忱,所以結(jié)果都為 true宴抚。

關(guān)于equals
equals 本質(zhì)上就是 ==,只不過(guò) String 和 Integer 等重寫了 equals 方法甫煞,把它變成了值比較菇曲。

先看兩個(gè)自定義類,這倆類沒(méi)有改寫equals方法抚吠,所以此時(shí)equals就是==常潮,比較的引用:

class Cat {
    public Cat(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1.equals(c2)); // false

看equals源碼:

public boolean equals(Object obj) {
    return (this == obj);
}

那么兩個(gè)String 對(duì)象為何比較的值:

String s1 = new String("老王");
String s2 = new String("老王");
System.out.println(s1.equals(s2)); // true

我們看String 的equals方法源碼:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

1.先判斷是否引用一樣;
2.是否為String類型
3.用數(shù)組依次比較值

總結(jié) :== 對(duì)于基本類型來(lái)說(shuō)是值比較楷力,對(duì)于引用類型來(lái)說(shuō)是比較的是引用喊式;而 equals 默認(rèn)情況下是引用比較,只是很多類重新了 equals 方法萧朝,比如 String岔留、Integer 等把它變成了值比較,所以一般情況下 equals 比較的是值是否相等检柬。

  1. 兩個(gè)對(duì)象的 hashCode()相同献联,則 equals()也一定為 true,對(duì)嗎何址?
    不對(duì)里逆,兩個(gè)對(duì)象的 hashCode()相同,equals()不一定 true用爪。
    hashCode()說(shuō)到底就是返回一個(gè)int值原押,有可能會(huì)哈希沖突的。

  2. final 在 java 中有什么作用项钮?

  • 修飾類:不能繼承
  • 修飾方法:不能重寫
  • 修飾變量:就是常量班眯,必須初始化希停,不能修改
  1. java 中的 Math.round(-1.5) 等于多少烁巫?
    等于 -1署隘,因?yàn)樵跀?shù)軸上取值時(shí),中間值(0.5)向右取整亚隙,所以正 0.5 是往上取整磁餐,負(fù) 0.5 是直接舍棄。

  2. String 屬于基礎(chǔ)的數(shù)據(jù)類型嗎阿弃?
    String 不屬于基礎(chǔ)類型诊霹,基礎(chǔ)類型有 8 種:byte、boolean渣淳、char脾还、short、int入愧、float鄙漏、long、double棺蛛,而 String 屬于對(duì)象怔蚌。

  3. java 中操作字符串都有哪些類?它們之間有什么區(qū)別旁赊?
    String桦踊、StringBuffer、StringBuilder
    String 和 StringBuffer终畅、StringBuilder 的區(qū)別在于 String 聲明的是不可變的對(duì)象籍胯,每次操作都會(huì)生成新的 String 對(duì)象,然后將指針指向新的 String 對(duì)象离福,而 StringBuffer杖狼、StringBuilder 可以在原有對(duì)象的基礎(chǔ)上進(jìn)行操作,所以在經(jīng)常改變字符串內(nèi)容的情況下最好不要使用 String术徊。


    截屏2020-06-21下午3.39.36.png

StringBuffer 和 StringBuilder 最大的區(qū)別在于本刽,StringBuffer 是線程安全的,而 StringBuilder 是非線程安全的赠涮,但 StringBuilder 的性能卻高于 StringBuffer子寓,所以在單線程環(huán)境下推薦使用 StringBuilder,多線程環(huán)境下推薦使用 StringBuffer笋除。

  1. String str="i"與 String str=new String("i")一樣嗎斜友?
    不一樣,因?yàn)閮?nèi)存的分配方式不一樣垃它。String str="i"的方式鲜屏,java 虛擬機(jī)會(huì)將其分配到常量池中烹看;而 String str=new String("i") 則會(huì)被分到堆內(nèi)存中。
String x = "張三";
String y = "張三";
String z = new String("張三");
System.out.println(x == y); // true
System.out.println(x == z); // false

為什么會(huì)輸出上邊的結(jié)果呢洛史,String x = "張三" 的方式惯殊,Java 虛擬機(jī)會(huì)將其分配到常量池中,而常量池中沒(méi)有重復(fù)的元素也殖,比如當(dāng)執(zhí)行“張三”時(shí)土思,java虛擬機(jī)會(huì)先在常量池中檢索是否已經(jīng)有“張三”,如果有那么就將“張三”的地址賦給變量,如果沒(méi)有就創(chuàng)建一個(gè)忆嗜,然后在賦給變量己儒;而 String z = new String(“張三”) 則會(huì)被分到堆內(nèi)存中,即使內(nèi)容一樣還是會(huì)創(chuàng)建新的對(duì)象捆毫。

  1. 如何將字符串反轉(zhuǎn)闪湾?
    使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。
// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefg");
System.out.println(stringBuilder.reverse()); // gfedcba
  1. String 類的常用方法都有那些绩卤?
    indexOf():返回指定字符的索引途样。

    charAt():返回指定索引處的字符。

    replace():字符串替換省艳。

    trim():去除字符串兩端空白娘纷。

    split():分割字符串,返回一個(gè)分割后的字符串?dāng)?shù)組跋炕。

    getBytes():返回字符串的 byte 類型數(shù)組赖晶。

    length():返回字符串長(zhǎng)度。

    toLowerCase():將字符串轉(zhuǎn)成小寫字母辐烂。

    toUpperCase():將字符串轉(zhuǎn)成大寫字符遏插。

    substring():截取字符串。

    equals():字符串比較纠修。

  2. 抽象類必須要有抽象方法嗎胳嘲?
    不需要,抽象類不一定非要有抽象方法扣草。

abstract class Cat {
    public static void sayHi() {
        System.out.println("hi~");
    }
}
  1. 普通類和抽象類有哪些區(qū)別了牛?
    抽象方法:普通類沒(méi),抽象類可以有
    實(shí)例化:抽象類不能直接實(shí)例化

  2. 抽象類能使用 final 修飾嗎辰妙?
    不能鹰祸,定義抽象類就是讓其他類繼承的,如果定義為 final 該類就不能被繼承密浑,這樣彼此就會(huì)產(chǎn)生矛盾蛙婴,所以 final 不能修飾抽象類,如下圖所示尔破,編輯器也會(huì)提示錯(cuò)誤信息.

  3. 接口和抽象類有什么區(qū)別街图?
    實(shí)現(xiàn):接口用implement實(shí)現(xiàn)浇衬;抽象類用extends;
    構(gòu)造函數(shù):接口不能有餐济;抽象類可以有
    main方法:接口不能有耘擂;抽象類可以有
    實(shí)現(xiàn)數(shù)量:類可以實(shí)現(xiàn)多個(gè)接口;只能繼承一個(gè)抽象方法颤介;
    訪問(wèn)修飾符:接口默認(rèn)public;抽象類可以是任意訪問(wèn)修飾符梳星。

  4. java 中 IO 流分為幾種赞赖?
    按功能分:輸入流和輸出流
    按類型分:字節(jié)流和字符流
    字節(jié)流和字符流的區(qū)別是:

  • 字節(jié)流按 8 位傳輸以字節(jié)為單位輸入輸出數(shù)據(jù)滚朵,字符流按 16 位傳輸以字符為單位輸入輸出數(shù)據(jù)。
  • 字節(jié)流可用于任何類型的對(duì)象前域,包括二進(jìn)制對(duì)象辕近,而字符流只能處理字符或者字符串; 字節(jié)流提供了處理任何類型的IO操作的功能匿垄,但它不能直接處理Unicode字符移宅,而字符流就可以
  • 字節(jié)流在操作的時(shí)候本身是不會(huì)用到緩沖區(qū)(內(nèi)存)的,是與文件本身直接操作的椿疗,而字符流在操作的時(shí)候是使用到緩沖區(qū)的.
    字節(jié)流在操作文件時(shí)漏峰,即使不關(guān)閉資源(close方法),文件也能輸出届榄,但是如果字符流不使用close方法的話浅乔,則不會(huì)輸出任何內(nèi)容,說(shuō)明字符流用的是緩沖區(qū)铝条,并且可以使用flush方法強(qiáng)制進(jìn)行刷新緩沖區(qū)靖苇,這時(shí)才能在不close的情況下輸出內(nèi)容

https://blog.csdn.net/rentian1/article/details/78291383

  1. BIO、NIO班缰、AIO 有什么區(qū)別贤壁?
  • BIO:Block IO 同步阻塞式 IO,就是我們平常使用的傳統(tǒng) IO埠忘,它的特點(diǎn)是模式簡(jiǎn)單使用方便脾拆,并發(fā)處理能力低。
  • NIO:New IO 同步非阻塞 IO莹妒,是傳統(tǒng) IO 的升級(jí)名船,客戶端和服務(wù)器端通過(guò) Channel(通道)通訊,實(shí)現(xiàn)了多路復(fù)用动羽。
  • AIO:Asynchronous IO 是 NIO 的升級(jí)包帚,也叫 NIO2,實(shí)現(xiàn)了異步非堵塞 IO 运吓,異步 IO 的操作基于事件和回調(diào)機(jī)制渴邦。
  1. Files的常用方法都有哪些疯趟?
    Files.exists():檢測(cè)文件路徑是否存在。

    Files.createFile():創(chuàng)建文件谋梭。

    Files.createDirectory():創(chuàng)建文件夾信峻。

    Files.delete():刪除一個(gè)文件或目錄。

    Files.copy():復(fù)制文件瓮床。

    Files.move():移動(dòng)文件盹舞。

    Files.size():查看文件個(gè)數(shù)。

    Files.read():讀取文件隘庄。

    Files.write():寫入文件踢步。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丑掺,隨后出現(xiàn)的幾起案子获印,更是在濱河造成了極大的恐慌,老刑警劉巖街州,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兼丰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡唆缴,警方通過(guò)查閱死者的電腦和手機(jī)鳍征,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)面徽,“玉大人艳丛,你說(shuō)我怎么就攤上這事《芳桑” “怎么了质礼?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)织阳。 經(jīng)常有香客問(wèn)我眶蕉,道長(zhǎng),這世上最難降的妖魔是什么唧躲? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任造挽,我火速辦了婚禮,結(jié)果婚禮上弄痹,老公的妹妹穿的比我還像新娘饭入。我一直安慰自己,他們只是感情好肛真,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布谐丢。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乾忱。 梳的紋絲不亂的頭發(fā)上讥珍,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音窄瘟,去河邊找鬼衷佃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蹄葱,可吹牛的內(nèi)容都是我干的氏义。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼图云,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼惯悠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起琼稻,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吮螺,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后帕翻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萝风,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年嘀掸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片规惰。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡睬塌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出歇万,到底是詐尸還是另有隱情揩晴,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布贪磺,位于F島的核電站硫兰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寒锚。R本人自食惡果不足惜劫映,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刹前。 院中可真熱鬧泳赋,春花似錦、人聲如沸喇喉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至千诬,卻和暖如春撒踪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背大渤。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工制妄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泵三。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓耕捞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親烫幕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俺抽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359