昨日帮朋友复盘了一下最近的面试经历,共享出来,期望对我们有协助:
关于工作环境
劝告:假如不是在二三线买车买房结婚生子了,仍是到一线城市去吧。
或许换个行业!
关于焦虑和摆烂
假如你也在焦虑迷茫、精神内耗。找阳哥给你做“心理按摩”,确保让你像打鸡血相同,斗志满满,不再摆烂。
微信号:wangzhongyang1993 备注:粉丝
部分面经共享
以下内容是针对特定简历和面试过程做的复盘总结,不是标准答案,仅供参考和评论:
1. 毛遂自荐感觉话术表述不是很好,需求故意准备打磨
- 要点强调Go言语相关经历,比方X年工作经历,主要做后端开发。不要提旁枝末节和后端开发无关的事情
- 结合面试公司的状况,要点介绍相关的工作经历
- 假如有开源项目和博客最后也提一下,酷爱技能,酷爱共享比方多少star,多少粉丝等等
2. 项目介绍上表达容易卡顿或许不连贯,给人一种对项目不熟的感觉。项目是先介绍模块划分仍是先介绍架构好?
- 先介绍模块,让对方有个整体认识,再介绍架构,这样更好了解
3. 架构是从网关讲到底层服务层好,仍是从底层讲到上面好
- 网关层讲到底层服务,这样更明晰,更好了解
4. 每个层级是怎么进行冗灾?
- 运用层容灾:运用层容灾主要是经过负载均衡和毛病搬运来完成的。可以将运用布置在多台服务器上,经过负载均衡器将恳求分发到不同的服务器上,以完成负载均衡和毛病搬运。一同,可以运用容器技能如 Docker,将运用打包成镜像,以便快速布置和迁移。
- 服务层容灾:服务层容灾主要是经过服务办理和容错机制来完成的。可以运用服务注册中心如 ZooKeeper、Consul 等来完成服务的注册和发现,以便快速定位毛病服务并进行毛病搬运。一同,可以运用熔断器、限流器等容错机制来维护服务的稳定性和可靠性。
- 数据层容灾:数据层容灾主要是经过数据备份、数据同步和数据康复来完成的。可以运用数据库主从复制、分布式数据库等技能来完成数据备份和同步,以确保数据的可靠性和一致性。一同,可以运用数据康复工具如 mysqldump、pg_dump 等来进行数据康复。
5. 看你项目是选gin作为结构的,为啥没考虑集成度更高的go-zero, 你对go-zero了解多少?
- gin入门简略、项目时刻紧
- gozero作为rpc微服务结构,后来有研究,比方:xxxxx巴拉巴拉
6. 为什么你挑选Kong作为网关,依据什么考虑的
- Kong 作为一个 API 网关,具有以下几个优势:
- 高功用:Kong 运用了 Nginx 作为底层引擎,具有高功用和高并发的特色,可以处理很多的 API 恳求。
- 可扩展:Kong 供给了一系列的插件和扩展机制,可以协助开发者快速扩展和定制 API 网关的功用和功用。
- 易于运用:Kong 供给了一系列的办理界面和 API,可以协助开发者快速装备和办理 API 网关。
- 安全可靠:Kong 供给了一系列的安全机制,如身份验证、拜访控制、防止 SQL 注入等,可以确保 API 的安全性和可靠性。
- 社区活跃:Kong 有一个非常活跃的社区,供给了很多的文档、教程、插件和扩展,可以协助开发者快速学习和运用 Kong。
7. 你在哪些层面做了限流及负载均衡?为什么这么考虑?
- 现在就网关层和srv层做了限流和负载均衡
- 网关层经过kong自带计数器形式进行限流,比方依据IP限流,设置每分钟能拜访50次
POST http://127.0.0.1:9001/services/audio-service/plugins
{
"name":"rate-limiting",
"config.minute":50,
"config.limit_by":"ip"
}
- 录入体系单元经过IP 是非名单进行限流
8. kong的负载均衡该怎么描绘?
- Kong 的负载均衡是依据 Nginx 的负载均衡完成的。
- Kong 运用 Nginx 作为底层引擎,经过 Nginx 的负载均衡模块完成负载均衡功用。
- 具体来说,Kong 会将 API 恳求分发到多个后端服务节点上,以完成负载均衡。
- Kong 的负载均衡支撑多种负载均衡算法,如轮询、IP 哈希、最少连接数等。
- 咱们可以依据自己的需求挑选适宜的负载均衡算法。一同,Kong 还供给了一系列的负载均衡装备选项,如权重、健康查看、毛病搬运等,可以协助开发者更加灵敏地装备和办理负载均衡。
9. 项目中用到了gRPC,谈谈你对gRPC的了解,及项目中是怎么运用到的?
- gRPC 是一个高功用、开源的长途过程调用(RPC)结构,它运用 Protocol Buffers 作为接口界说言语(IDL),可以协助开发者快速构建分布式运用程序。gRPC 的特色包含:
- 高功用:gRPC 运用了依据 HTTP/2 的协议,可以提高运用程序的功用和吞吐量。
- 跨言语支撑:gRPC 支撑多种编程言语,如 Go、Java、Python、C# 等,可以协助开发者构建跨言语的分布式运用程序。
- 主动生成代码:gRPC 运用 Protocol Buffers 作为接口界说言语(IDL),可以主动生成客户端和服务器端的代码,简化了开发者的工作量。
- 安全可靠:gRPC 供给了一系列的安全机制,如身份验证、拜访控制、加密传输等,可以确保运用程序的安全性和可靠性。
- 在项目中,gRPC 可以用于完成微服务之间的通讯。具体来说,开发者可以运用 gRPC 界说服务接口和数据类型,然后运用 gRPC 主动生成客户端和服务器端的代码,最后在客户端和服务器端之间进行长途调用。
- gRPC 可以协助开发者完成高功用、跨言语、安全可靠的微服务通讯,提高运用程序的可扩展性和可维护性。
- 简历优化&心理按摩&工作辅导 可以在私我
- 或许加我微信:wangzhongyang1993
10. nacos做服务发现的原理?
- Nacos 是一个开源的服务发现和装备办理渠道,它可以协助开发者完成服务注册、服务发现、装备办理等功用。Nacos 的服务发现原理主要包含以下几个过程:
- 服务注册:服务供给者在启动时向 Nacos 注册中心注册自己的服务信息,包含服务名称、服务地址、服务端口等。
- 服务发现:服务顾客在启动时向 Nacos 注册中心查询自己所需的服务信息,Nacos 注册中心回来契合条件的服务供给者列表。
- 负载均衡:服务顾客从服务供给者列表中挑选一个服务供给者进行调用,可以运用负载均衡算法来挑选服务供给者。
- 心跳检测:服务供给者定时向 Nacos 注册中心发送心跳信息,以确保服务供给者的可用性。
- 服务下线:服务供给者在中止服务时向 Nacos 注册中心刊出自己的服务信息,以确保服务供给者的及时下线。
- 总结一下:Nacos 的服务发现原理主要是经过服务注册、服务发现、负载均衡、心跳检测和服务下线等过程来完成的。Nacos 注册中心作为服务发现的中心组件,可以协助开发者完成高可用、高功用的服务发现功用。
11. nacos怎么感知服务毛病了或许离线了
- Nacos 经过心跳检测机制来感知服务毛病或许离线。具体来说,服务供给者在启动时向 Nacos 注册中心注册自己的服务信息,并定时向 Nacos 注册中心发送心跳信息。假如服务供给者在一定时刻内没有发送心跳信息,Nacos 注册中心会以为该服务供给者现已毛病或许离线,将其从服务列表中移除。
- Nacos 的心跳检测机制可以经过以下几个参数进行装备:
- 心跳距离(默以为 5 秒):服务供给者向 Nacos 注册中心发送心跳信息的时刻距离。
- 心跳超时时刻(默以为 15 秒):Nacos 注册中心在服务供给者未发送心跳信息的时刻超越该值时,以为服务提者现已毛病或许离线。
- 实例存活时刻(默以为 90 秒):Nacos 注册中心在服务供给者未发送心跳信息的时刻超越该值时,将主动刊出该服务供给者的服务实例。
- 经过装备这些参数,咱们就可以依据自己的需求来调整心跳检测机制的敏感度和精度,以确保服务发现的及时性和可靠性。
12. Nacos 怎么进行毛病康复?
- Nacos 经过以下几种方法来进行毛病康复:
- 主动切换:Nacos 支撑多个注册中心节点的布置,当某个节点产生毛病时,Nacos 可以主动切换到其他节点进行服务发现和装备办理。
- 主动康复:Nacos 支撑多个服务供给者的布置,当某个服务供给者产生毛病时,Nacos 可以主动切换到其他服务供给者进行服务调用。
- 主动重试:Nacos 支撑主动重试机制,当服务调用失利时,Nacos 可以主动重试,直到服务调用成功或许达到最大重试次数。
- 健康查看:Nacos 支撑健康查看机制,可以定时查看服务供给者的健康状况,当服务供给者产生毛病时,Nacos 可以主动将其从服务列表中移除,直到服务康复正常。
- 总结一下:Nacos 经过主动切换、主动康复、主动重试和健康查看等机制来进行毛病康复,可以协助咱们完成高可用、高功用的服务发现和装备办理功用。一同,Nacos 还供给了一系列的监控和告警机制,可以协助开发者及时发现和解决毛病,提高运用程序的可靠性和稳定性。
13. 毛病康复的负载均衡是哪一部分做的?
- 在毛病康复的过程中,Nacos 的负载均衡是由服务顾客的负载均衡模块来完成的。具体来说,当服务顾客向 Nacos 注册中心查询服务供给者列表时,Nacos 注册中心会回来契合条件的服务供给者列表,服务顾客会依据负载均衡算法从服务供给者列表中挑选一个服务供给者进行调用。假如挑选的服务供给者产生毛病或许离线,服务顾客会从头挑选一个服务供给者进行调用,以完成毛病康复和负载均衡。
- Nacos 支撑多种负载均衡算法,如轮询、随机、最少连接数等,服务顾客可以依据自己的需求挑选适宜的负载均衡算法。一同,Nacos 还供给了一系列的负载均衡装备选项,如权重、健康查看、毛病搬运等,可以协助咱们更加灵敏地装备和办理负载均衡。
- 在毛病康复的过程中,Nacos 的负载均衡是由服务顾客的负载均衡模块来完成的,服务顾客可以依据自己的需求挑选适宜的负载均衡算法和装备选项,以完成毛病康复和负载均衡。
14. 网关层的缓存、限流是怎么做的, 毛病搬运是怎么做的?
- 网关层的缓存和限流是经过网关层的插件来完成的。具体来说,网关层可以运用缓存插件和限流插件来完成缓存和限流功用。缓存插件可以将经常恳求的数据缓存到内存中,以提高呼应速度和降低后端服务的压力;限流插件可以约束恳求的速率和数量,以维护后端服务的稳定性和可靠性。
- 在毛病搬运方面,网关层可以经过负载均衡插件来完成。具体来说,网关层可以将恳求分发到多个后端服务节点上,以完成负载均衡和毛病搬运。当某个后端服务节点产生毛病或许离线时,网关层可以主动将恳求转发到其他可用的后端服务节点上,以确保服务的可用性和稳定性。
- 总结一下:网关层的缓存、限流和毛病搬运是经过网关层的插件来完成的。网关层可以运用缓存插件和限流插件来完成缓存和限流功用,运用负载均衡插件来完成毛病搬运功用。这些插件可以协助开发者完成高功用、高可用、高稳定性的网关层服务。
15. redis怎么完成分布式锁有哪些?有哪些优缺陷 ?
-
Redis 完成分布式锁的方法主要有以下几种:
- 依据 SETNX 指令:运用 SETNX 指令可以将一个键值对设置为锁,假如该键值对不存在,则设置成功,表明获取锁成功;否则设置失利,表明获取锁失利。开释锁时可以运用 DEL 指令删去该键值对。
- 依据 Lua 脚本:运用 Lua 脚本可以将获取锁和开释锁的操作封装为一个原子操作,防止了多个 Redis 指令之间的竞争条件。
- 依据 Redlock 算法:Redlock 算法是一种分布式锁算法,可以在多个 Redis 节点之间完成分布式锁。具体来说,Redlock 算法将锁分为多个副本,每个副本在不同的 Redis 节点上,获取锁时需求在多个副本上都获取成功才算获取锁成功。
-
Redis 完成分布式锁的优缺陷如下:
- 长处:
- 高功用:Redis 是一种高功用的内存数据库,可以快速地进行锁的获取和开释操作。
- 可靠性高:Redis 支撑主从复制和 Sentinel 高可用计划,可以确保分布式锁的可靠性和稳定性。
- 易于运用:Redis 供给了多种完成分布式锁的方法,开发者可以依据自己的需求挑选适宜的方法。
- 缺陷:
- 竞争条件:在高并发的状况下,多个客户端一同获取锁或许会导致竞争条件,需求运用适当的算法和技能来防止竞争条件的产生。
- 锁过期问题:假如锁的过期时刻设置不合理,或许会导致锁过期后其他客户端获取锁,导致数据不一致或许死锁等问题。因此,需求依据实际状况合理设置锁的过期时刻。
- 功用丢失:在运用 Redlock 算法时,需求在多个 Redis 节点之间进行通讯和协调,或许会导致功用丢失和延迟增加。
- 长处:
-
总结一下:Redis 完成分布式锁是一种高功用、可靠性高、易于运用的方法,但需求留意竞争条件、锁过期问题和功用丢失等问题。开发者可以依据自己的需求挑选适宜的完成方法,并结合实际状况进行优化和调整,以确保分布式锁的可靠性和功用。
16. 现在服务大约并发是多少?
-
介绍并发应该从以下几个目标来答复:QPS PV UV 并发连接数 呼应时刻
- QPS(每秒查询率):QPS 是指每秒钟可以处理的查询恳求的数量,是衡量体系功用的重要目标之一。
- TPS(每秒事务数)是指体系每秒钟可以处理的事务数量,其间事务可所以数据库事务、HTTP 恳求、RPC 调用等。
- PV(页面浏览量):PV 是指用户拜访网站的页面数量,是衡量网站流量的重要目标之一。
- UV(独立访客数):UV 是指拜访网站的独立用户数量,是衡量网站用户数量的重要目标之一。
- 并发连接数:并发连接数是指一同连接到服务器的用户数量,是衡量体系并发能力的重要目标之一。
- 呼应时刻:呼应时刻是指体系处理恳求的时刻,是衡量体系功用和用户体会的重要目标之一。
-
举个栗子,关于一个用户量为100万+的电商网站,以下是一些或许的目标取值范围:
- QPS:依据事务场景和体系规划,QPS 或许在几百到几千之间,乃至更高。
- 数据库事务:依据事务场景和数据库规划,TPS 或许在几百到几千之间,乃至更高。
- HTTP 恳求:假定每个用户均匀每天拜访网站10次,那么每天的 HTTP 恳求或许在1000万+,每秒钟的 TPS 或许在几百到几千之间。
- RPC 调用:假定每个用户均匀每天进行10次 RPC 调用,那么每天的 RPC 调用或许在1000万+,每秒钟的 TPS 或许在几百到几千之间。
- PV:假定每个用户均匀拜访网站10个页面,那么每天的 PV 或许在1000万+。
- UV:假定每个用户均匀每天拜访网站1次,那么每天的 UV 或许在100万到数百万之间。
- 并发连接数:依据事务场景和体系规划,或许需求支撑数千到数万的并发连接数。
- 呼应时刻:依据事务场景和用户体会要求,呼应时刻应该控制在几百毫秒以内。
17. 运用层与服务层的布置分布布置了多少节点?
- 依然以用户量100万+作为预估:
- 运用层:将运用层布置在多台服务器上,每台服务器布置多个运用实例,来完成负载均衡和毛病搬运。或许需求10台~100台服务器,每台服务器布置10个左右的运用实例
- 服务层:和运用层是相同的,或许需求10台~100台服务器,每台服务器布置10个左右的运用实例。
18. 项目中现在是依据什么完成的高并发,以及在处理的时候需求留意哪些问题?遇到哪些印象比较深入的问题?
- 高并发
- 分布式架构
- 缓存技能
- 异步音讯
- 需求留意的问题
- 数据一致性
- 追踪定位剖析问题的方法
- jaeger
- 数据库优化
- 慢查询
- 索引
- 索引命中
- 索引类型
- 负载均衡和毛病搬运
- 容灾问题
- 印象深入的问题:
- mongo链接数过多
- 数据库连接池过多
- 缓存穿透、击穿的问题
- 安全性问题
- 备份
- 数据传输
- 三方服务对接的坑,对接上游和下游别离遇到的问题
- Go言语开发和之前Python开发的对比
- 分布式开发和单体开发的对比
联络我
欢迎和我一同评论沟通:可以在私信我
也欢迎重视我的公众号:程序员升职加薪之旅
微信号:wangzhongyang1993
也欢迎我们重视我的,点赞、留言、转发。你的支撑,是我更文的最大动力!