python基礎筆試題(1)

筆試題:

1.寫出5種以上的HTTP請求方法名 (5分)
2.寫出5種以上http請求的響應狀態碼及其含義 (5分)
3.寫出5種以上HTTP請求或者響應的header (5分)
4.寫出操作系統的3種常見調度算法 (5分)
5.寫出死鎖的4種必要條件 (5分)
6.寫出二進制35+47的計算過程 (10分)
7.寫出建立TCP連接以及斷開連接的步驟 (10分)
8.使用遞歸的方式實現斐波拉契數列生成器,並思考代碼效率是否可以被優化 (10分)
9.實現統計一篇英文文章每個單詞的出現頻率,並返回出現頻率最高的前十個單詞和次數 (10分)
10.請用熟悉的語言實現以下需求,不能使用自帶的函數 (35分)
a)一個字符串中,只包含大中小括號,判斷這個字符串的括號是否合法
b)返回滑動窗口的最大值:給你一個數組,給你一個固定大小k的窗口,將每次這個窗口在數組移動的時候,最大值,返回一個數組
c)給定一個整數數組 nums 和一個目標值 target ,請你在該數組中找出和爲目標值 target 的那兩個整數,並返回他們的數組下標。

考查範圍:

  • HTTP協議
  • 操作系統調度算法
  • 死鎖
  • 二進制運算
  • TCP網絡編程
  • 遞歸 - 斐波那契
  • 其他

相關網址:

我的回答:

1.寫出5種以上的HTTP請求方法名 (5分)
答:總共有9種HTTP請求方法,以下列舉常見的五種HTTP請求方法;

  • GET, 請求指定的頁面信息,並返回實體主體
  • POST, 向指定的資源提交數據進行處理請求
  • HEAD, 類似於GET請求,不過返回的響應沒有具體的內容,用於獲取報頭
  • PUT, 從客戶端向服務器發送數據取代指定的文檔內容
  • DELETE, 請求服務器刪除指定的頁面

2.寫出5種以上http請求的響應狀態碼及其含義 (5分)
答:HTTP響應狀態碼分爲5大類:1XX,2XX,3XX,4XX,5XX,每個類型有多種狀態碼,以下列舉常見的6種,從狀態碼,英文,中文含義說明

  • 200,OK, 請求成功,一般用於get和post請求
  • 201,Created, 已創建,成功請求並創建了新的資源
  • 301,Moved Permanently,永久移動,請求的資源已被永久的移動到新URL,今後應使用新URL
  • 404,Not Found,服務器無法根據客戶端的請求找到資源(網頁)
  • 500,Internal Server Error,服務器內部錯誤,無法完成請求
  • 501,Not Implemented,服務器不支持請求的功能,無法完成請求

3.寫出5種以上HTTP請求或者響應的header (5分)
答:以下列舉5中常見的HTTP響應頭信息

  • Allow,服務器支持哪些請求方法(如get,post)
  • Date,當前的GMT(格林尼治)時間
  • Content-Encoding,文檔的編碼方法,只有在解碼之後纔可以得到Content-Type頭指定的內容類型
  • Content-Length,表示內容長度,只有當瀏覽器使用持久HTTP連接時才需要這個數據
  • Content-Type,表示後面的文檔屬於什麼MIME(多用途互聯網郵件擴展)類型。Servlet默認爲text/plain,但通常需要顯式地指定爲text/html。

4.寫出操作系統的3種常見調度算法 (5分)
答:以下列舉常見的3種操作系統調度方法

  • 先來先服務調度算法FCFS
  • 輪轉調度算法RR
  • 短作業優先調度算法SJF

5.寫出死鎖的4種必要條件 (5分)
答:以下是死鎖的4種必要條件

  • 互斥
  • 不可剝奪
  • 請求保持
  • 循環等待

6.寫出二進制35+47的計算過程 (10分)
答:二進制的加法運算(逢二進一法),二進制轉十進制(按權展開求和法),十進制轉二進制(除2取餘,逆序排列法),注意:以下爲我的個人思路,需要百度掌握以上方法

  • 35用二進制表示:100011,轉換過程(除2取餘,逆序排列法):(35)10 =(10011)2
  • 47用二進制表示:101111,轉換過程(除2取餘,逆序排列法):(47)10 =(11111)2
  • 計算求和:100011+101111=1010010(逢二進一法)
  • 驗證:1010010 = 26+24+21=82(答案正確:82=35+47)

7.寫出建立TCP連接以及斷開連接的步驟 (10分)
答:三次握手與四次揮手分別對應TCP連接建立過程與斷開過程。

三次握手?
三次握手的目的是建立可靠的通信信道,說到通訊,簡單來說就是數據的發送與接收,而三次握手最主要的目的就是雙方確認自己與對方的發送與接收機能正常。

  • 第一次握手:Client什麼都不能確認;Server確認了對方發送正常
  • 第二次握手:Client確認了:自己發送、接收正常,對方發送、接收正常;Server確認了:自己接收正常,對方發送正常
  • 第三次握手:Client確認了:自己發送、接收正常,對方發送、接收正常;Server確認了:自己發送接收正常,對方發送接收正常

四次揮手?
根本原因是,一方發送FIN只表示自己發完了所有要發的數據,但還允許對方繼續把沒發完的數據發過來。
舉個例子:A和B打電話,通話即將結束後,A說“我沒啥要說的了”,B回答“我知道了”,但是B可能還會有要說的話,A不能要求B跟着自己的節奏結束通話,於是B可能又巴拉巴拉說了一通,最後B說“我說完了”,A回答“知道了”,這樣通話纔算結束。

8.使用遞歸的方式實現斐波拉契數列生成器,並思考代碼效率是否可以被優化 (10分)
答:代碼如下,代碼效率如何優化呢?

"""
遞歸寫出斐波拉契數列
斐波拉契數列:1,1,2,3,5,8。。。
"""

def Fibonacci(i):
    """
    輸出指定位置的斐波拉契數
    """

    if i == 1 or i ==2:
        return 1
    elif i == 0:
        return 0
    else:
        # sum = Fibonacci(i-2) + Fibonacci(i-1)
        # print(sum)           # 必須通過return返回結果,否則數據無法傳輸,導致結果報錯,
        return Fibonacci(i-2) + Fibonacci(i-1)


if __name__ == "__main__":

    print(Fibonacci(5))  # 打印指定位置的數

    # 打印指定數量的斐波拉契數列
    l = []
    for i in range(5):
        l.append(Fibonacci(i))
    print(l)

9.實現統計一篇英文文章每個單詞的出現頻率,並返回出現頻率最高的前十個單詞和次數 (10分)
答:代碼題,略

10.請用熟悉的語言實現以下需求,不能使用自帶的函數 (35分)
a)一個字符串中,只包含大中小括號,判斷這個字符串的括號是否合法
b)返回滑動窗口的最大值:給你一個數組,給你一個固定大小k的窗口,將每次這個窗口在數組移動的時候,最大值,返回一個數組
c)給定一個整數數組 nums 和一個目標值 target ,請你在該數組中找出和爲目標值 target 的那兩個整數,並返回他們的數組下標。
答:代碼題,略

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