![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后端
王英豪很ok,
这个作者很懒,什么都没留下…
展开
-
SpringBoot2.x +redis5.x读写分离配置
redis的主从复制我就不赘述了,各大博客都有写怎么配置的,我们来讲SpringBoot怎么配置读写分离:方法应该有多种:可能的实现有利用AOP动态的获取redis连接工厂并注入对应的实例本文的实现比较呆板,读写分离,主redis负责写,从redis负责读,有两个java配置类如下:附加:java Config(java配置类)是Spring的一种编码风格,其他两种编码风格为XML和注解,J...原创 2019-11-20 20:31:04 · 2995 阅读 · 0 评论 -
关于JDK7HashMap多线程场景下扩容死循环问题的原因以及JDK8的解决方案
JDK7中HashMap扩容出现死循环的本质原因是,这个集合不是线程安全的,共享变量Node结点访问出错,当前线程在扩容到槽中最后一个节点B时,由于其他线程将最后一个节点B的next引用置成了A(下图),被当前线程看到了(实际情况是,没有同步措施的情况下,当前线程可能看到,可能看不到,和线程何时将自己本地内存的值刷新到主存有关,这里涉及JMM模型和内存可见性,如有不懂请百度),导致了当前线程多执行...原创 2019-11-14 20:44:23 · 525 阅读 · 0 评论 -
深入理解JDK动态代理《从手写模拟到源码剖析》
目录 一.java代理模式的实现 二.手写模拟JDK动态代理 三.JDK动态代理源码剖析正题一、java代理模式的实现 1.java中代理模式的实现方式java代理分静态代理和动态代理,java静态代理实现有两种:继承,聚合。java动态代理实现有两种:JDK动态代理,CGLIB代理。 2.静态代理和动态代理的主要区别和特...原创 2019-11-13 14:54:50 · 496 阅读 · 0 评论 -
一张图简单的解释AOP思想
原创 2019-11-06 19:56:17 · 226 阅读 · 0 评论 -
关于ThreadLocal的使用可能造成的内存泄露以及避免方案以及为什么使用弱引用
我们知道,每个Thread类中有一个ThreadLocalMap类型的threadLocals变量,即每个线程中都有一个自己的map,map中的key为ThreadLocal实例,value为要存储的值我们查看该Map的结构,发现里面有个内部类Entry,此Entry类型是构成map的结点结构,类似HashMap中的Node一样。我们在此发现一个问题,发现Entry中的key没有显式声明,...原创 2019-11-04 14:32:42 · 676 阅读 · 0 评论 -
关于IDEA中的classpath定义
想要知道classPath具体包含哪些路径,我们应该先看看自己项目的目录结构,点击IDEA左上角的file->Project-Structure.结构的右边列出了4个项目中的文件类型:Source Folders:表示的都是代码源文件目录,生成的class文件会输出到target->classess文件夹中,但是里面的源文件不会复制到target->classes文件夹中...原创 2019-09-14 20:22:06 · 17081 阅读 · 2 评论 -
JAVA 读写锁中锁降级的必要性
既然大家看到了这篇博客,也应该都大概了解了读写锁的一些概念,咱们直接上主题,读写锁中为什么要用锁降级;先引用书上的一段话说说锁降级的概念: 锁降级指的是写锁降级成为读锁。如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种分段完成的过程不能称之为锁降级。锁降级是指线程先持有写锁,再获取到读锁,随后释放(先前拥有的)写锁的过程;锁降级的必要性1:锁降级中读锁的获取是否必要呢...原创 2019-08-27 20:16:02 · 1690 阅读 · 5 评论 -
为什么J2EE Service层、Dao层要有接口
在此不单单只说为什么这两层要有接口,包括了平时开发写接口的好处,不是不写不行,而是写了更方便程序扩展和后期维护。0.有个接口,注入的时候可以注入到Service对象,没有你就要注入到ServiceImp对象。以后修改了实现,变成ServiceImp2.java了,有接口的话,注入都不用修改。没有的话,你要修改所有用到ServiceImp的类。1.面向对象设计原则中有三条与此相关:开闭原则、依...原创 2019-05-26 15:41:18 · 425 阅读 · 0 评论 -
Tomcat重新部署与热部署与重启服务
1.重启tomcat服务,只会重新编译java模块下的文件(相当于更新.classes文件)2.重新部署,将java类和.xml等配置文件都复制到tomcat的运行环境中(相当于既更新.classes文件又更新web.xml等配置文件)3.热部署,既在运行时修改java类或者jsp文件可以在不重服务器的情况下让修改生效,但是对修改配置文件(例如.xml)无效!总结:开启热部署后,不更改配置...原创 2019-05-03 16:17:44 · 3614 阅读 · 0 评论 -
如何在idea启动或者Tomcat启动时,让gradle自动执行自己所写的task
上图中对你自己添加的任务点击右键,然后选择在编译前执行就OK了,自己添加的task一般都在IDEA右边gradle模块的other目录下原创 2019-04-28 10:53:50 · 1235 阅读 · 0 评论 -
记一次Gradle项目mybatis整合Spring时, Invalid bound statement (not found):
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。常见原因: 一般的原因 Mapper interface和xml文件的定义对应不上,需要检查...原创 2019-04-18 21:05:46 · 2462 阅读 · 0 评论 -
关于IDEA建立Gradle项目build/libs/exploded目录无法生成导致Tomcat找不到web模块问题
我之前用的Gradle作为编译器,导致了开启服务器时,Tomcat找不到web模块,就会导致开启服务器时候报类似 XXXX.war not found for the web module 的错误因为Gradle编译器不会给你自动创建exploded目录,但是Tomcat找的时候是去哪个目录找的,所以改回用IDEA做编译器就好了,我之前也试过改Tomcat寻找war包的路径,但是出现了很多问题...原创 2019-04-27 10:20:13 · 5506 阅读 · 17 评论