目录
1.代码走读的含义?
"代码走读"是指阅读和理解代码的过程,通过仔细阅读代码,了解代码的功能、逻辑和结构。代码走读的目的是为了更好地理解代码的工作原理、发现潜在的问题和改进点,并为代码的维护、修改和扩展提供基础。
2.python中常见的异常有哪些?
Exception
:所有异常类的基类。TypeError
:类型错误,当操作或函数应用于不适当类型的对象时引发。ValueError
:值错误,当函数接收到正确类型的对象,但值不合适时引发。IOError
:输入/输出错误,当发生与输入/输出操作相关的错误时引发。IndexError
:索引错误,当使用无效的索引访问序列或容器中的元素时引发。KeyError
:键错误,当在字典中使用无效的键时引发。
3.main方法的作用?
在 Python 中,main
方法是一个常用的程序入口点,它具有特殊的作用和功能。main
方法通常用于定义脚本的顶层执行逻辑,它是程序的主要入口,包含了要在程序启动时执行的代码。
4.PEP8规范
PEP 8 是 Python 社区广泛接受的一份代码风格指南,它详细规定了 Python 代码的编写风格和约定。PEP 8 的目的是提供一致、易读和易于维护的代码风格,以促进 Python 代码的可读性和可维护性。
5.redis乐观锁
在 Redis 中,乐观锁是一种实现并发控制的机制,用于处理多个客户端并发访问共享数据时的并发冲突问题。乐观锁的基本思想是,通过在更新操作之前和之后进行状态检查,来判断是否发生了冲突
6.redis持久化是什么
Redis 持久化是指将 Redis 数据存储在硬盘上,以便在服务器重启或崩溃后能够恢复数据。
7.redis的数据类型
Redis 支持多种数据类型,每种类型都有不同的特点和用途。以下是 Redis 支持的主要数据类型:
-
字符串(String):字符串是 Redis 最基本的数据类型,可以存储任意二进制数据,例如文本、图片、序列化对象等。字符串类型的值最大可以存储 512MB。
-
列表(List):列表是一个有序的字符串元素集合。可以在列表的两端进行插入和删除操作,支持按索引获取元素,还可以进行范围操作,如获取子列表。
-
集合(Set):集合是一个无序、唯一的字符串元素集合。支持添加、删除、判断元素是否存在,以及求交集、并集、差集等集合操作。
-
有序集合(Sorted Set):有序集合是一个有序的字符串元素集合,每个元素关联一个分数,通过分数进行排序。支持按分数范围获取元素,以及根据元素获取分数等操作。
-
哈希表(Hash):哈希表是一个键值对集合,其中的键和值都是字符串类型。可以对单个键进行增、删、改、查操作,也可以获取所有键值对。
-
Bitmaps:位图是由二进制位组成的数据结构,可以对位图进行位操作,如设置、清除、统计位的数量等。
8.什么是redis事务
Redis 事务是一系列 Redis 命令的有序执行集合,可以一次性、原子性地执行多个命令。在 Redis 事务中,一组命令会作为一个单独的操作执行,期间不会被其他客户端的命令中断。
Redis 事务具有以下特性:
-
原子性:Redis 事务中的所有命令要么全部执行成功,要么全部执行失败,保证了多个命令的原子性。
-
隔离性:在事务执行期间,其他客户端发送的命令不会被插入到事务的命令序列中,保证了事务的隔离性。
-
一致性:事务中的命令要么全部执行,要么全部不执行,不会导致数据不一致的情况。
9.redis的过期策略
Redis 有两种主要的过期策略:惰性删除和定期删除。
-
惰性删除:当访问一个带有过期时间的键时,Redis 会先检查该键是否过期,如果过期则删除键并返回空值。这种方式被称为惰性删除,因为过期检查是在键被访问时进行的。这种策略确保了被访问的键始终是有效的,但可能导致过期键在一段时间内仍然存在于内存中。
-
定期删除:Redis 使用定期删除策略来主动删除已经过期的键。它以一定的频率,每隔一段时间检查一部分键是否过期,如果发现过期键,则删除这些键。定期删除策略可以确保过期键及时地从内存中删除,释放空间。
Redis 使用了一种折中的策略来处理过期键的删除,即结合了惰性删除和定期删除。惰性删除保证了被访问的键始终是有效的,而定期删除则清理已过期的键,防止它们长时间占用内存。
10.redis的缓存雪崩
Redis 缓存雪崩是指在缓存中的大量键同时失效或过期,导致大量的请求直接打到后端数据库,从而引起数据库压力剧增,甚至造成数据库宕机的情况。
缓存雪崩通常发生在以下情况下:
-
大量缓存同时过期:当缓存中的大量键同时过期时,如果没有合理的处理机制,所有对这些键的请求都会直接访问数据库,造成数据库压力剧增。
-
缓存服务器故障:如果缓存服务器发生故障,无法提供服务,那么所有请求都会直接访问数据库。
11.布隆过滤器的解释?
布隆过滤器是一种空间效率高、支持快速判断元素是否存在的数据结构。它基于哈希函数和位数组实现,主要用于判断一个元素是否属于一个集合,常用于缓存、搜索引擎、垃圾邮件过滤等场景。
12.Aiohttp是什么?
Aiohttp 是一个用于编写异步网络服务器和客户端的 Python 库,基于 asyncio 实现。它提供了异步的 HTTP 客户端和服务器的功能,使得在 Python 中进行高性能的网络通信变得更加简单和高效。
13.元类是什么?
在 Python 中,类是对象,而元类则用于创建这些类。元类可以控制类的创建过程,可以定义类的属性、方法以及特殊行为。通过定义元类,我们可以在创建类的时候动态地修改类的定义。
14.__next__和__iter__的作用?
next()
函数:它用于获取迭代器中的下一个元素。每次调用 next()
函数,都会从迭代器中返回下一个元素。如果迭代器耗尽,即没有更多的元素可供获取,则会抛出 StopIteration
异常
__iter__
是一个迭代器方法,用于返回一个迭代器对象。
当类的实例需要支持迭代操作时,我们可以在类中定义 __iter__
方法,使该类的实例成为可迭代对象。
15.type和isinstance区别?
type()
函数用于返回对象的具体类型,不考虑继承关系。
isinstance()
函数用于检查对象是否是指定类或其子类的实例,考虑继承关系。