自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员小潘

专注于Java后端技术分享!

  • 博客(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

原创 AQS源码导读

我想挑战一下我的软肋:AQS源码导读。

2020-11-20 20:51:25 9491 5

原创 长度一百万的数组,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

HashMap.java

JDK7的HashMap源码阅读,几乎给每个方法和属性都加上了中文注释。 可以帮助大家更好的阅读源码,可能有理解不对的地方,望指正。

2019-12-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除