自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (1)
  • 收藏
  • 关注

原创 面试官:可重入锁(ReentrantLock)是轻量级锁(lightweight/thin lock)吗?

引言我们都知道高效并发是从JDK5升级到JDK6后一项重要的改进型,HotSpot虚拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight/Thin Locking)、偏向锁(Biased Locking)等等,这些技术...

2020-04-06 23:50:36 4315 4

原创 Java GC机制小结之CMS触发条件

CMS GC是Mostly Concurrent收集器,全称为Concurrent Mark Sweep GC,是一种以获取最短停顿时间为目标的收集器。CMS的设计初衷和目的是为了消除Parallel GC和Serial Old GC在Full GC时长时间的停顿,从名字(Mark Sweep)上就可以看出,CMS GC是基于标记-清除算法实现,这也导致服务长时间运行会有严重的内存碎片化问题。另外...

2020-03-25 01:24:10 1834

原创 Java GC机制小结

毫无疑问,目前GC(垃圾回收)已经成为现代编程语言的标配。网上有关于各类JDK GC原理、优化的文章至少上万篇,但质量参差不齐,其中理解有误的文字以讹传讹,遍布各地。不仅仅是一些个人开发者的文章,甚至一些大厂的官方博客也有错误。本文只是在他们之中再增加一篇,仅供大家参考,欢迎批评指正。GC中的一些概念Java GC文章中常会见到一些和GC算法相关的概念,总结一些常见名词如下:mutator...

2020-03-18 16:02:34 311

原创 最大子数列问题之Kadane算法

最大子数列问题的目标是在数列的一维方向找到一个连续的子数列,使该子数列的和最大。例如,对一个数列[-2, 1, -3, 4, -1, 2, 1, -5, 4],其中连续子数列中和最大的是[4, -1, 2, 1],其和为6。该问题最初是由Ulf Grenander教授在1977年提出的,直到1984年才由Jay Kadane提出了该问题的线性算法,该算法虽然长度很短,但其实并不容易理解。Kada...

2020-03-10 13:55:52 372

原创 七周七语言之Ruby 第一天自习

找 Ruby API文档 Programming Ruby: The Pragmatic Programmer’s Guide [TFH08]的免费在线版本 替换字符串某一部分的方法 有关Ruby正则表达式的资料 有关Ruby区间(range)的资料做 打印字符串"Hello, world." 在字符串"Hello, Ruby."中,找出"Ruby."所在下标。 打印你的名...

2019-07-22 00:08:18 171

原创 关于XSS的一点理解

什么是XSS攻击XSS,缩写自Cross-Site Scripting,即跨站脚本攻击,是一种注入型攻击方法,也就是攻击者把恶意脚本注入到良性和可信任的网站中。XSS攻击者通常会利用Web应用(通常在浏览器端脚本的form中)发送恶意代码给其他的Web应用用户。XSS的攻击原理就是攻击者使用XSS发送一些恶意的脚本代码给一些未防备的用户,这些用户的浏览器没办法分辨出这些脚本是否应该被信任,并且会...

2019-06-10 23:15:07 339

原创 LockSupport的一点理解

类LockSupport是用于创建锁和其他同步类的基本线程阻塞原语。JDK中大量的线程阻塞和唤醒都是使用LockSupport来实现的。每个使用LockSupport的线程都会关联一个许可证(permit)。如果某个线程持有许可证,则该线程调用park方法会立即返回,并且消费掉这个许可证;否则该线程会被阻塞。调用unpark方法会让对应的线程拥有许可证(注意:许可证不会被累加,每个线程最多持有一...

2019-02-02 22:42:31 307

原创 线程池ThreadPoolExecutor实现原理分析

前言线程池是并发中一项常用的优化方法,通过对线程的复用,减少线程的创建,降低资源消耗,提高程序响应速度。在Java中我们一般通过Executors提供的工厂方法来创建线程池,但是线程池的最终实现类是ThreadPoolExecutor,下面我们详细分析一下ThreadPoolExecutor的实现。基本使用...

2019-01-30 14:14:45 474

原创 Java并发编程之AQS的理解

关于AQS的博客和文章网上已经有很多了,而且很多文章都写的不错。但是大多数文章都只是记录了针对Lock的情况下,AQS使用同步队列来存储等待的线程,却并没有指明AQS中还有针对condition的等待队列。同时也为了记录自己的想法,加深印象,因此还是决定写一篇博客。AQS全称AbstractQueuedSynchronizer,是Java中基于队列(FIFO,即First In First Ou...

2019-01-06 21:51:58 446 1

原创 关于一致性哈希的一点理解

一致性哈希是分布式哈希表(DHT)其中一种实现,如读者还不是很了解分布式哈希可以阅读这篇博客在开始介绍一致性哈希概念之前,让我们先来看看...

2018-12-11 23:31:45 430

原创 分布式哈希表与Kademlia算法

在我们总结分布式哈希表之前不妨让我们先来回想一下,什么是哈希?下面是wikipedia的定义:散列(英语:Hashing)是计算机科学中一种对数据的处理方法,通过某种特定的函数/算法(称为散列函数/算法)将要检索的项与用来检索的索引(称为散列,或者散列值)关联起来,生成一种便于搜索的数据结构(称为散列表)。旧译哈希(误以为是人名而采用了音译)。它也常用作一种信息安全的实现方法,由一串数据中经过...

2018-12-07 01:36:48 3076 1

原创 关于跳跃表的一点理解

通过前面的总结,我们知道红黑树是一种存在于内存中,可以保证在最坏的情况下,对红黑树进行例如search,insert,以及delete等基本的动态集合操作的时间复杂度为O(lg n)。但是显而易见,红黑树实现起来比较复杂,尤其是对红黑树进行insert和delete操作。并且在红黑树中进行范围查询时需要对红黑树进行中序遍历,这也是比较复杂的操作。那有没有一种能确保对动态集合search,inser...

2018-12-05 00:25:50 2897 1

原创 关于红黑树的一点理解

本文支队红黑树涉及的概念做一些总结,对于红黑树的插入(红黑树的插入操作分为三种情况),删除(红黑树的删除操作分为四种情况)等比较复杂的操作(插入删除等操作都可以通过变色,左旋,右旋等操作来实现)不做总结,如果感兴趣的话可以参考《算法导论》红黑树是二叉查找树的一种,为了理解红黑树,让我们先来看看二叉查找树。二叉查找树二叉查找树对应的英文名称是Binary Search Tree(BST),是一...

2018-12-02 23:48:57 620

原创 《高性能MySQL》第五章阅读笔记

索引(在MySQL中也叫做键(key))是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键。尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要。在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但是当数据量逐渐增大时,性能则会急剧下降。索引的类型索引有很多种类型,可以为不同的场景提供更好的性能。在MySQL中,索引是在引擎层而不是服务器层实现的。所以,并没...

2018-11-29 16:38:20 426

原创 关于B+树的一点理解

B+树是B树的一个升级版,相对于B树来说B+树更充分的利用了结点的空间,让查询速度更加稳定,其速度完全接近于二分法查找。为什么说B+树查找的效率比B树更高、更稳定呢?让我们先来看看一个m阶的B树具有一些什么特征:根节点至少有两个子节点(即根结点至少要有一个关键字)。每个中间结点都包含k-1个关键字和k个子节点,其中m/2 ≤\leq≤ k ≤\leq≤ m。每一个叶子结点都包含k-1个元素...

2018-11-27 02:14:23 1453

原创 关于B树的一点理解

首先,需要强调的是B树对应的英文名字就是B-Tree(名字中的-其实是连字符),并没有一种B减树。背景目前有许多不同的技术可用来在计算机系统中提供存储能力。例如,硅制的存储芯片,速度比较快,但是却造价相对昂贵,且失电后存储内容丢失;磁存储技术造价相对比较低,失电后不会丢失存储内容,但是却速度慢。为了在容量,速度及成本三者上取得一个平衡,目前大多数的计算机都采用了多级存储体系。即使用硅制的存储芯...

2018-11-26 03:36:37 1386

原创 事务及事务ACID特性的理解

事务及事务ACID特性的理解首先,我们需要弄清楚为什么会出现事务。事务从本质上来说是为了应用层服务的。也就是说是为了方便业务系统的开发,简化业务系统的编程模型,事务并不是伴随着数据库系统天生就有的。事务需要具有原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability),也就是常说的事务的ACID四大特性。原子性(atomicit...

2018-11-20 17:19:06 1151

原创 Mac环境下安装PHP及使用xdebug调试

Mac环境下安装PHP及使用xdebug调试最近在公司里需要写一些PHP脚本,因此又重新看了一下PHP的基础语法.由于本人的使用Mac,因此这里仅以Mac下PHP的安装及使用xdebug调试为例,记录环境搭建步骤.安装PHPMac下home-brew是一个非常优秀便捷的包管理器,推荐大家使用brew进行php及xdebug的安装. 使用brew安装php的命令如下: brew install p

2017-10-26 23:18:12 5445

空空如也

空空如也

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

TA关注的人

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