java
文章平均质量分 93
娟宝宝萌萌哒
https://github.com/hanjg
展开
-
单测的思路
单元测试(Unit Testing)是一种软件开发中的测试方法,它的主要目的是确保软件中的最小可测试单元(通常是函数、方法或类)在被单独测试和验证时能够按照预期工作。尽管单元测试有很多优点,如提高代码质量、减少Bug、简化调试过程等,但它也存在一些缺点:增加开发时间:如要求覆盖率到80%甚至90%,或者入参几十个难以构造,单测时间占比可能超过30%。需要维护:随着代码的改变,特别是大规模的重构,单元测试也需要相应地更新和维护,增加开发的负担。原创 2024-02-14 13:59:50 · 1359 阅读 · 0 评论 -
AQS和衍生组件的原理
文章目录AQS原理acquirereleaseReentrantLocklockunlockThreadPoolExecutorAQS原理volatile int变量 state 标识共享资源。如果资源空闲,当前线程锁定资源。其中tryAcquire由子类实现。如果资源被占,在等待队列中阻塞至唤醒。 //获取资源 public final void acquire(int arg) { if (!tryAcquire(arg) &&原创 2021-04-06 00:41:13 · 587 阅读 · 0 评论 -
CMS、G1、ZGC对比
文章目录CMS+ParNewYGCOGCG1特点YGCMixed GCZGC特点过程参考CMS+ParNew一块eden,两块survivor,一块old。YGCParNew。一次stw——复制。eden区和survivor1区活跃对象复制到survivor2,部分survivor1区对象晋升到老年代。开始前。结束后。OGCCMS。两次stw——初始标记、重新标记。老年代直接标记清除,没有复制压缩。开始前。结束后。G1堆被分成多个大小的区域。映射为不连续的eden,原创 2021-03-22 00:03:46 · 2209 阅读 · 0 评论 -
threadlocal原理和内存泄露原因
原因泄漏原因:存在引用Thread->ThreadLocal.ThreadLocalMap->Entry->value。线程池场景下Thread回收复用,value永远无法被gc。参考: static class ThreadLocalMap { static class Entry extends WeakReference<Thr...原创 2020-05-04 16:18:23 · 484 阅读 · 0 评论 -
java语言基础
面向对象和面向过程的区别java的四个基本特性抽象封装:继承:多态:重载和重写的区别构造函数访问控制符的区别Static关键字final关键字String,StringBuffer,StringBuilder的区别可变性线程安全性性能equals()和==的区别hashCode和equals的关系如何重写抽象类和接口的区别设计理念语法............原创 2017-11-08 11:07:07 · 1922 阅读 · 0 评论 -
java类加载机制
类生命周期类加载时机主动引用被动引用类加载过程加载验证准备解析初始化类加载器双亲委派模型3种系统提供的类加载器委派行为委派模型的破坏线程上下文类加载器OSGI热部署自定义类加载器类生命周期java中,类型的加载、连接、初始化都是在程序运行期完成,而不是在编译期完成。类的生命周期,包括7个阶段。为了支持动态绑定(根.........原创 2018-05-29 23:51:33 · 1871 阅读 · 0 评论 -
JVM垃圾收集和内存分配
对象存活判断算法引用强度回收判断回收方法区垃圾收集算法标记-清除复制标记-整理分代收集HotSpot实现判断存活和垃圾回收枚举根节点安全点安全区域垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器CMS收集器G1收集器垃圾收集器参数内存分配......原创 2018-05-26 16:01:11 · 223 阅读 · 0 评论 -
JVM内存模型和内存溢出
运行时数据区域程序计数器虚拟机栈本地方法栈堆方法区运行时常量池直接内存对象的创建、布局、访问创建布局访问OutOfMemoryError异常运行时数据区域分为线程共享和线程隔离的区域。程序计数器可看做当前线程所执行的字节码的行号指示器。 线程执行java方法时:虚拟机字节码指令的地址。线程执行native方法时:空......原创 2018-05-25 22:26:10 · 440 阅读 · 0 评论 -
jdk和cglib动态代理
文章目录静态代理和动态代理动态代理原理jdkcglib静态代理和动态代理静态代理:代理类在编译期已经存在在.class文件中。动态代理:程序运行时,通过反射机制动态创建而成。如果需要为不同的主题类提供代理,需要一一增加代理类,导致类个数急剧增加,所以需要在运行时创建动态代理。动态代理原理jdk动态代理需要主题类实现接口,使用替换借口实现类为代理类的方式代理主题类。如果主题类没有实现接口,则需要使用cglib动态代理。cglib使用继承实现代理,针对指定的类创建一个子类,覆盖其中的方法实原创 2018-05-10 12:26:47 · 313 阅读 · 0 评论 -
jdk1.8中的hashmap实现原理和源码分析
简介内部结构常用方法putgetremove内部方法hashresize相似数据结构继承关系介绍参考简介HashMap可以根据键值存取数据。HashMap位于 java.util 包下,继承AbsractMap,实现Map,Cloneable,Serializable接口。public class HashMap<......原创 2018-05-01 23:03:17 · 314 阅读 · 0 评论 -
分布式id的生成方式
数据库自增主键例如mysql中 AUTO_INCREMENT 标识的列。优点: 无需程序操作,数据库自动生成。缺点: 分库分表之后id很可能重复。数据备份恢复,id会改变。时间+随机数使用精确到毫秒级的系统时间,拼接上随机数作为id。优点: 实现简单。缺点: 有小概率会产生id的重复。UUID通过jdk生成的全局唯一id。优点: 不会重复...转载 2018-04-23 16:32:48 · 237 阅读 · 0 评论 -
linux下的jdk安装
环境ubuntu14下安装java8。步骤下载安装包,注意操作系统类型和位数,地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html切换为root。sudo su创建java安装目录。mkdir /usr/java将下载的压缩...原创 2018-04-11 17:32:13 · 224 阅读 · 0 评论 -
接口的默认方法和静态方法
默认方法和静态方法对比抽象类默认方法和静态方法JDK8 以后接口可以有方法体。 默认方法 default : 可以通过实现接口的类实例化的对象来调用,也可以被重写。是Public的。静态方法 static : 只能在本接口中调用,职责上是工具方法。public interface In { int get(); static i...原创 2018-02-23 18:11:15 · 4278 阅读 · 0 评论