沥泉科技golang后端一面面经
(整场面试都是围绕着项目进行提问,回答也是根据项目)
1、自我介绍
2、对http协议有什么了解
3、http有哪些方法
4、什么场景下会使用到post方法
5、文件上传,body选用什么样的格式(formdata格式?XML格式?)
6、服务端怎么接受客户端上传的文件(ShouldBind)
7、有没有了解go-fastdfs的实现(项目用来做文件存储的)
8、golang中可读可写(可进行IO操作)的文件一般会实现哪些接口(Reader、Writer接口)
9、http协议的定义?http的报文长什么样
10、http1和http2有了解么
11、gin框架有使用到么
12、在gin中,写一个helloworld接口需要怎么实现
13、项目gin框架使用了什么路由中间件(回答了日志中间件)
14、中间件设计成前置还是后置(也就是中间件的传递链)
15、实现大文件的思路
16、大文件为什么会使用到分块上传,它的本质是什么?是为了解决什么问题(只说了提高服务可靠性,没满意,面试官还引导我往超时方面去考虑,结果就是避免http连接超时。)
17、分块没有按需到来怎么处理
18、雪花算法是你实现的么,对它有什么了解
19、使用随机数不行么?(项目中是用雪花算法来生成文件名)
20、gin中怎么用swagger写接口的文档,语法(格式)是怎么样的(接口的路径、格式、入参出参、状态码怎么定义的)(之前是用的oat++的swagger,然后这里偷懒没有去实现,哭死)
21、项目怎么部署的(云服务器还是虚拟机)
22、虚拟机用的什么软件(vm)
23、项目有没有前端,只是一个api项目么
24、由配置nginx么,还是直接访问
25、我看你还写了领域驱动,聊聊领域驱动设计吧(DDD的四层)(这里面试官有几次都绷不住笑出声了,答得太糟糕了,跟svc混了,然后面试官还给我解释了,也说了两句面试官在上家做的一个DDD业务,但是没落地)
26、为什么会想到自己去实现RPC,是其他的不好用么还是说实践一下
27、负载均衡怎么做的,使用的算法有什么
28、超时怎么做的,客户端还是服务端
29、怎么设计channel,从主协程开始(select串行执行,业务就被堵住了,怎么能执行到select呢?)(当时脑子宕机了,没说出来开另一个协程来处理)
30、RPC业务的逻辑怎么返回的,RPC服务端的结果怎么返回的
31、项目mysql有几张表
32、mysql怎么查询字段(sql语句怎么写)
33、框架里怎么和mysql通信(gorm...)
34、gorm查询列表调用哪些方法
35、编写原生sql语句有没有遇到拼接多个语句的麻烦(怎么动态的拼接查询的sql语句)
36、sql模糊查询怎么实现
37、使用左like还是右like
38、like走不走索引
39、怎么查看sql的执行计划
40、redis用来干什么,有什么用途
41、redis、mysql都不存在用户请求的数据怎么处理,除了缓存空值还有什么?
42、redis的key在同一时间大量过期
43、(42的情况下)从mysql调数据到redis时,加锁这一步有了解吗
44、map中ok这个写法用过么?就是判断map中数是否存在(只答了多重返回值的,少了一个)
手撕:两数之和
有什么想问面试官的:面试有几轮、哪时候能有答复