TA的每日心情 | 无聊 4 天前 |
---|
签到天数: 530 天 连续签到: 2 天 [LV.9]测试副司令
|
本帖最后由 测试积点老人 于 2020-9-22 13:55 编辑
- 前言:此文专门记载本人平时面试以及收藏的面试题目,如果有错误之处请及时指正,谢谢!
- 1、python的数据类型有哪些
- 答:Python基本数据类型一般分为:数字、字符串、列表、元组、字典、集合这六种基本数据类型。
- 浮点型、复数类型、布尔型(布尔型就是只有两个值的整型)、这几种数字类型。列表、元组、字符串都是序列。
- 2、列表和元组的区别
- 答:列表是动态的,长度可变,可以随意地增删改元素。列表的存储空间略大于元组,性能略逊于元组。
- 元组是静态的,长度大小固定,不可以对元组元素进行增删改操作。元组对于列表更加轻量级,性能稍优。
- 3、字典的原理
- 答:python中的字典底层依靠哈希表(hash table)实现, 使用开放寻址法解决冲突,
- 哈希表是key-value类型的数据结构, 可以理解为一个键值需要按照一定规则存放的数组, 而哈希函数就是这个规则
- 字典本质上是一个散列表(总有空白元素的数组, python至少保证1/3的数组是空的), 字典中的每个键都占用一个单元,
- 一个单元分为两部分, 分别是对键的引用和对值的引用, 使用hash函数获得键的散列值, 散列值对数组长度取余, 取得的值就是存放位置的索引
- 哈希冲突(数组的索引相同), 使用开放寻址法解决
- 这也是python中要求字典的key必须可hash的原因
- 数组中1/3的位置为空, 增加元素可能会导致扩容, 引发新的散列冲突, 导致新的散列表中键的次序发生变化, 这也是字典遍历时不能添加和删除的原因
- 字典在内存中开销很大, 实际上是以空间换时间
- 4、说一下hash算法与哈希冲突
- 答:哈希算法:根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上的算法。也称为散列算法、杂凑算法。
- 哈希表:数据经过哈希算法之后得到的集合。这样关键字和数据在集合中的位置存在一定的关系,可以根据这种关系快速查询。
- 非哈希表:与哈希表相对应,集合中的 数据和其存放位置没任何关联关系的集合。
- 由此可见,哈希算法是一种特殊的算法,能将任意数据散列后映射到有限的空间上,通常计算机软件中用作快速查找或加密使用。
- 哈希冲突:由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。
- 5、怎么解决哈希冲突
- 答:解决哈希冲突的方法一般有:开放定址法、链地址法(拉链法)、再哈希法、建立公共溢出区等方法。(https://www.cnblogs.com/zyyhxbs/p/12408604.html)
- 6、说下python的内存管理和垃圾回收机制
- 答:python的内存管理机制有三种:引用计数、垃圾回收、内存池。
- 引用计数:引用计数是一种非常高效的内存管理手段,当一个pyhton对象被引用时其引用计数增加1,当其不再被引用时引用计数减1,当引用计数等于0的时候,对象就被删除了
- 垃圾回收:引用计数、标记清除、分代回收(https://www.jianshu.com/p/892aa84e5814)
- 内存池:Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
- Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。
- 另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。
- 也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。
- 7、内存过大时你有什么调优手段
- 答:1.手动垃圾回收 2.避免循环引用(手动解循环引用和使用弱引用)3.调高垃圾回收阈值
- 8、请简述下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.赋值对象随着原列表一起变化
- 9、请讲一下协程的原理
- 答:我自己暂时也不清楚,还没有自己的理解,资料如下:
- 运用协程机制最典型的场景就是异步IO。所谓异步,是指一段程序在执行完成前有能力“暂停”,让其他程序段执行。
- 从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数,所以总体上在协程中把yield看做是控制流程的方式。
- 协程是一个特殊的生成器,yield有返回值>生成器,yield没有>协程(没返回值就是协程)
- (https://www.cnblogs.com/ajianbeyourself/p/11261302.html、https://www.cnblogs.com/yc3110/p/10443108.html)
- 10、数据库的事务是什么
- 答:数据库事务是指一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性
- (https://www.cnblogs.com/chaojiyingxiong/p/11029406.html、https://blog.csdn.net/x_i_xw/article/details/81408656)
- 11、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 语句的结果集。
- 12、数据库的存储过程
- 答:一组为了完成特定功能的SQL语句集(或者自定义数据库操作命令集), 根据传入的参数(也可以没有),
- 通过简单的调用, 完成比单个SQL语句更复杂的功能, 存储在数据库服务器端,只需要编译过一次之后再次使用都不需要再进行编译:主要对存储的过程进行控制
- (https://www.runoob.com/w3cnote/mysql-stored-procedure.html)
- 13、数据库的存储过程与事务的异同
- 答:事务是保证多个SQL语句的原子型的,也就是要么一起完成,要么一起不完成
- 存储过程是把一批SQL语句预编译后放在服务器上,然后可以远程调用
- (https://www.jb51.net/article/158051.htm)
- 14、cookie与session的区别是什么
- 答:(1)Cookie以文本文件格式存储在浏览器中,而session存储在服务端,因为每次发起 Http 请求,都要携带有效Cookie信息,所以Cookie一般都有大小限制,以防止增加网络压力,一般不超过4k
- (2)cookie的存储限制了数据量,只允许4KB,而session是无限量的
- (3)我们可以轻松访问cookie值但是我们无法轻松访问会话值,因此它更安全
- (4)设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。
- (https://baijiahao.baidu.com/s?id ... 6&wfr=spider&for=pc)
- 15、项目中能不能只使用SESSION,不使用COOKIE
- 答:可以,通过重定向的形式,把session id放在url后面,但是这样做直接将把session id暴露出来了,于安全考虑不建议使用这样的方式
- (https://blog.csdn.net/weixin_40648117/article/details/78844100)
- 16、http和https的区别
- 答:1、https协议需要到CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(原来网易官网是http,而网易邮箱是https。)
- 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- 4、http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
- (无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
- (https://blog.csdn.net/guolin_blog/article/details/104546558、https://blog.csdn.net/qq_38289815/article/details/80969419)
|
|