面了30分钟 , 基本什么都问了但是答不出来的有很多
1. 自我介绍
--
2. string有了解吗 ,他的底层是什么
一个指针指向[]byte , 还有一个长度 ,
3. 那么string底层是一个指针,我们函数传参的时候修改会影响string吗
string并不能被修改
--
4. 那么如果传参是一个slice会影响原数组吗
如果没扩容会被影响 , 但是扩容了并不会影响
--
5. map有了解吗 ,怎么保证并发安全
加一个互斥锁和map一起或者改用sync.map
--
6.sync.map底层是什么有了解吗
底层是两个map , 一个read map 一个dirty map , 一开始读read map ,没有数据则加锁穿透去读dirty map
并且记录一个计数 ,计数满的时候read map被用dirty map进行覆盖
--
7. 我看你有了解过context是吗 ,context用来干嘛的
context和channel差不多,一般用来在并发场景下进行传递数据
--
8. 那你项目中[七天-Web框架]你的context是怎么用的
我并没有用context ,我是自己设计了一个和context差不多的结构体,里面有head body ,中间件信息, 和一个互斥锁
进行传递上下文
--
9.我们读一个关闭的channel会发生什么吗 , 写一个呢?
读并不会panic , 但是写会。我们优先读取channel里面还有的值 , 如果没有则放回当前数据的0值
--
10. 你项目gprc用的什么协议规定
用的protobuf
--
11.有了解过protobuf是用什么进行序列化的吗
不了解
--
12. 讲讲mysql索引的优化
最左前缀
注意范围查找会把联合索引退化成全表查询
注意类型转换带来的全表查询 ,例如varchar -> int
--
13.你项目中是用到了吗
是的
--
14.一般你怎么设计一个表 (还扯了点场景 ,没听清)
首先必有的字段id , 创建更新删除时间
另外的字段需要根据具体场景具体分析
--
15. 你一般设置的varchar一般都是变长的吗
不懂 , 我一般都是定长的varchar(100)...
--
16. 你知道utf8 varchar最长是多少吗
不知道
--
17. 查询xxxx一般用什么 (没听清 , 复述了一遍还是没有就说不会了)
--
18.你有自己写过联表查询吗(还多说了一句有的吧) ,
没有写过,大二的时候数据库课程写过,但是大三并没有写过
--
19.数据库的原子性用什么方式实现的
记不清了,不知道
--
20.你一般使用ORM ,有自己写过纯SQL吗
有写过,之前Java的时候写过
--
21.有了解过Linux的虚拟内存吗
操作系统的虚拟内存吗 , (以为会问分页啥的,没清楚),没了解过
--
22.Linux你一般用什么指令
Top查看内存和CPU , 或者使用ps ,以及看一些端口占用的指令,和一些创建文件,进入文件,查看文件,删除的指令
--
23.那么我现在需要查看一个文件最新更新的100行怎么做
不知道, 只会vim
--
24.进程和进程之间的通信是怎么实现的
一开始答了channel和goroutine , 但是说不对,想想管道?信号量? (面试官 : 算了我们先不说这个)
--
25.两次握手但是我一直发数据,和三次握手一样吗
先八股文了 , ,.... 浪费了服务端等待的时间 , (反问: 可是我一直发) , en... 一直发我认为应该就一样了
--
26.TCP断开连接的Time_OUT状态字有了解吗
没有
--
27.说一个你熟悉的排序算法
快速排序
--
28.说说快速排序的流程
首先将大问题处理成子问题 , 然后递归处理子问题,最后回溯子问题合并
我们一般需要找一个基值, 然后从两头找第一个大于基质的值,然后找一个小于基质的值
最后我们交换位置
--
29.那么我对一个排好序的数组进行快排时间复杂度是多少
nlogn及以下?
--
30.为什么是nlogn及以下?
快排本来就是nlogn,因为已经排好了,我认为不会再进入处理操作(想错了) ,所以log可以去掉
--
31.topk问题
--
应该还有好几个问题,忘记了IOS不能录音,只能自己回忆了
#go##实习##面经#