首页 golang

golang面试题-框架

发布于: 2024-04-24

微服务了解吗?

微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的 API 进行通信的小型独立服务组成。微服务架构使应用程序更易于扩展和更快地开发,从而加速创新并缩短新功能的上市时间。

服务发现是怎么做的?

主要有两种服务发现机制:客户端发现和服务端发现。

客户端发现模式:当我们使用客户端发现的时候,客户端负责决定可用服务实例的网络地址并且在集群中对请求负载均衡, 客户端访问服务登记表,也就是一个可用服务的数据库,然后客户端使用一种负载均衡算法选择一个可用的服务实例然后发起请求。该模式如下图所示:

服务端发现模式:客户端通过负载均衡器向某个服务提出请求,负载均衡器查询服务注册表,并将请求转发到可用的服务实例。如同客户端发现,服务实例在服务注册表中注册或注销。

ETCD用过吗?

etcd是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它可以优雅地处理网络分区期间的领导者选举,即使在领导者节点中也可以容忍机器故障。

etcd 是用Go语言编写的,它具有出色的跨平台支持,小的二进制文件和强大的社区。etcd机器之间的通信通过Raft共识算法处理。

GIN怎么做参数校验?

go采用validator作参数校验。

它具有以下独特功能:

  • 使用验证tag或自定义validator进行跨字段Field和跨结构体验证。
  • 允许切片、数组和哈希表,多维字段的任何或所有级别进行校验。
  • 能够对哈希表key和value进行验证
  • 通过在验证之前确定它的基础类型来处理类型接口。
  • 别名验证标签,允许将多个验证映射到单个标签,以便更轻松地定义结构体上的验证
  • gin web 框架的默认验证器;

中间件用过吗?

Middleware是Web的重要组成部分,中间件(通常)是一小段代码,它们接受一个请求,对其进行处理,每个中间件只处理一件事情,完成后将其传递给另一个中间件或最终处理程序,这样就做到了程序的解耦。

你项目有优雅的启停吗?

所谓「优雅」启停就是在启动退出服务时要满足以下几个条件:

  • 不可以关闭现有连接(进程)
  • 新的进程启动并「接管」旧进程
  • 连接要随时响应用户请求,不可以出现拒绝请求的情况
  • 停止的时候,必须处理完既有连接,并且停止接收新的连接。

为此我们必须引用信号来完成这些目的:

启动:

  • 监听SIGHUP(在用户终端连接(正常或非正常)结束时发出);
  • 收到信号后将服务监听的文件描述符传递给新的子进程,此时新老进程同时接收请求;

退出:

  • 监听SIGINT和SIGSTP和SIGQUIT等。
  • 父进程停止接收新请求,等待旧请求完成(或超时);
  • 父进程退出。

实现:go1.8采用Http.Server内置的Shutdown方法支持优雅关机。 然后fvbock/endless可以实现优雅重启。

持久化怎么做的?

所谓持久化就是将要保存的字符串写到硬盘等设备。

  • 最简单的方式就是采用ioutil的WriteFile()方法将字符串写到磁盘上,这种方法面临格式化方面的问题。
  • 更好的做法是将数据按照固定协议进行组织再进行读写,比如JSON,XML,Gob,csv等。
  • 如果要考虑高并发和高可用,必须把数据放入到数据库中,比如MySQL,PostgreDB,MongoDB等。

go的调试/分析工具用过哪些。

go的自带工具链相当丰富,

  • go cover : 测试代码覆盖率;
  • godoc: 用于生成go文档;
  • pprof:用于性能调优,针对cpu,内存和并发;
  • race:用于竞争检测;

grpc为啥好,基本原理是什么,和http比呢

官方介绍:gRPC 是一个现代开源的高性能远程过程调用 (RPC) 框架,可以在任何环境中运行。它可以通过对负载平衡、跟踪、健康检查和身份验证的可插拔支持有效地连接数据中心内和跨数据中心的服务。它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务。

区别:
- rpc是远程过程调用,就是本地去调用一个远程的函数,而http是通过 url和符合restful风格的数据包去发送和获取数据;
- rpc的一般使用的编解码协议更加高效,比如grpc使用protobuf编解码。而http的一般使用json进行编解码,数据相比rpc更加直观,但是数据包也更大,效率低下;
- rpc一般用在服务内部的相互调用,而http则用于和用户交互;
相似点:
都有类似的机制,例如grpc的metadata机制和http的头机制作用相似,而且web框架,和rpc框架中都有拦截器的概念。grpc使用的是http2.0协议。
官网:gRPC