2024年Python-常见面试题汇总,请把这些学完再去面试

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

WEB

什么是wsgi,uwsgi,uWSGI?

Django、Flask的对比?

Django

django请求的生命周期?

列举django的内置组件?

简述什么是FBV和CBV?

django中csrf防御的实现机制

Django本身提供了runserver,为什么不能用来部署?

跨域问题如何解决?

参考


基础与特性

列举布尔值为False的常见值?

0,[],(),{},‘’,False,None

Python递归的最大层数?

998

def fun(num):
    if num == 0:
        return 0
    else:
        return fun(num - 1)


if __name__ == '__main__':
    print(fun(998))

结果

RecursionError: maximum recursion depth exceeded in comparison

print([i%2 for i in range(10)])和print((i%2 for i in range(10)))的结果?

print([i%2 for i in range(10)])
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
print((i%2 for i in range(10)))
<generator object at 0x00000283335C7F48>

一个是列表,一个是生成器/迭代器

简述解释型语言和编译型语言?

-编译型(需要编译器,相当于用谷歌翻译):编译型语言执行速度快,不依赖语言环境运行,跨平台差,如C/C++、Go执行速度快,调试麻烦

-解释型(需要解释器,相当于同声传译):解释型跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行,如Python、JAVA执行速度慢,调试方便

解释器种类及特点

CPython是使用最广且被的Python解释器。
    IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。CPython用>>>作为提示符,而IPython用In[序号]:作为提示符。
    PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
    Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
    IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

字符串格式化有哪几种?

占位符

‘hello,%s’ % ‘world’
‘hello,world’

format

‘hello,{}’.format(‘world’)
‘hello,world’

f-string

f’hello,{“world”}’
‘hello,world’

简述字符串驻留机制?

对于短字符串,将其照值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。长字符串不遵守驻留机制。
驻留适用范围:由数字,字符和下划线组成的python标识符以及整数[-5,256]。

s1=‘hello_world’
s2=‘hello_world’
id(s1)
2762526059824
id(s2)
2762526059824

s1=‘hello_world’*10000
s2=‘hello_world’*10000
id(s1)
2762523045808
id(s2)
2762523155872

什么是反射,举个例子?

反射是把字符串映射到实例的变量或者实例的方法然后可以去执行调用、修改等操作。利用以下四个内置函数:

  • getattr 获取指定字符串名称的对象属性
  • setattr 为对象设置一个对象
  • hasattr 判断对象是否有对应的对象(字符串)
  • delattr 删除指定属性

例如:

s2=‘hello_world’
getattr(s2,‘split’)(‘_’)
[‘hello’, ‘world’]

Python自省

运行时获得对象的类型等,内置函数dir、type、isinstance等,利用了反射机制。

Python作用域

本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)

函数及函数式编程

函数调用时参数传递方式?

函数传参是引用传递,函数外一直不变,需要区分对象是否可变。对于不可变类型,可以通过返回修改后的引用来改变它(指向其他地方)。

函数基础总结与内置函数

什么是闭包?

在一个函数内部的函数,具体来说:

  • 必须有一个内嵌函数
  • 内嵌函数必须引用外部函数中的变量
  • 外部函数的返回值必须是内嵌函数
什么是lambda函数?

lambda函数也叫匿名函数,该函数可以包含任意数量的参数,但只能有一个执行操作的语句

装饰器

装饰器的作用和功能?

一句话:为已经存在的对象添加额外的功能

  • 引入日志
  • 函数执行时间统计
  • 执行函数栈预备处理
  • 执行函数后的清理功能
  • 权限校验
  • 缓存

迭代器、生成器

迭代器和生成器的区别是什么?

1、共同点

生成器是一种特殊的迭代器。

2、不同点

a、语法上:

生成器是通过函数的形式中调用 **yield 或()**的形式创建的,自动创建了__iter__()和next()方法,显得特别简洁,也是高效的。

迭代器可以通过iter()内置函数创建。

b、用法上:

生成器在调用next()函数或for循环中,所有过程被执行,且返回值,需要的时候才返回,生成器表达式比列表生成式更节省内存

迭代器在调用next()函数或for循环中,所有值被返回,没有其他过程或动作。

拷贝

深拷贝和浅拷贝有什么区别?

在创建新实例类型时使用浅拷贝,并保留在新实例中复制的值。浅拷贝用于复制引用指针,就像复制值一样。这些引用指向原始对象,并且在类的任何成员中所做的更改也将影响它的原始副本。浅拷贝允许更快地执行程序,它取决于所使用的数据的大小。

**深拷贝用于存储已复制的值。**深拷贝不会将引用指针复制到对象。它引用一个对象,并存储一些其他对象指向的新对象。原始副本中所做的更改不会影响使用该对象的任何其他副本。由于为每个被调用的对象创建了某些副本,因此深拷贝会使程序的执行速度变慢。

浅拷贝拷贝数据集合的第一层数据,深拷贝拷贝数据集合的所有层。例如,一个列表list1,另一个列表list2中append了list1,使用copy标准库的copy和deepcopy分别浅拷贝和深拷贝为list3、list4,修改list1,list3会变化,list4不变。

线程、进程与协程

如何在Python中实现多线程?

Python有一个多线程库,但是用多线程来加速代码的效果并不是那么的好,

Python有一个名为Global Interpreter Lock(GIL)的结构。GIL确保每次只能执行一个“线程”。一个线程获取GIL执行相关操作,然后将GIL传递到下一个线程。

虽然看起来程序被多线程并行执行,但它们实际上只是轮流使用相同的CPU核心

所有这些GIL传递都增加了执行的开销。这意味着多线程并不能让程序运行的更快。

协程

简单点说协程是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间,而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态。

Python里最常见的yield就是协程的思想!

面向对象

Python的元类?

先定义metaclass,就可以创建类,最后创建实例。

所以,metaclass允许你创建类或者修改类。换句话说,你可以把类看成是metaclass创建出来的“实例”。它指示Python解释器在创建MyList时,要通过ListMetaclass.__new__()来创建。

ORM就是一个典型的例子。

静态方法,类方法

\实例方法类方法静态方法
a = A()a.foo(x)a.class_foo(x)a.static_foo(x)
A不可用A.class_foo(x)A.static_foo(x)

实例方法,类无法调用。类方法和静态方法类和实例都可以调用。A.class_foo(x)可以理解为class_foo(A,x),a.class_foo(x)可以理解为class_foo(a,x),a会转化为A。静态方法和类没有太大关系。

类变量和实例变量

类变量是所有实例共享的

实例变量是实例单独拥有的

Python中单下划线和双下划线

双下划线"__变量或函数__",是Python内部为了防止和用户自定义命名冲突。

双下划线"__变量或函数",解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名,它无法直接像公有成员一样随便访问,通过对象名._类名__xxx这样的方式可以访问。

单下划线"_变量或函数",是指定变量私有,不能通过from module import *导入,其他地方和公有一样。

参考:Python-面向对象编程总结

重载

  1. 可变参数类型。
  2. 可变参数个数。

基本的设计原则:仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载。

__new____init__的区别

  1. __new__是一个静态方法,__init__是一个实例方法
  2. __new__方法会返回一个创建的实例,而__init__什么都不返回。
  3. 只有在__new__返回一个cls的实例时后面的__init__才能被调用。
  4. 创建一个新实例时调用**__new__**,初始化一个实例时用__init__

利用__new__可实现单例模式

文件

read,readline和readlines

  • read 读取整个文件
  • readline 读取下一行,使用生成器方法

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值