- 博客(18)
- 资源 (17)
- 收藏
- 关注
转载 【Mysql】回表与覆盖索引是神魔鬼?
select id,name where name='shenjian'select id,name,sex* where name='shenjian'*多查询了一个属性,为何检索过程完全不同?什么是回表查询?什么是索引覆盖?如何实现索引覆盖?哪些场景,可以利用索引覆盖来优化SQL?这些,这是今天要分享的内容。注:本文试验基于MySQL5.6-InnoDB。一...
2020-04-30 11:19:20 651
原创 【JVM】类加载器与双亲委派模型
类加载器在加载阶段,会将class文件加载进方法区。有关类加载的全过程,可以先参考我的另外一篇文章类的奇幻漂流——类加载机制探秘类加载器的类型类加载器有以下种类:启动类加载器(Bootstrap ClassLoader) 扩展类加载器(Extension ClassLoader) 应用类加载器(Application ClassLoader)启动类加载器内嵌在JVM内核中的加...
2020-04-29 11:21:11 1137
原创 【JVM】虚拟机栈的五脏六腑
虚拟机栈,本身就是一个普通的栈,栈中的元素叫做栈帧。虚拟机栈是线程私有的,每有一个线程,虚拟机就会创建一个虚拟机栈,线程与虚拟机栈一一对应。线程每调用一个方法,虚拟机就会创建一个栈帧,并将此栈帧压入虚拟机栈中,当方法调用结束后,此栈帧又从虚拟机栈中弹出。线程每调用一个方法,都会起一个栈帧,因此栈帧的容量偏小,栈帧虽小,却五脏俱全。栈帧包含局部变量表、操作数栈、动态链接...
2020-04-27 21:39:55 1458
原创 【JVM】类的奇幻漂流——类加载机制探秘
1. 装载我觉得这里使用装载更好一点,第一,可以避免与类加载过程中的“加载”混淆,第二,装载体现的就是一个“装”字,仅仅是把货物从一个地方搬到另外一个地方而已,而这里的加载,却包含搬运货物、处理货物等一系列流程。装载阶段,将.class字节码文件的二进制数据读入内存中,然后将这些数据翻译成类的元数据,元数据包括方法代码,变量名,方法名,访问权限与返回值,接着将元数据存入方法区。...
2020-04-24 16:56:53 1359
转载 深入分析AQS实现原理
简单解释一下J.U.C,是JDK中提供的并发工具包,java.util.concurrent。里面提供了很多并发编程中很常用的实用工具类,比如atomic原子操作、比如lock同步锁、fork/join等。从Lock作为切入点我想以lock作为切入点来讲解AQS,毕竟同步锁是解决线程安全问题的通用手段,也是我们工作中用得比较多的方式。Lock APILock是一个接口,方法定义...
2020-04-23 14:15:43 568
原创 JUC基石——Unsafe类
前言我们经常在JUC包下的ConcurrentHashMap、Atomic开头的原子操作类、AQS以及LockSupport里面看到Unsafe类的身影,这个Unsafe类究竟是干什么的,本文可以带着读者一探究竟。Java和C++、C语言的一个重要区别,就是Java中我们无法直接操作一块内存区域,而在C++、C中却可以自己申请内存和释放内存。Unsafe类的设计,为我们提供了手动管理内存...
2020-04-22 14:19:19 2513
原创 【JVM】灵性一问——为什么用元空间替换永久代?
前言首先需要明确的是,以下我们讨论的HotSpot虚拟机,其他类型的虚拟机,例如JRockit与J9等,压根就没有永久代的概念。因此,下面所说的“虚拟机”都是HotSpot版本的。要想理解这种变化的原因,需要先理解方法区、永久代与元空间的概念与之间的关系。方法区与永久代,元空间之间的关系方法区是一种规范,不同的虚拟机厂商可以基于规范做出不同的实现,永久代和元空间就是出于不同jdk版...
2020-04-20 16:44:12 5093 1
原创 将职业和兴趣结合起来,于是“胖了么”诞生了!
写在前面的话博客断断续续写了2年多,毕业也快一年了。从一开始的几个粉丝到现在的6千多粉丝,真的是让我受宠若惊,接下来我会努力提升博客的质量,尽量输出更加优质的内容,有不足的地方还需大家批评指正。第一次租房毕业的一年里,发现自己真的是一个吃货,周末在家总是折磨厨房,努力满足自己的胃。说实话,毕业前我在家基本没做过饭,对做饭的兴趣也不大。反而到了工作的时候,兴趣大增,热爱做饭那就是热爱生活...
2020-04-19 00:24:25 3767 11
原创 【JAVA】Spring事务的传播行为
一、前言Spring为我们提供了巨大的便利,其中的事务增强特性,使得程序出错时,不需要我们进行手动回滚。Spring在Propagation定义了7种事务的传播行为:public enum Propagation { REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED), SUPPORTS(TransactionDefiniti...
2020-04-17 15:08:51 3397 2
原创 【JVM】说说java中的堆区
堆(Heap)是被虚拟机所管理的最大的一块内存区域,在堆中,会有以下一些对象:朝生夕死的小对象,蜉蝣一般 大对象,例如长数组,需要大量连续的内存空间 长周期对象,存活很久,很能熬因此,目前主流的JVM,利用可达性分析算法分析对象是否死亡,最后针对性地采用分代搜集算法回收死亡对象。判断对象是否死亡,可以先参考我的另外一篇文章【JAVA】如何判断对象已经死亡?堆可以分为新生代与老年代,用...
2020-04-15 11:33:34 1480 1
原创 【多线程】Synchronized的优化
对synchronized不太了解的同学,可以先参考我的另外一篇文章【多线程】浅说Synchronized早期版本synchronized性能较低的原因在早期版本中,synchronized是一种重量级锁,其底层由Monitor实现,而Monitor又依赖于操作系统的Mutex Lock。线程获取到锁后,需要切换状态,而操作系统在实现线程的切换时,需要从用户态转为核心态,这是一个非常耗时,...
2020-04-13 16:34:09 1232
原创 【多线程】浅说Synchronized
一、前言synchronized关键字用来保证在同一时刻只有一个线程可以执行被它修饰的变量或者代码块。这一篇中,只涉及synchronized的底层实现原理,不涉及对synchronized效率以及如何优化的讨论。二、使用方式(1)给静态方法加锁public class Main { public static synchronized void static...
2020-04-13 14:07:12 1121
原创 【JAVA】初探switch实现原理
日常编码中,我们常常用到switch语句,在我的另外一篇文章中【JAVA】优化if else的几种方式,也谈到了可以利用switch来优化if-else结构,那么switch底层究竟是如何实现的呢?我们先写几个示例第一个示例:case条件中的int值连续 public int switchInt(int i) { int result; swit...
2020-04-09 14:50:09 2037 2
原创 【数据库】浅析Innodb的聚集索引与非聚集索引
Mysql存储引擎之一的Innodb的索引,可以分为聚集索引与非聚集索引,这两种索引都是使用B+树组织的。本文不讲解什么是索引,对索引不了解的同学可以先移步到我的另外一篇文章【数据库】mysql索引简谈在分析这两种索引之前,我们先建立一个Person表:CREATE TABLE person ( `id` int(11) NOT NULL AUTO_INCREMENT COMM...
2020-04-08 17:14:33 1625 1
转载 【数据库】MySQL 加锁处理分析
一、背景MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的...
2020-04-07 15:28:30 5366 12
转载 【数据库】mysql死锁问题分析
线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”。 Oh, My God! 是死锁问题。尽管报错不多,对性能目前看来也无太大影响,但还是需要解决,保不齐哪天成为性能瓶颈。 为了更系统的分析问题,本文将从死锁检测、索引隔离级别与锁的关系、死锁成因、问题定位这五个方面来展开讨论。 ...
2020-04-07 15:09:53 1853 1
原创 【JAVA】Lambda执行原理
在我的想法里,Lambda长得很奇怪,虚拟机真的认识这玩意吗?还是说,Lambda经过编译后,脱掉了伪装的衣服,变成了大家熟知的方法?对Lambda不熟悉的同学,可以先看我的另外两篇文章。【Java8】对Lambda的理解 【JAVA8】快速理解Consumer、Supplier、Predicate与Function...
2020-04-03 10:06:46 1996 1
原创 【JAVA】优化if else的几种方式
在代码编写初期,我们写出来的代码,脉络清晰,结构简单。可随着bug或者新需求的出现,状态变得越来越多,只能不停地加else来区分,久而久之,判断的次数越来越多,嵌套的层数也越来越深,变得难以维护。当我们狠下心来决定改造时,有哪些方法能够优化if else结构呢?第一种方法:提前return,减少else判断优化前: private int handlePre1(boolea...
2020-04-01 17:05:56 11414
kq源码,java语言编写
2020-04-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人