rest|golang笔记 | 面试题整理

rest|golang笔记 | 面试题整理

前两天有个朋友去面试 , 把他给问自闭了 。 拿到他的面试题后 , 花了一些时间 , 整理了以下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相对于rest的优势
gRPC 对接口有严格的约束条件 , 安全性更高 , 对于高并发的场景更适用
为什么选择grpc
  • grpc有明确的接口规范和对于流的支持;
  • RPC 效率更高 。 RPC使用自定义的 TCP 协议 , 可以让请求报文体积更小 , 或者使用 HTTP2 协议 , 也可以很好的减少报文的体积 , 提高传输效率 。
3、golang里面常用到的技术栈有哪些?
协程、通道、web框架、密码学等
4、gin框架的好处是什么?
  • 快速:基于Radix树的路由性能非常强大 。
  • 支持中间件:内置许多中间件 , 如LoggerGzipAuthorization等 。
  • 崩溃恢复:可以捕捉panic引发的程序崩溃 , 使Web服务可以一直运行 。
  • JSON验证:可以验证请求中JSON数据格式 。
  • 多种数据渲染方式:支持HTML、JSON、YAML、XML等数据格式的响应 。
  • 扩展性:非常简单扩展中间件 。
5、无缓冲通道和缓冲通道的区别是什么?
  • 无缓冲通道 , 在通道满了之后就会阻塞所在的goroutine 。 (需要在其他goroutine中取出该通道中的元素 , 才能解除它所在通道的阻塞 , 不然就会一直阻塞下去 。 )
  • 缓冲通道 , 存完了东西可以不取出来 , 不会阻塞;
  • 缓冲通道相较于无缓冲区的通道在用法上是要灵活一些的 , 不会出现一次写入 , 一次读完就会堵塞 。
6 、select的用处是什么?
过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语句的作用是不管程序是否出现异常 , 均在函数退出时自动执行相关代码 。