1. 程式人生 > >常見的面試題

常見的面試題

connect 沒有 p s 手動 查找 試題 什麽 模式 編程

進程中的管道:Pipe

  IPC通信的一種機制,隊列就是基於管道來完成通信的,但是管道是原生的通信方式

  在進程之間會產生數據不安全的情況,需要自己手動加鎖來處理

  管道在數據傳輸過程中,還涉及到一個端口管理,這個需要我們在代碼中做處理才能使用代碼更加完善

進程中的隊列:管道+鎖,進程之間的數據安全

進程中的信號量原理:鎖+計數器

單例模式:

class A:
    __isinstangs = None
    def __new__(cls, *args, **kwargs):
        if A.__isinstangs == None:
            obj = object.__new__(cls) 
            A.__isinstangs = obj
        return A.__isinstangs

三次握手,四次揮手:

三次握手:
	     (面試回答)
		 首先,必須先由客戶端發起連接的請求
		 接下來,服務器接收到請求之後,回復給客戶端兩個標識,一個syn表示
		    服務器接收到請求,一個ack表示服務器在做準備工作,兩個標識一起
			回復給客戶端
		 最後,客戶端接收到服務器的回復,客戶端準備連接的所有資源,開始進行連接
		 發送給服務器一個ack表示客戶端的連接準備工作已經完成
		 (此時表示客戶端和服務器可以相互連接了)
		 如果面試官問你,哪句代碼體現了三次握手? 
		   回答: 服務器端的accept,客戶端connect
		   
	   四次揮手:
	     (面試回答)
          (1)首先由連接雙方任意一方發起斷開連接的請求,發起方發送的請求表示
		  是我沒有數據要繼續發送了,可以斷開連接了,但是你如果還有數據可以繼續向我發送數據.
          (2)接收方回復給發起方,表示接到了發起放的斷開請求,開始著手準備斷開事宜
		  (3)接收方準備完成後,給發起方發送一個標識,表示接受方沒有數據繼續發送了
		     可以斷開連接了
	      (4)發起方接收到消息後,準備斷開連接,回收資源
		  如果面試官問你,哪句代碼體現了四次揮手?
		    回答: close()

斐波那契數列1, 2, 3, 5, 8, 13, 21.....根據這樣的規律,編程求出400萬以內最大的斐波那契數,並求出他是第幾個斐波那契數。

a, b = 1, 2
count = 1
while b < 4000000:
    a, b = b, a + b
    count += 1
print(f‘{a}是400萬以內最大的斐波那契數,是第{count}個斐波那契數‘)

默認值參數的坑

以下的代碼的輸出將是什麽:___(3分)
# def extendList(val, list=[]):
#     list.append(val)
#     return list
#
#
# list1 = extendList(10)
# list2 = extendList(123, [])
# list3 = extendList(‘a‘)
# print(list1, list2, list3) 運行結果:[10, ‘a‘] [123] [10, ‘a‘]
# print “list1 = % s” % list1
# print “list2 = % s” % list2
# print “list3 = % s” % list3

二分查找:

# l1 = [2, 3, 5, 10, 15, 16, 18]
#
# def two_find(l,aim,start=0,end=None):
#     end = len(l) - 1 if end is None else end
#     mid_index = (end - start) // 2 + start
#     ‘‘‘
#         第一次: aim:15 start: 0  end: 6  min_index: 3  中間值:10  aim > 10
#         第二次: aim:15 start: 4  end: 6  min_index: 5  中間值:16  aim < 16
#         第三次: aim:15 start: 4  end: 5  min_index: 4  中間值:15  aim = 15
#         ‘‘‘
#     if start <= end:
#         if aim > l[mid_index]:
#             return two_find(l, aim, start=mid_index+1, end=end)
#         elif aim < l[mid_index]:
#             return two_find(l, aim, start=start, end=mid_index)
#         elif aim == l[mid_index]:
#             return mid_index
#         else:
#             return None
#     else:
#         return None
# print(two_find(l1,15))

  

  

  

  

  

常見的面試題