应届毕业生python面试题每日一练

一、简答题(20题)
1.Python数组和列表有什么区别?

2._init_在Python中有什么用?

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

4.break、continue、pass是什么?

5.面向对象中__new__ 和 init 区别

6.谈谈你对多进程、多线程、以及协程的理解,项目是否用?

7.char 和 varchar 的区别

8.Python中的Map Function是什么?

9.try except else finally 的意义

  1. redis 和 memcached 比较

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

12.请说下Python有哪些特点

13.解释型和编译型语言的区别

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

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

16.区分下break,continue和pass?

17.什么是异步非阻塞

18.Python中OOPS是什么?

19.Python中==和is的区别

20.Python中的局部变量和全局变量是什么?

参考答案

1.Python中的数组和列表具有相同的存储数据方式。但是,数组只能包含单个数据类型元素,而列表可以包含任何数据类型元素。 
2.“init”是Python类中的保留方法。 它被称为构造函数,每当执行代码时都会自动调用它,它主要用于初始化类的所有变量。
3.Python代码执行缓慢的原因,是因为它是一种解释型语言。它的代码在运行时进行解释,而不是编译为本地语言。 为了提高Python代码的速度,我们可以使用CPython、Numba,或者我们也可以对代码进行一些修改。 1. 减少内存占用。 2. 使用内置函数和库。 3. 将计算移到循环外。 4. 保持小的代码库。 5. 避免不必要的循环
4.break:在满足条件时,它将导致程序退出循环。 continue:将返回到循环的开头,它使程序在当前循环迭代中的跳过所有剩余语句。 pass:使程序传递所有剩余语句而不执行。 
5.__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__函数 
6.进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所有进程间数据不共享,开销大。线程: cpu调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在,一个进程至少有一个线程,叫主线程,而多个线程共享内存可以极大地提高了程序的运行效率。协程: 是一种用户态的轻量级线程,协程的调度完全由用户控制,协程拥有自己的寄存器上下文和栈。协程调度时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操中栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
7.char:存储定长数据很方便,CHAR 字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义 char(10) varchar:存储变长数据,但存储效率没有 CHAR 高,必须在括号里定义长度,可以有默认值
8.map函数在对可迭代对象的每一项应用特定函数后,会返回map对象。
9.try…except…else 没有捕获到异常,执行 else 语句 try…except…finally 不管是否捕获到异常,都执行 finally 语句
10.redis 和 memcached 都是将数据存放在内存中,都是内存数据库。不过 memcached 还可用于缓存其他东西,例如图片、视频等等 redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,hash 等数据结构的存储 分布式设定, 都可以做一主多从或一主一从 存储数据安全,memcached 挂掉后,数据完全丢失;redis 可以定期保存到磁盘(持久化) 灾难恢复,memcached 挂掉后,数据不可恢复; redis 数据丢失后可以通过 aof 恢复
11.list 是可变的对象,元组 tuple 是不可变的对象。也就是说列表中的元素可以进行任意修改,而元组中的元素无法修改。
12.Python是一种解释型语言,这意味着开发过程中没有了编译这个环节。 面向对象:Python支持面向对象的风格或代码封装在对象的编程技术。 动态类型语言:在Python中,你不需要预先声明变量的类型,当你赋值给变量时,解释器会自动知道其类型。 跨平台语言:Python可以在大多数的操作系统上运行,包括但不限于Windows、Linux、Unix等。
13.编译型语言:把做好的源程序全部编译成二进制的可运行程序。然后,可直接运行这个程序。如:C,C++ 解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!如:Python, (Java 有些特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。)
14.类方法是 Python 类中的第一个参数是类本身的方法。我们用 cls 这个参数来表示。 类方法不仅可以由实例调用,也可以由类直接调用。 静态方法是 Python 类中没有类或实例参数的方法。 因为静态方法不包含有关特定类或实例的参数。我们可以将其定义为类外的独立函数,并将其用作类外的其他普通函数。
15.生成器和迭代器在Python中都用于创建可以进行迭代的对象,但它们之间有一些主要区别: 定义方式:迭代器需要定义一个类,并在类中实现**iter()和next()**方法。而生成器则可以直接使用一个函数,通过yield语句返回每个迭代的值。 简单性:相比之下,生成器的定义更简单。你只需要一个函数,就可以通过yield关键字生成值。而迭代器则需要更多的代码来定义类和方法。 资源使用:生成器和迭代器都是懒加载(lazy load)的,也就是说它们只有在需要返回值的时候才会生成值。但是生成器更进一步,它们在生成值后不会保存这些值。这意味着如果你需要迭代的数据集很大,或者如果你需要的值需要大量计算,那么生成器可能会比迭代器更节省资源。 使用场景:迭代器更适用于需要自定义复杂行为的情况,而生成器更适用于需要遍历大数据集或复杂数据流的情况。 总的来说,生成器是一种特殊的迭代器,它的定义更简单,也更容易使用,但同时也继承了迭代器的主要特性。
16.break:跳出循环,不执行下一个循环。同时break后面的代码也不会执行。 pass:pass后面的代码还是会继续执行,也就是当前的循环还在继续。 continue:continue后面的代码不会执行,而是直接进入下一个循环。
17.同步异步指的是调用者与被调用者之间的关系 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回,一旦调用返回,就得到了返回值 异步的概念和同步相对,调用在发出之后,这个调用就直接返回了,所以没有返回结果。当该异步功能完成后,被调用者可以通过状态、通知或回调来通知调用者 阻塞非阻塞是线程或进程之间的关系 阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。调用线程只有在得到结果之后才会返回。函数只有在得到结果之后才会将阻塞的线程激活 非阻塞和阻塞的概念相对应,非阻塞调用指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程
18.面向对象编程,抽象(Abstraction)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)
19.is用于判断两个变量引用对象是否为同一个,==用于判断引用变量的值是否相等。
20.全局变量:在函数外或全局空间中声明的变量称为全局变量。这些变量可以由程序中的任何函数访问。 局部变量:在函数内声明的任何变量都称为局部变量。此变量存在于局部空间中,而不是全局空间中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值