面试
文章平均质量分 95
拾光-铼
这个作者很懒,什么都没留下…
展开
-
HashMap源码解析超详细
HashMap源码解析超详细原创 2023-04-12 15:35:40 · 1620 阅读 · 2 评论 -
并发锁机制之深入理解synchronized(四)
synchronized基础篇Java共享内存模型带来的线程安全问题思考: 两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗? 不确定public class SyncDemo { private static int counter = 0; public static void increment() { counter++; } public static void decrement()原创 2022-01-04 16:36:17 · 579 阅读 · 0 评论 -
并发编程之CPU缓存架构&缓存一致性协议详解(二)
并发编程之CPU缓存架构&缓存一致性协议详解CPU高速缓存(Cache Memory)CPU高速缓存在CPU访问存储设备时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就是局部性原理。多CPU多核缓存架构缓存一致性(Cache coherence)缓存一致性的要求写传播(Write Propagation)事务串行化(Transaction Serialization)一致性机制(Coherence mechanisms)总线仲裁机制总线锁定缓存锁定总线窥探(Bus Snooping原创 2021-12-15 11:02:02 · 466 阅读 · 0 评论 -
并发编程之深入理解JMM和并发三大特性(一)
前提:JMM属于整个Java并发编程中最难的部分也是最重要的部分(JAVA多线程通信模型——共享内存模型),涉及的理论知识比较多,我会从三个维度去分析:JAVA层面JVM层面硬件层面这块如何学?这部分理解并发的三大特性,JMM工作内存和主内存关系,知道多线程之间如何通信的,掌握volatile能保证可见性和有序性,CAS就可以了,后续JVM层面和硬件层面的分析,基础比较薄弱的可以先跳过,从后面的Java锁机制开始学,掌握常用的并发工具类,并发容器之后再来看JMM这块。并发和并行目标都是最原创 2021-11-17 17:07:14 · 245 阅读 · 1 评论 -
Redis-02-缓存设计与性能优化
多级缓存架构缓存设计缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。造成缓存穿透的基本原因有两个:第一, 自身业务代码或者数据出现问题。第二, 一些恶意攻击、 爬虫等造成大量空命中。缓存穿透问题解决方案:缓存空对象String get(String key) { // 从缓存中获取数据 Stri转载 2021-08-23 15:36:30 · 198 阅读 · 1 评论 -
01-Redis核心数据结构和高性能原理
Redis核心数据结构和高性能原理Redis安装核心数据结构以及用法String结构字符串常用操作原子加减应用场景Hash结构Hash常用操作Hash应用场景Hash结构优缺点List结构List常用操作List应用场景Set结构Set常用操作Set运算操作Set应用场景ZSet有序集合结构ZSet常用操作Zset集合操作Zset应用场景Redis的单线程和高性能重要的事说:每一个字都是拾光手敲的,希望你可以一字一字的去阅读和理解拾光在写博客时的思想。希望你有所收获,谢谢!这是第一篇关于redis的文章原创 2021-07-17 16:53:40 · 1503 阅读 · 4 评论 -
02-内存模型深度剖析
内存模型深度剖析JDK体系结构Java语言的跨平台特性JVM整体结构及内存模型元空间的JVM参数有两个:JDK体系结构其实这个图的话,我觉得要讲的东西很多,但是又不知道怎么讲,因为每一个JAVA程序员入门的时候,应该都会看到这个图。首先说一下他们之间的关系吧。JDK>JRE>JVM(>的意思是包含的关系)JDK就是包括我们的java运行环境,还有java的一些api和工具。如果要编写java代码,就得安装JDKJRE就是我们运行java代码的环境JVM就是由c++创建的原创 2021-06-16 22:45:20 · 486 阅读 · 6 评论 -
01-从JDK源码彻底剖析JVM类加载机制
一、类加载运行全过程当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到 JVM。通过Java命令执行代码的大体流程如下:解释一下上图,我们的JAVA程序在启动的时候,首先由java.exe文件启动,底层调用jvm.dll(可以看成是一个JAR包),由c++创建一个JVM,并且会由c++创建一个引导类加载器(BootstrapLoader),然后调用java代码执行Launcher里面的getLauncher方法,会分别去加载扩展类加载器(ExtClassLo原创 2021-06-02 10:03:48 · 232 阅读 · 3 评论 -
JDK源码JVM1 JVM类加载机制与双亲委派机制
JDK源码JVM1 JVM类加载机制与双亲委派机制通过Java命令执行代码的大体流程如下:类加载器和双亲委派机制双亲委派机制为什么要设计双亲委派机制?自定义类加载打破双亲委派机制当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到 JVM。通过Java命令执行代码的大体流程如下:由上图可以看出,首先是由第一部分,在windos系统下,通过jvm.dll创建java虚拟机,并且创建一个引导类加载器(Bootstrap ClassLoad启动类加载器)其中最重原创 2021-02-23 15:12:51 · 310 阅读 · 0 评论