2019ML面試題

機器學習面試題

©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響應: 響應行、響應頭、空行、響應體
        響應行: 版本信息 響應碼 附加信息		

  1. 什麼是同源策略?實現跨域有那些方法?
 > 同源地址: 多個地址中,具備相同協議,相同域名,相同端口的地址稱爲"同源地址"
 > "同源策略":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

2.3 python編程題

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