面試篇------百度2019Java工程師面試題總結

1.Oracle數據庫中,在SQL語句中連接字符串的方法是concat
2.Java中基本的編程單元是類,基礎的存儲單元是變量
3.通過Intent傳遞一些二進制數據的方法有哪些?
  • 1.使用Serializable接口實現序列化。利用Bundle.putSerializable(Key,Object);這裏的object對象需要實現serializable接口。
  • 2.實現Parcelable接口串行化。利用Bundle.putParcelable(Key, Object);這裏Object對象需要實現Parcelable接口。
4.this() super() 注意點:
  • 1.調用super()必須寫在子類構造方法的第一行,否則編譯不通過。每個子類構造方法的第一條語句,都是隱含地調用super(),如果父類沒有這種形式的構造函數,那麼在編譯的時候就會報錯。

  • 2.super()和this()類似,區別是,super從子類中調用父類的構造方法,this()在同一類內調用其它方法。

  • 3.super()和this()均需放在構造方法內第一行。

  • 4.儘管可以用this調用一個構造器,但卻不能調用兩個。

  • 5.this和super不能同時出現在一個構造函數裏面,因爲this必然會調用其它的構造函數,其它的構造函數必然也會有super語句的存在,所以在同一個構造函數裏面有相同的語句,就失去了語句的意義,編譯器也不會通過。

  • 6.this()和super()都指的是對象,所以,均不可以在static環境中使用。包括:static變量,static方法,static語句塊。

  • 7.從本質上講,this是一個指向本對象的指針, 然而super是一個Java關鍵字。

5.四類八種
  • 整形:int short byte long
  • 浮點型:double float
  • 布爾型:boolean
  • 字符型:char
6.HTTP
  • 1.一臺服務器要與HTTP1.1兼容,只要爲資源實現GET和HEAD方法即可
  • 2.GET是最常用的方法,通常用於請求服務器發送某個資源
  • 3.HEAD和GET類似,但服務器在響應中值返回首部,不返回實體的主體部分
  • 4.PUT讓服務器用請求的主體部分來創建一個由所請求的URL命名的新文檔,或者。如果那個URL已經存在的話,就用這個主體替代它
  • 5.POST起初是用來向服務器輸入數據的。實際上,通常會用它來支持HTML的表單。表單中填好的數據通常會被髮送給服務器,然後由服務器將其發送到要去的地方
  • 6.TRACE會在目的服務器端發起一個環回診斷,最後一站的服務器會彈回一個TRACE響應,並在響應主體中攜帶它收到的原始請求報文,TRACE方法主要用於診斷,用於驗證請求是否如願穿過了請求/響應鏈
  • 7.OPTIONS方法請求WEB服務器 告知其支持的各種功能。可以查詢服務器支持哪些方法或者對某些特殊資源支持哪些方法
  • 8.DELETE請求服務器刪除請求URL指定的資源
7.ARP

1. ARP欺騙攻擊的檢測與防禦
檢測:

  • 1.網絡頻繁掉線
  • 2.網速突然變慢
  • 3.使用arp -a命令查看的網關mac地址與真實的網關mac地址不同
  • 4.使用嗅探軟件發現局域網內存在大量arp應答包
    防禦:
  • 1.綁定mac地址
  • 2.使用靜態arp緩存表
  • 3.使用arp服務器,通過服務器來查找arp轉換表來響應其他機器的廣播
  • 4.使用arp欺騙防護軟件

2. ARP欺騙的危害

  • 1.使同一網段內其他用戶無法上網
  • 2.可以嗅探到交換式局域網中的所有數據包
  • 3.對信息進行篡改
  • 4.可以控制局域網內任何主機
8.在switch(expression)語句中,expression的數據類型不能是double,float(會出現精度問題)
9.有一條TCP連接,它的最大報文段長度爲4KB,TCP擁塞窗口爲24KB,這時候發生超時,那麼該擁塞窗口變爲了

TCP報文中,當發生超時事件,閾值被設置成當前擁塞窗口的一半,而擁塞窗口被設爲一個最大報文段,也就是4KB。

10.Oracle數據庫表空間與數據文件的關係描述正確的是 : 一個表空間可以對應多個數據文件
11.JVM中堆也是公用的
12。三次揮手,四次分手

TCP釋放連接第二次揮手時ACK(1),第三次揮手時ACK(1)

13.Java Applet

JavaApplet就是用Java語言編寫的小應用程序,可以直接嵌入到網頁中,並能夠產生特殊的效果

  • Java Applet必須有HTML文件才能運行
  • Java Application與Applet所用編譯命令相同
  • 通常情況下JavaApplication只能有一個main()方法
  • Applet是能夠嵌入HTML語言中,並在瀏覽器中運行的類。Applet的運行環境是Web瀏覽器,所以必須建立HTML文件,告訴瀏覽器如何加載和運行Applet。Applet是不能直接通過Java命令啓動運行的。
14.如果希望在網絡中通過某個類的對象包裝數據進行傳輸,那麼這個類需要實現接口:Serializable
15.形式參數
  • 形式參數可被視爲local variable。形參和局部變量一樣都不能離開方法。都只有在方法內纔會發生作用,也只有在方法中使用,不會在方法外可見。
  • 對於形式參數只能用final修飾符,其它任何修飾符都會引起編譯器錯誤。但是用這個修飾符也有一定的限制,就是在方法中不能對參數做任何修改。
    不過一般情況下,一個方法的形參不用final修飾。只有在特殊情況下,那就是:方法內部類。
    一個方法內的內部類如果使用了這個方法的參數或者局部變量的話,這個參數或局部變量應該是final
16.一顆二叉樹的葉子節點有5個,出度爲1的結點有3個,該二叉樹的結點總個數是12

對於二叉樹來說,節點的非空子樹個數叫做節點的度,葉子節點的度數0,只有一個子樹的節點度數是1。根節點度數最大爲2,因爲二叉樹中所有節點的度數均不大於2
在這裏插入圖片描述

17.操作系統是裸機上的第一層軟件,其他系統軟件(彙編程序、編譯程序和Java解釋器 )和應用軟件都是建立在操作系統基礎上的。
18.數據域,指針域
  • 數據域是結點中存儲數據元素的部分。指針域是結點中存儲數據元素之間的鏈接信息即下一個結點地址的部分
  • 數據域不一定是基本類型,也可以是引用類型
19.垃圾回收器

CMS垃圾回收器(初始標記 重新標記)階段是沒用用戶線程參的

  • 串行回收,Serial回收器,單線程回收,全程stw;
  • 並行回收,名稱以Parallel開頭的回收器,多線程回收,全程stw;
  • 併發回收,cms與G1,多線程分階段回收,只有某階段會stw;

CMS回收過程

  • 1.初次標記(STW initial mark):標記老年代中所有的GC Roots引用的對象;標記老年代中被年輕代中活着的對象引用的對象(初始標記也會掃描新生代);會導致stw。
  • 2.併發標記(Concurrent marking):從初次標記收集到的‘根’對象引用開始,遍歷所有能被引用的對象
  • 3.併發可中斷預清理(Concurrent precleaning):改變當運行第二階段時,由應用程序線程產生的對象引用,以更新第二階段的結果。標記在併發標記階段引用發生變化的對象,如果發現對象的引用發生變化,則JVM會標記堆的這個區域爲Dirty Card。
    那些能夠從Dirty Card到達的對象也被標記(標記爲存活),當標記做完後,這個Dirty Card區域就會消失。
  • 4.最終重新標記(STW remark):由於併發預處理是併發的,對象引用可能發生進一步變化。因此,應用程序線程會再一次被暫停(stw)以更新這些變化,並且在進行實際的清理之前確保一個正確的對象引用視圖。這一階段十分重要,因爲必須避免收集到仍被引用的對象。
    1. 併發清理(Concurrent sweeping):清理垃圾對象,這個階段收集器線程和應用程序線程併發執行。
    1. 併發重置(Concurrent reset):CMS清除內部狀態,爲下次回收做準備。

CMOS回收特點

  • cms只會回收老年代和永久帶(1.8開始爲元數據區,需要設置CMSClassUnloadingEnabled),不會收集年輕帶;
  • cms是一種預處理垃圾回收器,它不能等到old內存用盡時回收,需要在內存用盡前,完成回收操作,否則會導致併發回收失敗;所以cms垃圾回收器開始執行回收操作,有一個觸發閾值,默認是老年代或永久帶達到92%;
20.jdk中關於操作裝箱、拆箱
  • 在JDK中,裝箱過程是通過調用包裝器的valueOf方法實現的,而拆箱過程是通過調用包裝器的xxxValue方法實現的(xxx代表對應的基本數據類型)
  • Integer、Short、Byte、Character、Long 這幾個類的valueOf方法的實現是類似的,有限可列舉,共享[-128,127]
  • Double、Float的valueOf方法的實現是類似的 , 無限不可列舉,不共享
  • Boolean的valueOf方法的實現不同於以上的整型和浮點型,只有兩個值,有限可列舉,共享;
21.關於java堆棧的說法
  • 棧(stack):是一個先進後出的數據結構,通常用於保存方法(函數)中的參數,局部變量
  • 在java中,所有基本類型和引用類型都在棧中存儲.棧中數據的生存空間一般在當前scopes內
  • 在java中,所有使用new xxx()構造出來的對象都在堆中存儲
  • 堆不同於堆棧的好處是:編譯器不需要知道要從堆裏分配多少存儲區域,也不必知道存儲的數據在堆裏存活多長時間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章