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


一、單選題(共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

暫無

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

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

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

 

以下能達到同等效果的是:

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個長度,包括漢字。

 
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

總結: 1、如果一個 static final 變量是"編譯期常量",就像 public static final String a = "JD";那樣,那么這個值不需要對 Test2 類進行初始化就可以讀取。

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

3、如果一個 static 變量域不是 final,那么在對它進行訪問時,總是要求在它被讀取之前,要先進行鏈接 (為這個域分配存儲空間) 和初始化 (初始化該存儲空間) 就像 public static String a = "JD";。

參考 :https://www.cnblogs.com/hglibin/p/10298650.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選項。

 

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

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

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

 
3以下關於java堆棧的說法,正確的有()
 
A,B,C,D
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM