java中级面试20220321

  1. 过滤器和拦截器有什么区别
  • 拦截器是基于java的反射机制,而过滤器基于函数回调。
  • 过滤器依赖于servlet容器,拦截器不依赖于servlet容器。
  • 拦截器只能对action请求起作用,而过滤器几乎对所有的请求都起作用。
  • 拦截器可以访问action上下文,值栈里的对象,而过滤器不能。
  • 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
  • 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,(在拦截器里注入一个service,可以调用业务逻辑)。
    ————————————————
    原文链接:https://blog.csdn.net/u013806366/article/details/84993212

2、java接口幂等性实现

  • 分布式锁 > 乐观锁 > JVM锁 > 唯一约束 > 数据库悲观锁
  • 说明1:JVM锁为synchronized或lock方式,只适用于单体环境
  • 说明2:订单id和状态组成复合唯一约束,用try–catch包着业务逻辑,修改时触发违反唯一约束来进行回滚。(MQ–生产者消费者避免重复消费,就是使用该方式)
  • 说明3:select * from user where id = 1 for update;使用for update实现数据库悲观锁(行级锁),高并发下性能会降低
    ————————————————
    原文链接:https://blog.csdn.net/rogerxue12345/article/details/107458839

3、java接口限流方案

  • 单体限流
    – Semaphore限流+拦截器+自定义注解:Semaphore是jdk自带的一种并发限流方式。通过new Semaphore(2);可设置并发数为2。切记获取资源后,要进行资源释放(在finally中释放)
    – RateLimiter限流:基于google的guava技术
  • 集群限流
    – redis限流
    – gateway网关限流
    – Sentinel限流
    ————————————————
    原文链接:https://blog.csdn.net/qq_30285985/article/details/107206238

4、redis避免分布式锁死锁

给分布式锁设置一个过期时间。
Redis的setnx命令是当key不存在时设置key,但setnx不能同时完成expire设置失效时长,不能保证setnx和expire的原子性。我们可以使用set命令完成setnx和expire的操作,并且这种操作是原子操作:
案例:设置name=tokenStr,失效时长100s,不存在时设置
1.1.1.1:6379> set name tokenStr ex 100 nx
————————————————
原文链接:https://blog.csdn.net/qq_30038111/article/details/90696233

5、redis缓存和mysql数据库如何保证数据一致性

  • 采用延时双删策略:在写库前后都进行redis.del(key)操作,并且设定合理的超时时间。
  • 异步更新缓存(基于订阅binlog的同步机制):MySQL binlog增量订阅消费+消息队列+增量数据更新到redis
    ————————————————
    原文链接:https://zhuanlan.zhihu.com/p/158383468

6、concurrentHashMap的size方法原理

先无锁计算三次数量,若三次数量一致,直接返回结果,否则,锁住整个Map(不能进行其他操作),计算数量

7、lock和synchronized的区别

  • 首先synchronized是java内置关键字,在jvm层面,Lock是个java;
  • synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
  • synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
  • 用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;
  • synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可)
  • Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

8、Nacos与Eureka的区别

  • Nacos与eureka的共同点
    – 都支持服务注册和服务拉取
    – 都支持服务提供者心跳方式做健康检测
  • Nacos与Eureka的区别
    – Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
    – 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
    – Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
    – Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;
    Eureka采用AP方式

9、mysql数据库优化

暂略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值