孩子王golang一面面经
面试官人还可以,面了一个多小时,不过第二天over了,还是没有学到位
1、自我介绍
2、数据结构
2.1常用的数据结构:线性结构、非线性结构,堆栈,数组,链表
2.2数组链表内存分布(物理不连续,逻辑连续,通过next)
2.3 链表的结构是什么样、指针是干嘛
2.4 AVL平衡树简单了解下,数据分布是啥样,左子树和右子树有啥区别,为何需要平衡二叉树,如果不平衡会退化成啥样(链表)
2.5 数组、链表、二叉搜索树、多路平衡树的查找时间复杂度,多路平衡树根结点是几个,为何需要多路平衡树,b+树和b树的区别,b树、b+树的非叶子结点会存储数据么,b+树的叶子结点为何需要指针相连
3、计算机基础
3.1 常见的CPU调度模型:FCFS先来先得、SJF最短任务优先、轮询调度算法、优先级调度算法、多级队列调度算法、多级反馈队列调度算法
3.2 多级反馈队列有了解过么,多级反馈队列的原理,我IO都需要等待(进程可以在不同队列移动)怎么移动:一个进程使用过了很多CPU时间,则把它移动到低优先级队列,一个进程长时间在低优先级等待,就移动到高优先级队列。
3.3 虚拟内存,为啥需要虚拟内存
虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间 被分割成多个块,每一块称为一页。
这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当 程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。
3.4 多路复用select,多路复用之前是干嘛的,什么是阻塞IO和非阻塞,为何发生阻塞
3.5 操作系统的内核态、用户态,分别是什么,为何需要内核态,什么情况下会从用户态转化成内核态(什么时候会进入内核态,内核态主要干什么的,权限管理主要谁负责,内核态管理)
4、计算机网络
4.1 7层OSI模型,TCP主要哪几层
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
数据链路层(网络接口层)、网络层、传输层、应用层
4.2 网络层建立一个TCP链接发生什么,三次握手,为啥要三次握手,为啥需要四次挥手
4.3 网络层中传播的形式,什么是滑动窗口,客户端最多可以多少个TCP链接(65535)
5、数据库(扩展)
5.1 mysql的事务的隔离级别(),可重复读和提交读的区别,可重复读通过什么来实现(MVCC),MVCC由什么实现(通过保存数据在某个时间点的快照来实现的)
5.2 mysql有几种日志,binlog什么情况可以产生,主要是干嘛用的
重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log)、中继日志(relay log)
5.3 mysql有几种索引,聚簇索引和非聚簇索引,我查询到命中一个非聚簇索引会发生回表普通索引、唯一索引、主键索引、组合索引、全文索引
这涉及到查询语句所要求的字段是否全部命中了索引,如果全部命中了索引,那么不需要进行回表查询
5.4 缓存用过么(redis)
6、go基础
6.1 map怎么实现,底层是什么(数组),哈希表是什么,k-v是怎么实现的,哈希函数的作用,映射到数组上,哈希冲突怎么实现,链表法里面是什么
6.2 gmp
6.3 垃圾及回收机制,垃圾回收主要是什么,垃圾回收需要暂停程序么
6.4 读写屏障,为啥需要读写屏障,最终清扫需要关闭程序么
6.5 k8s用过么
7、项目
客服端项目比较多,服务端项目没有所以就不问了(需要服务端项目)