`
文章列表
实践出真知。 在开篇说这么一句话的意思是,没有绝对的优化之道,所有的优化建议都建立在实践应用上。 在MySQL的逻辑结构中,我们剖析了逻辑结构中各部分的功能,所以,我们给出的优化建议也是按照三部分来提出。 一 ...
我们使用关系型数据库的时间很长,但是有多少人是真正去理解MySQL的结构的?想不想知道,我们在进行一条MySQL查询语句的时候经历了什么?我们一一解答。   一、MySQL的逻辑结构图 可能有的童鞋对逻辑结构图中的逻辑两字 ...
专业的东西,总要讲究个术语,才能显得学问高深。所以呢,在说MySQL之前,需要普及下这些数据库术语。 我们平常说的关系型数据库,如Oracle,MySQL等等,为啥叫关系型数据库?想过没有? 关系型数据库,全称叫关系型数据库管理系统,就是我们常常看见某些书中写的RDBMS。我们解释下这个名词包含的意思,关系型数据库的概念就出来了。 一、RDBMS(Relational DataBse Management System) 1、数据库:就是RDBMS中的DB,全拼为DataBase,我们常常接触仓库的概念,如maven中的私服,其实就是本地仓库。写这些东西的人,他们也是从生活中来的,为 ...
有人问为什么研究源码?不知道你们有没有在使用Mybatis遇到到各种奇葩问题,可能大多数人处理问题第一思路是--各种搜索。如果我们知道了实现原理,是不是很多问题一看就能处理。 不要怕看源码,源码才是基础,使用只不过是建造。 今天开篇,一张图看懂Mybatis中的Mapper原理!如果研究源码,Mybatis的最适合入门。    
学习新东西,需要先对这个东西的整体性有个把握,才能循着线路去学习,由浅入深。 
多线程高并发篇终于到了高级篇。基础篇和进阶篇主要讲了线程的相关内容以及一些原理分析,最最重要的就是JMM和AQS(AbstractQueuedSynchronizer ),理解了这两个基础,高并发涉及的内容就差不多了。高级篇中涉及一些常用的并发工具类和框架。 信号量,用个很形象的例子来说,就比如我们的安检限行,一次允许通过几个人,当看见安检员的NO PASS的牌子时,就等着吧。 类似的,信号量也需要设置准入数。我们看下源码中信号量的构造方法。在信号量的构造方法中,有两个构造方法。   /** * Creates a {@code Semaphore} with the g ...
一张图看懂MySQL的结构:  
我们知道,重排序的目的是在不改变程序执行结果的前提下,提高编译器和处理器对程序的执行性能。但是,重排序不是任意的,所谓无规矩不成方圆。理解重排序就需要知道重排序必须遵守的规则,总结起来就是我们今天要说的Happens-Before规则。在JSR-133: JavaTM Memory Model and Thread Specification中有相关描述,原版英文请见pdf文件,下载了一份供大家学习。 一. Happens-Before规则 Happens-Before规则规定了哪些情况下指令不能进行重排序。 程序顺序原则:一个线程内,代码执行的过程必须保证语义的串行性( as-if ...
在虚拟机的规范中,定义了Java的内存模型(JMM),来屏蔽各种硬件和操作系统内存访问的差异。在JDK1.5(实现了JSR-133)发布后,Java内存模型就逐渐的完善起来了。   一. 并发编程要解决的关键问题 我们知道,JMM是围绕着并发过程中如何处理原子性,可见性,有序性这3个特征建立的。 1.原子性:有关原子性的内容请参考http://zhaodengfeng1989.iteye.com/blog/2418779 2.可见性:也就是线程之间以何种机制进行信息交互(也叫线程通信)。在命令式编程中,线程之间的通信的方式有两种:共享内存,消息传递。 ①共享内存:在共享内存的并发 ...
要研究原子操作,就必须要对原子操作的来龙去脉有个清晰的认识。我们从原子操作的概念,以及处理器的原子操作和Java中原子操作的实现说起。 一.原子操作的概念 我们在物理学中知道,原子是一个不可再分的最小粒子。 ...
在多线程并发编程中,线程安全是关注的重点。一般来说,使用多线程编程是为了获得更高的执行效率,如果连最基本的数据准确性都无法保证,那么谈论并发就没有任何意义。 一.为什么说同步锁(synchronized锁)是重量级锁? 在谈到高并发多线程编程中,估计大家接触到最多的就是synchronized,它在并发编程中是一个元老级别的角色。我们把synchronized锁(同步锁)称为重量级锁,是因为它会导致争用不到锁的线程阻塞,而阻塞或者唤醒一个线程就需要操作系统介入,并且需要在用户态和内核态之间转换,而这个转换过程需要花费大量的资源(因为用户态和内核态都有自己各自的内存空间,在状态切换过程中, ...
我们知道,在JVM的类加载机制中,是将外围的源码文件编译成字节码文件(.class)后加载到JVM中,然后Java通过执行引擎执行字节码,最终转化为汇编指令由CPU执行.我们说的并发编程机制,当然离不开JVM的实现和CPU的指令集. 了解JMM(Java Memory Model,Java内存模型)都知道,JMM是围绕着原子性,有序性,可见性展开的.后面我会专门写一篇,阐述Java内存模型以及它与处理器内存模型,以及顺序一致性内存模型的关系. 1.volatile的定义 在Java语言规范中,对volatile的定义如下: Java编程语言允许线程访问共享变量,为了确保共享变量能准确 ...
对于后端开发来说,上下文我们常接触. 那什么是线程的上下文切换? 1.线程的上下文切换        在基础篇(一)中,我们讲到了时间片的概念.在单核处理器中,CPU就是通过给每个线程分配时间片执行来实现多线程.时间片是CPU分配 ...
在说线程之前,有必要说下线程与进程之间的关系。 附oracle官网链接:https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html 这里有原版的关于线程和进程的介绍,我们只简单介绍下,作为知识普及。 一.进程与线程的 ...
由于临界区访问的限制,所以我们需要设置并发的访问控制策略,这就是并发级别.按照并发级别的分类,大致上可以分为阻塞、无饥饿、无障碍、无锁、无等待。 Blocking(阻塞)   1. Blocking   2. Starvation-Free Obstruction-Free(无障碍)   ...
Global site tag (gtag.js) - Google Analytics