1. SQLITE 最主要特性:没有网络模块,没有版权问题。
2. go:协程(Goroutine)是轻量级线程,通过信道(channel)进行通信,简单的说就是多个协程之间通信的管道,解决多个协程访问共享内存时的冲突问题。
3. go:nil 值的使用:
(1) 布尔值、数值、字符串都有自己的初始值,不能赋值为nil。其他的 map、slice等类型,可以赋初始值为nil
(2) nil的类型不是固定的,要根据上下文推断。不同类型的nil值大小不一样。
(3) 对nil值的channel、map、slice、array 进行range操作是合法的,但有的是0次,有的会永远阻塞。
4. go dpdk无锁队列
(1) 特点: 环形无锁; 多个生产者和消费者同时出入队。
(2) 实现 多生产者同时出入队 相关的概念:
a:原子操作 处理atomic_t类型的数据
b:CAS操作,输入新值和旧值,不一样的话才交换成新值,一样的话不交换
c:自旋锁,不睡眠的方式等着获得锁
(3) 实现 多生产者同时出入队 相关的方案 的关键点:
假设两个core同时进行生产,core1 进行交换值的时候,core1交换成功。而 core2 触发自旋锁等待,获得锁后进行交换,发现已经被core1交换了,再往下一个位置生产。
其实原则上也是通过锁实现,但是用的是最小幅度的锁,针对atomic_t类型的锁,也就是原子操作。所以可称为无锁队列。
5. 什么称为redis 大key?
(1) String 类型的值大于 10 KB;
(2) Hash、List、Set、ZSet 类型的元素的个数超过 5000个;
6. 怎么删除大key避免卡顿?
1. 分批次 del 命令 删除:各个类型的元素的删除方式不一样,具体可以看面试官:Redis 大 key 要如何处理?
2. 异步删除:用 unlink 命令代替 del 来删除