python web后端,笔试面试题三

一、python 部分


1.1 请列举 python2 与 python3 的区别,请将下面的 python2 代码转换成python3。
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return '({}, {})'.format(self.x, self.y)
points = [Point(9, 2), Point(1,5), Point(2, 7), Point(3, 8), Point(2, 5)]
sorted_points = sorted(points,lambda (x0, y0), (x1, y1): x0 - x1 if x0 != x1 else y0 - y1, lambda point: (point.x, point.y))

# 预期结果为(1, 5), (2, 5), (2, 7), (3, 8), (9, 2) print ', '.join(map(str, sorted_points)

Python2 中存在老式类和新式类的区别,Python3 统一采用新式类。新式类声明要求继承 object,必须用新式类应用多重继承。

1.2 请用 python 写一个正则表达式实现电话号码的提取功能,下面是需要满足条件:
a. 匹配(123)-456-7890 和 123-456-7890
b. 不匹配(123-456-7890) 和 (123)-456-7890


方法一: a.  import re
ret = re.match('[\W][\d]*[\W]*[\d]*[\W][\d]*', '(123)-456-7890')
print(ret.group())

b. import re
ret = re.sub('[\W][\d]*[\W]*[\d]*[\W][\d]*', '', 'abc(123)-456-7890def')
print(ret)


方法二: import re
a = '(123)-456-7890 和 123-456-7890 (123-456-7890 和 123)-456-7890'
ret1 = re.findall(r'(\({1}\d{3}\){1}-\d{3}-\d{4}|\d{3}-\d{3}-\d{4})', a)
print(ret1)

1.3 请用python写一个正则表达式实现如下内容的匹配,并实现数据的结构化


b6b2af4a-02cb-4a45-819e-c35a74186608 300363 关于公司为全资子公司 Porton
USA,L.L.C.申请融资提供担保的公告 2017-01-25
{
'uuid': 'b6b2af4a-02cb-4a45-819e-c35a74186608',
'code': '300363',
'title': '关于公司为全资子公司 Porton USA,L.L.C.申请融资提供担保的公告',
'date': '2017-01-25'
}

方法一: import re
a = 'b6b2af4a-02cb-4a45-819e-c35a74186608 300363 关于公司为全资子公司 Porton USA,L.L.C.申请融资提供担保的公告 2017-01-25'
ret1 = re.match('[\w]*[\W][\w]*[\W][\w]*[\W][\w]*[\W][\w]*', a)
ret2 = re.sub('[\w]*-[\w]*[\W][\w]*[\W][\w]*[\W][\w]*\s', '', a)
ret3 = re.match('\d{6}', ret2)
ret4 = re.sub('[\d]{6}\s', '', ret2)
ret5 = re.search('\d{4}-\d{2}-\d{2}', ret4)
ret6 = re.sub('\d{4}-\d{2}-\d{2}', '', ret4)
list = {}
list['uuid'] = ret1.group()
list['code'] = ret3.group()
list['title'] = ret6
list['date'] = ret5.group()
print(list)
方法二:
b = 'b6b2af4a-02cb-4a45-819e-c35a74186608 300363 关于公司为全资子公司 Porton USA,L.L.C.申请融资提供担保的公告 2017-01-25'
import re
ret = re.match(r'(\w+-\w+-\w+-\w+-\w{4}\d{8}).(\d{6}).(\D+)(\d+-\d+-\d+)', b)
# 或者ret = re.match(r'(\w+-\w+-\w+-\w+-\w{4}\d{8})\s(\d{6})\s(\D+)(\d+-\d+-\d+)', b)
list = {}
list['uuid'] = ret.group(1)
list['code'] = ret.group(2)
list['title'] = ret.group(3)
list['date'] = ret.group(4)
print(list)


1.4 描述 python 开发中,协程,线程和进程的区别,请将下面代码改成可以在多核 CPU 上并行执行的程序。
import os 
import sys
def dump_file(input_dir):
if not os.path.exists(input_dir):
print('dir {} not exists'.format(input_dir))
return
path_list = [os.path.join(input_dir, f).strip('\n') for f in os.listdir(input_dir)]
file_path_list = filter(lambda file_path:os.path.isfile(file_path),path_list)
for file_path in file_path_list:
print('{}:{} size:{}'.format(os.getpid(), file_path,os.path.getsize(file_path)))
if __name__ == '__main__':
if len(sys.argv) > 1:
dump_file(sys.argv[1])
else:
dump_file(os.getcwd())

问题:待解决

1.5 请列常用的 python library,并说明其作用基本使用示例


Python中module和library之间的区别
对于library和module,说白了,都是提供了一定的功能供别人调用。
从这方面来说,也可以理解为:
Python中library等价于module;
只不过,Python中,很少说library,正常的话,都是说module;
所以,简而言之:
library多数都是指的是C,C#等语言中的库,库文件;
Python中,很少用library这个词;
Python中的“库”,“库文件”的叫法,叫做module,模块;


1.6 请解释什么是CORS问题,在什么样的情况下,会遇到这个问题,常用的python库里面该怎么解决这个问题。
前端和后端分别设置了两个不同的域名,前端与后端分处不同的域名,我们需要为后端添加跨域访问的支持。
解决问题:安装django的扩展包django-cors-headers,把域名添加到白名单中,指明在跨域访问中,后端支持cookie的操作。


二、Linux 部分
2.1 假设这里有一台服务器地址为 192.168.0.2,开放的端口为 6623,如何连接到远程服务器操作?
ssh [email protected]:6623

2.2 找出当前目录下 2 天内新创建的所有 json 文件。
find ./ -type f -name '*.json' -ctime -2

2.3 如何查看(监控)CPU 使用情况,硬盘读写情况以及网络读写情况?
htop

2.4 简述在浏览器中输入网址到网页内容展现出来,经过了一个什么样的过程。

首先,你得在浏览器里输入网址,
浏览器查找域名的IP地址(域名就是指输入的网址)
在请求之前,需要浏览器与服务器建立连接(TCP或者UDP)与服务器建立连接时TCP属于安全的连接,需要三次握手
浏览器给web服务器发送一个HTTP请求
服务器接收到获取请求,然后处理并返回一个响应。 
服务器发回一个HTML响应.
浏览器开始显示HTML, 在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了
浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。

2.5 如何查看系统某个端口是否已经被其他程序占用?
lsof -i
lsof -i:端口号


2.6 如何设置定时任务,如果定时任务执行命令的结果和在命令行直接执行该命令的结果不同,请考虑可能存在什么问题。

在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出。
在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。
cron的配置文件称为“crontab”,是“cron table”的简写。

直接在命令行执行 就是在当前的shell环境下执行  
比如涉及到一些环境变量的时候 必须在当前shell环境里执行,
在脚本里执行的话 脚本执行的时候 会fork一个子进程 所有操作都在子进程进行 
如果涉及到一些在脚本里设置环境变量的东西 脚本结束了 环境变量也就消失了

最大的区别可能 就是shell你想执行几遍就几遍,还很方便

2.7 git rebase 命令和 git merge 命令有什么区别,2 个命令对系统会造成什么影响。
分支合并和rebase
git merge <branch>                # 将branch分支合并到当前分支
git merge origin/master --no-ff   # 不要Fast-Foward合并,这样可以生成merge提交
git rebase master <branch>        # 将master rebase到branch,相当于: git co <branch> && git rebase master && git co master && git merge <branch>

三、其他
3.1 请简单描述您对人工智能,知识图谱的了解。


3.2 请简单描述您未来 5 年的规划。


3.3 请介绍一下最近看的 5 本书.

猜你喜欢

转载自blog.csdn.net/CaoMei_HuaCha/article/details/81042283