目 录
1. Python的特点和优点: 2
2. Python和C语言的区别: 2
3. Python2和Pyhton3的区别 2
4. Python的深拷贝和浅拷贝 2
5. Python三元表达式: 3
6. Python中如何实现多线程 3
7. 解释继承 3
8. 5个常用的网页开发框架 3
9. Python如何管理内存:对象和数据都保存在私有堆空间,使用内置的垃圾回收机制管理 4
10. Python中的dir函数和help函数 4
11. Python退出时是否释放所有内存分配 4
12. Python中的*args和**kwargs 4
13. 随机打乱列表中的元素,并不引用额外的内存空间 4
14. Python中的join()和split()函数 4
15. Python是区分大小写的语言 4
16. Python标识符命名规则 4
17. 分别使用lstrip()和rstrip函数去除前置空格和后置空格 4
18. 关于字符串的大小写 5
19. Python中pass、break、return、continue、exit的用法和区别 5
20. Python闭包 5
21. Python运算符 6
22. Python使用多进制数字: 6
23. 获取字典中的所有键:keys() 7
24. 不建议使用下划线做标识符开头,标识符下划线表示私有变量 7
25. Python的解封装:将元组中的值取出来,分别赋值给各个变量 7
26. Python的GIL(全局解释器锁) 7
27. 装饰器与类的区别 8
28. Python中list列表删除元素的方式 8
29. Python中dict字典增删元素的方法 8
30. 面向对象和面向过程的区别 8
1. Python的特点和优点:
A. 解释性:用自己定义的解释器,解释并执行有自己定义的语法结构生成的程序代码
B. 动态特性:程序在运行时可以修改(与其解释性有关)
C. 面向对象:类是用来具有相同属性和方法的对象的集合。
D. 语法简洁
E. 开源
2. Python和C语言的区别:
A. C语言是编译语言,Python是脚本语言。说是C语言会比Python快
B. C是静态语言,在变量在使用前进行声明,而Python是动态语言,在使用的时候可以直接使用,不需要声明
C. C里面没有对象,而Python里面是有对象
D. 脚本语言是读一行执行一行、而无需关注下一行的语言,非脚本语言则是必须读取整个源程序内容、建立完执行环境后执行的语言。
3. Python2和Pyhton3的区别
A. py3使用utf-8编码;py2使用ascill编码
B. py3中去除了py2中的不等于<>,改用!=
C. py3将py2中的print语句改成print()函数实现;将exec语句改成exec()函数
D. py3将py2中的raw_input()函数改成input()
E. py2中的long整型和int整型;py3中只有int整型
F. py3中/不再是整除,整除需要使用//
4. Python的深拷贝和浅拷贝
A. copy模块:import copy;浅拷贝:copy.copy;深拷贝:copy.deepcopy;
B. 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部子对象;
C. 深拷贝(deepcopy):拷贝父对象,同时开辟空间,逐层拷贝内部子对象
D. b=a.copy(),浅拷贝
E. b=a.deepcopy(),深拷贝
5. Python三元表达式:
[on true ] if [expression] else [on false]
如果expression 为真,则[on true]部分被执行;否则[on false]部分被执行
6. Python中如何实现多线程
A. 线程是轻量级的进程,Python是一个多线程语言,允许一次执行多个线程
B. GIL(全局解释器锁)确保一次执行单个线程。
C. 创建线程的方法
i. Python2使用thread模块中的start_new_thread()函数产生线程
ii. Python3使用threading模块创建新的线程:1、threading.thread;2、通过继承threading.Thread定义子类创建多线程
D. 多线程实现同步的4种方式
i. 锁机制:使用threading的lock类,类中acquire实现加锁,realease进行解锁
ii. 信号量
iii. 条件判断
iv. 同步队列
E. 线程池
i. 使用线程池可减少创建、销毁线程的时间,提高运行效率
7. 解释继承
A. 一个类继承另外一个类时可获取继承类的所有成员(属性和方法)
B. 继承利用重用代码,方便创建和维护代码
C. Python支持以下类:
i. 单继承
ii. 多重继承
iii. 多级继承
iv. 分层继承
v. 混合继承
8. 5个常用的网页开发框架
A. Django
B. CherryPy
C. TurboGears
D. Flaskl:轻量级框架,简单易学
i. WSGI工具箱采用Werkzeug,模板引擎采用Jinja2
E. Pyramid
9. Python如何管理内存:对象和数据都保存在私有堆空间,使用内置的垃圾回收机制管理
A. 垃圾回收的启动条件
i. 引用次数为0的对象与引用次数不为0的对象间减值达到一定阈值时,开户垃圾回收
B. 垃圾回收的目标
i. 对象引用次数变为0时,会成为对象
C. 分代回收
i. 每代对象经过一次回收后仍然存在,并归入下一代当中
10. Python中的dir函数和help函数
A. dir()函数:用来查询一个类或者对象的所有属性
B. help()函数用来模块、类型、对象、方法、属性的详细信息(帮助文档和参数说明)
11. Python退出时是否释放所有内存分配
不是的,当循环引用其他对象或者引用来自全局命令空间的对象模块,Python退出时并非完全释放。另外,C库保留的内存部分也不会释放。
12. Python中的*args和**kwargs
A. 定义函数时,当不知道可能传入多少个参数时,比如需要传入列表时,可以使用*args来收集
B. 定义函数时,当不知道可能传入多少个关键字参数时,可以使用**kwargs来收集关键字参数。
C. *args要在**kwargs之前使用
13. 随机打乱列表中的元素,并不引用额外的内存空间
A. 使用random包中的shuffle()[ˈʃʌfl]函数;打乱序列里面的元素并随机排列
14. Python中的join()和split()函数
A. join()函数将指定的字符添加到字符串/列表/字典/集合当中;或者将列表转成字符串
list1 = ['1','2','3','4']
s = "-"
s = s.join(list1)
print(s): 1-2-3-4
B. split()函数使用指定的字符分割字符串
string = www.gziscas.com.cn
print(string.split('.'))
['www', 'gziscas', 'com', 'cn']
15. Python是区分大小写的语言
16. Python标识符命名规则
A. 下划线或者大小写字母开头
B. 区分大小写
C. 关键字不能做标识符
17. 分别使用lstrip()和rstrip函数去除前置空格和后置空格
面试进阶题
18. 关于字符串的大小写
A. 检查字符串是否全为大写:isupper()
B. 检查字符串是否全为小写:islower()
C. 字符串转换为小写:lower()
D. 字符串转换为大写upper()
19. Python中pass、break、return、continue、exit的用法和区别
A. pass:用作占位符。当没想好写什么代码是可用pass代替
B. return:结束函数,返回参数
C. break:跳出最近一层的循环(当循环仅一层时,终止循环),程序继续
D. continue:跳出本次循环(循环不中止),程序继续
E. exit():退出整个循环,终止程序
20. Python闭包
https://blog.csdn.net/sc_lilei/article/details/80464645
A. 概念:一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行
B. 必要条件:
i. 闭包函数必须返回一个函数对象
ii. 闭包函数返回的函数对象必须引用外部变量(一般不为全局变量);被返回函数内部不一定要return
C. 使用:
21. Python运算符
A. 算术运算符
i. //:向下取整
ii. %:取余
iii. **:幂次方
B. 位运算符
i. ^:异或
ii. ~:取反
C. 逻辑运算符
i. and:布尔“与“
ii. or :布尔“或“
iii. not:布尔“非“
D. 比较运算符:== != > < 。。。
E. 赋值运算符 = += 。。。
F. 成员运算符 in not in
G. 身份运算符 is is not
22. Python使用多进制数字:
A. 2进制
i. 0b开头
ii. bin()函数将数字转换为二进制
B. 8进制:0o开头
C. 16进制 0x开头
23. 获取字典中的所有键:keys()
24. 不建议使用下划线做标识符开头,标识符下划线表示私有变量
25. Python的解封装:将元组中的值取出来,分别赋值给各个变量
26. Python的GIL(全局解释器锁)
A. 并发和并行的解释
i. 并发:1个CPU,交替执行多个任务
ii. 并行:多个CPU,同时执行多个任务
B. GIL锁(全局解释器锁)
每个线程在执行时需要先获取GIL,保证同一时刻只有一个线程在执行代码。即同一时刻只用一个线程在使用CPU,并发处理方式。
C. 什么时候会释放GIL锁
i. I/O操作时,造成CPU闲置的情况会释放GIL锁
ii. 纯计算操作时(没有I/O操作),解释器会每隔100次(数值可设置)操作后释放GIL锁
D. 互斥锁和GIL锁的关系
i. 互斥锁:多线程时,保证修改共享数据时有序的修改,不会产生数据修改混乱
ii. GIL锁:保证同一时刻只有一个线程能使用到CPU
E. 如何解决GIL锁的问题
i. 使用多进程完成多线程的任务
ii. 在使用多线程时,可以利用C语言去实现
iii. 更换Cpython为Jpython(不建议)
27. 装饰器与类的区别
集合字符串列表等基础知识
28. Python中list列表删除元素的方式
A. 根据索引值删除元素:del listname[index]、listname.pop(index)
B. 根据元素值进行删除:listname.remove()
C. 删除列表所有元素:listname.clear()
29. Python中dict字典增删元素的方法
A. 增加元素:dictname.update()
B. 删除元素:dictname.pop()、del dictname[key]
30. 面向对象和面向过程的区别
面向过程:注重对事件的处理过程,处理过程
https://www.nowcoder.com/discuss/20611