1. 程式人生 > >360集團2016JAVA研發工程師內推筆試題

360集團2016JAVA研發工程師內推筆試題

技術 [] 報文 解析 分類 nal 客戶 單例 分享

360集團2016JAVA研發工程師內推筆試題

題目來源:牛客網  https://www.nowcoder.com/test/question/analytic?tid=21122281

1.執行以下程序後的輸出結果是()

public class Test {
public static void main(String[] args) {
    StringBuffer a = new StringBuffer("A"); 
    StringBuffer b = new StringBuffer("B"); 
    operator(a, b); 
    System.out.println(a + "," + b); 
} 
public static void operator(StringBuffer x, StringBuffer y) { 
    x.append(y); y = x; 
}
}

答案:

技術分享圖片

解析:

題目主要考察了JAVA方法的值傳遞,方法operator並沒有改變a,b變量的引用值,改變的只是方法參數的引用,看下面的圖解

如下圖,簡易畫了一下,沒有畫出內存中的具體存儲,只給出邏輯關系,可以看出operator方法改變的是a所指向的內存中的數據和方法中x,y參數的指向,並沒有修改a,b的引用的值,所以選擇D

技術分享圖片

2.結構型模式中最體現擴展性的模式是()

答案:

技術分享圖片

解析:

設計模式分為三大類: 創建型設計模式:單例模式,工廠方法模式,簡單工廠模式,建造者模式、原型模式 結構型設計模式:適配器模式,代理模式,AOP、裝飾器模式、 行為型設計模式:觀察者模、板方法模式 裝飾模式的作用就是為了: 1.擴展功能 2.不用繼承 3.在Linux中,對file.sh文件執行#chmod 645 file.sh中,該文件的權限是() 答案: 技術分享圖片

解析:

Linux下權限對應的數字為: r =4, w =2, x =1 所以,6就是rw- 4就是r-- 5就是r-x 4.TCP建立連接的過程采用三次握手,已知第三次握手報文的發送序列號為1000,確認序列號為2000,請問第二次握手報文的發送序列號和確認序列號分別為? 答案: 技術分享圖片

解析:

再TCP中,ack確認號代表希望得到的序號,而在本題中第三次握手發送的序列號為1000,由此可以說明第二次握手的確認號為1000,同時由於第三次握手的確認號為2000,由此可以說明希望收到的序號為2000,那麽證明第二次發送的序號為1999,所以選擇B

5.下列TCP連接建立過程描述正確的是:

答案:

技術分享圖片

解析:

A.TCP客戶端向服務端發送SYN保文端,客戶進入SYN_SENT狀態,不是服務端進入該狀態

B.服務端在收到客戶端發來的ACK確認後,同時向客戶端發回ACK確認後服務端才會進入SYN_RCVD狀態

D.服務端未收到客戶端確認將會超時重傳

6.屬於網絡112.10.200.0/21的地址是()

答案:

技術分享圖片

解析:

該網絡使用了無分類編址CIDR,/21表示前21位為網絡號,下面給出圖解,如圖主機號為110時IP地址為A項

技術分享圖片

7.以下java程序代碼,執行後的結果是()

java.util.HashMap map=new java.util.HashMap(); 
map.put("name",null);      
map.put("name","Jack");
System.out.println(map.size());

答案:

技術分享圖片

解析:

在JAVA中map的一個鍵只能夠出現一次,也就是說當有一個相同的鍵時會進行替換,所以這個name鍵所對應的值為Jack,所以map大小為1

8.以下java程序代碼,執行後的結果是()

public class Test {
    public static void main(String[] args) {   
        Object o = new Object() {  
             public boolean equals(Object obj) {  
                 return true; 
         }
     };   
     System.out.println(o.equals("Fred"));
     }
}

答案:

技術分享圖片

解析:

上述代碼中重寫了equals方法,方法接收參數直接返回true,不進行判斷,所以選擇B

9.代碼片段:

byte b1=1,b2=2,b3,b6; 
final byte b4=4,b5=6; 
b6=b4+b5; 
b3=(b1+b2); 
System.out.println(b3+b6);

答案:

技術分享圖片

解析:

在java中沒有使用final修飾的變量會被自動轉型,byte-->int,而使用了final修飾就不會被轉型,所以b6=b4+b5;是正確的,而b3=(b1+b2); 由於b1,b2沒有使用final修飾在運算過程中會被自動轉型為int,結果為int類型,賦值給byte,大範圍賦值給小範圍變量會出現編譯錯誤。

10.下面代碼運行結果是()

public class Test{ 
    public int add(int a,int b){   
         try {
             return a+b;      
         } 
        catch (Exception e) {  
            System.out.println("catch語句塊");
         }
         finally{ 
             System.out.println("finally語句塊");
         }
         return 0;
    } 
     public static void main(String argv[]){ 
         Test test =new Test(); 
         System.out.println("和是:"+test.add(9, 34)); 
     }
}

答案:

技術分享圖片

解析:

在try...catch...finally語句中,finally無論是否發生異常都會被執行,並且發生在return之前。

1.finally{}代碼塊比return先執行。 2.多個return是按順序執行的的,多個return執行了一個後,後面的return就不會執行了。 3. 記住一點,不管有不有異常拋出, finally都會在return返回前執行。 11.以下情況下不一定出現TCP分節RST的情況是: 答案: 技術分享圖片

解析:

對於這個題目,沒有仔細了解過TCP的RST重置的出現條件,下面是看他人給的解釋,需要記一下(以下四種情況會發送RST包)

四種情況會發送RST包:
1、端口未打開
2、請求超時
3、提前關閉
4、在一個已關閉的socket上收到數據 12.一個數據庫中現有A,B,C,D,E,F六個語句但目前這個數據庫是不協調的,必須刪除某些語句才能恢復數據庫的協調性。已知:(1)如果保留語句A,那麽必須保留語句B和C。(2)如果保留語句E,則必須同時刪除語句D和語句C。(3)只有保留語句E,才能保留語句F。(4)語句A是重要的信息,不能刪除。以上各項如果為真,則以下哪項一定為真? 答案: 技術分享圖片

解析:

這個題目是一個簡單的邏輯題目,可以使用離散數學的知識,也可以直接推斷一下即可

13.下列關於靜態工廠和工廠方法表述錯誤的是:()

答案:

技術分享圖片

解析:

開閉原則:對擴展開放,對修改封閉。靜態工廠增加需要是修改源代碼,對修改不封閉,不符合開閉原則。

14.設有一個用數組Q[1..m]表示的環形隊列,約定f為當前隊頭元素在數組中的位置,r為隊尾元素的後一位置(按順時針方向),若隊列非空,則計算隊列中元素個數的公式應為()

答案:

技術分享圖片

解析:

這個題目是由於不認真導致的,用尾減去頭,加m的原因是防止尾大於頭,(rear - front + m)% m

15.以下程序是用輾轉相除法來計算兩個非負數之間的最大公約數:

long long gcd(long long x,long long y){ 
     if(y==0) 
        return x; 
     else return gcd(y,x%y);
}

答案:

技術分享圖片

解析:

輾轉相除法時間復雜度為logn

16.計算斐波那契數列第n項的函數定義如下:

int fib(int n){ 
     if(n==0) 
        return 1; 
     else if(n==1) 
        return 2; 
     else 
        return fib(n-1)+fib(n-2);
}

若執行函數調用表達式fib(10),函數fib被調用的次數是:

答案:

技術分享圖片

解析:

C(0) = 1

C(1) = 1

C(2) = 1+1+1 = 3

c(3) = 3+1+1 = 5

c(4) = 5+3+1 = 9

...

c(9) = 67+41+1 = 109

c(10) = 109+67+1 = 177

17.設圖G的相鄰矩陣如下圖:則G的頂點數和邊數分別為:

0 1 1 1 1
1 0 1 0 0
1 1 0 1 1
1 0 1 0 1
1 0 1 1 0

答案:

技術分享圖片

解析:

圖的鄰接矩陣是一個長寬相等的矩陣,邊長代表頂點的個數,矩陣中的1代表兩點之間有邊相連,矩陣中一共有16個1,所以只有8條邊,因為1--2相連,那麽2--1也一定相連,可以看一下數據結構就可以理解了。

小白創作,大佬勿噴,謝謝合作

360集團2016JAVA研發工程師內推筆試題