2024年408真题
ul {
list-style-type: none; /* 隐藏默认的项目符号 */
}
.option {
cursor: pointer;
margin: 5px 0;
padding: 10px;
border-radius: 5px;
}
.option:hover {
background-color: #f1f1f1; /* 鼠标悬停时的效果 */
}
.selected {
background-color: #d1e7dd; /* 选中项的背景色 */
}
function toggleContent(contentId, buttonId) {
var content = document.getElementById(contentId);
var button = document.getElementById(buttonId);
if (content.style.display === "none") {
content.style.d ...
python函数
找到二维矩阵列中的最大值1max(row[j] for row in matrix)
12345matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]]
如果 j = 1(即第二列),等同于 max(2, 5, 8),结果将是 8。
TS—constructor
作用
constructor是一个构造函数,在new一个新对象的时候,一开始会使用这个函数
constructor中的this指向当前的实例对象
new传入的参数也会传递到constructor构造函数中
go-context
常用场景
传递上下文
可撤销的上下文如挖矿算法中由携程负责挖坑,挖矿时间太久即可以主携程主动取消。
异常
panic运行时错误会引起panci,如数组访问越界、空指针引用。当panic异常发生时,程序会中断运行,并立即执行在该goroutine(可以先理解成线程)中被延迟的函数(defer 机制)
recoverrecover 是一个 Go 语言的内建函数,可以让进入宕机流程中的 goroutine 恢复过来。
errorgo中的错误处理,是通过返回值的形式来出来,要么你忽略,要么你处理(处理也可以是继续返回给调用者),对于golang这种设计方式,我们会在代码中写大量的if判断,以便做出决定。
对于err如果是nil就代表没有错误,如果不是nil就代表程序出问题了,需要对错误进行处理了
fatal errormap并发读写场景会引起fatal error,这个错误将直接throw出去,即无法通过recover恢复。不能recover的函数:
panic on system stack
panic during malloc….
func
函数的参数应该传入值还是指针
如果需要修改原始数据结构,则传入指针
如果参数过大,如结构体过大,传指针会更有效率
make和new
new 和 make 都是 Go 语言中用于内存分配的原语。简单来说,new 只分配内存,make 用于初始化 slice、map 和 channel。
newnew(T) 函数是一个分配内存的内置函数,为每个类型分配一片内存,并初始化为零值且返回其内存地址。
12345func main() { var v *int //int类型的指针,&v:v的地址,v的值为nil v = new(int) *v = 8}
makemake 专门用于创建 chan,map 和 slice 三种类型的内容分配,并且可以初始化它们。make 的返回类型与其参数的类型相同,而不是指向它的指针,因为这三种数据类型本身就是引用类型。
区别
make 只能用来分配及初始化类型为 slice、map、chan 的数据;new 可以分配任意类型的数据。
new分配返回的是指针,即类型*Type,make返回引用,即Type。
make分配空间后会进行初始化
CAP理论
一个分布式系统最多只能同时满足下面三个特性中的两个:一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)
一致性:指的是所有的客户端在相同的时间点看到的是同样的数据,而不管他们连接的是哪个服务器。
可用性:指的是即便有节点发生故障,任意客户端发出的请求都能被响应。
分区容错性:分区意味着两个节点之间的通信中断。分区容错性的意思是尽管网络被分区,系统依然可以继续运行。
由于网络故障无法避免,所以分布式系统在现实世界必须容忍网络分区。
一致性哈希
背景为了实现横向扩展,在服务器之间高效和均匀地分配请求/数据是很重要的。如果你有n个服务器,常见的平衡负载的方法是使用如下哈希方法:服务器序号
若一个服务器下线,服务器池的大小就变成了3,使用同样的哈希函数,对于同一个键,我们得到的哈希值不变,但是求余操作会发生改变,这就会导致数据分布不均匀。
一致性哈希如果一个哈希表被调整了大小,那么使用一致性哈希,则平均只需要重新映射k/n个键,这里k是键的数量,n槽的数量。
基本步骤
使用均匀分布的哈希函数将服务器和键映射到哈希环上
要找出某个键被映射到了哪个服务器上,就从这个键的位置开始顺时针查找,直到找到哈希环上的第一个服务器。
好处
添加或移除服务器时,需要重新分配的键最少。
保证更容易横向扩展,数据分布更均匀。(引入虚拟节点)
减轻了热点key问题。(引入虚拟节点)
索引
索引的分类
按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。
按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。
按「字段个数」分类:单列索引、联合索引。
索引失效
当我们使用左或者左右模糊匹配的时候,也就是 like %xx 或者 like %xx%这两种方式都会造成索引失效;
当我们在查询条件中对索引列使用函数,就会导致索引失效。
当我们在查询条件中对索引列进行表达式计算,也是无法走索引的。
MySQL 在遇到字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较。如果字符串是索引列,而条件语句中的输入参数是数字的话,那么索引列会发生隐式类型转换,由于隐式类型转换是通过 CAST 函数实现的,等同于对索引列使用了函数,所以就会导致索引失效。
联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引失效。
在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。
参考什么是索引 ...