- 博客(11)
- 资源 (1)
- 收藏
- 关注
原创 告诉你一个将ThreadLocal性能提升三倍的秘密
使用线性探测技术,在哈希冲突比较多的情况下,读写的性能会受到影响。查询时,如果发生哈希冲突,就需要循环访问下一个节点,增加了寻址次数,降低了查询的性能。
2020-11-25 23:05:10 2433
原创 哈希冲突的常见解决方式
在Java中,哈希码代表的是一个对象的特征。它由哈希函数计算而来,设计良好的哈希函数会让不同的对象根据自己不同的特征来生成不同的哈希码。就像人的身份证号一样,根据每个人的特征生成,通过身份证号就可以知道这个人来自哪个区域,出生日期,性别信息等等。
2020-11-24 22:42:33 2771 2
原创 ThreadLocal源码解析
Java并发编程的学习过程中,一定绕不过ThreadLocal,在实际开发中,ThreadLocal的应用场景还是很丰富的:线程间数据的隔离。Session的管理。事务的管理。参数的隐式传递(PageHelper)。Dubbo的RpcContext。为了更好的理解ThreadLocal原理,笔者记录一下源码阅读的过程,错误之处,还望读者指出,不胜感激。源码解析1、threadLocalHashCodeThreadLocal实例会被当做Key存放到Thread的ThreadLocalM
2020-11-23 23:00:09 626 3
原创 长度一百万的数组,get(0)和get(999999)性能有区别吗?
数组和链表,应该算是最基本的数据结构了吧。最近在帮公司招人,这个问题我几乎是必问的,然而还是有很多同学答不上来呀,不禁让人唏嘘感慨,基础知识大家还是要多补补哦!长度一百万的数组,get(0)和get(999999)性能有区别吗?回答这个问题之前,先来看看数组和链表的一个区别,这样再回过头来看答案时,就会很清晰。数组数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各
2020-11-17 23:27:20 872 4
原创 Java后端实现视频分段渐进式播放
大文件的分片上传可以看笔者前面的文章:大文件分片上传前后端实现。这篇文章,主要记录一下,服务端如何将一个大的视频文件做切分,分段响应给客户端,让浏览器可以渐进式的播放。
2020-11-17 22:16:07 13857 42
原创 大文件分片上传前后端实现
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <script src="https://cdn.bootcss
2020-11-17 21:30:54 7487 9
原创 CMS与三色标记算法
文章目录CMS收集器CMS的缺点三色标记算法漏标错标原始快照和增量更新写屏障尾巴CMS(Concurrent Mark Sweep)是一款里程碑式的垃圾收集器,为什么这么说呢?因为在它之前,GC线程和用户线程是无法同时工作的,即使是Parallel Scavenge,也不过是GC时开启多个线程并行回收而已,GC的整个过程依然要暂停用户线程,即Stop The World。这带来的后果就是Java程序运行一段时间就会卡顿一会,降低应用的响应速度,这对于运行在服务端的程序是不能被接收的。GC时为什么要暂停
2020-11-08 16:37:56 14356 15
原创 MySQL悲观锁与乐观锁方案
悲观锁和乐观锁是用来解决并发问题的两种思想,在不同的平台有着各自的实现。例如在Java中,synchronized就可以认为是悲观锁的实现(不严谨,有锁升级的过程,升级到重量级锁才算),Atomic***原子类可以认为是乐观锁的实现。悲观锁具有强烈的独占和排他特性,在整个处理过程中将数据处于锁定状态,一般是通过系统的互斥量来实现。当其他线程想要获取锁时会被阻塞,直到持有锁的线程释放锁。乐观锁对数据的修改和访问持乐观态度,假设不会发生冲突,只有当数据提交更新时才会对数据冲突与否进行检测,如果没有冲突则
2020-11-08 12:37:10 235
原创 SpringMVC是如何做到根据参数名动态绑定参数的?
使用过SpringMVC的同学都知道,当我们需要在Controller层接收客户端的请求参数时,只需要在形参上加@RequestParam注解,SpringMVC就会自动帮我们做参数绑定,如下示例:@GetMapping("test1")public void test1(@RequestParam("name") String name, @RequestParam("age") Integer age) {}客户端请求示例:curl http://127.0.0.1:8080/test1?
2020-11-08 09:32:50 1151 1
原创 Java的自动装箱和拆箱
基本类型和包装类型Java是一种强类型的语言,这就意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本数据类型,且每个基本数据类型都含有对应的包装类型,对应关系如下表:基本类型包装类型byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublebooleanBooleancharCharacter1、为什么要有基本类型?首先,基本类型不是一个Obj
2020-11-04 21:26:54 263 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人