Concurrent Programming 2024-08-04 并发编程三要素 原子性 一个不可再被分割的颗粒,原子性指的是一个或多个操作要么全部执行成功要么全部执行失败 期间不能被中断,也不存在上下文切换,线程切换会带来原子性的问题。 有序性 程序执行的顺序按照代码的先后顺序执行,因为处理器可能会对指令进行重排序。 可见性 一个线程A对共享变量的修改,另一个线程B能够立刻看到 锁分类 悲观锁、乐观锁 悲观锁适合写操作多的场景 乐观锁适合读操作多的场景 乐观锁的吞吐量会比悲观锁多 悲观锁 当线程去操作数据的时候,总认为别的线程会去修改数据,所以它每次拿数据的时候都会上锁,别的线程去拿候就会阻塞,比如synchronized、ReentrantLock 乐观锁 每次去拿数据的时候都认为别人不会修改,更新的时候会判断别人是否回去更新数据 通过版本判断如果数据被修改了就拒绝更新,比如CAS是乐观锁,但严格来说并不是锁,通过原子性来保证数据的问步。 比如说数据库的乐观锁,通过版本控制来实现,乐观的认为在数据更新期间没有其他线程影响 公平锁、非公平锁 公平锁 指多个线程按照申请锁的顺序来获取锁,简单来说如果一个线程组里,能保证每个线程都能拿到锁。比如Reen....
Annotation 2024-07-18 annotation 注解是在JDK5 时引入的新特性,其实就是代码里的特殊标记 注解也被称为元数据,是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用 允许开发人员在不改变源代码的情况下,在源代码中添加一些元数据 以便让编译器或者其他工具可以读取这些元数据,从而实现更高级的功能 应用场景 生成文档 编译时进行格式检查,如@Override 替代配置文件功能,比如spring的注解 和反射组合应用,自己封装框架组件 Java自带的标准注解 这些注解后编译器就会进行检查 @Override 标记覆写父类的方 @Deprecated 标记被修饰的类或类成员、类方法已废弃、过时 @SuppressWarnings 用于关闭对类、方法、成员编译时产生的特定警告, 元注解 用于定义注解的注解 元注解也是Java自带的标准注解,只不过用于修饰注解,比较特殊。 @Target:表示该注解用于什么地方 ElementType.CONSTRJCTOR 用在构造器 ElementType.FIELD 用于描述域-属性上 ElementType.METHOD 用在方法上 ElementTy....
Reflection 2024-07-18 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 2024-07-16 什么是泛型(generics) 是在定义类、接口和方法时,可以在声明时通过一定的格式指定其参数类型 使用时再指定具体的类型,从而使得类、接口和方法可以被多种类型的数据所实例化或调用 这种可以在编译时进行参数类型检查的技术被称为泛型,是JDK5中引入的一个新特性 本质是参数化类型给类型指定一个参数,在使用时再指定此参数具体的值,那这个类型就可以在使用时决定 Generics的优点 把运行时的错误,提前到编译时,这样就可以在编译时把错误提示出来,避免了运行时出现错误 使用泛型可以提高代码的复用性,因为它可以支持多种类型的数据。 为什么要用泛型(generics) 在没有泛型之前,从集合中读取到的每一个对象都必须进行类型转换 如果插入了错误的类型对象,在运行时的转换处理就会出错 集合容器里面如果没指定类型默认都是Object类型,那什么到可以插入 减少了源代码中的强制类型转换,代码更加可读 作用域 泛型类 public class soulboy <泛型类型1,泛型类型2……> { …… } 泛型接口 interface soulboy <泛型类型1,泛型类型2……>....
RBAC 2024-03-02 RBAC RBAC 就是一个权限控制模型,这个模型是经过时间沉淀之后,相当通用、成熟且被大众接受认可的一个模型。我的理解是 RBAC 和数学公式是一个道理,数学题可以套用数学公式,而权限系统也可以套用 RBAC 权限模型。 RBAC(Role-Based Access Control)权限模型的概念,即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。 利用 MySQL 数据库实现了 RBAC 权限模型。因为 MySQL 支持 JSON 类型的字段,所以我们定义多对多关系的时候,可以使用 JSON 数组字段。虽然 Phoenix 也支持 JSON 类型字段,但是相关的函数较少,而且 JSON 类型字段不支持表连接。所以在 Phoenix 中,我们只能用交叉表记录多对多关系了。 一、IDEA 连接 Phoenix 由于 Phoenix 自带的命令行客户端没有图形界面直观,所....
SaToken 2024-03-02 JWT JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 下列场景中使用 JSON Web Token 是很有用的: Authorization (授权) : 这是使用 JWT 的最常见场景。一旦用户登录,后续每个请求都将包含 JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的 JWT 的一个特性,因为它的开销很小,并且可以轻松地跨域使用。 Information Exchange (信息交换) : 对于安全的在各方之间传输信息而言,JSON Web Tokens 无疑是一种很好的方式。因为 JWT 可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。另外,由于签名是使用头和有效负载计算的,您还可以验证内容没有被篡改。 传统的单体 JavaW....