某廠2021實習生筆試(Web後臺)

0 簡述

​ 筆試時間90分鐘,線上筆試,範圍較廣,那天剛考完一科,晚上就做這個筆試題。之前我並沒有複習,而且關鍵我比較菜,所以並沒有過。

​ 整個測試包括20道不定項選擇題,2道在線編程題,1道論述題。並且題目只能順序作答,不支持跳題或返回上一題,不可跳出答題界面5次以上。

1 不定項選擇題

1.1 在OSI參考模型中,保證端-端的可靠性是在( )完成的?

網絡層

數據鏈路層

會話層

傳輸層

**參考答案:傳輸層。**OSI,Open System Interconnection,開放系統互聯模型。包括七層:

physical-物理層(二進制傳輸)

data link-數據鏈路層(訪問介質)

network-網絡層(數據傳輸)

transport-傳輸層(端到端連接)

session-會話層(主機間通信)

presentation-表示層(數據表示)

application-應用層(網絡進程訪問應用層)

1.2 下列哪個HTTP頭部用於包含斷點續傳信息?

Cookie

Connection

Content-Type

Content-Range

**參考答案:Content-Range。**HTTP斷點續傳(分塊傳輸):指的是在上傳/下載時,將任務(一個文件或壓縮包)人爲的劃分爲幾個部分,每一個部分採用一個線程進行上傳/下載,如果碰到網絡故障,可以從已經上傳/下載的部分開始繼續上傳/下載未完成的部分,而沒必要從頭開始上傳/下載。可以節省時間,提高速度。

1.3 小明在程序中引入了兩個事務,同時對數據庫中同一數據進行操作,請你分析下會引起的衝突是()

A.一個是SELECT,另一個是UPDATE

B.其中有一個是DELETE

C.兩個都是SELECT

D.兩個都是UPDATE

**參考答案:ABD。**不解釋。

1.4 以下選項中,那些是Java8的新特性()

A.加入Fork/Join框架

B.在switch語句中使用字符串

C.Lambda表達式

D.新添加的Stream API(java.util.stream)把真正的函數式編程風格引入到Java中

**參考答案:CD。**AB都是java7新特性。

1.5 下列選項中關於Java引用的說法不正確的是

A.在下次GC時,虛引用指向的對象一定會被回收

B.Java中僅有弱引用、軟引用、虛引用三種類型

C.在下次GC時,軟引用指向的對象一定會被回收

D.在下次GC時,弱引用指向的對象一定會被回收

**參考答案:ABC。**GC即爲Garbage Collection,垃圾收集。B:Java有四種引用,包括強引用、軟引用、弱引用、虛引用。強引用指向的對象從來不會被回收,軟引用在內存不足時回收,弱引用在垃圾回收時被回收,虛引用在任何時候都可能被回收。

1.6 中序遍歷一個非空二叉樹,遍歷順序根節點左邊

A.只有左子樹上的部分結點

B.只有左子樹上的所有結點

C.只有右子樹上的所有結點

D.只有右子樹上的部分結點

**參考答案:B。**不解釋。

1.7 關於類加載的順序,以下說法正確的是()

A.加載->初始化->鏈接->使用->卸載

B.加載->鏈接->初始化->使用->卸載

C.以上說法都不正確

D.初始化->鏈接->加載->使用->卸載

**參考答案:A。**不解釋。

1.8 下列關於IP地址的說法中錯誤的是

A.地址205.106.256.36是一個合法的IP地址

B.IP地址一般用點分十進制表示

C.一個IP地址只能標識網絡中的唯一的一臺計算機

D.同一個網絡中不能有兩臺計算機的IP地址相同

**參考答案:A。**不解釋。

1.9 下面有關JVM,說法正確的是

A.堆用來存放對象的實例和數組,是垃圾收集器管理的主要區域,所有線程共享

B.一個對象實例有多個引用,將其中一個引用置爲null,則該對象會被回收

C.程序計數器是一個比較小的內存區域,用於指示當前線程所執行的字節碼執行到了第幾行,是線程隔離的

D.方法區用於存儲JVM加載的類信息,常量,靜態變量,以及編譯器編譯後的代碼等數據,是線程隔離的

**參考答案:AC。**不解釋。

1.10關於Java泛型以下描述正確的是

A.泛型可以消除強類型轉換,且代碼更加可讀,減少了出錯率

B.泛型可以提高Java程序的類型安全,在編譯期可以檢查因爲Java類型不正確導致的ClassCastException異常

C.泛型在編譯期就固定的類型的範圍,大量使用可以極大提高程序的運行性能

D.泛型類型除了支持對象類型,還支持數組類型以及基本數據類型

**參考答案:AB。**C:編譯器會創建類型轉換,反而會影響性能。D:泛型不支持數組及基本數據類型,虛擬機在編譯時會把帶泛型的轉換成Object類型,而基本數據類型不屬於Object 所以不能裝。Java中不允許直接創建泛型數組。

1.11 以下關於線性結構描述正確的是哪些()

A.線性結構就是順序存儲結構

B.線性結構一定有唯一的第一個元素和唯一的最後一個元素

C.隊列是線性結構,樹不是線性結構

D.線性結構擁有隨機訪問元素的特性

**參考答案:BC。**線性結構中的“線性”是指數學中的線性,即一對一的關係。B選項正確,是線性結構的基本特性之二。

1.12 關於Java的動態代理機制,正確的是()

A.Proxy接口的invoke方法可以用來動態覆蓋代理真實對象的操作

B.動態代理都是基於反射API實現的

C.每個動態代理類不是必須實現InvocationHandler接口,將實例關聯到任意一個Handler就可以

D.動態代理允許我們在代理真實對象前後添加一些自己的操作

**參考答案:AD。**B:主要是基於反射API實現的,cglib 動態代理:基於 ASM 機制實現。C:每一個動態代理類都必須要實現InvocationHandler這個接口,並且每個代理類的實例都關聯到了一個handler,當我們通過代理對象調用一個方法的時候,這個方法的調用就會被轉發爲由InvocationHandler這個接口的 invoke 方法來進行調用。

1.13 一組記錄的關鍵嗎爲(79 56 46 38 40),得到的最終排序序列的變化過程爲:

(1)79 56 46 38 40

(2)38 56 46 79 40

(3)38 40 79 46 56

(4)38 40 46 79 56

(5)38 40 46 56 79

則使用的排序方法爲()

選擇排序

快速排序

冒泡排序

插入排序

答案應該是:選擇排序。此題有爭議。

1.14 Java中以下常見的Map中有序的是()

A.HashMap

B.Hashtable

C.TreeMap

D.LinkedHashMap

參考答案:CD。

1.15 關於IO流下列描述正確的是:

A.字節流繼承自InputSteamReader或OutputStreamWriter

B.字符流繼承自InputStream或OutputStream

C.字符流繼承自InputSteamReader或OutputStreamWriter

D.字節流繼承自InputStream或OutputStream

**參考答案:CD。**不解釋,以上選項是原文。

1.16 以下說法正確的是:

A.B-樹的階數越小,越不容易發生分裂

B.B-樹的階數越大,越不容易發生分裂

C.B-樹的階數越大,越容易發生分裂

D.B-樹的階數越小,越容易發生分裂

參考答案:BD。

1.17 關於Java中的Lock,以下說法正確的是()

A.ReentrantReadWriteLock包含讀鎖和寫鎖,兩者互不干擾

B.使用tryLock()方法時,如果資源被佔用,會一直等待,直到資源釋放

C.使用lockInterruptibly()方法時,如果資源被佔用,會一直等待,直到資源釋放或者調用interrupt()方法來中斷等待

D.使用lock()方法加鎖後,必須調用unlock()方法才能釋放鎖

**參考答案:CD。**A:兩者不是互不干擾。B:不會等待,直接返回。

1.18 下面關於Java字符串的描述正確的是()

A.System.out.format("%s|%s",1,2,3)編譯通過,且輸出1|2

B.StringBuilder是線程不安全的,它比String快

C.語句System.out.println(new A())能正常運行,其中類A如下

public class A{
    @Override
    public String toString(){
        return "hello"+this.toString();
    }
}

D.StringBuffer是線程安全的,它比String快

**參考答案:AB。**C:報棧溢出錯誤

1.19 以下對Java的垃圾回收的描述,正確的是()

A.複製算法比較適合於新生代,標記階段和複製階段可以同時進行,但可一次性分配的最大內存縮小了一半

B.所有新創建的對象都會被放在年輕代,經歷N次回收仍存活就會被放到年老代

C.標記/清除算法爲了解決引用計數法的問題而提出,但是標記清除後會產生大量不連續的內存碎片

D.標記/整理算法解決了標記/清除算法的內存碎片問題,且性能更好回收速度更快

**參考答案:ABC。**D:整理需要花費不少時間,速度比標記/清除算法要慢。

1.20 在查詢語句的where子句中,如果出現了“amount between 100 and 300” 這個表達式等同於()

A. not (amount < 100 or amount > 300)

B. amount in (100,300)

C. amount >= 100 and amount <= 300

D. amount > 100 and amount < 300

參考答案:AC。

2 在線編程

2.1 字母轉換

將大寫字母轉化爲數字,“A”表示1,“AB”表示28,升序排列。

樣例輸入:

[“A”,“ZY”,“B”,“AB”]

樣例輸出:

[1,2,28,701]

方法定義如下:

//請完成以下方法
public static Integer[] listLineNumber(String[] lineTitleArr){

}

水題

public static Integer[] listLineNumber(String[] lineTitleArr){
        Character[] nums = {'0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
        List<Character> list = Arrays.asList(nums);
        if (lineTitleArr.length < 1){
            return null;
        }
        Integer[] result = new Integer[lineTitleArr.length];
        for (int i = 0; i < lineTitleArr.length; i++) {
            char[] lineTile = lineTitleArr[i].toCharArray();
            int len = lineTitleArr[i].length();
            Integer lineNum = 0;
            for (int j = len-1; j >= 0 ; j--) {
                int base = 1;
                for (int k = 0; k < len-1-j; k++) {
                    base *= 26;
                }
                lineNum += list.indexOf(lineTile[j])*base;
            }
            result[i] = lineNum;
        }
        Arrays.sort(result);
        return result;
    }

2.2 連續非空子數組各自和的最大值最小化問題

給定一個長度爲n的整數組,數組元素均大於等於0,和一個整數m,將這個數組分成m個非空的連續子數組。設計一個算法使得這m個子數組各自和的最大值最小。

int findMinSumOfSubarray(int[] nums,int m){
    //添加實現
}
輸入:

nums = [7,2,5,10,8]

m = 2

輸出:

18

解釋:

一共有四種方法將nums分割爲2個子數組。其中最好的方式是將其分爲[7,2,5][10,8],因爲此時這兩個子數組各自的和的最大值爲18,在所有情況中最小。

這道題有難度,筆者暫未實現。

3 論述題

爲了保證某廠各個系統的數據質量,需要設計一個數據監控平臺,該平臺的異常告警模塊,有以下需求:

  • 1)觸發告警時,需要支持不同的通知方式(SMS、EMAIL、WECHAT等等)
  • 2)觸發告警時,需要支持觸發事件回調,調用相關係統的接口,並能保證多個系統同時回調場景

如果是你,會如何設計這一模塊?除了考慮基本功能的實現以外,還需要考慮通知方式的擴展和回調方式的擴展,後續問題排查以及數據統計方面的需要。

請簡述你的設計要點及原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章