機器學習面試題
©Ant
1. 服務器常用命令
2.python研發
2.1 python基礎題
1.什麼是面向切面編程,它的含義?
2.python中運算符//與%的區別?
// 在python中表示整除, 只保留整數部分, eg 3//2=1
% 表示取餘, eg 3%2=1
/ 表示真除,eg 3/2=1.5
3. http狀態碼 404,502,510分別代表什麼意思?
404 :請求失敗,請求所希望得到的資源未在服務器上發現。
502: 作爲網關或者代理工作的服務器嘗試執行請求時,從上游服務器接收到無效的響應。
510: 獲取資源所需要的策略並沒有沒滿足。
響應碼分類
1xx 提示信息,表示請求被接收
2xx 響應成功
3xx 響應需要進一步操作,重定向
4xx 客戶端錯誤
5xx 服務器錯誤
這裏主要考察http協議內容,http是超文本傳輸協議,用來獲取網頁和傳輸數據。
http請求: 請求行、請求頭、空行、請求體
請求行: 請求類型 請求內容 協議版本
請求類型主要包括: GET POST HEAD PUT DELETE CONNECT TRACE OPTIONS
http響應: 響應行、響應頭、空行、響應體
響應行: 版本信息 響應碼 附加信息
- 什麼是同源策略?實現跨域有那些方法?
> 同源地址: 多個地址中,具備相同協議,相同域名,相同端口的地址稱爲"同源地址"
> "同源策略":HTTP協議中的一個安全策略,即同源地址之間能夠進行進行數據請求,不同源地 址不能夠直接的數據請求屬於跨域請求協議是不允許的。
> 在HTTP中,只有同源地址才能發送ajax請求,非同源地址是被拒絕的(<script>和<img>除外)
hhtp://localhost:8000/a.html
hhtp://127.0.0.1:8000/a.html
上述兩不是同源地址,他們的域名不一樣.
跨域請求的實現:
- 方法一:核心思想: 使用<script>標籤實現跨域的ajax請求
$(function () {
$("#btnJS").click(function () {
//動態添加script標籤,實現跨域請求
var script = document.createElement("script");
script.src = "http://localhost:8000/06-server";
$("body").append(script);
});
});
- 方法二: 跨域資源共享( CORS )機制允許 Web 應用服務器進行跨域訪問控制,從而使跨域數據傳輸得以安全進行
5 is 和 ==的區別?
```python
# is比較的是兩者(數據對象)的內存地址,id()可獲取變量內存地址
# ==比較的是兩者的值。
# 但小數據池數據例外,小數據池數據is和==的效果一樣,小數據池指數值介於 -5~256 之間的值
#測試數值
a=256
b=256
print(a==b) #true
print(a is b) #true
a=257
b=257
print(a==b) #true
print(a is b) #false
6 "for else"語句的邏輯?
如果for循環遍歷成功則執行else,中途退出就不執行else部分。
可以用來判斷for循環中數據是否完全遍歷。但由於容易造成混淆使用時需要多加註意。
for i in range(5):
print(i)
else:
print("遍歷完所有數據")
for i in range(5):
print(i)
if i == 3:
break
else:
print("未遍歷完所有數據")
7 閉包函數的使用?
閉包函數三要素:嵌套結構,內部函數使用外部變量。外部函數使用內部返回值.
def x(a):
b=2
def y(c):
d=3
return a+b+c+d
return y
8 寫出下面代碼執行結果
import copy
l1 = [1,2,['a','b']]
l2 = l1
l3 = copy.copy(l2)
l4 = copy.deepcopy(l3)
l1.append(3)
l2.append('c')
print(l2) # [1,2,['a','b'],3,c]
print(l3) # [1,2,['a','b']]
print(l4) # [1,2,['a','b']]
"""
這裏考察淺拷貝(=)、深拷貝(deepcopt)和copy()函數的使用。
= 是一種淺拷貝,只拷貝了變量的指針,即兩個變量名指向同一個數據,修改源值,拷貝值也會修改
deepcopy 爲深拷貝,即在內存中又複製了一份同樣的數據。
copy()函數只拷貝一層結構,eg: 修改l1中內部列表值時,l1[2][0] ='c', l3會變爲[1,2,['c','b']]
"""
9 請使用一行代碼實現與下面代碼完全相同的邏輯和輸出
if a+b<x:
print(a+b)
else:
print(sum([a+b+x]))
print(a+b) if a+b<x else print(sum([a+b+x]))
"""
考察點:三目運算,
print('true') if 條件 else print('false')
"""
10 下面的函數實現了那種數學運算?
n的階乘
def calc(n):
if n==0:
return 1
else:
return n*calc(n-1)
"""
考察點:遞歸函數,
"""
11 下列代碼運行結果?
1,2
def x(max):
n,a=1,1;
while n < max:
yield a
a += n
n += 1
for n in x(3):
print(n)
"""
考察點:生成器的使用
"""
12 下面兩種永久運行程序,那種好些?
第一種好,遞歸調用次數過多會導致內存中棧溢出。
from time import sleep
def x():
while True:
print('滴答')
sleep(1)
def x():
print('滴答')
sleep(1)
x()
"""
考察點:遞歸函數的缺點,函數在內存中的執行方式。
"""
13 請使用[兩行python代碼]實現計算指定文件中字符’a’出現的次數,注意文件可能非常巨大
服務器內存可能非常小
14 寫出輸出結果
1,(2,3),{}
def f(x,*y,**z):
print(x,y,z)
f(1,2,3)
"""
考察點:函數傳參
"""
15 輸出執行結果
output: 3
def call(func,timeout=5,**kwargs):
print(kwargs.get('x',0))
print(kwargs.get('y',0))
return func(kwargs.get('x',0),kwargs.get('y',0))
def my_func(x,y):
return x+y
call(my_func,x=1,y=2)
"""
考察點:kwargs.get('x',0)
"""
16 異常知識點考察
def f():
x= []
try:
x[:] = "hello"
x.append('try')
return x
x.append("return1")
except:
pass
else:
pass
finally:
x.append('finally')
return x
x.append('retunrn4')
f()
17(???) 請問print(’‘is None and not {} or [{}] and {’’} or not ‘’)的結果?
output: True
考察點:python中的'零'(空)值,和邏輯運算符的使用
18輸出結果?
output:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, [4, 5, 6]]
l1,l2= [1,2,3],[4,5,6]
print(l1+l2)
l1,l2= [1,2,3],[4,5,6]
l1.extend(l2)
print(l1)
l1,l2= [1,2,3],[4,5,6]
l1.append(l2)
print(l1)
"""
考察點:列表合併
"""
19 字典變量dic中可能含有鍵’x’,請用一行代碼打印出鍵的值
def f(dict):
# 方法1
for key in dict:
if key == 'x':
print(dict[key])
#方法2
print(next((dict[key] for key in dict if key=='x')))
f({'x':1,"y":2})
"""
考察點:三目,生成器的使用
"""
20 命令行斷點調試python代碼
參考博客
python官網pdb斷點調試
常用的調試命令(具體詳細的資料參見官網文檔):
斷點相關命令:
設置斷點: (Pdb) b 8 #斷點設置該文件的第8行(b即break的首字母)
顯示所有斷點:(Pdb) b #b命令,沒有參數,顯示所有斷點
刪除斷點:(Pdb) cl 2 #刪除第2個斷點 (clear的首字母)
Step Over:(Pdb) n #單步執行,next的首字母
Step Into:(Pdb) s #step的首字母
Setp Return:(Pdb) r #return的首字母
Resume:(Pdb) c #continue的首字母
Run to Line:(Pdb) j 10 #運行到地10行,jump的首字母
(Pdb) p param #查看當前param變量值
(Pdb) l #查看運行到某處代碼
(Pdb) a #查看全部棧內變量
(Pdb) h #幫助,help的首字母
(Pdb) q #退出,quit的首字母
2.2 python問題分析題
1