牛客面经总结
特地在牛客上看了100多篇面经,目的就是为了看一下go到底能问多少东西。这一轮看下来发现东西还是很多的,有些东西不好整理,所以我就统一放这里了
[x] Linux 中文本处理的命令?
[x] 怎么查看某个进程(tomcat)的进程号?输出只包含该进程的一行信息
[x] grep 命令的作用是什么?TCP的四次挥手?TIME-WAIT 和 CLOSE-WAIT 的意义?
grep 这个是查找字符串的,一般用于过滤符合条件的字符串
TIME-WAIT 和 CLOSE-WAIT参考运输层(TCP,UDP) | 面试问题浓缩总结 (xiaoyou66.com) (opens new window)
[x] Linux 中如何读取文件的倒数 n 行?
[x] tail 命令具体如何实现?
tail -f
可实时查看日志[x] 你设计操作系统,会实现文件的哪些系统调用?
[x] 你想了解文件相关的系统调用,你会做什么尝试?
这个和上面的是同一个通信,这里就不多说了
[x] Socket 编程中 Server 端的流程
[x] make原理
这个是自动化编译的东西了,我这里就只贴个链接
make命令的工作原理与使用方式【转】 - 小天儿 - 博客园 (cnblogs.com) (opens new window)
[x] 分布式CAP模型
[x] linux io流程(应用、文件系统、内核、硬件)
[x] 程序编译的流程、执行的流程、内部形态(深入理解计算机系统中有)
[ ] JVM I\O时操作系统发生了什么当写一个程序申请内存时,会做哪些操作?中断,页面置换,堆,栈等。一个程序从写的代码文件到最后输出结果,中间经历的整个过程是怎么样的?编译连接装入以及内存的一些相关操作。A要给B发送数据,中间经历了哪些流程,从传输到从网卡整个来说一下。网络连接,传输层,中断,内核态用户态,IO多路复用。
这个实在太底层了,打扰了。。。。
[x] 一致性hash,虚拟节点作用,为什么一致性hash是一个环。
参考系统相关=》分布式系统相关
[x] 10g乱序文件找中位数,思路即可。你的思路算法 (opens new window)的瓶颈在哪,是内存排序 (opens new window),还是读写磁盘文件?
[x] linux怎么管理内存?扯虚拟内存格式,malloc,缺页中断,页表,换出算法 (opens new window)(FIFO、LRU、CLOCK)等等。
[x] stack里面保存什么?
栈区:就是那些由编译器在需要的时候分配,在不需要的时候自动清除变量的存储区。里面的变量通常是局部变量、函数参数等。特点:由系统的编译器自动的释放,主要用来存放方法中的参数,一些临时的局部变量等,并且方法中的参数一般在操作完后,会由编译器自动的释放掉。
什么叫做栈区,堆区,全局区,静态区,代码区,常量区,自由存储区?_cow_dake-CSDN博客 (opens new window)
[x] 协程怎么停顿?
好像没找到相关的东西。只找到一个协程的停止
[x] mysql有哪几种日志?一般可能答个redo undolog可能就完事了,但真的有那么简单吗?完全可以继续说有中继日志慢查询日志错误日志查询日志等,然后继续扯下去(中继日志扯到主从同步,慢查询日志扯到sql调优),让面试官觉得就算你是背的也是背透了,你的知识面是能够发散的。
这个也不错,到时候补充一下
[ ] 微服务RPC下,发现使用TCP的效率比UDP高,可能是什么原因
这个其实用的不多,先不管
[x] 客户端和服务端建立socket连接的过程,相关的方法名
[x] 写多生产者多消费者模型
多线程必考的「生产者 - 消费者」模型,看齐姐这篇文章就够了 - SegmentFault 思否 (opens new window)
[x] IO 密集型和 CPU 密集型如何分配线程优先级
CPU密集型多分配一下
[x] 有对项目 (opens new window)和系统做性能测试吗?(benchmark 和 pprodf)
[x] sql 执行慢,是什么原因,怎么解决
可能是网络原因,也可能是数据量太大的原因
[ ] 直播房间,一个大V发了一条消息,如何让上千万的粉丝收到这条消息,如果只是纯粹的广播会很耗资源
找不到、、、、
[ ] 分布式缓存:如果客户端 (opens new window)想保存热点数据,如何设计?
[x] 在线写一个LRU
[x] TCP SYN 攻击
[x] 一次普通 IO 的过程,什么时候用到了系统调用
读取文件的时候就会用到
[x] 介绍下 IO 多路复用
[x] read 在三者中是用户发起还是内核发起?(用户发起)
[x] 介绍右值,完美转发
这是C++的的东西,打扰了
[x] go协程,怎么实现,底层怎么实现
这里主要回答一下GMP调度模型
[x] map的源码 (opens new window)最重要
[x] GMP中,M的数量怎么控制,P呢?
M通过GOMAXPROCS来设置,P和这个值是一样的
[x] 哈希表 (opens new window),拉链法,开放地址法,大量冲突怎么优化
[x] fork时内核中发生了什么
fork是创建子进程的
[x] 能不能申请一块比物理内存大的存储区域
[x] 索引树遍历的过程
这个估计不会问
[x] 一百万条数据,索引树多高
3层左右,不会太高
[x] 索引树高于 4 层怎么办
这个时候说明你存储的数据实在太多了,需要分表或分页
[x] mmap地址映射
[x] tcp四次挥手,time_wait,2MSL
[x] docker的网络模式,docker如何处理容器网络访问?
[x] traceroute实现原理
[x] 介绍一下ICMP协议
报文控制协议
[x] 假设没有time_wait,一个新的连接起来了,旧的报文会到达到这个连接里吗
可能会
[x] go是如何实现map的
参考map的底层原理数据结构 | 面试问题浓缩总结 (xiaoyou66.com) (opens new window)
[x] 哈希表 (opens new window)的时间复杂度、空间复杂度
哈希表的插入/删除/查找都是O(1)的时间复杂度
[x] SSL的基本原理
这个其实就是https建立连接的过程
[x] 线程怎么调度
感觉有点像进程调度。。。
[x] tcp 可靠性,然后问十六位校验和怎么实现的
[x] 链表 (opens new window)怎么检查环,怎么算环的长度
使用快慢指针
[x] 跳表怎么实现
跳表是Redis里面的东西
[x] top K问题
[ ] CodeTop企业题库 (opens new window) 这个网站多去看看
[x] 虚拟内存,共享内存,常驻内存
[x] 文件和目录的区别、
[x] 了解过 QUIC 吗
快速UDP互联网协议
[x] https 最耗时的环节
其实就是SSL建立的过程,因为涉及到加解密和验证证书,所以非常耗时
[x] string 从 "abc" 到 "abcd",如何分配内存的
会新建一个对象
[x] 有看过 unsafe 包吗
[x] 说一下 string 和 []byte 的高效转换
String转byte[],就是先转ASCII码,然后再转成二进制,如,A->65->65的二进制表示.
[x] explain 执行计划
[x] ipv4 和 ipv6
网络层(IP,ICMP,ARP) | 面试问题浓缩总结 (xiaoyou66.com) (opens new window)
[x] 地址空间是什么
[x] sessionId 如何维护(cookie 里带有 sessionId)
[x] xss 和 csrf
[x] Go的数据结构的零值是什么
[x] Where和Having的区别
[x] docker镜像特点,删除容器中的文件,镜像会变小吗?为什么?
删除容器中的文件不会影响镜像大小
[x] resourceVersion的意义,如何处理其在cache(informer)与api server的不同步造成死循环。
这东西是K8S的。。。所以就不管了
[x] Memory 和 CPU 超过resource Limit会发生什么?(只知道Memory的,会被OOM kill掉)
这个也是一样
[x] scheduler调度器的实现细节。
。。。没用过
[x] 介绍pulsar(吹了半天)
[x] k8s了解一下
[x] replicaset、daemonset、statefulset的概念
也是K8S里面的。。。
[x] 一个pod从请求到实际启动的过程
K8S
[x] 讲讲HTTP与HTTPS的区别;TLS是哪一层;HTTPS的连接流程是怎样;
HTTPS使用了SSL协议来进行传输。。。连接流程实际上就是
[x] TCP滑动窗口,发送窗口,接收窗口;
[x] 手写了两个SQL的查询。用到了order by, limit, having, count, avg, desc这些关键字;面试官问,SQL查询语句中关键字的执行顺序是什么
[x] DNS的过程,DNS劫持是什么;
[x] TOPK算法 (opens new window),找出一个未排序 (opens new window)数组中第K大的数;
[x] webserver 线程和进程(webserver不会)
没太搞懂这个是干啥的
[x] zset底层
使用跳表来实现
[x] 半连接状态的协议
[x] while(tree) {sleep(1)} 这个会有什么问题
[x] sync pool底层实现
[x] 三次握手详细过程?SYN攻击底层原理是什么?(要答到内核的半连接队列)
这个可以参考上面的
[ ] 四次挥手TIME_WAIT状态作用?为什么是2MSL?MSL和TTL什么关系?
[ ] 服务器大量TIME_WAIT状态,危害是什么?
[ ] 两次GC周期重叠会引发什么问题,GC触发机制是什么样的?
[ ] 空slice和nil的slice区别?能直接append吗?扩容?
[ ] 知道go的伪抢占式调度吗?新版本?举个goroutine泄漏的例子?
[ ] 你知道的影响server并发的内核参数有哪些?TCP选项有哪些?描述一下
[ ] 你提到了优雅关闭tcp连接,说一下shutdown和close?
[ ] LVS原理?LVS为什么主备?多主用过吗?为什么不直接让nginx挂在外面呢?
[ ] 讲讲web服务器常用技术?
[x] Go string底层实现?
[ ] 那你这个用unsafe.Pointer和uintptr的方案,不会有问题吗?string少的那个cap字段怎么填充?(我答可能GC会有点影响,因为unsafe.Pointer指向的对象不会被GC回收了)
[ ] 了解HTTP协议吗?golang HTTP库实现?
[ ] 那如果用户在并发CMS期间改了引用,写屏障如何保证三色不变性?(继续懵逼)
[x] 那你说下interface底层实现?(我心态炸裂)
[x] A B C D E 海盗,他们要瓜分 100 个金币。A B C D E,轮流提议,提议的人需要获得半票以上包括半票,不然就会被杀死,下一个继续提议,你是 A 会怎么分配
[ ] 服务器server怎么把cookie设置到浏览器的
[ ] MSL生命周期怎么控制的,怎么确定MSL的时间
[ ] 快照具体是怎么实现的
[ ] string怎么维护的 不知道
[ ] HashMap put过程
[ ] 给了一个建立了主索引和二级索引的表(InnoDB),where条件命中二级索引,问总共走了几次索引
[ ] 用过gdb没有。我说没有。他再问有没用过pprof,我就扯了一下pprof。
[ ] go 闭包
[ ] TCP 半连接队列
[ ] TCP 半关闭状态
[ ] 两个人抛硬币,先抛到正面的赢,问先后手的胜率是多少。
[ ] 进程fork的copy on write相关的
[ ] redis (opens new window)和etcd的区别
[ ] Grpc的过程
[ ] linux统计字符出现的个数
[ ] linux 查找当前文件后20行
[ ] fasthttp为什么快
[ ] pprof使用
[ ] Mysql是如何进行后期优化的?
[ ] Mysql的Join的计算的算法 (opens new window)?(nested_loop ,但是当时没怎么记住,回答了Spark的Hash Join 和 Sort-based Join)
[ ] 多级索引,最左匹配
[ ] LSM Tree的优缺点,怎么进行优化?
[ ] go Map sync.Map是不是并发安全的?
[ ] Spark与Hadoop的区别。
[ ] 控制反转和依赖注入区别?
[ ] 爬楼梯 => 不允许到达7的倍数层 => 优化为线性(不能使用动态规划 (opens new window))
[ ] 什么是网关,网关的作用,限流的算法 (opens new window):固定/滑动窗口,消息队列,令牌桶。消息队列怎么限流,消费方如何返回给消息生产方。
[ ] Linux的 watch和ctrl+c是怎么实现的
[ ] Exception细分,RuntimeException和普通Exception区别
[ ] 元注解是什么
[ ] java8中流式API
[x] 老鼠试毒问题
[ ] currenthashmap 1.8为什么要使用CAS+Synchronized取代Segment+ReentranLock
[ ] 了解内存泄漏吗?有什么危害?
[ ] copy是操作符还是内置函数
[ ] 假设需要启动MongoDB,在linux下怎么设置只能启动一个?
[ ] MongoDB怎么做备份?
[ ] MongoDB怎么解决写入失败问题?
[ ] 用Map和Queue太消耗内存了,怎么办?Map里存的是key/value的指针,不存具体的值。
[ ] golang中channel调用问题
[ ] defer recover panic 执行顺序
[ ] 了解http的断点续传吗?
[ ] 网络通信双方的流程(服务端:bind、listen、accept;客户端 (opens new window):connect)
[ ] 计算机中的文字乱码,字符集和字符编码的含义、如何区分?
[ ] 怎么算 QPS?
[ ] 常见的5个Linux中查看资源的命令(top,free,lsof,ps,netstat)可能指的就是这5个吧
[ ] LRU实现一下!!!!!
[ ] 单例模式写一下,是并发安全的吗?如何并发安全(加锁
[ ] rocksdb读写
[ ] go语言的性能的优劣
[ ] 上下文切换的细节
[ ] arp协议
[ ] tcp访问一个主机如果主机端口不存在返回什么信息 我说应该是time out吧
[ ] Slice、map都是安全的吗
[ ] 如何查看某个进程占用的内存大小?
[ ] 分页的目的是什么?
[ ] 说一下URL的格式,越详细越好
[ ] 36匹马,6个跑道,最少跑多少趟就可以筛选出前三匹最快的马?
[ ] 线程共享的有什么,不共享的有什么
[ ] LRU缓存的实现
[ ] const与define
[ ] x^2=n 怎么求 x?(二分)
[ ] 海量数字,范围都是 1~10000,怎么排序 (opens new window)?(计数排序)
[ ] 点分十进制 ip 地址转为 32 位整数
[ ] vim怎么查询一个单词,怎么做匹配。
[ ] 怎么判断一个进程的状态,用什么命令。
[ ] 一个文件太大应该怎么打开。
[ ] 怎么查看cpu,磁盘io,网络io。
[ ] 怎么查看一个文件的大小。
[ ] 主动断开的会产生Close_wait还是被动断开的会产生?(哪一方会有
[ ] http头部字段说一下。
[ ] 协程怎么调度。
[ ] k8s都有什么重要的组件。
[ ] 如果十万个线程同时put,会出现什么问题
[ ] nginx master-worker进程、进程与redis (opens new window) 进程、线程
[ ] zookeep (opens new window)er、mysql、redis (opens new window) 、etcd 怎么实现分布式锁,各有什么优缺点,生产中一般用那个
[ ] 数据怎么同步,怎么更新,为什么用这种方式
[ ] 给子进程发一个kill信号,父进程能收到吗, 为什么
[ ] 怎么判断一个数是否是2的n次幂
[ ] delete和truncate
[ ] 断点调试的原理
[ ] 线程的状态 sleep前后会怎么样
[ ] traceroute原理
[ ] 写题 写一个会爆栈的代码(无限递归 说太慢了 要快 减少递归深度,然后多写了几个参数 指数级递归 还是说不行)
[x] 64匹马选最快的四匹!!!!!!!
[ ] restful的设计理念、修改和删除资源的时候为什么要把id放在url里而不放在http的参数里
[ ] 力扣 凑硬币!!
[ ] TCP 如何实现纠错,防止丢失数据和重复
[ ] 数据库出现读性能问题如何解决
[ ] 虚拟内存有什么作用
[ ] interface 不是个好的形式,会导致 GC 压力大,为啥,那用什么形式比较好;
[ ] goroutine 里面 panic 了会怎么样;
[x] map 是否是并发安全的,不是如何做到,还有什么其他方法;
不安全,使用sync.Map参考 数据结构 | 面试问题浓缩总结 (xiaoyou66.com) (opens new window)
[ ] raft 解决了什么问题;
Raft是一套共识算法,解决分布式系统中多个副本的一致性问题
[x] slice 分配在堆上 还是栈上
这东西没找到,,,可以这样答,当长度较小时,会分配到栈上,当栈空间不足的时候才会分配到堆上
[ ] GMP并发模型 goroutine切换的时候上下文环境放在哪里
[x] 说一下reflect
反射可以获取go的类型和返回值
[x] 问channel,说了底层实现
[ ] Go func与method之前的那个Receiver是什么?(答:类似Java的实例本身,效果同java中的this关键字,同时在go method也可以把这个Receiver当做参数来正常使用);
[ ] git相关(回答的一塌糊涂)
[ ] Socket编程会么
[ ] 如果一个打开的文件里面有许多ip地址应该怎么过滤出来?
[ ] tcp断开连接时保持2mls的弊端(我答得是优点。。面试官提醒说是要答弊端,弊端?难道是占用了客户端 (opens new window)的端口吗)
[ ] 异步io什么的
[ ] rehash时候可以get put吗
[ ] hashmap数据太多 rehash时间长 怎么解决
[ ] guava chache实现原理
[ ] 设计一个短网址系统
[ ] JAVA 值传递和引用传递
[ ] 哪些操作会引发阻塞
[ ] 虚拟分页,逻辑地址,分页的好处
[ ] 推荐看
sql必知必会
[x] go 逃逸分析
[ ] 对象是如何分配到内存的
[ ] 零钱兑换(LeetCode原题
[ ] 复合索引,给sql判断索引顺序,问得很深
[ ] 复合索引的数据结构是怎么存储的
[ ] 终端里 curl 后过程 HTTP完整过程
[ ] 编程 go协程交叉顺序打印数组
[x] 64匹马,8个赛道,最少比多少次能找到最快的4匹。(这问题一定要看)
[ ] 什么是DIO
[ ] 什么是孤儿进程,孤儿进程的父进程是什么
[ ] 长链接字段
[ ] 命名管道在linux中具体怎么实现的?
[ ] 你就随便说下linux中网络编程的5个io模型是怎么实现的吧。
[ ] 完全二叉树 (opens new window)与搜索二叉树 (opens new window)的概念
[ ] 从应用层到网络层各层的header都有什么不同的功能。(绝了,不知道咋讲。。说了存放地址和端口)
[ ] Java中String为什么要声明成不可变的
[ ] go waitgroup 的坑
[ ] 写单例模式
[ ] 为什么要双重检验?volatile关键字的作用
[ ] 谈谈分布式CAP、BASE
[ ] 两阶段提交讲一下
[ ] 双亲委托的好处是什么
[ ] ES match查询:a和b中有hello,c中没有search
[ ] go micro了解多少?broker
[ ] TCP是通过什么机制保障可靠性的?(从四个方面进行回答,ACK确认机制、超时重传、滑动窗口以及流量控制,深入的话要求详细讲出流量控制的机制。)
[ ] 四次挥手中TIME_WAIT状态存在的目的是什么?
[ ] 最后一次挥手为什么要等待2MSL
[ ] Java中 String a="xx";String b="zz"+"yy"+a;发生了什么?
[ ] 虚拟内存快排堆排top k 问题
[ ] 考察切片比较,深拷贝的问题;
[ ] url 短网址的项目 (opens new window),
[ ] 垃圾回收,装饰器;
[x] 内存对齐
[ ] groutine的底层实现
[ ] 问了golang的interface的区别,继承,gc的原理、区别,双向链表 (opens new window)等。
[ ] 取链表 (opens new window)的中间节点。
[ ] mysql表中一亿条个人信息,如何按身份证号查找用户。
[ ] 两个stack 实现 queue;
[ ] nginx的代理服务、缓存机制?(代理,请求转发到其他服务器;缓存,就是会缓存他代理的数据)
[ ] raft算法 (opens new window)细节(选主 复制 脑裂 balabala)
[ ] go标准库的 mutex介绍
[ ] go性能调优怎么做的?
[ ] go实现一个SQL Pool(可以借鉴database/sql pool的实现)
[x] go 怎么控制查询timeout (context)
context里面有一个超时的包,到了时间会终止
[ ] socket编程,(说了bind,listen,received)
[ ] 慢开始是具体是怎么样的?
[x] Go如何调度,假设4核的cpu应该有几个线程或者说有几个M,那能有几个groutinue,groutinue数量的上限是多少?
这个就是GMP调度模型了,上限和系统内存有关。
[ ] 红黑树 (opens new window)和二叉搜索树的区别
[ ] 红黑树 (opens new window)和平衡二叉树 (opens new window)的区别,相比于平衡二叉树 (opens new window)。
[ ] 解决哈希冲突的方法
[ ] LRU和LFU的区别?LRU强调的是什么?
[ ] 经典快排思路 稳不稳定?
[ ] 虚拟内存?操作系统怎么实现虚拟内存?
[ ] 判断链表 (opens new window)有没有环,入环节点
[x] goroutine 泄露 说一下,并指出了简历上“goruntine”的拼写问题(可恶的输入法。)
[x] 内存泄露?不了解
[ ] etcd相关
[ ] 给了一段 Go 的代码,回答以下几个问题:
func main() {`` ``var l []string = []string{`` ``"www.baidu.com"`` ``"www.google.com"`` ``}``}
1- 上面代码执行之后,内存是怎么分配的
l
是个什么东西- 指针的大小
[ ] gossip 协议
[ ] 进程挂了共享内存是否还存在,为什么?
[ ] cap与acid中的c是否一致?(答的一致,实际上不一样)
[ ] 谈到cat和more的时候讲一下区别
[ ] 100层楼两个玻璃球问题,找到摔碎的临界值
[x] golang如何实现类
这个其实指的是结构体里面携带函数
[ ] socket read返回0是怎么回事。
[ ] awk命令解释一下做什么用的。
[ ] makefile依赖关系。
[ ] 一个a+b程序从编译到运行都发生了什么(从预编译到print显示到屏幕上)
[ ] golang gmp模型怎么调度的,一个goroutine sleep了,操作系统是怎么唤醒的
[ ] 用go撸一个生产者消费型,用channel通信,怎么友好的关闭chan.
[ ] 对比一下 Golang 和 Java 的 GC,答了一下 CMS、G1和三色标记,我对比的点是 JVM 有分代回收,Go 的 Runtime 没有,没能深入地讲
[ ] fork原理。
[ ] 金额找零 $M, N种不同面值的硬币, 找零怎么实现
[ ] 向socket传值的流程?
[ ] HTTP头部属性
[ ] DNS及查询过程
[x] Golang传参方式
go里面都是值传递,如果要修改值,那么就传递指针过去
[ ] top命令中idle字段的解释
[x] MTU
指的是最大传输单元,在TCP链接里面有
[x] 内存对齐是什么
这个就很牛逼了,详情参考: 其他 | 面试问题浓缩总结 (xiaoyou66.com) (opens new window)
[x] 给定一个 0-4随机数生成器 如何生成0-6随机数
这个使用采用拒绝采样的方法来实现
[ ] 交换机是如何工作的
[ ] 如何实现附近的人功能
[ ] A和B方法用synchorinzed修饰,进入了方法A还能进入方法B吗
[ ] 线程yield()wait()的区别
[ ] docker容器重启后,文件是否存在
[ ] 内存有限,如何寻找两个大文件中同样的行
[ ] http常见的状态码?502的具体含义解释下?
[ ] 协程底层怎么实现?
[ ] 孤儿进程,僵尸进程
[ ] git文件版本,使用顺序,merge跟rebase
[ ] Go 如何进行调试:gdb/delve
[x] Go 如何打印堆栈:runtime.Caller
[ ] cpu特别高如何定位
[ ] sql执行慢的原因?如何看是什么问题?
[x] 如何检查之前的命令是否运行成功 (使用 Shell 脚本)
shell中使用符号“$?”来显示上一条命令执行的返回值
[x] SSL/TLS 握手过程
主要参考这个: 应用层(HTTP,SMTP) | 面试问题浓缩总结 (xiaoyou66.com) (opens new window)
[x] 正则表达式中
*
和?
的含义* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 ? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。