打开这个网站 www.python3.vip
学习好 Python基础 和进阶部分知识,回答下面问题
Python:
- 下面代码的运行结果是什么
a = 1
b = a
b = 2
print a
答: 1
- 这行代码 '1234'[3:] 的运行结果是什么
答: '4'
- 执行import语句的时候,解释器是如何 查找模块文件的?
答:最终是通过 sys.path决定的。通常我们可以通过修改环境变量 PYTHONPATH 来添加自己的模块搜索路径
-
怎么把一个 字符串 转换为整型
答:可以使用 int函数 -
tuple 和list 的区别主要是什么?
答: tuple是不可变的,list是可变的 mutable
- 怎么把一个数字格式化输出为 10位宽度, 不足前面补零?
答:可以用'%010d' % 56 或者 '{:010}'.format(56)
- 打开文件的时候 用with open ... as ... 这种方式有什么好处?
答:这种方式不需要调用 close方法关闭文件句柄, 如果用直接用 fh = open(....)这种方式,如果忘掉关闭文件句柄,会造成文件一直打开的后果。
- read,readline和readlines 的区别是什么
答: read 读取整个文件 readline 读取下一行, readlines 读取整个文件,返回一个列表,列表中每个元素就是文件汇总的每行内容
- 类的静态属性和实例属性的区别是什么?
答:静态属性时属于类的, 所有实例公有的属性,只有一份。 而实例属性是每个实例各自独有的属性。
- 类的静态方法和实例方法的区别是什么?
答:实例方法的调用离不开实例,我们需要把实例自己传给函数,而静态方法可以通过类名进行访问。静态方法里面不能访问实例属性
- 面向对象中 组合和 继承的区别
答: 比如 一个 汽车 对象 拥有一个 发动机 对象 和 4个 轮胎 对象 可以说汽车对象由 发动机 对象和轮胎对象组成 ,这就是对象的组合 而一个 东北虎可以继承自老虎对象, 这就是继承 组合是 “有一个”的关系,而继承是“是一个”的关系
- 什么是多态?
答:多态是面向对象设计的一种机制、一种能力。它主要指 对某个类的子类和父类的实例对象, 调用同样的方法,其执行的效果多种多样。 这样的一个特点。 参考 www.zhihu.com/question/30…
- 一个目录要成为python的package 需要有什么?
答:需要在目录下面加上 init.py 文件
- Python中调用外部程序有哪些方法?
答:可以使用 os.system 或者 subprocess模块里面的函数(比如check_output)或者Popen类
- Python 怎样非阻塞(也就是python程序不需要等待被调用程序结束就可以继续运行下面的代码)启动一个外部程序的方法?
答: 可以用subprocess 的 Popen类,比如
from subprocess import Popen
process = Popen(args='mspaint', shell=True)
print 'done'
- python 函数参数定义里面 * , ** 分别是什么意思
答: 可变参数 和 关键字可变参数 函数参数的概念可以复习一下下面的例子
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c,
print 'args =', args, 'kw =', kw
其中 a,b 是 必填参数、c是缺省参数、args是可变参数, kw 关键字可变参数
- 如果我想直接存储一个python dict 对象到文件里面,该怎么做?
答 :可以使用pickle 或者json 将对象进行序列化
- range(10000) 和 xrange(10000) 的区别
答: 前者会立刻产生出一个list对象包含0到9999所有数字, 而后者并不立刻产生 包含所有数字的list 对象。 一般比较大的循环,建议使用xrange,这样会更快一些
- 在什么情况下,python对象会被解释器清除?
答: 当该对象没有任何 指向它的引用(引用计数为0)
- 两个线程更新一个dict 里面的内容,该怎么设计
答: 在访问共享对象的代码前,要调用Lock对象的acquire方法,进行上锁操作。当多个线程同时执行lock.acquire()时,只有一个线程能成功地获取锁,然后继续执行代码,其他线程就继续等待直到获得锁为止。 访问结束后,一定要调用Lock对象的release方法,进行解锁操作。否则其它等待锁的线程将永远等待下去,成为死线程
- 什么是 GIL , GIL 带来的问题是什么?
答: GIL 是全局解释器锁, Python中每个线程执行的时候要获取这个锁 才能 执行代码。 所以Python中的多线程不能真正做到并行执行代码。不能发挥CPU多核的优势。
- 装饰器 是什么回事?
答: Python中装饰器通常用来装饰函数、或者类的方法。 被装饰后的函数, 原有的函数基础上,会多出增加一点功能,或者功能有一些变化。 一般来说装饰器本身也是一个函数,我们可以把装饰器 想象成包含了 被装饰的函数。
- python 的代码中如果有中文,代码文件应该做如何处理
答: 在顶部注释中 加入 类似 # coding=utf8 这样的声明 , 但是要注意代码文件是什么中文编码,是gbk还是utf8 , 声明的编码格式匹配就可以了。
- 怎么把unicode字符串的编码为utf8的字符串
答: 比如 'abcd'.encode('utf8')
- 进程间通信有哪些方法?
答: 共享内存,socket 通信 都可以
- 多线程如何同步和互斥?
答: python 中可以用 threading.Lock 或者条件变量等 方法
- Python中如何捕获所有的异常?
答:如下
try:
...
except :
...
- Python中如何指定一段代码,不管是否有异常发生都执行的?
答:可以用finally 语句,如下
try:
...
except :
...
finally:
...
- 进程和线程的区别
答:进程是运行着的程序,而线程是进程中指令的执行单元。 代码指令必须在操作系统分配的线程中执行。 一个进程至少包含一个线程。
- python怎么实现一个单例模式的类
答:参考 www.cnblogs.com/dyllove98/a…
- 请用一种算法将一个包含了n个整数的列表 按从小到大的顺序进行排序
答:可以使用下面的冒泡排序法
def bubbleSort(alist):
# j 是最后一个元素 到 第二个元素
for j in range(len(alist)-1,0,-1):
for i in range(0, j):
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
return alist
Selenium
- 请画出Selenium 的架构示意图
答:
- Selenium 有哪些选择元素的方法
答:可以根据 id ,name 属性, class 属性等, 最灵活的是css选择器 和xpath 选择器 (自行复习一下css选择器,xpath的语法)
Django
- Django中一个http请求由那个函数处理是怎么决定的?
答:根据url路由配置
- django 通常要和那些wsgi server 一起使用?
答: Gunicorn 或者 uwsgi , 也可以使用 cherrypy等
- django 开发的web应用,性能瓶颈通常会有哪些?
答: 一般性能瓶颈通常在数据库操作上面,特别是数据表很大的时候,访问操作又特别复杂(比如 多个表的联合查询)
- 提高数据库查询性能的方法通常有哪些?
答: 合理的加索引
Robotframework
- RF作为测试框架, 提供了哪些功能?
答: 为测试用例的开发提供 清晰明了 的 关键字定义用例的模式 为自动化项目 的套件、用例目录结构 提供 比较灵活的初始化、清除的 机制 为自动化项目的执行提供 灵活的用例、套件选择机制 为测试结果提供 清晰、细致 的日志和报表
- RF 怎么定义一个变量?
答:
可以在用例中定义 : ${var1}= Set Variable hello 可以在Settings 表中声明 ${var1} hello
- RF 循环的写法
答: 如下
${list}= create list 1 2 3 4
:FOR ${index} IN @{list}
\ Log To Console ${index}
- RF 条件判断的写法
答: 如下
Run Keyword If '2016' in $html and 'UTC' in $html
... log to console \n2016年的,UTC时间
... ELSE IF '2016' in $html log to console \n2016年的
... ELSE IF 'UTC' in $html log to console \nUTC时间
... ELSE log to console \n以上都不是
- RF 的Setup 、Teardown 是如何设置的
答:可以在 测试套件目录的初始化脚本文件 init.robot中, 可以在 测试套件文件的 Settings表中,可以在测试用的 [Setup][Teardown] 配置项中。
- RF 执行的时候怎么过滤选择 用例和套件
答: 可以通过 --test --suite 参数根据 名称过滤, 也可以用参数 --include 根据 用例标签 过滤
Appium
- 请画出Appium的架构示意图
答:
- 开发移动应用自动化的大体步骤有哪些
答:主要就是根据要操作的元素的属性特征,选择到这些元素,然后调用Appium 库的方法操作这些元素,获取元素的信息(主要是文本内容)。 分析元素信息是否正确
- 怎样查看移动应用的界面元素的属性
答:可以通过 UIAutomate Viewer 工具
- Appium 选择元素的方法有哪些
答:通过 resource id, class name, accessibility id, xpath, UIAutomator API 的java代码
- Appium 怎样滑动屏幕
答:可以通过 WebDriver的swipe 方法
其它
- 负载测试和压力测试的区别
答:根据 国外Wiki上的解释
负载测试 主要是 根据需求规格上说明的应该能承受系统负荷,模拟相应的负荷量,看看系统是否能满足需求规格
而压力测试 则是 模拟超出需求规格上说明的更大的负载情况下, 系统的健壮性如何(是否会崩溃等)