python面试实战每天练

一、简答题(25题)
1.PEP8 规范

2.什么是异步非阻塞

3.Python中的Map Function是什么?

4.break、continue、pass是什么?

  1. Flask 和 Django 的异同

6.python中内置的数据结构有几种

7.为什么学习 Python

8.在 Python 类中,类方法和静态方法有什么区别?

9.with 方法打开文件的作用

10.什么是python中的装饰器?

11.可变类型与不可变类型

12.Python中append,insert和extend的区别?

13.你对Python类中的self有什么了解?

14.简述 OSI 七层协议

15.python深拷贝和浅拷贝的区别

  1. redis 和 memcached 比较

17.生成器和迭代器有什么区别?

18.Python有哪些应用?

19.什么是 C/S 和 B/S 架构

20.Python中注释代码的方法有哪些?

21.为什么Python执行速度慢,我们如何改进它?

22.Python 中的 GIL

23.单下划线和双下划线的作用

24.TCP 和 UDP 的区别

25.面向对象中new__ 和__init 区别

参考答案

1.简单列举10条: 尽量以免单独使用小写字母’l’,大写字母’O’,以及大写字母’I’等容易混淆的字母。 函数命名使用全部小写的方式,可以使用下划线。 常量命名使用全部大写的方式,可以使用下划线。 使用 has 或 is 前缀命名布尔元素,如: is_connect = True; has_member = False 不要在行尾加分号, 也不要用分号将两条命令放在同一行。 不要使用反斜杠连接行。 顶级定义之间空2行, 方法定义之间空1行,顶级定义之间空两行。 如果一个类不继承自其它类, 就显式的从 object 继承。 内部使用的类、方法或变量前,需加前缀’‘表明此为内部使用的。 要用断言来实现静态类型检测。
2.同步异步指的是调用者与被调用者之间的关系 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回,一旦调用返回,就得到了返回值 异步的概念和同步相对,调用在发出之后,这个调用就直接返回了,所以没有返回结果。当该异步功能完成后,被调用者可以通过状态、通知或回调来通知调用者 阻塞非阻塞是线程或进程之间的关系 阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。调用线程只有在得到结果之后才会返回。函数只有在得到结果之后才会将阻塞的线程激活 非阻塞和阻塞的概念相对应,非阻塞调用指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程
3.map函数在对可迭代对象的每一项应用特定函数后,会返回map对象。
4.break:在满足条件时,它将导致程序退出循环。 continue:将返回到循环的开头,它使程序在当前循环迭代中的跳过所有剩余语句。 pass:使程序传递所有剩余语句而不执行。 
5.Flask 是 “microframework”,主要用来编写小型应用程序,不过随着 Python 的普及,很多大型程序也在使用 Flask。同时,在 Flask 中,我们必须使用外部库 Django 适用于大型应用程序。它提供了灵活性,以及完整的程序框架和快速的项目生成方法。可以选择不同的数据库,URL结构,模板样式等
6.整型 int、 长整型 long、浮点型 float、 复数 complex 字符串 str、 列表 list、 元祖 tuple 字典 dict 、 集合 set Python3 中没有 long,只有无限精度的 int 
7.Python 语言简单易懂,上手容易,随着 AI 风潮,越来越火
8.类方法是 Python 类中的第一个参数是类本身的方法。我们用 cls 这个参数来表示。 类方法不仅可以由实例调用,也可以由类直接调用。 静态方法是 Python 类中没有类或实例参数的方法。 因为静态方法不包含有关特定类或实例的参数。我们可以将其定义为类外的独立函数,并将其用作类外的其他普通函数。
9.开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的 f.open 写法,我们需要 try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行 finally f.close() 关闭文件,with 方法帮我们实现了 finally 中 f.close
10.装饰器是为已经存在的函数或者对象添加额外的功能。本质上是一个闭包函数(闭包函数:本质是个嵌套函数,内层函数引用外层函数的变量并且返回外层函,外层函数返回内层函数) 
11.可变数据类型:list、dict、set 不可变数据类型:int/float、str、tuple
12.append:在列表末尾添加新元素。 insert:在列表的特定位置添加元素。 extend:合并两个列表。
13.self表示类的实例。 通过使用self关键字,我们可以在Python中访问类的属性和方法。 注意,在类的函数当中,必须使用self,因为类中没有用于声明变量的显式语法。
14.是网络传输协议,人为的把网络传输的不同阶段划分成不同的层次 七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 五层划分为:应用层、传输层、网络层、数据链路层、物理层 物理层:网线,电缆等物理设备 数据链路层:Mac 地址 网络层:IP 地址 传输层:TCP,UDP 协议 应用层:FTP 协议,Email,WWW 等
15.Python中的深拷贝和浅拷贝是指在拷贝对象时,是否会同时拷贝该对象内部的所有元素。 浅拷贝是指拷贝一个对象,只拷贝对象的引用,而不是对象本身。也就是说,当拷贝完成后,原始对象和拷贝对象会共享同一个内存地址。当修改其中一个对象时,另一个对象也会受到影响。 深拷贝是指拷贝一个对象,并且递归地拷贝该对象内部的所有元素。也就是说,当拷贝完成后,原始对象和拷贝对象不会共享同一个内存地址。当修改其中一个对象时,另一个对象不会受到影响。 例如,假设有一个列表a=[1,2,[3,4]],进行浅拷贝b=a.copy(),则修改b[2][0]=5,会同时修改a[2][0]的值。而进行深拷贝c=copy.deepcopy(a),则修改c[2][0]=5,不会影响a[2][0]的值
16.redis 和 memcached 都是将数据存放在内存中,都是内存数据库。不过 memcached 还可用于缓存其他东西,例如图片、视频等等 redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,hash 等数据结构的存储 分布式设定, 都可以做一主多从或一主一从 存储数据安全,memcached 挂掉后,数据完全丢失;redis 可以定期保存到磁盘(持久化) 灾难恢复,memcached 挂掉后,数据不可恢复; redis 数据丢失后可以通过 aof 恢复
17.生成器和迭代器在Python中都用于创建可以进行迭代的对象,但它们之间有一些主要区别: 定义方式:迭代器需要定义一个类,并在类中实现**iter()和next()**方法。而生成器则可以直接使用一个函数,通过yield语句返回每个迭代的值。 简单性:相比之下,生成器的定义更简单。你只需要一个函数,就可以通过yield关键字生成值。而迭代器则需要更多的代码来定义类和方法。 资源使用:生成器和迭代器都是懒加载(lazy load)的,也就是说它们只有在需要返回值的时候才会生成值。但是生成器更进一步,它们在生成值后不会保存这些值。这意味着如果你需要迭代的数据集很大,或者如果你需要的值需要大量计算,那么生成器可能会比迭代器更节省资源。 使用场景:迭代器更适用于需要自定义复杂行为的情况,而生成器更适用于需要遍历大数据集或复杂数据流的情况。 总的来说,生成器是一种特殊的迭代器,它的定义更简单,也更容易使用,但同时也继承了迭代器的主要特性。
18.1. Web开发 2. 桌面GUI开发 3. 人工智能和机器学习 4. 软件开发 5. 业务应用程序开发 6. 基于控制台的应用程序 7. 软件测试 8. Web自动化 9. 基于音频或视频的应用程序 10. 图像处理应用程序 
19.B/S 又称为浏览器/服务器模式。比如各种网站,jupyter notebook 等。优点:零安装,维护简单,共享性好。缺点:安全性较差,个性化不足 C/S 又称为客户端/服务器模式。比如微信客户端,Oracle 客户端等。优点:安全性好,数据传输较快,稳定。缺点:对 PC 机操作系统等有要求,当客户端较多时,服务器端负载较大
20.在Python中,我们可以通过下面两种方式进行注释。 1. 三引号’‘’,用于多行注释。 2. 单井号#,用于单行注释。
21.Python代码执行缓慢的原因,是因为它是一种解释型语言。它的代码在运行时进行解释,而不是编译为本地语言。 为了提高Python代码的速度,我们可以使用CPython、Numba,或者我们也可以对代码进行一些修改。 1. 减少内存占用。 2. 使用内置函数和库。 3. 将计算移到循环外。 4. 保持小的代码库。 5. 避免不必要的循环
22.GIL 是 Python 的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行 Python 程序的时候会占用 Python 解释器(加了一把锁即 GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行
23.foo:一种约定,Python 内部的名字,用来区别其他用户自定义的命名,以防冲突,就是例如init__()和_del
()及__call()这些特殊方法。 _foo:一种约定,用来指定变量私有。不能用 from module import * 导入,其他方面和公有变量一样访问。 __foo:这个有真正的意义:解析器用classname__foo 来代替这个名字,以区别和其他类相同的命名,它无法直接像公有成员一样随便访问,通过对象名.类名__xxx 这样的方式可以访问。
24.TCP 和 UDP 都是 OSI 模型中运输层的协议。TCP 提供可靠的通信传输,而 UDP 则常被用于广播和细节控制交给应用的通信传输。UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。TCP 充分实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制 TCP 应用:FTP 传输,点对点短信等 UDP 应用:媒体流等
25.new是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是个静态方法。 init是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法。 1、new至少要有一个参数 cls,代表当前类,此参数在实例化时由 Python 解释器自动识别。 2、new__必须要有返回值,返回实例化出来的实例,这点在自己实现_new_时要特别注意,可以 return 父类(通过 super(当前类名, cls))_new_出来的实例,或者直接是 object 的__new出来的实例。 3、init__有一个参数 self,就是这个_new_返回的实例,_init_在_new_的基础上可以完成一些其它初始化的动作,__init不需要返回值。 4、如果new__创建的是当前类的实例,会自动调用_init_函数,通过 return 语句里面调用的_new_函数的第一个参数是 cls 来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的_init_函数,也不会调用其他类的__init函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值