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编程题

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