Golang面试经验分享

jiangyusheng · · 1115 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
> 因为我本人目前不是做Golang方面的工作,所以问的Golang方面的问题不是特别多,细节的问题也不多,而且面试的很多问题都会结合个人的情况,所以以下内容仅供大家扩展眼界,查缺补漏 ### Golang基础 1. Golang 中sync包下的内容,使用过哪些内容。 2. 设计模式中的单例模式,在Golang中有哪些实现的方式 3. Golang中的锁,有哪些,基本的API如何使用 4. 一个锁,如果没有调用lock()方法,就直接调用unlock(),会发生什么。 5. Golang的协程与传统的线程,有哪些优势,好处在哪里,能不能简述一下。 6. G P M 的问题,就是协程的调度那块内容。 ### 框架上 因为我目前的工作没有使用关系型数据库(mysql),所以当问到这块的时候,都被我推掉了,这块的内容也很重要! #### Redis相关 我简历写了Redis比较熟悉,所以问的比较多。 1. Redis的5中数据结构 2. Redis自实现了哪些数据结构 3. Redis作为一个单线程的框架,为什么比较快。 4. Redis 主从模式是否了解,主从之间如何做数据同步的 5. Redis 主从模式的工作原理 6. Redis 访问数据,连接的机器不处理这个Slot,访问的话会怎么样。 7. 如何保证两个key,Slot不一样,但是还可以放在一个机器里面 8. Redis的事务不具备回滚的能力,如何做到可以回滚。 9. Redis的list可以从首尾取元素,那么Redis可不可以按照范围取数据,有什么要求。 #### Kafka 、 MQ一类 我目前工作MQ一类作为消息的处理方,所以对MQ的内容熟悉度有限,问的不是很深,欢迎各位在补充 1. Kafka offset相关的内容,具体的问题我不太记得了。 2. Kafka消息重复的这种情况,如何处理 3. broker的概念内容。 #### GC相关 我简历写了对GC比较熟悉,所以这块问的比较多,不过可能GC实际操作的内容比较少,所以偏理论的问题。 1. Golang的GC是什么样的 2. Golang的对象,什么时候,GC才会参与处理数据(逃逸对象问题) 3. GC的工作模式,优劣。 4. Golang的GC是否可以进行调优,如何分析,处理 5. Golang与其他语言GC相比,区别联系(Java GC),这个问题谈的比较开放,就是聊一下GC的内容,跟语言无关,看你的知识面能聊多少了。 #### 分布式事务 我公司有个分布式事务的监控框架,可以提供一些事务上的补偿,所以问了这个。 1. 分布式事务原理上的问题(CAP,BASE,ACID) 2. 我们公司的分布式事务管控,框架提供的能力。 #### 多级缓存 同样是公司有这个框架的能力,就需要介绍一下使用的问题等等。 1. 为什么要有多级缓存框架。 2. 缓存穿透和缓存雪崩的区别,你们的处理方式 3. 本地缓存的同步问题。 #### 调度计算服务 业务自己基于Redis,根据自己的业务特点,写了一个调度分发和计算服务的内容。 这里不能谈太多了,因为涉及业务细节,跟自己公司的业务匹配度比较高,不具备通用性。 大部分大数据的处理模式,我了解的还是基于MQ处理的,通过MQ削峰,然后由于Kafka一类的MQ会有消息重复的问题,尽量保证消费端幂等,消息如何保证不丢失,处理失败是否需要回滚等等,这个公司如果有这种服务的话学习起来就比较快了,如果没有的话,可能就理解的不是很透彻了,我在这也不写具体的题目了,我见过的也有限,欢迎大家加入讨论。 #### Serverless 这块我曾经有使用过,问过做的一些内容,很多人可能都不太了解什么是Serverless,所以欢迎大家把这个作为一个扩展阅读。题目我就不给了,很多面试官对这个概念都只是听过,也没问什么比较有价值的问题。 ### 基础内容 & 算法题(手写) 我目前服务器的环境是Windows环境(因为我是做C#/.NET)的,所以问了Linux常用的一些东西,我也推掉了,这块有必要补充学习一下。 1. GoF设计模式,说一些比较熟悉的,4种以上。 2. 上面我提到了观察者模式,然后面试官让我手写一个简单的观察者模式,不限制语言,比较崩溃,写的磕磕绊绊,但是勉强思路还是没问题的,以后少给自己挖坑。 3. 给定一个数字的字符串,列出所有可能的IPV4 地址,例如“123456”,那12.34.5.6就是符合的一个结果。123.4.5.6也是。 4. 给一个数组,给出他的中位数。 5. 给一个单链表,一个from,一个to,把链表from-to的内容反转,比如说1-2-3-4-5-6,from=1 ,to = 3 那结果是1-4-3-2-5-6。 6. 写一个二分查找的代码 7. 给一个数组,一个目标数,列出所有两个数字和为目标数的所有结果。例如数组:[1,2,3,4,5,6,7], tag = 5, 那结果是[[1,4],[2,3]]。尽量优化时间复杂度和空间复杂度。 #### 系统设计 有几个系统设计的问题跟公司用的系统息息相关,通用性不强,我给出一个我认为通用性强的: 1. 例如抖音有一个功能,如果一个视频的评论里面,有你关注的人给了评论,那么就会把这些评论,置顶,之后再按照评论的热度依次向下。这种情况下如何设计业务和缓存,保证可以实现这个效果。(PS. 视频千千万,每个评论也可能有几十万,所以不可能每次都直接查询,肯定是要设计缓存的,重点考虑一下缓存的设计和存储的设计。) 2. 列举一下你公司的系统上的设计,或者你认为比较有价值的设计。 ### 后记 里面我没有附加答案,因为很多问题,面试回答可能会比较片面,有的问题也没有标准答案,我回头慢慢往里面补充一些这方面的内容。 之前一直有人说面试看缘分,我不太懂。最近面试我理解了,每个人都服务于自己熟悉的业务内容,每个业务体系都有熟悉的框架和使用模式,所以你很难跟对方完全对上思路,技术内容也很难完全匹配。 特别是系统设计上,很多人都爱用自己公司的设计问题,特别是一些设计难点,来问你,看你临时发挥到什么程度,这种问题就只能看你对微服务设计上的很多细节内容了,我觉得没有办法万法归一,需要多看多积累,很多目前的书都会有介绍,大家可以多读读。 ### 学习资料推荐 - 框架的官网是最好的资料,没有比原作者更熟悉他们的内容的了,如果你英语不错,我就强烈建议先刷一遍官网,再看别的比较深入的博客内容。 - 我看过的觉得不错的书: - 《Redis设计与实现》 - 《深入分布式缓存:从原理到实践》 - 《分布式服务架构:原理、设计与实战》 - 《深入浅出Serverless(技术原理与应用实践)》 - 《剑指Offer》 - 《深入理解ElasticSearch》 - 这本书是翻译的,很多翻译有点不太准确,不过整体内容还是很棒的 - 《MySQL技术内幕:InnoDB存储引擎(第2版)》

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

1115 次点击  ∙  2 赞  
加入收藏 微博
1 回复  |  直到 2019-05-22 18:53:56
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传