Java是一種可以撰寫跨平臺應用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用于PC、數(shù)據(jù)中心、游戲控制臺、科學超級計算機、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群。
給你學習路線:html-css-js-jq-javase-數(shù)據(jù)庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

今天依然講解Java高級題型面試試題與答案解析。

小編推薦一個學Java的學習裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎?
對于short s1 = 1; s1 = s1 + 1;由于1是int類型,因此s1+1運算結(jié)果也是int 型,需要強制轉(zhuǎn)換類型才能賦值給short型。而short s1 = 1; s1 += 1;可以正確編譯,因為s1+= 1;相當于s1 = (short)(s1 + 1);其中有隱含的強制類型轉(zhuǎn)換。
如何實現(xiàn)對象克???
1.實現(xiàn)Cloneable接口并重寫Object類中的clone()方法;
2. 實現(xiàn)Serializable接口,通過對象的序列化和反序列化實現(xiàn)克隆,可以實現(xiàn)真正的深度克隆。
喚醒一個阻塞的線程
如因為Sleep,wait,join等阻塞,可以使用interrupted exception異常喚醒。
說說NIO和IO的區(qū)別
1.NIO少了一次從內(nèi)核空間到用戶空間的拷貝。ByteBuffer.allocateDirect()分配的內(nèi)存使用的是本機內(nèi)存而不是Java堆上的內(nèi)存,和網(wǎng)絡或者磁盤交互都在操作系統(tǒng)的內(nèi)核空間中發(fā)生。allocateDirect()的區(qū)別在于這塊內(nèi)存不由java堆管理, 但仍然在同一用戶進程內(nèi);
2.NIO以塊處理數(shù)據(jù),IO以流處理數(shù)據(jù);
3.非阻塞,NIO一個線程可以管理多個輸入輸出通道。
小編推薦一個學Java的學習裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
Java NIO與IO區(qū)別
Java中的NIO,BIO,AIO分別是什么?
IO的方式通常分為幾種,同步阻塞的BIO、同步非阻塞的NIO、異步非阻塞的AIO。
1.BIO,同步阻塞式IO,簡單理解:一個連接一個線程。BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對服務器資源要求比較高,并發(fā)局限于應用中,JDK1.4以前的唯一選擇,但程序直觀簡單易理解。
在JDK1.4之前,用Java編寫網(wǎng)絡請求,都是建立一個ServerSocket,然后,客戶端建立Socket時就會詢問是否有線程可以處理,如果沒有,要么等待,要么被拒絕。即:一個連接,要求Server對應一個處理線程。
2.NIO,同步非阻塞IO,簡單理解:一個請求一個線程。NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu),比如聊天服務器,并發(fā)局限于應用中,編程比較復雜,JDK1.4開始支持。
NIO本身是基于事件驅(qū)動思想來完成的,其主要想解決的是BIO的大并發(fā)問題: 在使用同步I/O的網(wǎng)絡應用中,如果要同時處理多個客戶端請求,或是在客戶端要同時和多個服務器進行通訊,就必須使用多線程來處理。也就是說,將每一個客戶端請求分配給一個線程來單獨處理。這樣做雖然可以達到我們的要求,但同時又會帶來另外一個問題。由于每創(chuàng)建一個線程,就要為這個線程分配一定的內(nèi)存空間(也叫工作存儲器),而且操作系統(tǒng)本身也對線程的總數(shù)有一定的限制。如果客戶端的請求過多,服務端程序可能會因為不堪重負而拒絕客戶端的請求,甚至服務器可能會因此而癱瘓。
3.AIO,異步非阻塞IO,簡單理解:一個有效請求一個線程。AIO方式使用于連接數(shù)目多且連接比較長(重操作)的架構(gòu),比如相冊服務器,充分調(diào)用OS參與并發(fā)操作,編程比較復雜,JDK7開始支持。
什么是冪等性
所謂冪等,簡單地說,就是對接口的多次調(diào)用所產(chǎn)生的結(jié)果和調(diào)用一次是一致的。那么我們?yōu)槭裁葱枰涌诰哂袃绲刃阅??設(shè)想一下以下情形:
在App中下訂單的時候,點擊確認之后,沒反應,就又點擊了幾次。在這種情況下,如果無法保證該接口的冪等性,那么將會出現(xiàn)重復下單問題。
在接收消息的時候,消息推送重復。如果處理消息的接口無法保證冪等,那么重復消費消息產(chǎn)生的影響可能會非常大。

終止線程有幾種方式?終止線程標記變量為什么是 valotile 類型?
1.線程正常執(zhí)行完畢,正常結(jié)束;
2.監(jiān)視某些條件,結(jié)束線程的不間斷運行;
3.使用interrupt方法終止線程。在定義exit時,使用了一個Java關(guān)鍵字volatile,這個關(guān)鍵字的目的是使exit同步,也就是說在同一時刻只能由一個線程來修改exit的值。
小編推薦一個學Java的學習裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
Java新生代,老年代,持久代,都存儲哪些東西?
新生成的對象首先都是放在年輕代的。年輕代的目標就是盡可能快速的收集掉那些生命周期短的對象。在年輕代中經(jīng)歷了N次垃圾回收后仍然存活的對象,就會被放到年老代中。因此,可以認為年老代中存放的都是一些生命周期較長的對象。持久代主要存放的是Java類的類信息。
更多精彩佳文,請關(guān)注!


