自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (2)
  • 收藏
  • 关注

原创 mysql安装过程

mysql数据库在window x64上的安装

2022-04-17 21:24:43 710 1

原创 并发专题-锁synchronize

synchronize加锁实现了原子性(独占性,排他性)以及可见性锁机制的两个特性互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁时应获得最新共享变量的值),否则另一个线程可能是在本地缓存的某个副本上继续操作从而引起不一致。Synchronize(A.class

2020-08-27 19:09:59 190

原创 并发基础-JVM内存模型

Java内存模型启动进程,会启动jvm(调用虚拟机的命令),加载包含main方法的类,然后按需去加载其他类,启动其他线程。java内存区域各自有各自的用途,以及创建和销毁时间,有些随着虚拟机的启动而存在,有些依赖用户线程的启动和结束而建立和销毁。JMM java内存模型规范,用于指导和规范内存数据与工作空间数据的交互 。java内存区域是按照JMM规范来划分的。1)主内存:共享的信息2)工作内存:私有信息,基本数据类型,直接分配到工作内存,引用的地址存放在工作内存,引用的对象存放在堆中3)工

2020-08-27 19:05:40 157

原创 mysql-查询优化

查询优化当sql可以使用两个索引时,查询优化器只会走一个索引(优化器内部会粗略评估各种方式的成本,然后走成本最小的)。尽量写成inner join,这样会交给优化器去选择驱动表基本成本:一个查询可以有不同的执行方案,可以选择某个索引进行查询,也可以选择全表扫描,查询优化器会选择其中成本最低的方案去执行查询。I/O成本:InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为I/O成本C

2020-07-21 07:44:36 146 1

原创 Mysql_2

mysq innoDb支持事务,和行级锁mysql的架构connection pool:连接池Parser:解析器Cache&Buffer:缓存Optimizer:优化器Sql Interface:Pluggabe storage Engines:存储引擎,存储引擎负责对表中的数据的进行读取和写入,常用的存储引擎有InnoDB、MyISAM、Memory等,不同的存储引擎有自己的特性,数据在不同存储引擎中存放的格式也是不同的,比如Memory都不用磁盘来存储数据。在InnoDB中,

2020-07-19 21:39:34 167

原创 java8新特性之Lambda与Stream流

使用Lambda表达式需要注意一下两点: lambda表达式主要用来执行行内执行的方法类型的接口,该接口内只能有一个抽象方法。可以定义静态方法和默认方法,也允许有Object类中的public方法 lambda表达式当中不允许声明一个与局部变量参数同名的参数或是局部变量。 lambda表达式免去了使用匿名方法的麻烦,并且给与了java简单但是强大的函数化的编程能力@FunctionalInterface:修饰函数式接口的,要求接口中的抽象方法只有一个。 这个注解往往会和 lambd

2020-07-19 21:09:56 236

原创 Docker生成镜像

有时候从Docker镜像仓库中下载的镜像不能满足要求,我们可以基于一个基础镜像构建一个自己的镜像两种方式: - 更新镜像:使用docker commit 命令 - 构建镜像:使用docker build 命令,需要创建Dockerfile文件更新镜像先使用基础镜像创建一个容器,然后对容器内容进行更改,然后使用docker commit 命令提交为一个新的镜像(以tomcat为例)。1.根据基础镜像,创建容器docker run --name candytomcat -p 8090:8080

2020-07-12 16:45:46 180

原创 Docker介绍与简单操作

Docker 简介背景开发和运维之间因为环境不同而导致的矛盾集群环境下每台机器部署相同的应用DevOps(Development and Operations)简介Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用 Do

2020-07-12 15:32:28 235 1

转载 springboot之事件监听机制

一、观察者模式1.涉及到的类public interface Observer { /* 观察者必须要实现这个接口,其实就相当于,A实现了这个接口,B发生改变的时候,顺便调用一下A的update方法。 */ void update(Observable o, Object arg);}//可以理解为,事件源和通知者的结合体//用大白话讲就是,我的XXX被改变了,然后我要通知一下所有观察我的人public class Observable { ……

2020-07-07 07:48:51 326

原创 spring源码解析三

前面两讲讲到了应用上下文的初始化,比较重要的点就是在初始化Reader读取器时,会想spring的bean工厂添加6个beanDefinition对象。而register(componentClasses)也不过是将配置类转化为bd,交给spring的bean工厂。前面对于refresh()方法却讲解的比较少,今天我们就来详细讲解refresh()方法。/** * spring初始化spring环境 * @throws BeansException * @throws IllegalState

2020-06-13 19:31:32 129

原创 spring源码解析二

spring的bean工厂类是DefaultListableBeanFactory,工厂对象坐落在applicationContext对象中,它是在AnnotationConfigApplicationContext的父类是GenericApplicationContext的构造方法中初始化了初始化的下面来讲解工厂类中的重要属性:/** Optional OrderComparator for dependency Lists and arrays. */// 决定了实例化bean的实例化顺序,前面讲

2020-05-09 08:49:44 151

原创 spring源码解析一

查看spring源码方法1,使用intellJ IDEA 反编译class文件,反编译过来的文件不能编辑,也没有注释。2,使用maven自动下载下来的,此时的文件也不能编辑,有注释。3,在github上下载spring源码,然后在本地构建。第3中种方式是极力推荐的方式AnnotationConfigApplicationContext 注解配置应用上下文下面这行代码就会把spring所有的前提环境都准备好,bean工厂,容器以及对象的实例化都会准备好AnnotationConfigAppli

2020-05-08 20:51:14 1388

原创 7种单例模式

7种单例模式单例模式模式是脱离语言的。问题的由来:为什么?多个线程操作不同实例对象。多个线程要操作同一对象,要保证对象的唯一性解决的问题:实例化过程中只实例化一次解决的思路有一个实例化的过程(只有一次),产生实例化对象 new提供返回实例对象的方法:getInstace()单例模式的分类线程的安全性、性能、懒加载(lazy )1) 饿汉式public class HungerySingleton { //加载的时候就产生的实例对象 private static H

2020-08-27 22:42:51 138

原创 并发专题-Volatile关键字实现原理

1、认识volatile关键字程序举例用一个线程读数据,一个线程改数据存在数据的不一致性2、机器硬件CPU与JMM(1)CPU Cache模型程序的局部执行原理:使用某数据时,会将这一区域的数据全部加载(2)CPU缓存的一致性问题CPU修改内存中的共享数据的步骤:1,从内存中加载数据到Cache,寄存器2,CPU修改修改寄存器中的数据,然后更新到cache3,把更新额数据结果刷到内存数据不一致性问题,A线程修改共享变量,B读取的结果可能是修改前的,也有可能是修改后的。数据不一致的解

2020-08-27 22:36:51 149

转载 WebApplicationType分析

最近在研究Spring,先看一个简单的例子。@SpringBootApplicationpublic class SampleWebServicesApplication { public static void main(String[] args) { SpringApplication.run(SampleWebServicesApplication.class, args); }}SpringApplication源码public static ConfigurableApp

2020-07-05 14:15:16 10847

转载 MySQL

一、索引B+ Tree 原理1. 数据结构B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 keyi 和 keyi+1,且不为 null,则该指针指向节点的所有 key 大于等于 keyi 且

2020-07-04 23:31:31 140

转载 redis三个缓存问题 (缓存雪崩,缓存击穿,缓存穿透)

今天来看看redis三个缓存问题 (缓存雪崩,缓存击穿,缓存穿透)还是按照常规,来一张期待已久的图片简单说一下上面数据的流程:当用户发出一个请求,服务器会对其进行解析,然后就是去查找数据啦第一步去reids缓存查找数据,如果查到想要的数据就返回给用户如果在reids缓存汇总没有查找到数据,则进入mysql数据库查找数据,然后把数据结果返回给用户,同时将该数据写进redisredis缓存雪崩定义:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB

2020-07-04 23:03:13 184

原创 springboot源码1

Springboot源码一springboot源码解读,我们先从springboot的应用开始。@RestController修饰后的类里面的方法不用再使用@ResponseBody注解源码编译Spring Boot官方建议使用./mvnw clean install或者标准的mvn clean install命令来编译源代码,如果要使用标准的mvn命令的话,Maven的版本要求在3.5.0或以上。使用下面命令./mvnw clean install [-DskipTests -Pfast]mvn

2020-07-04 16:37:23 279

原创 2020-07-04

最近除了睡觉,就是吃饭学习,每天大概能花16个小时在学习了,工作8小时,下班后也争取每天学习也8小时,我会尽量把博客完善的。

2020-07-04 01:53:41 74

原创 使用springMvc模拟springboot

SpringMVC1, 添加jar依赖2,非web环境,程序的入口在main方法入口,而main函数的入口在listener中。初始化顺序是listener先于filter先于servlet。因此要添加一个listner。这里就有疑问了,难道时至今日,我们还要去在web.xml中去添加Listener?? 所以解决办法来了。3,手写一个类,实现WebApplicationInitializer接口,重写它的onStartup()方法,tomcat底层会自动去调用ServletContainerInit

2020-07-02 07:33:50 188

转载 spring注解之@Import注解的三种使用方式

spring注解之@Import注解的三种使用方式目录1、@Import注解须知2、@Import的三种用法3、@Import注解的三种使用方式总结一、@Import注解须知1、@Import只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中2、加入IOC容器的方式有很多种,@Import注解就相对很牛皮了,@Import注解可以用于导入第三方包 ,当然@Bean注解也可以,但是@Import注解快速导入的方式更加便捷3、@Import注解有三种用法二

2020-07-01 00:57:33 140

原创 Mybatis源码1

mybatis解析mapper.xml有四种方式,url,resource,package,class。第一种,class 基于mapper接口类具体路径配置这种情况下,如果是非注解模式的话xml配置文件必须和这个类在同一级目录,且与Mapper类同名。项目结构类似第二种: 基于mapper类所在包的package路径配置其实这算是第一种的一个变种。一个配置mapper类,每次新加删除比较麻烦,直接扫描mapper类所在包。项目结构类似第三种: 把 Mapper 的xml配置文件单独放置到

2020-06-29 21:15:34 93

转载 CGLIB原理及实现机制

CGLIB原理及实现机制什么是CGLIBCGLIB(Code Generator Library)是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。Hibernate作为一个比较受欢迎的ORM框架,同样使用CGLIB来代理单端(多对一和一对一)关联(延迟提取集合使用的另一种机制)。为什么使用CGLIBCGLIB代理主要通过对字节码的操作,为对象引入间接级别,以控制对象的访问。我们知道Java中有一个动态代理也是做这个事情的,那我们为什么

2020-06-17 08:45:45 1951

原创 spring提供干涉Spring工厂的方法---草稿版

spring提供了两种方式允许我们来参与bean工厂的建设1,BeanFactoryPostProcessor,实现这个接口,重写它的方法,可以拿到beanFactory对象,修改bd的属性2,ImportBeanDefinitionRegistrar实现这个接口,重写它的方法,可以使beanFactory的BeanDefinitionMap暴露出来。向spring工厂注册bd有以下几种方法applicationContext.register() 需要一个类参数,程序员无法参与过程appli

2020-06-13 22:48:09 90 1

原创 代理设计模式-Proxy

设计模式—proxy什么是代理增强一个对象的功能买火车票,app就是一个代理,他代理了火车站,小区当中的代售窗口java当中如何实现代理java实现的代理的两种办法代理的名词代理对象 增强后的对象目标对象 被增强的对象他们不是绝对的,会根据情况发生变化静态代理继承 :代理对象继承目标对象,重写需要增强的方法; 缺点:会代理类过多,非常复杂聚合: 目标对象和代理对象实现同一个接口,代理对象当中要包含目标对象。 缺点:也会产生类爆炸,只不过

2020-05-24 18:28:37 116

原创 spring-aop应用

自定义注解XML文件用于描述元数据 自定义注解与xml一样,也是用于,描述元数据。 话不多说,我们来一个demoimport java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/*** 自定义注解中,有很多方法* 元数据是修饰注解的数据

2020-05-23 12:47:51 237

原创 spring-ioc应用2

spring懒加载官网已经解释的非常清楚了:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lazy-init值得提醒的是,如果你想为所有的对象都实现懒加载可以使用官网的配置springbean的作用域文档参考:https://docs.spring.io/spring-framework/docs/current/spring-frame

2020-05-21 00:37:39 135

原创 spring-ioc应用

IOC(Inversion of Control)控制反转, 将对在自身对象中的一个内置对象的控制权反转。所谓的反转,即把内置对象的控制权反转给一个容器,而应用程序只需要提供对象的类型即可。是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)IOC是一种需要达到的目标,DI和DL是实现的手段。他们之间的关系就像ORM(关系映射)和mybatis

2020-05-18 00:16:17 130 1

原创 Python03-函数与过程编程

定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可特性:1. 减少重复代码2. 使程序变的可扩展3. 使程序变得易维护语法定义:def sayhi(x,y):#函数名,定义过程和函数都是与def开始,然后是函数名(),函数可以带形参 '''文档注释,对方法进行说明''' print("Hello, I'm nobody!") return Xxx #带返回值得称为函数,不带返回值得称为过程。函数可以返回多个obje

2020-05-13 00:54:36 1266 1

原创 spring源码分析五-日志体系

日志spring5日志打印使用的是 java.util.logging,也会使用jcl,只不过是srping-jclspring4日志打印使用的是log4j,使用的是jcl,即commons-logging.jarjava常用的日志结束:log4j, logback,log4j2, jul(java.util.logging,也就是jdk14Logger), slf4j, simple-log, jcl(jakata commons-loging,jcl现在已经停止更新,比jcl更优秀的slf

2020-05-12 21:34:57 272 1

原创 Python05-常规模块

1,定义:模块:逻辑上组织python代码,本质就是.py结尾的python文件包:用来从逻辑上组织模块。本质是一个目录,但是它带有一个__init__.py文件2,导入方法import module1,module2 可以通过模块名.变量,模块名.函数()来调用。相当于解释器把导入的模块的代码解释了一遍,然后模块中的代码赋值给了变量名为模块名的变量。from 模块名 import * 导入该模块中的变量函数等一切,当然*也可以是具体的变量或者函数,而且在外面使用时不用通过模块名.变量这种方式

2020-05-10 20:57:56 150

原创 Python04-装饰器与迭代器

装饰器定义:本质是函数,也是使用def关键字定义,(装饰其他函数)为其他函数添加附加功能。原则:1,不能修改被装饰的函数的源代码。2,不能修改被装饰的函数的调用方式。函数即“变量”:定义函数时即是将函数体赋值给了变量名为函数名的变量高阶函数:单独使用高阶函数也能给原函数添加新功能,只是会改变调用方式,或添加不了新功能;原函数必须在新函数调用时才执行。嵌套函数高阶函数+嵌套函数=》装饰器 :使用高阶函数时为了不修改原函数func(源代码), 将原函数func传递进去,然后使用嵌套函数,在内部定义

2020-05-08 21:33:06 102

原创 Python02-数据类型与计算

数据类型与运算1、整型 python2.XX里分整型和长整型;python3.XX里没长整型,都是int整型。python和其他语言不同,是没有指定整型的位宽的,因此整型不存在数值大小限制,但是由于机器寻址能力的关系,整型数值的大小仍然受机器本身限制。整型数据溢出时自动扩展。浮点占8个字节,共64位,其中52位表示底,11位表示指数,最高位1位表示符号。2、布尔值,真或假对应1与0,True和False,注意是首字母大写3、字符串,可打印字符的序列,常用功能:* 移除空白* 分割* 长度*

2020-05-08 21:24:55 244

原创 Python01-初识python

Python应用领域云计算 web开发 系统运维 金融(量化交易,金融分析)编译型语言:源代码—>>> 目标文件---->>>链接程序(可执行文件),诸如C语言。适合执行速度快,大型应用程序和数据库系统。Python 解释型语言,边解释边执行,它的运行离不开解释器,执行效率比编译型语言效率低很多。 解释型语言更容易移植, 只要有相应的解释器,移植不是问题。动态类型语言 是指在运行期间才会做数据类型校验。python和rubby静态类型语言的数据类型

2020-05-08 21:10:32 145

servlet 3.1规范

此篇文档详细介绍了servlet 3.1规范,包括servlet的变更历史,参考价值较高!

2017-10-07

JAVA servlet API说明文档

servlet容器的详细说明,包括里面接口的方法。内容如下:RequestDispatch, servlet, servletConfig, servletContext。。

2017-10-07

空空如也

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

TA关注的人

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