java
文章平均质量分 69
眉头
chase
展开
-
Class文件的加载过程和类加载器的原理
Class 文件是怎样被放在内存的硬盘中的Class被加载的过程1、loading把一个class 加载到内存,懒加载,需要的时候再加载2、linking(1)、verification校验class,是否满足class的格式(2)、preparation把class中静态变量设置成默认值 int类型 0(3)、resolution解析 loadeClass方法中的第二个参数 true 为解析 false 不解析class中常量池用到的符号引用转换成可以直接访问内存的值(直接能原创 2021-07-02 11:04:52 · 606 阅读 · 0 评论 -
认识Class文件
概念Class文件是一组以8字节为基础单位的二进制流,各个数据项目严格的按照顺序紧凑地排列在文件之中,中间没有添加任何分割符,这使得整个Class文件存储的内容几乎全部是程序运行的必要数据,没有空隙存在。《Java虚拟机规范》规定了Class文件格式采用一种类似C语言结构体的伪结构来存储数据,这种伪结构只包含两种数据类型,即无符号数和表。class文件通过固定的数据结构排列顺序并且每种数据结构指定了占用的字节长度来紧凑的在组成了完整的可读文件,jvm只需要从文件开始的地方一步一步的读取能够完全的解析出原创 2021-06-29 11:27:16 · 665 阅读 · 0 评论 -
【30+】JAVA容器汇总(原理+使用)——List、Set、Deque、BlockingQueue、Map (部分源码)
文章目录Collection 接口List 接口ArrayListLinkedListVectorStackCopyOnWriteListSet 接口HashSetLinkedHashSetSortedSetTreeSetEnumSetCopyOnWriteArraySetConcurrentSkipListSetQueueDequeArrayDequeBlockingDequeLinkedBlockingDequeBlockingQueueArrayBlockingQueuePriorityBlockin原创 2021-03-11 19:46:11 · 1179 阅读 · 1 评论 -
Java常用JUC并发包的简单使用 和 AQS原理分析
发原创 2020-09-20 19:24:15 · 1341 阅读 · 0 评论 -
CAS (CompareAndSwap) 底层基本原理分析和 ABA问题
CAS锁机制CompareAndSwap,是一条CPU并发原语作用是进行计算的时候判断当前值是否满足预期,如果满足则更新为新值,保证整个过程具备原子性。原理分析:JDK中为了方便开发正操作,已经实现了很多原子性操作的类,这些类底层就是通过CAS控制原子操作的,比如AtomicIntegerpublic class Test { public static void main(String[] args) { AtomicInteger test = new AtomicIn原创 2020-09-07 16:07:43 · 1461 阅读 · 0 评论 -
Synchronized和Volatile底层知识、内存屏障相关内容
SynchronizedHotSpot 的 synchronized// 二进制 字节码相关说明synchronized(Object o) 锁对象:表示当线程拿到了一把锁o的时候才可以执行synchronized块或者synchronized方法中的代码逻辑,并不是锁了synchronized包裹的代码。在一个对象中是通过Object 对象头的在JDK1.6之前Synchronized只有传统的锁机制,1.6之后对其进行了优化升级(锁升级)锁升级:jdk1.6之后引入了偏向所和轻量级锁的原创 2020-08-31 13:48:13 · 1285 阅读 · 0 评论 -
开发需要知道的CPU底层知识学习记录
CPU的作用: 取指令,取数据,做运算,然后将运算结果写入内存,线程是CPU执行的最小单元CPU的主要组成:指令计数器PC: 作用:保存下一跳指令的地址,CPU在运行的时候会根据指令寄存器中保存的地址从内存中获取数据,获取完后回保存到CPU的寄存器中。寄存器 Registers:作用:用来保存从内存中读取过来的数据运算单元ALU:作用:根据根据寄存器中保存的数据做运算,算完后再写入到内存中缓存 Cache:作用:用来缓存内存中的数据,避免直接从内存中获取,提升CPU的运算周期效率。原创 2020-08-10 23:55:44 · 1245 阅读 · 0 评论 -
HashMap源码(七) —— 红黑树删除原理分析 动态图解析!!!
红黑书的删除本质上是一个穷举的过程删除情况说明删除的节点没有子节点的情况a) 如果为红色,直接删除即可,不会影响黑色节点的数量b) 如果为黑色,删除的时候需要进行平衡操作删除的节点只有一个子节点时,删除节点只能是黑色,子节点也只能是红色。否则无法满足红黑树黑色节点完全平衡的特性(从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点)如果删除节点有两个子节点时,使用后继节点作为替换的删除节点,然后再按照前面两种情况处理删除情况具体分析1. 删除的节点没有子节点(非null节点)的情原创 2020-06-03 11:21:41 · 2251 阅读 · 7 评论 -
HashMap源码(六) —— 扩容 resize(),和获取 get()
sdf原创 2020-06-01 18:21:22 · 1293 阅读 · 0 评论 -
HashMap源码(五) —— 底层红黑树原理解析 (新增、删除)动图分析!!!
满足红黑书结构原则:1、每个节点只能是红色或者黑色2、根节点都是黑色3、不可能有连在一起的红色节点4、每个红色节点的两个字节点都是黑色,原创 2020-06-01 18:20:17 · 2469 阅读 · 0 评论 -
HashMap源码(四) —— hashMap 之 put方法详解
//入口方法public V put(K key, V value) { return putVal(hash(key), key, value, false, true);}入口方法中只调用了一个putVal方法,在调用这个方法之前,调用了hash(key)这个方法,具体源码如下:/**说明,当key为null时返回的hash值为0,是固定的,也说明了hashmap中允许且只有一个为null的key 而在hashTable中,不允许有null的key存在,所以没有key==原创 2020-05-28 19:38:49 · 1090 阅读 · 0 评论 -
HashMap源码(三) —— 成员变量解释和构造方法细节分析
HashMap数组容量,默认是16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; HashMap最大容量:230static final int MAXIMUM_CAPACITY = 1 << 30;负载因子,也叫加载因子static final float DEFAULT_LOAD_FACTOR = 0.75f;作用:影响着hashMap扩容的因素如:默认容量是16,保存的容量超过 16*0.5..原创 2020-05-27 18:40:09 · 1027 阅读 · 0 评论 -
HashMap源码(二) —— 成员变量 DEFAULT_INITIAL_CAPACITY 为什么是2的n次方???
// 默认容量 16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //16为什么必须是2的n次幂 因为只有是2n,才可以通过 hash & (leng-1) 计算出的索引尽可能保证数据分布均匀. 如果不是2的n次幂,计算出的索引特别容易相同,很容易发生hash碰撞,导致其余数组空间很大程度上没有存储数据,链表或者红黑树过长,效率较低. 说明:为什么是2的n次方?2n的二进制是一个首位是1 后面为是0的数,如 23原创 2020-05-27 13:31:05 · 2403 阅读 · 0 评论 -
HashMap源码(一) —— 数据结构、put存储过程介绍
HashMap 数据结构Jdk1.8之前:数组+链表Jdk 1.8之后 数组+链表+红黑书链表长度大于8后并且数组长度 大于64 链表结构转化成红黑树结构put方法图解HashMap map = new HashMap<>() 的执行过程jdk8之前: 构造方法中创建了一个长度是16的Entry[] table 用来存储键值对数据。jdk8之后: 不在构造方法中创建,在第一次put方法时创建的 Node[] table 来保存数据。调用put 时保存数据的过程pu原创 2020-05-27 11:25:54 · 1231 阅读 · 1 评论 -
Spring Service层本类中调用另一个事务方法不生效原因
原文链接:https://blog.csdn.net/dapinxiaohuo/article/details/52092447首先调用的是AOP代理对象而不是目标对象,首先执行事务切面,事务切面内部通过TransactionInterceptor环绕增强进行事务的增强,即进入目标方法之前开启事务,退出目标方法时提交/回滚事务...转载 2019-12-24 14:47:04 · 1128 阅读 · 0 评论 -
二进制中模、原码、反码、补码分析和二进制位运算、移位运算
原码、反码、补码、模二进制数 二进制数分为有符号数和无符号数。对于有符号位二进制数,最高位表示正负数,最高位1表示负数,最高位是0则表示正数。如一个8位的有符号位二进制数 1000 0001 最高是1则表示一个负数(-1) ,如果1000 0001 是无符号位,换算成十进制数是129.模 指一个计量系统的计数范围,可以简单理解成一个范围,超出这个范围后回到原点,即一个轮回。模实质上是计量...原创 2019-10-29 19:37:02 · 4408 阅读 · 0 评论 -
Java JDK序列化 (Serializable和Externalizable)
概念:序列化:将结构对象转为字节序列的过程。反序列化:将字节序列恢复为结构u对象的过程。为什么要序列化:简单的说序列化是用来通信的,为了跨进程传递格式化数据(byte流)。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。这样客户...原创 2019-10-14 14:47:20 · 1244 阅读 · 0 评论 -
Maven 将Jar包文件打包到Maven库中
mvn命令:mvn install:install-file -Dfile=sms.jar -DgroupId=com.test.sms -DartifactId=sms -Dversion=1.0.0 -Dpackaging=jar-Dfile=sms.jar:文件所在路径-DgroupId=com.test.sms:依赖groupId-DartifactId=sms:arti...原创 2019-05-20 14:04:15 · 1860 阅读 · 0 评论 -
springboot 配置外部静态资源访问位置、将所有静态资源分离到项目外部完成伪前后端分离(springboot+thymeleaf)
通过配置将项目中的静态资源和后台代码分离出来,达到伪前后端分离的目的。在springboot中对静态资源访问提供了很好的支持将一个已经成型的小项目中的所有静态资源分离到项目外部如下为项目原来的目录结构默认访问项目是正常的注:在Springboot中默认的静态资源路径有:classpath:/META-INF/resources/,classpath:/resources/,class...原创 2019-08-23 17:43:08 · 4439 阅读 · 2 评论 -
Python闭包、Java闭包、JS闭包学习
闭包概念——摘自百度百科 闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。 闭包包含自由(未绑定到特定对象)变量,这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两...原创 2019-10-11 11:20:41 · 1281 阅读 · 0 评论 -
java 微信公众号支付demo 微信企业支付到个人用户、微信公众号企业付款到个人零钱,微信提现到零钱
微信提现到零钱(微信内部交易,不需要手续费)价格格式错误:可能是价格经过计算后.doubleValue了一下 最后价格是 200.00 企业付款签名错误:和支付的时候签名的参数有出入(搞了半天,最后到看了一段php代码后做了一下调整。OK了)参考PHP博客:http://blog.csdn.net/sinat_35861727/article/details/72843383Map<S...原创 2018-02-08 10:00:56 · 4232 阅读 · 2 评论 -
IDEA maven命令报错:打包程序包com.sun.istack.internal不存在
错误信息:错误原因:因使用到 @NotNull注解导致,引入相应的包即可解决方案:pom文件中加入如下配置&amp;amp;amp;amp;lt;build&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;plugins&amp;amp;amp;amp;gt; &amp;amp;amp;amp;lt;plugin&amp;原创 2019-03-12 11:08:40 · 11556 阅读 · 0 评论 -
JAVA 线程 Synchronized Volatile
概念线程:程序执行流的最小单元。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备...原创 2019-03-27 15:20:46 · 826 阅读 · 0 评论 -
java 代码优化,redis优化 (记录)
JSON对象解析的过程中要尽量避免多次解析的情况;如非必要,要尽量减少JSON对象的反复解析。使用Redis或数据库查询时,如果是上下文有逻辑关系的代码,尽量避免反复使用同一查询,其原则是:能少查一次就少查一次。查询结果建议都要进行一定的非空或其它异常判断等等。在进行业务逻辑的计算和IO读写操作时,建议分别使用不同的线程。例如:业务逻辑的计算可以使用CPU密集型线程池;而IO操作可以使用IO型线程...原创 2018-04-10 14:18:54 · 1539 阅读 · 0 评论 -
java 微信公众号支付,微信提现到银行卡,微信企业付款到银行卡demo
java 微信公众号支付,微信公众号提现到银行卡,企业付款到银行卡demo开发文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1#开通条件: 1、商户号已入驻90日 2、商户号有30天连续正常交易 3、 登录微信支付商户平台-产品中心,开通企业付款。开始之前认真看一遍开发文档还是很有用的。1、 调用...原创 2018-03-06 16:57:36 · 6291 阅读 · 1 评论 -
play framework 2.6 定时任务,异步调度任务的简单使用
1、创建并启用模块public class ZTasksModule extends AbstractModule{ @Override protected void configure() { bind(CompositeImageTask.class).asEagerSingleton();//绑定CompositeImageTask任务 }2、然后在...原创 2018-03-09 18:17:57 · 2538 阅读 · 0 评论 -
java中使用sfntly的sfnttool.jar 抽取指定中文字符串ttf文件,简化、裁剪ttf字体库文件大小,java缩小中文ttf字体库文件大小
1、sfnttool.jar 下载地址: 点击打开链接2、(终端)生成命令 java -jar sfnttool.jar文件路径 -s '字体内容' 原始ttf文件路径 裁剪后ttf文件路径 注:字体内容 单引号表示不允许有空格字符 双引号表示可以有空格字符3、java代码生成String content = fontUtil.getContent();content = co...原创 2018-02-27 18:39:54 · 5994 阅读 · 0 评论 -
java 中 FTP 和 SFTP 的简单使用
FTP和SFTP的区别和工作原理:很详细:http://blog.csdn.net/cuker919/article/details/6403925可以根据自己的实际情况选择使用FTP或者SFTP,使用FTP时要安装FTP,而SFTP不需要安装。效率:FTP>SFTP安全:SFTP>FTP这儿只是比较SFTP 读取image和URL读取image效率:适用文件服务和系统服务转载 2018-01-14 21:57:52 · 6463 阅读 · 0 评论 -
java 深拷贝和浅拷贝
浅拷贝:创建一个新对象,会很精确的复制原来对象属性类型或者属性引用地址。如:List list1 = list,List list2 = new ArrayList();list2.addAll(list1)或者list2 = list1.clone();都是通过浅拷贝得到的。但是这样我们在操作拷贝后的文件时,会影响到原来对象。这时候深拷贝就该上场了深拷贝:是将原有转载 2017-12-19 20:44:00 · 880 阅读 · 0 评论 -
Graphics2D 图片合成、图片处理 应注意的细节和踩过的坑
Graphics2D 2d https://docs.oracle.com/javase/8/docs/api/java/awt/Graphics2D.html图片处理首先画布肯定是需要的,可以新建一个空白画布,也可以以图片做画布。BufferedImage bi = new BufferedImage(width,height,type);2d = bi.createGraphics();如果...原创 2017-12-29 11:27:01 · 12626 阅读 · 6 评论 -
java awt生成图片消除锯齿
//抗锯齿Graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//g.drawImage(image, x, y, w,h, null); //利用iamge.getScaledInstance APIg.drawImage(image.getScal原创 2017-12-18 11:31:15 · 2863 阅读 · 0 评论 -
springcloud local forwards 本地转发 简单示例
迁移现有应用程序或API时的常见模式是“扼杀”旧端点,用不同的实现慢慢替换它们。Zuul代理是一个有用的工具,因为您可以使用它来处理来自旧端点的客户端的所有流量,但将一些请求重定向到新端点。 ----------摘抄官方文档zuul yml配置zuul: routes: userserver: /userserver/** #代理user服务path path: /...原创 2018-05-21 15:23:16 · 1431 阅读 · 0 评论 -
springcloud zuul上传文件 zuul GENERAL 错误 The field file exceeds its maximum permitted size of bytes.
springboot 中tomcat对文件的大小做了限制,文档中有说明springboot对properties或yml的配置在不同版本是有差异的。maxFileSize:单个文件最大限制maxRequestSize:单次请求最大限制如果是想要不限制文件上传的大小,那么就把两个值都设置为-1就行啦1、1.4版本之前配置方式: multipart.maxFileSize=2000Mb ...原创 2018-05-21 17:31:48 · 5007 阅读 · 0 评论 -
springboot/springcloud zuul 跨域设置
The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowedResponse to pre flight request doesn not pass access control check:No Access-Control-Allow-Origin heade...原创 2018-06-21 14:22:02 · 1878 阅读 · 0 评论 -
Redis key 乱码问题(springboot)
保存到redis中的key 前半段会出现乱码问题 原来配置:@Configuration@EnableCachingpublic class RedisCacheConfig { @Bean public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) { CacheMa...原创 2019-01-31 16:24:23 · 15033 阅读 · 1 评论 -
java.lang.UnsupportedOperationException 错误记录(Arrays.asList)
使用 Arrays.asList 转换的List调用 add remove方法时会报UnsupportedOperationException 异常List<String> list= Arrays.asList(array);原因:Arrays.asLisvt() 返回java.util.Arrays$ArrayList,而不是ArrayList。两者都...原创 2018-12-17 10:20:43 · 777 阅读 · 0 评论 -
java 员工轮询值班排班 开发设计(mysql+redis)
JAVA 员工轮询 值班 排班1.设计一个值班历史纪录表 duty_employee_history(area_id,dept_id) 联合主键,存放已值班过的数据area_id int(11) NOT NULL 区域dep_id int(11) NOT NULL 部门employee_ids varchar(2000) NOT NULL 已值班过的 ...原创 2018-12-19 20:01:00 · 6927 阅读 · 1 评论 -
设计模式-----适配器模式
设计模式-----单例模式设计模式-----模板方法模式设计模式-----建造者模式 适配器模式:可以理解为两个不兼容接口之间转换的桥梁,可以理解为转换器。举个例子: 现在常用的充电器接口 有 USB 和 Type C 两种。现在要给USB 接口手机充电,但是只有TypeC接口的充电线。如果要给手机通过TypeC 充电线充电,得需要一个TypeC转Usb接口的转换器。...原创 2018-08-26 22:41:25 · 785 阅读 · 0 评论 -
数据结构-----排序算法
选择排序 将要排序的数组分成两部分,一部分是从小到大已经排好序的,一部分是无序的, 从无序的部分取出最小的数值,放到已经排好序的部分的最后。class ChooseSort{ public static void sort(int[] arr){ int t; for(int i=0;i<arr.length;i++){ ...原创 2018-08-16 16:54:14 · 789 阅读 · 0 评论 -
设计模式-----模板方法模式
设计模式-----单例模式设计模式-----适配器模式设计模式-----建造者模式模板方法模式:定义:定义一个模板类抽象类,共同特性(非抽象方法)到当前类中实现,其他特性(抽象方法)到对应的子类中实现示例+注释模板方法/* * 抽象基类,为所有子类提供一个算法框架 */// 提供final修饰的模板方法 封装了所有子类共同遵循的算法框架 该方法中主要...原创 2018-08-16 00:13:02 · 769 阅读 · 0 评论