无论是应聘Python方向的web开发,还是爬虫工程师,或是数据分析,还是自动化运维,都涉及到一些基础的知识!小编挑了一些Python的基础面试题,看看你能不能的答上来,也许面试的同学用的着!
1.Python这么好,说说它的特性吧
关键特性
Python是一种解释型语言,这意味着,与C,C++不同,Python不需要在运行之前进行编译。它是边运行边解释的。
Python是动态类型化的,这意味着当你声明它们或类似的东西时,你不需要声明变量的类型。你可以x=1 ,然后x="abc"是没有错误。
Python非常适合面向对象编程,因为它允许定义类以及组合和继承。Python没有访问修饰符。
在Python中函数是一等对象,这意味着它们可以在运行时动态创建,能赋值给变量或者作为参数传给函数,还能作为函数的返回值。
Python代码容易上手,开发速度很快,但运行速度通常比编译语言慢。幸运的是,Python允许包含基于C的扩展,所以瓶颈可以被优化掉。
2.单引号、双引号和三引号之间的区别
单引号和双引号主要是用来表示字符串
比如:
单引号:‘python’
双引号:“python”
区别:
若你的字符串里面本身包含单引号,必须用双引号包裹。
比如:"can’t find the log "
三引号
三单引号:‘’‘python ‘’’,也可以表示字符串一般用来输入多行文本,或者用于大段的注释。
三双引号:“”“python”“”,一般用在类里面,用来注释类,这样省的写文档,直接用类的对象doc访问获得文档。
3.Python里面如何拷贝一个对象?
标准库中的copy模块提供了两个方法来实现拷贝.一个方法是copy,它返回和参数包含内容一样的对象.
使用deepcopy方法,对象中的属性也被复制
4.Python的参数传递,是值传递还是引用传递?
Python的参数传递有:
位置参数
默认参数
可变参数
关键字参数
函数的传值到底是值传递还是引用传递,要看情况
不可变参数用值传递:
比如像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象。
可变参数是用引用传递:
比如像列表,字典这样的对象是通过引用传递,和C语言里面的用指针传递数组很相似,可变对象能在函数内部改变。
5.什么是lambda函数?它的好处是什么?
lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
lambda函数:首要用途是指点短小的回调函数。
lambda [arguments]:expression
a=lambdax,y:x+y
a(3,11)
好处:
lambda能和def做同样种类的工作,特别是对于那些逻辑简单的函数,直接用lambda会更简洁,而且省去取函数名的麻烦。
6.字符串格式化: %和 .format的区别是什么?
字符串的format函数非常灵活,很强大,可以接受的参数不限个数,并且位置可以不按顺序,而且有较为强大的格式限定符(比如:填充、对齐、精度等)。
7.Python是如何进行内存管理的?
Python引用了一个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),用于管理对小块内存的申请和释放
内存池(memory pool)的概念:
当创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片,致使效率降低。内存池的概念就是预先在内存中申请一定数量的,大小相等 的内存块留作备用,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够了之后再申请新的内存。这样做最显著的优势就是能够减少内存碎片,提升效率。
内存池的实现方式有很多,性能和适用范围也不一样。
python中的内存管理机制——Pymalloc:
python中的内存管理机制都有两套实现,一套是针对小对象,就是大小小于256bits时,pymalloc会在内存池中申请内存空间;当大于256bits,则会直接执行new/malloc的行为来申请内存空间。 关于释放内存方面,当一个对象的引用计数变为0时,python就会调用它的析构函数。在析构时,也采用了内存池机制,从内存池来的内存会被归还到内存池中,以避免频繁地释放动作。
8.如何用Python来进行查询和替换一个文本字符串?
可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0])
replacement是被替换成的文本
string是需要被替换的文本
count是一个可选参数,指最大被替换的数量
9.Python里面search()和match()的区别?
match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none 。
10.线程如何在Python中实现
Python有一个多线程包threading,可以使用多线程来加快你的代码。但是Python有一个叫做Global Interpreter Lock(GIL)的构造。GIL确保只有一个’线程’可以在任何时候执行。
线程获取GIL,做一些工作,然后将GIL传递到下一个线程。这种情况发生得非常快,所以对于人眼而言,它可能看起来像你的线程并行执行,但它们实际上只是轮流使用相同的CPU内核。因此GIL的存在使得Python中的多线程无法真正的利用多核的优势来提高性能。
对于IO密集型操作,在等待操作系统返回的时候会释放GIL;再比如爬虫因为有等待的服务器的响应时间,可以利用多线程来加速!但是对于CPU密集型操作,只能通过多进程Multiprocess来加速。
11.Python的参数传递,是值传递还是引用传递?
Python的参数传递有:
位置参数
默认参数
可变参数
关键字参数
函数的传值到底是值传递还是引用传递,要看情况
不可变参数用值传递:
比如像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象。
可变参数是用引用传递:
比如像列表,字典这样的对象是通过引用传递,和C语言里面的用指针传递数组很相似,可变对象能在函数内部改变。
12.数据仓库是什么?
数据仓库是一个面向主题的、集成的、稳定的、反映历史变化的、随着时间的流逝发生变化的数据集合。它主要支持管理人员的决策分析。
数据仓库收集了企业相关内部和外部各个业务系统数据源、归档文件等一系列历史数据,最后转化成企业需要的战略决策信息。
特点:
面向主题:根据业务的不同而进行的内容划分;
集成特性:因为不同的业务源数据具有不同的数据特点,当业务源数据进入到数据仓库时,需要采用统一的编码格式进行数据加载,从而保证数据仓库中数据的唯一性;
非易失性:数据仓库通过保存数据不同历史的各种状态,并不对数据进行任何更新操作。
历史特性:数据保留时间戳字段,记录每个数据在不同时间内的各种状态。
最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!
这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
自学推荐B站视频:
零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!
自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享