python企業真題實戰 - 妙計旅行面試題

妙計旅行面試題
  1. Python 主要的內置數據類型有哪些?
  2. print(dir(‘a’))輸出的是什麼?
  3. 給定兩個 list,A 和 B,找出相同元素和不同元素?
  4. 請反轉字符串?
  5. 交換變量 a,b 的值?
  6. 用 select 語句輸出每個城市中心距離 市中心 大於20km酒店數?
  7. 給定一個有序列表,請輸出要插入值 k 所在的索引位置?
  8. 正則表達式貪婪與非貪婪模式的區別?
  9. 寫出開頭匹配字母和下劃線,末尾是數字的正則表達式?
  10. 請說明 HTTP 狀態碼的用途,請說明常見的狀態碼機器意義?
  11. 當輸入 http://www.itheima.com 時,返回頁面的過程中發生了什麼?
  12. 有一個多層嵌套列表A=[1,2,[3.4[“434”,[…]]]]請寫一段代碼遍歷A中的每一個元素並打印出來。
  13. 關係型數據庫中,表和表之間有左連接,內連接,外連接,分別解釋下他們的含義和區別?
  14. 如何定時啓動你的爬蟲項目
  15. 使用 Crontab
  16. 什麼是 scrapy-redis 中的指紋,是如何去重的?
  17. 代碼優化從哪些方面考慮?有什麼想法?
  18. Django 項目的優化(web 通用)
參考答案
  1. Python 主要的內置數據類型有哪些?
    答:Python 主要的內置數據類型有:str,int,float,tuple,list,dict,set。

  2. print(dir(‘a’))輸出的是什麼?
    答:會打印出字符型的所有的內置方法。

    ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
    
  3. 給定兩個 list,A 和 B,找出相同元素和不同元素?
    答:A、B 中相同元素:print(set(A)&set(B));A、B 中不同元素:print(set(A)^set(B))

    A = [1, 2, 2, 3, 4]
    B = [3, 2, 2, 5, 8]
    
    print("相同元素",set(A)&set(B))
    print("不同元素",set(A)^set(B))
    
    結果:
    相同元素 {2, 3}
    不同元素 {1, 4, 5, 8}
    
  4. 請反轉字符串?
    答:new_str = old_str[::-1]

  5. 交換變量 a,b 的值?
    答:a,b = b,a

  6. 用 select 語句輸出每個城市中心距離 市中心 大於20km酒店數?
    答:select count(hotel) from hotel_table where distance >20 group by city

  7. 給定一個有序列表,請輸出要插入值 k 所在的索引位置?
    答:代碼如下

    def index(list, key):
        if key < list[0]:
            position = 0
        elif key > list[-1]:
            position = len(list)
        else:
            for i in range(len(list)):
                if (key >= list[i]) and (list[i + 1] > key):
                    position = i + 1
        return position
    
  8. 正則表達式貪婪與非貪婪模式的區別?、
    答:在形式上非貪婪模式有一個“?”作爲該部分的結束標誌。在功能上貪婪模式是儘可能多的匹配當前正則表達式,可能會包含好幾個滿足正則表達式的字符串,非貪婪模式,在滿足所有正則表達式的情況下儘可能少的匹配當前正則表達式。

  9. 寫出開頭匹配字母和下劃線,末尾是數字的正則表達式?
    答: ^[A-Za-z]|_.*\d$

  10. 請說明 HTTP 狀態碼的用途,請說明常見的狀態碼機器意義?
    答:通過狀態碼告訴客戶端服務器的執行狀態,以判斷下一步該執行什麼操作。
    常見的狀態機器碼有:
    100-199:表示服務器成功接收部分請求,要求客戶端繼續提交其餘請求才能完成整個處理過程。
    200-299:表示服務器成功接收請求並已完成處理過程,常用 200(OK 請求成功)。
    300-399:爲完成請求,客戶需要進一步細化請求。302(所有請求頁面已經臨時轉移到新的 url),
    304、307(使用緩存資源)。
    400-499:客戶端請求有錯誤,常用 404(服務器無法找到被請求頁面),403(服務器拒絕訪問,
    權限不夠)。
    500-599:服務器端出現錯誤,常用 500(請求未完成,服務器遇到不可預知的情況)。

  11. 當輸入 http://www.baidu.com 時,返回頁面的過程中發生了什麼?
    答:1)瀏覽器向 DNS 服務器發送 baidu.com 域名解析請求;
    2)DNS 服務器返回解析後的 ip 給客戶端瀏覽器,瀏覽器想該 ip 發送頁面請求;
    3)DNS 服務器接收到請求後,查詢該頁面,並將頁面發送給客戶端瀏覽器;
    4)客戶端瀏覽器接收到頁面後,解析頁面中的引用,並再次向服務器發送引用資源請求;
    5)服務器接收到資源請求後,查找並返回資源給客戶端;
    6)客戶端瀏覽器接收到資源後,渲染,輸出頁面展現給用戶。

  12. 有一個多層嵌套列表A=[1,2,[3.4[“434”,[…]]]]請寫一段代碼遍歷A中的每一個元素並打印出來。
    答:思路是有幾個嵌套鏈表就用幾個 for 循環進行迭代,然後對最後一個結果進行打印。

a= ["a","b",["1","3",["4","haha"]]]
for b in a :
	for c in b :
		for d in c :
			print(d)
  1. 關係型數據庫中,表和表之間有左連接,內連接,外連接,分別解釋下他們的含義和區別?
    答:內連接查詢:查詢的結果爲兩個表匹配到的數據。
    右接查詢:查詢的結果爲兩個表匹配到的數據,右表特有的數據,對於左表中不存在的數據使用 null
    填充。
    左連接查詢:查詢的結果爲兩個表匹配到的數據,左表特有的數據,對於右表中不存在的數據使用
    null 填充。

  2. 如何定時啓動你的爬蟲項目
    答:1.最簡單的方法:直接使用 Time 類;

    import time
    import os
    
    while True:
        os.system("scrapy crawl News")
        time.sleep(86400) #每隔一天運行一次 24*60*60=86400s
    

    2.使用 sched;

    import sched
    import os
    import time
    #初始化 sched 模塊的 scheduler 類
    #第一個參數是一個可以返回時間戳的函數,第二個參數可以在定時未到達之前阻塞。
    schedule = sched.scheduler ( time.time, time.sleep )
    
    #被週期性調度觸發的函數
    def func():
        os.system("scrapy crawl News")
    def perform1(inc):
        schedule.enter(inc,0,perform1,(inc,))
        func() # 需要週期執行的函數
    def mymain():
        schedule.enter(0,0,perform1,(86400,))
    
    if __name__=="__main__":
        mymain()
        schedule.run() # 開始運行,直到計劃時間隊列變成空爲止
    

    3.使用 Crontab

  3. 什麼是 scrapy-redis 中的指紋,是如何去重的?
    答:指紋:通過 sha1 加密,把請求體,請求方式,請求 url 放在一起。然後進行 16 進制的轉義符字符串生成指紋。生成一個字符串,放到數據庫中作爲唯一標示。

    去重:urll 中按照 url 去重:1.按照 url 去重,有一個列表,發送請求之前從數據表中看一下這個 url有沒有請求過,請求過了就不用看了, 2.內容判斷,從數據庫中查數據的表示,如果請求過了就在不在請求了。

  4. 代碼優化從哪些方面考慮?有什麼想法?
    答:1.優化算法時間複雜度。
    2.減少冗餘數據。
    3.合理使用 copy 與 deepcopy。
    4.使用 dict 或 set 查找元素。
    5.合理使用生成器(generator)和 yield。
    6.優化循環。
    7.優化包含多個判斷表達式的順序。
    8.使用 join 合併迭代器中的字符串。
    9.選擇合適的格式化字符方式。
    10 不借助中間變量交換兩個變量的值。
    11.使用 if is。
    12.使用級聯比較 x < y < z。
    13.while 1 比 while True 更快。
    14.使用**而不是 pow。
    15.使用 cProfile, cStringIO 和 cPickle 等用 c 實現相同功能(分別對應 profile, StringIO, pickle)
    的包。
    16.使用最佳的反序列化方式。
    17.使用 C 擴展(Extension)。
    18.並行編程。
    19.終級大殺器:PyPy。
    20.使用性能分析工具。

  5. Django 項目的優化(web 通用)
    答:
    1.優化數據庫查詢
    1.1 一次提供所有數據
    1.2 僅提供相關的數據
    2.代碼優化
    2.1 簡化代碼
    2.2 更新或替代第三方軟件包
    2.3 重構代碼

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