2019年百度最新Java工程師面試題

1、單選題(共27題,每題5分)

1若下列所用變量均已經正肯定義,如下表達式中不合法的是?
 
B
運算符優先級口訣:單目算術位關係,邏輯三目後賦值。
單目:++、--
算術:+、-、*、/、%
位:位移運算符:>、>>>
關係:、=、==
========================
邏輯:&&、||、!、&、|、^
三目:三目運算符(又稱爲三元運算符)A>B? x:y
後:湊字數用的。。
賦值:=
 
此題重點考察C答案:三目運算符的優先級比賦值運算符優先級高,所以先計算出三目運算後的結果,再將結果賦值給a.
因此C是對的。
 
2以下代碼,執行test()函數後,屏幕打印結果爲()
public class Test2 { public void add(Byte b) { b = b++; } public void test() { Byte a = 127; Byte b = 127; add(++a); System.out.print(a + " "); add(b); System.out.print(b + ""); } } 
D
![](https://storage.kuibuke.com/source/1/fAknqFBCEalHkfEwfeNwgMsPqKDm3rDT.)
![](https://storage.kuibuke.com/source/1/V2TTnf00Y9HZ6EahCk1HGsdNTtDWLc2_.)
 
包裝類的值都是final 不可變的,對於++b 或者b++ ,只是新建立了一個對象,而後把引用傳給了原對象句柄,在函數中操做,只是形參的臨時句柄改變了指向,實參的句柄仍是指向原來的對象。因此即便不是b = b++ 這種,b的值在add以後也是不會變的。
 
3Oracle數據庫中,在SQL語句中鏈接字符串的方法是哪一個?( )
 
B

暫無html

 
4Java中基本的編程單元爲:
 
A

java的基本編程單元是類,基本存儲單元是變量。java

 
5已知腳本內容以下:
if [ $1 -eq 5 ];then
         echo True
     else:
         echo False

 

如下能達到同等效果的是:web

A

利用了||的短路原理正則表達式

 
6如下代碼的輸出的正確結果是 ?

如下代碼的輸出的正確結果是數據庫

1 public class Test {  
2  public static void main(String args\[\]) {  
3  String s = "祝你考出好成績!";  
4  System.out.println(s.length());  
5  }  
6 }  

 

D

java中,每個字符都是佔用1個長度,包括漢字。express

 
7經過Intent傳遞一些二進制數據的方法有哪些?
經過Intent傳遞一些二進制數據的方法有哪些?
A、使用Serializable接口實現序列化,這是java經常使用的方法
B、實現Parcelable接口,這裏Andriod的部分分類好比Bitmap類就已經實現了,同時Parcelable在Android AIDL中交換數據也很常見
C

Android中實現序列化有兩個選擇:一是實現Serializable接口(是JavaSE自己就支持的),一是實現Parcelable接口(是Android特有功能,效率比實現Serializable接口高效,可用於Intent數據傳遞,也能夠用於進程間通訊(IPC))。實現Serializable接口很是簡單,聲明一下就能夠了,而實現Parcelable接口稍微複雜一些,但效率更高,推薦用這種方法提升性能。編程

注:Android中Intent傳遞對象有兩種方法:一是Bundle.putSerializable(Key,Object),另外一種是Bundle.putParcelable(Key,Object)。固然這些Object是有必定的條件的,前者是實現了Serializable接口,然後者是實現了Parcelable接口。數組

 
8代碼行float t=5.1; int i=t; ,不正確的是 ?
 
B

5.1須要定義爲double類型, double類型也不能直接賦值給int服務器

 
9繼承是JAVA語言的一個特性,針對類的繼承,虛擬機會如何進行父類和子類的初始化加載呢?請閱讀代碼選擇出該段代碼的輸入結果。
 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         System.out.print(B.c);
 5     }
 6 }
 7 
 8 class A {
 9     public static String c = "C";
10     static {
11         System.out.print("A");
12     }
13 }
14 
15 class B extends A{
16     static {
17         System.out.print("B");
18     }
19 }

 

 
A

總結: 一、若是一個 static final 變量是"編譯期常量",就像 public static final String a = "JD";那樣,那麼這個值不須要對 Test2 類進行初始化就能夠讀取。網絡

二、可是,若是隻是將一個變量的域設置爲 static 和 final 的,那不足以確保這種行爲。例如,對 public static final String a = new String("JD");的訪問將強制對 Test2 類進行初始化,由於它不是一個"編譯期常量"。

三、若是一個 static 變量域不是 final,那麼在對它進行訪問時,老是要求在它被讀取以前,要先進行連接 (爲這個域分配存儲空間) 和初始化 (初始化該存儲空間) 就像 public static String a = "JD";。

參考 :http://www.javashuo.com/article/p-aiateymf-be.html

 
10如下關於HTTP method 的說法,錯誤的是?
 
D

HTTP method

  • 一臺服務器要與HTTP1.1兼容,只要爲資源實現GET和HEAD方法便可
  • GET是最經常使用的方法,一般用於請求服務器發送某個資源。
  • HEAD與GET相似,但服務器在響應中值返回首部,不返回實體的主體部分
  • PUT讓服務器用請求的主體部分來建立一個由所請求的URL命名的新文檔,或者,若是那個URL已經存在的話,就用幹這個主體替代它
  • POST起初是用來向服務器輸入數據的。實際上,一般會用它來支持HTML的表單。表單中填好的數據一般會被送給服務器,而後由服務器將其發送到要去的地方。
  • TRACE會在目的服務器端發起一個環回診斷,最後一站的服務器會彈回一個TRACE響應並在響應主體中攜帶它收到的原始請求報文。TRACE方法主要用於診斷,用於驗證請求是否如願穿過了請求/響應鏈。
  • OPTIONS方法請求web服務器告知其支持的各類功能。能夠查詢服務器支持哪些方法或者對某些特殊資源支持哪些方法。
  • DELETE請求服務器刪除請求URL指定的資源
 
11如下哪一個是ARP欺騙攻擊可能致使的後果
 
C
 
12下面關於this()和super()說法正確的有?

java中,下面關於this()和super()說法正確的有?

A

1,this()函數主要應用於同一類中從某個構造函數調用另外一個重載版的構造函數。this()只能用在構造函數中,而且也只能在第一行。因此在同一個構造函數中this()和super()不能同時出現。
2,super()函數在子類構造函數中調用父類的構造函數時使用,並且必需要在構造函數的第一行

 
13在switch(expression)語句中,expression的數據類型不能是(  )。
 
A

暫無

 
14有一條TCP鏈接,它的最大報文段長度爲4KB,TCP擁塞窗口爲24KB,這...

有一條TCP鏈接,它的最大報文段長度爲4KB,TCP擁塞窗口爲24KB,這時候發生超時,那麼該擁塞窗口變爲了()

B

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

 
15下列屬於正則表達式的是
 
C

暫無

 
16Oracle數據庫表空間與數據文件的關係描述正確的是( )
 
B

暫無

 
17下面關於java內存區說法錯誤的是?
 
C
 
18數據庫中創建索引的目的?
 
B
 
19TCP釋放鏈接第二次揮手時ACK(),第三次揮手時ACK()?
 
C

爲何在第三次揮手時須要發送ack和seq?

由於 TCP 是可靠的全雙工傳輸,因此須要確保客戶端的連接關閉正確,而且防止傳送的數據包在網絡中延遲出現的錯誤,若是後面又使用一樣的端口創建了一個 TCP 連接並且如今要釋放(完成了兩次揮手),剛纔延遲的包如今到了,這時也許服務器還有數據要發送,可是客戶端收到延遲的包,就直接確認返回ACK,從而出現非正常關閉。

 
20下列敘述中,錯誤的是()
 
A

略。

 
21若是但願在網絡中經過某個類的對象包裝數據進行傳輸,那麼這個類須要實現下面哪...

若是但願在網絡中經過某個類的對象包裝數據進行傳輸,那麼這個類須要實現下面哪一個接口?()

C
 
22運行代碼,輸出的結果是()
 public class P {  
 public static int abc = 123;  
 static{  
 System.out.println("P is init");  
 }  
 }  
 public class S extends P {  
 static{  
 System.out.println("S is init");  
 }  
 }  
 public class Test {  
 public static void main(String\[\] args) {  
 System.out.println(S.abc);  
 }  
 }

 

A

虛擬機規範嚴格規定了有且只有五種狀況必須當即對類進行「初始化」:

  1. 使用new關鍵字實例化對象的時候、讀取或設置一個類的靜態字段的時候,已經調用一個類的靜態方法的時候。

  2. 使用java.lang.reflect包的方法對類進行反射調用的時候,若是類沒有初始化,則須要先觸發其初始化。

  3. 當初始化一個類的時候,若是發現其父類沒有被初始化就會先初始化它的父類。

  4. 當虛擬機啓動的時候,用戶須要指定一個要執行的主類(就是包含main()方法的那個類),虛擬機會先初始化這個類;

  5. 使用Jdk1.7動態語言支持的時候的一些狀況。

除了這五種以外,其餘的全部引用類的方式都不會觸發初始化,稱爲被動引用。下面是被動引用的三個例子:

  1. 經過子類引用父類的的靜態字段,不會致使子類初始化。

  2. 經過數組定義來引用類,不會觸發此類的初始化。

1 public class NotInitialization {
2 
3 public static void main(String[] args) {
4 
5 SuperClass[] sca = new SuperClass[10];
6 
7 }
8 
9 }

 

  1. 常量在編譯階段會存入調用類的常量池中,本質上沒有直接引用到定義常量的類,所以不會觸發定義常量的類的初始化。
public class ConstClass {

static {

System.out.println("ConstClass init!");

}

public static final int value = 123;

}

public class NotInitialization{

public static void main(String[] args) {

int x = ConstClass.value;

}

}

 

上述代碼運行以後,也沒有輸出「ConstClass init!」,這是由於雖然在Java源碼中引用了ConstClass類中的常量HELLOWORLD,但其實在編譯階段經過常量傳播優化,已經將此常量的值「hello world」存儲到了NotInitialization類的常量池中,之後NotInitialization對常量ConstClass.HELLOWORLD的引用實際都被轉化爲NotInitialization類對自身常量池的引用了。也就是說,實際上NotInitialization的Class文件之中並無ConstClass類的符號引用入口,這兩個類在編譯成Class以後就不存在任何聯繫了。參考資料:https://blog.csdn.net/qq_22771739/article/details/...

 
23下列語句正確的是( )
 
A
**答案A:**
**A:**形式參數可被視爲local variable。**形參和局部變量同樣都不能離開方法**。都只有在方法內纔會發生做用,也只有在方法中使用,不會在方法外可見。
**B:** **對於形式參數只能用final修飾符**,其它任何修飾符都會引發編譯器錯誤。可是用這個修飾符也有必定的限制,就是在方法中不能對參數作任何修改。 不過通常狀況下,一個方法的形參不用final修飾。只有在特殊狀況下,那就是:方法內部類。 一個方法內的內部類若是使用了這個方法的參數或者局部變量的話,這個參數或局部變量應該是final。
**C:**形參的值在調用時根據調用者更改,實參則用自身的值更改形參的值(指針、引用皆在此列),也就是說**真正被傳遞的是實參。**
**D:**方法的參數列表指定要傳遞給方法什麼樣的信息,**採用的都是對象的形式**。所以,在參數列表中必須指定每一個所傳遞對象的類型及名字。想JAVA中任何傳遞對象的場合同樣,這裏傳遞的實際上也是引用,而且引用的類型必須正確。--《Thinking in JAVA》
 
24一顆二叉樹的葉子節點有5個,出度爲1的結點有3個,該二叉樹的結點總個數是?
 
B

葉子節點個數 = 5 ,由於葉子節點個數=度爲2的結點個數加1,因此

度爲2的結點個數=5-1=4,

度爲1的結點個數 = 3,
因此總個數 = 5 + 4 + 3 = 12

 
25操做系統是裸機上的第一層軟件,其餘系統軟件(如__(12)__等)和應用軟件都是創建在操做系統基礎上的。
 
B

本題考查操做系統基本概念。 財務軟件、汽車防盜程序、辦公管理軟件和睦象預報軟件都屬於應用軟件,而選項A、C和D中含有這些軟件。選項B中彙編程序、編譯程序和數據庫管理系統軟件都屬於系統軟件。 計算機系統由硬件和軟件兩部分組成。一般把未配置軟件的計算機稱爲裸機,直接使用裸機不只不方便,並且將嚴重下降工做效率和機器的利用率。操做系統(Operating System)的目的是爲了填補人與機器之間的鴻溝,即創建用戶與計算機之間的接口,而爲裸機配置的一種系統軟件。由下圖能夠看出,操做系統是裸機上的第一層軟件,是對硬件系統功能的首次擴充。它在計算機系統中佔據重要而特殊的地位,全部其餘軟件,如編輯程序、彙編程序、編譯程序和數據庫管理系統等系統軟件,以及大量的應用軟件都是創建在操做系統基礎上的,並獲得它的支持和取得它的服務。從用戶角度看,當計算機配置了操做系統後,用戶再也不直接使用計算機系統硬件,而是利用操做系統所提供的命令和服務去操縱計算機,操做系統已成爲現代計算機系統中必不可少的最重要的系統軟件,所以把操做系統看做是用戶與計算機之間的接口。操做系統緊貼系統硬件之上,全部其餘軟件之下(是其餘軟件的共同環境)。 ![1.png](http://s1.51cto.com/images/20181010/1539166926957548.png "1539166926957548.png")

 
26下列說法哪一個正確( )

下列說法哪一個正確( )

C
A.沒有模板,怎麼可能建立對象,建立對象必須先要定義類,常識
B.對象中的數據域和方法取決於該對象的類,類裏面有就有,沒有就沒有
D.數據域不必定是基本類型,也能夠是引用類型
 
 
27JAVA屬於( )。
 
D

計算機軟件主要分爲系統軟件與應用軟件兩大類。系統軟件主要包括操做系統、語言處理系統、數據庫管理系統和系統輔助處理程序。應用軟件主要包括辦公軟件和多媒體處理軟件。Java是一門面向對象編程語言,屬於計算機語言。故正確答案爲D選項。

 

2、多選題(共3題,每題5分)

1CMS垃圾回收器在那些階段是沒用用戶線程參與的
 
A,C
 
2jdk中關於操做裝箱、拆箱的說法正確的有?
 
A,B,D

選項 C 說法錯誤,應該是: Double、Float的valueOf方法的實現是相似的 , 無限不可列舉,不共享

 
3如下關於java堆棧的說法,正確的有()
 
A,B,C,D
相關文章
相關標籤/搜索