推荐面试题
Go
协程池是什么?Go的协程池了解过吗?√
Golang使用协程需要注意哪些方面?√
如何管理goroutine?√
Go语言goroutine的生命周期?√
会不会出现goroutine由于阻塞,导致无法消亡呢?如何排查,处理?,pprof需要去查看哪些参数进行排查呢?√
Main中你想通过ctrl c 去执行停止某个程序的执行,那你想要在程序停止,把所有资源完完全全释放,你会怎么做?√
现在有一个场景,同时发了n个http请求,由多个goroutine负责,现在你想ctrl c之后把这个信号广播出去,怎么实现?√
如何控制一个系统中不同的部分有不同的goroutine数量限制?√
怎么去判断你的goroutine是否结束?√
为什么goroutine支持高并发?√
goroutine之间有什么影响?√
有多个goroutine执行,panic该怎么处理?√
golang协程之间怎么通信?√
有很多goroutine,如果其中一个发生panic,其他会怎么样,如何处理?×
如何创建一个协程?
假设某个协程正在跑一个很大的循环,估计一个小时,如何保证这个协程会让出时间片?
goroutine和channel的特点,他们是怎么配合使用的?
单核场景下,main中go func(){print(1)}...,这样有多个协程,只打印协程编号,它的输出是有序的吗?假如有257个协程,都是print,这种情况下结果是什么?
单核场景下,有三个协程,输出1,2,3有没有可能不输出?
main函数跑在哪个协程上?
十个任务并发等待结果在下游处理怎么做?如果只能每个任务最多等待10s,到时候放弃不等怎么做?
channel协程通知的功能怎么实现的?
channel的用途和使用时要注意的点?
如果数据量超过channel开的容量会怎么样?,channel数据会丢失吗?
channel无缓冲会阻塞吗?如果阻塞怎么处理?
channel需要显示关闭吗,大小一般怎么设置?
Golang channel 如果还有数据没有发完,另外一个g能读到吗?
如果我想实现数据的一致性,或者说保证channel的数据在panic后不丢失,怎么做?
channel中阻塞协程是如何被唤醒的?
channel中被阻塞协程是否占用cpu资源?
你怎么使用channel?Channel的使用流程?
Golang单向channel有什么使用场景吗?
现在有一个场景,读写QPS都是1000你觉得这个场景适合Sync.Map吗?
讲一讲Golang中Map的使用场景
如果现在有一个数据量很大的map,那么我这个传map需不需要加引用?
现在传一个map,然后对它进行插入,然后扩容了,传引用和直接传值有什么区别?(传值和传引用,里面扩容的map和外面的map,有什么区别?)
说一下go语言中对map的理解?
给全局变量的map不停的写,再不停的删,会泄露吗?
现在通过sync.mutex加map或者channel加map,往map并发写消息,谁更好?
go的map为什么用拉链法,开放地址法不行吗?
golang中读写锁+map实现的方式,我现在有一个场景,读写请求量级相近,会有什么问题?除了读写锁退化成mutex锁之外呢,还会发生什么情况?
map的value可以对它做取地址操作吗?
想要让Slice线程安全怎么做?
slice在扩容的时候,另外一个协程来修改怎么办?
可以根据数组创建slice吗?
Slice和数组传进函数哪个效率高?
gmp的抢占式机制有什么问题?
Go用的是哪种并发单元?它是如何管理这些并发单元的?
gmp中p的数量会怎么影响运行?
interface它底层怎么实现的?
Go为什么用interface()做参数,不用struct?
Go怎么实现集合,为什么要用空结构体,不用空interface/any?空interface和any有什么区别?
Go指针会出现内存泄露?
什么情况会造成内存泄露,如何排查?
Go语言局部变量是存在栈上还是堆上?函数中返回局部变量地址合法吗?
介绍一下Go语言的内存可见性?
Go语言函数的参数在传参时,什么时候需要加引用,什么时候不需要加?
Go获取锁的时候,没有获取到,需要阻塞等待下一次再获取,当前的上下文发生什么变化?有发生调度吗?有发生切换吗?什么调度,什么切换?
如果两个协程同时调用lock会发生什么,没加锁但是unlock会发生什么?
一个变量在多个协程中可能都会有读写的一些操作,如何保证读写符合预期?
一个函数中有多个defer的话,会不会都执行到?
defer底层怎么实现的?
垃圾回收的过程是递归的还是线性的?For循环还是递归?
Go语言有什么坑?
Go语言标准库有哪些?
讲一讲go的高并发原理?
Go语言中系统调用这块是怎么做的?
Go自带的性能分析工具?
GO哪些场景会触发Panic?
gin的中间件写过没,现在把post请求的消息,写进日志,该怎么做?
MySQL
- redolog和undolog如何配合使用?
- 根据ID去数据库查数据,10亿数据,会不会慢,为什么,讲一下思路?
- 除了B+树以外还有别的数据结构可以实现索引吗?
- 数据库的范式是为了解决什么问题?为什么要有范式?
- 范式有什么坏处?
B+树的双向链表会节省磁盘I/O数吗?
在一个存储大量用户订单信息的数据库索引 B + 树中,如果需要频繁查询某一时间段内的订单(可能涉及正向和反向查询),双向链表结构的 B + 树叶子节点能够更灵活地进行数据访问,降低磁盘 I/O 开销,在合适的查询场景(如频繁的双向范围查询)下,B + 树的双向链表可以节省磁盘 I/O 次数。
- MySQL的binlog记录的是什么,日志是有序的吗?
- 现在有一个 表字段有name ,email,如何建立索引?,怎么设定这个前缀索引长度?
- 比如你需要去查询有哪些记录的邮箱是使用相同邮箱的,如何做?
- 当前读可以写操作吗?
- MySQL怎么缓解存储压力?
- 设计一个评论区表,怎么设计?
- 往MySQL里面做一个事务操作,比如说做一个更新或者是插入操作,那么这个事务的提交过程会是什么样子?
- 假设有一个API,涉及到多个SQL语句,怎么排查分析慢SQL?
- 从一个五千万数据的表中使用select where 语句查出了十万条数据,这些数据怎么导出?
- MySQL大数据量分页查询越来越慢的原因?如何优化慢的问题?
- 如果一个接口有高并发流量过来 你要怎么保障数据库高可用性?
Redis(分布式锁+主从复制高可用)
- redis的使用考虑过占用的内存方面的问题吗?
- redis是怎么实现不同数据结构对象的存储的?
- redis的缓存应用场景?使用作为缓存需要注意什么?
- rdb日志对性能有影响吗?
- rdb日志不加载到redis,可以直接拿来用吗,可以直接解析吗?
- redis缓存变慢是什么原因?
- string能不能存放二进制数据?
- 假如我有个朋友圈,互相有点赞,我要看自己发的朋友圈点赞记录,以及公共好友的点赞记录,用Redis怎么存?
- 当redis内存限制即将达到上限,此时写入一个很大的kv对会发生什么?
- 如果我们是一个非常热点的一个数据,就线上查询会比较多的,那这种情况下,我们删除缓存可能对我们的底层DB带来比较高的压力,这种情况下我们可以怎么做?
计网
- HTTP不是超文本传输协议吗,为什么能传这么多格式?
- HTTP底层用udp的话建立安全连接需要几次握手?
- HTTP如果要将tcp改为udp需要什么机制?
- 客户端向服务端的IP地址发送数据, 服务端如何确定应该把数据传递给谁?
- 操作系统做了什么事情能够把数据映射到对应的应用?
- 现在很多网站要求使用https,假设我们输入一个http网址,网站是如何实现由http转到https的?
- TCP是怎么控制传输速度的?
- 如果服务端处理的慢了,那它那边的缓冲区就会满,我这边的也会满,再去调用write()函数,会怎么样?
- 网络这边像TCP,UDP协议,有自己抓过包吗?
- 假设这种场景,发送1,2,3,4,其中2延迟,发送方又发了一个2,按时到达,然后延迟的2也到了,接收方应用层会收到重复数据吗?如果这个场景重复发3,tcp怎么处理多余的包?会有重复消息问题吗?或者已经大于滑动窗口大小,怎么处理?
计操
- 协程的原理是什么?为什么要用协程?
- 管道的使用场景,原理?
- 现在有一个管道,往里面写数据,如果一直没有进程读取,会发生什么?
- 匿名管道举几个例子,什么场景下会用到?
- 共享内存的局限性?
- 你在实习过程中用过哪些linux命令?
- 一个操作系统,我们在衡量它的内存占用的时候,它一般会有哪些内存的部分?
- 主机的内存做一些清理的动作,你知道这里面会涉及到对哪些内存区域进行操作吗?
- 多进程间希望他们按照一定的顺序来运行,怎么来实现?
- 操作系统写文件的时候内存缓冲区了解吗?
- 单核,多核CPU怎么执行的?
场景
- 如何保证你写的代码正确?(如何设计测试代码?)
- 程序挂了,宕机了,怎么排查问题?
- 有一个页面404了怎么排查?
- 系统出问题是怎么排查的?
- 怎么用golang做一些性能分析,比如一个golang服务器性能不好如何性能分析?
- 开发过程怎么调试一个go程序?
- 怎么找到cpu占用高的原因?以及定位到代码?
- 你是如何提高自己的注释水平,bug解决率的?
项目
- 通过这个项目学到了什么?
- 项目性能问题如何排查?
- 怎么排查一个项目的报错?
- 当项目里遇到一个非常慢的接口查询的时候,如何分析这个慢查询的问题出在哪里?