目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

标签: Java (110)

Concurrent Programming

并发编程三要素 原子性 一个不可再被分割的颗粒,原子性指的是一个或多个操作要么全部执行成功要么全部执行失败 期间不能被中断,也不存在上下文切换,线程切换会带来原子性的问题。 有序性 程序执行的顺序按照代码的先后顺序执行,因为处理器可能会对指令进行重排序。 可见性 一个线程A对共享变量的修改,另一个线程B能够立刻看到 锁分类 悲观锁、乐观锁 悲观锁适合写操作多的场景 乐观锁适合读操作多的场景 乐观锁的吞吐量会比悲观锁多 悲观锁 当线程去操作数据的时候,总认为别的线程会去修改数据,所以它每次拿数据的时候都会上锁,别的线程去拿候就会阻塞,比如synchronized、ReentrantLock 乐观锁 每次去拿数据的时候都认为别人不会修改,更新的时候会判断别人是否回去更新数据 通过版本判断如果数据被修改了就拒绝更新,比如CAS是乐观锁,但严格来说并不是锁,通过原子性来保证数据的问步。 比如说数据库的乐观锁,通过版本控制来实现,乐观的认为在数据更新期间没有其他线程影响 公平锁、非公平锁 公平锁 指多个线程按照申请锁的顺序来获取锁,简单来说如果一个线程组里,能保证每个线程都能拿到锁。比如Reen....

Annotation

annotation 注解是在JDK5 时引入的新特性,其实就是代码里的特殊标记 注解也被称为元数据,是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用 允许开发人员在不改变源代码的情况下,在源代码中添加一些元数据 以便让编译器或者其他工具可以读取这些元数据,从而实现更高级的功能 应用场景 生成文档 编译时进行格式检查,如@Override 替代配置文件功能,比如spring的注解 和反射组合应用,自己封装框架组件 Java自带的标准注解 这些注解后编译器就会进行检查 @Override 标记覆写父类的方 @Deprecated 标记被修饰的类或类成员、类方法已废弃、过时 @SuppressWarnings 用于关闭对类、方法、成员编译时产生的特定警告, 元注解 用于定义注解的注解 元注解也是Java自带的标准注解,只不过用于修饰注解,比较特殊。 @Target:表示该注解用于什么地方 ElementType.CONSTRJCTOR 用在构造器 ElementType.FIELD 用于描述域-属性上 ElementType.METHOD 用在方法上 ElementTy....

Reflection

Reflection java的反射(reflection)机制是指在程序的运行状态中 可以构造任意一个类的对象 可以了解任意一个类的成员变量和方法 可以了解任意一个对象所属的类 可以调用任意一个对象的属性和方法 这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制 反射核心:得到编译以后得class文件对象,提供了一个Class类型,就是编译后的class类对象 Base类 package com.soulboy.reflection; public class Base { private String job; public String getJob() { return job; } public void setJob(String job) { this.job = job; } } User类 package com.soulboy.reflection; public class User extends Base { private int age; public String name; public User() { } public User....

Generics

什么是泛型(generics) 是在定义类、接口和方法时,可以在声明时通过一定的格式指定其参数类型 使用时再指定具体的类型,从而使得类、接口和方法可以被多种类型的数据所实例化或调用 这种可以在编译时进行参数类型检查的技术被称为泛型,是JDK5中引入的一个新特性 本质是参数化类型给类型指定一个参数,在使用时再指定此参数具体的值,那这个类型就可以在使用时决定 Generics的优点 把运行时的错误,提前到编译时,这样就可以在编译时把错误提示出来,避免了运行时出现错误 使用泛型可以提高代码的复用性,因为它可以支持多种类型的数据。 为什么要用泛型(generics) 在没有泛型之前,从集合中读取到的每一个对象都必须进行类型转换 如果插入了错误的类型对象,在运行时的转换处理就会出错 集合容器里面如果没指定类型默认都是Object类型,那什么到可以插入 减少了源代码中的强制类型转换,代码更加可读 作用域 泛型类 public class soulboy <泛型类型1,泛型类型2……> { …… } 泛型接口 interface soulboy <泛型类型1,泛型类型2……>....

System Architecture Design 置顶!

该文章已经加密。

RBAC

RBAC     RBAC 就是一个权限控制模型,这个模型是经过时间沉淀之后,相当通用、成熟且被大众接受认可的一个模型。我的理解是 RBAC 和数学公式是一个道理,数学题可以套用数学公式,而权限系统也可以套用 RBAC 权限模型。     RBAC(Role-Based Access Control)权限模型的概念,即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。     利用 MySQL 数据库实现了 RBAC 权限模型。因为 MySQL 支持 JSON 类型的字段,所以我们定义多对多关系的时候,可以使用 JSON 数组字段。虽然 Phoenix 也支持 JSON 类型字段,但是相关的函数较少,而且 JSON 类型字段不支持表连接。所以在 Phoenix 中,我们只能用交叉表记录多对多关系了。 一、IDEA 连接 Phoenix     由于 Phoenix 自带的命令行客户端没有图形界面直观,所....

SaToken

JWT     JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。     下列场景中使用 JSON Web Token 是很有用的: Authorization (授权) : 这是使用 JWT 的最常见场景。一旦用户登录,后续每个请求都将包含 JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的 JWT 的一个特性,因为它的开销很小,并且可以轻松地跨域使用。 Information Exchange (信息交换) : 对于安全的在各方之间传输信息而言,JSON Web Tokens 无疑是一种很好的方式。因为 JWT 可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。另外,由于签名是使用头和有效负载计算的,您还可以验证内容没有被篡改。     传统的单体 JavaW....