前两天有个朋友去面试 , 把他给问自闭了 。 拿到他的面试题后 , 花了一些时间 , 整理了以下golang面试题 , 都是比较基础的问题 , 留给大家作为面试参考 。
1、在进行项目开发时 , 遇到的关于golang的问题有哪些?
可简单描述工作中用到的东西 , 协程 , 通道 , 框架、加密等等 , 说一些关键的技术点
2、golang中关于grpc和rest都使用过吗?grpc相对于rest的优势是什么?为什么选择groc?
两种API架构概述
- grpc:gRPC是RPC框架中的一种 , RPC(remote procedure call 远程过程调用)框架目标就是让远程服务调用更加简单、透明 。 RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节 。 服务调用者可以像调用本地接口一样调用远程的服务提供者 , 而不需要关心底层通信细节和调用过程 。 RPC是一种设计理念 , 而gRPC是基于此种设计理念设计的真实框架 。
- rest:描述的是在网络中client和server的一种交互形式;一个架构样式的网络系统 , 指的是一组架构约束条件和原则 。
gRPC 对接口有严格的约束条件 , 安全性更高 , 对于高并发的场景更适用
为什么选择grpc
- grpc有明确的接口规范和对于流的支持;
- RPC 效率更高 。 RPC使用自定义的 TCP 协议 , 可以让请求报文体积更小 , 或者使用 HTTP2 协议 , 也可以很好的减少报文的体积 , 提高传输效率 。
协程、通道、web框架、密码学等
4、gin框架的好处是什么?
- 快速:基于Radix树的路由性能非常强大 。
- 支持中间件:内置许多中间件 , 如LoggerGzipAuthorization等 。
- 崩溃恢复:可以捕捉panic引发的程序崩溃 , 使Web服务可以一直运行 。
- JSON验证:可以验证请求中JSON数据格式 。
- 多种数据渲染方式:支持HTML、JSON、YAML、XML等数据格式的响应 。
- 扩展性:非常简单扩展中间件 。
- 无缓冲通道 , 在通道满了之后就会阻塞所在的goroutine 。 (需要在其他goroutine中取出该通道中的元素 , 才能解除它所在通道的阻塞 , 不然就会一直阻塞下去 。 )
- 缓冲通道 , 存完了东西可以不取出来 , 不会阻塞;
- 缓冲通道相较于无缓冲区的通道在用法上是要灵活一些的 , 不会出现一次写入 , 一次读完就会堵塞 。
过select可以监听channel上的数据流动 。
select的用法与switch语言非常类似 , 由select开始一个新的选择块 , 每个选择条件由case语句来描述 。
示例代码如下:
select {
case <-chan1:
// 如果chan1成功读到数据 , 则进行该case处理语句
case chan2 <- 1:
// 如果成功向chan2写入数据 , 则进行该case处理语句
default:
// 如果上面都没有成功 , 则进入default处理流程
7、defer的用途和使用场景是什么?
defer作用:可用于捕获程序异常 , 在某个方法中 , 出现异常时 , defer可捕获此异常并进行打印 , 使用关键字defer向函数声明退出调用 , 即主函数退出时 , defer后的函数才被调用 。 defer语句的作用是不管程序是否出现异常 , 均在函数退出时自动执行相关代码 。
- 笔记本|续航媲美MacBook Air,这款Windows笔记本太适合办公了
- 比特币|买小众低端品牌笔记本,还不如二手一线品牌高配置,有道理吗?
- 笔记本电脑|华硕笔记本电脑问题不断?消费者很糟心
- 如何在 Notion 类产品中使用卡片笔记写作法:理念与实践
- 笔记本|一台当四台用!ROG幻16翻转本首发开卖:奢华配置18999元
- 华硕笔记本电脑问题不断?消费者很糟心
- 英特尔|AMD和Intel笔记本如何选?最新CPU天梯图告诉你答案
- 笔记本|久未露面的马云,驾着13亿游艇在西班牙游玩,说好当乡村教师呢?
- 联想|适合大一新生电气自动化专业的两款联想笔记本电脑
- 软件|高品质铸就好口碑 荣耀笔记本赢麻了:以创新科技引领体验升级