安装mysql5.7单机 1.获取安装yum包 [root@iZm5e7sz135n16ua2rmbk6Z local]# wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 你可以下载到你的本地,然后上传到linux某目录下 2.安装软件源,在其目录下输入 [root@iZm5e7sz135n16ua2rmbk6Z local]# rpm -Uvh mysql57-community-release…
我们使用的redis,单机的绝对做不到高可用的,万一单机的redis宕机了,就没有备用的了,我们可以采用集群的方式来保证我们的高可用操作. 主从架构 大致就是这样的,一个主节点,两个从节点(一般两个就可以了) 主从工作原理 如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个SYNC命 令(redis2.8版本之前的命令)给master请求复制数据. master收到SYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文…
java架构之路-(面试篇)JVM虚拟机面试大全 https://www.cnblogs.com/cxiaocai/p/11634918.html   下文连接比较多啊,都是我过整理的博客,很多答案都在博客里有详细说明,理解记忆是最扎实的记忆.而且我的答案不一定是最准确的,但是我的答案不会让你失望,而且几乎每个答案都是问题的扩展答案. 1.JVM内存模型 答:https://www.cnblogs.com/cxiaocai/p/11483629.html 先经过类装载子系统装载,经由验证,准备,…
1.Redis支持的数据类型? 答:五种,在第一节redis相关的博客我就说过,String,Hash,List,Set,zSet,也就是我们的字符串,哈希,列表,集合,有序集合五种.结构图如下. 2.什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么? 答:Redis持久化主要分为三种,RDB.AOF还有我们的混合持久化,RDB是一个二进制文件,AOF是保存我们的每一次操作的命令,默认是使用RDB的持久化方式.RDB,二进制文件,速度快,但是数据安全性差,可能造成数据的丢失,A…
历史演变: 以前我们都是一个war包,包含了很多很多的代码,反正我开始工作的时候做的就是这样的项目,一个金融系统,代码具体多少行记不清楚了,内部功能超多,但是实际能用到的不多,代码冗余超大,每次部署大概要10分钟以上. 这个war包包含了我们的所有,jsp.js.css.java代码.代码很臃肿,每次改BUG很容易“碰瓷”.还有很多很多的不方面,这里就不一一列举了.画个图~!    慢慢的我们的用户越来越多了,一台服务器扛不住了,我们于是乎有横向扩展,有了nginx,貌似可以解决我们的一些问题了…
我们今天先来简单了解一下我们持久层框架,mybatis的使用.而且现在的注解成为趋势,我主要说一下注解方向的使用吧(配置文件也会说) 从使用角度只要是三个部分,mybatis-config.xml,mapper.xml,执行文件三个部分. mybatis-config.xml: 主键标签为configuration成对出现的,然后是properties也就是我们的配置,用于配置数据库.settings声明一些配置,比如打印sql语句等,后面会一个个去说.然后就是我们的mappers,里面包含多个…
上次我们搭建了Redis的主从架构,哨兵架构以及我们的集群架构,但是我们一直还未投入到实战中去,这次我们用jedis和springboot两种方式来操作一下我们的redis 主从架构 如何配置我上次已经讲过了,https://www.cnblogs.com/cxiaocai/p/11711377.html.我们这次主要看如何用java来操作redis,先来复习一下上次的配置,准备三台服务器,安装redis,保证互通,两台改为slave,配置replicaof IP 端口,主从复制是通过rdb文件…
上几次说了redis的主从,哨兵,集群配置,但是内部的选举一直没说,先来简单说一下选举吧. 集群选举 redis cluster节点间采取gossip协议进行通信,也就是说,在每一个节点间,无论主节点还是从节点,他们之间都是存在相互通信的.例如你的redis端口号是6379,那么你的gossip协议端口号就是16379. gossip协议包含多种消息,包括ping,pong,meet,fail等等. ping:每个节点都会频繁给其他节点发送ping,其中包含自己的状态还有自己维护的集群元数据,互…
书接上回说,nginx我们学会了简单的配置.那么我今天来聊一下,我们ngxin的一些优化配置(我不是很懂,不敢谈高级配置).我先来看一下nginx的好处和正向代理. nginx的好处 1.可以高并发连接,官方测试Nginx能够支撑5万并发连接,实际生产环境中可以支撑2~4万并发连接数.他的NIO模式上个博客提到过,这里不再赘述了. 2.内存消耗少,Nginx+PHP(FastCGI)服务器,在3万并发连接下,开启10个Nginx进程消耗150MB内存,15MB*10=150MB,开启的64个PH…
上次博客,我们说了jvm运行时的内存模型,堆,栈,程序计数器,元空间和本地方法栈.我们主要说了堆和栈,栈的流程大致也说了一遍,同时我们知道堆是用来存对象的,分别年轻代和老年代.但是具体的堆是怎么来存放对象的呢?什么时候可以将对象放置在老年代呢.下面我来看一下. 如果都为默认设置,大致就是这样的.假设我们设置内存堆的大小为600M,那么老年代就大概是400M,我们的年轻代就是200M,然后年轻代的eden区域占160M也就是200M的8/10,一般新建的对象都在这,我是说一般啊.后面会用这个600…
上次博客我们说了mybatis的基本使用,我们还捎带提到一下Mapper.xml中的select标签的useCache属性,这个就是设置是否存入二级缓存的. 回到我们正题,经常使用mybatis的小伙伴都知道,我们的mybatis是有两级缓存的,一级缓存默认开启,我们先来一下一级缓存吧,超级简单.一级缓存: 我们还拿上次的源码来说 package mybatis; import mybatis.bean.StudentBean; import mybatis.dao.StudentMapper;…
这次我们来说说Mybatis的源码,这里只说执行的流程,内部细节太多了,这里只能授之以渔了.还是最近的那段代码,我们来回顾一下. package mybatis; import mybatis.bean.StudentBean; import mybatis.dao.StudentMapper; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache…
今天我更新了一篇jvm垃圾回收的算法和垃圾回收器的内部逻辑,但是看的人不多啊......貌似大家还是比较喜欢看源码吧,毕竟实战要比理论用的多. 这篇文章不会详细的深入底层源码,只是基于注解和配置来说说我们的spring的使用,别小看基础,保证有你没用过的注解和配置,走起.我们先来建立一个maven项目,引入spring文件,不爱弄的在文章最下面有代码地址可以去下载.先看,后面自己下载代码自己去尝试.先给你们吧,边尝试边看吧.码云地址:https://gitee.com/dwyui/springb…
过去的几天里,我把JVM内部的垃圾回收算法和垃圾回收器.还剩下最后一个G1回收器没有说,我们今天数一下G1回收器和常见的参数配置. G1回收器 G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器,以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.我们会想一下我们上次课说的parNew+CMS回收器已经很厉害了,但是我们的服务器是那种超大内存的服务器呢?比如内存是32G的,可能最后我们的堆内存需要分配到十多个G,我们用parNew…
设计模式自身一直不是很了解,但其实我们时刻都在使用这些设计模式的,java有23种设计模式和6大原则. 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.程序的重用性. 其中包含 创建型模式,共五种:单例模式.工厂方法模式.抽象工厂模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.…
让我再深撸一次mysql吧,这次主要以应对面试来说说mysql,大概几个方向,索引结构,查询引擎,索引优化,explain的详解和trace工具的使用. 索引: 我们先来看一下mysql的B+tree,本文几乎都在围绕这个图来说的. mysql的底层是使用B+tree来存储数据的,和B+tree有一点点不同的是叶子节点是双向链表的结构,并不是图内的单向指针的.且null值放置在叶子节点的最前面.这个是主键索引. 下面我来看一下联合索引,比如我们现在有Student表,将name,age,addr…
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等.(百度百科).ZooKeeper代码版本中,提供了分布式独享锁.选举.队列的接口,其中分布锁和队列有Java和C两个版本,选举只有Java版本.一般用于分布式的消息监听(主要)和分布式锁的用途(次要). 我们这次先来简单安装一个zookeeper和z…
上次博客我们说了一下zookeeper的配置文件,以及命令的使用https://www.cnblogs.com/cxiaocai/p/11597465.html.我们这次来说一下我们的zookeeper的集群配置和java的API相关操作. 集群: 一般情况下我们用zookeeper来做任务调度中心的,所以一定要做到高可用的,单机的不可能做到永不宕机,我们也不会信任他单机的永不宕机,这时我们就需要做集群处理,来实现我们的高可用. 配置集群时,我们尽可能采用奇数的服务器来配置,什么意思呢?尽力采用…
做过web项目的小伙伴,对于SpringMVC,Struts2都是在熟悉不过了,再就是我们比较古老的servlet,我们先来复习一下我们的servlet生命周期. servlet生命周期 1)初始化阶段 当客户端向 Servlet 容器发出 HTTP 请求要求访问 Servlet 时,Servlet 容器首先会解析请求,检查内存中是否已经有了该 Servlet 对象,如果有,则直接使用该 Servlet 对象,如果没有,则创建 Servlet 实例对象,然后通过调用 init() 方法实现 Se…
我们上次大致说完了执行流程,也只是说了大致的过程,还有中间会出错的情况我们来处理一下. 统一异常处理 比如我们的运行时异常的500错误.我们来自定义一个类 package com.springmvcbk.utils; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import javax.servlet.ht…
我们这次来叭叭一下Spring的源码,这次博客主要来说说Spring源码,先粗略的撸一遍,下篇博客选几个重点去说,由于过于复杂,我也是看了一点点,我们先来过一遍源码,然后上流程图,最后我们再回头总结一下,我们来循序渐进的叭叭一下. 我们来回顾一下上次Spring博客的内容,每次都有用到AnnotationConfigApplicationContext来加载我们的配置类,我们就从这里开始. /** * Create a new AnnotationConfigApplicationContext…
下文连接比较多啊,都是我过整理的博客,很多答案都在博客里有详细说明,理解记忆是最扎实的记忆.而且我的答案不一定是最准确的,但是我的答案不会让你失望,而且几乎每个答案都是问题的扩展答案. 1.JVM内存模型 答:https://www.cnblogs.com/cxiaocai/p/11483629.html 先经过类装载子系统装载,经由验证,准备,解析,初始化四个过程.方法被调用,方法进栈,对象放在堆,栈内存的引用指向我们的对象,方法逐行执行,由我们的程序计数器来控制.元空间放置静态方法,不占用j…
话不多说,先上图. ***.class文件执行大概就是这样来走的.我们都知道我们的java文件经过编译以后会生成对应的class文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法,对象放在堆,线程开辟栈空间,程序计数器控制执行顺序.字节码执行引擎整体调控程序计数器,走你...大概就是这样的.我们先来看一下类装载子系统是如何工作的. 类装载子系统大概分为,验证->准备->解析->初始化.笼统的来说就这个4个步骤. 1,验证:验证我们的编译文件(字节码文件)是否正确. 2…
RabbitMQ安装 我这里安装是使用阿里云的CentOS7.5来安装的,使用CentOS版本低于7的可能会报错. 1.安装rabbitmq所需要的依赖包 输入$ yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc- c++ kernel-devel m4 ncurses-devel tk tc xz 2.下载安装包 $ wget www.rabbitmq.com/relea…
这次我们来说说我们的RocketMQ的安装和参数配置,先来看一下我们RocketMQ的提出和应用场景吧. 早在2009年,阿里巴巴的淘宝第一次提出了双11购物狂欢节,但是在2009年,服务器无法承受到大规模的并发,导致了大规模宕机停运,当时还是IOE的服务架构,也就是没有我们的消息队列中间件,直接由IBM的小型机.Oracle数据库.EMC存储设备来提供服务的,可想而知,我们的大并发场景,IOE是无法承受的,RocketMQ是由我们的国内的阿里巴巴在2010年开始由我们的阿里云的王坚博士组件团队…
前面我们说了RabbitMQ和RocketMQ的安装和简单的使用,这次我们说一下Kafka的安装配置,后面我会用几个真实案例来说一下MQ的真实使用场景.天冷了,不愿意伸手,最近没怎么写博客了,还请见谅. 一.目标 1.知道什么是Kafka 2.懂得kafka的单机和集群安装配置 3.了解内部参数的简单配置 二.Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动…
tomcat使我们熟知的也是我们使用最多的web服务器了,至少我是使用最多的.常见的web服务器还有Apache,web logic,JBOSS等,对于tomcat的安装我就不再赘述了,简单的不能再简单了,不会安装的,建议你学学基础. 官方地址:http://tomcat.apache.org/ 现在已经发布了tomcat9版本.我们下面说的都是以tomcat8.5为例来说的. 我们先来看个图 我们可以看到一个tomcat服务一个可以有一个Server,一个Server可以包含多个Service…
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的Unix工具软件.应用程序和网络协议.它支持32位和64位硬件.Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统.   一,安装环境准备: 1.linux 内核2.6及以上版本:使用uname -a查看即可. 2.GCC编辑器. GCC可以用来编译C语言程序.Nginx没有直接提供二级制可执行程序,只能下载源码进行…
上篇博客,我们详细的说明了mysql的索引存储结构,也就是我们的B+tree的变种,是一个带有双向链表的B+tree.那么我今天来详细研究一下,怎么使用索引和怎么查看索引的使用情况. 我们先来简单的建立几张表. 只有ID加了索引,我们先来运行一下explain,看下结果. 其中包含了id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra这些列 ,我们来逐个看一下这些都有什么用吧. id: id列的编号是 select…
说到JMM大家一定很陌生,被我们所熟知的一定是jvm虚拟机,而我们今天讲的JMM和JVM虚拟机没有半毛钱关系,千万不要把JMM的任何事情联想到JVM,把JMM当做一个完全新的事物去理解和认识. 我们先看一下计算机的理论模型,也是冯诺依曼计算机模型,先来张图. 其实我们更关注与计算机的内部CPU的计算和内存之间的关系.我们在来深入的看一下是如何计算的. 我们来看一下这个玩意的处理流程啊,当我们的数据和方法加载的内存区,需要处理时,内存将数据和方法传递到CPU的L3->L2->L1然后再进入到CP…