Python开发的面试准备
1.is和==的区别:
is比较的是id,对象的内存地址
= =比较的是值
2.按字典中的value值进行排序
sorted(dict.items(), key = lambda x: x[1])
3.字典和json的区别
字典是python的数据结构,字典中的key值能hash
json是一种数据的表现形式,是字符串
4.可变、不可变类型:
指的是内存中的值是否可以被改变
不可变:数值、字符串、元组
可变:列表、字典、集合
5.常用的字符串格式化
占位符 s1 = “%s DSB 你好”%name
format s2 = “{} DSB 你好”.format(name)
f-string s3 = f"{name} DSB 你好"
6.字符串驻留机制
对短字符串,赋值给多个不同对象时,内存中只有一个副本
驻留适用范围:由数字,字符和下划线组成的python标识符及整数[-5,256]
7.删除list中重复元素
通过set内置的去重实现: l2 = list(set(l1))
#保持原来顺序
通过内置sort方法:l2.sort(key=l1.index)
l2 = sorted(set(l1), key=l1.index)
遍历:if not in l2 -> append
8.统计函数的执行效率
import cProfil #引入程序分析包,分析代码性能
cProfile.run(‘func(paras)’) #把函数以字符串形式传入模块的run方法
9.列举字符串、列表、元组、字典的5个常用方法
str1 = ‘’ : replace, strip, split, reverse, upper, lower…
list1 =[]: append, pop, insert, remove,sort, count, index…
tuple1 = (): index, count, len(), dir()…
dict1 = {}: get, keys, values, items, pop, popitems, clear, update…
10.什么是反射,以及应用场景
通过字符串的形式去访问对象的属性,调用对象的方法(但是不能去访问方法)
比如本来可以通过if elif判断字符串然后调用函数,但在大规模系统中不可取。
核心主题是如何利用字符串驱动不同的事件,比如导入模块、调用函数等等,这些都是python的反射机制,是一种编程方法、设计模式的体现,凝聚了高内聚、松耦合的编程思想,不能简单的用执行字符串来代替。
可以通过__import__函数,我们实现了基于字符串的动态的模块导入。obj = import(modules)
#对于lib.xxx.xxx.xxx这一类的模块导入路径,__import__默认只会导入最开头的圆点左边的目录,也就是“lib”
=> obj = import(“lib.” + modules, fromlist=True) # 注意fromlist参数
class Foo:
pass
foo = Foo()
foo.x = 1
#getattr
getattr(foo,‘x’)) # 1 ## getattr 函数让程序去foo模块了,寻找一个叫x的成员
# 相当于把字符串变成函数名的过程,然后把结果复制给变量func,变量指向foo里某个函数
#setattr
setattr(foo, ‘y’, 2))
getattr(foo,‘y’)) # 2
#hasattr
hasattr(foo, ‘z’)) #False # 通常通过hasattr的判断,防止非法输入错误
#delattr
delattr(foo, 'x))
11.浅copy和深copy的区别:
首先深拷贝和浅拷贝都是对象的拷贝,都会生成一个看起来相同的对象,他们本质的区别是拷贝出来的对象的地址是否和原对象一样,浅拷贝是地址的复制,深拷贝是值的复制,就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象。
12.Python中的self关键字:
python的类中定义函数时的self关键字跟python的方法函数有关,方法函数由类的实例化对象调用,需要把调用它的实例化对象传入方法函数中,self代表调用时的类的实例,而非类。
在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把self替换成类的实例。
13.Yield关键字和生成器:
yield是一种特殊的return,执行遇到yield时,立即返回,这一点与return相似,不同之处在于,下次进入函数时直接到yield的下一个语句,而return后再进入函数,还是从函数体的第一行代码开始执行。带yield的函数生成器,通常与next函数结合用。g=f()执行f,只得到一个生成器对象g,使用next函数进入到函数体内(执行next(g))。优点-节省内存,占用内存空间为O(1)。
生成器:在需要返回数据的时候使用 yield 语句。每次 next()被调用时,生成器会返回它脱离的位置,自动创建iter()和 next()方法
简洁、高效,节省内存
14.列表和迭代器的区别:
列表经过内置函数iter包装,成为迭代器 a_iter = iter(a)
列表不论遍历多少次,表头位置始终是第一个元素
迭代器遍历结束后,不再指向原来的表头位置,而是最后元素的下一个位置
(迭代到最后一个元素,再执行next,会触发stopiteratio异常,
通过捕获此异常,求迭代器指向列表a的长度;生成器也是一种迭代器)
15.python垃圾回收机制
16. try except用法和作用
try用于检测异常,except用于捕获所有异常,保证程序的正常运行
Exception:捕获万能异常
finally:无论是否错误,都会执行此处代码
raise:触发异常
17.enumerate的作用
将一个可迭代对象中的元素,按元素顺序每个增加一个索引值,组成索引序列,利用它可以同时获得索引和值,方便后续操作。
18.lambda匿名函数表达式及应用场景
与函数有相同的作用域,但是匿名意味着引用计数为0, 使用一次就释放,除非给其命名
作为内置函数的参数,与内置函数配合一起使用
19.python的递归最大层数
998
20.常见的内置函数
17. filter,map,reduce的作用
filter(lambda x: x == 2, [1,2,3]) #通过判断函数func,筛选符合条件的元素
map(lambda x: x + ‘xxx’, [‘1’,‘2’]) #将func用于每个iterable对象
reduce(lambda x, y: x + y, [1,2,3,4,5]) # 函数会对参数序列中的元素进行累积
18.什么是闭包
定义在一个函数内部的函数,被外层函数包裹着,特点是可以访问到外层函数中的名字
闭包函数时名称空间与作用域、函数对象、函数嵌套的结合体
19.装饰器
装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数,即装饰器是一个函数,它以函数作为参数,返回另一个函数。
使用 @函数名字,放在某些函数上面,起到增强它们功能的作用。
装饰器使得代码更简洁,代码的复用性大大提升。在Java中装饰器被称为注解。
python支持异步编程,从中也能看到装饰器的身影
20.函数式编程:面向过程的程序设计
21.Python LEGB规则
Python的命名空间是一个字典,字典内保存了变量名称与对象之间的映射关系
查找变量名就是在命名空间字典中查找键-值对, LEGB就是用来规定命名空间查找顺序的规则
LEGB含义解释:
L-Local(function);函数内的名字空间
E-Enclosing function locals;外部嵌套函数的名字空间(例如closure)
G-Global(module);函数定义所在模块(文件)的名字空间
B-Builtin(Python);Python内置模块的名字空间
Python在确定一个变量的核心规则是LEGB,只有熟悉LEGB规则,才能清楚在程序执行过程中调用的变量究竟是什么
22.@property的用法
如果在一个类中要设置和获取一个成员变量的话, 一般是定义get和set的方法,但我们希望get/set一个值时有更简单的方法,像设置成员变量一样去设置一个变量,又可以检查类型参数。
在方法定义前,加 @property 装饰器,可以像操作成员变量一样进行操作。
新式类中的属性有三种访问方式,如下:
@property对应读取
@方法名.setter修改
@方法名.deleter删除属性
23.多线程threading和多进程multiprocessing的应用场景
每一个应用程序都有一个自己的进程。操作系统会为这些进程分配一些执行资源,例如内存空间等。
在进程中,又可以创建一些线程,他们共享这些内存空间,并由操作系统调用,以便并行计算。
线程的状态
创建线程之后,线程并不是始终保持一个状态。其状态大概如下:
- New 创建。
- Runnable 就绪。等待调度
- Running 运行。
- Blocked 阻塞。阻塞可能在 Wait Locked Sleeping
- Dead 消亡
线程的类型
线程有着不同的状态,也有不同的类型。大致可分为: - 主线程
- 子线程
- 守护线程(后台线程)
- 前台线程
io 操作不占用CPU(从硬盘、从网络、从内存读数据都算io)
计算占用CPU(如1+1计算)
python中的线程是假线程,不同线程之间的切换是需要耗费资源的,因为需要存储线程的上下文,不断的切换就会耗费资源。
python多线程适合io操作密集型的任务(如socket server 网络并发这一类的);
python多线程不适合cpu密集操作型的任务,主要使用cpu来计算,如大量的数学计算。
那么如果有cpu密集型的任务怎么办,可以通过多进程来操作(不是多线程)。
24.异步和多线程的区别
异步是单线程的,它能更优雅处理了io密集型的应用场景
25.__new__和__init__的区别
创建时初始化实例
__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是个静态方法。
__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法。
也就是: __new__先被调用,__init__后被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。
26.如何实现一个单例
只初始化一次,在数据库连接中很常用
单例模式是一个软件的设计模式,为了保证一个类,无论调用多少次产生的实例对象,都是指向同一个内存地址,仅仅只有一个实例(只有一个对象)。
实现单例模式的手段有很多种,但总的原则是保证一个类只要实例化一个对象,下一次再实例的时候就直接返回这个对象,不再做实例化的操作。
方式:https://www.jb51.net/article/202178.htm
- 通过模块导入的方式
- 通过类的绑定方法
- 通过魔法方法__new__
- 通过元类**
- 函数装饰器
- 类装饰器
27.python查找对象属性的顺序
_getattribute_()
类属性
数据描述符
实例属性
非数据描述符
__getattr__()方法
28.SQL注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!
Python开发的面试准备的更多相关文章
- 珍藏版 Python 开发工程师面试试题
珍藏版 Python 开发工程师面试试题 说明:不拿到几家公司的offer,那就是卑鄙的浪费 一.Python_基础语法 1.可变与不可变类型: 2.浅拷贝与深拷贝的实现方式.区别:deepcopy如 ...
- Python开发【面试】:刷题
面试题 1.到底什么是Python? Python是一种解释型语言.这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译(一边编写一边执行,先把代码转化成字节码,然后python ...
- 面试乐融集团Python开发工程师有感
这是笔者第一次面试,,乐融集团位于朝阳区朝阳公园的乐融大厦.是下午两点的笔面试,笔者是一点半到的,然后在里面等了会,开始笔试 笔试题并不是太难,就是考的比较宽,因为笔者是校招,所以笔试题出来了数据结构 ...
- web开发前端面试知识点目录整理
web开发前端面试知识点目录整理 基本功考察 关于Html 1. html语义化标签的理解; 结构化的理解; 能否写出简洁的html结构; SEO优化 2. h5中新增的属性; 如自定义属性data, ...
- Python笔试、面试 【必看】
本文由EarlGrey@编程派独家编译,转载请务必注明作者及出处. 原文:Sheena@codementor 译文:编程派 引言 想找一份Python开发工作吗?那你很可能得证明自己知道如何使用Pyt ...
- 绿盟python测试实习面试
1.简历问题 低级错误:时间写错 最近好像越来越马大哈了,总是犯低级错误. 上次的开题报告首页,这次的时间,每次都有小问题,确是大毛病 到底哪里出错了 2 RHCE证书好像没有用 面试官根本就不懂这个 ...
- Python移动自动化测试面试✍✍✍
Python移动自动化测试面试 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以 ...
- Python移动自动化测试面试
Python移动自动化测试面试 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以关 ...
- python开发环境搭建
虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...
随机推荐
- 企业安全04-phpstudy最新版本nginx 默认存在任意文件解析漏洞
phpstudy最新版本nginx 默认存在任意文件解析漏洞 一.漏洞描述 phpStudy是一个PHP调试环境的程序集成包.该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ ...
- Java多线程中的wait/notify通信模式
前言 最近在看一些JUC下的源码,更加意识到想要学好Java多线程,基础是关键,比如想要学好ReentranLock源码,就得掌握好AQS源码,而AQS源码中又有很多Java多线程经典的一些应用:再比 ...
- MIT-6.005软件构建
L01 Static Typing 主要对比Java和Python Java:静态语言,运行之前所有变量都要声明.traps:整型相除还是整型,5/2=2.数值溢出,20亿*2结果是负数,这个bug不 ...
- golang 自学系列(四)——debug for vscode
golang 自学系列(四)--(调试)VSCode For Debug 这里如何装 vscode 我就不说了 这里如何在 vscode 正常写代码我也不说了 在能正常用 vscode 写 go 语言 ...
- getElementBy系列和querySelector系列的区别
querySelector和querySelectorAll的用法和getElementBy大致一样,获取的时候带上符号,getElementBy获取的是元素的动态集合,querySelector获取 ...
- 微软发布 Pylance:改善 VS Code 中的 Python 体验
原标题:微软发布 Pylance:改善 VS Code 中的 Python 体验 来源:开源中国 微软宣布推出一种新的 Python 语言服务器,名为 Pylance,其可利用语言服务器协议与 VS ...
- SQL Alias模板
再记不住的话就扇自己巴掌 SELECT * FROM class1 c INNER JOIN class2 p ON c.id = p.id INNER JOIN class3 s ON c.id = ...
- nodejs事件和事件循环简介
目录 简介 事件 事件循环 事件循环的阻塞 事件循环举例 栈和消息队列 作业队列和promise process.nextTick() setImmediate() setInterval() 简介 ...
- 第7章 Python类型、类、协议目录
第7.1节 面向对象程序设计的相关知识 第7.2节 关于面向对象设计的一些思考 第7.3节 Python特色的面向对象设计:协议.多态及鸭子类型 第7.4节 Python中与众不同的类 第7.5节 揭 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中QAbstractButton派生按钮部件的shortcut 属性
shortcut 属性保存与按钮关联的快捷键.可以使用shortcut()和setShortcut(QKeySequence)访问和设置该属性. 关于这个属性官网介绍的不多,经老猿实际验证,它与tex ...