Kaka Blog

追求自我价值的实现

括号生成

题目链接 题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 示例1: 例如,给出 n = 3,生成结果为: [ "((()))", "(()())", "(())()", "()(())", "()()()" ] 答案分析 利用递归的思想,将()插入到上一步的字符串中,使用Set去重。 我的答案: cla...

CAS产生的ABA问题

CAS的实现 JAVA中的cas主要使用的是Unsafe方法,Unsafe的CAS操作主要是基于硬件平台的汇编指令,目前的处理器基本都支持CAS,只不过不同的厂家的实现不一样罢了。 Unsafe提供了三个方法用于CAS操作,分别是 public final native boolean compareAndSwapObject(Object value, long valueOffse...

Java里的三种锁:偏向锁、轻量级锁和重量级锁

前言 在学习sychronized关键字及其实现细节的时候,发现java中的三种锁,偏向锁,轻量级锁,重量级锁,引入偏向锁是为了在无多线程竞争的情况下尽量减少不必要的轻量级锁执行路径,因为轻量级锁的获取及释放依赖多次CAS原子指令,而偏向锁只需要在置换ThreadID的时候依赖一次CAS原子指令,代价就是一旦出现多线程竞争的情况就必须撤销偏向锁。 Java对象头 Java的对象头通常由...

什么是Base64?

什么是Base64 Base64是一种用64个字符来表示任意二进制数据的方法。 用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。 Base64编码原理 Base64由64个字符组成,分别...

原子操作CAS

前言 1、引入例子,可以看出使用并发产生的问题。 public class WithoutCasDemo { int i = 0; void increase() { i++; } public static void main(String[] args) throws InterruptedException { Wi...

定时任务调度Quartz实现

定时任务应用场景 未支付订单的关闭 大数据系统生成报表 信用卡账单、还款通知 ······ 调度器的类型 系统调度器:Linux crontab Java:Timer、ScheduledExecutorService Spring Task Quartz ElasticJob 传统调度器的缺点 1、无法动态修改 2、无法集群部署 Qu...

Spring Security(七):完整的用户认证中心

总体介绍 该用户认证中心采用Spring Security框架搭建,结合Redis存储用户Token信息,实现用户登录、注册、登出接口,客户端密码传输使用RSA公钥加密,服务端接收到密码后使用私钥解密,本文主要介绍这3个接口的具体实现。 用户登录 工作流程 1、使用私钥解密经过RSA加密的密码; 2、通过Spring Security进行身份认证; 3、产生token并保存到Re...

Cookie、Session、Token解读

什么是Cookie? Cookie 在计算机中是个存储在浏览器目录中的文本文件,当浏览器运行时,存储在 RAM 中发挥作用 (此种 Cookies 称作 Session Cookies),一旦用户从该网站或服务器退出,Cookie 可存储在用户本地的硬盘上 (此种 Cookies 称作 Persistent Cookies)。 客户端用户如果设置禁止 Cookie,则 Cookie 不能...

Spring Security(六):集成Zuul搭建全局验证架构

总体架构 验证中心 用于处理登录请求,生成Token,并存储到Redis。 主要修改login接口: @RestController public class UserLoginController { @Autowired private IUserAuthService userAuthService; @Autowired private A...

Spring Security(五):使用Redis

Redis介绍 Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化。除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库。可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。 引入Redis Redis包有两个版本: sprin...