java
文章平均质量分 61
胖墩的IT
一步一个脚印走下去,相信自己能成功,
学习的3W原则:who,what,which
生活的3W原则:who,what,why
展开
-
SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue三种队列的简单介绍
其实不光只有这三种,只是因为java提供的四种线程池用到了这三种队列,所以这里探究一下这三种队列的区别,如果看其他的队列,可以直接看java.util.Queue这个接口谁继承了,自己去研究去文章目录0、BlockingQueue1、SynchronousQueue2、LinkedBlockingQueue3、DelayedWorkQueue0、BlockingQueue为什么先介绍这个呢?后面的SynchronousQueue、LinkedBlockingQueue、DelayedWorkQ.原创 2022-08-14 16:00:33 · 714 阅读 · 1 评论 -
ThreadLocal简单介绍
Java中的ThreadLocal详解,大家可以看一下这个,我下面的讲的不如他,我这只是让自己理解的深入些,做一下笔记1、简介先看一张图,出现的场景:每一个线程都可能产生一个全局变量,并且值都是专属于这一个线程的,别的线程不能使用,供线程调用后面的方法取出使用,避免重复传参数,当然你说我就专门当方法参数传,那也可以不用如果涉及到不安全的工具类的使用,可能会造成问题,比如simpleDateFormat。所以需要单独给每一个线程配置本地变量,2、先看一个代码示例,这里只是做范例,这.原创 2022-04-18 00:34:49 · 639 阅读 · 0 评论 -
String.valueOf的坑
直接看源码图片如果传入的obj是null,返回的值不是空对象,而是字符串类型的null尤其是和StringUtils.isBlank() 这种混用的,坑的我补了一夜的数据原创 2021-10-09 00:49:51 · 188 阅读 · 0 评论 -
shiro之身份验证(一)
shiro原理和框架图什么的这就不说了,主要是实际的操作,大家可以参考Shiro 简介看看Shiro的工作原理1、添加依赖因为是第一篇,所以还是写上这个<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactI...原创 2019-08-07 15:08:32 · 483 阅读 · 0 评论 -
SnowFlake生成分布式下唯一ID编号
在分布式环境下,生成全局唯一编号造成了困难,如果用UUID也可以,但是没有任何规律,如果你想用MySQL的自增长主键当唯一编号这有一个问题:如果是单点单库还好,如果你用Mycat中间件,也把MySQL进行主从模式,那就会出现大问题,而且一般MySQL是由事务的,所以很复杂,所以急需那种在分布式环境中对别软件的依赖度不高,能自己解决更好,而又可以生成有一定规律的全局唯一编号这个就很有必要了。所以...原创 2019-08-15 13:40:27 · 348 阅读 · 0 评论 -
Java中HashMap底层实现原理(JDK1.8)源码分析
这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JDK1.6.JDK1.7的。现在我来分析一哈最新的JDK1.8的HashMap及性能优化。在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存...转载 2019-03-13 20:52:51 · 625 阅读 · 0 评论 -
同一个接口内两个方法互相调,事务不生效
场景,接口A里的有两个方法,方法a1和方法a2,方法a1调用方法a2,a1没有添加注解型事务,a2添加了注释型事务@Transactional,在执行中,方法a2 在修改数据库数据后抛异常了,但是没有回滚,1、例子下面这两个方法是一个接口内的两个方法 @Override public void update1(User user){ update2(user); } @Transactional @Override public void .原创 2021-07-06 23:34:23 · 664 阅读 · 0 评论 -
内层事务方法try catch了,当内部抛出异常回滚,会触发外部事务回滚
场景:接口A的方法A1,接口B的方法B1,都添加了事务的注解,接口A的方法A1先修改数据库,之后再调用接口B的方法B1,其中调用方法B1有try catch捕获异常,但是不往外抛异常,那此时如果方法B1有一场了,那会触发方法A中修改数据的操作吗?答案是会触发,当前此前提的基础是用的是 @Transactional 注解,并且采用的是默认的事务1、例子(1)例子的单元测试@SpringBootTest@RunWith(SpringJUnit4ClassRunner.class)public c.原创 2021-07-06 00:18:58 · 3724 阅读 · 0 评论 -
Mockito:当mock数据的参数是对象时,返回的结果为空或者空集合的解决方案
目录1、先看一个例子2、这是个错误的例子3、 Mockito.when时参数用Mockito.any(实际参数对象的class)4、 Mockito.when时重写静态argThat中ArgumentMatcher对象中的matches方法大家都知道通过Mockito 可以mock数据,当参数是字符串或者基本数据类型时,没有问题,但是当参数是对象时如何解决呢?1、先看一个例子接口的实现类@Service("firstService")public class FirstServiceImpl原创 2021-06-09 00:33:51 · 16405 阅读 · 3 评论 -
spring 注解事务遇到的大坑(查日志报Transaction rolled back because it has been marked as rollback-only,嵌套事务)
说我遇到的问题前请大家回顾一下spring的注解标注事务的几种,主要看标红的,其他的以后项目中用到在说,这个链接有对于嵌套事务的介绍注解解释REQUIRED表示业务方法需要在一个事务中处理,如果业务方法执行时已经在一个事务中,则加入该事务,否则重新开启一个事务。这也是默认的事务传播行为NOT_SUPPORTED声明业务方法不需要事务,如果业务方法执行时已经在一个事务中,则事务被挂起,等方法执行完毕后,事务恢复进行REQUIRES_NEW表明业务方法需要在一个单独的.原创 2020-09-13 00:10:51 · 3075 阅读 · 0 评论 -
spring boot/maven项目启动时找不到某个properties中的key
因为组织架构调整,被调去别的项目组,后端用的是spring boot,报错信息时下面这个,报错信息只能给这些,其他的报错信息有公司的标志不能展示(这个是初始化数据库连接创建sqlSessionFactory 报的异常)Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path re.原创 2021-02-28 14:56:34 · 537 阅读 · 2 评论 -
1.1基础编程模型
学编程肯定要学点算法,我就选了《算法》第四版作为自己学算法的开头,虽然在学校里学数据结构,但是还是太浅了,整理一些自己可能会需要的算法程序。一、典型的数组处理代码任务实现(代码片段)找出数组中最大的元素double max = a[0];for (int i = 1; i < a.length; i++) if (a[i] >max) max = a[i...原创 2019-02-14 19:12:25 · 187 阅读 · 0 评论 -
spring项目中xml文件bean 引用错误
今天改xml文件改崩了,报了下面的错误,最后发现是因为bean内的Property,是用ref引用的一个接口,而不知道什么时候我把ref引用的接口换成别的接口了,造成了下面的错误Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annot原创 2021-01-07 21:50:46 · 821 阅读 · 0 评论 -
前端的input类型中的datetime-local传到后端用LocalDateTime接收
做毕设时也没用别的时间类型的第三方的插件,直接用的\<input type="datetime-local"> 之后直接用ajax把表单提交了,但是后端用LocalDateTime接收的话会报错,如果用@Valid 和BindingResult就可以看到报错信息了,而且也接收不到时间,所以记录一下。通过在字段上加@DateTimeFormat(pattern = "yyyy-MM...原创 2020-05-06 01:24:37 · 6807 阅读 · 2 评论 -
字符串判定为空
在日常工作,学习,比赛中肯定会遇到让你判断是否是空字符串的操作,首先如果要判断一个字符串是否为空你肯定会想到String a;if(a == null && a.length()<1){}或者String a;if(a == null && a.equals("")){}但是如果a字符串是" "呢?里面带一个空格,那上面的就都不会成立但...原创 2020-01-06 00:19:05 · 230 阅读 · 0 评论 -
java中拆箱和装箱问题
在用包装器类型时,比如Integer和Long等时要考虑区间是否是-127到128,在此区间的比较可以用== 否则要用equals,这是因为java的包装器类型的拆箱装箱问题,当然你也可以自己主动拆箱或者主动装箱...原创 2020-01-06 00:03:28 · 264 阅读 · 0 评论 -
java8的fork/join模式
https://blog.csdn.net/tyrroo/article/details/81390202原创 2019-08-26 22:22:07 · 784 阅读 · 0 评论 -
分析java中String.split的源码并说一下常犯的错误
腾讯笔试,第一个题15分钟写完,20分钟修改,唉,够够的,我都在想这是不是出题的人专门设置的,就看你看过String.split的源码不,不多说了,分析一下直接上源码: public String[] split(String regex) { return split(regex, 0); } public String[] split(String reg...原创 2019-08-18 10:37:43 · 204 阅读 · 0 评论 -
java之内存管理,内存溢出,垃圾回收(GC)
啊啊啊,阿里面试问到了java内存是怎么管理的,我当时睡蒙蔽了,自我感觉崩了,算法题也崩了,这个题当时问我我想了想,java内存管理,这是啥?好懵逼,我想想要不说说GC?说了一大堆也不知道对不对,回来一查资料,和我说的GC吻合度达到80%,唉,吃了没大局观的亏啊!!!!首先讲讲java的内存分为哪几个区域程序计数区 :为线程编号虚拟机栈:Java方法执行的内存模型,每个方法被执行时都会...原创 2019-08-16 20:27:51 · 3739 阅读 · 0 评论 -
修饰符分类·
转载 2019-03-11 15:25:53 · 195 阅读 · 0 评论 -
java中的双端队列deque使用以及部分原理
转载自:https://www.cnblogs.com/denglh/p/7911513.htmlpackage collections;import java.util.Deque;import java.util.LinkedList;/** * @Package collections * @date 2017-11-28下午5:53:32 */public class ...转载 2019-03-22 21:15:27 · 2735 阅读 · 0 评论 -
Set集合的运用
今天阿里笔试崩了,脑子里忘了Set获取元素的用法了,崩盘了,有时候Set集合的特性真好用,正好现在整理一下Set集合下面不同的Set有统一的特性,那就是不允许集合里的元素重复HashSet存储顺序和添加顺序不同,HashSet不是同步的,如果多个线程修改集合中的值可能会出现错误,线程不安全HastSet允许集合中的元素为null部分特点和HashMap很像,在HashSet集...原创 2019-04-12 22:22:08 · 1316 阅读 · 0 评论 -
SSM中URL与URI的区别
request.getRequestURL() //http://localhost:8080/SpringStudent/change/forwardControl.actionrequest.getRequestURI() //change/forwardControl.action通过这两个例子有个直观的感受吧URL是全路径,URI是项目下的路径...原创 2019-04-21 15:19:44 · 325 阅读 · 0 评论 -
java类加载(自定义类加载器)
类加载的功能:创建自定义的类加载器,通过继承ClassLoader类,重写loadClass或者findClass即可。推荐使用重写findClass,因为这样不会破坏 委托机制。调用loadClass的时候,默认使用findClass找类。看源码public Class<?> loadClass(String name) throws ClassNotFoundExcept...原创 2019-07-14 21:41:23 · 369 阅读 · 0 评论 -
用java验证连接MongoDB和SSM整合MongoDB(十二)
1、java连接MongoDB(通过客户端api的方式)进行操作现在 MongoClient mongoClient = new MongoClient(addrs,credentials); 方式已经删除了,不再用了,所以下面的连接方式有三种(1)连接方式一MongoClientOptions.Builder builder = MongoClientOptions.builder...原创 2019-07-13 21:59:36 · 992 阅读 · 1 评论 -
ArrayList、Vector和LinkedList的优缺点
这只比较优缺点,不说原理ArrayList:适合随机查找和遍历,不适合插入和删除(除头尾插入和删除)线程异步,允许多个线程同时访问不考虑安全,ArrayList比Vector高元素个数大于当前数组长度,增长率为目前数组的50%ArrayList可以转换成Vector 也就是可以线程安全Vector:在ArrayList的基础上加了线程同步(Synchronized),一次...原创 2019-07-11 10:55:47 · 194 阅读 · 0 评论 -
java的浅克隆和深克隆
为什么要存在克隆?首先new出来的对象时初始对象,如果对象里的数据是时刻发生变化的,除非你给初始的对象一一赋值或者使用构造器,上面的也太繁琐了,而用引用就更不行了,旧对象发生变化那新对象也会跟着发生变化,所以产生了克隆看源码 protected native Object clone() throws CloneNotSupportedException;是native修饰的,说明克隆...原创 2019-07-15 14:26:23 · 132 阅读 · 0 评论 -
复制数组和集合for迭代时出现的问题
复制数组复制数组有两种:一只是把引用指向了旧数组,如果旧数组改变新数组就会改变。二把旧数组Copy一份,让堆内存里有两个一模一样的数组,只是一样,没有任何指向关系,改变一个也不会改变另一个先看Arrays.copyOf的源码 public static int[] copyOf(int[] original, int newLength) { int[] copy = n...原创 2019-07-11 13:18:14 · 264 阅读 · 0 评论 -
java中的反射(不讲概念,只是怎么用)
反射作用于分析类要想分析一个类,必须有这个类的元数据,java中描述类的元数据的类是Class类,元数据就是类自己的数据要想得到Class类对象,可以有多种方法1、通过Class.forName加载类2、通过对象.getClass先提醒一下,关于静态块,动态块,构造方法的执行顺序如果不了解的话请看这静态块、动态块、构造函数、继承函数等的执行顺序,用代码形象的解释了一遍1、基础类...原创 2019-07-16 22:00:51 · 176 阅读 · 0 评论 -
信号量(Semaphore),倒计时器(CountDownlatch),屏障(CycliBarrier)
Semaphore信号量控制一起进入线程的数量,通俗点讲是 synchronized 的加强版,作用是控制线程的并发数量 final Semaphore sh = new Semaphore(2);//信号量为2 for(int i = 0; i < 3; i++) { Thread t=new Thread(new Runnable() { public...原创 2019-07-11 23:06:36 · 504 阅读 · 0 评论 -
类里的方法执行顺序遇到的坑
类里的方法体行顺序先提醒一下,关于静态块,动态块,构造方法的执行顺序如果不了解的话请看这静态块、动态块、构造函数、继承函数等的执行顺序执行顺序:(1) 没有继承关系的静态块动态块构造函数(2)如果有继承关系的父类,父类静态代码块子类静态代码块父类动态代码块父类构造函数子类动态代码块子类构造函数注意:静态只执行一次,第二次就把静态去掉就行一个方法被重载多次,参数...原创 2019-07-16 15:48:05 · 186 阅读 · 0 评论 -
简单的工厂模式(也不算工厂模式,就是不让你new,只能通过我的工厂类来new)
工厂模式就是不想让你直接new 它的对象,而是通过工厂里的方法让他给你返回你需要的对象,可以相当于对象的再度封装User类public class User { private String id; private String name; private User() { } private User(String id, String name) { this.id...原创 2019-07-16 22:29:26 · 576 阅读 · 0 评论 -
java中的代理
代理分为两种:静态代理和动态代理1、静态代理2、动态代理目前我知道的动态代理分为两种:基于JDK的动态代理:代理类和实体类要实现同一个接口基于cglib的动态代理:代理类要继承实体类,第三方的最后目的相同,代理实体类,做一些额外的工作(1)基于JDK的动态代理接口public interface ForumService { void removeTopic(int ...原创 2019-07-21 11:02:09 · 221 阅读 · 0 评论 -
迭代器Iterator在遍历时能remove但是不能往集合里添加元素问题
这个是个坑让我一个很简单的笔试题竟然20分钟写不出来的原因之一我们都知道如果是像List集合这样的,如果用循环遍历,访问没问题,在这期间如果删除就会报错,这个问题是因为你改变了集合的长度,但是遍历用的原来的长度的原因,所以Iterator优秀点就出现了,它的出现让你可以在遍历时删除你想删除的元素,它用while循环遍历,它往下循环也就是while里的判定条件是Iterator.hasNex...原创 2019-08-20 11:38:03 · 1808 阅读 · 2 评论 -
List集合根据索引删除数据时用另一个List集合的数据当索引操作失败问题即List.remove(List1.get(index))
index.get(i)获取出来的是Integer对象,你调用list的remove方法,会移除元素与index.get(i)相同的Integer对象,通过你的程序可以看出,这是不可能的(因为你的list中存放的是100,50,50,20,但是index可能存放的是0,1,2,3)原因:1、集合框架只能存放对象,不能存放基本数据类型,所以index取出来的是Integer对象,而不是你想要的i...原创 2019-08-20 12:40:51 · 887 阅读 · 0 评论 -
十六进制转八进制
今天刷蓝桥杯的题目时碰到了十六进制转八进制的题目,耗了我两个小时才做出来,虽然没有别人写的精炼并且行数少,但是这是我自己实打实的,自己的思路,我们先来看一下题目是111一开始看提示以为是十六进制转换成二进制,再转换成八进制(想了半个小时也没思路),后来我想起来老师讲过这种2的阶乘转换成2进制再转换成别的进制将简单多了,后来我也是这么做的,import java.util.ArrayLi...原创 2019-03-04 21:02:48 · 1854 阅读 · 0 评论