• 0
  • 0
分享

1、列表和元组的区别

答:列表是动态的,长度可变,可以随意地增删改元素。列表的存储空间略大于元组,性能略逊于元组。元组是静态的,长度大小固定,不可以对元组元素进行增删改操作。元组对于列表更加轻量级,性能稍优。 测试面试宝典

2、字典的原理

答:python中的字典底层依靠哈希表(hash table)实现, 使用开放寻址法解决冲突。

哈希表是key-value类型的数据结构, 可以理解为一个键值需要按照一定规则存放的数组, 而哈希函数就是这个规则。

字典本质上是一个散列表(总有空白元素的数组, python至少保证1/3的数组是空的), 字典中的每个键都占用一个单元。

一个单元分为两部分, 分别是对键的引用和对值的引用, 使用hash函数获得键的散列值, 散列值对数组长度取余, 取得的值就是存放位置的索引。

哈希冲突(数组的索引相同), 使用开放寻址法解决。

这也是python中要求字典的key必须可hash的原因。

数组中1/3的位置为空, 增加元素可能会导致扩容, 引发新的散列冲突, 导致新的散列表中键的次序发生变化, 这也是字典遍历时不能添加和删除的原因。

字典在内存中开销很大, 实际上是以空间换时间。

3、说一下hash算法与哈希冲突

答:哈希算法:根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上的算法。也称为散列算法、杂凑算法。

哈希表:数据经过哈希算法之后得到的集合。这样关键字和数据在集合中的位置存在一定的关系,可以根据这种关系快速查询。

非哈希表:与哈希表相对应,集合中的 数据和其存放位置没任何关联关系的集合。

由此可见,哈希算法是一种特殊的算法,能将任意数据散列后映射到有限的空间上,通常计算机软件中用作快速查找或加密使用。

哈希冲突:由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。

4、怎么解决哈希冲突

答:解决哈希冲突的方法一般有:开放定址法、链地址法(拉链法)、再哈希法、建立公共溢出区等方法。

5、说下python的内存管理和垃圾回收机制

答:python的内存管理机制有三种:引用计数、垃圾回收、内存池。

引用计数:引用计数是一种非常高效的内存管理手段,当一个pyhton对象被引用时其引用计数增加1,当其不再被引用时引用计数减1,当引用计数等于0的时候,对象就被删除了。

垃圾回收:引用计数、标记清除、分代回收。

内存池:Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。

另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。

也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

6、内存过大时你有什么调优手段

答:

  1. 手动垃圾回收;

  2. 避免循环引用(手动解循环引用和使用弱引用);

  3. 调高垃圾回收阈值。

7、请简述下python的拷贝

答:

  1. 赋值: 只是复制了新对象的引用,不会开辟新的内存空间。

  2.浅拷贝: 创建新对象,其内容是原对象的引用。

浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数。

如:lst = [1,2,3,[4,5]]

切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst] 要注意:list1=lst 和list1=lst[:]的区别

工厂函数:lst1 = list(lst)

copy函数:lst1 = copy.copy(lst)

浅拷贝之所以称为浅拷贝,是它仅仅只拷贝了一层,在lst中有一个嵌套的list[4,5],如果我们修改了它,情况就不一样了。

  3. 深拷贝:只有一种形式,copy模块中的deepcopy函数。

和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。

深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。

#说明如下:
#1.外层添加元素时, 浅拷贝c不会随原列表a变化而变化;内层list添加元素时,浅拷贝c才会变化。
#2.无论原列表a如何变化,深拷贝d都保持不变。
#3.赋值对象随着原列表一起变化

8、请讲一下协程的原理

答:运用协程机制最典型的场景就是异步IO。所谓异步,是指一段程序在执行完成前有能力“暂停”,让其他程序段执行。

从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数,所以总体上在协程中把yield看做是控制流程的方式。

协程是一个特殊的生成器,yield有返回值>生成器,yield没有>协程(没返回值就是协程)。

9、sql的多表联查方式

答:内连接:JOIN / INNER JOIN、不等连接:ON 子句中使用了不等于运算符、自连接:一张表连接自身、左(外)连接:LEFT JOIN / LEFT OUTER JOIN、右(外)连接:RIGHT JOIN / RIGHT OUTER JOIN、全(外)连接:FULL JOIN / FULL OUTER JOIN、交叉连接:CROSS JOIN (可用","代替)、UNION 、UNION ALL操作符用于合并两个或多个 SELECT 语句的结果集。

10、数据库的存储过程

答:一组为了完成特定功能的SQL语句集(或者自定义数据库操作命令集), 根据传入的参数(也可以没有),

通过简单的调用, 完成比单个SQL语句更复杂的功能, 存储在数据库服务器端,只需要编译过一次之后再次使用都不需要再进行编译:主要对存储的过程进行控制。

11、数据库的存储过程与事务的异同

答:事务是保证多个SQL语句的原子型的,也就是要么一起完成,要么一起不完成存储过程是把一批SQL语句预编译后放在服务器上,然后可以远程调用。


作者:程序员白楠楠

原文链接:https://blog.csdn.net/weixin_47340771/article/details/119387831

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   当你学会了如何设计测试用例之后,接下来便是开始用例的编写。  在设计阶段,更准确的说应该是识别测试点的过程,而编写阶段则是将测试点细化成一条条测试用例的过程,有了比较全的用例场景后,如何让别人更舒服、更方便、更清晰地去使用你的测试用例,如何更优雅地展示你的测试用例,如何让领导对你的测试用例满意呢?(“降本增效”,这里的“效”有时也指的是“效果”)  测试用例的编写是每一个测试工程师安身立命的家伙,也是测试的基础,更是软件测试的核心内容,正所谓“基础不牢,地动山摇”,所以一定要掌握好,有些转行的小伙伴一上来就开始自动化、性能的学习,却忽略了最基础的东西,这是不对的。  正好最近有小伙伴问到关...
            1 1 782
            分享
          • 扎实的基础是成功的一半,学号好基础,才能更好的进步!常见的测试用例设计方法主要会涉及以下几种:1、等价类2、边界值3、场景法4、判定表5、因果图6、错误推断法7、正交测试法(正交表)(今天主要解释前三种最为常用)选择合适的测试用例方法,有助于你去更好的梳理出逻辑关联关系,让你的测试覆盖率更高,更高效率的覆盖到所有测试点。一、等价类划分法1)定义依据需求输入划分为若干等价类,从等价类中选定一个测试用例,如果该测试用例通过,则表明整个等价类通过测试如:微信发红包0.01--2002)适用场景一般适用于无限多种输入,我们不可能完成穷举测试,等价类可以使我们用较少的测试用例尽可能多的将功能覆盖。3)有...
            0 0 2045
            分享
          • 交付给用户的软件的质量决定了每个公司的成功。QA 团队的辛勤工作是确保产品质量的最重要因素之一。自动化测试最佳实践和适当的测试自动化技术可以帮助QA团队实现这一目标。如果尽管尽了最大努力,测试还是失败了怎么办?自动化测试人员可能因为急于求成而犯错,这不仅浪费时间和金钱。这对他们的能力和可信度也提出了质疑。对于团队和个人来讲,这听起来像是一场噩梦。在自动化测试生命周期中执行各种类型的自动化测试时,许多新手测试人员和开发人员都会犯自动化测试错误。避免某些自动化测试实践比正确进行测试更为重要。市场上有大量的自动化测试工具、自动化框架和一些基于 AI 的自动化工具,它们声称可以一站式解决所有自动化测试...
            0 0 765
            分享
          • 在过去的这个周末。接到了一个线上问题,描述如下:手动添加一个员工,然后进入线索管理编辑某个线索归属人,在下拉展示的员工列表当中,看不到我新添加的员工。立马自己复现了一下,此时看一下接口返回情况,发现拉起员工列表的页面这个操作,并没有调用接口实时请求数据,也就是说这个地方使用的是缓存。开发给的解释是:出于性能考虑,系统登陆后就缓存了员工这些基本配套信息,不是实时请求。进入设置——应用管理——找到该应用——清除数据,重新登录就看到新员工了。客服欣然接受了这个处理方法。按照这个方法也解决了问题。实际上,这个地方就不能从代码层面上优化了吗?方案肯定是有的:思路一:查询员工列表的地方,接口改成实时调用,...
            1 1 5612
            分享
          •   5 月 7 日,广汽埃安泰国工厂 185(保税区运营许可证)协议签字仪式在泰国曼谷海关总署举行,标志着泰国本地化生产取得关键进展。  据介绍,该保税区自申请至获批全程历时 4 个月,是目前泰国电动车行业落地最快的保税工厂。  作为广汽集团在海外的第一个保税工厂,获得保税区的批准是埃安泰国本地化战略尤为关键的一步。185(保税区运营许可证)获批后,所有生产零件进口关税将降至 0;且保税区内生产的电动车与本土生产电动车同等享受东盟成员国内互免关税待遇及清关便利,是保障东南亚本地化生产的重要前置条件。  广汽集团表示,泰国工厂未来将进一步发挥东南亚零件及整车物流集散功能,全面巩固广汽埃安的“泰国...
            0 0 360
            分享
      • 51testing软件测试圈微信