Golang面试-理论篇

Posted by 白行简 on Friday, March 12, 2021

参考地址:https://zhuanlan.zhihu.com/p/519979757

前言

1.声明

1、申明 文章部分题目来源于网络,答案系个人结合5月份面试了近30家公司整理所得,最后附录参考原文链接,如有遗漏的原文出处请联系本人。不对之处望批评指正,答案需要加上自己的思考,最好是代码实践下。 2.面试建议 参与过面试的企业有:zg人寿,睿科lun,qi猫,yun汉商城,zi节跳动,特斯la,虾P,chuan音,qi安信,ai立信等大大小小企业近30家,BAT简历都过不了。 1)、算法部分,刷LeetCode就完事了,这是一个长期的过程,短期突击没啥效果,因为题目太多了。

2)、语言基础,细分为:golang基础及原理,就是本文主要内容了; mysql基础及原理;redis基础及原理;kafka或其他消息中间件(如果没用过,需要了解大概的底层原理及结构); linux常用的命令,比如定时脚本几个参数时间分别代表啥,文件权限需要搞清楚,进程内存占用命令; 小公司还要懂一些前端的知识,因为他们希望你什么都会。

3)、项目经验,可以搞一个基于gin的后端接口服务的web框架,一般会问你怎么实现的;以及微服务了解一下。

非技术部分

  • 1)因为上海5月份居家办公,远程面试,这些题目准备一份,遇到卡壳的题目完全可以参考你准备好的答案,因为视频面试你眼睛是看着面试官还是题目是不太容易区分的(把题目窗口置顶)。

  • 2)HR面也可以完全准备一份可能问到的问题的答案,并不是说你不会回答,而是会让你的表达更顺畅,其次也说明你是有备而来的,我在某拉公司面试就吃了这个亏,技术通过,HR说我的表达能力不行(后续我也会把这个模板分享出来,感谢我媳妇充当面试官,以及指导如何高情商的回答HR的问题)。

  • 3)可以自己录音面试回答,看看自己的语气、音量,顺畅度,如果自己听了都不舒服,面试官可能也不舒服。

1.介绍一下Golang的特点和优点?

答:并发编程能力强、内存管理优秀、语法简洁、性能高效、代码可读性好、静态类型安全、跨平台支持等。同时还有如下特点和优点:

  • 内存使用效率高:Golang的垃圾回收机制可以在运行时自动回收不再使用的内存,同时Golang的指针机制也可以减少不必要的内存拷贝,使得Golang的内存使用效率更高。

  • 平台移植性好:Golang可以运行在不同的操作系统和硬件平台上,通过交叉编译可以很容易地将程序部署到不同的环境中。

  • 标准库丰富:Golang的标准库提供了丰富的功能,包括网络编程、加密解密、文本处理、压缩解压、正则表达式等,可以满足大部分应用的需求。

  • 代码风格一致:Golang强制采用一致的代码风格和命名规范,使得不同开发者之间可以更加容易地协作和交流。

  • 开发效率高:Golang的语法简洁,代码可读性好,同时也提供了很多方便的工具和框架,可以提高开发效率和代码质量。

  • 开源社区活跃:Golang是一个开源项目,拥有庞大的开源社区,社区成员可以共享代码、工具和经验,使得Golang的生态系统更加繁荣和稳定。

2.说说Go无缓冲的 channel 和有缓冲的 channel 的区别?

在 Go 中,channel 是一种用于协程间通信和同步的重要机制。Go 中的 channel 分为两种:无缓冲的 channel 和有缓冲的 channel,它们之间的主要区别在于 channel 是否具有缓冲区。

无缓冲的 channel 无缓冲的 channel 是指在接收前没有能力存储任何值的 channel。在向一个无缓冲的 channel 发送数据时,发送方的协程会一直阻塞,直到接收方的协程从 channel 中接收到这个数据为止。同样地,当从无缓冲的 channel 中接收数据时,接收方的协程会一直阻塞,直到发送方的协程向 channel 中发送了数据。 无缓冲的 channel 在协程间的通信和同步中具有很强的实时性和同步性,可以保证发送和接收的数据实时交换,但是如果发送方和接收方的速度不匹配,就会出现阻塞,从而影响程序的性能。

有缓冲的 channel 有缓冲的 channel 是指在接收前能够存储一定数量值的 channel。在向一个有缓冲的 channel 发送数据时,如果缓冲区未满,则发送方的协程可以立即向 channel 中发送数据并继续执行;如果缓冲区已满,则发送方的协程会阻塞,直到接收方的协程从 channel 中取走了数据为止。同样地,当从有缓冲的 channel 中接收数据时,如果缓冲区非空,则接收方的协程可以立即从 channel 中取走数据并继续执行;如果缓冲区为空,则接收方的协程会阻塞,直到发送方的协程向 channel 中发送了数据。 有缓冲的 channel 可以避免发送方和接收方之间的直接阻塞,可以提高程序的性能,但是会导致数据发送的延迟,可能会使接收到的数据与发送的顺序不一致,因此需要注意在使用时的顺序问题。

如何使用Golang进行测试?Golang中有哪些测试框架和工具?

答:Golang中可以使用testing包和go test命令来进行测试,testing包提供了测试框架和断言函数,可以编写单元测试和集成测试等不同类型的测试。同时,还可以使用第三方测试框架和工具,如Ginkgo、Testify、GoConvey等来增强测试功能和可读性。

「真诚赞赏,手留余香」

观测猿

真诚赞赏,感谢认可

使用微信扫描二维码完成支付