腾讯云智一面面经
- 我直接问你一些我们这边技术栈可能用得到的基础问题,看你这边的掌握情况。
- 你简历上的两个项目都是自己学习练手做的项目是吧?
- 是的。
- 你认为哪个项目对你的知识掌握的提升是比较大的,或者说哪个项目你比较能讲一些?
- 商城项目(微服务)。
- 扩展讲一下这个项目里面用到了哪些东西。
- 主要用到了微服务相关的一些知识点,用 JWT 实现了登录时的鉴权,用 docker 进行了集群化部署,用 nacos 作为配置中心,实现了服务的注册和发现。
- 你提到了微服务,微服务的优势在哪里,和常规服务有什么不同,为什么要用微服务呢?
- 微服务是将多个小的服务,形成一定的联系,按照它的业务功能进行拆分,可以在一定程度上实现解耦合。
- 微服务之间是通过什么进行通信的?
- 通过 feign 实现通信。
- 走的是什么协议?
- 走的是 http 协议。
- 为什么要用 http ?用 tcp 可以嘛?http 和 tcp 有是什么区别?
- http 是超文本传输协议,在分布式用的比较多,基于请求-响应模型。
- http 和 tcp 所在的层不同,tcp 属于传输层协议,主要是为应用层提供一些可靠的数据传输的服务,http 是应用层协议,是基于 tcp 之上的,在一定程度上依赖 tcp 。
- 相较之下,http 和 tcp 的功能和应用场景不同。功能上来说,tcp 提供的是可控传输,http 提供的是请求-响应,场景上来说,tcp 对数据的可靠性要求较高,http 常用于和 web 相关的一些场景,比如说客户端向服务端发请求,以及网页 API 之类的。
- 简单介绍一下 ES 是用来存储什么数据,是怎么存的?
- ES 主要是为了提高查询效率,搜索时可能只输入一部分关键词,通过 ES 实现通过部分关键词,查找有哪些商品是具有这个关键词的,查找方案上来说,主要是用的分词器,用 ES 的话查找效率能高一些。
- Redis 用来做什么的?
- Redis 主要是用于缓存,主要用用于缓存热点商品。在二次三次查询时,可以直接从 Redis 中获取数据,可以降低数据库的压力,提供读取的速度。
- Redis 中如何解决一致性的问题?
- 通过一些同步方案解决。旁路缓存、双删缓存等方案实现数据同步。
- Redis 中的数据最终是要保证和谁的数据一致?谁来控制?
- 跟 MySQL 中的数据保证一致。
- 用的比较多的策略是延迟双删策略,是binlog监听控制的。
- Redis 和 MySQL 的数据同步是怎么实现的?
- 比如现在有一个数据更新了,先是把 Redis 中的缓存删掉,再写删数据库,然后再删一遍缓存,防止在此期间内进行数据查询时读到脏数据。
- 在删除时会出现击穿问题嘛?
- 有可能会发生击穿现象。
- 击穿现象是指,某一个缓存突然过期了,正好在过期的这个时间点,有大量用户在查询这个数据,就可能会发生击穿。
- 击穿的解决方案有两个,一个是给热点数据在高访问期临时设置永不过期,另一个是自动续期。
- MySQL 有哪些存储引擎?
- MySQL 中存储引擎有 Innodb 和 myisam ,还有一些我没太了解过,主要用的就是这两个。
- Innodb 中有哪些索引?
- 有聚簇索引和非聚簇索引,有主键索引、普通索引、空间索引、前缀索引。
- 一个表设计索引的时候要遵循什么原则?
- 有一个最左匹配原则,最左匹配原则的前提条件是使用了联合索引。
- 最左匹配原则大概是,如果索引是联合索引,在查询时,查询条件必须包括索引中的第一个列的信息,然后才是第二个列第三个列。
- 有没有什么情况是不适合使用索引的?
- 读少写多,经常修改的。
- 某一列有很多重复值,比如性别,只有男和女或者0和1,有大量重复元素,就不适合作为索引。
- 如果我设计一张表的时候,我让表里面的每一个字段都创建一个索引,这样做好不好?有没有什么问题?
- 不好,可能会造成资源浪费,索引也需要占用空间,导致存储所需开销较大。
- 查询优化器,索引过多会导致查询优化器决策时间变长,可能反而会降低效率。
- 如果表经常有写操作,在更新数据时,对索引数据也需要进行更新,降低了写操作的性能。
- 怎么判断一个链表是否有环?
- 快慢指针。一个指针每次走一步,另一个指针每次走两步,如果会相遇,就有环。时间复杂度是O(n)。
- 哈希表。遍历链表时,把每个节点存在哈希表里,如果某个节点在哈希表中已存在,就有环。时间复杂度是O(n)。
- 有 n 个数字,怎么计算出最大的 k 个数字?
- 最简单的方案就是直接排序,取出前 k 个数。
- 用小根堆。用一个大小为 k 的小根堆,维护最大的 k 个数字。当堆里面的元素数量小于 k 时,直接加到堆里面,堆内元素的数量达到 k 个时,将加入元素和堆内元素比大小,如果加入元素更大,就替换,循环,最后保留的就是最大的 k 个数。
- TCP 里面滑动窗口是用来做什么的?
- 流量控制。类似于生产者消费者,防止两边的效率不一致,导致有一方一直等待。
- 通过什么实现的流量控制?
- 作为接收方的这一边会告诉发送方,自己有一个滑动窗口,并且告诉他滑动窗口的大小,发送方会根据窗口大小来控制自己发送数据的数量,防止发送方发的太快,接收方跟不上。
- 各个微服务之间使用 http 协议进行通信的,为什么不用 tcp 呢?用 http 找到一个服务和用 tcp 找到一个服务有什么区别嘛?
- 当时做的时候,认为 http 更简单容易上手一些。
- tcp 没有请求-响应模型,可能有一部分内容需要自己进行处理,http 就不需要进行这些处理。
- 我没有问题了,你有什么想要了解的嘛?
- 本次面试中哪块答的不太好,需要巩固学习一下的?
- 后续流程?