Java面試題——基礎篇

1. JDK和JRE有什么區(qū)別叠蝇?

JRE:JRE是Java Runtime Environment的縮寫蜕该,顧名思義是java運行時環(huán)境绢淀,包含了java虛擬機费薄,java基礎類庫召廷。是使用java語言編寫的程序運行所需要的軟件環(huán)境,是提供給想運行java程序的用戶使用的泡孩,還有所有的Java類庫的class文件,都在lib目錄下,并且都打包成了jar。

至于在Windows上的虛擬機是哪個文件呢县遣?就是<JRE安裝目錄>/bin/client中的jvm.dll夸政。

JDK:Jdk是Java Development Kit的縮寫朋譬,顧名思義是java開發(fā)工具包狡赐,是程序員使用java語言編寫java程序所需的開發(fā)工具包搀擂,是提供給程序員使用的威恼。JDK包含了JRE,同時還包含了編譯java源碼的編譯器javac附迷,還包含了很多java程序調(diào)試和分析的工具:jconsole捻悯,jvisualvm等工具軟件,還包含了java程序編寫所需的文檔和demo例子程序妥衣。

如果你需要運行java程序熙暴,只需安裝JRE就可以了狞谱。如果你需要編寫java程序叭莫,需要安裝JDK辩蛋。

2.==和equals的區(qū)別是什么颖医?

==:

對于基本類型和引用類型==的作用效果是不同的感昼,如下所示:

  • 基本類型:比較的是值是否相同层玲;
  • 引用類型:比較的是引用是否相同憨愉。所以植袍,除非是同一個new出來的對象贷笛,他們的比較后的結果為true掀淘,否則比較后結果為false首尼。 JAVA當中所有的類都是繼承于Object這個基類的范舀,在Object中的基類中定義了一個equals的方法蛾茉,這個方法的初始行為是比較對象的內(nèi)存地 址,但在一些類庫當中這個方法被覆蓋掉了疾党,如String,Integer,Date在這些類當中equals有其自身的實現(xiàn),而不再是比較類在堆內(nèi)存中的存放地址了。
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

代碼解讀:程序在運行的時候會創(chuàng)建一個字符串緩沖池永脓,當使用y=”string"這樣的表達式創(chuàng)建字符串的時候似芝,程序首先會在這個String緩沖池中尋找相同值的對象寞奸,由于x先被放到了緩沖池中,所以在y被創(chuàng)建的時候聚凹,程序找到了具有相同值的x,將x的引用交給了y旗们。而z使用的new操作符漓库,它告訴程序我需要一個新的茂装,于是創(chuàng)建了一個新對象到內(nèi)存中怠蹂。

修改下程序:

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

java.lang.String的intern()方法"string".intern()方法的返回值還是字符串"string",表面上看起來好像這個方 法沒什么用處少态。但實際上城侧,它做了個小動作:檢查字符串池里是否存在"string"這么一個字符串,如果存在彼妻,就返回池里的字符串嫌佑;如果不存在,該方法會 把"string"添加到字符串池中侨歉,然后再返回它的引用歧强。

equals:

equals 本質(zhì)上就是 ==,只不過 String 和 Integer 等重寫了 equals 方法为肮,把它變成了值比較摊册。

總結 :== 對于基本類型來說是值比較,對于引用類型來說是比較的是引用颊艳;而 equals 默認情況下是引用比較茅特,只是很多類重寫了 equals 方法,比如 String棋枕、Integer 等把它變成了值比較白修,所以一般情況下 equals 比較的是值是否相等。

3.兩個對象的hashCode()相同重斑,則equals()也一定為 true兵睛,對嗎?

不對窥浪。

        String str1 = "通話";
        String str2 = "重地";
        System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
        System.out.println(str1.equals(str2));

執(zhí)行結果:

str1:1179395 | str2:1179395
false

JDK中關于hashCode的規(guī)定:

hashCode
public int hashCode()返回該對象的哈希碼值祖很。支持此方法是為了提高哈希表(例如 Java.util.Hashtable 提供的哈希表)的性能。
hashCode 的常規(guī)協(xié)定是:
在 Java 應用程序執(zhí)行期間漾脂,在對同一對象多次調(diào)用 hashCode 方法時假颇,必須一致地返回相同的整數(shù),前提是將對象進行 equals 比較時所用的信息沒有被修改骨稿。從某一應用程序的一次執(zhí)行到同一應用程序的另一次執(zhí)行笨鸡,該整數(shù)無需保持一致。
如果根據(jù) equals(Object) 方法坦冠,兩個對象是相等的形耗,那么對這兩個對象中的每個對象調(diào)用 hashCode 方法都必須生成相同的整數(shù)結果。
如果根據(jù) equals(java.lang.Object) 方法辙浑,兩個對象不相等激涤,那么對這兩個對象中的任一對象上調(diào)用 hashCode 方法不 要求一定生成不同的整數(shù)結果。但是例衍,程序員應該意識到昔期,為不相等的對象生成不同整數(shù)結果可以提高哈希表的性能已卸。
實際上,由 Object 類定義的 hashCode 方法確實會針對不同的對象返回不同的整數(shù)硼一。(這一般是通過將該對象的內(nèi)部地址轉(zhuǎn)換成一個整數(shù)來實現(xiàn)的累澡,但是 JavaTM 編程語言不需要這種實現(xiàn)技巧。)

JDK規(guī)定當你調(diào)用equals方法比較兩個對象相等時般贼,他們調(diào)用hashcode方法時愧哟,都應該返回相同的整數(shù)值,也就是hashcode相等哼蛆。記住蕊梧,是應該相同。為什么應該腮介?下面這段紅色字體說了肥矢,必須重寫hashcode方法維護協(xié)定!如果你不重寫叠洗,那么就不能保證hashcode返回相同結果甘改。
換句話說:重寫equals方法時請必須重寫hashcode方法,以保證equals方法相等時兩個對象hashcode返回相同的值灭抑。如果沒有重寫hashcode方法的話十艾,hashcode的值就不一定相等了。

4.final在java中有什么作用腾节?

  • final修飾的類叫最終類忘嫉,該類不能被繼承。
  • final修飾的方法不能被重寫案腺。
  • final修飾的變量叫常量庆冕,常量必須初始化,初始化之后值就不能被修改救湖。

final的一些重點知識:
1.final成員變量必須在聲明的時候初始化或者在構造器中初始化愧杯,否則就會報編譯錯誤。
2.不能夠?qū)inal變量再次賦值鞋既。
3.在匿名類中所有變量都必須是final變量。
4.final和abstract這兩個關鍵字是反相關的耍铜,final類就不可能是abstract的邑闺。
5.final方法在編譯階段綁定,稱為靜態(tài)綁定棕兼。
6.對于集合對象聲明為final指定是引用不能被更改陡舅,但是你可以向其中增加,刪除或者修改內(nèi)容伴挚。

5.java 中的 Math.round(-1.5) 等于多少靶衍?

等于 -1灾炭,因為在數(shù)軸上取值時,中間值(0.5)向右取整颅眶,所以正 0.5 是往上取整蜈出,負 0.5 是直接舍棄。
Math類的幾個常見方法:

  • ceil():返回大于等于(>=)給定參數(shù)的最小整數(shù)涛酗。
  • floor():返回小于等于(<=)給定參數(shù)的最大整數(shù)铡原。
  • rint():返回與參數(shù)最接近的整數(shù)。返回類型為double商叹。
  • round():6它表示四舍五入燕刻,算法為Math.floor(x+0.5),即將原來的數(shù)字加上0.5后再向下取整剖笙。

6.String 屬于基礎的數(shù)據(jù)類型嗎卵洗?

Strng不屬于基礎類型,基礎類型有8種:byte弥咪,boolean忌怎,char,short酪夷,int榴啸,float,long晚岭,double鸥印。String屬于對象。

7.java 中操作字符串都有哪些類坦报?它們之間有什么區(qū)別库说?

操作字符串的類有:String、StringBuffer片择、StringBuilder潜的。
String 和 StringBuffer、StringBuilder 的區(qū)別在于 String 聲明的是不可變的對象字管,每次操作都會生成新的 String 對象啰挪,然后將指針指向新的 String 對象,而 StringBuffer嘲叔、StringBuilder 可以在原有對象的基礎上進行操作亡呵,所以在經(jīng)常改變字符串內(nèi)容的情況下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的區(qū)別在于硫戈,StringBuffer 是線程安全的锰什,而 StringBuilder 是非線程安全的,但 StringBuilder 的性能卻高于 StringBuffer,所以在單線程環(huán)境下推薦使用 StringBuilder汁胆,多線程環(huán)境下推薦使用 StringBuffer梭姓。

8.String str="i"與 String str=new String("i")一樣嗎?

不一樣嫩码,因為內(nèi)存的分配方式不一樣誉尖。String str="i"的方式,java 虛擬機會將其分配到常量池中谢谦;而 String str=new String("i") 則會被分到堆內(nèi)存中释牺。

9.接口和抽象類有什么區(qū)別?

  • 接口能夠多實現(xiàn)回挽,而抽象類只能單獨被繼承没咙,其本質(zhì)就是,一個類能繼承多個接口千劈,而只能繼承一個抽象類祭刚。
  • 方法上,抽象類的方法可以用abstract和public或者protect修飾墙牌。而接口默認為public abstract修飾涡驮。
  • 抽象類的方法可以有需要子類實現(xiàn)的抽象方法,也可以有具體的方法喜滨。而接口在老版本的jdk中捉捅,只能有抽象方法,但是Java8版本的接口中虽风,接口可以帶有默認方法棒口。
  • 屬性上,抽象類可以用各種各樣的修飾符修飾辜膝。而接口的屬性是默認的public static final无牵。
  • 抽象類中可以含有靜態(tài)代碼塊和靜態(tài)方法,而接口不能含有靜態(tài)方法和靜態(tài)代碼塊厂抖。
  • 抽象類可以含有構造方法茎毁,接口不能含有構造方法。

10.面向?qū)ο蟮奶卣鳎?/h2>
  • 封裝
  • 抽象
  • 繼承
  • 多態(tài)

11.int 和 Integer 有什么區(qū)別忱辅?

Integer是int的包裝類七蜘,int的初值為0,Integer的初值為null耕蝉。

        int i = 128;
        Integer i2 = 128;
        Integer i3 = new Integer(128);
        //Integer會自動拆箱為int崔梗,所以為true
        System.out.println(i == i2);
        System.out.println(i == i3);
        System.out.println("**************");
        Integer i5 = 127;//java在編譯的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);
        Integer i6 = 127;
        System.out.println(i5 == i6);//true
        /*Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6);//false
*/        Integer ii5 = new Integer(127);
        System.out.println(i5 == ii5); //false
        Integer i7 = new Integer(128);
        Integer i8 = new Integer(123);
        System.out.println(i7 == i8);  //false

首先,i和i2垒在,i3比較都會輸出true,這是因為Integer和int比都會自動拆箱。
i5和i6第一次比較輸出的是true场躯,而第二次輸出的就是false谈为,這是為什么呢?在java編譯的時候踢关,Integer i5=127會被翻譯為Integer.valueOf(127)伞鲫。以下是valueOf方法的源碼:

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
private static class IntegerCache {
        static final int low = -128;
        static final int high;
        static final Integer cache[];

        static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                try {
                    int i = parseInt(integerCacheHighPropValue);
                    i = Math.max(i, 127);
                    // Maximum array size is Integer.MAX_VALUE
                    h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                } catch( NumberFormatException nfe) {
                    // If the property cannot be parsed into an int, ignore it.
                }
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);

            // range [-128, 127] must be interned (JLS7 5.1.7)
            assert IntegerCache.high >= 127;
        }

        private IntegerCache() {}
    }

從源代碼可以看出-128到127之間的值,會直接返回緩存中對應的值签舞,并不會new秕脓,所以第二次比較為false。

總結:

  • 無論如何儒搭,Integer和new Integer都不會相等吠架。不會經(jīng)歷拆箱過程,類似i2和i3搂鲫,i5和ii5的比較傍药。
  • 如果兩個都是非new出來的Integer,如果數(shù)在-128到127之間魂仍,則為true拐辽,否則為false。
  • int和Integer(無論是通過什么創(chuàng)建)擦酌,都為true俱诸,因為會把Integer自動拆箱為int再去比。

12.重載和重寫的區(qū)別?

重載是編譯時的多態(tài)性赊舶,重寫是運行時的多態(tài)性睁搭。對于重載而言,是發(fā)生在一個類中锯岖,同名的方法如果有不同的參數(shù)列表(類型介袜,數(shù)量)則視為重載;重寫發(fā)生在子類和父類之間出吹,重寫要求子類與父類被重寫方法有相同的參數(shù)列表遇伞,兼容的返回類型,比父類方法更好訪問捶牢,不能比父類聲明更多的異常鸠珠。重載對返回類型沒有特殊的要求,不能根據(jù)返回類型進行區(qū)分秋麸。

13.session 與 cookie 區(qū)別渐排?

  • session是保存在服務器端,理論上是沒有大小限制灸蟆,只要內(nèi)存夠大驯耻。
  • 瀏覽器第一次訪問服務器的時候后創(chuàng)建一個session對象并返回一個JSESSIONID=ID的值,創(chuàng)建一個Cookie對象key為JISSIONID,value為ID的值是可缚,將這個Cookie協(xié)會瀏覽器霎迫。
  • 瀏覽器在第二次訪問服務器的時候攜帶Cooike信息JSESSIONID=ID的值,如果該JESSIONID的session已經(jīng)銷毀帘靡,那么會重新創(chuàng)建一個新的session再返回一個新的JSESSIONID通過Cookie返回到瀏覽器知给。
  • 針對一個web項目,一個瀏覽器是共享一個session描姚,就算有兩個web項目部署在同一個服務器上涩赢,針對兩個項目的session是不同的。
  • session是基于Cookie技術實現(xiàn)轩勘,重啟瀏覽器后再次訪問原有的連接依然會創(chuàng)建一個新的session筒扒,因為Cookie在關閉瀏覽器后就會消失,但是原來服務器的Session還在赃阀,只有等到了銷毀的時間會自動銷毀霎肯。
  • 如果瀏覽器端禁用了Cookie,那么每次訪問都會創(chuàng)建一個新的Session榛斯,但是我們可以通過服務器端程序重寫URL即可观游,如果頁面多連接多,會增加不必要的工作量驮俗,
    那可以強制讓你用戶開啟接收Cookie后再讓其訪問即可懂缕。

說說Cookie和Session的區(qū)別?

1王凑、Cookie和Session都是會話技術搪柑,Cookie是運行在客戶端,Session是運行在服務器端索烹。

2工碾、Cookie有大小限制以及瀏覽器在存cookie的個數(shù)也有限制,Session是沒有大小限制和服務器的內(nèi)存大小有關百姓。

3渊额、Cookie有安全隱患,通過攔截或本地文件找得到你的cookie后可以進行攻擊垒拢。

4旬迹、Session是保存在服務器端上會存在一段時間才會消失,如果session過多會增加服務器的壓力求类。

14.HTTP 請求的 GET 與 POST 方式的區(qū)別奔垦?

  • GET在瀏覽器回退時是無害的,而POST會再次提交請求尸疆。
  • GET產(chǎn)生的URL地址可以被Bookmark椿猎,而POST不可以惶岭。
  • GET請求會被瀏覽器主動cache,而POST不會鸵贬,除非手動設置俗他。
  • GET請求只能進行url編碼脖捻,而POST支持多種編碼方式阔逼。
  • GET請求參數(shù)會被完整保留在瀏覽器歷史記錄里,而POST中的參數(shù)不會被保留地沮。
  • GET請求在URL中傳送的參數(shù)是有長度限制的嗜浮,而POST么有。
  • 對參數(shù)的數(shù)據(jù)類型摩疑,GET只接受ASCII字符危融,而POST沒有限制。
  • GET比POST更不安全雷袋,因為參數(shù)直接暴露在URL上吉殃,所以不能用來傳遞敏感信息。
  • GET參數(shù)通過URL傳遞楷怒,POST放在Request body中蛋勺。

GET和POST是什么?HTTP協(xié)議中的兩種發(fā)送請求的方法鸠删。
HTTP是什么抱完?HTTP是基于TCP/IP的關于數(shù)據(jù)如何在萬維網(wǎng)中如何通信的協(xié)議。
HTTP的底層是TCP/IP刃泡。所以GET和POST的底層也是TCP/IP巧娱,也就是說,GET/POST都是TCP鏈接烘贴。GET和POST能做的事情是一樣一樣的禁添。你要給GET加上request body,給POST帶上url參數(shù)桨踪,技術上是完全行的通的老翘。

GET和POST還有一個重大區(qū)別,簡單的說:

GET產(chǎn)生一個TCP數(shù)據(jù)包馒闷;POST產(chǎn)生兩個TCP數(shù)據(jù)包酪捡。

對于GET方式的請求,瀏覽器會把http header和data一并發(fā)送出去纳账,服務器響應200(返回數(shù)據(jù))逛薇;

而對于POST,瀏覽器先發(fā)送header疏虫,服務器響應100 continue永罚,瀏覽器再發(fā)送data啤呼,服務器響應200 ok(返回數(shù)據(jù))。

也就是說呢袱,GET只需要汽車跑一趟就把貨送到了官扣,而POST得跑兩趟,第一趟羞福,先去和服務器打個招呼“嗨惕蹄,我等下要送一批貨來,你們打開門迎接我”治专,然后再回頭把貨送過去卖陵。

因為POST需要兩步,時間上消耗的要多一點张峰,看起來GET比POST更有效泪蔫。因此Yahoo團隊有推薦用GET替換POST來優(yōu)化網(wǎng)站性能。但這是一個坑喘批!跳入需謹慎撩荣。為什么?

  1. GET與POST都有自己的語義饶深,不能隨便混用餐曹。
  2. 據(jù)研究,在網(wǎng)絡環(huán)境好的情況下粥喜,發(fā)一次包的時間和發(fā)兩次包的時間差別基本可以無視凸主。而在網(wǎng)絡環(huán)境差的情況下,兩次包的TCP在驗證數(shù)據(jù)包完整性上额湘,有非常大的優(yōu)點卿吐。
  3. 并不是所有瀏覽器都會在POST中發(fā)送兩次包,F(xiàn)irefox就只發(fā)送一次锋华。

原文鏈接

15.Anonymous Inner Class(匿名內(nèi)部類)是否可以繼承其他類嗡官,是否可以實現(xiàn)接口?

匿名內(nèi)部類是沒有名字的內(nèi)部類毯焕,不能繼承其他類衍腥,但一個內(nèi)部類可以作為一個接口,由另一個內(nèi)部類實現(xiàn)纳猫。

16.Collection和Collections的區(qū)別婆咸?

Collection是集合類的接口,繼承該接口的主要有Set和List芜辕。
Collections是針對集合類的一個幫助類尚骄,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索,排序侵续,線程安全化等操作倔丈。

17. += 和 = +的區(qū)別憨闰?

+=是復合賦值操作符,= +是簡單賦值操作符需五。復合賦值表達式可以自動將所執(zhí)行計算的結果I轉(zhuǎn)型為其左側變量的類型鹉动。如果左側變量比右側變量要窄,復合賦值操作符會自動進行類型轉(zhuǎn)換宏邮,而簡單賦值操作符需要強制類型轉(zhuǎn)換泽示。

18.jdk1.8和jdk1.7下的ConcurrentHashMap

jdk1.7

  • 將數(shù)據(jù)分為一段一段的存儲,然后給每一段數(shù)據(jù)配一把鎖蜀铲,當一個線程占用鎖訪問其中一個段數(shù)據(jù)時边琉,其他段的數(shù)據(jù)也能被其他線程訪問。
  • 由Segment數(shù)組結構和HashEntry數(shù)組結構組成记劝。
  • 一個ConcurrentHashMap里包含一個Segment數(shù)組。Segment的結構和HashMap類似族扰,是一種數(shù)組和鏈表結構厌丑,一個Segment包含一個HashEntry數(shù)組,每個HashEntry是一個鏈表結構的元素渔呵,每個Segment守護著一個HashEntry數(shù)組里的元素,當對HashEntry數(shù)組的數(shù)據(jù)進行修改時,必須首先獲得對應的Segment的鎖践瓷。

jdk1.8

  • 采用CAS和synchronized來保證并發(fā)安全
  • 數(shù)據(jù)結構是:數(shù)組+鏈表/紅黑二叉樹
  • synchronized只鎖定當前鏈表或紅黑二叉樹的首節(jié)點炸卑。

19.Java對象的實例化順序?

  • 父類的靜態(tài)成員變量和靜態(tài)代碼塊
  • 子類的靜態(tài)成員變量和靜態(tài)代碼塊
  • 父類成員變量和方法塊加載
  • 父類構造函數(shù)加載
  • 子類成員變量和方法塊加載
  • 子類的構造函數(shù)加載

20.不用final還可以用什么辦法使得這個類不被繼承录豺?

構造函數(shù)私有化朦肘。

21.Exception與error的差別?

都繼承于Throwable双饥。
Error類一般指與虛擬機相關的問題媒抠,如系統(tǒng)崩潰、虛擬機錯誤咏花、內(nèi)存空間不足趴生、方法調(diào)用棧溢等。對于這類錯誤的導致的應用程序中斷昏翰,僅靠程序本身無法恢復和預防苍匆,遇到這樣的錯誤,建議讓程序終止棚菊。
Exception類表示程序可以處理的異常浸踩,可以捕獲且可能恢復。遇到這類異常窍株,應該盡可能處理異常民轴,使程序恢復運行攻柠,而不應該隨意終止異常。
Exception類又分為運行時異常(Runtime Exception)和受檢查的異常(Checked Exception )后裸,運行時異常;ArithmaticException,IllegalArgumentException瑰钮,編譯能通過,但是一運行就終止了微驶,程序不會處理運行時異常浪谴,出現(xiàn)這類異常,程序會終止因苹。而受檢查的異常苟耻,要么用try。扶檐。凶杖。catch捕獲,要么用throws字句聲明拋出款筑,交給它的父類處理智蝠,否則編譯不會通過。

22.string的最大長度奈梳?

編譯時65535杈湾,運行時Integer.MAX_VALUE。(與堆內(nèi)存大小有關)

23.lambad表達式和匿名類的區(qū)別攘须?

  • 匿名類的this關鍵字指向匿名類漆撞,而lambda表達式的this關鍵字指向包圍lambda表達式的類。
  • Java編譯器將lambda編譯成類的私有方法于宙。

24.什么是函數(shù)式接口(@FunctionInterface)浮驳?

函數(shù)式接口就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口限煞。

25. static方法能不能被重寫抹恳?

不能。重寫是運行時多態(tài)署驻,而static方法是在編譯期綁定的奋献,不存在多態(tài)。靜態(tài)方法從程序開始運行后就已經(jīng)分配了內(nèi)存旺上,所有引用到該方法的對象所指向的都是同一塊內(nèi)存中的數(shù)據(jù)瓶蚂,也就是該靜態(tài)方法。子類中如果定義了相同名稱的靜態(tài)方法宣吱,并不會重寫窃这,而應該是在內(nèi)存中又分配了一塊給子類的靜態(tài)方法。

26.多態(tài)

事物在運行過程中存在不同的狀態(tài)征候。

27.為什么內(nèi)部類實現(xiàn)的單例模式是線程安全的杭攻?

當?shù)谝淮渭虞dSingleton類時并不會初始化instance祟敛,只有在第一次調(diào)用getInstance方法時才會導致instance被初始化。

虛擬機會保證一個類的構造器<client>()方法在多線程環(huán)境中被正確的加載兆解,同步馆铁,如果多個線程同時去初始化一個類,那么只有一個線程去執(zhí)行這個類的構造器<client>()方法锅睛,其他線程都需要阻塞等待埠巨,直到活動線程執(zhí)行<client>()方法完畢。

29.BIO NIO AIO

29.1 BIO

同步阻塞I/O模式现拒,數(shù)據(jù)的讀取寫入阻塞在一個線程內(nèi)等待完成辣垒。

Java中由一個獨立的Acceptor線程負責監(jiān)聽客戶端的連接。通過在while循環(huán)調(diào)用accept()方法等待客戶端連接印蔬,請求一旦接收到一個連接請求勋桶,就通過線程池進行連接處理。

29.2 NIO

同步非阻塞I/O扛点,通過多路復用器不斷輪詢各個連接的狀態(tài)哥遮,當有讀或?qū)憰r,才會處理它陵究。

29.3 AIO

異步非阻塞I/O,在相應的狀態(tài)發(fā)生改變時奥帘,會通知對應的線程來處理铜邮。

30. 序列化

序列化就是將對象的狀態(tài)(各個屬性量)保存起來,以便存儲在文件中或在網(wǎng)絡上傳輸寨蹋。

31. transient關鍵字的作用松蒜?

讓成員變量不被初始化。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末已旧,一起剝皮案震驚了整個濱河市秸苗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌运褪,老刑警劉巖惊楼,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秸讹,居然都是意外死亡檀咙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門璃诀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弧可,“玉大人,你說我怎么就攤上這事劣欢∽厮校” “怎么了裁良?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長校套。 經(jīng)常有香客問我价脾,道長,這世上最難降的妖魔是什么搔确? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任彼棍,我火速辦了婚禮,結果婚禮上膳算,老公的妹妹穿的比我還像新娘座硕。我一直安慰自己,他們只是感情好涕蜂,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布华匾。 她就那樣靜靜地躺著,像睡著了一般机隙。 火紅的嫁衣襯著肌膚如雪蜘拉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天有鹿,我揣著相機與錄音旭旭,去河邊找鬼。 笑死葱跋,一個胖子當著我的面吹牛持寄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娱俺,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼稍味,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了荠卷?” 一聲冷哼從身側響起模庐,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎油宜,沒想到半個月后掂碱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡验庙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年顶吮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粪薛。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡悴了,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情湃交,我是刑警寧澤熟空,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站搞莺,受9級特大地震影響息罗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜才沧,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一迈喉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧温圆,春花似錦挨摸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锅移,卻和暖如春熔掺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背非剃。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工置逻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人备绽。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓诽偷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疯坤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

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

  • 下面的內(nèi)容是對網(wǎng)上原有的Java面試題集及答案進行了全面修訂之后給出的負責任的題目和答案深浮,原來的題目中有很多重復題...
    獨念白閱讀 1,343評論 0 3
  • ?面膜好不好用飞苇,膜布材質(zhì)很重要? 膜布直接影響功效菌瘫! 「粉瑟面膜」源于新西蘭原始森林麥盧卡茶樹纖維制成 *搭載更多...
    e6107628ebf0閱讀 1,396評論 0 1
  • 1我的人生故事 每個人都可能經(jīng)歷一番波折,每個人都有一番大起大落布卡,高考的落差讓我不得不去選擇一個本二的學校雨让,上分...
    310涂濤閱讀 272評論 0 0
  • 如果想學前端,那css3是最基礎的了,也是最先學習的一門知識 廢話不多說直接正題 什么是css3 css3形成頁面...
    StevenTang閱讀 238評論 1 1
  • 今天是圣誕節(jié),也是奶奶的生日忿等。我們一家人去酒店吃晚飯慶祝奶奶的生日栖忠。我看見媽媽給奶奶一個大紅包。并說祝奶奶福如東海...
    溫曉晴閱讀 205評論 0 0