1、面向对象的概念?

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

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

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

  • Socket(套接字),应用程序通过套接字向网络发出请求和应答请求,使主机间或者一台计算机上的进程间可以通讯
  1. #服务端
  2. #!/usr/bin/python
  3. # -*- coding: UTF-8 -*-
  4. # 文件名:server.py
  5. import socket # 导入 socket 模块
  6. s = socket.socket() # 创建 socket 对象
  7. host = socket.gethostname() # 获取本地主机名
  8. port = 12345 # 设置端口
  9. s.bind((host, port)) # 绑定端口
  10. s.listen(5) # 等待客户端连接
  11. while True:
  12. c.addr = s.accept() # 建立客户端连接
  13. print '连接地址:', addr
  14. c.send('欢迎访问菜鸟教程!')
  15. c.close() # 关闭连接
  16. #客户端
  17. #!/usr/bin/python
  18. # -*- coding: UTF-8 -*-
  19. # 文件名:client.py
  20. import socket # 导入 socket 模块
  21. s = socket.socket() # 创建 socket 对象
  22. host = socket.gethostname() # 获取本地主机名
  23. port = 12345 # 设置端口号
  24. s.connect((host, port))
  25. print s.recv(1024)
  26. s.close()

4、什么是lambda函数?

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

5、tuple和list什么区别?

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

6、range函数的用法?

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

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

  • string对象的split方法,不允许有多个分隔符
  • 函数re.split(),允许为分隔符指定多个正则表达式
  1. >>> import re
  2. >>> line = "aaa bbb ccc;ddd eee,fff"
  3. >>> line
  4. 'aaa bbb ccc;ddd eee,fff'
  5. #冒号分割
  6. >>> re.split(r';', line)
  7. ['aaa bbb ccc', 'ddd eee,fff']
  8. #冒号、逗号分割
  9. >>> re.split(r'[;,]', line)
  10. ['aaa bbb ccc', 'ddd eee', 'fff']
  11. #冒号、逗号、空格分割
  12. >>> re.split(r'[;,\s]', line)
  13. ['aaa', 'bbb', 'ccc', 'ddd', '', '', 'eee', 'fff']
  14. #结果包含分隔符
  15. >>> re.split(r'([;])', line)
  16. ['aaa bbb ccc', ';', 'ddd eee,fff']
  17. #结果不含分隔符
  18. >>> re.split(r'(?:[;])', line)
  19. ['aaa bbb ccc', 'ddd eee,fff']

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

  • 单引号和双引号没有区别,都可用来表示字符串(根据字符串是否包含单双引号选择使用)
  • 三引号,字符串内可以直接换行
  1. #单引号内使用单引号需要转义符号
  2. str3 = 'I\'m a big fan of Python.’
  3. str4 = 'We all know that \'A\' and \'B\' are two capital letters.’
  4. #双引号内使用单引号不需要转义符号
  5. str4_ = "We all know that 'A' and 'B' are two capital letters.”
  6. #单引号内使用双引号不需要转义符号
  7. 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:扫描整个字符串并返回第一个成功的匹配
  1. #函数语法
  2. re.match(pattern, string, flags=0)
  3. re.search(pattern, string, flags=0)
  4. #实例
  5. #!/usr/bin/python
  6. import re
  7. line = "Cats are smarter than dogs";
  8. matchObj = re.match( r'dogs', line, re.M|re.I)
  9. if matchObj:
  10. print "match --> matchObj.group() : ", matchObj.group()
  11. else:
  12. print "No match!!"
  13. matchObj = re.search( r'dogs', line, re.M|re.I)
  14. if matchObj:
  15. print "search --> matchObj.group() : ", matchObj.group()
  16. else:
  17. print "No match!!"
  18. #实例的运行结果
  19. No match!!
  20. 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"

测开面试 | Python语言常见问题的更多相关文章

  1. 测开面试 | Python常问算法

    1.排序 从小到大排序:sorted(list) 从大到小排序:sorted(list, reverse=True) sort() 方法,改变原有数组的顺序 sort(reverse=True) #! ...

  2. 测开之Python自动化全栈工程师+性能专项(送思维导图)

    测开之Python自动化全栈工程师+性能专项 功能测试基础 接口测试基础接口的通信原理与本质cookie.session.token详解接口测试的意义与测试方法接口测试用例的设计 app测试 app流 ...

  3. Python测开面试题之装饰器

    Python的装饰器是面试常被问到的问题之一,在面试Python测试开发时被问到的概率不低于70%,那么装饰器的原理是什么,怎么快速写出一个装饰器呢,接下来我们详细讲解装饰器的实现方法. Python ...

  4. 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取

    本文跟着上一篇文章继续写,上一篇文章的链接 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 一.随便说说 获取文件系统使用情况的思路和上一篇获取主要系统是 ...

  5. Python语言在企业级应用上的十大谬误

    英文原文:https://www.paypal-engineering.com/2014/12/10/10-myths-of-enterprise-python/ 翻译原文:http://www.os ...

  6. 【转】布同:如何循序渐进学习Python语言

    大家都知道Python语言是一种新兴的编程语言.1989年,Python就由Guido van Rossum发明.Python一直发展态势很好. 原因有几点:1.跨平台性好.Linux.Windows ...

  7. Python语言说明

    第一章:Python入门一.语言什么是语言:人与人之间的沟通计算机语言:计算机语言,即人和计算机之间的沟通语言. 按照级别分类:机器语言:最底层,最低级的语言,只能识别0/1,电平信号汇编语言:计算机 ...

  8. 基于python语言的经典排序法(冒泡法和选择排序法)

    前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...

  9. python学习: 如何循序渐进学习Python语言

    大家都知道Python语言是一种新兴的编程语言.1989年,Python就由Guido van Rossum发明.Python一直发展态势很好. 原因有几点:1.跨平台性好.Linux.Windows ...

随机推荐

  1. 为Azure DevOps Server (TFS) 配置安全访问(HTTPS with SSL)

    Contents 1. 概述 2. HTTP和HTTS比较 支持HTTP和HTTPS两种方式 要求所有连接使用HTTPS 优点: 缺点: 3. 为Azure DevOps Server 配置安全访问 ...

  2. mysql count的理解

    mysql count的理解 1 select count(tel) as telcount from info;如果tel列有null 将不会被统计进去 2 count(*) 这样写性能更好 3 M ...

  3. Shell基本运算符之文件测试符

    文件测试运算符 ================摘自菜鸟教程================= 文件测试运算符用于检测UNIx文件的各种属性: 操作符 说明 例子 -b 检测文件是否是块设备文件,如果 ...

  4. mysql id 自增实现

    1.在mysql中建表 2.使用: >insert into 表名 values(id,'www',66); 连续运行5次后结果: =============================== ...

  5. touch.js - 移动设备上的手势识别与事件库

    Touch.js 是移动设备上的手势识别与事件库, 由百度云Clouda团队维护,也是在百度内部广泛使用的开发工具.Touch.js手势库专为移动设备设计.Touch.js对于网页设计师来说,是一款不 ...

  6. linux 查找被删除但是未被释放空间的文件 并释放资源

    使用du -sh  和df -h 查看/data目录,发现结果相差一半,后来了解到: 使用rm命令删除文件时,只有当该文件不存在任何link才会被删除 当有进程访问这个文件时,这个文件的实际占用空间就 ...

  7. jre、jdk、jvm之间的关系

    很多Java的程序员在写了很多代码之后,你问他JRE和JDK是是什么关系,JVM又是什么东西,他是不知道的. JVM(Java Virtual Machine) Java 虚拟机.它只认识 xxx.c ...

  8. Netty服务端的启动源码分析

    ServerBootstrap的构造: public class ServerBootstrap extends AbstractBootstrap<ServerBootstrap, Serve ...

  9. Prometheus 监控领域最锋利的“瑞士军刀”

    原文:https://mp.weixin.qq.com/s/Cujn6_4w8ZcXCOWpoAStvQ 一.Kubernetes 容器监控的标配—Prometheus 1.简介 Prometheus ...

  10. error: open(".vs/ConsoleApp349/v16/Server/sqlite3/db.lock"): Permission denied error: unable to index file

    第一种1.git add --ignore-errors . 特别注意 git add --ignore-errors . errors后面有一个空格再加一个点' .' 第二种: 1.touch .g ...