这次面试过程感觉思维有点发散,面着面着感觉聊起了天。。
- 自我介绍。
- 问起了一些我们公司的微服务的一些细节。
- 刚刚说到你们的微服务都是有来有回的情况嘛,要是传输的是大文件呢?
如果给我实现的话应该会在本地上传到我们的文件系统,然后用地址进行传递吧。。
- 你们公司用的什么文件系统。
当时记不得了,是F开头的,查了一下,是FastDFS。
- 分布式系统的CAP知道吗?
知道,最多只能满足两个的那种。(其实当时没想起来是哪三个,回想了一下容错性,一致性,可用性)
- mysql的主从结构牺牲了哪一种特性?
可以通过配置去配置,保证强一致性的话,就要等从数据库响应给主数据库通信之后再去响应客户端。就会损耗可用性,如果不等响应的话就会损耗一致性。
(因为一时记不清来是哪三个,就忘记是哪种了,答的磕磕巴巴的。)
- etcd你们用的是什么版本的?
v2的。
- v2和v3有什么区别知道吗?
v3是用tcp去进行通信的(应该说是grpc),然后v2的没有。(完全记错了。v3没用过。)
- golang你们用的版本是?
我从1.9用到1.12
- 那你们的包管理时怎么实现的?
(很挫的那种实现方式,跟面试官讲了,这里不提也罢。)
- 那你知道新版本的golang的包管理工具吗?
知道,用go modules实现,先在本文件夹下的mod下找,找不到再去gopath找(错误)
准确应该是用go mod init main.go去识别第三方包,生成一个go.mod文件,这样在build和run的时候会自动下包,下到了gopath/pkg/mod下面。
- 你们现在部门多少人?
- 讲一个你优化的栗子?
讲了之前一个错误设计的消息系统,优化成可用。
- channel有缓存和没换成的区别?
讲了表现形式。
- context用过吗?
讲了context的用法。
- redis内存满了会怎么办?
如果过期的key删除完了,就删除lru比较大的key。
- 实现一个lru算法?
hashmap+链表,时间复杂度为1.
- expr命令知道吗?
知道,shell中的计算命令.
- 如果你来实现加减乘除+括号?
讲了一下用两个栈去实现的思路,但是具体怎么操作可能要慢慢想了.
- 离职的理由?
更平等的竞争平台和脱离舒适圈.
- 你们没有用过容器化技术吗?
讲了之前尝试过,出问题之后又全部用回虚拟机了.自己之前学过了解过.
- k8s的部署方式有哪几种?
不知道.
- mysql多列索引的时候,会有哪些查询不起作用.
然后我答了,但是还答了一种可能的优化方式,但是电话实在好难说清楚啊..准确来说是这张图.
- 讲讲聚簇索引.
- innodb修改之后会发生什么?
答了innodb的多版本控制过程.
- 我想问的是数据发生了什么变化,io方面的?
添加redolog,修改内存.
- 那脏页什么时候刷新?
不记得了..(答案是用checkpoint,这个是真不知道)
- 文件读取,如果我要读取某一行怎么办?
没遇到这样的需求..通常我都是readall的..
- protobuf数据格式有了解过吗?
看到一点,讲了自己曾经看过的数据内容,
- 如果要你实现一个压缩率高的int32,你怎么实现?
我想到的是用一个字节标明变长,来让小的整数只用两个字节就能保存。
- 大端小端知道吗?
从左往右或者从右往左读。(当时就想面试官是不是暗示什么,一查,protocol对int类型的压缩跟大端小端相关的)
- 00000001表示1是大端还是小端。
答了“大端,我猜的”(每次都记不住。。)