python面试大家练习起来

一、简答题(25题)
1.新式类和旧式类

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

  1. 简述 read、readline、readlines 的区别

  2. 简述下 Python 中的字符串、列表、元组和字典

5.简述继承

6.Python的可变和不可变数据类型?

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

8.什么是异步非阻塞

9.区分下break,continue和pass?

10.如何使用索引来反转Python中的字符串?

11.Python中==和is的区别

12.简述 OSI 七层协议

13.try except else finally 的意义

14.Python中的列表和元组有什么区别?

15.break、continue、pass是什么?

16.Python 面向对象中的继承有什么特点

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

18.可变类型与不可变类型

  1. Flask 和 Django 的异同

20.char 和 varchar 的区别

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

22.为什么学习 Python

23.单例模式与工厂模式

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

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

参考答案

1.a. 在 python 里凡是继承了 object 的类,都是新式类 b. Python3 里只有新式类 c. Python2 里面继承 object 的是新式类,没有写父类的是经典类 d. 经典类目前在 Python 里基本没有应用
2.Python代码执行缓慢的原因,是因为它是一种解释型语言。它的代码在运行时进行解释,而不是编译为本地语言。 为了提高Python代码的速度,我们可以使用CPython、Numba,或者我们也可以对代码进行一些修改。 1. 减少内存占用。 2. 使用内置函数和库。 3. 将计算移到循环外。 4. 保持小的代码库。 5. 避免不必要的循环
3.read 读取整个文件 readline 读取下一行,使用生成器方法 readlines 读取整个文件到一个迭代器以供我们遍历
4.字符串(str):字符串是用引号括起来的任意文本,是编程语言中最常用的数据类型。列表(list):列表是有序的集合,可以向其中添加或删除元素。元组(tuple):元组也是有序集合,但是是无法修改的。即元组是不可变的。字典(dict):字典是无序的集合,是由 key-value 组成的。集合(set):是一组 key 的集合,每个元素都是唯一,不重复且无序的。
5.一个类继承自另一个类,也可以说是一个孩子类/派生类/子类,继承自父类/基类/超类,同时获取所有的类成员(属性和方法) 继承使我们可以重用代码,并且还可以更方便地创建和维护代码 Python 支持以下类型的继承: 单继承- 一个子类类继承自单个基类 多重继承- 一个子类继承自多个基类 多级继承- 一个子类继承自一个基类,而基类继承自另一个基类 分层继承- 多个子类继承自同一个基类 混合继承- 两种或两种以上继承类型的组合
6.不可变数据类型:即数据被创建之后,数据的值将不再发生改变,有数值、字符、元祖类型; 可变数据类型:数据别创建之后,数据的值可以发生变化,有列表、字典、集合类型。 
7.append:在列表末尾添加新元素。 insert:在列表的特定位置添加元素。 extend:合并两个列表。
8.同步异步指的是调用者与被调用者之间的关系 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回,一旦调用返回,就得到了返回值 异步的概念和同步相对,调用在发出之后,这个调用就直接返回了,所以没有返回结果。当该异步功能完成后,被调用者可以通过状态、通知或回调来通知调用者 阻塞非阻塞是线程或进程之间的关系 阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。调用线程只有在得到结果之后才会返回。函数只有在得到结果之后才会将阻塞的线程激活 非阻塞和阻塞的概念相对应,非阻塞调用指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程
9.break:跳出循环,不执行下一个循环。同时break后面的代码也不会执行。 pass:pass后面的代码还是会继续执行,也就是当前的循环还在继续。 continue:continue后面的代码不会执行,而是直接进入下一个循环。
10.实战面试题,每天看一看,巩固自己的python知识,面试前能做到有备无患,轻松拿下offer s = ‘hello’ s[::-1] >‘olleh’
11.is用于判断两个变量引用对象是否为同一个,==用于判断引用变量的值是否相等。
12.是网络传输协议,人为的把网络传输的不同阶段划分成不同的层次 七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 五层划分为:应用层、传输层、网络层、数据链路层、物理层 物理层:网线,电缆等物理设备 数据链路层:Mac 地址 网络层:IP 地址 传输层:TCP,UDP 协议 应用层:FTP 协议,Email,WWW 等
13.try…except…else 没有捕获到异常,执行 else 语句 try…except…finally 不管是否捕获到异常,都执行 finally 语句
14.list 是可变的对象,元组 tuple 是不可变的对象。也就是说列表中的元素可以进行任意修改,而元组中的元素无法修改。
15.break:在满足条件时,它将导致程序退出循环。 continue:将返回到循环的开头,它使程序在当前循环迭代中的跳过所有剩余语句。 pass:使程序传递所有剩余语句而不执行。 
16.a. 同时支持单继承与多继承,当只有一个父类时为单继承,当存在多个父类时为多继承 b. 子类会继承父类所有的属性和方法,子类也可以覆盖父类同名的变量和方法 c. 在继承中基类的构造(init())方法不会被自动调用,它需要在其派生类的构造中专门调用 d. 在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别于在类中调用普通函数时并不需要带上 self 参数
17.开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的 f.open 写法,我们需要 try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行 finally f.close() 关闭文件,with 方法帮我们实现了 finally 中 f.close
18.可变数据类型:list、dict、set 不可变数据类型:int/float、str、tuple
19.Flask 是 “microframework”,主要用来编写小型应用程序,不过随着 Python 的普及,很多大型程序也在使用 Flask。同时,在 Flask 中,我们必须使用外部库 Django 适用于大型应用程序。它提供了灵活性,以及完整的程序框架和快速的项目生成方法。可以选择不同的数据库,URL结构,模板样式等
20.char:存储定长数据很方便,CHAR 字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义 char(10) varchar:存储变长数据,但存储效率没有 CHAR 高,必须在括号里定义长度,可以有默认值
21.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函数。
22.Python 语言简单易懂,上手容易,随着 AI 风潮,越来越火
23.单例模式:主要目的是确保某一个类只有一个实例存在 工厂模式:包涵一个超类,这个超类提供一个抽象化的接口来创建一个特定类型的对象,而不是决定哪个对象可以被创建
24.B/S 又称为浏览器/服务器模式。比如各种网站,jupyter notebook 等。优点:零安装,维护简单,共享性好。缺点:安全性较差,个性化不足 C/S 又称为客户端/服务器模式。比如微信客户端,Oracle 客户端等。优点:安全性好,数据传输较快,稳定。缺点:对 PC 机操作系统等有要求,当客户端较多时,服务器端负载较大
25.生成器和迭代器在Python中都用于创建可以进行迭代的对象,但它们之间有一些主要区别: 定义方式:迭代器需要定义一个类,并在类中实现**iter()和next()**方法。而生成器则可以直接使用一个函数,通过yield语句返回每个迭代的值。 简单性:相比之下,生成器的定义更简单。你只需要一个函数,就可以通过yield关键字生成值。而迭代器则需要更多的代码来定义类和方法。 资源使用:生成器和迭代器都是懒加载(lazy load)的,也就是说它们只有在需要返回值的时候才会生成值。但是生成器更进一步,它们在生成值后不会保存这些值。这意味着如果你需要迭代的数据集很大,或者如果你需要的值需要大量计算,那么生成器可能会比迭代器更节省资源。 使用场景:迭代器更适用于需要自定义复杂行为的情况,而生成器更适用于需要遍历大数据集或复杂数据流的情况。 总的来说,生成器是一种特殊的迭代器,它的定义更简单,也更容易使用,但同时也继承了迭代器的主要特性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值