测开面试 | Python语言常见问题


1、面向对象的概念?

  • 面向对象编程,简称OOP,是一种程序设计思想
  • 主要包括:类、继承、多态(子类方法覆盖父类方法)、实例、属性、方法

2、什么是进程、线程、协程?

3、如何使用python实现socket编程?

  • Socket(套接字),应用程序通过套接字向网络发出请求和应答请求,使主机间或者一台计算机上的进程间可以通讯
#服务端
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket               # 导入 socket 模块
 
s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口
 
s.listen(5)                 # 等待客户端连接
while True:
    c.addr = s.accept()     # 建立客户端连接
    print '连接地址:', addr
    c.send('欢迎访问菜鸟教程!')
    c.close()                # 关闭连接

#客户端
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py
 
import socket               # 导入 socket 模块
 
s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口号
 
s.connect((host, port))
print s.recv(1024)
s.close()

4、什么是lambda函数?

  • 匿名函数,即没有函数名的函数
  • 减少单行函数或者很少使用的函数的定义
#普通函数
def g(x):
    return x+1
#匿名函数
g = lambda x:x+1

5、tuple和list什么区别?

  • tuple:元组,list:列表
  • tuple的元素不可改(元组内的元素不可改,整个元组可修改)
  • list的元素可修改
#元组
tuple_a = (1, 2, 3, 4, 5)
#列表
list_a = [1, 2, 3, 4, 5]

6、range函数的用法?

  • 返回一系列连续增加的整数
  • 工作方式类似于分片(提取部分数据str[start:stop])
  • 可以生成一个列表对象
range(start, stop[, step])
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

7、字符串的拆分方法有哪些?

  • string对象的split方法,不允许有多个分隔符
  • 函数re.split(),允许为分隔符指定多个正则表达式
>>> import re
>>> line = "aaa bbb ccc;ddd   eee,fff"
>>> line
'aaa bbb ccc;ddd   eee,fff'
#冒号分割
>>> re.split(r';', line)
['aaa bbb ccc', 'ddd   eee,fff']
#冒号、逗号分割
>>> re.split(r'[;,]', line)
['aaa bbb ccc', 'ddd   eee', 'fff']
#冒号、逗号、空格分割
>>> re.split(r'[;,\s]', line)
['aaa', 'bbb', 'ccc', 'ddd', '', '', 'eee', 'fff']
#结果包含分隔符
>>> re.split(r'([;])', line)
['aaa bbb ccc', ';', 'ddd   eee,fff']
#结果不含分隔符
>>> re.split(r'(?:[;])', line)
['aaa bbb ccc', 'ddd   eee,fff']

8、单引号、双引号、三引号的区别是什么?

  • 单引号和双引号没有区别,都可用来表示字符串(根据字符串是否包含单双引号选择使用)
  • 三引号,字符串内可以直接换行
#单引号内使用单引号需要转义符号
str3 = 'I\'m a big fan of Python.’
str4 = 'We all know that \'A\' and \'B\' are two capital letters.’
#双引号内使用单引号不需要转义符号
str4_ = "We all know that 'A' and 'B' are two capital letters.”
#单引号内使用双引号不需要转义符号
str5 = 'The teacher said: "Practice makes perfect" is a very famous proverb.'

9、*args和**kwargs什么作用?

  • *args,可变的参数列表
  • **kwargs,键值对参数列表
  • *args和**kwargs都可以用来传不定量参数

10、pass语句的作用?

  • 占位符,实现一个空函数,用于保持程序结构的完整性

11、re模块中match和search方法的不同?

  • match:在字符串的起始位置匹配,匹配失败,返回none
  • search:扫描整个字符串并返回第一个成功的匹配
#函数语法
re.match(pattern, string, flags=0)
re.search(pattern, string, flags=0)
#实例
#!/usr/bin/python
import re
 
line = "Cats are smarter than dogs";
 
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"
 
matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
   print "search --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"
#实例的运行结果
No match!!
search --> matchObj.group() :  dogs

12、解释一下WSGI和FastCGI的关系?

  • CGI:通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上如:HTTP 服务器,提供同客户端 HTML 页面的接口
  • HTTP服务器与机器上的程序进行交互的一种工具
  • 程序须运行在网络服务器上,和语言无关
  • WSGI: Web Server Gateway Interface,描述web server如何与web application通信的规范
    服务器接受请求-》转给应用-》应用处理请求-》应用返回结果给服务器-》服务器返回结果给客户端
    WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
    WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。
  • FastCGI像是一个常驻(long-live)型的CGI,可以一直执行着(https://www.zhihu.com/question/30672017

13、python如何操作文件?

  • 打开文件
  • 写入/读取数据
  • 关闭文件

14、python的内存管理机制?(https://testerhome.com/topics/16556)

  • 引用计数:在python中,每个对象都有指向该对象的引用总数
  • 分代回收:将内存分为3代,0代1代2代,数字越大存活时间越久
  • 垃圾回收:当python中的对象越来越多,占据越来越大的内存,启动垃圾回收(Gabage Collection),将没用的对象删除
  • 内存池机制:管理小块内存的申请和释放

15、dict的items和iteritems的区别?

  • items,以列表方式返回,返回时没有特殊顺序
  • iteritems,返回方式类似,返回的是一个迭代器对象

欢迎关注微信公众号"测试开发Stack"


作者:Shengjie,发布于:2019/05/17
原文:https://www.cnblogs.com/liushengchieh/p/10877414.html