小菜刀面试归来

Golang技术分享的读者朋友们,小菜刀回来啦!

因为某些不可抗拒的原因,小菜刀选择从深圳到广州去发展。广州一共面了五家公司,分别是酷狗音乐(offer)、欢聚时代(offer)、字节抖音直播(一面1个半钟,二面2个钟,仍然惨遭淘汰)、网易互娱(已入职)、金山WPS(三面,莫名无后文)。

小菜刀非CS研究生毕业,两年工作经验。我将面试过程中的问题分为以下几类,希望能给到准备换工作的读者一点帮助。

1. 个人简历

该类问题,往往是面试官根据你的自我介绍,或者简历中某个比较有意思的经历而询问的简单问题,用于暖场。

2. 项目与特殊案例

对于社招而言,项目问题是必问的。虽然所做的项目因人而异,但是通常面试官会从这些方面询问。

  • 背景:项目是做什么用的?

  • 内容:你在该项目中承担的哪部分工作?

  • 挑战:项目给你最大的挑战是什么,遇到过的问题,技术难点在哪?

  • 解决方案:为什么要这样做,或者为什么要用A而不用B?

对于自己做过的项目,一定要做到无死角覆盖,多从提问者的角度思考问题。另外,一定要学会用语言来描述清楚项目结构和重要流程,因为你平时和同事聊项目时,往往伴随着白板上的绘图,而在线上视频时,你只能口述,这一点需要注意。当然,有条件的情况下,可以找其他同事模拟项目面试。

除项目外,面试官有时还会问你一些特殊案例。例如OOM;CPU100%;索引优化;redis响应慢等。这些案例,你应该都准备一个。或许你在工作过程中确实没有遇到过,但是你的同事们大概率会遇到,可以向同组、同部门的同事请教一下这些特殊案例的发生、排查以及解决方案。但有一点很重要,不是你自己遇到的问题,就没必要硬说是自己做的,否则被问穿,吃亏的是自己。

小菜刀面试归来_第1张图片

另外,有个面试原则如上图所示。尽量和面试官聊2的内容,这样你们会在一个频道上面,不会出现认知误差,其次是聊3,最差是聊到1。

3. 基础知识

所谓的面试八股文,主要就是计算机基础知识,包括数据库、网络、操作系统、数据结构等。读者朋友可以想一下这个问题:通过自己键盘在牛客网上写下的代码,是如何在面试官的电脑屏幕上得到展示的?回答地越详细越好。

4. 扩展问题

一般用于考察面试者的创造力、思维和知识整合能力等。例如给你包含100亿个key的文件,每个key的大小为500字节,key可能存在重复,如何用1G运行内存的单机计算机找出频率最高的10个key?

5. 手撕算法

对于算法,我个人是非常赞同框架思维的观点。单纯对于求职面试而言,并不需要提前大半年就每天刷题准备,掌握好各种算法思维才是关键。从我遇到的面试算法题而言,二叉树和链表操作是最高频的,可以重点刷上一些。

另外,程序员在日常开发中往往都会使用智能IDE,包括包的导入,基本代码规范,自动补全等。而在面试过程中,是没有这些功能的,你必须得手写出来 import 包名func 而不是 def 等,这些细节不应该出错。

这里推荐一个公众号:labuladong,各种算法套路总结得非常不错。

6 . Go语言面试题

既然本公众号是分享Go语言知识的,那么这里小菜刀就单独将面试中被问到过的Go面试题列举如下。

  • GMP模型

GMP模型是Go语言的立身之本,作为一个Gopher必须对其有所理解。面试官最基本的期望是你能够讲出GMP模型的大概,并能谈出G、M、P三种对象的作用和存在原因。在这其中,可能会穿插一些问题,例如goroutine的上下文切换和内核线程相比为什么会轻量很多?抢占式调度是怎么回事?P的执行时间片是谁给的?

  • 内存模型

当面试官让你谈谈Go的内存模型,这其实是一个很大的话题。因为这涉及到内存申请、分配、回收与释放的过程。通常来讲,你可以从两个方向谈:一个是使用了近于TCMalloc算法的内存管理模型,另一个垃圾回收算法(三色标记与混合写屏障)。在这其中,或许还会问上逃逸分析,堆栈问题,手动控制内存分配应该怎么做等。

  • 标准库

在标准库中,面试官热衷于问channel的使用与实现;sync.Pool的使用与其优化原理;map/sync.Map的实现;sync.Mutex实现(sync包是热门)。

  • pprof工具

一般谈到pprof工具都是谈到程序优化、问题排查时而引出来的,这里需要去了解一下pprof背后的实现原理,它是如何对Go程序进行性能检测的。

  • 其他

还有一些Go使用细节的问题,面试官可能也会问及。但相对而言比较简单,都是实际写代码中会遇到的。例如切片与数组的区别;哪些类型能作为map的key;接口的指针接收者与值接收者的区别等。

你可能感兴趣的:(算法,java,面试,编程语言,人工智能)