Android之Java基礎知識筆試題

前言

Android面試題Java篇,由本人整理匯總,后續(xù)將繼續(xù)推出系列篇,如果喜歡請持續(xù)關注和推薦。

目錄

  1. 靜態(tài)內(nèi)部類、內(nèi)部類、匿名內(nèi)部類,為什么內(nèi)部類會持有外部類的引用?持有的引用是this?還是其它?
    2.Java 中try catch finally的執(zhí)行順序
    3.equals與==的區(qū)別:
    4.Object有哪些公用方法?
    5.String、StringBuffer與StringBuilder的區(qū)別
    6.Java的四種引用的區(qū)別
    7.介紹垃圾回收機制
    8.你用過哪些集合類
    9.說說hashMap是怎樣實現(xiàn)的
    10.ArrayList,LinkedList的區(qū)別
    11.ArrayList和Vector的主要區(qū)別是什么?
    12.HashMap和 HashTable 的區(qū)別:
    13.wait()和sleep()的區(qū)別
    14TCP三次握手
    15.為什么TCP是可靠的,UDP早不可靠的?為什么UDP比TCP快?
    16.http協(xié)議了解多少,說說里面的協(xié)議頭部有哪些字段?
    17.https了解多少
    18.談談 HTTP 中Get 和 Post 方法的區(qū)別
    19.推送心跳包是TCP包還是UDP包或者HTTP包

正文

1. 靜態(tài)內(nèi)部類、內(nèi)部類、匿名內(nèi)部類,為什么內(nèi)部類會持有外部類的引用?持有的引用是this?還是其它?

靜態(tài)內(nèi)部類:使用static修飾的內(nèi)部類
內(nèi)部類:就是在某個類的內(nèi)部又定義了一個類,內(nèi)部類所嵌入的類稱為外部類
匿名內(nèi)部類:使用new生成的內(nèi)部類
因為內(nèi)部類的產(chǎn)生依賴于外部類,持有的引用是類名.this

2.Java 中try catch finally的執(zhí)行順序

先執(zhí)行try中代碼,如果發(fā)生異常執(zhí)行catch中代碼,最后一定會執(zhí)行finally中代碼

3.equals與==的區(qū)別:

==是判斷兩個變量或?qū)嵗遣皇侵赶蛲粋€內(nèi)存空間 equals是判斷兩個變量或?qū)嵗赶虻膬?nèi)存空間的值是不是相

4.Object有哪些公用方法?

方法equals測試的是兩個對象是否相等
方法clone進行對象拷貝
方法getClass返回和當前對象相關的Class對象
方法notify,notifyall,wait都是用來對給定對象進行線程同步的

5.String、StringBuffer與StringBuilder的區(qū)別

String 類型和 StringBuffer 類型的主要性能區(qū)別其實在于 String 是不可變的對象 StringBuffer和StringBuilder底層是 char[]數(shù)組實現(xiàn)的 StringBuffer是線程安全的,而StringBuilder是線程不安全的

6.Java的四種引用的區(qū)別

強引用:如果一個對象具有強引用,它就不會被垃圾回收器回收。即使當前內(nèi)存空間不足,JVM 也不會回收它,而是拋出 OutOfMemoryError 錯誤,使程序異常終止。如果想中斷強引用和某個對象之間的關聯(lián),可以顯式地將引用賦值為null,這樣一來的話,JVM在合適的時間就會回收該對象
軟引用:在使用軟引用時,如果內(nèi)存的空間足夠,軟引用就能繼續(xù)被使用,而不會被垃圾回收器回收,只有在內(nèi)存不足時,軟引用才會被垃圾回收器回收。
弱引用:具有弱引用的對象擁有的生命周期更短暫。因為當 JVM 進行垃圾回收,一旦發(fā)現(xiàn)弱引用對象,無論當前內(nèi)存空間是否充足,都會將弱引用回收。不過由于垃圾回收器是一個優(yōu)先級較低的線程,所以并不一定能迅速發(fā)現(xiàn)弱引用對象
虛引用:顧名思義,就是形同虛設,如果一個對象僅持有虛引用,那么它相當于沒有引用,在任何時候都可能被垃圾回收器回收。

7.介紹垃圾回收機制

標記回收法:遍歷對象圖并且記錄可到達的對象,以便刪除不可到達的對象,一般使用單線程工作并且可能產(chǎn)生內(nèi)存碎片
標記-壓縮回收法:前期與第一種方法相同,只是多了一步,將所有的存活對象壓縮到內(nèi)存的一端,這樣內(nèi)存碎片就可以合成一大塊可再利用的內(nèi)存區(qū)域,提高了內(nèi)存利用率
復制回收法:把現(xiàn)有內(nèi)存空間分成兩部分,gc運行時,它把可到達對象復制到另一半空間,再清空正在使用的空間的全部對象。這種方法適用于短生存期的對象,持續(xù)復制長生存期的對象則導致效率降低。
分代回收發(fā):把內(nèi)存空間分為兩個或者多個域,如年輕代和老年代,年輕代的特點是對象會很快被回收,因此在年輕代使用效率比較高的算法。當一個對象經(jīng)過幾次回收后依然存活,對象就會被放入稱為老年的內(nèi)存空間,老年代則采取標記-壓縮算法

8.你用過哪些集合類

數(shù)據(jù)結(jié)構(gòu)中用于存儲數(shù)據(jù)的有哪些
數(shù)組
數(shù)組存儲區(qū)間是連續(xù)的,占用內(nèi)存嚴重,故空間復雜的很大。但數(shù)組的二分查找時間復雜度小,為O(1);數(shù)組的特點是:尋址容易,插入和刪除困難;
鏈表
鏈表存儲區(qū)間離散,占用內(nèi)存比較寬松,故空間復雜度很小,但時間復雜度很大,達O(N)。鏈表的特點是:尋址困難,插入和刪除容易。

9.說說hashMap是怎樣實現(xiàn)的

哈希表:由數(shù)組+鏈表組成的
當我們往HashMap中put元素的時候,先根據(jù)key的hashCode重新計算hash值,根據(jù)hash值得到這個元素在數(shù)組中的位置(即下標),如果數(shù)組該位置上已經(jīng)存放有其他元素了,那么在這個位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的放在鏈尾。如果數(shù)組該位置上沒有元素,就直接將該元素放到此數(shù)組中的該位置上。

10.ArrayList,LinkedList的區(qū)別

ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)。
對于隨機訪問get和set,ArrayList覺得優(yōu)于LinkedList,因為LinkedList要移動指針。
對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢,因為ArrayList要移動數(shù)據(jù)。

11.ArrayList和Vector的主要區(qū)別是什么?

ArrayList 和Vector底層是采用數(shù)組方式存儲數(shù)據(jù)
Vector:
線程同步
當Vector中的元素超過它的初始大小時,Vector會將它的容量翻倍,
ArrayList:
線程不同步,但性能很好
當ArrayList中的元素超過它的初始大小時,ArrayList只增加50%的大小

12.HashMap和 HashTable 的區(qū)別:

HashTable比較老,是基于Dictionary 類實現(xiàn)的,HashTable 則是基于 Map接口實現(xiàn)的
HashTable 是線程安全的, HashMap 則是線程不安全的
HashMap可以讓你將空值作為一個表的條目的key或value

13.wait()和sleep()的區(qū)別

sleep來自Thread類,和wait來自Object類
調(diào)用sleep()方法的過程中,線程不會釋放對象鎖。而 調(diào)用 wait 方法線程會釋放對象鎖
sleep睡眠后不出讓 系統(tǒng)資源,wait讓出系統(tǒng)資源其他線程可以占用CPU
sleep(milliseconds)需要指定一個睡眠時間,時間一到會自動喚醒

14.TCP三次握手

第一次握手:建立連接時,客戶端發(fā)送syn包(syn=j)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務器進入ESTABLISHED狀態(tài),完成三次握手。 完成三次握手,客戶端與服務器開始傳送數(shù)據(jù).

15.為什么TCP是可靠的,UDP早不可靠的?為什么UDP比TCP快?

TCP/IP協(xié)議高,因為其擁有三次握手雙向機制,這一機制保證校驗了數(shù)據(jù),保證了他的可靠性。
UDP就沒有了,udp信息發(fā)出后,不驗證是否到達對方,所以不可靠。
但是就速度來說,還是UDP協(xié)議更高,畢竟其無需重復返回驗證,只是一次性的

16.http協(xié)議了解多少,說說里面的協(xié)議頭部有哪些字段?

http(超文本傳輸協(xié)議)是一個基于請求與響應模式的、無狀態(tài)的、應用層的協(xié)議;http請求由三部分組成,分別是:請求行、消息報頭、請求正文。
HTTP消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭

17.https了解多少

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此 加密的詳細內(nèi)容就需要SSL。

18.談談 HTTP 中Get 和 Post 方法的區(qū)別

GET - 從指定的服務器中獲取數(shù)據(jù),明文發(fā)送內(nèi)容
POST - 提交數(shù)據(jù)給指定的服務器處理
(1)POST請求不能被緩存下來
(2)POST請求不會保存在 瀏覽器瀏覽記錄中
(3)以POST請求的URL無法保存為瀏覽器書簽
(4)POST請求沒有長度限制

19.推送心跳包是TCP包還是UDP包或者HTTP包

心跳包的實現(xiàn)是調(diào)用了socket.sendUrgentData(0xFF)這句代碼實現(xiàn)的,所以,當然是TCP包。

總結(jié)

以上就是這篇文章的內(nèi)容了,喜歡的可以關注一下哦,也可以加android學習交流群:1005956838,謝謝!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,680評論 1 32
  • 所有知識點已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數(shù)? 在 Jav...
    侯蛋蛋_閱讀 2,713評論 1 4
  • 本文出自 Eddy Wiki ,轉(zhuǎn)載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 2,303評論 0 14
  • 九種基本數(shù)據(jù)類型的大小,以及他們的封裝類。(1)九種基本數(shù)據(jù)類型和封裝類 (2)自動裝箱和自動拆箱 什么是自動裝箱...
    關瑋琳linSir閱讀 2,076評論 0 47
  • 一、基礎知識:1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,573評論 0 4

友情鏈接更多精彩內(nèi)容