随笔分类 - java
摘要:Mock Java实现mock有两种方式: servlet的Filter功能 spring的HandlerInterceptor Filter和HandlerInterceptor的区别: 这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的。过滤器和拦截器都属于面向切面编程的具体实现。
阅读全文
摘要:工具一 IDEA工具 IDEA启动项目处,添加一个 Remote工具,服务器启动项目时添加下图选中的这段参数 工具二 Arthas 常用指令 watch , 观察函数调用链 profiler,服务器CPU压力图,压测的时候可用,观察哪些方法有瓶颈,压测图如下
阅读全文
摘要:Java常见的创建线程(线程池)有三个: Executors.newCachedThreadPool();Executors.newFixedThreadPool(10);Executors.newSingleThreadExecutor(); 查源码,都是new 的一个线程池类 ThreadP
阅读全文
摘要:JVM内存的YOUNG区和OLD都是使用G1垃圾收集器,G1收集器内存结构 每个region(区域)的大小 1~32M,是2的幂次方 对象储存: 0.5region <= 对象 <1 region,这个对象会直接存储在 O区,并标记为H区(超大对象区) 对象>1 region,会申请两个H区来存储这
阅读全文
摘要:指令 jps,查看Java进程概述,可用来查看有哪些Java进程,Java程序是否启动 jconsole,图形化查看Java程序的内存,线程,类,GC,bean信息 jstat,主要用来查看Java内存,常用参数 -gcutil、gc jstat -gcutil pid interval,显示的是百
阅读全文
摘要:GCROOT:栈、本地方法栈、方法区 直接或间接引用的,不能被删除,和GCROOT无关的对象可直接删除 垃圾回收算法: 标记-清理: 标记与GCROOT无关的对象,删除; 缺点:会产生内存碎片,如果下次进来的对象和GC掉的对象大小不同,就不会使用该块内存 标记-整理: 标记与GCROOT无关的对象,
阅读全文
摘要:本地方法栈,存放C++的native方法 程序计数器,指向程序当前运行的位置 栈(JVM栈),存放 函数、当前运行时的临时变量,存储的是对象的地址,最终指向堆存储的实际对象;如果一个对象在方法中new出来,并且只在这个方法中使用,这个对象会存放在栈中,当方法结束就会清理掉这个方法栈,减轻了GC的压力
阅读全文
摘要:volatil 可见性,强制刷新主存中的变量到各个CPU的缓存中,使各个CPU中缓存的变量与主存中一致,各个线程所使用的变量一致,读一致性【线程A写变量后刷新到主存中,线程B会刷新自己缓存中的变量=主存中的变量(即线程A写后的变量),如果变量没有用volatile修饰,线程B缓存中的变量不会刷新,即
阅读全文
摘要:java8的流式处理极大的简化了对于集合的操作,实际上不光是集合,包括数组、文件等,只要是可以转换成流,我们都可以借助流式处理,类似于我们写SQL语句一样对其进行操作。java8通过内部迭代来实现对流的处理,一个流式处理可以分为三个部分:转换成流、中间操作、终端操作 关于list.stream().
阅读全文
摘要:Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。 Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。 Optional
阅读全文
摘要:IO 和 NIO 的区别 IO面向流,阻塞IO NIO面向缓冲,非阻塞IO,选择器 可简单认为:IO是面向流的处理,NIO是面向块(缓冲区)的处理 NIO主要有三个核心部分组成: buffer缓冲区(本质是数组) Channel管道 Selector选择器 Java NIO的选择器允许一个单独的线程
阅读全文
摘要:https://mp.weixin.qq.com/s/0_5DLbBhA8MsgVAwXVv_Aw
阅读全文
摘要:concurrentMap线程安全 速度慢 分段锁 不是整体锁,适合用于并发编程,其实就是在要求线程安全的时候用它 hashMap线程不安全 速度快 Hashtable 线程安全,速度最慢 因为是整体的锁,基本被淘汰了 https://my.oschina.net/hosee/blog/639352
阅读全文
摘要:JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage,添加依赖 <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</arti
阅读全文
摘要:读取excel需要先写一个监听器继承 AnalysisEventListener //使用无映射读取数据 @Test public void noModel() throws FileNotFoundException { FileInputStream in=new FileInputStream
阅读全文
摘要:<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>1.1.2-beat1</version> </dependency> 代码 public class WriteExcel
阅读全文
摘要:Java同步工具类 CountDownLatch(闭锁) CyclicBarrier(栅栏) Semaphore(信号量) 为了能够更好控制线程之间的通讯问题 CountDownLatch CountDownLatch是一个同步的辅助类,允许一个或多个线程一直等待,直到其它线程完成它们的操作 它常用
阅读全文
摘要:线程池简介 如果没有使用线程池,会为每个请求都开一个新的线程,虽然理论上是可以的,但是会有缺点: 线程生命周期的开销非常高。每个线程都有自己的生命周期,创建和销毁线程所花费的时间和资源可能比处理客户端的任务花费的时间和资源更多,并且还会有某些空闲线程也会占用资源。 程序的稳定性和健壮性会下降,每个请
阅读全文
摘要:造成死锁的原因可以概括成三句话: 当前线程拥有其他线程需要的资源 当前线程等待其他线程已拥有的资源 都不放弃自己拥有的资源 避免死锁可以概括成三种方法: 固定加锁的顺序(针对锁顺序死锁) 开放调用(针对对象之间协作造成的死锁) 使用定时锁-->tryLock() 如果等待获取锁时间超时,则抛出异常而
阅读全文
摘要:Lock显式锁是一个接口 Lock方式来获取锁支持中断、超时不获取、是非阻塞的 提高了语义化,哪里加锁,哪里解锁都得写出来 Lock显式锁可以给我们带来很好的灵活性,但同时我们必须手动释放锁 支持Condition条件对象 允许多个读线程同时访问共享资源 Synchronized锁经过优化之后,现在
阅读全文