Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言抠藕。Java 技術(shù)具有卓越的通用性饿肺、高效性盾似、平臺移植性和安全性敬辣,廣泛應(yīng)用于PC零院、數(shù)據(jù)中心、游戲控制臺告抄、科學(xué)超級計算機撰茎、移動電話和互聯(lián)網(wǎng),同時擁有全球最大的開發(fā)者專業(yè)社群打洼。
給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm
今天依然講解Java高級題型面試試題與答案解析逆粹。
小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零僻弹,五五四他嚷,六零七 】蹋绽,無論你是大牛還是小白爸舒,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)稿蹲!裙內(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;相當(dāng)于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)絡(luò)或者磁盤交互都在操作系統(tǒng)的內(nèi)核空間中發(fā)生隧出。allocateDirect()的區(qū)別在于這塊內(nèi)存不由java堆管理, 但仍然在同一用戶進程內(nèi);
2.NIO以塊處理數(shù)據(jù)胀瞪,IO以流處理數(shù)據(jù);
3.非阻塞凄诞,NIO一個線程可以管理多個輸入輸出通道。
小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零帆谍,五五四,六零七 】汛蝙,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)窖剑!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享西土!
Java NIO與IO區(qū)別
Java中的NIO,BIO需了,AIO分別是什么?
IO的方式通常分為幾種援所,同步阻塞的BIO、同步非阻塞的NIO住拭、異步非阻塞的AIO挪略。
1.BIO滔岳,同步阻塞式IO,簡單理解:一個連接一個線程谱煤。BIO方式適用于連接數(shù)目比較小且固定的架構(gòu)摊求,這種方式對服務(wù)器資源要求比較高刘离,并發(fā)局限于應(yīng)用中睹栖,JDK1.4以前的唯一選擇,但程序直觀簡單易理解野来。
在JDK1.4之前,用Java編寫網(wǎng)絡(luò)請求曼氛,都是建立一個ServerSocket,然后舀患,客戶端建立Socket時就會詢問是否有線程可以處理,如果沒有气破,要么等待,要么被拒絕堵幽。即:一個連接弹澎,要求Server對應(yīng)一個處理線程。
2.NIO苦蒿,同步非阻塞IO殴胧,簡單理解:一個請求一個線程佩迟。NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu),比如聊天服務(wù)器报强,并發(fā)局限于應(yīng)用中,編程比較復(fù)雜秉溉,JDK1.4開始支持。
NIO本身是基于事件驅(qū)動思想來完成的召嘶,其主要想解決的是BIO的大并發(fā)問題: 在使用同步I/O的網(wǎng)絡(luò)應(yīng)用中,如果要同時處理多個客戶端請求弄跌,或是在客戶端要同時和多個服務(wù)器進行通訊甲喝,就必須使用多線程來處理铛只。也就是說糠溜,將每一個客戶端請求分配給一個線程來單獨處理。這樣做雖然可以達到我們的要求诵冒,但同時又會帶來另外一個問題。由于每創(chuàng)建一個線程汽馋,就要為這個線程分配一定的內(nèi)存空間(也叫工作存儲器),而且操作系統(tǒng)本身也對線程的總數(shù)有一定的限制圈盔。如果客戶端的請求過多,服務(wù)端程序可能會因為不堪重負而拒絕客戶端的請求驱敲,甚至服務(wù)器可能會因此而癱瘓。
3.AIO众眨,異步非阻塞IO,簡單理解:一個有效請求一個線程娩梨。AIO方式使用于連接數(shù)目多且連接比較長(重操作)的架構(gòu),比如相冊服務(wù)器狈定,充分調(diào)用OS參與并發(fā)操作,編程比較復(fù)雜措嵌,JDK7開始支持芦缰。
什么是冪等性
所謂冪等企巢,簡單地說让蕾,就是對接口的多次調(diào)用所產(chǎn)生的結(jié)果和調(diào)用一次是一致的。那么我們?yōu)槭裁葱枰涌诰哂袃绲刃阅靥樗祝吭O(shè)想一下以下情形:
在App中下訂單的時候罗丰,點擊確認之后再姑,沒反應(yīng),就又點擊了幾次。在這種情況下绍填,如果無法保證該接口的冪等性,那么將會出現(xiàn)重復(fù)下單問題滔驶。
在接收消息的時候卿闹,消息推送重復(fù)揭糕。如果處理消息的接口無法保證冪等锻霎,那么重復(fù)消費消息產(chǎn)生的影響可能會非常大。
終止線程有幾種方式旋恼?終止線程標記變量為什么是 valotile 類型?
1.線程正常執(zhí)行完畢冰更,正常結(jié)束;
2.監(jiān)視某些條件蜀细,結(jié)束線程的不間斷運行;
3.使用interrupt方法終止線程审葬。在定義exit時奕谭,使用了一個Java關(guān)鍵字volatile涣觉,這個關(guān)鍵字的目的是使exit同步血柳,也就是說在同一時刻只能由一個線程來修改exit的值官册。
小編推薦一個學(xué)Java的學(xué)習(xí)裙【 六五零难捌,五五四,六零七 】根吁,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學(xué)習(xí)击敌!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!
Java新生代圣蝎,老年代,持久代徘公,都存儲哪些東西?
新生成的對象首先都是放在年輕代的关面。年輕代的目標就是盡可能快速的收集掉那些生命周期短的對象。在年輕代中經(jīng)歷了N次垃圾回收后仍然存活的對象等太,就會被放到年老代中。因此澈驼,可以認為年老代中存放的都是一些生命周期較長的對象。持久代主要存放的是Java類的類信息缝其。
更多精彩佳文,請關(guān)注内边!