Java 春招知識點(diǎn)總結(jié)

TCP 三次握手和四次揮手

三次握手
  1. 第一次
    第一次握手:建立連接時(shí)逞泄,客戶端發(fā)送syn包(syn=j)到服務(wù)器患整,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn)喷众;SYN:同步序列編號(Synchronize Sequence Numbers)各谚。
  2. 第二次
    第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1)到千,同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k)昌渤,即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)憔四;
  3. 第三次
    第三次握手:客戶端收到服務(wù)器的SYN+ACK包愈涩,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)望抽,此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài)履婉,完成三次握手煤篙。
  4. 完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù)毁腿,在上述過程中辑奈,還有一些重要的概念:未連接隊(duì)列。

在三次握手協(xié)議中已烤,服務(wù)器維護(hù)一個(gè)未連接隊(duì)列鸠窗,該隊(duì)列為每個(gè)客戶端的SYN包(syn=j)開設(shè)一個(gè)條目,該條目表明服務(wù)器已收到SYN包胯究,并向客戶發(fā)出確認(rèn)稍计,正在等待客戶的確認(rèn)包。這些條目所標(biāo)識的連接在服務(wù)器處于 Syn_RECV狀態(tài)裕循,當(dāng)服務(wù)器收到客戶的確認(rèn)包時(shí)臣嚣,刪除該條目,服務(wù)器進(jìn)入ESTABLISHED狀態(tài)剥哑。

四次揮手
  1. TCP客戶端發(fā)送一個(gè)FIN硅则,用來關(guān)閉客戶到服務(wù)器的數(shù)據(jù)傳送。
  2. 服務(wù)器收到這個(gè)FIN株婴,它發(fā)回一個(gè)ACK怎虫,確認(rèn)序號為收到的序號加1。和SYN一樣困介,一個(gè)FIN將占用一個(gè)序號大审。
  3. 服務(wù)器關(guān)閉客戶端的連接,發(fā)送一個(gè)FIN給客戶端座哩。
  4. 客戶端發(fā)回ACK報(bào)文確認(rèn)徒扶,并將確認(rèn)序號設(shè)置為收到序號加1。
關(guān)于為什么要三次握手和四次分手

參考一
參考二

== 和 equals 的區(qū)別是什么八回?

  1. == 的作用
  • 對于基本類型(比如 int酷愧、flaot驾诈、double)缠诅,比較的是值是否相同。
  • 對于引用類型(比如 String乍迄、Integer)管引,比較的是引用是否相同。
  1. equals 的作用
  • 一般情況下比較的都是引用相同闯两,但是對于 String褥伴、Integer等類谅将,其重寫了 equals() 方法,使之成為了值比較重慢。
  1. 測試代碼 1
public class Test {
    private static class Demo{
        private int val;
        private Demo(int v){
            val = v;
        }
    }
    public  static void main(String [] args){
        int i1 = 5;
        int i2 = 5;
        System.out.println(i1 == i2);
        // int 不是引用類型的實(shí)例(對象)饥臂,所以沒有 equals

        Demo d1 = new Demo(5);
        Demo d2 = new Demo(5);
        System.out.println(d1 == d2);
        System.out.println(d1.equals(d2));
        // equals() 默認(rèn)是引用比較。

        String s1 = new String("666");
        String s2 = new String("666");
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
        // 但是 String 重寫了 equals方法似踱,使之成為了值比較隅熙。
    }
}

測試 1 的輸出為:

true
false
false
false
true
  1. 測試代碼2
public class Test {
    public static void main(String [] args){
        String info = "b";
        String A = "abc";
        String B = "a"+info+"c";
        String C = "a"+"b"+"c";
        // == 在引用類型下比較的是引用是否相同
        System.out.println(A==B);
        System.out.println(A==C);
    }
}

其輸出如下:

false
true

最開始,我對這樣的結(jié)果也很訝異核芽,我預(yù)測的是兩個(gè)輸出都是 false, 因?yàn)?String 的 + 語法糖底層是通過 new StringBuffer()囚戚,然后調(diào)用 append() 和 toString() 實(shí)現(xiàn)的,明顯引用不一樣了轧简,應(yīng)該都輸出 false驰坊,但是這里還有更深層次的知識。
對象 info 和 A 均使用的字符串字面量哮独,說白話點(diǎn)拳芙,就是直接把字符串寫死,在編譯期間借嗽,這種字面量會直接放入 class 文件的常量池中态鳖,從而實(shí)現(xiàn)復(fù)用。C 雖然是動態(tài)拼接出來的字符串恶导,但是所有參與拼接的部分都是已知的字面量浆竭,在編譯期間,這種拼接會被優(yōu)化惨寿,編譯器直接幫你拼好邦泄,因此String C = "a" + "b" + "c";在class文件中被優(yōu)化成String C = "abc",A裂垦、C指向的是同一個(gè)內(nèi)存地址所以A == C成立顺囊,但是 B 的拼接過程中除了拼接字符串字面量,還有 info 這個(gè)對象的參與蕉拢,因此無法在編譯期間做優(yōu)化特碳,B 指向了和 A 不同的內(nèi)存地址。

類修飾符

修飾符 類別 含義
public 訪問控制符 將一個(gè)類聲明為公共類晕换,它可以被任何對象訪問午乓;每個(gè) Java 程序有且只有一個(gè)類是 public,它被稱為主類 闸准,其他外部類無訪問控制修飾符益愈,具有包訪問性。
缺省 訪問控制符 缺省修飾符時(shí),這個(gè)類只能被同一個(gè)包中的類訪問或引用蒸其;這一訪問特性又稱為包訪問性敏释。
abstract 訪問控制符 將一個(gè)類聲明為抽象類,沒有任何實(shí)現(xiàn)方法摸袁,需要子類提供方法的實(shí)現(xiàn)钥顽,所以不能創(chuàng)建該類的實(shí)例。
final 訪問控制符 將一個(gè)類聲明為非繼承類靠汁,則表示它不能被其他類繼承耳鸯。

上面所說的修飾符應(yīng)該是針對外部類來說的,一個(gè)類的內(nèi)部類可以被其他訪問控制修飾符 protected膀曾、default县爬、private 和非訪問控制符 static、final等修飾添谊〔圃總的來說,內(nèi)部類在修飾符上的使用上斩狱,類似于類的成員(內(nèi)部類可用的修飾符只是類成員可用的修飾符的一個(gè)真子集耳高;而且具體訪問權(quán)限還有細(xì)微的差別,因此只能說類似)所踊。

(常用)成員變量/方法修飾符

修飾符 類別 含義
public 訪問控制符 指定該變量/方法為公共的泌枪,它可以被任何對象訪問。
private 訪問控制符 指定該變量/方法只允許自己類的方法訪問秕岛,其他任何類(包括子類)中的方法均不能訪問此變量/方法碌燕。
protected 訪問控制符 指定該變量/方法只可以被它自己的類及其子類或同一包中的其他類訪問。在子類中可以覆蓋此變量继薛。
缺省 訪問控制符 表示同一包中的其他類可以訪問此成員變量/方法修壕,其它包則不能。
final 訪問控制符 指定該變量不能改變/該方法不能被重載
static 訪問控制符 指定該變量被所有實(shí)例共享/指定不需要實(shí)例化一個(gè)對象就能調(diào)用該方法

注意遏考,無論什么修飾符慈鸠,某類的所有成員總是對該類的方法和實(shí)例可見!

接口和抽象類的聯(lián)系與區(qū)別

聯(lián)系
  1. 接口和抽象類都不能被實(shí)例化灌具,它們都位于繼承樹的頂端青团,用于被其他類實(shí)現(xiàn)和繼承。

  2. 接口和抽象類都可以包含抽象方法咖楣,實(shí)現(xiàn)接口或繼承抽象類的普通子類都必須實(shí)現(xiàn)這些抽象方法督笆。

區(qū)別
  1. 接口里只能包含抽象方法,靜態(tài)方法和默認(rèn)方法截歉,不能為普通方法提供方法實(shí)現(xiàn)胖腾,抽象類則完全可以包含普通方法烟零。

  2. 接口里只能定義靜態(tài)常量瘪松,不能定義普通成員變量咸作,抽象類里則既可以定義普通成員變量,也可以定義靜態(tài)常量宵睦。

  3. 接口不能包含構(gòu)造器记罚,抽象類可以包含構(gòu)造器,抽象類里的構(gòu)造器并不是用于創(chuàng)建對象壳嚎,而是讓其子類調(diào)用這些構(gòu)造器來完成屬于抽象類的初始化操作桐智。

  4. 接口里不能包含初始化塊,但抽象類里完全可以包含初始化塊烟馅。

  5. 一個(gè)類最多只能有一個(gè)直接父類说庭,包括抽象類,但一個(gè)類可以直接實(shí)現(xiàn)多個(gè)接口郑趁,通過實(shí)現(xiàn)多個(gè)接口可以彌補(bǔ) Java 單繼承的不足刊驴。

String、StringBuilder寡润、StringBuffer的區(qū)別

String 創(chuàng)建的是不可變的對象捆憎,修改字符串需要 JVM 創(chuàng)建、回收 String 對象梭纹,比較耗時(shí)躲惰,適用于少量操作字符串的場景。
StringBuilder 可以在原有對象上進(jìn)行操作变抽,但卻是非線程安全的础拨,適用于單線程下頻繁操作字符串的場景。
StringBuffer 在 StringBuilder 的基礎(chǔ)上對某些方法新增了synchronized鎖原語绍载,所以是線程安全的太伊,也正是這個(gè)原因,StringBuffer 的速度要慢于 StringBuilder逛钻;適用于多線程下頻繁操作字符串的場景僚焦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市曙痘,隨后出現(xiàn)的幾起案子芳悲,更是在濱河造成了極大的恐慌,老刑警劉巖边坤,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件名扛,死亡現(xiàn)場離奇詭異,居然都是意外死亡茧痒,警方通過查閱死者的電腦和手機(jī)肮韧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弄企,你說我怎么就攤上這事超燃。” “怎么了拘领?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵意乓,是天一觀的道長。 經(jīng)常有香客問我约素,道長届良,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任圣猎,我火速辦了婚禮士葫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘送悔。我一直安慰自己为障,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布放祟。 她就那樣靜靜地躺著鳍怨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跪妥。 梳的紋絲不亂的頭發(fā)上鞋喇,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音眉撵,去河邊找鬼侦香。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纽疟,可吹牛的內(nèi)容都是我干的罐韩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼污朽,長吁一口氣:“原來是場噩夢啊……” “哼散吵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蟆肆,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤矾睦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后炎功,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枚冗,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年蛇损,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赁温。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坛怪。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖股囊,靈堂內(nèi)的尸體忽然破棺而出袜匿,到底是詐尸還是另有隱情,我是刑警寧澤毁涉,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站锈死,受9級特大地震影響贫堰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜待牵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一其屏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缨该,春花似錦偎行、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膨更,卻和暖如春妙真,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荚守。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工珍德, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矗漾。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓锈候,卻偏偏與公主長得像,于是被迫代替她去往敵國和親敞贡。 傳聞我的和親對象是個(gè)殘疾皇子泵琳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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