自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

code_mzh的博客

世之奇伟瑰怪之观,常在于险远

  • 博客(44)
  • 资源 (6)
  • 收藏
  • 关注

原创 Spring的Aop讲解即三种实现

Spring的Aop就是将公共的业务 (日志 , 安全等) 和领域业务结合起来 , 当执行领域业务时 , 将会把公共业务加进来 . 实现公共业务的重复利用 . 领域业务更纯粹 , 程序猿专注领域业务 , 其本质还是动态代理 .spring实现:导入依赖<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --><dependency> <groupId>org.aspectj&l

2020-07-07 11:50:40 1127

原创 上传图片,资源等的实现

1.下是在前台选好要上传的<input type="file" accept="image/*"class="layui-input" tname="icon_file" placeholder="修改头像" id="icon"/>2.表单提交,后台接收 @PostMapping("add") @ResponseBody public AjaxResult add(User user, MultipartFile icon_file){ Str

2020-07-31 15:57:08 141

原创 jar包的bean扫描

jar包的bean是不会自动被扫描的,要自己扫描1.搞个配置类@ComponentScan里面写要扫描的包,注意是可以扫秒子包里的@ComponentScan({"com.mbyte.easy.verificationCode","com.mbyte.easy.emailProducer.listener","com.mbyte.easy.RabbitMQConfig"})@Componentpublic class EnableConfig {}2.配个注解,impor进配置类的class

2020-07-28 12:17:48 518

原创 自己写jar包maven导入使用步骤

1.把自己写的达成jar包,配个下载的插件,<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <sour

2020-07-28 12:12:33 1100

原创 Spring Boot的SPI机制

1.SPI思想SPI的全名为Service Provider Interface加粗样式.这个是针对厂商或者插件的,随意插拔。服务发现,就是不用再导入特定的包路径,会在MATA-INF.service自己设置接口的,jar包知用换这路径,原有代码不用变java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。例如:jbbc的路径cj问题,我们代码原来写死的路径的话,没法改,变成配置文件告诉使用者,我提供接口是哪个类,这不就动态了吗。2.SPI约定当服务的提供者,提供了服务接口的一种实

2020-07-28 11:39:03 1437

原创 bean的生命体周期

1.显示扫描xml创建容器,根据bean的名字(注解名字首字母小写)和calss解析出全限定类名,反射newInstence获取实例,默认是单例2,DI注入属性或是其他bean的引用,就像service曾调用doa层的方法,引入dao的bean,就是配置的value3.在初始化前aop思想加入后置处理器,在初始刷前后分别进行操作,浙江继承了泛型的类,就是工厂模式这是需要加入ioc的,所有bean都会执行4.进行初始化,这函数在xml中,配置initMathod5.使用bean,初始化成了就能用了.

2020-07-28 11:19:57 250

原创 SpringBoot自动配置底层原理

首先是启动类@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}发现只有一个注解,一个run函数先看@SpringBootApplication注解:@Target(ElementType.TYPE) // 注解的适用范围,其中TYPE用

2020-07-28 11:17:40 306

原创 ajax提交响应状态status为canceled解决办法

这问题给一般是controller耗时很严重注意这不一定是前台异步,前台的async:true,会导致后台的代码也是异步的,也就是说,只要你controller特别慢,那就直接跳过了success,error也不触发,你前台啥反应也没有就一脸懵逼,controller加syngnized都没用!!!,也会被异步处理!!!所以,加个前台的同步async:false解决大问题!!!...

2020-07-25 23:47:30 551

原创 GC简介和垃圾回收算法

GC就是回收不再使用的对象,调用析构函数finalize方法,和构造对应,就是这都是内部的,也可以自己调用,手动释放对象。新生代,老年代,永久代新生代又包括Eden(伊甸园)区和两个Survivor区(from,on幸存区),比例是8:1:1,可见大部分存活不长,对象主要分配在新生代的Eden区上,少数分在老年代。GC后年代更替流程Java虚拟机每次使用新生代中的Eden和其中一块Survivor(From),在经过一次Minor GC后,将Eden和Survivor中还存活的对象一次性地复制

2020-07-25 21:46:34 223

原创 序列化和反序列化

Java序列化概述Java序列化就是指把Java对象转换为字节序列的过程Java反序列化就是指把字节序列恢复为Java对象的过程。序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。反序列化的最重要的作用:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象,芳方便操作。总结:核心作用就是对象状态的保存和重建。(整个过程核心点就是字节流中所保存的对象状态及描述信息)举例:json/xml的数据传递:在数

2020-07-24 21:20:56 178

原创 为啥用mq,rabbitmq的特点

rabbitMQMQ 是什么?队列是什么,MQ 翻译为消息队列,又叫中间件,就是别人写好的配件,在访问服务器之间岸上队列我们可以理解为管道。以管道的方式做消息传递。.其实我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现,界面会提醒我们,让我们稍等,以及一些友好的图片文字提醒。而不是像前几年的时代,动不动就页面卡死,报错等来呈现给用户。在这业务场景中,我们就可以采用队列的机制来处理,因为同时结算就只能达到这么多。一瞬间全结账那不乱套了,“想挑战的人排好队,一个一个来”。

2020-07-23 22:33:10 260

原创 rabbitmq自动及手动ACK

主要是确认消息被消费者消费完成后通知服务器将队列里面的消息清除,手动自动就是对异常的处理态度不同。不配置Ack的话,此时的服务是no_ack=true的模式,就是说只要我发现你是消费了这个数据,至于异常不异常的,我不管了。通知Ack机制就是这么来的,更加灵活的,我们需要Ack不自动,而是手动,这样做的好处,就是使得我们开发人员更加人性化或者灵活的来处理我们的业务代码,异常发生不会丢数据,更加方便的处理异常的问题以及数据的返回处理等。下面是通话机制的四条原则:basic.Ack 发回给 Ra

2020-07-23 22:21:17 1509

原创 配置rabbitMQ,带集群配置,镜像模式

erlang安装1.上传erlangrz otp_src_23.0.tar.gz2.解压tar -zxvf otp_src_23.0.tar.gz3.创建erlang安装目录mkdir /usr/local/erlang4.进入解压目录cd otp_src_23.05.配置安装信息./configure --prefix=/usr/local/erlang --without-javac没问题就直接第六步备用:有错误就安装erlang,运行./configure提示如下错误

2020-07-21 18:17:16 434

原创 JMM对象创建过程,在内存的存储,

1.对象创建过程:第一次使用1.进行判断java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。分为加载并初始化类和创建对象2.加载并初始化类java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工作过程:双亲委托模型的工作过程是:如果一个类加载器(ClassLoader)收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,

2020-07-18 20:29:36 275

原创 Vue知识点

Vue3 将使用 ES6的Proxy 作为其观察者机制,取代之前使用的Object.defineProperty1.vue优点?答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文文档,不存在语言障碍 ,易于理解和学习;双向数据绑定:保留了angular的特点,在数据操作方面更为简单;组件化:保留了react的优点,实现了html的封装和重用,在构建单页面应用方面有着独特的优势;视图,数据,结构分离:使数据的更改更为简单,不需要进行逻辑代码的修改,只

2020-07-15 18:21:00 436

原创 初学Vue,及有哪些坑

Vue:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文文档,不存在语言障碍 ,易于理解和学习;**双向数据绑定:保留了angular的特点,**在数据操作方面更为简单;组件化:保留了react的优点,实现了html的封装和重用,在构建单页面应用方面有着独特的优势;视图,数据,结构分离:使数据的更改更为简单,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作;虚拟DOM:dom操作是非常耗费性能的, 不再使用原生的dom操作节点,极大解放dom

2020-07-15 17:26:19 323

原创 哈夫曼编码原理代码

哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。通过将高频率字符用较短字节进行表示而不是统一表示的方法达到字符串的压缩。啥是带权路径?- 每一个结点代表着不同的数字,而这些不同的数字称作结点的权值。二叉树中一个结点到另一个结点经过的结点方式是唯一的,这些经过的结点称作两个结点之间的路径。而由结点A到结点B中间经历的结点数目加1即为结点A到B的路径长度。哈夫曼为啥是前缀编码?因为**定长编码已经用相同的位数这个条件保证了任一个字符的编码都不会成为其它编码的前缀,**所以这种情

2020-07-12 21:25:15 373

原创 堆排序数组代码实现

堆的概念:一颗完全树堆排序就是:就是依次添加的,中间不缺节点,除了最后叶节点不满,别的节点哦都是两个子节点分为大根堆小根堆小根堆,每个节点都比它的左右子树的节点要小大根堆,每个节点都比它的左右子树的节点要大堆排序的实现:先是读数组中的值构建小顶堆(小顶堆升序,大顶堆降序序列,其实也看怎末写),就是新添的先放最后,跟父节点比较,比父节点小就继续比较,直到根节点。再依次拿堆顶元素,因为堆顶就是最小的,拿完就要调整调整:树最后的元素取代丢掉的堆顶元素,遍历重新整合成小丁堆堆排序两种实现

2020-07-12 17:00:16 416

原创 八皇后问题解析

概述:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。思路:1.因为不能在同一列,每列只会有一个2.回溯法:就是在第一行第一列先放一个,第二行循环看看放哪满足当前的条件,满足后在第三行重复,递归找到最后,发现最后一行有满足条件的就是正解,不满足,回退一级,继续找,依次回退,找出所有解。package ShangGuiGu.Queen8;import sun.awt.windows.WPrinterJob;import java.util.Queue;/**

2020-07-12 15:40:24 151

原创 迷宫简单思路代码

就是有起点,到终点有没有路。约定0:未走,1:墙,2:可走,3:走过没通迷宫:1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 思路:先是定好策略,先上后下,先左后右,然后就是回溯的思想,先走走看走得通就是重点变为二,表示可以走到。走不通就会退,也就是返回false,会回溯到上一节,在换路,全不行就继续回

2020-07-12 15:40:10 729

原创 String,int,Integer之间的转换

2020-07-11 22:50:41 139

原创 mybatisy一级缓存和二级缓存

mybatisy一级缓存和二级缓存:一级缓存:它指的是mybatis中的SqlSession缓存当我们执行查询之后,查询的结果会同时存到SqlSession准备的一块区域中该区域的结构就是一个map,再次查询的时候,会先去SqlSession找,有就直接用。也就是多次一样的查询语句只会第一次查数据库。SqlSession对象消失,一级缓存就没了,会存到二级缓存。两次相同查找之间进行增删改,一级缓存就清空,在次查询就会查数据库二级缓存:他指的是SqlSessionFactory对象的缓存

2020-07-10 22:29:20 183

原创 计算机网络、osi七层架构和TCP/IP的四层架构

OSI七层结构:7.应用层6.表示层5.会话层4.运输层3.网络层2.数据链链路层1.物理层TCP/IP四层结构4.应用层3.运输层2.网际层1.网络接口

2020-07-10 22:12:30 275

原创 mybaties运行流程

1.SqlSessionFactoryBuilder接受SqlMapConfig.xml文件流,构建SqlSessionFactory对象2.SqlSessionFactory读取SqlMapConfig.xml中连接数据库和mapper映射信息。生产真正操作数据库的的SqlSession对象。3.SqlSession有两大作用:1.生成·接口代理对象:SqlSessionImpl对象中getMapper方法分两步1.先用sqlsessionFactory读取到的数据库连接信息创建..

2020-07-10 22:01:39 116

原创 为什么要有线索二叉树?

在二叉链表中,每个结点都带有leftChild和rightChild,两个指针,而除根结点外,每个结点只被一个指针所对应,要么是leftChild,要么是rightChild.而总共有2n个指针,n是总的节点数,也就是说,**有2n-(n-1)个空指针**,从这个角度,也说明了线索二叉树的必要性。二叉树是一种非线性结构,对二叉树的遍历实际上是将二叉树这种非线性结构按某种需要转化为线性序列,因为遍历就可以变成数组了。以便以后在对二叉树进行某种处理时直接使用。因此如何保存遍历二叉树后得到的线性序列,以避免.

2020-07-10 20:08:32 2552 1

原创 带头节点的单向链表反转

package LinkedListReverse;/** * @author Mzh * @date 2020-07-09 09:22 * @description:mzh * @version: 1 */public class ReverseList { private Node head =new Node(0,null); private Integer size=0; public void add(Node node) throws Exceptio

2020-07-09 09:44:38 174

原创 i++操作,试题底层讲解

题目:int i = 1;i = i++;int j = i++;int k = i + ++i * i++;System.out.println("i = " + i);System.out.println("j = " + j);System.out.println("k = " + k);结果:i = 4j = 1k = 11先了解局部变量表,操作数栈局部变量保存结果,实际操作还是靠操作数栈int i = 1;先是把1压入操作数栈,然后=执行赋值给局部变量表i

2020-07-09 09:05:25 821

原创 JMM理解,多线程讲解,volita

JMMjava内存模型,这不是jvm有cas的思想,每个线程搞一手副本,自己在副本修改,联系就是主存。并发编程三个特性:可见性原子性顺序性先简单了解:可见性:A改了共享变量, B知道A改了,并把自己工作内存更新了(Volatile),或是A整个流程锁起来,B才能开始执行(lock),这就叫可见。就是可见别人的修改。原子性:也就是一组操作要末全做,要末不做,就是事务的原子性,就是线程的业务代码的原子性。(num++是一组操作,临时变量,操作栈,下篇博客了解)。顺序性:指

2020-07-08 23:00:03 451

原创 springmvc流程

简要分析执行流程1.DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。我们假设请求的url为 : http://localhost:8080/SpringMVC/hello如上url拆分成三部分:http://localhost:8080服务器域名SpringMVC部署在服务器上的web站点,项目名hello表示控制器controller通过分析,如上url表示为:请求位于服务器loca

2020-07-08 09:27:59 115

原创 /WEB-INF/目录下jsp可以正常显示,html却不行

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/jav

2020-07-08 09:02:18 334

原创 拦截器与过滤器的区别,在理解/ 和 /* 的区别

过滤器:依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。拦截器:依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用

2020-07-08 08:42:27 1113

原创 代理模式,静态,动态java,cglib代理

静态代理就是一对一辅导,一个代理类服务一个目标类,调用他的方法,加上一些代理来做的事,增强的动作和目标动作分开,解耦,不至于牵一发而动全身。静态代理模式的缺点:1、假设一个系统中有100个Service,则需要创建100个代理对象2、如果一个Service中有很多方法需要事务(增强动作),发现代理对象的方法中还是有很多重复的代码动态代理就是重用行,反射的机制拿到方法,再调用代理进行方法增强,就是 ivoke方法,目标,增强类都是参数了,就是动态的了,不再是一对一。1.JDK动态代理流程:原来

2020-07-07 16:43:31 266

原创 spring的自动装配

ioc的实现,就是不用我们自己实现new对象,在传进来,直接自动转配,注解,比如@Autowarid,没有new,就是定义一下,下面直接使用,就是自动交给ioc容器管理,我就直接用,注意我这个类也是注入的,调用被调用都要被spring统一管理。xml配置,全在xml里比较繁琐<beans><bean id="dog" class="com.kuang.pojo.Dog"/><bean id="cat" class="com.kuang.pojo.Cat"/>&l

2020-07-07 10:44:14 152

原创 控制反转IoC是一种设计思想,DI(依赖注入)是实现IoC的一种方法

就是为了解耦,减少对象之间的联系依赖注入:注入!(配置文件,注解)依赖:bean对象的创建依赖于容器注入:bean对象的所有属性,由有容器注入ioc业务层就是父容器,向ioc表现层子容器注入要求被注入的属性 , 必须有set方法 ,控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。没有IoC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全硬编码在程序中,对象的.

2020-07-07 10:42:45 875

原创 list转为json,不用@ResponseBody注解,EChart传的json数据格式

恭喜你找到真正的解决方法网上的方法都是驴唇不对马嘴,先了解一下json几个常用方法JSON依赖:<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.54</version> </dependenc

2020-07-06 20:03:20 335

原创 springboot实现excel下载

工具类:public class ExcelUtil { /** * @ClassName ExcelUtil * @Description : 用于生成指定目录的Excel不用ReisterConverter */ public static boolean generatorExcelWithoutConverter(String path, Class T, String sheetName, List<? extends Object> re

2020-07-06 09:08:18 188

原创 strea流式操作:优化集合操作

获取流的方式所有的collection可以通过stream方法获取流。list集合:list.stream()set集合:set.stream()map集合:不能直接转,但可以间接转换获取键:map.keySet().stream()获取值:map.values().stream()获取键值对:map.entrySet().stream()数组获取流数组:int[] arr ={1,2,3}数组转流:Stream.of(arr)stream流常用方法forEach():遍历。终结方

2020-07-06 08:48:35 490

原创 servlet原理

服务器发http请求给web容器web容器初次运行产生servleweb容器产生请求响应交给servlet进行处理,传参请求和响应,具体实现自己写的request的数据处理后的结果返回给resonseweb容器读取响应信息在返回客户端自己写的就是接收处理请求返回响应数据...

2020-07-05 22:31:30 80

原创 cookies和session的概述和区别

保存会话的方式:比如关闭界面下次访问还有登录信息cookie:客户端技术,响应请求session:服务器技术,cookie:曾请求中拿到cookie,服务器查看req.getCookie(),再看有没有对应的getName(),获取对应的值getValue()新建一个cookie ,设置有效期,resp响应设置cookie,resq.addCookie()特性:一个cookie只能设一个值,大小也限制一个web最多20个浏览器最多300session:session就

2020-07-05 22:20:37 174

原创 redis五大基本类型,还有实用三种的特点及使用场景,

1.string(字符串)特点:二进制安全适用场景:计数器对象缓存统计数量(粉丝数)2.Hash(哈希)特点:适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)适用场景:hash变更的数据 user name age,尤其是是用户信息之类的,经常变动的信息! hash 更适合于对象的 存储,String更加适合字符串存储!3.list(列表)特点:链表(双向链表)可演化成栈

2020-07-05 21:32:45 431

echarts.js

var myChart = echarts.init(document.getElementById('treeChart')); myChart.showLoading(); var data =[[${treeChart}]]; data= JSON.parse(data); console.log(data) myChart.hideLoading(); echarts.util.each(data.children, function (datum, index) { index % 2 === 0 && (datum.collapsed = true); }); myChart.setOption(option = { tooltip: { trigger: 'item', triggerOn: 'mousemove' }, series: [ { type: 'tree', data: data, top: '1%', left: '7%', bottom: '1%', right: '20%', symbolSize: 12, label: { position: 'left', verticalAlign: 'middle', align: 'right', fontSize: 16 }, leaves: { label: { position: 'right', verticalAlign: 'middle', align: 'left' } }, expandAndCollapse: true, animationDuration: 550, animationDurationUpdate: 750 } ] });

2020-08-08

erlang+rabbitmq

下面是安装流程 https://blog.csdn.net/code_mzh/article/details/107495098

2020-07-30

抽奖轮播实现的,html,js.zip

点击图片,停止必停到点击的那张 左侧小礼物图标,点击次数控制显示第几张图片 关键代码: stop.style.display="none"; start.style.display="block"; console.log(index); if(zuobi2_index!=-1){ clearInterval(timer); luck.style.left=-zuobi2_index*img_width+"%"; zuobi2_sp.innerHTML=sp[zuobi2_index].innerHTML+(zuobi2_index+1); zuobi2_index=-1; zuobi=-1; } else if(zuobi!=-1){ clearInterval(timer); luck.style.left=-zuobi*img_width+"%"; zuobi2_sp.innerHTML=sp[zuobi].innerHTML+(parseInt(zuobi)+1); zuobi=-1; }else{ clearInterval(timer); zuobi2_sp.innerHTML=sp[index].innerHTML+(index+1); }

2020-04-30

jsp的驱动包.zip

<c items="${data}" var="item"> <tr><td xss=removed>${item[0]}</td><td xss=removed>${item[1]}</td><td xss=removed>${item[2]}</td><td>${item[3]}</td><td>${item[4]}</td><td>${item[5]}</td><td>${item[6]}</td><td><img src="upload/${item[7]}" xss=removed></td></tr> </c>

2020-04-14

DBConnection.java

JDBC的jar包// System.out.println("sql语句是:" + sql); int i=0; //数据库连接 DBConnection db = new DBConnection(); try { PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql); preStmt.executeUpdate(); preStmt.close(); db.close();//关闭连接 i = 1; // System.out.println("数据插入成功,sql语句是:" + sql); } catch (Exception e) { e.printStackTrace(); } return i;//返回影响的行数,1为执行成功;

2020-04-13

机组初步认知.docx

免费,有程序class,方法,对象运行存储,磁盘简单认知,任何元器件都是闭合电路 首地址标记同一系列数据 内存上全是变量 磁盘上全是为文件 溢出攻击C语言

2020-04-08

空空如也

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

TA关注的人

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