场景题
你们团队怎么做代码质量管控的
- 我们自己会做代码质量检测,比如Idea里的阿里巴巴规范插件、SonarLint、PMD
- 也会有内部的CodeReview(代码评审会议),大家交叉验证,保障代码的健壮性和拓展性
- 同时我们也会借助于Junit和Mockito做单元测试,保障测试覆盖率在90%以上
你们公司怎么部署代码的?
- 不要直接说:java -jar order.jar,用shell脚本
- Docker部署:https://www.yuque.com/yzxb/index/kdgyq03pulzt363q
- CI/CD部署:本章节知识
你们怎么排查错误
- 原生Linux:用一些原生命令,比如tail、cat、grep
- Docker系统:docker logs,docker exec进入容器后查看
- ELK:界面化直接查看就行
- SkyWalking:https://www.yuque.com/yzxb/index/pgvl8uwpo50gooef ,参考后半部分
用过鉴权框架吗?实现的原理大概说一下?
- 面试官,常见的一些鉴权框架比如Shiro、Security、还有自定义RBAC模型都用过一些,相对来说前两者还是比较复杂的,我给您说一下Security的原理吧/说一下RBAC底层/领域模型(就是数据库表)吧
- Security:他就是在用户请求之后,经过SpringMVC的DispatcherServerlet,找到对应的HandlerMapping之后的Handler(controller)之后,我们会在方法上追加一个注解@PreAuthorize("@ss.hasPermi('elder:bed:list')" ,此时Security会自动进入自己的过滤器
- 首先判断访问的路径是不是在白名单印象,在里面就直接方向
- 不在里面就根据用户的id,去底层RBAC模型查找这个用户对应的角色、菜单,返回一个菜单列表,有则放行并生成JWT信息存储在session里,没有则返回HTTP 401权限不足
- RBAC:参照下图说出自己的理解即可
- 面试官,RBAC模型就是经典的用户、角色、资源三张主表,同时增加用户-角色、角色-资源两张中间表,用来记录哪个用户有哪些角色,每个角色有哪些资源;当然在此基础之上,也可以增加部门的,也都是一样的原理,我就不重复赘述
你们怎么发布项目的?
我们的话通过jenkens进行发布,实现CI/CD,但是之前的话哦我们也是有用过linux和docker进行发布过,像linux的话我们是先将jar包上传到服务器指定目录,然后停止旧服务,然后替换旧文件,修改配置,然后启动jar包,docker的话就是首先通过编写Dockerfile构建镜像,然后进行docker push推送仓库,再停止旧容器,启动新容器
发布失败你们遇到了吗?怎么处理的?
关联的下游服务版本回退,怎么处理的?
你们遇到CPU飙高怎么解决的
问题主要有缓存失效 / 击穿,慢SQL,MQ的消息积压
线上故障怎么排查
线上故障遇到过哪些
空指针、sql语句、OOM
线上故障怎么处理
Skywaking如何进行链路追踪
SkyWalking 遵循分布式追踪的通用模型,通过以下核心概念标识和串联调用链路:
分布式追踪核心:Trace Span TraceID SpanID
- Trace:表示一个完整的分布式事务链路,由多个相关联的
Span组成。例如,用户发起一个下单请求,从前端到后端服务、数据库、缓存等所有参与的调用过程,共同构成一个Trace。 - Span:表示链路中的一个具体操作(如一次服务调用、一次数据库查询等),是追踪的基本单位。每个
Span包含以下关键信息:
TraceID:全局唯一标识,用于关联同一个Trace中的所有Span(即整个链路)。SpanID:当前Span的唯一标识,用于区分链路中的不同操作。ParentSpanID:父Span的 ID,用于建立Span之间的层级关系(如调用方与被调用方的关系)。- 操作名称(如服务接口名、数据库方法名)、时间戳(开始 / 结束时间)、耗时、标签(如服务地址、错误信息)等。
通过 TraceID 和 ParentSpanID,SkyWalking 可以将分布式系统中分散的 Span 串联起来,还原出完整的调用链路。
让你来设计高并发系统,你会怎么设计
主要是并发读和并发写嘛,在读方面的话我们可以采用缓存的方式,比如前端采用CDN和freamaker,后端采用redis来缓存,然后在写方面用MQ或者xxl-job来实现异步,削封填谷