- 博客(13)
- 收藏
- 关注
原创 深入理解JVM之——CMS垃圾收集器的工作原理解析
1、CMS垃圾回收的基本原理一般老年代选用的垃圾收集器是CMS,它采用的是标记清除算法。标记清除算法就是标记出哪些是垃圾对象,然后把这些对象清理掉,标记清除有个最大的问题就是会产生内存碎片。CMS垃圾收集器采取的是垃圾收集线程和系统工作线程尽量同时执行的模式来进行垃圾回收的,这样就能减少Stop the World的时间。CMS进行一次垃圾回收的过程分为4个阶段:1、初始标记2、并发标记...
2020-04-08 12:28:13 3787
原创 数据结构与算法:跳表的实现
我们知道Redis、LevelDB 都是著名的 Key-Value 数据库,Redis中 的 SortedSet以及LevelDB 中的 MemTable 都用到了跳表,那么什么是跳表呢?跳表又是如何实现的呢?1、有序链表说跳表之前,先说说有序链表:一个有序链表搜索、添加、删除的平均时间复杂度是都是O(n)。有序数组的随机访问时间复杂度为O(1),在查询某个特定的元素的时候能够进行二分搜索...
2020-04-04 13:46:16 1007
原创 sysbench压测MySQL数据库
一般情况下,在企业中我们申请了一台数据库服务器,不是直接开发使用,而是先进行压测,这样就能心里有数,这台数据库服务器的负载压力如何,性能表现如何,每秒能抗住多少个请求。1、测试机器2 vCPU 4 GiB (I/O优化) ecs.t6-c1m2.large]2、数据库压测工具sysbench是非常好用的数据库压测工具,这个工具可以自动帮你在数据库里构造出来大量的数据,你想要多少数据,他就自...
2020-03-31 12:41:46 1570
原创 谈谈分布式锁
1、为什么要使用分布式锁使用分布式锁的目的,无外乎就是保证同一时间只有一个客户端可以对共享资源进行操作。根据锁的用途还可以细分为以下两类:允许多个客户端操作共享资源这种情况下,对共享资源的操作一定是幂等性操作,无论你操作多少次都不会出现不同结果。在这里使用锁,无外乎就是为了避免重复操作共享资源从而提高效率。只允许一个客户端操作共享资源这种情况下,对共享资源的操作一般是非幂等性操作。在...
2020-03-29 23:08:43 727 1
原创 写入redis中的数据为什么不见了
我们有时候会遇到这样的事情,当想redis写入一些数据后,再次查询发现数据不见了,这是怎么回事呢?数据明明过期了,怎么还占用着内存?我们知道redis 主要是基于内存来进行高性能、高并发的读写操作的。然而内存是有限的,比如 redis 就只能用 10G,你要是往里面写了 20G 的数据,会咋办?当然会干掉 10G 的数据,然后就保留 10G 的数据了。那干掉哪些数据?保留哪些数据?这就要根据设...
2020-03-29 21:50:37 1974
原创 谈谈系统安全
我们知道多年前微博收到了XSS攻击,用于自动关注了一个病毒用户,然后病毒用户自动发布病毒微博,大量的人点击后,再度扩散,导致曾经很多重要的网站都遭受了攻击,致使成百上千万的用户数据遭泄露。知道现在有事后大家还会听到某某网站、某某APP用户数据泄露的问题。所以系统安全问题一直是一个非常重要的系统架构设计的话题。
2020-03-29 21:21:59 933
原创 JDK1.8中的HashMap源码分析
前面写了JDK1.7中的HashMap源码分析,本篇将对JDK1.8中的HashMap源码进行简单的分析。一、HashMap底层数据结构JDK7:数组+链表JDK8: 数组+链表+红黑树二、HashMap重要属性 /** * 数组默认的初始化容量为16 */ static final int DEFAULT_INITIAL_CAPACITY = 1 <...
2020-03-29 15:34:55 132
原创 并发编程中的CAS
在Java中,锁在鬓发处理中占据了一席之地,但是使用锁有一个不好的地方,就是当一个线程获取不到锁时会被阻塞挂起,这会导致线程上下文的切换和重新调度开销。Java提供了非阻塞的volatile关键字来解决共享变量的可见性问题,这在一定程度上弥补了锁带来的开销问题,但是volatile只能保证共享变量的可见性,不能解决读——改——写等的原子性问题。CAS即Compare and Swap,是JDK提供...
2020-01-22 11:19:49 1641
原创 JDK1.7中的HashMap源码分析
我们以jdk1.7.0_80为例,对其中的HashMap源码进行分析。目录一、源码分析1.1 HashMap重要属性1.2 解析PUT方法1.3 解析resize(扩容)方法1.4 解析GET方法二、问题总结2.1 roundUpToPowerOf2(toSize)方法是怎样实现 找到一个大于等于toSize的2的幂次方数的?2.2 为什么数组初始化容量或者扩容的容量一定是2的幂次方数呢?2....
2020-01-20 17:39:47 351
原创 synchronized 关键字解析
在jdk1.6之前,synchronized是重量级锁,在jdk1.6级以后jvm对锁的实现进行了优化,如使用偏向锁、轻量级锁等技术来减少锁操作的开销。锁主要存在四中状态,依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态,他们会随着竞争的激烈而逐渐升级。
2020-01-04 11:15:49 838
原创 深入理解JAVA线程池
1、 什么是线程池线程池,就是一个池子,任务提交的到线程池后,线程池会在池子里边找有没有空闲的线程,如果没有,就会进入等待状态,有就会分配一个空闲的线程来接受这个任务,当服务执行完,从新放回到线程池,不需要销毁。在这种模式下,系统大大减少了创建线程个销毁线程的资源开销,而且一个线程可以用来执行多个任务,我们可以根据系统的配置灵活调整线程池的大小,从而更高效的执行任务。2、 为什么要用线程池多...
2019-12-26 11:22:26 455
原创 Spring 源码中的扩展点分析
Spring作为开源的框架目前正被互联网行业广泛的使用,在我们在面试的过程中也经常会被问到。这篇博客记录了我在学习spring的IOC容器中遇到的一些琐碎的知识点,并对相关文档进行参考,把它记录下来,巩固和学习,如有错误,欢迎指正。我们经常会被问 什么是spring? 其实很多人都认为spring就是IOC和AOP,其实不然,spring是产品,里面包含很多技术,包括springclou...
2019-12-25 10:21:48 2705 2
原创 记录spring AOP的一些知识
上篇博客我们简单的了解了SpringIOC的一些知识点,接下来让我们再学习一下AOP相关的知识点。一、什么是AOP AOP相对于OOP而言,是面向切面(Aspect Oriented Programming)的,传统的OOP开发中的代码逻辑是至上而下的,在这些至上而下的过程中会产生一些横切性的问题,这些横切性的问题和我们的主业务逻辑关系不大,会散落在代码的各个地方,造成...
2019-02-14 13:36:50 252
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人