面试

算法能力 一题5-10min :

  1. 题目:仅出现一次的数
  2. 题目:连续固定区间最大值
    给你一个数组 nums 和一个大小为 k的区间。这个区间可以从数组的最左侧不断移动到数组的最右侧。每个移动区间固定有 k 个数字。这个区间每次只向右移动一位。
    让你返回移动过程中,这些固定区间中的最大值。

样例输入:

1
nums = [1,3,-1,-3,5,3,6,7], k = 3

样例输出:

1
[3,3,5,5,6,7]

样例解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
移动情况 最大值

[1 3 -1] -3 5 3 6 7 3

1 [3 -1 -3] 5 3 6 7 3

1 3 [-1 -3 5] 3 6 7 5

1 3 -1 [-3 5 3] 6 7 5

1 3 -1 -3 [5 3 6] 7 6

1 3 -1 -3 5 [3 6 7] 7
  1. 拓展

样例输入:

1
2
3
4
5
6
nums = [1,3,-1,-3,5,3,6,7], t = 5
k = 2
k = 3
k = 4
k = 5
k = 6

样例输出:

1
2
3
4
5
3 3 -1 5 5 6 7
3 3 5 5 6 7
3 5 5 6 7
5 5 6 7
5 6 7

基础能力

Go八股

https://www.topgoer.cn/docs/gomianshiti/gomianshiti-1dd225t6esqld

Redis
  1. Redis是单线程的,但Redis为什么这么快?

    • 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
    • 数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
    • 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
    • 使用多路I/O复用模型,非阻塞IO;这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程
    • 使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求
  2. 缓存穿透和雪崩的解决方案

  3. 请简述Reids的删除策略

    • 定时删除:在设置键的过期时间的同时,创建一个定时任务,当键达到过期时间时,立即执行对键的删除操作
    • 惰性删除:放任键过期不管,但在每次从键空间获取键时,都检查取得的键是否过期,如果过期的话,就删除该键,如果没有过期,就返回该键
    • 定期删除:每隔一点时间,程序就对数据库进行一次检查,删除里面的过期键,至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。
    1. 索引的构建流程?
    2. b树,b+树区别,MongoDB为什么选用b树
操作系统
  1. CPU三级缓存
  2. 进程与线程
    • 进程: 进程是具有一定独立功能的程序,进程是系统资源分配和调度的最小单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。
    • 线程: 线程是进程的一个实体,线程是内核态,而且是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
    • 协程: 协程是一种用户态的轻量级线程,协程的调度完全是由用户来控制的。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
Mysql
  1. 创建索引的规则:最左匹配,区分度等

  2. 索引失效的情况

    • 未遵循最佳左前缀规则导致索引失效
    • 计算、函数、类型转换(自动或手动)导致索引失效
    • 范围条件右边列索引失效
    • 不等于(!=)会导致索引失效
    • is null可以用到索引,is not null不能用到索引
    • like以通配符%开头索引失效
    • or 前的列建立了索引 or后面的列没有建立索引 会导致索引失效
    • 不同字符集进行比较前需要进行转换,会导致索引失效
  3. 数据的存储方式: B+树

    • 非叶子节点不存储数据,只存索引(冗余),这样可以保证存放更多的索引
    • 叶子节点存储所有索引字段
    • 叶子节点用指针连接,提高区间访问性能
      ![[Pasted image 20221201183525.png]]
  4. 大数据量级的mysql,如何分库分表?解决方案?

  5. 网络这些可以挑一两个主题聊。

  6. 自我介绍,告知规则与流程:两个部分:算法题 & 聊一聊基础问题

  7. 先介绍下自己;主要技能,常用语言,工作经历简单叙述

  8. 项目:支付相关,幂等?

  9. 发过去在线文档