1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| 1、GMP调度模型 2、slice扩容原理 3、go函数传值或传引用 4、slice和array对比 5、GC 三色标记法 混合写屏障 6、源代码编译原理, 词法分析,语法分析,类型检查AST转换,SSA中间代码生成,机器代码生成 ,Golang编译过程概述 7、channel原理 8、nil切片和空切片区别 9、各种数据结构是否可以对比 10、defer原理 11、gin路由算法
1、mysql索引采用的数据结构, B+Tree,和BST,AVL,BTree,RBTree对比, 优化 2、mysql引擎, InnoDB和MyISAM,区别特点,如何选择,锁的类型,是否支持事务 4、mysql事务概念,隔离级别,并发问题, 四大特性,四种隔离级别,不同数据库默认的隔离级别,每种级别下存在的并发问题 5、索引最左匹配规则,联合查询是否能命中索引,最左匹配,遇范围查询停止匹配
1、tcp和udp区别
面向连接或非连接,安全性,速度,连接机制,多对多传输等
2、网络层和传输层区别
数据链路层:点-点
网络层:主机-主机
传输层:端口-端口
3、tcp头内容(20byte)
TCP协议详解(一):TCP头部结构[3]
4、tcp拥塞控制(几种解决方案)
慢开始,拥塞控制,快重传,快恢复
5、三次握手和四次挥手
采用这种机制的原因,优点,具体过程,标志位(SYN,ACK,FIN)
四次挥手具体作用,优点,如何解决意外情况
6、http和https
浏览器访问https的具体流程,主要是传输证书,https双方对称与非对称加密过程
7、TIME_WAIT作用
2MSL,具体原因和作用
8、Client长连接
keep-alive或heart-beat等解决措施
9、tcp粘包和拆包
粘包出现原因,如何精准拆包
10、Cookie和Session
浏览器的Cookie限制,Session的实现措施
1、内存管理
linux内存管理剖析[4]
2、线程调度
linux的进程线程及调度[5]
3、进程、线程、协程
内核态,用户态,上下文切换,栈空间管理
4、io多路复用
四种常见io模型,Reactor设计模式,epoll,select原理
5、死锁
死锁产生的四个条件,以及死锁的预防和恢复
五、算法
1、合并两个有序链表(合并k个的思路)
双指针遍历,合并k个即k个指针遍历,可在末尾设置MAX占位,以抽象空链表
2、数组中有2n+1个元素,其中n个元素出现两次,1个元素出现一次,以O(n),O(1)的时间空间复杂度找出出现一次的元素
不考虑时空,可使用map[element]count的方式,O(n)时间和O(1)空间,采用遍历异或的方式
3、找到数组中第k大的值
快排结束后剪枝,保留一半进行递归,或使用堆排,根据k的不同选择性构建大顶或小顶堆
4、给定一棵二叉树,求任意两个节点的最近公共祖先(包含节点本身)
头递归,取公共节点,简化可以分离为先求出根节点到任意节点的路径,再将两条路径求公共前缀。
5、给定一棵二叉树,认为两节点间距离为1,求二叉树内最长的节点间路径
路径最长的两个节点,必然为两个叶子结点。某个节点和子孙节点的距离即为深度差。递归存储叶子结点之间距离差,遍历求max,可dp简化。
6、反转循环链表,头部不动
设置cur,pre指针,整个链表指针全部反转即可
7、快排,堆排(思路)
堆排过程,构建时的整堆操作,时间复杂度
8、hash冲突
开发地址,链表,公共溢出,再hash
和B+Tree的共同思路,Java HashTable的简要原理(jdk8之后数组+链表+红黑树)
9、排序算法稳定性和时空复杂度
主要考察快排堆排,以及各种排序算法的稳定性,最坏时间复杂度,空间占用度,
|