面试记录一
文会科技-20240407
接口幂等性
为什么会有接口幂等性的问题
用户提交过程中出项网络波动,用户重复点击提交按钮,对第三方提供的接口超时往往会添加重试机制,使用MQ出现重复消费的问题
如何解决
- 用户点击提交后可以禁用提交按钮,实现起来简单但是前端控制往往不可靠
- token机制,进入表单页获取提个token并存入redis中,提交后先尝试在redis中删除这个token,来判断是否重复提交
- 利用数据库的唯一索引实现,去重表
- 乐观锁,在数据库中有个版本号的字段,每次更新的时候对比版本号,如果不同则是被更新过
防止接口重复提交
利用Redis和aop去实现
定义注解实现接口拦截,根据前端传递参数加用户ID生产唯一哈希值key 利用Redis的 setIfAbsent 实现,通过设置过期时间来控制重复提交的时间
前端通过禁用按钮实现
简单但不可靠
使用ConcurrentHashMap和aop去实现
利用线程安全版的HashMap,根据前端传递参数加用户ID生产唯一哈希值key存到map中。并利用定时任务是删除map中的key。
增加服务器性能消耗。
Linux下打开超大文件
查看文件的前多少行
head -10000 /var/lib/mysql/slowquery.log > temp.log
上面命令的意思是:把slowquery.log文件前10000行的数据写入到temp.log文件中。
查看文件的后多少行
tail -10000 /var/lib/mysql/slowquery.log > temp.log
上面命令的意思是:把slowquery.log文件后10000行的数据写入到temp.log文件中。
查看文件的几行到几行
sed -n ‘10,10000p’ /var/lib/mysql/slowquery.log > temp.log
上面命令的意思是:把slowquery.log文件第10到10000行的数据写入到temp.log文件中。
aop 使用场景
- 日志记录
- 防止接口重复提交
- 数据权限控制
- 事务开启