万声音乐golang面筋

目前oc率100%,继续保持😁。

因为自身在绿盟实习,这里纯玩啥也不用干,问了下学长的意见就不去了,打算狠狠带薪沉淀了,过俩月all in大厂。

-----我是一条分割线------

一面:

》自我介绍

说了下自己的学校,专业,年级,工作室负责的事,最近在学的东西,微服务,cs课程比如raft。

》展示下自己最值的一提的项目

我选的是一个raft相关的项目,把6.824移植出来弄了个高可用的kv,开屏幕共享展示了下容错表现,以及状态机实现思路,亮点是基于消息/事件,事件循环。

》你对于raft的理解,你认为raft是一个强一致性还是最终一致性的?

准确的说叫线性一致性,但是对程序来说可以看成强一致性的。这里我说了下我对raft的理解就是多个节点绑定成为一个不可宕机/或宕机机率非常小的单机节点,而单机节点就可以理解为一般意义上的强一致性了。

》你说下redis集群的一致性?最终一致性或强一致性?

redis主节点负责拿写入操作,从节点重放,其实会发生丢数据的情况,可以认为它是最终一致性,且会丢数据,根本不是强一致的。

》CAP理论了解吗?

说下AP系统或CP系统,trade off说下,常见场景说下就OK。

》有没有使用过redis,说下自己做了什么功能?

可以说zset实现排行榜,聊下跳表,红黑树,时间复杂度。可以说缓存。可以说stream实现消息队列。set实现共同关注。

》说下B+树和跳表有什么优劣?

先说下它们最底下一层都是链的数据,范围查询都很方便。此时可以说一下红黑树范围查询实现很难受,要返回父节点,来回捣腾。可以说B+树实现困难,跳表实现简单。可以说B+树存放2kw数据就只需要三层,IO少,查询快。那么为什么使用跳表? 可以说内存数据库不存在磁盘IO,此时只需要插入的快就不错了,B+树为了平衡会做额外的算法,较慢。

》为什么四次挥手?

从半关角度的方向说,说一下FIN包过程状态。扯一下muduo那本书的设计。

》进程线程协程?

写过简单的时间片调度器,简单聊聊设计就行。

》协程在操作系统层面是可见的吗?

协程是程序调度器自己切换的,寄存器信息都放内存里的,操作系统不知道这块内存干啥的。

》go的map并法安全要求

简单八股,说下write的标志导致panic就行。此时可以扯一下sync.Map的设计。

》说下gc过程

白给了,没背,直接说暂未了解。回头看刘丹冰的视频吟唱八股。

》mq你用过吗? 如果用redis实现延时队列

我说的轮询+list。面试官觉得不好,我从定时器设计角度说了下堆排,感觉差不多。其实我没有怎么了解这个,说的有漏洞,其实真的答案是zset,score存时间戳,排进去就立马把时间戳小的挤前面了。

》如何实现限流

说漏桶,令牌桶,滑动窗口。之前没了解这方面,只说了漏桶的思路,面试官好像不满意,他应该想听滑动窗口。

》写道简单题,acm模式,输出最长连续递增子序列的长度,1 2 3 4 1 1 1 7 8 9 10,输出5

简单dp,3min秒了。

》反问

反问1,业务用的什么框架? 说golang的gin,提供http服务。

反问2,对我有什么建议/评价?面试官的大概意思是让我多了解点常见的问题,比如常见八股,限流,gc,redis实现延时队列,实现mq诸如此类。

反问3,如果有下次面试,是什么时候?他说之后流程不是自己负责了。

面试官人很好,一直鼓励我,说话很委婉,爱了!

二面:

最汗流浃背的一集,感觉是个大佬,简单问题没答好。

》问下redis,说下基础数据结构

草了,脑子抽了压根没背,纯乱说,真实个煞笔,真想给自己两耳屎,听录音真尴尬啊!

》说下zadd, zcard, zrange的时间复杂度

简单。

》说下golang基础,下面输出是什么

简单,考察defer先进后出。

》golang基础,说下下面能通过编译吗

草了,这个脑抽忘了,我说第二句会不通过编译,他说错了。汗流浃背了。

》说下下面语句后的len和cap

简单,这个是切片的扩容策略,扯一下之后版本的优化,在达到一定的大小后不再2倍扩容。

然后又问了,a的地址发生改变了吗?这个问题要分两段答,本身没有改变,但是底下的pointer指向了新的地址。

又问如果a再次append一次呢? 两倍扩容。

》说下下面的输出

简单,这就是个闭包。输出1,2

》谈谈下面的代码。

我说会panic。

》说下预期输出结果

我坚持认为结果是未定义的,abc,abb,acc,ccc都可能。但是面试官坚持说ccc。无语了啊!!这里我说了go1.22的改进,以及v其实是同一个变量。

》goroutine什么时候会让出时间分片?

领域展开,可以说大栈消耗的函数调用,可以说信号抢占,直接说自己实现过信号抢占的调度器。可以说sleep这些api,read底下的wait会等待fd readable,此时被挂起。还可以说golang比较重要的信号量,好多sync的实现都依赖于它。还可以说系统调用会开新的线程,此时也会发生调度。我还说了调用c语言,但是我不确定,这点需要研究下。

》读写锁原理?

不知道,我说了C语言的锁实现原理。CAS,Fetch And Add,然后futex系统调用。这个真得去研究下代码了。

》写sql,说下获得某一天得所有data

简单,create_time限制一下范围。

又问,再考虑一下分页问题,用limit, offset就行。

》网络方面,说下拥塞控制

草了,没背!!!胡言乱语,汗流浃背了!!!

》http1.1和2的重要升级,3和2的区别

啊!!没背,只说到了队头阻塞。真得好好背了!3和2区别说了quic,我说了udp,不可靠得udp上面重新发明tcp。

》10TB url,50M内存,说下如何判断path出现得种类数。

这个很简单,把同样的url hash到同一个文件中,可以扯下mapreduce思想。

》反问:

  1. 怎么提升自己?golang基础还差点,有俩基础问题没答上来。多了解下redis的基础数据类型等基础八股。
  2. 业务做什么?省略了...

总结:去看看小林coding的mysql,redis,网络,狠狠准备八股。去看刘丹冰/小徐同学的gc,内存管理,以及一些sync的实现原理,比如mutex和rwmutex, waitgroup, cond,context,channel。去研究下golang调用c语言的原理。

全部评论
我已经看得汗流夹背了
13 回复
分享
发布于 03-17 20:20 重庆
主要多个内推可以看看
3 回复
分享
发布于 03-19 17:57 陕西
滴滴
校招火热招聘中
官网直投
哥,go项目咋准备的,😭😭😭😭😭,教教弟弟
2 回复
分享
发布于 03-19 00:46 辽宁
↑春招 实习 Mark↑
1 回复
分享
发布于 03-19 20:31 广东
我俩二面的题都是一样的
点赞 回复
分享
发布于 03-17 22:28 北京
佬你是本科 26 届 还是 研究生 26 届 我看的汗流浃背了
点赞 回复
分享
发布于 03-17 22:44 美国
好猛啊xd
点赞 回复
分享
发布于 03-18 08:08 云南
你golang 基础看的哪些资料呀
点赞 回复
分享
发布于 03-18 09:02 北京
佬在哪里投的啊
点赞 回复
分享
发布于 03-18 13:01 海南
汗流浃背了,这是准备了多久的八股和技术实践
点赞 回复
分享
发布于 03-18 15:36 广东
问下大佬,你是怎么把6.824移植到一个高可用的kv,有啥思路吗?kv是用map模拟的吗?
点赞 回复
分享
发布于 03-18 15:54 上海
啊,关于最后一个 goalng 代码片段,我在 VScode 里面试了一下,golint 提示警告:loop variable v captured by func literal,我运行了之后确实基本都是 ccc ;不过如果切片特别长的话就不保证,但大部分的值确实是切片里的最后一个值。上谷歌搜了一下,说因为主协程只是负责启动子协程,主协程取切片中的元素很快,主协程中的 for-range 循环一下子就运行完,然后等待 wg.Wait() ,此时闭包子协程捕获的外部变量 v 早就已经赋值为切片的最后一个元素了。
点赞 回复
分享
发布于 03-18 20:46 美国
666还有高手
点赞 回复
分享
发布于 03-19 23:26 广东
好强的校友,我也喜欢鼬子
点赞 回复
分享
发布于 03-20 16:20 重庆
佬,你绿盟面完多久知道过没过的消息啊
点赞 回复
分享
发布于 03-21 17:31 四川
path种类应该是hyperloglog吧
点赞 回复
分享
发布于 03-29 01:18 上海
太猛了
点赞 回复
分享
发布于 04-09 19:30 辽宁
看得我大脑已经陷入阻塞状态, 马上就要休眠了
点赞 回复
分享
发布于 04-22 15:12 北京

相关推荐

28 126 评论
分享
牛客网
牛客企业服务