妙計旅行面試題
- Python 主要的內置數據類型有哪些?
- print(dir(‘a’))輸出的是什麼?
- 給定兩個 list,A 和 B,找出相同元素和不同元素?
- 請反轉字符串?
- 交換變量 a,b 的值?
- 用 select 語句輸出每個城市中心距離 市中心 大於20km酒店數?
- 給定一個有序列表,請輸出要插入值 k 所在的索引位置?
- 正則表達式貪婪與非貪婪模式的區別?
- 寫出開頭匹配字母和下劃線,末尾是數字的正則表達式?
- 請說明 HTTP 狀態碼的用途,請說明常見的狀態碼機器意義?
- 當輸入 http://www.itheima.com 時,返回頁面的過程中發生了什麼?
- 有一個多層嵌套列表A=[1,2,[3.4[“434”,[…]]]]請寫一段代碼遍歷A中的每一個元素並打印出來。
- 關係型數據庫中,表和表之間有左連接,內連接,外連接,分別解釋下他們的含義和區別?
- 如何定時啓動你的爬蟲項目
- 使用 Crontab
- 什麼是 scrapy-redis 中的指紋,是如何去重的?
- 代碼優化從哪些方面考慮?有什麼想法?
- Django 項目的優化(web 通用)
參考答案
-
Python 主要的內置數據類型有哪些?
答:Python 主要的內置數據類型有:str,int,float,tuple,list,dict,set。 -
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']
-
給定兩個 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}
-
請反轉字符串?
答:new_str = old_str[::-1] -
交換變量 a,b 的值?
答:a,b = b,a -
用 select 語句輸出每個城市中心距離 市中心 大於20km酒店數?
答:select count(hotel) from hotel_table where distance >20 group by city -
給定一個有序列表,請輸出要插入值 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
-
正則表達式貪婪與非貪婪模式的區別?、
答:在形式上非貪婪模式有一個“?”作爲該部分的結束標誌。在功能上貪婪模式是儘可能多的匹配當前正則表達式,可能會包含好幾個滿足正則表達式的字符串,非貪婪模式,在滿足所有正則表達式的情況下儘可能少的匹配當前正則表達式。 -
寫出開頭匹配字母和下劃線,末尾是數字的正則表達式?
答:^[A-Za-z]|_.*\d$
-
請說明 HTTP 狀態碼的用途,請說明常見的狀態碼機器意義?
答:通過狀態碼告訴客戶端服務器的執行狀態,以判斷下一步該執行什麼操作。
常見的狀態機器碼有:
100-199:表示服務器成功接收部分請求,要求客戶端繼續提交其餘請求才能完成整個處理過程。
200-299:表示服務器成功接收請求並已完成處理過程,常用 200(OK 請求成功)。
300-399:爲完成請求,客戶需要進一步細化請求。302(所有請求頁面已經臨時轉移到新的 url),
304、307(使用緩存資源)。
400-499:客戶端請求有錯誤,常用 404(服務器無法找到被請求頁面),403(服務器拒絕訪問,
權限不夠)。
500-599:服務器端出現錯誤,常用 500(請求未完成,服務器遇到不可預知的情況)。 -
當輸入 http://www.baidu.com 時,返回頁面的過程中發生了什麼?
答:1)瀏覽器向 DNS 服務器發送 baidu.com 域名解析請求;
2)DNS 服務器返回解析後的 ip 給客戶端瀏覽器,瀏覽器想該 ip 發送頁面請求;
3)DNS 服務器接收到請求後,查詢該頁面,並將頁面發送給客戶端瀏覽器;
4)客戶端瀏覽器接收到頁面後,解析頁面中的引用,並再次向服務器發送引用資源請求;
5)服務器接收到資源請求後,查找並返回資源給客戶端;
6)客戶端瀏覽器接收到資源後,渲染,輸出頁面展現給用戶。 -
有一個多層嵌套列表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)
-
關係型數據庫中,表和表之間有左連接,內連接,外連接,分別解釋下他們的含義和區別?
答:內連接查詢:查詢的結果爲兩個表匹配到的數據。
右接查詢:查詢的結果爲兩個表匹配到的數據,右表特有的數據,對於左表中不存在的數據使用 null
填充。
左連接查詢:查詢的結果爲兩個表匹配到的數據,左表特有的數據,對於右表中不存在的數據使用
null 填充。 -
如何定時啓動你的爬蟲項目
答: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
-
什麼是 scrapy-redis 中的指紋,是如何去重的?
答:指紋:通過 sha1 加密,把請求體,請求方式,請求 url 放在一起。然後進行 16 進制的轉義符字符串生成指紋。生成一個字符串,放到數據庫中作爲唯一標示。去重:urll 中按照 url 去重:1.按照 url 去重,有一個列表,發送請求之前從數據表中看一下這個 url有沒有請求過,請求過了就不用看了, 2.內容判斷,從數據庫中查數據的表示,如果請求過了就在不在請求了。
-
代碼優化從哪些方面考慮?有什麼想法?
答: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.使用性能分析工具。 -
Django 項目的優化(web 通用)
答:
1.優化數據庫查詢
1.1 一次提供所有數據
1.2 僅提供相關的數據
2.代碼優化
2.1 簡化代碼
2.2 更新或替代第三方軟件包
2.3 重構代碼