当面试官问你CAS,他到底在问什么?

良心公众号

关注不迷路

在搞研发的小伙伴心目中,CAS是一个多义词,其既可以表示CAS(Compare and Swap)无锁算法,又可以表示CAS(Central Authentication Service)单点登录而这两者,都是在日常工作和面试中比较重要的知识,菜鸡在此对二者的原理做一个要点总结

CAS无锁算法:

CAS(Compare and Swap):比较与交换,是一种常见的无锁算法,可以在不加锁的前提下保证线程安全,即在没有线程被阻塞的情况下实现变量同步,属于非阻塞同步的范畴。

CAS算法涉及到三个操作数:内存值V、比较值A、交换值B。其具体的操作步骤是,当且仅当V等于A时,CAS算法通过原子方式用B将V替换,否则不执行任何操作。一般情况下,CAS算法是一个自旋操作,即不断的重试直到成功为止。

CAS算法有如下特点:ABA问题,存在自旋开销,只保证一个共享变量的原子操作。

  • ABA问题。若变量V初次读取时为A,在准备赋值时检查其仍为A,但这不能说明它没有被其他线程修改过,因为在这段时间它可能被改为其他值,然后又改为A,此时CAS算法就会误认为它从未修改过。该问题被称为CAS算法的ABA问题。在实际使用场景中需判断,若ABA问题对该使用场景的影响不大,可以不作处理。否则,可以采取对每次修改添加版本号标识的方式解决ABA问题,或直接采用悲观锁。

  • 存在自旋开销。CAS算法是一个自旋操作,在失败时会不断重试直到成功为止。长时间的自旋所产生的开销是不可忽视的,会对CPU造成较大负担。

  • 只保证一个共享变量的原子操作。CAS算法只对单个共享变量有效,当操作跨多个共享变量时CAS算法将不能保证同步。一种解决方式是,将这些共享变量封装为一个对象之后再使用CAS算法进行处理。

CAS单点登录:

CAS(Central Authentication Service):单点登录的一种经典实现。

什么是单点登录?(以下描述源自百度百科)

单点登录,简称SSO(Single Sign On),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理。

而CAS则是SSO的一种经典实现方式,其主要由三部分组成,web浏览器,CAS客户端,CAS服务器。其实并不复杂,通过下面一张图就可以了解CAS单点登录的机制:

在CAS认证的过程中,有三个比较重要的概念,分别是TGT,TGC和ST,其作用如下:

  • TGT(Ticket Granting Ticket):TGT封装了Cookie的值,以及Cookie值对应的用户信息,CAS通过Cookie值(TGC)为key查询缓存中有无TGT,若有则说明用户登录成功,否则需要重新登录。

  • TGC(Ticket Granting Cookie):CAS会将生成的TGT放在Session中,TGC是Session的唯一标识(SessionId),TGC以Cookie的形式保存在浏览器中,每次请求都会尝试携带TGC。

  • ST(Service Ticket):ST是当用户访问某一服务时提供的Ticket。用户在访问其他服务时,倘若没有携带Cookie或ST,就会重定向到CAS服务器获取ST,然后携带ST重定向回来。

本文关于CAS无锁算法和CAS单点登录的总结就到这里了。

欢迎大家一起讨论技术,共同成长!

学习 | 工作 | 分享

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值