综合常见题

1.谈谈对 Python 和其他语言的区别

自己的描述:
        python: 面向对象、解释性, 跨平台,科学计算友好,开发效率高,运行速度一般
        java:   面向对象、编译性,跨平台, 使用广泛,市场占用率高
        C/C++:  面向过程、编译性,内存占用小,运行效率高

2.简述解释型和编译型编程语言

解释性语言: 一边运行一边解释成机器语言,故运行效率低
编译型语言: 直接编译成机器语言,运行的时候效率很高;比如,c语言,大体上四个步骤: 预处理->编译->汇编->链接[可执行程序]

3.Python 的解释器种类以及相关特点?

Cpython:C语言开发的,应用最广泛的版本
Ipython:基于Cpython之上开发的交互式解释器,只是交互上比cpython有所增强,代码是一致的
pypy:  针对于提高执行速度,采用了JIT技术,对python代码进行动态编译,显著提高执行速度
Jpython: 运行再java平台上的python解释器,可以直接把python变异成java字节码执行
IronPython: IronPython类似于jpython,运行在微软.NET平台的python解释器

4.说说你知道的Python3 和 Python2 之间的区别?

1、print函数
        python2: print是一条语句,不需要括号
        python3: 
2、默认编码:
        python2: 默认是ascii编码,必须在顶部声明才能处理非ascii编码
        python3: 默认编码为UTF-8
3、在python3中,删除了xrange方法,只能使用range
4、整数除法
        python2: 整数相除默认是整除(地板除),可能导致意外结果
        python3:  整数相除默认是浮点数除法,地板除使用 //。
            print(5 / 2)  # 输出 2.5
            print(5 // 2)  # 输出 2
5、异常处理
        python2: 异常使用as语法不统一
        pyhton3: 统一使用as关键字处理异常

5.Python3 和 Python2 中 int 和 long 区别?

在 Python 2 和 Python 3 中,`int` 和 `long` 的行为和实现存在以下主要区别:

1. Python 2 中的 intlong

  • int 类型

    • 表示一个固定精度的整数。
    • 在 32 位系统上,范围为 -2^312^31 - 1
    • 在 64 位系统上,范围为 -2^632^63 - 1
    • 超出范围会自动转为 long 类型。
  • long 类型

    • 表示一个可变精度的长整型,理论上可以表示任意大的整数。
    • Ll 后缀表示长整型:
      num = 12345678901234567890L
  • 区别

    • int 是固定范围的,运算超出范围时会自动转换为 long
    • long 能表示更大的整数,但性能稍慢。

2. Python 3 中的 int

  • 统一类型

    • Python 3 取消了 long 类型,所有整数都用 int 表示,无论大小。
    • int 类型是可变精度的,既可以表示 Python 2 中的 int,也可以表示 long
  • 表示范围

    • 理论上只受限于内存大小,可以表示任意大的整数。
    • 不需要加 Ll 后缀。
  • 示例

    num = 123456789012345678901234567890  # 自动处理大整数
    print(type(num))  # <class 'int'>

3. 性能

  • 在 Python 2 中,由于 int 是固定范围的,其性能比 long 快一些。
  • 在 Python 3 中,int 的实现类似于 Python 2 的 long,但优化了性能,所以即使是大整数操作,性能也更好。

4. 示例比较

Python 2

# int 类型
a = 10
print(type(a))  # 输出 <type 'int'>

# long 类型
b = 12345678901234567890L
print(type(b))  # 输出 <type 'long'>

# 自动转为 long
c = 2**63
print(type(c))  # 输出 <type 'long'>

Python 3

# int 类型
a = 10
print(type(a))  # 输出 <class 'int'>

# 大整数也是 int
b = 12345678901234567890
print(type(b))  # 输出 <class 'int'>

# 自动支持大整数
c = 2**100
print(type(c))  # 输出 <class 'int'>

5. 总结

特性 Python 2 Python 3
整数类型 intlong 统一为 int
int 范围 受系统架构限制 无限制,支持大整数
long 类型 独立存在,需用 L 后缀区分 已移除,统一为 int
性能 int 快于 long 性能优化,统一类型更高效

Python 3 的统一设计使得整数操作更直观,建议使用 Python 3 以避免在类型和范围上产生歧义。

6.xrange 和 range 的区别?

7.什么是 PEP8?

Python增强提案 -> 代码规范

8.了解 Python 之禅么?

python解释器中输入: import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly. # 避丑选美
Explicit is better than implicit. # 避隐就显
Simple is better than complex. #  简单好过复杂
Complex is better than complicated.# 
Flat is better than nested. # 能不嵌套就不嵌套
Sparse is better than dense.# 不要密密麻麻
Readability counts. # 可读性计数 不要整的谁都看不懂
Special cases aren't special enough to break the rules. # 特殊情况不足以打破规则
Although practicality beats purity.
Errors should never pass silently.# 错误不应该悄悄地过去
Unless explicitly silenced.# 除非明确沉默。
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never. # 现在总比没有好。
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea. # 如果不好解释,那这个可能是个坏主意
If the implementation is easy to explain, it may be a good idea. # 如果实现很容易解释,那么这可能是一个好主意
Namespaces are one honking great idea -- let's do more of those!

9.了解 dosctring 么?

python推崇代码即文档, 通常在函数的第一个语句就表明函数的用法以及接受的参数,可以通过functiong.__doc__属性来获得

10.了解类型注解么?

类型注解是python3的新内容,标记参数及返回值的类型,只是为了程序的可读性

11.例举你知道 Python 对象的命名规范,例如方法或者类等

模块: 尽量小写,单词太多通下划线分割
类:   使用驼峰命名,首字符大写,不使用下划线
函数:  全部使用小写 , 单词太多用下划线连接,私有函数前面加下划线
变量:   全部使用小写,常量全部使用大写,均使用下划线连接

12.Python 中的注释有几种?

# """ """

13.如何优雅的给一个函数加注释?

14.如何给变量加注释?

使用#

15.Python 代码缩进中是否支持 Tab 键和空格混用。

不支持

16.是否可以在一句 import 中导入多个库?

可以,但是不建议

17.在给 Py 文件命名的时候需要注意什么?

全部使用小写加下划线命名

18.例举几个规范 Python 代码风格的工具

YAPF、Black

数据类型

字符串

19.列举 Python 中的基本数据类型?

20.如何区别可变数据类型和不可变数据类型

  • 1.不可变数据类型:

    • 1.数字类型(int,float,complex)
    • 2.字符串(str)
    • 3.元祖类型(tuple)
  • 2.可变数据类型:

    • 1.列表类型(list)
    • 2.字典类型(dict)
    • 3.集合类型(set)

    对于不可变数据类型,赋值给另外一个变量之后,对原数据的修改不会影响到另外一个变量

21.将"hello world"转换为首字母大写"Hello World"

h = "hello world"
print(h.title())

22.如何检测字符串中只含有数字?

h = "1"
print(h.isnumeric())

23.将字符串"ilovechina"进行反转

h = "hello world"
print(''.join(reversed(h)))

24.Python 中的字符串格式化方式你知道哪些?

25.有一个字符串开头和末尾都有空格,比如“ adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。

26.获取字符串”123456“最后的两个字符。

27.一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?

28.s=“info:xiaoZhang 33 shandong”,用正则切分字符串输出[“info”, “xiaoZhang”, “33”, “shandong”]

27.怎样将字符串转换为小写?

28.单引号、双引号、三引号的区别?

29.a = "你好 中国 ",去除多余空格只留一个空格。

列表

30.已知 AList = [1,2,3,1,2],对 AList 列表元素去重,写出具体过程。

31.如何实现 “1,2,3” 变成 [“1”,“2”,“3”]

32.给定两个 list,A 和 B,找出相同元素和不同元素

33.[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

34.合并列表[1,5,7,9]和[2,2,6,8]

35.如何打乱一个列表的元素?

字典

36.字典操作中 del 和 pop 有什么区别

37.按照字典的内的年龄排序

38.请合并下面两个字典 a = {“A”:1,“B”:2},b = {“C”:3,“D”:4}

39.如何使用生成式的方式生成一个字典,写一段功能代码。

40.如何把元组(“a”,“b”)和元组(1,2),变为字典{“a”:1,“b”:2}

综合

41.Python 常用的数据结构的类型及其特性?

A:{1:0,2:0,3:0}

B:{“a”:0, “b”:0, “c”:0}

C: {(1,2):0, (2,3):0}

D: {[1,2]:0, [2,3]:0}

42.如何将元组(“A”,“B”)和元组(1,2),合并成字典{“A”:1,“B”:2}

43.Python 里面如何实现 tuple 和 list 的转换?

44.我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?

45.请将[i for i in range(3)]改成生成器

46.a="hello"和 b="你好"编码成 bytes 类型

47.下面的代码输出结果是什么?

a = (1,2,3,[4,5,6,7],8)

a[2] = 2

48.下面的代码输出的结果是什么?

a = (1,2,3,[4,5,6,7],8)

a[5] = 2

操作类题目

49.Python 交换两个变量的值

50.在读文件操作的时候会使用 read、readline 或者 readlines,简述它们各自的左右

51.json 序列化时,可以处理的数据类型有哪些?如何定制支持 datetime 类型?

52.json 序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办?

53.有两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件 C 中。

54.如果当前的日期为 20190530,要求写一个函数输出 N 天后的日期,(比如 N 为 2,则输出 20190601)。

55.写一个函数,接收整数参数 n,返回一个函数,函数的功能是把函数的参数和 n 相乘并把结果返回。

56.下面代码会存在什么问题,如何改进?

# def strappend(num):
# str="first"
# for i in range(num):
#   str+=str(i)
# return str

57.一行代码输出 1-100 之间的所有偶数。

58.with 语句的作用,写一段代码?

59.python 字典和 json 字符串相互转化方法

60.请写一个 Python 逻辑,计算一个文件中的大写字母数量

高级特性

70.函数装饰器有什么作用?请列举说明?

71.Python 垃圾回收机制?

72.魔法函数 __call__怎么使用?

73.如何判断一个对象是函数还是方法?

74.@classmethod 和@staticmethod 用法和区别

75.Python 中的接口如何实现?

76.Python 中的反射了解么?

77.metaclass 作用?以及应用场景?

78.hasattr() getattr() setattr()的用法

hasattr(object,name): 判断一个对象里面是否有name属性,有name返回True,否则返回False
getattr(object,name[,defalut]):获取对象的object的属性或者方法,如果存在打印出来,如果不存在打印默认值,默认值可选
                               如果返回的是一个对象实例,那么可以直接加括号就可以直接运行
setattr(object, name, values): 给对象的属性赋值,若是属性不存在,先创建,再赋值                              

79.请列举你知道的 Python 的魔法方法及用途。

80.如何知道一个 Python 对象的类型?

81.Python 的传参是传值还是传址?

82.Python 中的元类(metaclass)使用举例

83.简述 any()和 all()方法

84.filter 方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

85.什么是猴子补丁?

86.在 Python 中是如何管理内存的?

87.当退出 Python 时是否释放所有内存分配?

正则表达式

88.使用正则表达式匹配出

www.baidu.com中的地址

a=“张明 98 分”,用 re.sub,将 98 替换为 100

89.正则表达式匹配中(.)和(.?)匹配区别?

90.写一段匹配邮箱的正则表达式

其他内容

91.解释一下 python 中 pass 语句的作用?

92.简述你对 input()函数的理解

93.python 中的 is 和==

94.Python 中的作用域

95.三元运算写法和应用场景?

96.了解 enumerate 么?

97.列举 5 个 Python 中的标准模块

98.如何在函数中设置一个全局变量

99.pathlib 的用法举例

100.Python 中的异常处理,写一个简单的应用场景

101.Python 中递归的最大次数,那如何突破呢?

102.什么是面向对象的 mro

103.isinstance 作用以及应用场景?

104.什么是断言?应用场景?

105.lambda 表达式格式以及应用场景?

106.新式类和旧式类的区别

107.dir()是干什么用的?

108.一个包里有三个模块,demo1.py, demo2.py, demo3.py,但使用 from tools import 导入模块时,如何保证只有 demo1、demo3 被导入了。

109.列举 5 个 Python 中的异常类型以及其含义

110.copy 和 deepcopy 的区别是什么?

111.代码中经常遇到的args, **kwargs 含义及用法。

112.Python 中会有函数或成员变量包含单下划线前缀和结尾,和双下划线前缀结尾,区别是什么?

113.w、a+、wb 文件写入模式的区别

114.举例 sort 和 sorted 的区别

115.什么是负索引?

116.pprint 模块是干什么的?

117.解释一下 Python 中的赋值运算符

118.解释一下 Python 中的逻辑运算符

119.讲讲 Python 中的位运算符

120.在 Python 中如何使用多进制数字?

121.怎样声明多个变量并赋值?

算法和数据结构

122.已知:

AList = [1,2,3]

BSet = {1,2,3}

(1) 从 AList 和 BSet 中 查找 4,最坏时间复杂度那个大?

(2) 从 AList 和 BSet 中 插入 4,最坏时间复杂度那个大?

123.用 Python 实现一个二分查找的函数

124.python 单例模式的实现方法

125.使用 Python 实现一个斐波那契数列

126.找出列表中的重复数字

127.找出列表中的单个数字

128.写一个冒泡排序

129.写一个快速排序

130.写一个拓扑排序

131.python 实现一个二进制计算

132.有一组“+”和“-”符号,要求将“+”排到左边,“-”排到右边,写出具体的实现方法。

133.单链表反转

134.交叉链表求交点

135.用队列实现栈

136.找出数据流的中位数

137.二叉搜索树中第 K 小的元素

爬虫相关

138.在 requests 模块中,requests.content 和 requests.text 什么区别

139.简要写一下 lxml 模块的使用方法框架

140.说一说 scrapy 的工作流程

141.scrapy 的去重原理

142.scrapy 中间件有几种类,你用过哪些中间件

143.你写爬虫的时候都遇到过什么?反爬虫措施,你是怎么解决的?

144.为什么会用到代理?

145.代理失效了怎么处理?

146.列出你知道 header 的内容以及信息

147.说一说打开浏览器访问 www.baidu.com 获取到结果,整个流程。

148.爬取速度过快出现了验证码怎么处理

149.scrapy 和 scrapy-redis 有什么区别?为什么选择 redis 数据库?

150.分布式爬虫主要解决什么问题

151.写爬虫是用多进程好?还是多线程好? 为什么?

152.解析网页的解析器使用最多的是哪几个

153.需要登录的网页,如何解决同时限制 ip,cookie,session(其中有一些是动态生成的)在不使用动态爬取的情况下?

154.验证码的解决(简单的:对图像做处理后可以得到的,困难的:验证码是点击,拖动等动态进行的?)

155.使用最多的数据库(mysql,mongodb,redis 等),对他的理解?

网络编程

156.TCP 和 UDP 的区别?

157.简要介绍三次握手和四次挥手

158.什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?

并发相关

159.举例说明 conccurent.future 的中线程池的用法

160.说一说多线程,多进程和协程的区别。

161.简述 GIL

全局解释器锁(Global Interpreter Lock),由于GIL的存在,python中的多线程并不能真正的并行执行。

即使在CPU多核环境,python中的多线程只能在一个CPU核心上执行,因为只有一个线程能持有GIL。

162.进程之间如何通信

163.IO多路复用的作用?

164.select、poll、epoll 模型的区别?

165.什么是并发和并行?

167.解释什么是异步非阻塞?

168.threading.local 的作用?

Git 面试题

169.说说你知道的 git 命令

git init: 初始化git代码库
git clone: 克隆代码仓库
git config: 配置

#增加/删除文件
git add [file1] : 添加文件得到暂存区
git add . : 添加当前目录的所有文件到暂存区
git rm [file1] : 删除工作区文件,并将这粗删除放入暂存区
git rm --cache [file] : 停止追踪制定文件,但改文件会保存在工作区

#代码提交
git commit

#分支
git branch
git checkout
git stash
git stash pop

git pull :下拉文件
git push : 推出
git remote :远程

git log : 显示日志
git status: 显示有变更的文件

170.git 如何查看某次提交修改的内容?

__END__