自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 7、Explain解析SQL语句

ID列id 列的编号是select的序号,有几个select就有几个id , id列越大,优先级越高select_type列select_type对应的是简单查询和复杂查询解析SQL:explain select (select 1 from actor where id = 1) from (select * from film where id = 1) der;1)simple 单表查询2)DERIVED 包含在 from 子句中的子查询,生成的临时表,也叫派生表3)SUBQUERY

2020-06-14 22:58:17 307

原创 6、联合索引的数据结构

联合索引的数据结构每个节点的索引是按序排列的。 符合最左原则。

2020-06-11 23:11:50 1406 1

原创 5、MyISAM和Innodb引擎(表级别)

数据存储文件MyISAM数据存储文件有3个,索引和数据文件是分离的,非聚集的1).frm 表结构文件2).MYI 索引文件3).MYD 数据文件Innodb数据存储文件有2个,索引和数据文件是合并的,聚集的,聚簇索引1).frm 表结构文件2).ibd 数据文件MyISAM 数据结构主键索引非主键索引由上图可看出,MyISAM引擎的主键索引 和非主键索引的数据结构是一样的,叶子节点都存着数据的物理位置,指向数据的磁盘位置Innodb数据结构主键索引(聚簇索

2020-06-11 23:10:28 205

原创 4、mysql为什么用B+tree

B-TreeB树是一种多路平衡搜索树,但是B树允许每个节点上可以存放更多的数据,也允许每个节点有更多的子节点B树的特点:所有的键值分布在整个树中任何关键字只出现在1个节点中搜索可能在非叶子节点中结束B+TreeB+Tree是B树的变种B+Tree特点数据都存储在叶子节点,非叶子节点不存储真正的数据非叶子节点中的数据,都能在叶子节点中找到(关键字有可能出现在2处)。为所有的叶子节点增加了一个链指针为什么用B+TreeMysql是基于磁盘的数据库,索引是以索引文件存在于

2020-06-09 17:16:57 235

原创 2、Servlet-ALL

1、servlet接口:GenericServlet和HttpServlet分别是servlet接口的实现,客户端发起的请求会被路由到对应的servlet上,servlet的核心是service方法,service方法会把前端的GET,POST等请求转发到对应的doGet,doPost等方法。一般来说,一个servlet容器中,只对应1个servlet对象。每个请求都由同一个Servlet对象处理。但如果Servlet实现了SingleThreadModel接口,则会WEB容器中存在多个servl

2020-06-09 16:04:58 84

原创 3、AVL平衡树

二叉树的特点二叉树上的任意一个节点,小于其右边所有的节点,大于其左边所有的节点当删除二叉树上的节点时,当该节点既有左子节点,又有右子节点,那么找到该节点(1)下右边所有节点中的最小节点,删掉,并将其值赋值给该节点(1)。平衡二叉树(AVL树)平衡树满足最重要的一个特性:每一个节点的子节点高度最大相差1将每个结点的平衡因子控制在-1、0、1三个值是靠一种称为旋转(Rolate)的操作保证的,视情况分为左旋转和右旋转。平衡因子算法: 左边的高度-右边的高度=平衡因子。如图1:左边的高度为2,

2020-06-07 23:01:57 130

原创 1、Web服务器机制

http和httpshttp:超文本传输协议,应用层协议,它由请求和响应组成,默认端口号是:80https:http的安全版,只是在http层加了一个SSL或TSL协议。SSL/TSL提供了加密机制。默认端口号是:443httpsSSL/TSLSSL/TSL协议层主要的职责就是借助下层协议(TCP)的信道安全的协商出一份加密协议SSL/TSL解决了以下3个方面的安全性问题1)提供验证服务,验证本次会话实体身份的合法性2)加密服务,强加密机制能够保证通信过程中的消息不被破译3)提供

2020-06-04 23:36:19 114

原创 2、MySQL事务和多版本并发控制

事务的特性ACID原子性(atomicity):事务的每一个写操作都是原子性的,要么一起成功,要么一起失败。要么全部提交成功,要么全部回滚一致性(consistency):先举例子,银行转账数据库总是从一个一致性的状态转换到另一个一致性的状态。当第3行执行结束后,开始执行第4行的时候,系统崩溃了,上一个账户还是没有减少200块,因为事务没有提交。回滚事务隔离性(isolation): 一个事务在提交前,对另外一个事务是不可见的,隔离的。详见事务的隔离级别。永久性(durability):一个事

2020-06-01 18:25:07 148

原创 1、Mysql逻辑架构和锁

Mysql逻辑架构第一层:并不是Mysql独有的,它处理连接,授权认证,安全等工作第二层:包括查询解析、优化、缓存、以及所有的内置函数(日期,时间,数学,加密函数),所有跨存储引擎的部分都是在这层处理,比如:存储过程、触发器、视图第三层:存储引擎:1)Innodb:默认的事务性存储引擎,MySQL 5.1 版本及5.1版本后的存储引擎2)Myisam:提供了大量的特殊性,比如全文索引,压缩,空间函数等,MySQL5.1版本前默认的存储引擎,不支持事务和行级锁,支持表锁锁共享锁(读锁):

2020-06-01 17:36:59 107

原创 5、rest 风格

spring MVC支持rest的5个注解@GetMapping 对应http的get 请求@PostMapping 对应http的POST请求@PutMapping 对应http的put请求@PatchMapping 对应http的patch请求,提交资源部分修改的属性@DeleteMapping 对应http的delete请求,删除服务器资源rest风格示例@RestController@RequestMapping("/user")public class UserControl

2020-05-25 23:43:51 101

原创 4、spring----MVC

spring MVC 示意图spring MVC执行过程用户端发送请求至前端控制器 DispatcherServletDispatcherServlet接收到请求后调用处理器映射器 HandlerMapping处理器映射器根据URL 找到具体的处理器,生成处理器执行链HandlerExcutionChain(包含处理器对象和处理器拦截器),将处理器执行链返回给DispatcherServletDispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapte

2020-05-24 19:43:46 183

原创 3、spring中的AOP

AOP能做什么spring aop 可以用作日志的打印,可以用作spring中的事务。aop可以像模板方法一样,将一致性的能力抽出来,个性化的能力由供应商实现,并将这些个性化的能力织入到约定的流程中去spring aop 实现spring 实现AOP是用代理模式实现的三种代理模式:静态代理:必须有接口,手动编写代理类JDK动态代理:必须有接口,根据接口的实现类生成代理类,代理类和被代理类类型不同CGLIB动态代理:不需要接口,生成和类相同类型的代理类,代理类和被代理类类型相同,放入IOC容

2020-05-20 22:57:51 84

原创 2、spring IOC

spring IOC简介spring IOC 是一个管理Bean的容器,在spring 的定义中,它要求所有的spring IOC容器都要实现BeanFactory接口。但是BeanFactory的功能还不够强大,因此spring 在BeanFactory的基础之上,还设计了一个ApplicationContext接口,它是BeanFactory的子接口之一,我们通常所说的spring容器,其实就是ApplicationContext接口的实现类加载BEAN到IOC容器中@Configurati

2020-05-17 14:01:56 107

原创 1、spring and spring boot

spring 和spring boot的对比spring boot 项目将spring mvc的DispatcherServlet 封装进 spring-boot-stater-web.pom文件中了,在这个pom文件中添加了spring-webmvc的依赖spring boot 简化了传统的maven依赖。只需要 引入starter,就会自动配置。兼容性spring boot都会替你考虑好spring boot 的理念就是简化spring的配置,它是spring的延伸,而不是颠覆,所以,新增了@

2020-05-17 12:42:17 98

原创 8、观察者(watcher)模式

观察者模式简介观察者模式观察者模式有2种角色被观察者被观察者的入参对象,都是观察者的抽象接口观察者观察者的入参对象,都是被观察者的抽象接口场景微博1)粉丝关注明星的账号2)粉丝取消关注3)明星的动态通知粉丝被观察者接口/** * 被观察者,发布者 接口 * * * */public interface Publisher { /** * 添加粉丝 * 入参为 观察者/订阅者 的抽象接口 * * */ pub

2020-05-12 23:09:42 304 1

原创 13、JSON和ProtoBuf序列化

序列化/反序列化框架JSON :可读性强,字符串,性能差。对于性能要求不是太高的服务器程序,用JSON较好ProtoBuf:二进制框架,性能强。netty和微信都在用此框架详解粘包和拆包(传输中会有半包问题)netty发送数据和读取数据的场所是ByteBuf缓冲区存在的问题:读到多个客户端的ByteBuf的输入,但是“粘”在了一起读到部分ByteBuf的内容,并且有乱码...

2020-04-27 23:39:46 835

原创 12、Decoder解码器和Encoder编码器

decoder部分:decoder解码器是将Byte解析成为List的Java pojo对象。所有netty中的解码器,都是Inbound入站处理器类型,都直接或者间接实现了ChannelInboundHandler接口。每个解码器都是一个InboundHanderdecoder–>ByteToMessageDecoder解码器该类是个抽象类,不可直接使用它会将上一站传过来的By...

2020-04-25 18:01:42 3963 1

原创 11、Netty的ByteBuf缓冲区

优化点netty重写了Java的ByteBuff,具体有哪些优点pooling池化,减少了内存的复制和GC。提升了效率复合缓冲区,支持0复制不需要调用flip()的方法切换读写。可以自定义缓冲区类型(Heap Buff 和direct buff)。可以进行引用计数。来标记是否可GCByteBuf的逻辑部分分为4个部分已用字节:表示已经使用完的无用的字节可读字节:这部分是B...

2020-04-23 23:56:10 565

原创 7、适配器(Adaptor)模式

适用场景用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相的转换器(适配器)就能解决此问题,而这正像是本模式所做的事情。适配器简介角色:源类(Adaptee)角色:用户想要适用这个类,但是这个类中没有用户期望的sampleOperati...

2020-04-21 22:37:54 311

原创 10、netty中的channel、channelPipeline、channelHandler、channelHandlerContext

关系channel —通道,一个channel中有1个channelPipelinechannelPipeline—一个channelPipeline中有很多个channelHandler节点,责任链模式channelHandler—具体的处理IO事件的处理器channelHandlerContext—channelPipeline就是通过channelHandlerContext来管理c...

2020-04-19 22:40:25 232

原创 6、代理模式(静态,jdk,cjlib)

静态代理模式场景工人(张三)讨薪场景在开庭之前委托律师开庭的时候,用之前已经定好的律师实现诉讼的接口类(行为接口类)被代理的类(工人提供证明的类)代理律师的类产生代理对象的静态工厂类/** * 静态代理行为接口类 * * */public interface LawsuitService { /** * 提交证明 ...

2020-04-19 18:17:44 157

原创 5、责任链模式

什么是责任链模式责任链模式:顾名思义,是一条具有处理事务能力的一个链条。每个链条中的节点根据条件,都有机会处理事件。如果某个节点处理完了,就可以进入下个节点或者返回责任链模式:符合开闭原则。如果要增加节点,直接继承抽象类即可。责任链模式角色1、必须具备一个抽象的处理类基类该基类中具有1个必备的属性和1个必备的方法属性:该节点的下一个节点方法:处理事务的方法。2、责任链的节点。1)...

2020-04-16 23:40:45 111

原创 9、异步回调模式

joinjoin的时候,程序是阻塞的。并且没有返回值。/** * join相当于调用了wait方法,等子线程执行完成后,才会启用notifyAll来唤醒其他线程 * * * * */public class JoinTest { static class HotWater implements Runnable{ public void run() {...

2020-04-13 23:50:18 124

原创 8、反应器模式Reactor(多线程主从模型)

多线程主从模型角色多线程主从模型主要的应用场景,就是netty1、MainReactor 主反应器角色。该角色只处理OP_ACCEPT 的IO事件,只轮循主Selector。并将事件分发出去,由Acceptor角色执行2、Acceptor接受者。Acceptor将分发过来的事件,创建SocketChannel,并将OP_WRITE事件注册到多个SubSelector中。3、SubReact...

2020-04-13 23:16:51 361

原创 7、反应器模式Reactor(单线程版)

反应器模式角色单线程的反应器模式,主要用在redis4.0以前,1、Reactor 反应器角色。该角色主要是来监听Selector中感兴趣的IO事件的。找出所有事件,并将事件分发出去2、Acceptor 接受者。该角色主要接收Reactor反应器中分发的 OP_ACCEPT接收事件,并创建SocketChannel通道,将处理类设置到选择键的附件中3、Handler 处理角色。Server...

2020-04-13 22:52:16 157

原创 6、BIO

模拟BIO代码public class SocketServer { public static void main(String[] args) throws Exception { while (true){ //创建一个服务端的socket ServerSocket serverSocket=new ServerS...

2020-04-11 19:31:44 86

原创 5、Selector(选择器)

Selector是干什么的选择是是NIO的三大组件之一。是IO多路复用的关键。Selector是管理通道的。通道注册到Selector中,可以通过1个线程,管理上万个Socket连接。通道的注册条件:通道必须是继承SelectableChannel(可选择通道)抽象类的。并且是非阻塞的。FileChannel不能注册到选择器中,因为FileChannel没有继承抽象类,并且是阻塞的。S...

2020-04-07 23:48:00 568

原创 4、Channel(通道)

交互通道是和缓冲区交互的新建的缓冲区默认的模式是写入,所以会从通道中读数据。缓冲区经过flip()翻转后,变成读模式。才会向通道中写数据。通道类型1、FileChannel 文件通道,阻塞的2、ScoketChannel,ServerScoketChannel 套接字通道,是基于TCP协议传输的3、DatagramChannel 数据报通道。是基于UDP协议传输的。...

2020-04-07 22:57:55 28395

原创 3、Buffer类

简介Buffer类线程不安全。抽象类,是Java.nio包下的基类在NIO中有8种缓冲区分类,子类主要有8个:ByteBuffer,CharBuffer,IntBuffer,DoubleBuffer,FloatBuffer,LongBuffer,ShortBuffer,MappedByteBuffer前7个包含了Java的8大基本类型。使用最多的是ByteBufferBuffer类的属性...

2020-04-06 23:11:13 296

原创 2、Java NIO(IO多路复用)

Java NIO 和OIO区别OIO:old IO,是面向流的。一个用户线程的read操作,是阻塞的NIO:是用的IO模型中的 IO多路复用1、NIO 是面向缓冲区的。2、NIO 有3个核心组件:通道(channel)、缓冲区(Buffer)、选择器(Selector)3、NIO的实现是基于低层选择器的调用(选择器在用户空间),调用Linux内核的epoll框架,epoll框架会将就绪的...

2020-04-06 22:40:10 1327

原创 1、四种主要的IO模型

IO分为同步IO和异步IO 两大类。同步:是一种用户空间与内核空间的IO发起方式,同步IO是指用户线程主动发起的一方,内核空间是被动接收方异步:异步IO是内核线程主动发起的一方,用户空间为被动接受方。Java中的NIO 是NEW IO 而不是none-blocking IO,JAVA中用的是 多路复用IOLINUX默认的线程数是1024个同步阻塞IO1、用户线程发起访问(进入阻塞状态)...

2020-04-06 19:33:01 286

原创 4、建造者模式(创建型模式)

建造者模式适用场景1、在接口中,所有的抽象的行为(方法),不需要全部实现例如:电动车和汽油车。电动车的行为是充电。而汽油车的行为是加油2、符合设计模式的单一职责和开闭原则例如:新增卡车的时候,还需要修改原来的代码3、不想创建很多的构造方法例如:创造电动车和汽油车。会建2个构造方法,以后扩展的话,还会建很多的构造方法建造者模式成员1、Product (产品类):需要为其构建对象的类,...

2020-04-06 15:49:43 124

原创 3、工厂模式(工厂方法模式)

工厂模式应用场景对可扩展的模块,不会动以前的代码,不会在以前的代码中出现if else ,不打破设计模式的单一职责原则和开闭原则。所以说,如果有新的扩展,会继承抽象类,重新创建新的工厂类工厂方法模式必备要素:1、具有抽象的工厂基类(该类用abstract修饰)将该领域的行为(方法)抽象出来,abstract 类来为行为创建了一个模板。规范其流程,主流程中有N个子流程。其中一部分个性化...

2020-04-05 13:23:05 136 1

原创 2、单例模式(双重锁和内部类)

单例模式单例模式是在一个应用中,该类只有1个实例1、需要将构造方法私有化。2、获取实例的方法static3、有饿汉和懒汉模式。饿汉模式是线程安全的。会影响启动速度懒汉模式会在用的时候,再去创建。但是是线程不安全的,双重锁和内部类可以使懒加载是线程安全的双重锁/**懒汉模式细粒度(线程安全的)*/public class SingletonLazySafeSyn { ...

2020-04-05 13:03:21 100

原创 1、Java设计模式(开篇)

从面向对象编程(OOP)–>函数式编程JDK1.8以后,Java出了 lambda表达式, Java从面向对象编程–>面向对象编程+函数式编程面向对象基于4个基本原则:1、封装:类中包含的各种属性和行为。是将属性和行为绑定到一起。以便维护和扩展2、抽象:例如:接口。这种类可以公开它做的事情,但是隐藏它的实现3、继承:将基类的能力赋予子类4、多态:不同类型的实体使用相同接口的...

2020-04-01 23:56:49 91

原创 17、SPI

spi1、什么是SPI是Java核心包的接口(放在<java_home>/jre/lib下,被BootstrapClassLoader 加载),但是实现由第三方服务商实现。第三方服务商的实现类的类名放在 /meta-inf/services 下。但是编译后的class类放在 web-inf/classes文件下2、SPI是由上层服务提供的接口,加载下层的实现类。3、SPI的使...

2020-03-29 14:51:50 135

原创 16、基于栈的解释执行过程

public int calc(){ int a=100; int b=200; int c=300; return (a+b)*c;}编译后的字节码public int calc(); Code: Stack=2, Locals=4, Args_size=1 0: bipush 100 2: istore_1 ...

2020-03-28 18:10:38 121

原创 15、方法的调用

1、运行时虚拟机栈的结构局部变量表,操作数栈,动态链接,返回地址2、解析:解析是在类加载的时候,class文件里存放的方法的符号引用,解析就是将符号引用转化为直接引用的过程。编译时就能确定,并且能将符号引用转化为直接引用的,叫静态解析。运行时才能够加载到方法区的方法,这时候才会有方法入口,在运行时将符号引用转换为直接引用,叫做动态解析3、动态链接指的就是将符号引用解析为直接引用地址静态分...

2020-03-28 17:57:53 90

原创 14、运行时栈帧结构

jvm运行时线程私有的内存区域虚拟机栈分为4个部分:局部变量表、操作数栈、动态链接、返回地址和附加信息局部变量表局部变量表在编译的时候,已经计算好了分配的内存空间局部变量表的最小单位 slotjava么有说明slot占多少个字节,多少位,但是,是这样说的。1个slot可以存放int、float、short、boolean、 refrence、byte、char、returnAddres...

2020-03-26 23:00:06 171

原创 13、类加载器(ClassLoader)

java有三大类加载器:bootstrap启动类加载器,也叫根加载器主要加载 <java_home>/jre/lib/ 下的.jar文件或-Xbootclasspath参数指定的路径下的jar包。例如 rt.jar只加载.jar文件中以 java,javax,sun开头的Class文件启动类加载器是和JVM绑定的。是用C++实现的。Extension扩展类加载器是在JV...

2020-03-25 23:26:43 105

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除