
JAVA基础
文章平均质量分 56
AAA821
这个作者很懒,什么都没留下…
展开
-
使用@Data编译报不允许使用‘空’类型的问题排查
上伪代码@Datapublic class Test { private int age; private String name; public void getName() { if (age == 1) { XXXXXX } }}原因是有个变量,假设名为name;然后刚好我有个getName()方法是实现了自定义逻辑的(只是方法名刚好一样),且返回值为void这个getName方法就会与@原创 2022-03-11 18:15:28 · 1326 阅读 · 2 评论 -
Float累加,精度引起误差 符号位指数位尾数位
程序用float累加订单的金额,得出来的数跟在数据库查出的总数不一致。后面换成Double下面内容转自浮点数float累加误差分析与解决_zhrh0096的专栏-优快云博客由上图可知(摘在[2]), 浮点数由: 符号位 + 指数位 + 尾数部分, 三部分组成。由于机器中都是由二进制存储的,那么一个10进制的小数如何表示成二进制。例如: 8.25转成二进制为1000.01, 这是因为 1000.01 = 1*2^3 + 0*2^2 + 0*2^1 + 0*2^0 + 0*2^-1 .转载 2021-09-30 14:14:50 · 841 阅读 · 0 评论 -
(转)并发-Tomcat线程-QPS的思考
转自:https://segmentfault.com/q/1010000016846975该贴下临风的回答临风个人主页:https://segmentfault.com/u/linfeng_5ac9bd0a4d6a7一般线程数有一个公式:最佳启动线程数 = [任务执行时间 / (任务执行时间 - IO等待时间)] * CPU内核数比如说任务执行时间是100ms IO等待时间是10ms 8核 则线程数为8个IO等待时间是50ms 则线程数为16个线程多少对最高并发没有直接影响,任务计算时转载 2021-02-02 12:28:00 · 3117 阅读 · 1 评论 -
解决跨域问题
问题产生:前端页面地址跟接口地址域名不一样。问题解决:前端页面请求的请口地址域名,保持跟页面地址的域名一致,然后在前端项目所在的nginx中进行请求的转发,将请求转发到接口地址对应的服务器中location ~ ^/(h5)/ { proxy_redirect off; proxy_set_header Host $host; ...原创 2020-03-03 17:33:31 · 1039 阅读 · 0 评论 -
ThreadLocal的弱引用
ThreadLocal中,获取到线程私有对象是通过线程持有的一个threadLocalMap,然后传入ThreadLocal当做key获取到对象的,这时候就有个问题,如果你在使用完ThreadLocal之后,将其置为null,这时候这个对象并不能被回收,因为他还有 ThreadLocalMap->entry->key的引用,直到该线程被销毁,但是这个线程很可能会被放到线程池中不会被销毁...转载 2020-01-01 17:47:25 · 1350 阅读 · 0 评论 -
(转)页、磁盘块与扇区
转自 xiazemin 的 泽民博客https://xiazemin.github.io/MyBlog/linux/2019/03/27/disk.html#扇区:磁盘的最小存储单位;磁盘块:文件系统读写数据的最小单位;页:内存的最小存储单位;一个磁盘块由连续几个(2^n)扇区组成;页的大小为磁盘块大小的2^n倍;页大小查看: getconf PAGE_SIZE,常见为4...转载 2019-12-24 17:26:24 · 848 阅读 · 0 评论 -
JsonSerializer的理解
一开始,我需要的是在将数据对象转成Json时,对象里的Date字段自动转成时间戳,查了下,发现JsonSerializer,以为可以满足需求,结果不行。它是可以将Date字段转成时间戳,只不过是在传输数据的时候才会自动传。在转成Json的时候,因为不涉及到传输数据,所以并不会转。关于JsonSerializer的使用及详细介绍,看下面博文就可以知道了https://www.jiansh...原创 2019-11-19 14:52:21 · 3785 阅读 · 0 评论 -
getClassLoader()和getContextClassLoader()的区别
区别一: getClassLoader()是当前类加载器,而getContextClassLoader是当前线程的类加载器 区别二: getClassLoader是使用双亲委派模型来加载类的,而getContextClassLoader就是为了避开双亲委派模型的加载方式的,也就是说它不是用这种方式来加载类当前类加载器加载和定...原创 2018-10-16 18:01:24 · 3661 阅读 · 1 评论 -
单例模式的作用
以下内容 大部分出自此博客 http://blog.youkuaiyun.com/ljhljh8888/article/details/8017701/ 单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:第一、控制资源的使用,通过线程同步来控制资源的并发访问;第二、控制实例产生的数量,达到节约资源的目的。第三、作为通信媒介使用,也就是数据共享,...转载 2018-10-17 07:24:44 · 5552 阅读 · 0 评论 -
反射的作用及缺点
反射是什么呢?当我们的程序在运行时,需要动态的加载一些类这些类可能之前用不到所以不用加载到jvm,而是在运行时根据需要才加载作用:用于在运行时需要检测或修改程序行为的地方,比如说可以动态加载类啊,实现AOP啊缺点:1.性能问题。反射包括了一些动态类型,所以 JVM 无法对这些代码进行优化。因此,反射操作的效 率要比那些非反射操作低得多。我们应该避免在经常被 执行的代码或对性能要求很高...转载 2018-10-12 18:28:33 · 589 阅读 · 0 评论 -
查看Maven包的依赖跟exclusions
我将springBoot的项目打包成JAR然后运行时,报IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path,就是Jar包冲突了解决方案:在使用到的依赖包中添加<exclusion>标签将slf4j-log4j12.j...原创 2018-10-10 15:07:03 · 414 阅读 · 0 评论 -
spring用到了那些设计模式
1.工厂模式:这个很明显,在各种BeanFactory以及ApplicationContext创建中都用到了2.代理模式:在Aop实现中用到了动态代理;3.单例模式:spring默认是单例4.适配器模式:Spring里,HandlerAdapter用的就是适配器模式5.观察者模式:Spring中Observer模式常用的地方是listener的实现。如ApplicationList...原创 2018-10-17 07:24:17 · 1366 阅读 · 0 评论 -
Dockerfile文件的解释
1.我要在Docker中部署springBoot项目,Dockerfile文件如下from java:8 指定JAVA8为基础镜像VOLUME /e/dockerProject/tmp 用于容器数据的持久化,我这里是将数据存在我Window的某个文件夹下ADD images/springBootRabbitMqTest.jar springBootRabbitMqTest.jar 这里是将...原创 2018-10-10 11:51:25 · 442 阅读 · 0 评论 -
Java命令参数
1.java -DSet a system property value. If value is a string that contains spaces, you must enclose the string in double quotes:java -Dfoo="some string" SomeClass也就是说-D是用来在启动一个java程序时设置系统属性值的。如...原创 2018-10-10 11:51:06 · 217 阅读 · 0 评论 -
Java 实现文件随机读写-RandomAccessFile
RandomAccessFile的作用在于,我们不需要把整个文件加载进内存,它是像类似于指针一样的东西,实现读写这是我的目标文件public class RandomAccessFileTest { public static void main(String[] args) throws Exception { RandomAccessFile raf = new Rando...原创 2018-10-22 22:21:26 · 679 阅读 · 0 评论 -
ArrayList的底层数据结构
转自:https://www.cnblogs.com/dassmeta/p/5334960.htmlublic class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ ...转载 2018-10-22 23:33:09 · 6318 阅读 · 0 评论 -
Java锁的优化
Java在JDK1.6后对锁进行了优化,引进了偏向锁,轻量锁等。也就是说偏向锁升级为轻量锁的依据,是第二个线程访问时,第一个线程已经拿到这个偏向锁,且还在使用这个锁(我理解这个使用的意思是还在锁的范围内,没离开锁,因为如果已经离开锁了,第二个线程就可以将对象恢复成无锁状态,然后后让这个对象的锁偏向我这个线程)这时候有冲突偏向锁无法解决,只能升级为轻量锁(轻量锁的解决方法就是转载 2017-10-09 14:03:47 · 251 阅读 · 0 评论 -
(转)List.subList带来的ConcurrentModificationException异常
下面内容主要转自下面两篇博文https://www.jianshu.com/p/59ca14497a12https://www.jianshu.com/p/d2a69f7dc563ArrayList$SubList.size方法,如果原List和SubList的modCount不相等就会报错先贴demopublic static void main(String[] args...原创 2019-08-14 10:44:55 · 2594 阅读 · 1 评论 -
(转)快速查找项目发生异常日志命令
转自:https://blog.youkuaiyun.com/liangwenmail/article/details/729675371如果知道多少行到多少行发生了日志: sed -n '起始行号,结束行号p' catalina.out |cat 2 按异常搜索,如果直接知道是什么异常最好了,不知道就搜Exceptioncat -n catalina.out | grep Exception -...转载 2019-01-10 09:30:02 · 651 阅读 · 0 评论 -
VisualVm的理解
VisualVM有四个区域1.内存堆,堆就是放对象的,我们可以点堆Dump,通过分析ump结果,看有哪些对象是非常占内存的。遇到内存问题,最好是希望能够直观的看到Java程序堆中现在有哪些对象,有哪些对象数目一直在递增而没有被回收。为此需要借助工具来排查了,visualVM是非常好的能满足需求的一个工具。点击Classes, 发现char[]所占用的内存是最大的双击它,得到如下...转载 2018-12-06 17:57:51 · 969 阅读 · 0 评论 -
JAVA类加载器跟Tomcat加载器的关系
转自:https://blog.youkuaiyun.com/fuzhongmin05/article/details/57404890Java类加载机制类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 ...转载 2018-11-19 15:29:17 · 482 阅读 · 1 评论 -
Java visual的使用
Java visual是用来监控JVM的程序资源使用情况的它分本地和远程1.本地不需要做任何配置,只要在你本地跑的程序,它就会自动监控到2.远程是需要在所在服务器做一些配置,这样Java visual才可以连接到对应的服务器比如说我现在要监控tomcat的运行,则我会在tomcat/bin的catalina.sh做一下配置JAVA_OPTS='-Dcom.sun.manage...转载 2018-10-24 18:02:23 · 1123 阅读 · 0 评论 -
TPS(Transactions Per Second)和QPS(Queries Per Second)和系统吞吐量,并发量的概念
转自:https://blog.youkuaiyun.com/cainiao_user/article/details/77146049 我们在日常工作中经常会听到QPS/TPS这些名词,也会经常被别人问起说你的系统吞吐量有多大。这个问题从业务上来讲,可以理解为应用系统每秒钟最大能接受的用户访问量。或者每秒钟最大能处理的请求数; QPS: 每秒钟处理完请求的次数;注意这里是处理完。具体是指发出请求到...转载 2018-10-24 17:09:43 · 2253 阅读 · 0 评论 -
跨域
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。所谓同源是指,域名,协议,端口均相同怎么解决跨域问题? CORS 这是现代浏览器支持跨域资源请求的一种方式。 当你使用XMLHttpRequest发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果...转载 2018-10-16 18:01:13 · 202 阅读 · 0 评论 -
锁的优化
以下大部分内容转自 http://blog.youkuaiyun.com/u010425776/article/details/58598307 自旋锁背景:互斥同步对性能最大的影响是阻塞,挂起和恢复线程都需要转入内核态中完成;并且通常情况下,共享数据的锁定状态只持续很短的一段时间,为了这很短的一段时间进行上下文切换并不值得。 原理:当一条线程需要请求一把已经被占用...转载 2018-10-16 18:01:01 · 164 阅读 · 0 评论 -
HashTable原理
转自:https://blog.youkuaiyun.com/dianzijinglin/article/details/80997935和HashMap一样,HashTable也是数组+链表的组合,很像,只不过HashTable是线程安全的,它的每个方法都加了Synchronized它跟HashMap的不同null不同:HashMap可以允许存在一个为null的key和任意个为null的valu...转载 2018-09-24 14:09:27 · 583 阅读 · 0 评论 -
Spring那些标签
1.@RestController作用 : @Controller+@ResponseBody的作用 2.@Controller作用 : 注解这个bean是MVC模型中的一个C 会被spring的auto-scan扫到纳入管理 3.@ResponseBody作用: 将Controller的方法返回的对象通过适当的转换器转换为指定的格式后,写入到response对象的bo...原创 2018-09-20 15:12:22 · 2659 阅读 · 0 评论 -
Java的常量池
ava中的常量池,实际上分为两种形态:静态常量池和运行时常量池。 所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。 而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中转载 2017-10-14 16:22:47 · 268 阅读 · 0 评论 -
操作数栈
每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。对于执行引擎来说,活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧所关联的方法称为当前方法。执行引擎所运行的所有字节码指令都只针对当前栈帧进行操作。操作数栈 Java虚拟机的解释执行引擎被称为"基于栈的执行引擎",其中所指的栈就是指-操作数栈。 操作数栈也常被称转载 2017-10-14 14:02:49 · 1853 阅读 · 0 评论 -
Java内存模型
以下内容转自 http://blog.youkuaiyun.com/u010425776/article/details/51170118Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区。下面对这五个区域展开深入的介绍。 1. 程序计数器1.1. ...转载 2017-10-30 16:47:38 · 218 阅读 · 0 评论 -
java中的移位运算符:<<,>>
>> : 右移运算符,num >> 1,相当于num除以2 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方(右移同理)转载 2017-08-27 00:27:53 · 801 阅读 · 0 评论 -
equals和hashcode的关系
从HashMap的原理这篇笔记我们知道元素在数组存放位置的计算公式是hashCode%length,假如有两个元素经过这个公式计算出来的结果是一样的话,则它们都会存放在这个位置的链表里。关于equals和hashcode的关系是这样的。 HashCode相等的,equals不一定相等。 equals相等的,HashCode一定相等。 综原创 2017-04-16 15:40:27 · 286 阅读 · 0 评论 -
Java中的字符串连接符(+)
以下内容大部分出自 http://www.jianshu.com/p/849f1d443b3aldc:Push item from run-time constant pool,从常量池中加载指定项的引用到栈(第二列#+序数对应常量池中的项)astore_:Store reference into local variable,将引用赋值给第n个局部变量转载 2017-05-14 15:02:31 · 5752 阅读 · 0 评论 -
读扩散和写扩散的理解
今天看一篇文章时,提到了微信的群聊是写扩散的,第一次接触到写扩散这个名词,于是去查了下资料,有写扩散就有读扩散嘛定义如下: 根据上面的定义,我是这样理解的,什么是写扩散,什么是读扩散,要怎么区分他们,区别之处就在于“主动”写扩散是主动把消息写到订阅者的消息列表里,这样订阅者就不用去我的outbox拉取消息 ,所以当我要是有很多订阅者时,我就要写很多次,这就是上面定义中说的写原创 2017-05-19 17:51:11 · 22175 阅读 · 0 评论 -
HashMap实现原理
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。...转载 2017-04-16 08:40:21 · 361 阅读 · 0 评论 -
java反射机制的原理
JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:1)Bootstrap ClassLoader负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类2)Extension ClassLoader负责加载java平台中扩展功能的一些jar转载 2017-06-18 12:25:25 · 358 阅读 · 0 评论 -
HashSet的数据结构跟作用
转自:https://www.cnblogs.com/runwulingsheng/p/5208762.html(1) 为啥要用HahSet? 假如我们现在想要在一大堆数据中查找X数据。LinkedList的数据结构就不说了,查找效率低的可怕。ArrayList哪,如果我们不知道X的位置序号,还是一样要全部遍历一次直到查到结果,效率一样可怕。HashSet天生就是为了提高查找效率的。...转载 2018-09-24 15:36:54 · 1018 阅读 · 0 评论 -
java的四种引用
java对象的引用包括 强引用,软引用,弱引用,虚引用Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。下面来阐述一下这四种类型引用的概念:1.强引用 是指创建一个对象并把这个对象赋给一个引用变量。比如:Object object =new Object();String st...转载 2018-09-24 15:44:24 · 147 阅读 · 0 评论 -
Gradle构建项目
gradle项目的优势吧1:语法简单,集成了ant和maven的很多优点,简单的语法和完善的文档造就了其不可估计的前途2:构建容易,一个build.gradle文件,一行指令,即可构建你的项目3:方便导入依赖库在项目所在目录新建一份build.grade,输入 apply plugin: 'java' apply plugin: ...转载 2018-09-20 15:13:13 · 238 阅读 · 0 评论 -
(转)@PostConstruct和@PreDestroy解释
从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion);@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法 。写法有如下两种方式:@PostConstructPublic void someMethod() {} ...转载 2018-10-15 18:28:03 · 186 阅读 · 0 评论