摘要:
垂直扩展和水平扩展 随着应用系统的业务量、用户量、数据量的增大,单机服务器的处理以及存储能力都会很有限,所以需要我们通过系统扩展的形式来提升应用系统的性能。而一般的提升系统性能的方式分为垂直扩展和水平扩展两种。 垂直扩展 垂直扩展,一般采用提升单机服务器的配置,比如CPU、内存、网卡、硬盘灯。但是由 阅读全文
摘要:
MyBatis缓存结构 它分为一级缓存、二级缓存。 一级缓存 一级缓存是SqlSession级别的缓存,它是默认开启的。在操作数据库时需要构造sqlsession对象,在对象中有一个HashMap的数据结构用于存储缓存数据。不同的sqlsession之间的缓存数据区域(HashMap)是互不影响的。 阅读全文
摘要:
拉取MySQL镜像 ## 下载最新版本的MySQL镜像 docker pull mysql 创建两个主从MySQL数据库容器 第一步,需要创建一个目录,用来存放与容器中配置文件对应的物理地址 目录结构如下: master my.cnf配置文件内容如下: [mysqld] server_id = 1 阅读全文
摘要:
NIO编程 NIO被称为非阻塞IO,它跟BIO不同的地方在于,它如果没有接收到客户端消息的话,可以不阻塞当前服务线程,从而使当前服务线程去继续接收其他客户端线程的请求。 NIO的三大核心组件 ByteBuffer ServerSocketChannel Selector ByteBuffer的使用 阅读全文
摘要:
HashMap的简介(本文以JDK1.8为例) HashMap是jdk中util包的一个容器,它以key-value的形式来存储一个映射关系。常见的用法如下: HashMap hashMap = new HashMap(10); hashMap.put("key","value1"); String 阅读全文
摘要:
前言 多线程的编程中,要想熟练的运用线程来完成某些任务,那么就需要了解线程的运行状态以及在必要的时候合理的对线程进行中断,这样才能够达到提高程序的执行效率。 线程的状态 线程的状态可以从Thread类的源码中看出,它包括六种状态:新建状态(NEW)、可运行状态(RUNNABLE)、阻塞状态(BLOC 阅读全文
摘要:
Java内存模型 (JMM)和JVM运行时内存的区别 JVM运行时内存 Java运行时内存模型,描述了Java程序代码在运行时,一次执行单个语句或者表达式时(即通过单个线程执行时)不同类型的变量、引用、对象、类等等的一些信息的存储规范。 Java内存模型 描述了多个线程运行时的语义规范,比如多个线程 阅读全文
摘要:
前言 在Java并发编程中,有一个关键字是volatile,它的英文意思是“易变的,不稳定的,无定型的”。那么在Java编程中,被volatile修饰的变量,它能够保证当前变量的可见性,从而使所有访问该前变量的线程都能够及时的获取到当前变量的最新值,从而保证它的可见性。那么它是怎么做到的呢? vol 阅读全文
摘要:
前言 Java中的锁都是基于对象的锁,Java中的每一个对象都可以作为一个锁,我们常听到类锁其实也是对象锁,因为Java类只有一个class对象(一个Java类可以有多个实例对象,多个实例对象共享这一个Java类)。之所以有锁的概念,都是因为在多个线程在访问一个共享变量资源时会发生一些不可控制的问题 阅读全文
摘要:
前言 对于Java程序员来说,在虚拟机自动内存管理的机制下,不需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出的问题。不过,如果在编写程序时没有合理的创建对象,就会造成内存泄漏或者溢出这样的问题,如果不了虚拟机内存的区域划分以及创建的对象时虚拟机对它的内存分配 阅读全文