- 博客(66)
- 资源 (1)
- 收藏
- 关注
原创 JUC——ThreadLocal是怎么解决并发安全的?
ThreadLocal是Java提供的一种保存线程私有信息的机制,因为其在整个线程生命周期内有效,所以可以方便的在一个线程关联的不同业务模块之间传递信息,比如事务ID、Cookie等上下文相关信息。ThreadLocal为每一个线程维护变量的副本,把共享数据的可见范围限制在同一个线程之内,实现原理是:在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本。
2024-05-14 09:33:07 258
原创 Java中涉及到的锁
1.1 乐观锁是一种乐观思想,假定当前环境是读多写少,遇到并发写的概率比较低,读数时任务i别的线程不会进行修改(所以没上锁)。写数据时,判断当前与期望值是否相同,如果相同则进行更新(更新期间枷锁,保证是原子性的)。1.2 Java中的乐观锁:CAS(比较并替换),比较当前值(主内存中的值),与期望值(当前线程中的值,主内存中值的一份拷贝)是否一样,一样则更新,否则继续进行CAS操 作。1.3 如图:可以同时进行读操作,读的时候其他线程不能进行写操作。
2023-12-05 10:31:53 1162
原创 JWT原理分析——JWT
在Web应用中,不能把JWT当作Session使用,绝大多数情况下,传统的cookie-session机制工作得更好JWT适合一次性的命令认证,颁发一个有效期极短的JWT,即使暴露了危险也很小,由于每次操作都会生成新的JWT,因此也没必要保存JWT,真正实现无状态。
2023-11-07 17:11:12 283
原创 静态方法中调用非静态方法!
需要将 Utils 类添加 @Component 注解注入 Spring 容器,添加 init () 方法,并用注解 @PostConstruct 注解修饰方法, 被 @PostConstruct 修饰的方法会在服务器加载 Servle 的时候运行,并且只会被服务器执行一次。PostConstruct 在构造函数之后执行,init () 方法之前执行。PreDestroy()方法在 destroy () 方法执行执行之后执行, 结果能注入成功!
2023-06-12 17:17:34 370
原创 Synchronized中的i++做了什么操作
问:执行i++做了哪些操作?答:通过反编译工具可以看到执行了Integer.valueOf,再看jdk源码,valueOf方法返回一个新的内存地址。
2022-06-15 08:51:59 162
原创 SpringCloudAlibaba集成seata(AT模式)、nacos
1、nacos作为注册中心2、seata2.1 去官网下载seata-1.2.0版本:下载中心2.2 下载完进入到conf目录修改配置文件:registry.conf、file.conf2.2.1 registry.conf文件:注意:① type = "nacos",nacos作为注册中心写nacos,eureka作为注册中心写eureka;②serverAddr = "localhost:8848" ,没有修改nacos端口号,可以这么写“serverAddr =..
2021-11-05 16:47:01 2192 1
原创 JVM调优和了解性能优化
1、JVM调优的本质:1.1不是为了提高性能,是为了稳定性,不是说调了性能就会提升几倍或者几十倍;1.2 如果系统频繁的出现GC,这个时候系统是不稳定的,这时需要进行JVM调优;2、GC调优原则2.1 大多数的 java 应用不需要 GC 调优2.2 大部分需要 GC 调优的的,不是参数问题,是代码问题2.3 在实际使用中,分析 GC 情况优化代码比优化 GC 参数要多得多;2.4 GC 调优是最后的手段3、GC满足以下几个指标,一般不需要GCMinor GC 执行时间不
2021-08-20 16:40:09 527
原创 Bean的作用域及生命周期
Singleton:单例-整个容器只有一个对象实例默认是单例(使用Singleton定义的bean在spring容器中将只有一个实例,也就是说无论多少个bean引用ta,始终指向同一个对象)Prototype:原型-每次获取bean都产生一个新的对象(每个通过spring容器获取prototype定义的bean时,容器都将创建一个新的bean实例)Request:每次请求时创建一个新的对象Session:在会话的范围内是一个对象Global session:--只在portlet下有用,表示
2021-07-23 11:38:04 1556
原创 Linux connect 网络不可达
1、记录两种情况:“CentOS6 connect 网络不可达” 和 “CentOS6 ping网址 未知的名称或服务”1.1CentOS6 connect 网络不可达1.1.1 root 登录,进入“vim /etc/sysconfig/grub”修改网卡名称,在quiet后加入 “net.ifnames=0 biosdevname=0”离开编辑页面:“ESC”强制保存退出:“:wq!”1.1.2 再执行“grub2-mkconfig -o /boot/grub2/grub....
2021-05-08 17:23:35 8903 1
原创 Linux安装部署Redis(一)
redis简介redis 是一种基于键值对(key-value)数据库,其中 value 可以为 string、hash、list、set、zset 等多种数据结构,可以满足很多应用场景。还提供了键过期,发布订阅,事务,流水线,等附加功能, 流水线: Redis 的流水线功能允许客户端一次将多个命令请求发送给服务器, 并将被执行的多个命令请求的结果在一个命令回复中全部返回给客户端,使用这个功能可以有效地减少客户端在执行多个命令时需要与服务器进行通信的次数。特性:1〉速度快,数据放在内存中
2021-04-08 16:54:28 102
原创 微服务整合:org.apache.ibatis.binding.BindingException
微服务整合:1、子服务A依赖于B服务存在,B服务pom.xml引用子服务,在访问到dao时报:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):就是说mybatis中dao接口与mapper配置文件做映射绑定时出问题,要么是接口与xml找不到,要么是找到了却匹配不到。...
2021-03-16 19:47:05 235
原创 springboot中.yml 用jasypt 密码加密
1、.yml配置文件中密码改成密文的实现方法1.1 采取jasypt 加密,pom引入依赖<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependen.
2020-12-17 16:34:03 865
原创 IDEA中mvn 打 jar 包,提示:程序包xxxx不存在
1、环境描述:在业务模块拆分的基础上又做了功能拆分,分别将controller和service拆分成微服务,即父工程A下边分别有A1、A2、A3、、、,A1下边分别有controller、service微服务和共用api;controller微服务中写控制层代码,service微服务中写业务代码,通过 @EnableFeignClients 调用。2、controller微服务打jar时,提示service微服务中的程序包不存在,二者存在依赖关系,报错信息如下2.1 解决办法:build中加
2020-10-30 16:10:21 1473 2
原创 There is no getter for property named ‘sql‘ in ‘XXX.XXXDo‘ 踩坑
1、描述一下场景:流程已经通过postman测试通过获取到数据,只是加入了@FeignClient,所以就一直考虑是FeignClient出问题了,没有考虑其他,,,,,,还是没忍住看了一下mybstis映射文件,是有一个{sql}字符串替换,但是已经注释掉了(之前没提示这个问题),不知道idea怎么又读出来了。。。。。。。。。。。坑,删除红色圈中部分错误日志:[2020-10-20 13:31:16.321][ERROR][http-nio-9001-exec-1][tansun-rcc-co..
2020-10-20 14:05:19 353
原创 SpringCloud 中 Invalid bean definition with name ‘xxx.FeignClientSpecification‘
合并微服务代码时编译通过,启动时报错:Invalid bean definition with name 'xxx-rcc-Service.FeignClientSpecification'原因:多个接口上的@FeignClient(“相同服务名”)会报错,overriding is disabled。解决办法:在application.yml中配置spring: main: allow-bean-definition-overriding: true...
2020-10-19 16:28:49 3574 1
原创 Optional int parameter ‘xxx‘ is present but cannot be
前后端分离,对接时出现的问题,前提是通过postman可以运行:Optional int parameter 'pageNum' is present but cannot be translated into a null value due to being declared as a primitive type解析:问题出现在前端:① “params”方式,即使是post请求,也会在url后拼接参数,如同:http://123:8080/xxx/hold/abc/getList.
2020-10-18 10:40:19 2229
原创 Oracle字段类型踩坑
用varchar 不许用char1、场景描述通过Postman跑一个SpringCloudAlibaba中的一个子服务,debug跟进去看一下,已经接收到参数值(图1);再查看控制台输出的sql(图2),复制控制台的sql到数据库执行是有数据的(图3)。2、问题排查①已经确认数据库连接没有问题;②通常情况下数据有空格,准确查询是查不到的;③从数据下手,发现光标位置前有空格,准确查询还能查到解释不通3、字段类型分析oracle提供了五种字符数据类型:char
2020-10-11 16:09:52 334
原创 SpringCloud(六)快速集成druid(德鲁伊)
1、在application.properties或bootstrap.properties加入如下配置###################以下为druid增加的配置###########################spring.datasource.type=com.alibaba.druid.pool.DruidDataSource# 下面为连接池的补充设置,应用到上面所有数据源中# 初始化大小,最小,最大spring.datasource.initialSize=5spring.
2020-09-23 15:12:32 2450
原创 SpringCloud(五)——常识随手记
SpringCloud:1、Eureka启动类使用注解: @SpringBootApplication // 开启服务注册功能 @EnableEurekaServer 2、micro-order启动类使用注解: @SpringBootApplication // 开启Eureka客户端功能 @EnableEurekaClient 注意:配置文件bootstrap.properties启动优先于 application.p...
2020-09-18 09:15:17 116
原创 并发下的Map常见问题小结
1、HashMap和HashTable有什么区别?① HashMap是线程不安全的,HashTable是线程安全的;② 因为线程安全,所以HashTable的效率比不上HashMap;③ HashMap最多只允许一条记录的键为null,允许多条记录的值为null;而HashTable不允许;④ HashMap默认初始化数组的大小为16,HashTable为11,前者扩容时,扩大两倍,后者扩大两倍+1;⑤ HashMap需要重新计算hash值,而HashTable直接使用对象的hashco
2020-08-26 15:49:48 624
原创 Springboot2.0解决跨域问题
CORS简介CORS是一个W3C标准,全称是“跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源(协议+域名+端口)服务器,发出XMLHttpRequest请求,从而克服了ajax只能同源使用的限制。浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)①浏览器发出CORS简单请求,只需要在头信息之中增加一个Origin字段。②浏览器发出CORS非简单请求,会在正式通信之前,增加一
2020-08-25 10:23:34 538
原创 Java 8 新特性——什么是Stream?
什么是Stream? Java8中,Collection新增了两个流方法,分别是Stream() 和 parallelStream() 【/ˈpærəlel/ 音标哈哈哈哈哈】 Java8中添加了一个新的接口类Stream,相当于高级版的 Iterator,ta可以通过 Lambda 表达式对集合进行大批量数据操作,或者高效的聚合数据操作。为什么要使用 Stream? 在Java8之前,通常用 普通循环、for 循环 或者 Iterator 迭代来重排序...
2020-08-18 13:54:14 396
原创 进阶——深入理解JVM的内存区域
1、Java方法的运行与虚拟机栈2、深入理解JVM的内存区域2.1 深入理解运行时数据区2.1.1 JVM向操作系统申请内存: JVM第一步就是通过配置参数或者默认配置参数向操作系统申请内存空间,根据内存大小找到具体的内存分配表,然后把内存段的起始地址和终止地址分配给JVM,接下来JVM就进行内部分配。2.2.2 JVM获得内存空间后,会根据配置参数分配堆、栈以及方法区的内存大小-Xms30m-Xmx30m -Xss1m-XX:MaxMetaspaceSize=30m...
2020-08-14 10:30:01 260
原创 Hystrix 比 try catch 比较
1.使用了滑动时间窗口提供断路2.提供的度量和仪表板开箱即用,可以帮助您窥视您的系统和从属连接3.使用不同的线程池实现BulkHead 仓壁模式4.健康检查能力.它提供了一个运行状况监视API的运行状况检查类5、在hystrix里面提供一个Dashboard(仪表盘)的功能,他是一种监控的功能,可以利用它来进行整体服务的监控...
2020-08-10 11:28:39 430
原创 SpringCloud微服务架构(四)——Hystrix熔断机制
分布式环境下,微服务之间不可避免的会发生互相调用的情况,但是没有一个系统是能保证自身绝对正确的,在服务的调用过程中,很可能面临服务失败的问题,因此需要一个公共组件能够在服务通过网络请求访问其他微服务时,能对服务失效情况下有很强的容错能力,对服务提供保护和监控。 Hystrix是netflix的一个开源项目,能够在依赖服务失效的情况下,通过隔离系统依赖的方式,防止服务的级联失败(服务的雪崩)。服务的熔断机制,需要考虑两种情况:服务提供方存活,但调用接口报错; 服务提供方本...
2020-08-10 10:37:31 207
原创 SpringCloud微服务架构(三)Ribbon负载均衡——源码解析
1、Ribbon基本使用 在用到负载均衡之前,先要到Eureka中获取相关的服务,这块需要用到Eureka,但Eureka中已经内置继承了Ribbon,所以在pom文件中,并不需要引入ribbon的依赖Ribbon对应的pom文件如下:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-...
2020-08-06 10:13:50 560
原创 MyBatis干货——常见面试题
1、什么时MyBatis答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。2、讲下 MyBatis 的缓存答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓 存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化 接口(可用来保存对象的状态),可在它的映射文件中配置<cache/>3、Mybatis 是如何进行分页的?分页插件的原理是什么?答:...
2020-07-30 15:17:43 245
原创 多线程(四)ThreadLocal与Synchonized的比较
ThreadLocal和synchronized都用于解决多线程并发访问。ThreadLocal与Synchronized本质区别:①ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间访问到的并非同一个对象,这样就隔离了多个线程对数据的共享。②synchronized是利用锁的机制,使变量或代码块在某一时刻仅仅能被一个线程访问。例:Spring的事务就借助了ThreadLocal类。 Spring会从数据库连接池中获得一个connection,然后会把connec
2020-07-30 13:58:15 201
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人