面试记录一

文会科技-20240407

  1. 接口幂等性

    为什么会有接口幂等性的问题

    用户提交过程中出项网络波动,用户重复点击提交按钮,对第三方提供的接口超时往往会添加重试机制,使用MQ出现重复消费的问题

    如何解决
    1. 用户点击提交后可以禁用提交按钮,实现起来简单但是前端控制往往不可靠
    2. token机制,进入表单页获取提个token并存入redis中,提交后先尝试在redis中删除这个token,来判断是否重复提交
    3. 利用数据库的唯一索引实现,去重表
    4. 乐观锁,在数据库中有个版本号的字段,每次更新的时候对比版本号,如果不同则是被更新过
  2. 防止接口重复提交

    利用Redis和aop去实现

    定义注解实现接口拦截,根据前端传递参数加用户ID生产唯一哈希值key 利用Redis的 setIfAbsent 实现,通过设置过期时间来控制重复提交的时间

    前端通过禁用按钮实现

    简单但不可靠

    使用ConcurrentHashMap和aop去实现

    利用线程安全版的HashMap,根据前端传递参数加用户ID生产唯一哈希值key存到map中。并利用定时任务是删除map中的key。

    增加服务器性能消耗。

  3. Linux下打开超大文件

    1. 查看文件的前多少行

      head -10000 /var/lib/mysql/slowquery.log > temp.log

      上面命令的意思是:把slowquery.log文件前10000行的数据写入到temp.log文件中。

    2. 查看文件的后多少行

      tail -10000 /var/lib/mysql/slowquery.log > temp.log

      上面命令的意思是:把slowquery.log文件后10000行的数据写入到temp.log文件中。

    3. 查看文件的几行到几行

      sed -n ‘10,10000p’ /var/lib/mysql/slowquery.log > temp.log

      上面命令的意思是:把slowquery.log文件第10到10000行的数据写入到temp.log文件中。

  4. aop 使用场景

    1. 日志记录
    2. 防止接口重复提交
    3. 数据权限控制
    4. 事务开启