![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java中级
文章平均质量分 82
-停泊
这个作者很懒,什么都没留下…
展开
-
基于redis的分布式锁
谈起redis锁,下面三个,算是出现最多的高频词汇:setnxredLockredisson关于这几个的介绍呢,网上有很多啊。可以去看看这里对于下面的主要讲一下基于上面介绍的一个补充。redLock补充:首先可以看一下两位大佬对于redLock的讨论。Martin Kleppmann 的质疑贴Antirez 的反击贴...原创 2021-08-29 16:59:55 · 142 阅读 · 0 评论 -
Redis多线程模型 6.0版本
Redis 官方在 2020 年 5 月正式推出 6.0 版本,提供很多振奋人心的新特性,所以备受关注。主要特性如下:多线程处理网络 IO;客户端缓存;细粒度权限控制(ACL);RESP3 协议的使用;用于复制的 RDB文件不在有用,将立刻被删除;RDB 文件加载速度更快;其中备受关注的就是「多线程模型 + 客户端缓存」,我们只有掌握了新特性原理,才能判断什么时候使用 6.0 版本,如何用的更好更快,不踩坑。Redis 6.0 之前为什么不使用多线程?官方答复:使用 Redis转载 2021-08-13 10:43:05 · 160 阅读 · 0 评论 -
JVM线程本地分配缓冲区(Thread Local Allocation Buffer)TLAB详解
最近在看java性能相关方面的书籍。然后在GC调优相关的部分出现了,线程本地分配缓冲区的名词,对于它的调优级为重要,所以就梳理一下这个到底是什么?为什么他对于JVM性能如此重要。什么是JVM线程本地分配缓冲区(Thread Local Allocation Buffer)TLAB?JVM在分配新对象时,将在专用于原始线程的TLAB(线程本地分配缓冲区)中分配该对象。由于每个线程只能写入自己的TLAB,因此不需要同步。TLAB默认情况下处于启用状态,可以随时使用-XX:-UseTLAB调整标志将其禁用(除原创 2021-08-04 15:38:01 · 1452 阅读 · 0 评论 -
maven 上传私服
maven配置settings.xml方式1:直接下载settings.xml????settings.xml直接下载settings.xml文件,替换本地maven环境下conf中的settings.xml文件,默认在USER_HOME/.m2/settings.xml中制品上传配置配置好了settings.xml后,在代码库根目录下的pom.xml加入以下配置:<distributionManagement> <repository> <原创 2021-02-23 15:08:30 · 636 阅读 · 0 评论 -
Java中的伪共享(false sharing)
Java中的伪共享(false sharing)1.引入最近在看JVM最新的一版,挺不错的比之前的第二版增加介绍了jdk8之后JVM的改变等。(推荐大家去看!!!)然后在卡表哪里提到了伪共享,于是就有了下面的文章了。(可能有很多大佬都写过了,我在来写一遍,加强我自己的理解吧。)2.什么是伪共享?维基百科对于伪共享的解释:CPU的缓存是以缓存行(cache line)为单位进行缓存的,当多个线程修改不同变量,而这些变量又处于同一个缓存行时就会影响彼此的性能。例如:线程1和线程2共享一个缓存行,线程1只原创 2020-05-26 16:27:51 · 909 阅读 · 3 评论 -
UnsupportedOperationException 解决方法
java.lang.UnsupportedOperationException 解决方法今天在写leetcode的算法时遇到了一个问题。先上代码:List<Integer> subordinates = subordinates;//这是实体中的一个List而不是ArrayList for (int i = 0; i < subordinates.size(); i++) { int j = subordinates.remove(i);原创 2020-05-15 15:42:42 · 3729 阅读 · 0 评论 -
推荐:JDK动态代理实现原理
看到一篇博客,觉得他JDK动态代理实现原理写得非常好,也很值得推荐,给大家推荐一下!!!链接:https://www.iteye.com/blog/rejoy-1627405转载 2020-04-03 09:15:47 · 149 阅读 · 0 评论 -
布隆过滤器详解
什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。实现原理HashMap 的问题讲述布隆过滤器的原理之前,...转载 2019-10-23 14:56:58 · 653 阅读 · 0 评论 -
reids的key在不同项目不共享的问题
reids的key在不同项目不共享的问题前提是 redis的不同服务器之间都是共享的!1、第一个问题redis的一台服务器中可能有多个database,这个是可以配置的。如果不设置datebase默认是0. 不同的项目之间是否设置了不同的datebase。下面是xml的配置:<bean id="redisConnectionFactory" class="org.sprin...原创 2019-06-15 14:03:27 · 1035 阅读 · 0 评论 -
RedisTemplate集合使用说明-opsForList
1、leftPush(K key, V value)在变量左边添加元素值。redisTemplate.opsForList().leftPush("list","a"); redisTemplate.opsForList().leftPush("list","b"); redisTemplate.opsForList().leftPush("list","c"); 2、index...转载 2019-05-13 10:22:33 · 33171 阅读 · 2 评论 -
Spring boot2.x整合redis 或者 集群
一、搭建单机版的redis1.pom.xmlSpring boot 2.0以上的redis都是使用 lettuce来进行链接的,不过这里用的是jedis<!--redis--> <dependency> <groupId>org.springframework.boot</groupId> ...原创 2019-02-27 12:05:14 · 770 阅读 · 0 评论 -
xstream security framework of xstream not initialized xstream is probably vulnerable 问题解决办法
xstream security framework of xstream not initialized xstream is probably vulnerable最近在使用 XStream 1.4.10 版本的时候遇到了一个安全问题:“xstream security framework of xstream not initialized xstream is probably vuln...转载 2019-03-01 19:36:28 · 8849 阅读 · 4 评论 -
Failed to start component异常的解决方案
出现的异常:Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/uploadFile]]通过百度什么的定位到了,是tomcat的server.xml配置的问题。于是乎就去查找了server.xml文件找到的相关的问题点: <!-- Ac...原创 2019-02-18 17:50:57 · 69463 阅读 · 1 评论 -
Java并发编程:线程池的使用
Java并发编程:线程池的使用在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中...转载 2019-01-12 22:52:48 · 192 阅读 · 0 评论 -
设计模式的学习(十三):状态模式
状态模式1、状态模式(State Pattern)当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。2、例子比如电梯的运行:按钮来控制一个电梯的状态,电梯开门,关门,停止,运行。每一种状态改变,都有可能要根据其他状态来更新处理。电梯在开门状态时不可以运行,也不能在运行的时候开门,而是在电梯停止后才能开门。...原创 2019-01-02 12:05:02 · 181 阅读 · 0 评论 -
设计模式的学习(九):建造者模式
建造者模式1、建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。2、例子1、去KFC或者金拱门的时候大家一般都会点某种套餐,但是套餐中汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。 2、JAVA 中的 StringBuilder。3、建造者模式的优缺...原创 2018-12-25 16:39:03 · 249 阅读 · 0 评论 -
Java对象的生命周期
Java对象的生命周期在Java中,对象的生命周期包含下面几个阶段:创建阶段(Created)应用阶段(In Use)不可见阶段(Invisible)不可达阶段(Unreachable)收集阶段(Collected)终结阶段(Finalized)对象空间重分配阶段(De-allocated)1.创建阶段(Created)在创建阶段系统通过以下的...转载 2019-01-04 16:49:21 · 156 阅读 · 0 评论 -
设计模式的学习(十五):迭代器模式
迭代器模式1、迭代器模式(Iterator Pattern)用于顺序访问集合对象的元素,不需要知道集合对象的底层表示,是 Java 和 .Net 编程环境中非常常用的设计模式。迭代器模式属于行为型模式。2、例子迭代器模式已经被Java很好的封装了,比如:iterator。大家肯定在日常开发中都用到过,不过所以迭代器模式现在基本都用在自己写了。而更加方便的foreach和stream得到了应用...原创 2019-01-04 16:07:26 · 145 阅读 · 0 评论 -
设计模式的学习(六):装饰器模式
装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变他的结构。它属于结构型模式,它作为先有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。2、例子比如:孙悟空有 72 变,当他变成"庙宇"后,他的根本还是一只猴子,但是他又有了庙宇的功能。一般多用于扩展类的功能,同时可以达到动...原创 2018-12-19 12:12:17 · 172 阅读 · 0 评论 -
spring嵌套事物
一、事务传播属性 REQUIRED:业务方法需要在一个事务中运行。如果方法运行时,已经处在一个事务中,那么这个时候就会加入到该事务中,如果当前没有事务环境的话,就会为自己创建一个新的事务。默认情况下,业务方法的事务传播属性就是REQUIRED。在应用开发中,80%的情况下都会使用这种事务传播属性。NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为它开启事务...原创 2018-03-08 17:48:17 · 967 阅读 · 0 评论 -
spring定时任务,cron表达式详解!
cron表达式详解: 一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。 按顺序依次为 1 秒(0~59) 2 分钟(0~59) 3 小时(0~23) 4 天(0~31) 5 月(0~11) 6 星期(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT) 7.年份(1970-2099) 其中每个元素...原创 2018-03-14 12:04:55 · 2916 阅读 · 0 评论 -
使用Fastjson解析List对象时出现$ref: "$.list[0]"的问题原因及解决方法
1. 遇到的问题:在解析List时,List的对象中又包含了一个对象。然后使用JSON.toJSONString(List<>); 就出现了问题如下: "tokenDTO": { "$ref": "$.balanceList[1].tokenDTO" }, 然后,百度了一下,出现”ref":"ref":"原创 2018-04-13 13:22:12 · 7054 阅读 · 1 评论 -
ClassCastException异常的出现原因和解决方法
ClassCastException是JVM在检测到两个类型间转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。在执行任何子系统的应用程序代码时都有可能发生ClassCastException异常。通过转换,可以指示Java编译器将给定类型的变量作为另一种变量来处理。对基础类型和用户定义类型都可以转换。Java语言规范定义了允许的转换,其中大多数可在编译时进行验证。不过,某些转换还需要运行...原创 2018-07-16 17:31:30 · 177913 阅读 · 1 评论 -
设计模式的学习(三):抽象工厂设计模式
抽象工厂模式1、抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。2、例子你的许多套衣服,每套衣服都有裤子,衣服和鞋子组成。其中的每一个部位都是来自一个工厂模式,其中你可以随机来搭配怎么穿。怎么搭配就是抽象工厂模式的应用,例如:QQ中的换皮肤,一整套...原创 2018-12-12 16:25:10 · 161 阅读 · 0 评论 -
设计模式的学习(四):单例模式
单例模式1、单例模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。2、例子显示中就有很多设备,机器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。单例模式也是非常常见的,比如面试的时候常常让写。java中也经常...原创 2018-12-13 12:12:12 · 159 阅读 · 0 评论 -
Spring boot集成kafka生产者发布消息事件
Spring boot集成kafka1、引入pom文件,版本的可以自己去maven中找 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>1.2...原创 2018-12-19 15:34:52 · 1088 阅读 · 0 评论 -
设计模式的学习(一):设计模式的六大原则
设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性...原创 2018-12-07 16:30:42 · 154 阅读 · 0 评论 -
设计模式的学习(七):代理模式
代理模式1、代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。2、例子现实中也有很多点叫什么什么代理等,比如买火车票不一定在火车站买,也可以去代售点。另外spring aop 也是一种代理模式。3、代理模式的优缺点优点: 1、职责清晰。 2、高扩展性。 3、智能化。缺...原创 2018-12-20 15:28:00 · 156 阅读 · 0 评论 -
设计模式的学习(十):原型模式
原型模式1、原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。2、例子原型模式就好比细胞分裂和克隆,完完全全再生成一个一模一样的物品。 比如JAVA 中的 Object clone() 方法。目前在实际项目中,原型模式很少单独出现...原创 2018-12-26 16:08:21 · 185 阅读 · 0 评论 -
Spring boo项目通过JedisCluster整合redis集群(redis有密码)
SpringBoot + Redis集群的整合:1、首先要在maven中引入redis的jar包,因为spring boot 对redis的支持非常好,所以只需要引入下面一个jar就可以了: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp...原创 2018-12-10 14:52:37 · 5538 阅读 · 1 评论 -
设计模式的学习(十一):外观模式
外观模式1、外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。2、例子这个例子可能大家在日常开发中都会用到,只不过在不了解外观模式的情况下,也不知道。比如一些提供给web...原创 2018-12-27 17:55:09 · 185 阅读 · 1 评论 -
设计模式的学习(二):工厂设计模式
工厂模式1、工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。2、例子如果你需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 这就是最简单的工...原创 2018-12-11 11:07:57 · 177 阅读 · 0 评论 -
设计模式的学习(五):策略模式
在策略模式在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。2、例子将这些算法封装成一个一个的类,任意地替换。例如:商场的促销活动,国庆节是打折,元旦节是满减,等。每一种促销方...原创 2018-12-18 11:55:45 · 163 阅读 · 0 评论 -
设计模式的学习(十二):观察者模式
观察者模式1、观察者模式(Observer Pattern)。定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。观察者模式属于行为模式2、例子首先观察者模式是一对多,观察者观察到某一事物的变化后,同志给多个事物,使他们来做出相应的不同的改变。例如:拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价,然后竞价者他们各自做出继续竞价、...原创 2018-12-28 17:41:34 · 154 阅读 · 0 评论 -
设计模式的学习(十四):备忘录模式
备忘录模式1、备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。备忘录模式属于行为型模式。2、例子比如我们完单机游戏时的存档,今天通关不了先存档,等明天有时间了再来接着打,这样就很美滋滋。也比如浏览器中的后退、数据库中的事务管理。3、备忘录模式的优缺点优点:1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方...原创 2019-01-03 17:51:50 · 267 阅读 · 0 评论 -
设计模式的学习(八):模板模式
模板模式1、模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。2、例子模版模式在现实时间中也有很多例子,比如:在生产电脑的时候,主板、声卡、显卡、网卡等,这些都是不可或缺的,但是可能机箱等不一样。在开发中,大家也会把一些公共代码,提取出来,这就是模版...原创 2018-12-24 18:02:26 · 119 阅读 · 0 评论 -
Callable和Future 的用法详解
接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务转载 2018-01-31 18:46:49 · 4624 阅读 · 0 评论