- 博客(18)
- 收藏
- 关注
原创 Spring Cache使用
key = "#root.method.name" , "#root.method.name"是一个EL表达式(不是字 符串),表示 以当前@Cacheable标注的方法名称作为缓存的key;Spring从3.1开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager接口来统一不同的缓存技术并支持使用。
2024-06-21 17:52:14
720
原创 并发编程三大特性之可见性
(1)volatile 属性被写:当写一个volatile变量,JMM会将当前线程的CPU缓存的。lock 锁是基于volatile实现的,lock 锁内部进行加锁和释放锁时,会对一个volatile修饰的属。如果对volatile属性进行写操作,CPU会执行带有lock前缀的指令,会将CPU缓存的数据立。其实变量加了volatile就是告诉cpu,对当前变量的读写操作,不允许使用CPU缓存;如果属性被volatile修饰,相当于告诉cpu,对于当前属性的操作,不允许使用CPU。
2024-04-07 17:42:19
1858
原创 并发编程三大特性之原子性
如果 ThreadLocal 引用丢失,key因为弱引用会被GC回收掉,如果同时。2)ThreadLocal 本身不存储数据,像是一个工具类,基于ThreadLocal去操作。引用,在GC时,也必须被回收。象失去引用后,如果key的引用是强引用,会导致ThreadLocal对象无法。线程还没有被回收,就会导致内存泄漏,内存中的value无法被回收,同。5)ThreadLocalMap的key是一个弱引用,若引用的特点是:对象即使存在弱。的ThreadLocal,ThreadLocal绑定的是当前线程。
2024-04-06 19:53:33
753
1
原创 java内存模型
有的本地内存(Local Memory,又称 线程内存、CPU内存),在操作的时候把主内存中。在消息传递并发模式里,因为消息的发送必须在消息的接收之前,因此同步是隐士的。注意:JMM是一个抽象的概念,在硬件实体中并不存在,是程序设计层面的东西。关系,即:线程之间的共享变量存放在主内存(Main Memory)中,每个线程都有一个私。即JMM定义了线程与主内存之间的抽象。在共享内存的并发模型里,线程之间共享程序的公共状态,通过读-写。注意,把线程内存的变量刷新到主内存这一步操作不一定是及时的,可能其他线程。
2024-04-06 11:38:33
272
1
原创 设计模式之工厂方法模式
4)具体产品:实现了抽象产品所定义的接口,由具体工厂来创建具体产品对象,2) 在系统增加新产品的时候,只需要添加具体产品类及对应的具体工厂,1)每增加一个产品,就需要新增具体的产品类及具体的工厂方法,这样。1)抽象工厂:提供了创建产品的接口,调用者通过它访问具体工厂的工厂。2)具体工厂:主要实现抽象工厂中的抽象方法,完成具体产品的创建。的,这就破坏了“开闭原则”;3)抽象产品:定义了产品的规范,描述产品的主要特性和功能。工厂方法模式的目的很简单,就是封装对象创建的过程,提升创建对象方法的。
2024-04-05 11:07:50
927
1
原创 简单工厂模式
2)提高了代码的可扩展性,如果要增加新产品,则只需要修改工厂类,不需要。1)封装了创建对象的过程,可以通过参数直接获取对象,把对象的创建与业务。现有一个需求,模拟抽奖活动的奖品发送流程,现有3种奖品:打折卷、优酷会员和。修改源代码,降低了客户端修改代码的可能性,更容易扩展。定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例有共同的父类或接口。3)产品工厂:提供了创建产品的方法,调用者通过该方法来获取产品。1)抽象产品:定义了产品的规范,描述了产品的主要特性和功能。
2024-03-30 23:07:36
838
1
原创 Linux环境下ES安装笔记
6.2)修改 /etc/security/limits.d/20-nproc.conf 文件,在文件结尾加上下面内容,1、下载地址:https://www.elastic.co/cn/downloads/kibana,kibana版本最好。6.1)修改 /etc/security/limits.conf文件,在文件最底下添加下边2行配置,/etc/profile 配置的环境变量是全局的,在所有的用户或目录下都可以使用;防火墙,节点之间的通信会失败,主节点选举失败,从而导致集群启动失败。
2024-03-27 17:31:07
1052
原创 设计模式6大原则
迪米特法则又叫最少知识原则(Least Knowledge Principle,简称:LKP),指的是一个。一般认为最早提出开闭原则(Open-Close Principle,简称OCP)的是伯特兰-迈耶。在不了解派生类的情况下,仅通过接口或基类的方法,即可清楚的知道方法的行。3.1)方式1:直接在原来的用户接口 UserService 中增加一个删除用户方法del,如。为,而不管哪种派生类的实现,都与接口或基类方法的期望行为一致。1)模块之间的依赖通过抽象发生,实现类之间不直接发生依赖关系,实现类之间。
2024-03-24 23:55:39
1735
1
原创 synchronized锁升级过程
synchronized 上锁,其实锁信息是加在对象头中的 markdown,对象中的前四个字节表示markdown;的方式,尽可能的把自身的LR设置到 markdown中,若设置成功,makrdown会有。有多个线程竞争synchronized锁时,先把偏向锁撤销,通过自旋的竞争(自旋锁)升级。不一定,偏向锁只有在单线程环境中效率最高;偏向锁每重入一次,在线程栈中都会生成一个LR,但这个LR的值等于NULL,重入次数。轻量级锁重入次数与偏向锁差不多,锁重入次数都是记录在线程栈的LR重,每重入一次也是。
2024-03-19 17:36:59
2454
原创 设计模式之单例模式
态域,从而创建SingleStaticClass的实例,由于是静态的域,因此只会在虚拟机装载类的。频繁的创建和销毁时,而且创建或销毁时性能又无法优化,此时单例模式的优。饿汉式在jvm加载类时就会创建全局的实例,实例的引用用final修饰,表示实例创建成功。这个模式的优势在于,getInstance方法并没有被同步,并且只是执行一个静态域的访问,在系统中,若要求一个类只有一个对象,如果出现多个对象就会出现异常,则可以采用单例。2.1)由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要。
2024-03-17 23:07:06
840
1
原创 OpenFeign使用练习
Feign内置了 Ribbon,用来做客户端负载均衡,远程的调用服务服务中的服务。的注解 @FeignClient 可以解析@RequestMapping 注解下的接口,并通过动态代理的方式生成实现类,在实现类中做负载均衡并远程调用其他服务。定义用于远程调用具体功能的方法,@RequestMapping 注解设置目标服务的具体功。远程调用接口类上需要设置注解 @FeignClient,并指定远程调用的目标服务。服务之间网络调用肯定会有调用失败、超时的情况,feign默认是不打印日志的,
2024-03-15 17:45:07
214
原创 java解决请求跨域的问题
在 Spring 5.3 之后,配置类 CorsConfiguration 中将 addAllowedOrigin 方法名修改为 addAllowedOriginPattern,所以在spring5.3之后上边 corsConfiguration.addAllowedOrigin("*");一般将类 CorsConfiguration 放到网关中,表示对所有的请求/应答实现跨域;允许页面页面请求同源(相同 域名、协议和端口);请求目标与当前页面的域名、协议、端口不一致时,浏览器会阻止请求或接收。
2024-03-15 10:07:52
405
1
原创 mybatis-plus使用练习
3、service 接口的实现类需要集成类 ServiceImpl,其中M表示dao层的mapper接口,如果 IService 中的方法无法满足我们的业务需要,则可以在我们自己定义的service。IPage是mybatis plus 提供的用于分页查询的一个接口,打开分页方法的源码可以发现,在。2、在工程的启动类上加上注解 @MapperScan(dao层接口的包路径) 来扫描注入dao层接口,2、service接口需要集成IService,T表示业务操作的实体类;
2024-03-09 22:52:00
760
原创 ControllerAdvice 统一处里异常
1、定义统一异常处里类:定义一个普通类,并在该类上加上注解 @ControllerAdvice 或 @RestControllerAdvice,2、定义异常处里方法,方法名称随意,重点是方法上的注解@ExceptionHandler,并通过注解。ControllerAdvice 处里异常时,粒度越细的异常,优先级越高,最先执行;3、在 basePackages 指定的包下的类方法就没必要再处里异常,直接抛出异常。先从小粒度的异常开始匹配,只要有一个异常能够匹配到,就不往后匹配更大粒度的异常了。
2024-03-05 17:09:04
307
原创 JSR303请求数据校验练习
JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint(约束) 的实现,除此之外还有一些附加的 constraint。@Constraint 只能用于volidation,因为@Constraint 的值只能是 ConstraintValidator 的子类;
2024-03-05 10:08:56
644
原创 阿里云OSS云文件存储使用方式
创建bucket,在Bucket管理或Bucket 列表中点击“创建Bucket”,弹出创建Bucket 页面。1)点击:用户—>选择AccessKey 管理——>弹框点击“开始使用子用户AccessKey”,进入RAM。Bucket名称,又称bucket命名空间,是全局唯一的,不能重复,其他选项按自己的需求来选择。3、文件上传后,在文件列表可以看到已经上传的文件,点击文件名称或详情按钮;2、进入“文件管理—>文件列表” ,点击“文件上传按钮” 来上传文件。2)点击“创建用户” 来创建RAM访问的子用户。
2024-02-28 15:20:43
1259
1
原创 本地编译Spring源码
gradle版本是:gradle-7.5.1(通过spring源码下的gradle—wrapper—gradle-wrapper.properties。修改文件gradle—wrapper—gradle-wrapper.properties,指向本地的gradle。为了在spring源码编译过程中避免各种问题,所使用的jdk版本和gradle版本应该与spring 官网上。在cmd中执行根目录下的gradle.bat。文件中查看使用的gradle版本)2、使用本地的gradle。这里使用的jdk是17。
2024-02-19 16:22:42
294
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人