当前位置: 首页 > news >正文

新知识点背诵

蚂蚁面试一面复习策略

Lock

基于抽象队列同步AQS(CAS+队列)实现的,是java并发包提供的API

相比于 synchronized

  • 可以尝试获取锁(tryLock()

  • 可以响应中断(lockInterruptibly()

  • 可以实现公平锁 / 非公平锁

  • 可以实现读写分离、条件等待等复杂并发控制

实现类特点使用场景
ReentrantLock可重入互斥锁,支持公平 / 非公平两种模式最常用的通用独占锁
ReentrantReadWriteLockReentrantReadWriteLock.ReadLock内部类,表示读锁 ReentrantReadWriteLock.WriteLock内部类,表示写锁 读写分离锁:允许多个读线程并行,写线程互斥读多写少的场景:缓存读多写少,例如配置中心、热点数据访问。写锁优先可配置(防止写饥饿)
StampedLock(Java 8+)乐观读锁 + 悲观写锁结合,高性能读写锁。但不可重入高并发下读多写少场景(如缓存)

跨域单点登录

单点登录SSO:指的是用户在多个系统之间切换时,只需要登录一次,就可以访问所有系统,无需重复登录。

两个域名,一个是a.com,一个是b.com,我要实现,我要实现的一个逻辑是说,a.com和b.com他们要相互登录,比如我在a上登录了过后,我可以直接访问b,我在b上面登录过后,我可以直接访问a,那这样一个系统我要怎么样去设置它的相关登录?

核心问题:浏览器的cookie是域隔离的,也就是a.com的cookie无法在b.com使用

核心思路:

同域:Cookie 共享法,让他们同属于一个顶级域名,所有子域共享同一个登录状态

异域:Token + 认证中心(主流做法)-->

统一认证中心:一个独立的后端服务,一般部署在单独域名

用户在a.com登录后,认证中心生成JWT Token签发给用户,同时存入redis(用于控制有效期与登出失效)。b.com 检测到用户未登录,跳转至认证中心(附带自己的回调地址)。认证中心检测到用户已登录(Redis 中 Token 有效)直接生成临时授权码(Code),重定向回 b.com。b.com 使用 Code 向认证中心换取 JWT Token,b.com 本地保存 Token,实现免登录。

浏览器的同源策略 是根本障碍(不同域名之间默认无法共享 Cookie 或进行某些请求)。

  1. 反向代理转发(Nginx 代理):前端仍访问 a.com,Nginx 将请求代理转发到 b.com,浏览器认为仍是同源请求。

  2. JWT + 认证中心(适用于不同主域)

  3. WebSocket: 由于 WebSocket 是一种基于消息的双向通信协议,在建立连接时并没有受到跨域限制,因此可以通过 WebSocket 进行跨域通信。

ReentrantLock、Synchronized的区别

对比项synchronizedReentrantLock
所属JVM 内置关键字Java 层实现
实现原理基于 对象监视器Mark Word 锁标志位基于 AQS 队列同步器
锁类型非公平锁(默认),自适应优化可选公平锁或非公平锁
释放锁自动释放(异常时也会释放)需要手动释放(lock() / unlock()
可重入性可重入可重入
可中断性不可中断可中断(lockInterruptibly()
条件变量单一(wait/notify多条件队列(Condition
性能优化JVM 层面锁优化(偏向锁、轻量级锁、自旋锁)AQS 的自旋 + CAS + 队列唤醒机制

在早期 JDK 版本中,synchronized 是重量级锁,性能差; 而 ReentrantLock 基于 AQS + CAS 实现,性能更高。

但自从 JDK1.6 起,HotSpot 对 synchronized 进行了锁升级优化(偏向锁、轻量级锁、自旋锁),大部分场景下性能已接近甚至优于 ReentrantLock。

不同的是,ReentrantLock 支持可中断、公平锁、多条件变量,适合复杂并发场景; 而 synchronized 语法更简单、安全,推荐在一般同步场景使用。

Spring AOP 是基于动态代理机制实现的。Spring 会在运行时(runtime)为目标对象创建一个“代理对象”, 所有被增强的方法调用,都会经过这个代理对象,从而实现“在方法执行前后织入额外逻辑”。

对于实现了接口的类,Spring 使用 JDK 动态代理; 对于没有接口的类,则使用 CGLIB 字节码增强技术生成子类代理。

注解与后置处理器机制:Spring 在启动时通过 @Aspect 注解和 AnnotationAwareAspectJAutoProxyCreator 后置处理器识别哪些 Bean 需要切面增强, 并在 Bean 初始化阶段创建代理对象,将切面逻辑织入到方法调用链中。

运行时调用时,代理对象拦截方法,按切点匹配的顺序执行 @Before@After 等增强逻辑,最终完成 AOP 的动态织入。

  1. 用户调用代理对象的目标方法;

  2. Spring AOP 代理拦截调用;

  3. AOP 框架根据切点表达式匹配所有符合条件的切面;

  4. 将这些切面按优先级组成一个 责任链(Interceptor Chain)

  5. 按顺序执行:

    • @Before → 调用目标方法 → @AfterReturning / @AfterThrowing@After

整个过程完全是运行时动态织入,而不是像 AspectJ 那样的编译期静态织入。

http://www.dtcms.com/a/475643.html

相关文章:

  • 南昌企业建站html5 购物网站
  • 淄博高效网站建设wordpress视频播放
  • 长沙专业网站建设wordpress网站回调域
  • 帝国cms网站搬家网站模板在线制作
  • 中山品牌网站建设推广徐州企业网站排名优化
  • 10.【Linux系统编程】缓冲区详解——库缓冲区 VS 内核缓冲区
  • 做网站模版与定制的区别信通网站开发中心
  • ppt网站模板佟年做网站给KK
  • 女人做绿叶网站相亲拉人深圳网站设计x
  • 凡科网怎么做网站网络域名后缀
  • 企业网站建站 优帮云做网站其实不贵
  • 个人或主题网站建设服装效果图网站
  • 像美团这种网站怎么做的深圳外包软件开发
  • 公司网站是否做地方分站智能展厅设计公司
  • 极速网站建设广州网站优化推荐
  • 网站建设公司的会计分录蒙古文网站建设情况
  • 家具flash网站模板下载wordpress用php版本
  • QML学习笔记(三十三)QML的CheckBox
  • 吸引企业做网站网页设计分类
  • 做装饰画的行业网站reactjs wordpress
  • 《XOR》与《再次跳跃吧,俊潇!》题解
  • 四川省建设厅申报网站关键词推广排名
  • 哪些网站可以做平面设计排名优化百度
  • VMamba学习笔记
  • 词根学习笔记 | Alter系列
  • 如何学习VBA_3.3.10 自制VBA工具,充分享受工作的乐趣
  • 专业移动网站建设北京网络职业技术学院官网
  • 广州增城做网站网站建设 中企动力嘉兴0573
  • 对称加密详解
  • 8.5JavaScript函数 arguments