- 博客(30)
- 收藏
- 关注

原创 全网最权威!Redis缓存击穿、雪崩、穿透!刷新你的三观!!!
缓存的击穿、穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题。不过,对于这三大缓存的问题,有很多人背过了解决方案,却少有人能把思路给理清的。而且,网络上仍然充斥着,大量错误的解决方案,难免误人子弟。我的这篇文章,会对这三大缓存问题,做一个深入的探讨和分析。以及,对一些常见的错误,进行一个纠正。缓存击穿缓存击穿是什么,大家应该心里都清楚,我只做一个简单通俗的解释:就是某一个热点...
2020-04-20 11:50:24
7167
17

原创 99%的人答不对的并发题(从JVM底层理解线程安全,硬核万字长文)
众所周知,java 是一门可以轻松实现多线程的语言,再加之目前的社会环境和业务需求,对多线程的使用和高并发的场景也越来越多,与之带来的就是并发安全的问题。如何在多线程的环境下写出符合业务需求的代码,是程序员的基本功。而理解 JVM 中的线程特性,则是我们扎实根底的第一步。学习忌浮躁。首先大家要知道一点,JVM 帮我们屏蔽了不同的操作系统的不同特性,来实现一次编写到处运行的特点。所以有个很关键的...
2020-03-12 12:17:25
12136
10
原创 【毁三观系列】缓存雪崩、穿透竟该这么答?| 问题竟会一生二、二生四?| 答案为何如此之多?| 系统这么多地方用了缓存?【全网最权威缓存续集(二)】
其实之前,对于缓存的击穿、雪崩、穿透,其实我已经写过一篇文章来详细阐述了。不过,其中的解决方案,我还是以一个超高并发的角度来思考、理解、以及加以阐释的。可以说,如果对于一些不是特别厉害的面试官的话,缓存击穿的思考及解决,有一些炫技的成分的包含。不过,既然讨论到了缓存问题,涉及到了一个架构的设计思路,所以,还是得综合考虑业务的。脱离业务的架构,绝对不是一个好的架构!...
2020-08-14 14:51:35
671
原创 【阿里面试官的抨击】大厂面试竟该这么答?| 面试竟有这些坑?| 面试该如何准备?| 如何学习知识点?
前段时间,在和程序猿们闲聊的时候,碰巧聊到了一些面试题。于是乎,各路大神就开始大显身手(虽然没我啥事…)当然重点还是,那位阿里的大神,无意间透露出来的面试要点:事情是这样的:在阿里,他们部门的面试官,在准备面试题目,可能很多面试题他们都觉得太简单,太没新意,太没诚意了,这种水平的题目对不起求职者;于是发愤图强,妄图编写出符合阿里身份的,让面试者一见入故,欣喜若狂,七窍流血,熠熠生辉的面试题;所以,就问了下这位仁兄,让他也帮忙想点题目。于是乎,他也就帮忙出了点题。至于有啥题,他也没说——不
2020-08-12 16:41:47
421
原创 零xml配置SpringMVC!内嵌Tomcat带你开辟新的天地!
想必,大多数人都早已经厌倦了繁杂的配置,以及每次都需要一个外部的 Tomcat, 来启动一个还总是乱码的 web 应用程序。而实际上,SpringMVC 也是完全可以做到零 xml 配置就完好运行的,并且也可以不需要外部 Tomcat,而是像 Springboot 那样,内嵌一个 Tomcat,直接打包成 jar 文件,就能直接运行。废话不多说,下面就直接开干!首先,我们都知道 Springboot 是内嵌了一个 Tomcat 的,所以我们就可以看一下 Springboot 是怎么做的:privat
2020-05-20 20:00:21
1334
4
原创 不懂fork和fsync?你怕是学的假Redis持久化机制
熟悉 redis 都知道,redis 持久化有 RDB 和 AOF 两种,一种是记录数据,另一种是记录操作。不过一方面,为了学习的纵向拓深、横向延展,提高思维开阔性和学习态度严谨性,以便足以在实际环境中对这些特性运用自如;另一方面,为了能和面试官有料去喷,我们必须对持久化机制做深入地探讨。RDB 的问题我们先从 RDB 说起。首先,我们都知道,RDB 是对数据的全量复制,我们一般都会在...
2020-05-16 00:11:36
2199
2
原创 99%的人把Spring的自动注入理解错了!(范例→源码证明)
再谈自动注入之前,首先得先明白,什么是依赖注入:官网上的描述有些过于复杂,对于我们来说,简单点理解,就是把一个 bean 作为另一个 bean 的属性填充进去。不过,这么一句简单的话,背后隐藏着许许多多的知识点:首先,怎么注入呢?Spring 又该怎么寻找的注入的对象呢?Spring 又要如何判断,注入的对象,是否是正确的呢?这是最根本的问题,到后文再进行讨论。首先,要弄明白的是...
2020-05-03 18:40:44
699
1
原创 全网最权威:再次打破你对synchronized的认知!!!
这篇文章,我会直接把对象头的信息打印出来给你看!!!其实 synchronized 有关的博客我之前也写过,描述的也还算比较清晰,比较深入。比如这篇:99%的人答不对的并发题还有这篇:当面试官怼你 synchronized 性能差时,你拿这篇文章吊打他(ReentrantLock 与 synchronized 的前世今生)这两篇对我来说算是比较古老的文章了,都快有两个月了。而且实际上,个...
2020-05-01 16:48:16
562
2
原创 从Spring的循环引用打破你的认知!!!
假设我现在给出两个类,A、B,并且交由 Spring 容器管理,A、B 内部分别引用了 B、A,那么这样的循环引用是否会成功?我们看结果:可以发现,A、B 都成功在内部引用了对方,都执行成功了各自的 hello() 方法。但是,这说明了什么问题?很多人认为,循环引用有什么,不就是只要 new 一个 A,new 一个 B,然后 A 注入 B,B 注入 A 不就好了?这么说确实有那么一...
2020-04-28 20:17:18
614
原创 不为技术而技术:Redis 从单点到集群
首先,如果要给 Redis 做集群,那一定是单机存在了某种不足,要是你的系统,单机已经完全可以满足需求,那么,就没有必要,去折腾这些个集群。就是:不为技术而技术单机单实例的不足首先,既然是牵扯到集群,那么一定是单机出现了不足或者问题,那么才会考虑到利用集群,去解决单机的问题。否则,集群是没有意义的,因为不但不会提升性能,反而会增加系统的复杂度和维护成本,这样,就不会增加项目的经济效...
2020-04-17 21:57:54
1376
原创 精通mysql索引机制,你就不用再背sql优化口诀了!!(万字长文)
也许很多人都背过 MySQL 调优的口诀,但是从来不理解为什么这样子写出的 sql 语句,可以有更高的性能。而要理解其中的原由,就必须对 MySQL 底层的做一定的了解。同时,为了进大厂,你也必须学会,才能去和面试官喷。。下面我给出几道题目,你可以做一个自我检测:什么叫 4K 对齐如何存储空值数据如何存储可变长数据大 value 如何存储什么是聚簇索引InnoDB 没有定义主键...
2020-04-11 11:06:08
1655
原创 你真的懂匿名类、lambda、方法引用?先过了这道题再说!!!
先给出一道很简洁的小段 Java 程序,你看一下是否能答出正确结果。在类中有一个静态变量;静态方法块中,抛出子线程修改变量的值,然后等待子线程执行结束;main 方法查看变量的值。public class LambdaTest { // 静态变量初始为false static boolean b = false; static { // 抛出子线程将...
2020-04-09 17:37:45
1448
2
原创 没听说过CyclicBarrier、Phaser、Semaphore?面试官说:你可能没学过Java
Java 中的类非常非常多,虽然你不一定都用过,但是,对于一些关于线程交互、同步、通信等等相关的类我们还是需要去学习和了解的。比如大名鼎鼎的 AQS,Lock…等等。在我这一篇博客中,我主要去讲一些平时大家可能会忽略的一些但是又不能不知道的一些并发工具类,我会从主要的使用、原理,和一部分底层的代码来帮助大家理解。前半部分讲解使用,后半部分分析源码(源码是有关 AQS 的知识的,如果不懂 A...
2020-03-30 16:31:11
530
原创 全网最权威讲解:线程池源码分析
学习忌浮躁不要怕源码,毕竟 AQS 我都带你看过来了,线程池就是小意思。而且我的注释和分析已经不能再详细了。。文章目录线程池基本JDK 提供的默认类常用变量execute 执行方法addWorker 创建线程Worker 工作线程runWorker 线程执行核心方法getTask线程池基本首先有几个接口要了解:第一个是 Executor,第二是 ExecutorService,再后面才...
2020-03-28 17:14:03
2412
2
原创 从BIO到epoll(硬核讲解)
老样子,我先放几个问题,你自我检测一下,看看自己掌握多少,再去看我的讲解。计算机怎么能接收网络信息SocketException: Too many open files 是什么同步非阻塞的缺点是什么仅仅只是非阻塞,是否存在什么问题什么时候会涉及用户态与内核态的切换共享空间在网络IO的作用什么是中断异步是如何实现的那 Linux 可以实现异步吗很多 Java 程序员还停留在...
2020-03-25 15:23:28
3825
1
原创 Lock 的一百种玩法(剖析 Java Lock 原理)
大家都知道 Java 中有 synchronized 实现锁,也有 Lock 接口来实现显示的锁。synchronized 关键字更多贴近 Java 虚拟机,而 Lock 则更多贴近我们的 Java 代码。Lock 也具备了很多传统 synchronized 不具备的功能,本身也包含了很多的设计思维。学习 Lock 可以很好地提升一个人的 Java 功底,也能从中隐示地提高一个人的编程素养。学习...
2020-03-25 12:01:46
748
原创 共享锁重入次数怎么记录都不知道,谁敢给你涨薪(AQS源码阅读之读写锁)
读锁重入次数怎么分别保存?读写锁的获取数量如何原子性修改?其实之前在学习 Lock 的时候,学得比较粗糙,我也相信很多人都知道,像 ReentrantLock,ReadWriteLock 都是基于 AQS,CAS 实现的。通过状态位(或者说标志位)state 来 CAS 抢锁,通过一个 AQS 链表队列,来实现线程的排队,LockSupport 来实现线程的阻塞与唤醒,通过模板方法设计模式,来...
2020-03-20 23:37:57
5811
原创 全网最权威:AQS互斥锁源码讲解(基于ReentrantLock)
AQS 加锁自旋几次?排队的线程修改前一个线程?一般人真不知道。其实之前在学习 Lock 的时候,学得比较粗糙,我也相信很多人都知道,像 ReentrantLock,ReadWriteLock 都是基于 AQS,CAS 实现的。通过一个状态位(或者说标志位)来 CAS 抢锁,通过一个 AQS 链表队列,来实现线程的排队,LockSupport 来实现线程的阻塞与唤醒,通过模板方法设计模式,来对...
2020-03-18 11:32:24
10047
2
原创 多线程交替执行的一万种写法(记一道面试题)
多线程是 Java 的经典,也是重难点。很多时候,可能你反复运行了你的代码,确认没有了问题。但是很可能线上运行的某一天,突然出错挂了。事后反复寻找原因,却是死活重现不了场景。所以我们有必要深入地学习,不放过每一个细节。题目:让两个线程依次打印 1A2B3C4D5E6F7G谁都会想到的写法我特地把这个最常见的用法放在最前边,由浅入深。也花了很多的篇幅,去描述这个最常见简单的写法,可能潜在的各种...
2020-03-15 08:21:49
8097
1
原创 拆箱装箱都不知道?(从源码带你理解包装类)
众所周知,java 是一门面向对象的高级语言。但是 java 中的基本类型不能作为对象使用,为了解决对象的调用问题,为每个基本类型创造了对应的包装类型。先来看一道包装类的题目吧int a = 10;Integer b = 10;System.out.println(a == b); ①System.out.println(b.equals(a)); ②Integer ...
2020-03-07 10:54:53
349
原创 Java 并发基础总结
说实话,这么长的时间以来,很多的并发编程的知识都是零零散散的积累和学习到的,可能是通过许多博客,或者是平时学习工作中代码出现过的问题,也可能是听老师和同学说起过(其实我的大学的老师在这方面都比较菜,毕竟他们的主要研究方向不在这,也不做业务)。所以很多时候,对知识的理解力、思维横向性、总体把握能力都略感不足。因此需要一个系统的总结,将知识首尾贯穿,方能有心体通透、彻悟感叹。学习切忌浮躁线程状态...
2020-03-06 10:42:05
517
原创 手撕 HashMap(空口无凭,实战为真)
如果你还不是很理解HashMap,建议你先看我上一篇博客,深入理解HashMap。写HashMap的流程,写Map接口表明要实现哪些方法,实现AbstractMap抽象类实现一些基本方法(如 toString(),isEmpty() 等等),然后写HashMap类,从内部需要哪些成员开始,定义内部类Node,然后完成构造方法,之后写入最重要的 put(),get(),remove()三个最重要...
2020-03-05 10:05:09
847
1
原创 分享 HashMap 的精髓,它永远比你自己写 map 的效率高
HashMap是面试时几乎必问的数据结构,也是Java中非常常用的一个数据结构,所以了解它的原理是对面试有极大的帮助,也是自身非常好的提升。文章目录为什么要使用hash表hash表如何达到这样的查找效率为什么要使用hash表hash结构是为了查询效率而诞生的,是使查询速度最快化的结构,时间复杂度为O(1),真正达到了瞬间查找的目的。hash表如何达到这样的查找效率hash表采用空间换时间...
2020-03-04 09:43:56
1963
3
原创 当面试官怼你 synchronized 性能差时,你拿这篇文章吊打他(ReentrantLock 与 synchronized 的前世今生)
一天,你进入了一个大厂面试。坐立不安之中,一个秃头中年男子,穿着一个发灰了的格子衬衫,戴着一副镜片厚9mm的眼镜,稳如磐石突然朝着你说到:“就是你这个小毛头来面试吧。”心里一惊,这怕不是神仙级架构师。但还是故作镇定:“面试官您好,我是xxx…”面试过程中……面试官随手抛来一句:“简单说说 synchronized 关键字吧”。简单说说???嗯,面试官人还不错。再加上我面试前的精心准备,和饱...
2020-03-03 09:57:04
1074
原创 深入理解Object类
众所周知 java 是一门面向对象的高级语言,除了基本类型之外,其他的所有类(包括枚举类 enum)都继承于基类,也就是 Object 类。所以深入了解 java 语言的类特征,Object 类的基本方法是非常有必要的。下面请先看几个问题,来检测你对 Object 类了解多少。知不足,方可改之。问题1. Object 类中有哪些方法2. Object 类中哪些方法被标注为 native,是什么...
2020-03-02 16:56:00
653
原创 再有面试官问TCP三次握手,你就拿这篇文章糊他脸(轻松幽默带你理解TCP的通信原理:深度好文)
面试情景一天,你进入了一个大厂面试。坐立不安之中,一个秃头中年男子,穿着一个发灰了的格子衬衫,戴着一副镜片厚9mm的眼镜,稳如磐石突然朝着你说到:“就是你这个小毛头来面试吧。”心里一惊,这怕不是神仙级架构师。但还是故作镇定:“面试官您好,我是xxx…”面试过程中……面试官随手抛来一句:“简单说说 TCP 三次握手吧。”。简单说说???嗯,面试官人还不错。再加上我面试前的精心准备,和饱读诗...
2020-03-02 16:54:14
649
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人