
java相关
文章平均质量分 87
竹下星空
这个作者很懒,什么都没留下…
展开
-
零拷贝、MMAP、堆外内存
原理:是一种内存映射文件的方法, 可以将一个文件或者其他对象映射到进程的虚拟地址空间,实现文件磁盘地址和进程虚拟地址空间中某一段地址的一一对应,这样应用程序就可以通过访问进程虚拟内存地址直接访问文件,进而达到操作文件的目的,这样就不用拷贝数据到用户态后再操作了。第三次数据拷贝:用户进程调用send()方法期望将数据发送到网络中,此时用户态会再次切换到内核态,请求的数据从用户态缓冲区被拷贝到Socket缓冲区。第二次数据拷贝:请求的数据从内核态缓冲区拷贝到用户态缓冲区,然后返回给用户进程。原创 2022-09-13 14:51:52 · 734 阅读 · 1 评论 -
CopyOnWriteArrayList解析
CopyOnWriteArrayList是ArrayList多线程安全的一种实现,底层都是用数组来实现,但CopyOnWriteArrayList在add,remove,set等修改操作使用lock来保证修改的线程安全。但是读操作和集合的遍历并没有使用锁,可能会存在读写不一致的情况。原创 2022-09-12 12:07:34 · 338 阅读 · 0 评论 -
hashmap
1.为什么用(h = key.hashCode()) ^ (h >>> 16)算hash?这要从数组下标位置的确定来考虑:tab[i = (n - 1) & hash],数组下标的确定是数组长度-1然后&元素的hash值。1.1(n - 1) & hash为什么能保证数组下标不能越界呢?这就跟hashMap容量有关,hashMap巧妙的利用了2的幂方来作为容量,默认情况下初始容量为16,之后扩容是旧容量的2倍。我们以16为例:16-1 =15,写成二进制:11原创 2020-09-02 11:03:04 · 206 阅读 · 0 评论 -
queue体系
阻塞queue:LinkedBlockingQueue:使用单链表储存元素,默认情况下无界,但也可以规定队列大小,底层主要通过reentrantLock和atomicInteger来保证线程安全,用condition的await 和signal实现阻塞。这里put和take使用了不同的锁,这样在高并发情况下会有更好的性能,这里需要注意一下的是await和signal都需要在上锁的情况下执行,因为await方法主要做了两个事情:一个是用单链表储存需要await的线程,线程设置成park状态。另一个是释放所有原创 2020-09-01 10:29:09 · 237 阅读 · 0 评论 -
list体系
arrayList新增:删除:主要是通过equal方法找到对应对象在数组中index,然后通过arraycopy方法跳过需要删除的元素,再把数组最后一个元素设置成null。Vector1.在ArrayList的基础上用synchronized保证了方法的线程安全。2.增加了自定义扩容因子,可以根据自己喜好扩容,默认是原容量的2倍3.默认构造器就会初始化容量为10,而ArrayList是在add时初始化。Stack继承于vector,在vector的基础上实现了先进后出方法,push方法用原创 2020-08-25 20:42:20 · 260 阅读 · 0 评论 -
System.getenv(String name)方法的意义和用法
最近工程里用到String path = System.getenv(“config_path”);这样取路径的方法。记录一下。1.在windows中config_path指的是系统的环境变量。如:此时取出来的path为:D:\work。有了这个路径就可以做一些读取文件的操作了。2.在linux中config_path指的是在/etc/profile文件末尾配置环境变量 export c...原创 2018-10-09 14:43:57 · 8089 阅读 · 0 评论 -
删除文件和文件夹
前置条件:从另外一个电脑传了一些文件过来,但视频文件是不能使用的,所以想批量删除这些视频文件。package lambdaDemo;import java.io.File;import java.io.FilenameFilter;import java.util.ArrayList;import java.util.Arrays;import java.util.List;pu...原创 2018-10-31 15:14:32 · 225 阅读 · 0 评论 -
批量校验一个java bean的字段是否为空,并返回提示
最近项目在写对外接口,对方使用http请求访问,此时接口字段的校验成为一个问题,字段很多,单个校验非常的麻烦,用springmvc自带的注解校验又达不到提示作用,不是很友好,所有写了一个工具类用来批量校验字段。package com.zqsign.app.privatearbitrate.util;import java.beans.PropertyDescriptor;import ja...原创 2019-01-18 17:27:04 · 6182 阅读 · 1 评论 -
利用反射获取声明的变量和field上的注解
/** * * @Title: getFields * @Description: 获取类中声明的field * @param @param cls * @param @return 参数 * @author shidebin * @date 2019年1月22日 * @return Map<String,Field>...原创 2019-01-22 14:19:49 · 4393 阅读 · 0 评论