什么是goroutine?

Goroutine是Go语言中的轻量级线程,可以轻松地实现并发编程。Goroutine的调度是由Go语言运行时(runtime)进行管理的,可以自动地在多个线程之间分配任务。

协程为什么快

添加链接描述
添加链接描述
添加链接描述

什么是Go语言的协程(goroutine)?它与线程的区别是什么?

协程是一种轻量级的线程,它由Go语言内置的调度器进行管理。与传统的线程相比,协程的优势在于其轻量级、高效等特点。在Go语言中,通过关键字go可以启动一个协程,它会自动地被调度器管理。协程之间的切换由调度器自动完成,无需用户手动干预。与传统线程不同,协程可以在不同的时间点进行中断和恢复,从而实现更灵活的并发。

什么是通道?

通道是一种在goroutines之间进行通信的机制,用于通过传输数据来同步两个或多个goroutine的执行。通道可以阻塞等待数据到来或被读取,提供了一种可靠的同步和数据传输方式。

如何优化goroutine的性能?

为了优化goroutine的性能,可以使用有缓冲的通道、池化技术和调整goroutine数量等方式。有缓冲的通道可以减少通道的阻塞等待,池化技术可以减少goroutine的创建和销毁的开销,适当调整goroutine数量可以获得更好的并发性能。

避免创建过多的goroutine,可以通过池化技术来重用goroutine。
避免goroutine的阻塞,可以使用非阻塞的IO操作、使用带缓冲的通道、使用超时机制等方式来避免阻塞。
避免共享变量的竞争,可以使用sync包中的工具、使用原子操作、使用通道等方式来避免竞争。
避免过度调度,可以使用runtime包中的GOMAXPROCS函数来设置协程的最大数量,避免过度调度导致性能下降。
避免使用过多的锁,可以使用无锁数据结构、使用读写锁等方式来减少锁的竞争。

解释Go中race condition问题?

Race condition是指多个goroutine同时访问共享资源时可能会导致数据竞争和不确定的结果。在Go语言中可以使用互斥锁、条件变量和原子操作等机制来避免race condition的问题。

解释Go中的select语句?

Select语句是Go语言中用于选择、执行可以操作通道的多个goroutines语句。当多个通道可读或可写时,使用select语句可以从中选择一个通道执行操作,从而避免了嵌套的if-else语句和复杂的控制流程。

select语句是Go语言中用于处理多路复用的工具,可以监视多个通道的状态,哪个通道有数据就从哪个通道中读取数据。
select语句由多个case语句组成,每个case语句对应一个通道的读取操作。当有多个通道都有数据时,select语句会随机选择一个通道读取数据。如果所有通道都没有数据,select语句会阻塞等待,直到有数据可读。
select语句可以用于实现超时控制、取消操作等场景,是Go语言中非常重要的语言特性之一。

解释mutex和rwmutex?

mutex是一种互斥锁,只能由一个协程持有,防止数据在多个协程间同时被修改而发生竞争问题。mutex基于操作系统的原子操作实现,因此效率较高,但只能用于单写多读的场景。在Go语言中,mutex可以通过sync包中的Mutex结构体来实现。
rwmutex是读写锁,允许多个协程同时读数据,但只能由一个协程写数据。读写锁通过读写锁计数器实现,读取时增加计数器,写入时需要等待计数器清零。在Go语言中,读写锁可以通过sync包中的RWMutex结构体来实现。

请解释WaitGroup?

WaitGroup是Go语言中用于等待一组协程执行完成的工具,可以用来同步协程之间的执行。WaitGroup包含一个计数器,当计数器的值为0时,表示所有协程已经执行完成,可以继续执行下一步操作。每个协程执行前需要调用Add方法增加计数器的值,执行完成后需要调用Done方法减少计数器的值。主协程通过调用Wait方法来等待计数器的值变为0。

Golang标准库中map的底层数据结构是什么样的

添加链接描述
添加链接描述

Golang的map发生并发写会怎样?

golang 自带的map不是并发安全的,并发读写会报错
如果有并发场景需要自己加锁,或者使用sync包里的Map。

map查询时间复杂度如何分析

极端情况下有很多哈希冲突,Golang标准库如何去避免最坏的查询复杂度
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Golang map Rehash的策略是怎样的?什么时机会发生Rehash

Rehash具体会影响什么?哈希结果会受到什么影响
Rehash过程中存放在旧桶的元素如何迁移
添加链接描述

并发环境共享同一个map是安全的吗

不安全
加锁存在什么问题呢
sync.Map比加锁的方案好在哪里,底层数据结构什么样

如果想实现map线程安全,有两种方式:
方式一:使用读写锁 map + sync.RWMutex

方式二:使用golang提供的 sync.Map

sync.Map是用读写分离实现的,其思想是空间换时间。和map+RWLock的实现方式相比,它做了一些优化:可以无锁访问read map,而且会优先操作read map,倘若只操作read map就可以满足要求(增删改查遍历),那就不用去操作write map(它的读写都要加锁),所以在某些特定场景中它发生锁竞争的频率会远远小于map+RWLock的实现方式。
  添加链接描述
  添加链接描述
  添加链接描述

map并发读写
添加链接描述

sync.Map

添加链接描述

Map的panic能被recover掉吗?了解panic和recover的机制吗

实际上不可以,看下map并发读写抛出的是很美,是不是普通的panic
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

添加链接描述

sync.Map使用场景

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Map怎么知道自己处于竞争状态?是Go编码实现的还是底层硬件实现的?

通过结构体中的标志位实现的,可能是通过cas操作的

添加链接描述
添加链接描述

CAS具体怎么实现的

CAS,存在什么问题

添加链接描述
添加链接描述
添加链接描述

请解释Go语言的堆栈大小?

Go语言的堆栈大小是由编译器自动分配的,通常为2MB。堆栈用于存储协程的局部变量和函数调用信息,每个协程都有自己的堆栈。
如果协程的局部变量太多或函数调用层数太深,可能会导致堆栈溢出。为了避免堆栈溢出,可以使用defer关键字延迟函数执行、使用尾递归等方式优化函数调用,或者通过runtime包中的SetStackMin函数来设置堆栈的最小大小。

添加链接描述
添加链接描述

请解释atomic包?

添加链接描述
添加链接描述
添加链接描述

golang:实现并发控制的方法有哪些?比如waitGroup、context、channel,他们之间的区别和特点?

context如何实现的并发控制?具体怎么用?
添加链接描述
添加链接描述
添加链接描述
添加链接描述

请解释context包?

Go 的 Context 的数据结构包含 Deadline,Done,Err,Value,Deadline 方法返回一个 time.Time,表示当前 Context 应该结束的时间,ok 则表示有结束时间,Done 方法当 Context 被取消或者超时时候返回的一个 close 的 channel,告诉给 context 相关的函数要停止当前工作然后返回了,Err 表示 context 被取消的原因,Value 方法表示 context 实现共享数据存储的地方,是协程安全的。context 在业务中是经常被使用的
其主要的应用 :

1:上下文控制,2:多个 goroutine 之间的数据交互等,3:超时控制:到某个时间点超时,过多久超时。
添加链接描述
添加链接描述

golang string是线程安全的吗?

原文添加链接描述

Golang的make和new的区别和用法?

添加链接描述
添加链接描述

golang发生panic退出时,实际上发生了什么

添加链接描述
添加链接描述
添加链接描述
添加链接描述

golang的panic和error的区别和使用场景?发生panic如何捕获?捕获的范围是怎样的?

添加链接描述
添加链接描述
添加链接描述

GOMAXPROCS为什么设置的是P的数量?

添加链接描述
添加链接描述

golang 原生包json的序列化和反序列化有什么问题和坑点吗?

添加链接描述
添加链接描述
添加链接描述

GMP是怎么调度,channel是怎么收发消息的,channel的recq和g是怎么建立关系的

golang的GMP模型?M的数量有限制吗?P的数量?

gc算法有哪些

gc是在清理什么内容?堆还是栈?具体干了啥?

可达性分析
判断gcroots的原则是什么

golang切片的扩容机制

添加链接描述
添加链接描述

读程序写结果

x := []int{1, 2, 3}
y := x[:2]
fmt.Println(len(y), cap(y)) //2 3
y = append(y, 50)
y = append(y, 60)
fmt.Println(x)
y[0] = 101
fmt.Println(x)
结果:
[1 2 50]
[1 2 50]

func main() {
aaa := make([]int, 2, 4)
test(aaa)
fmt.Println(aaa) //[100 0]
}
func test(slice []int) {
slice = append(slice, 1)
slice = append(slice, 2)
slice[0] = 100
fmt.Println(“1”, slice) // [100 0 1 2]

slice = append(slice, 3)
fmt.Println("3", slice) // [100 0 1 2 3]slice[0] = 200

}

func main() {
aaa := make([]int, 2, 4)

fmt.Println(aaa) //[0 0]
aaa = append(aaa, 1)
aaa = append(aaa, 2)
fmt.Println(aaa) //[0 0 1 2]
bbb := aaa
aaa[0] = 100
fmt.Println(aaa) //[100 0 1 2]
fmt.Println(bbb) //[100 0 1 2]
aaa = append(aaa, 3)
aaa = append(aaa, 4)
aaa[1] = 200
fmt.Println(aaa) //[100 200  1 2 3 4]
fmt.Println(bbb) //[100 0 1 2]

}

func main() {
a := make([]int, 3)
b := a
fmt.Printf(“address of slice %p \n”, &a) //address of slice 0xc0000a4018
fmt.Printf(“address of slice %p \n”, &b) //address of slice 0xc0000a4030
}

gin的内核与原理,所以说http.Request使用时语言注意什么?

1.gin框架路由使用前缀树,路由注册的过程是构造前缀树的过程,路由匹配的过程就是查找前缀树的过程。
2.gin框架的中间件函数和处理函数是以切片形式的调用链条存在的,我们可以顺序调用也可以借助c.Next()方法实现嵌套调用。
3.借助c.Set()和c.Get()方法我们能够在不同的中间件函数中传递数据。
原文添加链接描述

前缀树

谈谈内存泄露,什么情况下内存会泄露?怎么定位排查内存泄漏问题?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

golang,map,channel,用channel实现一个锁?实现一个并发安全map?数据库,熟悉底层吗?索引结构,数据库索引为什么是自增健?消息队列,怎么保证有序的?redis,熟悉底层吗?渐进式map了解吗?了解管道吗?

channel实现读写锁
添加链接描述
添加链接描述

添加链接描述
添加链接描述
添加链接描述

Go 语言中不同的类型如何比较是否相等

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Go 中 uintptr 和 unsafe.Pointer 的区别

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

golang java python GC 对比

添加链接描述
添加链接描述
添加链接描述

解释型语言和编译型语言的区别?除了运行速度别的角度?生产效率?

添加链接描述
添加链接描述
添加链接描述

快排的原理;数组(奇数偶数)对于快排的影响,快排的空间复杂度

快速排序的时间复杂度,什么时候是性能最优的
原理:添加链接描述
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分所有数据都比另一部分所有数据小,再按此方法对这两部分数分别进行快排(递归),使整个数据变为有序序列
时间复杂度:O(nlogn) ,不稳定的排序算法

package main
import("fmt"
)
func main(){arr := []int{7,5,4,12,78,8,9,6,10,1,11}// arr := []int{5,3,2}fmt.Println("排序前数组:", arr)arr1 := quickSortFunc(arr, 0, len(arr)-1)fmt.Println("排序后数组:", arr1)
}func quickSortFunc(arr []int, start int, end int) []int{if start < end{i,j := start, endindex := arr[(start+end)/2]for i<=j {for arr[j] > index{j--}for arr[i] < index{i++}if i <= j{arr[i],arr[j] = arr[j], arr[i]i++j--}}if start < j{ //向左递归quickSortFunc(arr, start, j)}if end > i {//向右递归quickSortFunc(arr, i, end)}}return arr
}

快排的问题
添加链接描述
添加链接描述
添加链接描述
添加链接描述

归并排序的应用场景、空间复杂度,又是多少?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

手写堆排序

堆排序原理,如何在o(N)复杂度下建好堆
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Mysql引擎,索引,b+树的结构,为什么b+树查询速度快

mysql索引?为什么用b+树?最左匹配?

b+树是怎么组织数据的,数据的顺序一定是从左到右递增的么

MyISAM 和 InnoDB 的区别
添加链接描述
Innodb索引
添加链接描述
b+树的结构
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
为什么b+树查找速度快
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

b和b+树的区别

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

数据库自增主键可能的问题

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

select * 会有什么问题

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

聚簇索引和非聚簇索引区别

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

事务的隔离级别,分别解决的哪些问题

mysql隔离级别?可重复读是否解决了幻读问题?

Mysql事物的级别,哪种隔离级别会导致幻读

MySQL的事务隔离级别?每个级别如何实现的?

幻读举个例子

innodb如何解决幻读

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

MySQL索引的数据结构,为啥B+树,不是B树?

b+树节点具体存的是什么

b+树什么样子为什么能实现范围查找

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

MySQL的日志有哪些?分别如何工作的?

MySQL的Redo Log和binLog的写入顺序?

redo-log、undo-log原理

undo里面具体存的是什么

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

MySQL server端命令用过什么

添加链接描述
添加链接描述
添加链接描述

Mysql一页最大能存多少数据

添加链接描述
添加链接描述
添加链接描述

数据库的事务是怎么实现的?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

MySQL两列,一列id一列A,范围查询A和id,哪个快?

我说id是主键,对应聚簇索引,包含整行数据,想要整行数据id快。如果只想要A的值,查询A快,通过A索引直接索引覆盖,就得到A单列数据了,但是通过聚簇索引的话会返回整行数据就会慢一些。

MVCC的实现原理

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

MySQL的版本、事务隔离级别,串行化的使用场景

mysql版本
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

串行化场景
添加链接描述

数据库的ACID讲一下

ACID一致性如何保证?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

读锁和写锁区别

添加链接描述
添加链接描述
添加链接描述

回表是什么

添加链接描述
添加链接描述
添加链接描述
添加链接描述

MySQL把2000W规模数据库内备份、库间备份的方式

添加链接描述
添加链接描述
添加链接描述

MySQL建表时,不指定主键,能否建表成功?

添加链接描述
添加链接描述
添加链接描述

Myisam和Innodb索引上的区别

添加链接描述
添加链接描述
添加链接描述
添加链接描述

可重复读Innodb怎么实现的,Innodb有哪些索引,怎么建立的

可重复读怎么实现的
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

mysql的索引有哪些?innodb和其他myisam等引擎的区别

innodb与myisam区别及对应的使用场景

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

其他区别
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

外键的优缺点

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

一千万数据大概多少次io

添加链接描述
添加链接描述
添加链接描述

索引为什么能加快查询效率

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

乐观锁悲观锁互斥锁以及读写锁

乐观锁悲观锁区别?乐观锁如果出现了并发冲突一般怎么解决?(重试)自旋锁?(思路相似)

乐观锁悲观锁 乐观锁的锁机制(版本控制)

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

插入sql会使用到那些锁

添加链接描述

你们建表会定义自增id么,为什么,自增id用完了怎么办

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

主从复制延时怎么解决

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

SQL优化,优化方案,以及实际的优化

慢查询如何解决,索引优化

Mysql优化手段有哪些

慢查询怎么优化

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

一条sql执行慢如何处理?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

innodb为什么并发读取性能高

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

MySQL给你个SQL如何调优,有什么思路?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

1000万的db数据分页怎么处理?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

是否有遇到过锁表,说一次锁表的原因与如何解决的过程

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

数据库分库分表,横向与纵向的优缺点,横向分表后又该如何查询多表数据

分库分表

分表策略

聊一聊数据库分库分表,横向与纵向的优缺点,横向分表后又该如何查询多表数据

怎么分库分表才能均匀

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

如何预估一个mysql语句的性能

添加链接描述
添加链接描述
添加链接描述
添加链接描述

数据库会死锁吗,举一个死锁的例子mysql怎么解决死锁

mysql死锁问题排查思路

什么情况下产生死锁,怎么排查,怎么解决

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

mysql删除数据,是立马就删除了吗

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

mysql主从复制原理及常见问题和解决方案

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

mysql order by底层排序算法

添加链接描述
添加链接描述
添加链接描述
添加链接描述

间隙锁是什么,具体什么时候会加锁

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

MySQL怎么分页Offset过大有什么问题,怎么解决?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

mysql多事物执行会产生哪些问题,怎么解决这些问题

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

MySQL数据库表数据量级

MySQL的使用的什么模式?主从还是集群模式?
添加链接描述
添加链接描述
添加链接描述
添加链接描述

插入一条数据发生了什么

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Left join是怎么执行的

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

mysql数据量过大怎么办

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

mysql多表联查的内连接外连接,join属于什么
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

文章下面的评论,按点赞数排序,SQL 怎么写

添加链接描述

把所有评论放到内存里,怎么设计数据结构,存储并排序

添加链接描述

where a > 1 and b = 2 and c<3怎么建立索引

拿bac和bca建立索引有什么区别吗

MySQL有一个SQL,A、B建立了联合索引,查询A=‘aaa’ 会用到索引吗? 查询A != ‘xxx’ 呢?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

为什么有了MVCC还需要行级锁

limit(500,1000),什么样的原理?怎么优化?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

关系型数据库和非关系型数据库的区别

关系型数据库直接的差别是什么
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Mysql的索引对比

mysql的索引类型 普通索引 主键 唯一索引 组合索引 全文索引 各自区别

索引作用优缺点

  1. 主键索引(Primary Key Index):主键索引是一种唯一索引,用于唯一标识一条记录。它是一种聚簇索引,数据行存储在主键索引的叶子节点上。主键索引可以提高查询速度和数据检索的效率。与其他索引相比,主键索引的查询速度最快,但它的缺点是它只能有一个主键。
  2. 唯一索引(Unique Index):唯一索引是一种索引,它确保索引列的值是唯一的。与主键索引不同,唯一索引允许 NULL 值。唯一索引的查询速度比普通索引快,但比主键索引慢一些。
    3.普通索引(Normal Index):普通索引是最常见的索引类型。它可以加速查询,但不会强制要求唯一性或非空。普通索引可以用来加速 WHERE、JOIN 和 ORDER BY 子句。与唯一索引和主键索引相比,普通索引的查询速度较慢。
  3. 组合索引(Composite Index):组合索引是一种包含多个列的索引。它可以提高查询速度,尤其是在多个列上进行查询时。组合索引的查询速度比普通索引快,但比主键索引和唯一索引慢。
    总的来说,索引的类型和使用方式取决于具体的业务需求和数据结构。在设计索引时,需要考虑查询的频率、数据的大小、数据的更新频率等因素。

MySQL单表数据到达2000w,为什么就需要考虑分表?

Mysql数据为啥在千万级别会有性能问题?为啥不是百万级别?

数据量太大的话,SQL的查询就会变慢。如果一个查询SQL没命中索引,千百万数据量的表可能会拖垮这个数据库。
即使SQL命中了索引,如果表的数据量超过一千万的话,查询也是会明显变慢的。这是因为索引一般是B+树结构,数据千万级别的话,B+树的高度会增高,查询就变慢啦。
在InnoDB存储引擎中,B+树的高度一般为1-3层,就可以满足千万级数据的存储。
原文:添加链接描述

如何优化mysql的查询效率

原文添加链接描述

设计一个redis的存储,怎么能高访问量,且不丢失,还快

redis为什么会快

redis优点(为什么更快)基于内存,速度优于磁盘、网络模块单线程操作、I/O多路复用

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis运行在16核跟32核的机器上,性能有区别吗?

添加链接描述

Redis的持久化的方式?AOF是具体是怎样持久化日志的?RDB呢?用户反复修改一个数据,会怎样?AOF会不会膨胀?

Redis的持久化的方式?AOF和RDB是什么?结合实际思考有什么优缺点?

rdb:
bgsave会异步的执行备份,其实是fork出了一个子进程,用子进程去执行快照持久化操作,将数据保存在一个.rdb文件中。

子进程刚刚产生的时候,是和父进程共享内存中的数据的,但是子进程做持久化时,是不会修改数据的,而父进程是要持续提供服务的,所以父进程就会持续的修改内存中的数据,这个时候父进程就会将内存中的数据,Copy出一份来进行修改。

AOF重写:
AOF日志文件,随着时间的推移,会越来越大,所以就需要进行重写瘦身。AOF重写的原理就是,fork一个子进程,对内存进行遍历,然后生成一系列的Redis指令,然后序列化到一个新的aof文件中。然后再将遍历内存阶段的增量日志,追加到新的aof文件中,追加完成后立即替换旧的aof文件,这样就完成了AOF的瘦身重写。

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

写时复制是如何实现的,原理

添加链接描述
添加链接描述
添加链接描述

主从复制原理

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

缓存热 key 怎么解决

缓存热key怎么办

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

内存淘汰策略

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis单线程吗?为什么这么设计

redis是单线程还是多线程;slot听说过吗?跳表知道吗?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis的事物怎么处理的,怎么保证事物之间互不影响

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Keys命令存在的问题

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

redis的hashtable是怎么扩容的

Hash的扩容

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

redis数据结构原理

Redis各数据结构实现原理

Redis的数据结构和底层实现,各自应用场景

Redis常见的数据结构,Zset的实现,为什么跳表?

redis的set底层什么时候是hash,什么时候是跳表

跳表具体是怎么实现的

跳表每一层跳的个数

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

string和hash的存储有什么区别

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

redis实现分布式锁,存在什么问题,怎么解决

基于Redis的分布式锁

Redis怎么实现的分布式锁

Redis实现分布式锁的方案?存在的问题?使用超时解决的问题?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

哈希分区算法有哪些

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis的list用作消息队列,和Kafka相比有什么区别

Redis使用MQ做同步是否有问题?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis集群方式了解吗?用的什么方式呢?

Redis的key的过期机制,如果存储已经满了继续存会发生什么?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
内存满了继续存
添加链接描述
添加链接描述
添加链接描述
添加链接描述

redis 的expire底层实现原理

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

数据库和redis数据一致性如何保持

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

渐进式Rehash的时候会影响主流程吗

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

过期键的删除策略

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

内存淘汰策略有哪些

添加链接描述
添加链接描述
添加链接描述
添加链接描述

redis是怎么标记失效的

redis存储一个key具体做了什么

添加链接描述
添加链接描述

redis用了什么数据结构,项目里的

什么是缓存击穿?怎么避免?什么是布隆过滤器?怎么实现?过滤有还是过滤的无?

缓存穿透,访问大量不存在redis也不存在于数据库的数据

解决措施,缓存空对象、布隆过滤器
布隆过滤器的压力大怎么办

Redis:缓存雪崩

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis听过大Key吗?会有什么问题?

redis出现大key怎么解决

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

用过redis吗?redis有哪些应用场景?

Redis使用场景 订单的查询

Redis应用场景有哪些,你在项目中应用了哪些场景

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

公司的Redis的集群模式有了解吗?

是否使用过Redis集群,集群的原理是什么

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis集群如何保证一致性

Redis集群内如何实现的数据同步?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

哈希表为什么查找复杂度是常数?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis高可用的三种实现方式

添加链接描述

redis数据结构,怎么保证数据不丢失?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis的同步机制了解么

Redis怎么实现主从同步的?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis常见的部署方式有哪些

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis怎么用的,如何实现数据一致性?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis sharding有哪些做法

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

哨兵Sentinel原理

Redis哨兵机制有几个定时任务,分别是干什么的?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Pipeline有什么好处,为什么要用pipeline

添加链接描述
添加链接描述
添加链接描述
添加链接描述

Redis常见性能问题和解决方案

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

redis中有一批key瞬间过期,为什么其它key的读写效率会降低?

添加链接描述
添加链接描述
添加链接描述
添加链接描述

redis集群在扩容过程中(rehash)读写会有什么影响?

原文添加链接描述

10亿个key中判断某个key是否存在?要求:1 内存空间不能太大,2 查询流量500w qps

答:用redis的bitmap实现,通过key 进行hash下标位置
问:那你怎么完全解决hash冲突?
答:多次hash
问:那只能降低概率,但不能完全避免
跟面试官说,要精确的知道某个key是否存在,只用hash肯定搞不定,所以可以多种方案并用,前置一个布隆过滤器,加速不存在的响应速度,后续分片到不同服务器,不同分片加索引,这个方案机器够的话吞吐量没问题,但是内存不能太多可能就要具体在问了,因为要精确的一定得存储,只是存储方案问题而已。
布隆过滤器,经过多次hash判断是否该值存在,能够精确的判断该值不存在,如果过滤器说存在,可能是hash冲撞造成的。所以药进一步验证是不是真实存在,因为hash冲撞概率不高,所以验证这一步并不会很频繁。
这个,直接使用HBASE的解决方案。
1.按照字典序分为多个文件
2.每个文件中保证自身有序(可以增加布隆过滤器)
3.查询时根据字典序查找到多个匹配文件。
4.在查找匹配的多个文件中是否存在数据(先匹配布隆过滤器,在通过二分查找)
原文添加链接描述

select poll epoll,epoll具体是怎么实现的

x86:32位
x64:64位
添加链接描述

你知道有哪些进程调度策略?多级反馈队列的实现原理

添加链接描述
添加链接描述
添加链接描述
添加链接描述

深度优先遍历和广度优先遍历的区别

添加链接描述
添加链接描述
添加链接描述
添加链接描述

linux下的栈大小

添加链接描述
添加链接描述

什么情况下用堆什么情况下用栈
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

linux命令想要找到文件并执行或者删除

添加链接描述
添加链接描述
添加链接描述
添加链接描述

linux文件系统

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

Linux阻塞和非阻塞(异步IO)

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

多线程和多进程的区别

添加链接描述
添加链接描述
添加链接描述

存数据比较慢,用户想让你优化怎么办,而且用户要立刻读,所以就是不能用异步

添加链接描述

什么情况用redis什么情况用mysql

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

线程和协程的隔离程度

添加链接描述

对自动驾驶了解么 如果让你分析你怎么设计自动驾驶模块

添加链接描述
添加链接描述
添加链接描述
添加链接描述

给一个文件,输入一个单词,打印所有该文件中这个单词的兄弟单词(只是顺序不同)

添加链接描述
添加链接描述

怎么解决高并发问题

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

怎么创建子进程

父进程和子进程共享什么
添加链接描述

添加链接描述
添加链接描述
添加链接描述

tcp阻塞和非阻塞

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

内核态和用户态是什么,怎么转换

添加链接描述
添加链接描述
添加链接描述

为什么又要用cookie又要用token

session id怎么存的,以及怎么能防止被劫持

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

操作系统调度算法需要考虑哪些因素?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

cpu占用率超过100%是为什么

添加链接描述
添加链接描述
添加链接描述

linux怎么查端口号以及内存占用情况等等

添加链接描述
添加链接描述
添加链接描述

linux的control c是做什么的,按下之后系统咋实现功能的

添加链接描述
添加链接描述
添加链接描述

为什么选择json序列化

和protobuf比较json的优劣势
添加链接描述
添加链接描述
添加链接描述
添加链接描述

如果UDP发送方一直发,接受不过来会怎么样

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

rpc跟普通的http有什么区别

添加链接描述
添加链接描述
添加链接描述

http和https的区别?

Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。二者之间存在如下不同:

端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;

资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;

开销:Https通信需要证书,而证书一般需要向认证机构购买;

GET 和 POST 的区别?

添加链接描述

TCP是逻辑链接还是物理连接?

TCP连接是一条虚连接,也就是逻辑连接,而不是一条真正的物理连接。

死锁产生的必要条件?

添加链接描述
添加链接描述

OSI七层模型是哪七层,每层的作用

添加链接描述

https怎么加密的

HTTPS的原理?非对称加密和对称加密?(RSA、AES和证书的原理)

添加链接描述
添加链接描述
添加链接描述

DNS是怎么做解析的

添加链接描述

telnet命令是哪层的命令?

应用层
添加链接描述

拥塞控制和流量控制怎么实现的?具体讲一下

滑动窗口在计网中的应用

添加链接描述

XSS攻击知道吗?怎么防止?

添加链接描述
添加链接描述
添加链接描述
添加链接描述

DDOS攻击实现原理?怎么防护?


添加链接描述

csrf

添加链接描述
添加链接描述
添加链接描述
添加链接描述

TCP 粘包怎么解决

添加链接描述
添加链接描述
添加链接描述
添加链接描述

为什么不能是三次挥手?握手和挥手过程中的状态

添加链接描述
添加链接描述
添加链接描述# time_wait的为什么是2msl,close_wait的作用,time_wait过多怎么办
添加链接描述
添加链接描述
添加链接描述

HTTP的header,request,response,你知道的有哪些部分

content-type,content-length各自是什么含义?
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

http请求头、分隔符、长连接怎么实现

添加链接描述

tcp四次挥手,为什么需要中间那个FIN-WAIT-2这个过程

添加链接描述
添加链接描述

TCP四次握手中CLOSE_WAIT状态后什么时候server端能发送FIN呢

四次挥手
添加链接描述
添加链接描述
添加链接描述

301和302错误码的含义?

浏览器输入url整个过程

(1). 浏览器查询 DNS,获取域名对应的IP地址:

(2). 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;

(3). TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;

(4). 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;

(5). 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;

(6). 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

tcp和udp的区别

TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:

TCP是面向连接的,UDP是无连接的;

TCP是可靠的,UDP是不可靠的;

TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;

TCP是面向字节流的,UDP是面向报文的;

TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;

TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;

tcp如何保证安全可靠的传输

原文添加链接描述

tcp三次握手丢包后会发生什么

第一次握手丢失
客户端发送SYN请求连接报文,如果迟迟等不到服务器的请求确认报文段,那么就会进行超时重传,具体重传几次,要看tcp_syn_retries内核参数,一般默认是5次。要注意的是,重传的请求连接报文的seq序列号字段还是之前的seq,不会重新生成哦。

第二次握手丢失
第二次握手丢失就有意思了,因为服务器发送的第二次握手是连接确认报文段,既包括对第一次握手的ACK确认,同时还有SYN字段表示要建立连接,所以第二次握手也可以成为SYN-ACK报文。所以当第二次握手丢失,客户端迟迟等不到第一次握手的确认,就会触发超时重传机制,进行超时重传;服务器等不到自己SYN连接的确认,也会进行超时重传。客户端和服务器具体的超时重传次数还是由内核参数决定。

第三次握手丢失
第三次握手丢失,此时客户端已经处于established状态了,因为它通过两次握手已经验证了自己的发送和接收能力嘛。但是此时第三次握手丢失,服务器迟迟得不到ACK报文,但是ACK报文丢失,ACK 报文是不会有重传的,当 ACK 丢失了,就由对方重传对应的报文。所以当到达服务器的超时重传时间后,服务器会超时重传第二次报文,当达到最大超时重传次数还没得到ACK报文,服务器就会断开连接。

第三次握手情况比前两种复杂一些,我们还是先从理论上分析一下。假如第三次握手客户端发送的ack包丢了,客户端是不知道的,因为只要第三次握手发出之后,客户端就认为连接已经建立了,状态变成ESTABLISHED;而服务端由于收不到第三次握手的ack包,状态依然为SYN_REVD,理论上服务端会进行重传,重传一定次数之后会释放连接。而客户端如果发送数据,服务端收到请求之后,由于不处于ESTABLISHED状态,可能认为这不是一个正常的连接,然后回个rst;如果客户端不发送数据,那可能就会hang住,只能等待keepalive超时。

为什么需要三次握手,而不是两次

1.为了避免已失效的连接报文段又到达可服务器。考虑这样一个正常的情况:

假设TCP连接是两次握手。当客户端发送了一个请求连接的报文时,由于网络原因这个报文丢失了,那么客户端一段时间内没有收到服务器的确认就会再次发送请求连接报文,这次服务器收到了,双方都建立了连接,然后数据传输,最后关闭连接。

但是考虑一下,上文中的丢失数据包若没有丢失,只是在一个网络节点长时间滞留了,这时双方都已经关闭了连接,此时服务器又收到了丢掉了的数据包请求,认为客户端又要建立连接,因为是两次握手所以服务器向客户端发送了确认报文,并变为建立连接状态。

可想而知客户端并没有发起连接所以会忽略服务器的确认,则服务端一直等待客户端发送数据,这样就浪费了服务器的资源。
2.Server端易受到SYN攻击?
服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击,SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复SYN+ACK确认包,并等待Client确认回复ACK,而这些大量的IP是不存在的,并不会向服务端发送ack确认包,所以会大量的占领半连接队列资源,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。
3.预防SYN攻击?
开启SYN cookies技术、增加最大半连接和缩短超时时间。
SYN cookies应用于linux、FreeBSD等操作系统,当半连接队列满时,SYNcookies并不丢弃SYN请求,而是通过加密技术来标识半连接状态。

在TCP实现中,当收到客户端的SYN请求时,服务器需要回复SYN+ACK包给客户端,客户端也要发送确认包给服务器。通常,服务器的初始序列号由服务器按照一定的规律计算得到或采用随机数,但在SYN cookies中,服务器的初始序列号是通过对客户端IP地址、客户端端囗、服务器IP地址和服务器端囗以及其他一些安全数值等要素进行hash运算,加密得到的,称之为cookie。当服务器遭受SYN攻击使得半连接状态队列满时,服务器并不拒绝新的SYN请求,而是回复cookie(回复包的SYN序列号)给客户端, 如果收到客户端的ACK包,服务器将客户端的ACK序列号减去1得到cookie比较值,并将上述要素进行一次hash运算,看看是否等于此cookie。如果相等,直接完成三次握手(注意:此时并不用查看此连接是否属于半连接状态队列)。

不同线程共享的是什么

线程共享的资源包括:
(1) 进程代码段

(2) 进程的公有数据(利用这些数据,线程很容易实现相互之间的通讯)

(3) 进程的所拥有资源。
原文:添加链接描述

数组和链表的比较

(1)数组的元素个数是固定的,而组成链表的结点个数可按需要增减;

(2)数组元素的存诸单元在数组定义时分配,链表结点的存储单元在程序执行时动态向系统申请:

(3)数组中的元素顺序关系由元素在数组中的位置(即下标)确定,链表中的结点顺序关系由结点所包含的指针来体现。

(4)对于不是固定长度的列表,用可能最大长度的数组来描述,会浪费许多内存空间。

(5)对于元素的插人、删除操作非常频繁的列表处理场合,用数组表示列表也是不适宜的。若用链表实现,会使程序结构清晰,处理的方法也较为简便。

例如在一个列表中间要插人一个新元素,如用数组表示列表,为完成插人工作,插人处之后的全部元素必须向后移动一个位置空出的位置用于存储新元素。

对于在一个列表中删除一个元素情况,为保持数组中元素相对位置连续递增,删除处之后的元素都得向前移一个位置。如用链表实现列表.链表结点的插人或删除操作不再需要移动结点,只需改变相关的结点中的后继结点指针的值即可,与结点的实际存储位置无关。
原文:添加链接描述
添加链接描述
数组地址连续的优点:
数组的优点:数组的“连续”特征决定了它的访问速度很快,因为它是连续存储的,所以这就决定了它的存储位置就是固定的,因此它的访问速度就很快。
数组的缺点:缺点它对内存的要求比较高,必须要找到一块连续的内存才行。

服务端的连接数_上限由什么决定,如何解决上限问题

TCP服务端,需要的只是一个监听端口,无论多少客户端连接上来,始终都是这个端口对外。服务端accept返回的socket只是通过客户端的ip跟端口来区分TCP连接的。
所有客户端的数据都是通过那个监听端口获取的。这个是操作系统底层的实现,抽象出来就是服务端只需要一个端口。所以理论上的最大连接数会非常大,ip * 端口数。
但是由于系统会受到内存等因数的限制,到不了这个数字。
客户端才与端口数有关,一般系统的端口数是0-65535.实际上可以绑定的端口只有1024-65535,因为0-1024被系统预定了。所以客户端可以绑定的端口数会更少。
总结:
TCP可以支持的最大连接数可以认为无上限,只是受到服务器配置影响。客户端才会受端口数影响,因为每个客户端发起连接时都需要绑定端口。
原文:添加链接描述

内存惰性分配是如何实现的,原理

当进程向系统申请分配内存时,操作系统采取的是惰性分配的策略,即系统会快速回应需要内存的进程表示你的申请是有效的,但此时并不会为该进程真正分配出内存空间,而是在该进程真正使用到这段内存时才真正分配,这就是惰性分配思想。操作系统采取惰性分配的好处个人认为如下:
避免某些进程空占着内存资源。有些进程在初始化时就先分配了大量内存,但这些内存空间也许要等到某些条件触发时才会利用上,也有可能到进程退出时也用不到这些内存,因此为了保证内存的使用率,惰性分配很有必要。以一个“延时满足”的思想解决了内存消耗过快的问题。
添加链接描述
添加链接描述
添加链接描述

操作系统内存模型

添加链接描述
添加链接描述
添加链接描述

虚拟地址的作用是什么

添加链接描述
添加链接描述
添加链接描述
添加链接描述

介绍一下文件系统,谈谈理解

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

工作中那些地方使用过多线程,哪些场景,以及开启线程和线程配置,线程池的使用

多线程怎么实现的

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

系统设计

一、性能
指标:

响应时间
吞吐量
并发用户数
性能优化方案:

集群
缓存
异步
二、伸缩性
指不断向集群中添加服务器来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。

三、扩展性
指的是添加新功能时对现有系统的其它应用无影响,这就要求不同应用具备低耦合的特点。

四、可用性
保证可用性方案:

冗余
监控
熔断限流降级
五、安全性

java、python、go的区别和各自的优势

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

页面置换?淘汰算法?LRU用基础数据结构的实现思路?

页面置换算法
1.最佳置换算法
每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
最佳置换算法可以保证最低的缺页率,但是实际上,只有进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面的访问序列。因此,最佳置换算法是无法实现的。
2.先进先出置换算法(FIFO)
算法思想:每次选择淘汰的页面是最早进入内存的页面。
FIFO算法虽然实现简单,但是该算法与进程实际运行时的规律不适应。因为先进入的页面也有可能最经常被访问。算法性能差。
当为进程分配的物理块数增大时,缺页次数不减反增的异常现象称为贝莱迪(Belay)异常。只有FIFO算法会产生Belay异常。
3.最近最久未使用置换算法(LRU,Least Recently Used)
算法思想:每次淘汰的页面是最近最久未使用的页面。
实现方法:赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t。当需要淘汰一个页面时,选择现有页面中t最大的页面,即最近最久未使用。
4.时钟置换算法
最佳置换算法那性能最好,但无法实现。先进先出置换算法实现简单,但是算法性能差。最近最久未使用置换算法性能好,是最接近OPT算法性能的,但是实现起来需要专门的硬件支持,算法开销大。时钟置换算法是一种性能和开销均平衡的算法。又称CLOCK算法,或最近未用算法(NRU,Not Recently Used)
简单CLOCK算法算法思想:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某个页被访问时,其访问位置1.当需要淘汰一个页面时,只需检查页的访问位。如果是0,就选择该页换出;如果是1,暂不换出,将访问位改为0,继续检查下一个页面,若第一轮扫描中所有的页面都是1,则将这些页面的访问位一次置为0后,再进行第二轮扫描(第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK算法选择一个淘汰页面最多会经过两轮扫描)。
5.改进型的时钟置换算法
简单的时钟置换算法仅考虑到了一个页面最近是否被访问过。事实上,如果淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有淘汰的页面被修改过时,才需要写回外存。
因此,除了考虑一个页面最近有没有被访问过之外,操作系统还需要考虑页面有没有被修改过。
改进型时钟置换算法的算法思想:在其他在条件相同时,应该优先淘汰没有被修改过的页面,从而来避免I/O操作。
为了方便讨论,用(访问位,修改位)的形式表示各页面的状态。如(1,1)表示一个页面近期被访问过,且被修改过。
算法规则:将所有可能被置换的页面排成一个循环队列
由于第二轮已将所有的页的访问位都设为0,因此第三轮、第四轮扫描一定会选中一个页,因此改进型CLOCK置换算法最多会进行四轮扫描。

添加链接描述
添加链接描述
添加链接描述

淘汰算法
redis 使用的方式就是“惰性淘汰+定期淘汰”
添加链接描述
添加链接描述

LRU用基础数据结构的实现思路
添加链接描述
添加链接描述
添加链接描述

信号是什么?用过吗?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

常见的OOM现象,以及如何解决

添加链接描述
添加链接描述
添加链接描述

一堆文件中怎么找到最大的10000个数(top K问题)

添加链接描述
添加链接描述
添加链接描述
添加链接描述

接口设计

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

websocket的协议体

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

断点续传的原理,我回答的太简单了, 后面反问才知道想让深入讲HTTP的断点续传 如何实现

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

设计一个支付系统,如支付宝,方案对比

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

设计一个kv数据库,各个组成部分如何实现

添加链接描述
添加链接描述

RBAC控制方案你觉得好在哪里,注意事项,核心要点讲讲;

添加链接描述
添加链接描述

聊了ChatGPT,有没有用来写代码,对这个工具怎么看待

添加链接描述
添加链接描述
添加链接描述
添加链接描述

实现简单令牌桶算法,没有考虑时间滑动的情况

加强版:令牌桶,加上时间滑动的要求,即:限制用户在任一连续的一小时内,不能超过5w的请求
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

设计微博

添加链接描述
添加链接描述
添加链接描述
添加链接描述

如果让你设计一个数据库,你会怎么设计

添加链接描述
添加链接描述
添加链接描述

k8s原理

添加链接描述
添加链接描述
添加链接描述

设计一个秒杀系统,一层层展开

原文https://blog.csdn.net/zhanghe_zht/article/details/130270623?spm=1001.2014.3001.5501
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

了解哪些后端框架

工作中使用的框架

Gin:一个知名且简约的Golang Web应用框架。Gin 是 Go语言写的一个 web 框架,它具有运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json。该框架拥有各种开发所需的库和功能。许多知名的开发公司都会采用该Web框架,来处理各种监控、跟踪、以及调试等问题。此外,相对其他平台,该框架还具有如下特点:
该框架非常适合构建出高性能的REST API。
它使用HTTP路由器,来管理Golang流量。
它使用简单的设计规则,并提供精确的文档。
Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API,性能要好得多,多亏了 httprouter,速度提高了 40 倍。 如果您需要性能和良好的生产力,您一定会喜欢 Gin。
特性
快速:基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。
支持中间件:传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 例如:Logger,Authorization,GZIP,最终操作 DB。
Crash处理:Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic!
Json验证:Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。 路由组 更好的组织路由。是否需要授权,不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。 错误管理 Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它们写入日志文件,数据库并通过网络发送。 内置渲染 Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API 可扩展性

Gorm框架:
Gorm框架是一个基于Golang的ORM框架,它支持多种数据库,包括MySQL、PostgreSQL、SQLite、SQL Server等。Gorm框架提供了类似于Active Record的API,使得程序员可以通过简单的代码完成对数据库的操作。

Gorm框架还支持事务处理、预加载、关联查询等高级功能。同时,Gorm框架还支持数据库迁移和表结构自动生成等功能,方便程序员进行数据库的管理和维护。

由于Gorm框架的高效性和易于使用的特点,使得它在Golang开发中得到了广泛的应用。

Grpc框架:
添加链接描述
添加链接描述

在以前的公司最大的收获是什么

添加链接描述

在命令行输入kill pid的时候,发生了什么?

添加链接描述
添加链接描述

你来设计一个对文档中敏感词的检测服务,说说你的思路。(建字典树,将敏感词存在字典树里。)

你怎么做字典树的持久化呢?(把敏感词存储在mysql里,每次重启服务,从mysql中读取敏感词,重新建树。)
那你怎么解决一致性问题呢?有可能不只一个服务器在提供这个服务。

消息队列场景

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

如何解决高流量高并发的问题

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

对于分布式数据库,可以将数据库做什么操作(我用的是分片,比如燃气库根据地区进行分片,数据多的再分片,数据少的进行合并)

给一个ID,如何从分片的数据库中去找到自己想要的数据(如何确定数据在分片的哪个表)我想的是可以配置规则(类似路由表)
分布式数据库:
一个分布式数据库在逻辑上是一个统一的整体,在物理上则是分别存储在不同的物理节点上。一个应用程序通过网络的连接可以访问分布在不同地理位置的数据库。它的分布性表现在数据库中的数据不是存储在同一场地。更确切地讲,不存储在同一计算机的存储设备上。这就是与集中式数据库的区别。从用户的角度看,一个分布式数据库系统在逻辑上和集中式数据库系统一样,用户可以在任何一个场地执行全局应用。就好像那些数据是存储在同一台计算机上,有单个数据库管理系统(DBMS)管理一样,用户并没有什么感觉不一样。
添加链接描述
添加链接描述
添加链接描述
添加链接描述

一个RPC框架最少应该包含什么(说了Dubbo的组成部分,然后说了spring cloud的额外功能),如何设计一个框架

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

项目中用到了什么设计模式?

设计模式,组合模式和装饰器模式,应用场景

代理模式和装饰者模式有啥区别

原文添加链接描述
代理模式
添加链接描述
装饰器模式
https://www.yuque.com/aceld/lfhu8y/nzlggd

solid原则都是什么

添加链接描述
添加链接描述
添加链接描述
添加链接描述

设计模式

面向对象设计原则


高内聚低耦合
耦合越弱越好,内聚越高越好
耦合指模块之间的关系,最弱的耦合就是通过一个主控模块来协调几个模块进行运作
内聚指的是模块内部的功能,最强的就是功能不能拆分,也就是原子化

简单工厂模式、工厂方法模式、抽象工厂方法模式、单例模式

添加链接描述
添加链接描述
添加链接描述
添加链接描述

微服务的理解,优劣势

添加链接描述

服务拆分的原则及实践

原文添加链接描述
添加链接描述

给你一个这样的需求,一个用户可以看到自己发布的所有帖子,怎么建立索引?

如何应对大流量保证服务的稳定性

添加链接描述
添加链接描述
添加链接描述

kafka的全局策略

Kafka的partition和block

Kafka有哪些技术特点,系统讲一讲

Kafka如何保证消息的有序消费?

添加链接描述
添加链接描述




Kafka消息堆积处理方案

添加链接描述
添加链接描述

幂等性

所谓的幂等性,是分布式环境下的一个常见问题,一般是指我们在进行多次操作时,所得到的结果是一样的,即多次运算结果是一致的。
也就是说,用户对于同一操作,无论是发起一次请求还是多次请求,最终的执行结果是一致的,不会因为多次点击而产生副作用。

kafka 如何不消费重复数据?比如扣款,我们不能重复的扣。

这个问题换种问法,就是kafka如何保证消息的幂等性。对于消息队列来说,出现重复消息的概率还是挺大的,不能完全依赖消息队列,而是应该在业务层进行数据的一致性幂等校验。

比如你处理的数据要写库(mysql,redis等),你先根据主键查一下,如果这数据都有了,你就别插入了,进行一些消息登记或者update等其他操作。另外,数据库层面也可以设置唯一健,确保数据不要重复插入等 。一般这里要求生产者在发送消息的时候,携带全局的唯一id。

项目中:

写程序, 统计字符串字母出现的次数,试着改为并发的方式呢?

type LetterFreq map[rune]int
func LetterCount(strs []string) LetterFreq {}

查询接口调优,不能用缓存,要求实时性,怎么调优?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

现在用户要查询一张表,当流控降级时,兜底方案应该是怎么样的?

用户下订单,订单按什么字段分表?分表
之后,如果想按照某个时间段查询指定时间
段内的所有用户的订单怎么办?
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

讲一下限流有什么具体的实现方案?

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

设计题:设计一个短连接服务,尽可能多的说出能想到东西

https://www.bilibili.com/video/BV1dy4y1E7A3/?spm_id_from=333.880.my_history.page.click&vd_source=0eaaad564f92d5c0b11b6c9639d86d38
https://blog.csdn.net/weixin_43247186/article/details/86678589
添加链接描述

项目数据库表怎么设计的.

表结构设计主要有两个目的,一是让表结构更加的更具有表现力,做到数据库表的自描述,减少注释甚至不使用注释;二是满足系统效率和扩展性的需要,让系统性能更好,后期维护更简单。
添加链接描述
添加链接描述


你怎么返回数据给前端

在项目开发中统一封装Api数据格式返回给前端这是最基本和常见的。

群聊是怎么实现的 # 设计一个聊天室系统,一步步展开

成员太多I0占用很多业务,这时候怎么优化
你怎么查聊天记录给前端
添加链接描述
添加链接描述
添加链接描述
添加链接描述

设计一个排行榜的后端

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

linux查询日志的命令、awk了解过吗?

添加链接描述

添加链接描述
添加链接描述

点赞模块设计如何优化可以支持高并发的场景

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

协程、线程、进程之间通讯方式有哪些?

添加链接描述
添加链接描述

Linux怎么看磁盘占用?

https://www.cnblogs.com/sylvia-liu/p/4866388.html

Linux怎么看内存占用?

free

Linux中top命令会展示CPU相关的那些时间维度的信息?

https://blog.csdn.net/Nicolege678/article/details/125558818

怎样批量修改一批文件替换文件中的某个占位符?

https://blog.csdn.net/weixin_42326851/article/details/127571161

程序运行中的堆和栈是什么?什么区别?

操作系统的数据存储,以及程序中的什么都存在哪里

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

平衡二叉树和红黑树

添加链接描述
添加链接描述

什么是平衡二叉树、最小堆

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

队列,树,栈的应用场景和区别

添加链接描述

倒排索引原理;倒排索引和B+树索引比较一下

添加链接描述

es索引的过程


添加链接描述
添加链接描述

说下es的查询原理

添加链接描述

ES分页算法有哪些,举例

添加链接描述
添加链接描述
添加链接描述

ES底层数据结构,深挖

添加链接描述
添加链接描述
添加链接描述
添加链接描述

es索引的过程,切词怎么切,切词算法

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

es分布式架构

添加链接描述

Mysql和ES数据同步方案汇总

添加链接描述
https://blog.csdn.net/w1014074794/article/details/127124574

ES查询方法总结

添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述
添加链接描述

怎么学习新技术的(聊了一下我常看的一些技术网站)

添加链接描述
添加链接描述

牛客网项目总结

添加链接描述

深入项目,项目架构,模块组成,技术栈

项目中的技术亮点

深挖项目,实现细节,方案对比

项目所产生的价值,具体点,用一些案例或数字来佐证

项目难点,亮点

项目中最难的是什么?

讲一个比较有意思的事情,讲一讲其中的技术要素

职业发展

领导如何评价你

添加链接描述
可以这么说:“我的上司是一个对工作特别认真的人,他对工作的要求特别高,尤其是在细节上面,一丝不苟,在他的影响下,我们的工作返工率很低,我很感谢他对我的严格要求,让我格外地注重细节,做事更加细致谨慎。”

性格有什么优缺点

优点:
我做事很有计划性
列购物清单
在工作方面,在每一天的早晨,我都会思考今天该做些什么,然后列一张日程表,之后,就按这些表来做事,生活就会变得井然有序了。
适应能力强,有责任心和做事有始终
我比较善于带领别人一起工作。
我担任过班长,学生会干部,从无到有创建了系青年志愿者组织,还创建了一个很大的IT社团萤火虫俱乐部。同学们都说和我一起工作干劲很高,我想最主要的原因是因为我善于调动每个人的积极性。我觉得一个人无论才能大小,都希望能肩负一定的责任,所以在团队工作中,我十分重视让每个人都能展示自己的才能。
缺点:
喜欢追求细节 导致作业未能按期完成 先完成框架再去改善细节

不知如何拒绝 同学们找我帮忙 然后基本上都会去帮 很影响我自己的工作节奏和进度
后面就是会告诉他们 比如 我现在在忙 然后什么时间才有空 然后让他们考虑 看还需不需要 我去帮忙处理

控制情绪,心平气和的求解决 各退一步

把各自的观点说出来 然后静下心去分析,那个意见更好一些 或者两者意见否中和,取长补短? 不能一味的去否定别人 虚心才会使人进步 找出他们意见的长处加以赞美 然后再把不足 加上自己的观点

作为程序员,可以说自己拥有比较强的执行力,所以在面对项目的时候会有比较高的客户配合度,所以相比较来说自己的领导力就没有那么强。

再比如,自己对于程序开发会有自己的见解,所以常常会和产品经理产生一定的沟通意见,但是自己绝对会尊重客户和产品,因为觉得”头脑风暴”是会产生更好产品的动力。

遗憾的事情

当时没有珍惜机会?

感到很遗憾,所以我现在会比其他人更珍惜机会,更加努力的去争取,不会再在这方面留下遗憾。

golang后端面试题总结相关推荐

  1. 后端在插入数据发现重复如何正确的弹出警告_前百度面试官整理的——Java后端面试题(一)...

    List 和 Set 的区别 List , Set 都是继承自 Collection 接口 List 特点:元素有放入顺序,元素可重复 , Set 特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉 ...

  2. 收藏:不能不刷的数字后端面试题,含解析

    今年的秋招更看重求职人员的学历和能力.高校人才供给增加,往年那样的供需失衡现象可望有较大改观.对于正在或者即将参加秋招的同学们来说,面对面试笔试心中还是有些胆怯. 今天精选了10道数字IC后端面试题, ...

  3. 为校招搜集整理的10万字java后端面试题ing...,基础不太好不知道从哪儿开头的冲它就完事了

    java后端面试题 Java基础 1.什么是Java 2.jdk,jre和jvm的区别 3.什么是跨平台性及原理 4.Java语言的特点 5.什么是字节码 6.采用字节码的好处 7.Java和C++的 ...

  4. 最新阿里内推Java后端面试题

    阿里一面题目: osi七层网络模型,五层网络模型,每次层分别有哪些协议 死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决 如何判断链表有环 虚拟机类加载机制,双亲委派模型,以及为什么 ...

  5. python后端面试题

    1. 果壳 电话面试: 说一下TCP的三次握手,四次挥手,为什么会这样? http安全的性的了解,说一下对cookie和session的了解: 对mysql的了解,说一下你常用的数据类型,char和v ...

  6. 腾讯后端面试题python_python技术面试题(十九)--腾讯

    正文共: 4171 字 6 图预计阅读时间: 11 分钟 因为去面试,停更了几天.在这次面试中,直接教会了我怎么做人......问的问题很深入,也让我明白了自己的水平.很简单的一个问题,深入之后,会衍 ...

  7. 2022 年,阿里内推 Java 后端面试题,文末附面试福利

    阿里一面题目: osi 七层网络模型,五层网络模型,每次层分别有哪些协议 死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决 如何判断链表有环 虚拟机类加载机制,双亲委派模型,以及为什 ...

  8. 2022最新Java后端面试题(带答案),重点都给画出来了!你不看?

    一.Java基础 1.String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... ...

  9. 明翰中高级Java后端面试题攻略v0.3(持续更新)

    文章目录 前言 Java基础 Java综合 请按顺序并按分类写出java的8种基本数据类型? Integer与int的区别? Object类中的方法的有什么,其作用? equals()与==的区别? ...

最新文章

  1. python socket多线程 获取朋友列表_python socket多线程通讯实例分析(聊天室)
  2. vs2012 编译cocos2d-x项目报error MSB3073
  3. [BZOJ3297][USACO2011 Open]forgot
  4. C#无法将顶级控件添加到控件 新的子窗体无法添加到主窗体
  5. 【181012】VC++ 中国象棋人机对弈程序源代码
  6. C语言乘法口诀表代码
  7. 苹果Mac电脑该怎么删除磁盘及双系统分区
  8. Geronimo入门与进阶
  9. 小程序与微信会员卡打通教程
  10. 摄影测量与遥感专业英语词汇
  11. HBase的协处理器(Coprocessor)、HBase如何使用二级索引、observer协处理器、 endpoint协处理器、Hbase 协处理器加载方式
  12. 数码宝贝相遇电脑版怎么玩 数码宝贝相遇安卓模拟器教程
  13. 技术普及帖:你刚才在淘宝上买了一件东西
  14. 中国首届微博开发者大会杨卫华演讲
  15. 网上购车平台,利弊知多少
  16. STP客户分类(Python)
  17. 图数据库(八):Neo4j中Cypher语言with关键字
  18. python3 将eps文件转为jpg格式
  19. 双11,当当图书大放价,专属200-30优惠码免费送
  20. SpringColud Eureka的服务注册与发现

热门文章

  1. 第十五章 TIM高级定时器(下)
  2. weapp 构建小程序
  3. 2018大连理工新生赛解题报告
  4. Android基础四大组件之Activity的启动过程源码解析
  5. c语言printf(%-6.2e n),以下程序段的执行结果是().double x;x=218.82631; printf('%-6.2e\n',x);...
  6. NLP04:LSTM原理详解及文本生成
  7. 大数据背景下的“按图索骥”及基于图片内容搜索的技术
  8. Go 语言 GC 分析
  9. WordPress英文版改中文版
  10. 纯CSS3冰川北极熊动画js特效