+
# 解决了什么技术难题/你负责项目的时候遇到了哪些比较棘手的问题
(1)设计模式
- 工厂模式+策略
- 责任链模式
回答思路
什么背景(技术问题)
过程(解决问题的过程)
最终落地方案
举例:
①:介绍登录业务(一开始没有用设计模式,所有的登录方式都柔和在一个业务类中,不过,发现需求经常改)
②:登录方式经常会增加或更换,每次都要修改业务层代码,所以,经过我的设计,使用了工厂设计模式和策略模式,解决了,经常修改业务层代码的问题
③:详细介绍一下工厂模式和策略模式(参考前面设计模式的课程)
(2)线上BUG
- CPU飙高
- 内存泄漏
- 线程死锁
- ....
回答方式参考上面的回答思路,具体问题可以参考前面的课程(JVM和多线程相关的面试题)
(3)调优
- 慢接口
- 慢SQL
- 缓存方案
(4)组件封装
- 分布式锁
- 接口幂等
- 分布式事务
- 支付通用
# 你们项目中日志怎么采集的
- 我们搭建了ELK日志采集系统
- 介绍ELK的三个组件:
- Elasticsearch是全文搜索分析引擎,可以对数据存储、搜索、分析
- Logstash是一个数据收集引擎,可以动态收集数据,可以对数据进行过滤、分析,将数据存储到指定的位置
- Kibana是一个数据分析和可视化平台,配合Elasticsearch对数据进行搜索,分析,图表化展示
# 查看日志的命令
需要掌握的Linux中的日志:
- 实时监控日志的变化
- 实时监控某一个日志文件的变化:tail -f xx.log;实时监控日志最后100行日志: tail –n 100 -f xx.log
- 按照行号查询
- 查询日志尾部最后100行日志:tail – n 100 xx.log
- 查询日志头部开始100行日志:head –n 100 xx.log
- 查询某一个日志行号区间:cat -n xx.log | tail -n +100 | head -n 100 (查询100行至200行的日志)
- 按照关键字找日志的信息
- 查询日志文件中包含debug的日志行号:cat -n xx.log | grep "debug"
- 按照日期查询
- sed -n '/2023-05-18 14:22:31.070/,/ 2023-05-18 14:27:14.158/p’xx.log
- 日志太多,处理方式
- 分页查询日志信息:cat -n xx.log |grep "debug" | more
- 筛选过滤以后,输出到一个文件:cat -n xx.log | grep "debug" >debug.txt
# 生产问题怎么排查
已经上线的bug排查的思路:
先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题
远程debug(通常公司的正式环境(生产环境)是不允许远程debug的,因为可以访问到生产环境的数据。一般远程debug都是公司的测试环境,方便调试代码)
远程代码需要配置启动参数,把项目打包放到服务器后启动项目的参数:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 project-1.0-SNAPSHOT.jar
-agentlib:jdwp 是通知JVM使用(java debug wire protocol)来运行调试环境
transport=dt_socket 调试数据的传送方式
server=y 参数是指是否支持在server模式
suspend=n 是否在调试客户端建立起来后,再执行JVM。
address=5005 调试端口设置为5005,其它端口也可以
- idea中设置远程debug,找到idea中的 Edit Configurations...
idea中启动远程debug
访问远程服务器,在本地代码中打断点即可调试远程