自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 使用java实现一个跳表

【代码】使用java实现一个跳表。

2024-03-19 10:33:56 342

原创 设计模式之单例模式

态域,从而创建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关注的人

提示
确定要删除当前文章?
取消 删除