- 博客(74)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 MySql中的索引
索引是数据库系统中的一种数据结构,它可以帮助我们快速检索数据,类似于书本的目录。数据库中的数据都是存储在磁盘上的,而对磁盘进行IO操作相比于CPU的寄存器、内存来说效率是非常慢的,所以对磁盘进行访问一直是程序运行效率的痛点,如何高效的访问磁盘数据成为了急需解决的问题,索引由此而生。
2024-03-28 10:21:07
489
原创 MyBatis整合Spring
MyBatis配置文件mybatis-config-spring.xmlSpring配置文件applicationContext.xml
2024-03-23 09:07:39
394
原创 MyBatis缓存
MyBatis中的一级缓存是默认开启的,它是sqlSession级别的缓存,一个sqlSession会话的查询操作保存在缓存中,之后的相同查询直接从缓存中获取。当执行insert、update、delete语句时,会清空一级缓存。一级缓存没有过期时间,不会自动清空,只有在执行更新操作后或者关闭sqlSession会话时才会清空。
2024-03-22 18:04:08
192
原创 MyBatis进阶应用
MyBatis自带逻辑分页对象RowBounds,通过设置offset和limit(从第几条开始,查询多少条),该方式本质上是将所有数据查询出来放在内存中进行筛选,数据量大的话效率会很低。:开启延迟加载后只有在调用关联对象的方法以及(equals、clone、hashCode、toString)方法时才会触发查询,也可以通过__配置触发的方法。在 mybatis 中的 xml 文件中,存在一些特殊的符号,比如:<、>、"、'、& 等,正常书写 mybatis 会报错,需要对这些符号进行转义。
2024-03-22 16:26:15
1724
原创 MyBatis全局配置文件
每次 MyBatis 创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成实例化工作。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认无参构造方法,要么通过存在的参数映射来调用带有参数的构造方法。如果想覆盖对象工厂的默认行为,可以通过创建自己的对象工厂来实现。还有许多类似的使用场景。MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。
2024-03-21 15:29:49
537
原创 MyBatis入门应用
MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。可以通过简单的XML或注解来配置和映射原始类、接口和Java POJO为数据库中的记录。
2024-03-21 11:49:38
542
原创 设计模式总结
创建型:工厂模式、单例模式、原型模式、建造者模式。将对象的创建与客户端的使用进行解耦。结构型:代理模式、适配器模式、装饰器模式、门面模式、组合模式、享元模式、桥接模式。通过不同的方式(继承、组合、聚合)将类与类之间关系关联起来,以形成一个良好的软件体系结构。行为型:委派模式、策略模式、模板方法模式、责任链模式、迭代器模式、命令模式、状态模式、备忘录模式、解释器模式、中介者模式、观察者模式、访问者模式。将对象处理请求的行为分离出来,使程序更加健壮。
2024-03-15 11:15:25
473
原创 访问者模式(Visitor Pattern)
访问者模式(Visitor Pattern)属于行为型模式,表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。该模式是将数据结构与数据操作分离的设计模式,是将作用于某种数据结构中的各元素的操作封装起来。该模式的实施前提是数据结构相对稳定,不会频繁变动,但是作用于结构上的操作又经常变动。
2024-03-14 16:56:32
684
原创 解释器模式(Interpreter Pattern)
解释器模式(Interpreter Pattern)属于行为型模式,是指给定一门语言,定义它的语法(文法)的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。是一种按照规定的语法(文法)对语言进行解析的模式。
2024-03-13 19:06:07
578
原创 中介者模式(Mediator Pattern)
中介者模式(Mediator Pattern)属于行为型模式,又称为调解者模式或调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
2024-03-13 11:40:53
519
原创 备忘录模式(Memento Pattern)
备忘录模式(Memento Pattern)属于行为型模式,又称为快照模式(Snapshot Pattern)或令牌模式(Token Pattern),是指在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
2024-03-12 16:29:55
337
原创 状态模式(State Pattern)
状态模式(State Pattern)属于行为型模式,也称为状态机模式(State Machine Pattern),是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
2024-03-11 22:23:29
320
原创 命令模式(Command Pattern)
命令模式(Command Pattern)属于行为型模式,是将一个请求封装为对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
2024-03-11 16:15:22
306
原创 迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern)属于行为型模式,又称为游标模式(Cursor Pattern),它提供一种顺序访问集合/容器对象元素的方案,而又无须暴露集合内部表示。本质:抽离集合对象迭代行为到迭代器中,提供一致访问接口。
2024-03-11 10:56:59
464
原创 责任链模式(Chain of Responsibility Pattern)
责任链模式(Chain of Responsibility Pattern)属于行为型模式,它是指使多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。从而避免请求的发送者和接收者之间的耦合关系。
2024-03-09 16:12:47
426
原创 组合模式(Composite Pattern)
组合模式(Composite Pattern)属于结构型模式,是将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
2024-03-08 11:39:22
438
原创 桥接模式(Bridge Pattern)
桥接模式(Bridge Pattern)属于结构型模式,是将抽象部分与它的实现部分分离,使它们都可以独立的变化。
2024-02-27 16:28:02
441
原创 kafka架构分析
Kafka简介Kafka是一款高吞吐量、分布式的发布—订阅消息系统。Kafka基本概念Broker:每个Kafka的实例成为代理(Broker),通常也成代理为Kafka服务器。Message/Record:消息是Kafka通信的基本单位,消息生产者会将消息序列化后发送给Kafka服务器,消息接收者则会反序列化获取消息。Producer:生产者负责将消息发送给代理,也就是向Kafka代理发送消息的客户端。Comsumer:消费者以拉取(pull)的方式拉取数据,它是消费的客户端。T
2022-05-23 14:07:51
242
原创 Redis集群与分布式
主从复制为了保证Redis服务的高可用,可部署多台Redis服务器,其中只有一个主节点,多个从节点,只有主节点可以执行写入操作。从节点从主节点进行同步,这种方式就叫做主从复制。info replication – 查看当前服务器的状态主从复制信息实现方式在从节点的配置文件中添加配置:slaveof 0.0.0.0 8888 – 添加主节点的IP与端口号在从节点中执行命令:slaveof 0.0.0.0 8888 – 添加主节点的IP与端口号在启动从节点时执行命令:./redis-server
2022-05-22 10:57:49
283
原创 Redis 高级应用
发布订阅模式方法1订阅频道:可以一次订阅多个频道subscribe channel-1 channel-2 channel-3向指定频道发布消息:publish channel-1 1234取消订阅(不能在订阅状态下使用):unsubscribe channel-1方法2消费端1,关注运动信息psubscribe *sport向指定频道发布消息:publish swim-sport sunyangRedis事务multi 开启事务exec 执行事务discard 取消事务w
2022-05-20 17:55:09
429
原创 Redis数据库类型与应用
String类型Stirng可以存储的类型有三种:String字符串、Int整数、Float浮点数。String类型常用命令set key value [EX|PX] [NX|XX] – 将kv对保存在redis中,ex代表存活时间秒,px代表存活时间毫秒,nx代表不存在则设值,xx代表存在则设值get key – 根据key获得value值mset key value [key value] – 批量设值mget key [key] – 批量获取strlen key – 获取长度a
2022-05-20 11:59:33
94
原创 Redis基础
Redis基本特性Redis是一款功能强大、支持多种数据类型的数据库,它具有许多优秀的特性,具体如下:支持多种计算机编程语言,如Java、C、C++、Python、PHP、Lua、Ruby、Node.js、C#、GoLand等;具有丰富的数据类型,如String、List、Set、Hash、Sorted Set等;读/写速度快,性能高。官方给出的数据是:Redis能读的数据是11万/s,写的数据是8.1万/s;支持持久化。Redis的持久化也就是备份数据,它每隔一段时间就将内存中的数据保存在磁盘
2022-05-20 10:48:40
405
原创 JVM基础
类加载机制1. 装载1. 通过全限定类名找到该类2. 在方法区中保存该类的描述信息3. 在Java堆中生成一个代表这个类的java.lang.Class对象类加载器类加载器名称说明Bootstrap ClassLoader加载$JAVA_HOME中jre/lib/rt.jar里所有的class或Xbootclassoath选项指定的jar包Extension ClassLoader加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib
2022-05-18 14:57:59
280
原创 SpringBoot原理
SpringBoot原理1. run方法SpringApplication.run()方法返回的是一个ApplicationContext对象,既然是ApplicationContext,那肯定就是做了IoC容器的初始化操作,只不过增加了一些其他的处理,比如用Watch记录初始化时间、创建上下文、刷新上下文等等。最主要的还是refreshContext方法,该方法最终会进入到Spring核心初始化方法(refresh())中去。2. SpringBootApplication注解该注解是一个组合注
2022-01-05 20:13:50
293
原创 SpringBoot初探
1. 什么是SpringBootSpringBoot并不是一个新的技术框架,只是在Spring的基础上进行封装,它有以下几个特点:能够非常方便快捷的创建一个Spring项目内置Tomcat、Jetty等Web容器自动装配,能够很好的集成一些框架只需要很少的配置文件即可运行2. SpringBoot项目的构建方式2.1 通过官网生成https://start.spring.io/ 快速生成2.2 IDEA在线模板生成本质上跟官网生成一样,只不过是在IDEA中操作的2.3 通过Mav
2022-01-05 14:06:03
1250
原创 SpringMVC原理
SpringMVC原理SpringMVC原理大概分为两个步骤:初始化阶段调用阶段1. 初始化阶段从Servlet的init()方法入口,最终调用DispatchServlet的onRefresh()方法初始化9大组件,其中比较核心的三大组件:HandlerMapping:保存Url与Method的对应关系HandlerAdapter:适配器,动态解析客户端传入的参数,并通过反射执行Method方法ViewResolver:视图解析器,通过方法返回的内容进行解析2. 调用阶段从Di
2022-01-03 16:18:27
77
原创 SpringAOP原理
SpringAOP原理SpringAOP原理主要分为三个部分:创建代理类代码织入通知回调1. 创建代理类AOP的入口在Spring依赖注入之后的初始化方法中(initializeBean),在Bean初始化完成之后,会调用BeanPostProcessor的后置处理器方法,该处理器的实现类AbstractAutoProxyCreator负责代理类的创建。该类首先会获得Spring中所有的通知Advice,并根据当前对象进行切入点表达式的匹配,如果能够匹配上则表示当前对象需要增强。在创建代理过
2022-01-03 16:02:46
319
原创 SpringDI原理
SpringDI原理SpringDI依赖注入大概分为两个部分:实例化对象依赖注入1.实例化对象通过容器的getBean方法触发对Bean的实例化与依赖注入,BeanFactory会根据之前缓存的BeanDefinition配置信息,通过反射实例化对象。2.依赖注入依赖注入的入口是populateBean方法,在IoC初始化过程中,Bean的字段信息会被封装成PropertyValue数据,Spring会根据ProertyValue循环赋值。如果是自动装配,则会在postProcessPro
2022-01-03 15:41:43
444
原创 SpringIoC原理
SpringIoC原理SpringIoC初始化的过程大概可以分为三个步骤:定位加载注册1. 定位IoC容器初始化步骤从AbstractApplicationContext.refresh()方法开始,创建BeanFactory对象,根据配置的扫描路径,定位到哪些bean需要被Spring管理。2. 加载有了Bean的定位信息,Spring会创建BeanDefinitionReader去读取这些Bean的信息,并封装成BeanDefinition对象。BeanDefinition对象保存的
2022-01-03 15:28:21
357
原创 Spring应用之MVC
1. 构建SpringMVC项目1.1 通过Maven构建一个web项目1.2 添加相关的依赖 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test&l
2022-01-02 20:47:02
268
原创 Spring应用之AOP
1. SpringAOP介绍AOP即面向切面编程,切面泛指系统中与主业务无关的代码,比如安全检查、日志记录、事物等等。AOP可以让主业务逻辑代码与切面代码分别开发,在运行时再进行合并。AOP减少了代码的纠缠,使业务逻辑代码更加清晰。术语说明切面切面泛指交叉业务逻辑。比如事务处理、日志处理就可以理解为切面。常用的切面有通知与顾问。实际就是对主业务逻辑的一种增强织入织入是指将切面代码插入到目标对象的过程。连接点连接点指切面可以织入的位置。切入点切入点指切面具体织
2022-01-02 16:41:11
228
原创 Spring应用之IoC与DI——基于XML实现
什么是IoC与DIIoC(控制反转):抽象来说是一种思想,我们开发过程中所有的对象都可以交给Spring进行管理,我们直接获取即可,不需要自己动手创建,即对象管理权的反转。具体来说IoC在Spring中是一个容器,一个管理对象的容器。DI(依赖注入):Spring创建对象过程中,对对象所依赖的属性进行赋值,这个步骤就是依赖注入。基于XML配置文件的方式实现1. 基本使用1.1 添加依赖创建Maven项目并添加Spring核心依赖 <dependencies>
2022-01-02 14:15:42
463
原创 Spring中的注入方式
Spring中的注入方式Spring中有几种注入方式字段注入构造注入setter方法注入字段注入字段注入是平时开发中最常使用的注入方式,因为简单方便,可读性强。但是Spring官方不建议我们使用这种注入方式,在IDEA中使用字段注入时会给出黄牌警告。如下代码所示:package com.wxw.controller;import com.wxw.service.IUserService;import org.springframework.beans.factory.annotati
2022-01-01 14:51:36
590
原创 Spring中的循环依赖
Spring循环依赖什么是循环依赖Spring容器中多个Bean之间互相依赖,形成一种环形调用。Spring是如何解决循环依赖Spring中使用了三级缓存来解决循环依赖的问题,但是有2个前提:1.循环依赖的Bean必须是单例的,因为非单例的Bean每次从容器中获取时,都会创建新的对象,所以非单例的Bean不会放入三级缓存中;2.循环依赖的Bean必须使用字段注入或setter注入,使用构造函数注入时会报错。三级缓存介绍名称说明singletonObjects(一级缓存)
2021-12-31 21:36:10
100
原创 Spring中Bean的生命周期
Spring中的Bean的生命周期1. 什么是Spring中Bean的生命周期Spring最大的特点就是面向Bean(BOP)编程,Spring所管理的Bean是一个POJO,即简单的JavaBean(不需要实现任何规范的Bean)。Spring提供了很多方法可以对所管理的Bean对象进行功能增强,其中就包含了对生命周期的控制。2. Bean创建前的准备阶段在Bean被Spring创建之前,首先会实例化IoC容器,找到所有被Spring管理的Bean的配置信息。同时还会实例化BeanFactoryP
2021-12-30 17:40:32
362
原创 Spring应用——注解编程
基于注解的方式实现1.配置注解注解名称说明@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。@ComponentScan在配置类上添加 @ComponentScan 注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 context:component-scan@Scope用于指定scope作用域的(用在类上)@Lazy表示延迟初始化@Conditiona
2021-12-24 13:16:12
320
原创 Spring应用之IoC与DI——基于Java配置类实现
基于Java配置类的方式实现定义配置类通过在类头部使用@Configuration注解表示这个类为Spring的配置类,相当于applicationContext.xml配置文件。package com.gupaoedu;import com.gupaoedu.pojo.User;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configurati
2021-12-23 20:28:53
382
Android sdk19 webview是怎么验证SSl
2022-05-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人