自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL函数

MySQL提供了众多功能强大、方便易用的函数,包括数学函数、字符串函数、日期时间函数、条件判断函数、系统信息函数和加密函数等其他函数。

2023-05-02 11:03:09 476 1

原创 MySQL优化之InnoDB锁

相对其他数据库而言,MySQL的锁机制比较简单,特点是不同的存储引擎支持不同的锁机制,比如MyISAM和MEMORY采用的是表级锁,BDB采用的是页面锁(也支持表级锁),InnoDB既支持行级锁,也支持表级锁,默认情况下采用的是行锁。表级锁:开销小,加锁快,不会出现死锁,锁定粒度大,锁冲突概率最高,并发度最低行级锁:开销大,加锁慢,会出现死锁,锁定粒度最小,所冲突概率最低,并发度最高页面锁:开销和加锁时间介于表锁和行锁之间,会出现死锁,粒度介于表锁和行锁之间,并发度一般。...............

2022-08-06 17:06:27 1097

原创 MySQL安全之权限管理

可以发现登录后执行到第3个查询的时候提示已经查过最大查询的资源限制,为什么设置了3应该是执行到第6个查询的时候查询出错才对,为什么第三个查询就出错了呢,其实是MySQL里面很多非"select"语句都会归类到"查询",比如"show"、"desc"语句等,还有一些隐式的查询也包含在内,可以发现,user表中的select_priv列是"Y",而db表中却没有,也就是说,对所有数据库都具有相同权限的用户记录并不需要记入db表,而仅仅需要将user表中的select_priv改为"Y"即可。..........

2022-07-30 19:50:27 2131

原创 MySQL优化之查询成本

MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案,MySQL中一条查询语句的执行成本是由以下两个方面组成I/O成本MySQL中的数据和索引都存储到磁盘上,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作,这个从磁盘到内存这个加载的过程损耗的时间称为I/O成本CPU成本读取以及检测记录是否满足对应的搜索条件,对结果集进行排序等这些操作损耗的时间称之为CPU成本不同的mysql版本中默认的成本常数值是不同的server_cost表。.........

2022-07-16 19:23:41 1373

原创 MySQL优化之执行计划

通过使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理你的 SQL 语句的。分析查询语句或是表结构的性能瓶颈,总的 来说通过 EXPLAIN 我们可以: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用  哪些索引被实际使用  表之间的引用  每张表有多少行被优化器查询MySQL表创建:除了以 SELECT 开头的查询语句,其余的 DELETE、INSERT、REPLACE 以 及 UPOATE 语句前边都可以加上 EXPLAIN,用来

2022-07-02 18:43:53 1190

原创 spring异常处理

在项目中采用spring的异常处理机制:示例一、在Controller中加@ExceptionHandler注解定义异常拦截的方法,在方法中定义返回的页面:error.jsp示例二、将异常处理做成一个公共的:效果:两者区别:示例一只能捕获所属Controller中的方法抛出的异常,不能捕获其他Controller中的,示例二可以捕获所有Controller抛出的异常。下面看源码分析: 由handlerAdapter进行反射调用后,调到controller中的具体方法,抛出的异常最终被捕获,

2022-06-03 13:28:35 2589

原创 传输安全SSL

Tomcat可以通过两种方式支持SSL:一种是JSSE,一种是APR(默认使用OpenSSL引擎)。前者适用于BIO、NIO、NIO2链接器(8.5版本后,NIO和NIO2同时支持OpenSSL,以用于HTTP2.0),后者适用于APR链接器,以为JSSE和APR配置有明显区别,因此最好在Connector的protocol属性中明确指定链接器的类名,而非协议名(如HTTP/1.1),否则,Tomcat会自动按照本地配置构造Connector(如果安装了APR,则使用APR链接器否则使用NIO链接器),这样

2022-05-23 19:12:44 309

原创 Tomcat类加载器

java标准类加载器Bootstrap:用于加载JVM提供的基础运行类,即位于%JAVA_HOME%/jre/lib目录下的核心类库。Extension:加载除核心类库外的Jar包,即只要复制到指定的扩展目录下的Jar,默认的扩展目录是%JAVA_HOME%/jre/lib/ext。System:用于加载环境变量CLASSPATH指定目录下的或者-classpath运行参数指定的Jar包。System类加载器通常...

2022-05-22 19:41:18 786

原创 管道 模式

管道模式属于设计模式中责任链模式的变种

2022-05-20 23:12:51 784

原创 Tomcat总体架构

Server从最基本的功能讲,可以将服务器描述为一个应用,通常情况下最简单的服务器设计如下:​​​​​​​​​​​​​​​​​​​​​​​​​​​​通过start()方法启动服务器,打开socket链接,监听服务器端口,负责再接收到客户端请求的时候进行处理并返回响应。同时提供一个stop()方法来停止服务并释放网络资源。Connector和Container 请求监听和请求处...

2022-05-20 21:01:12 781

原创 IDEA远程调试

在tomcat bin目录下的catalina.sh中添加:export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'启动tomcat:看一下配置的端口有没有启动:idea配置:效果:

2022-05-15 23:00:46 119

原创 Mybatis之Mapper.xml解析

在springboot工程中,我们通过零配置的方式,配置了SqlSessionFactory@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); //设置数据源 sqlSessi

2022-05-07 21:32:39 4266

原创 Mybatis缓存

一级缓存:先看一个示例:@Testpublic void test (){ SqlSession sqlSession= sqlSessionFactory.openSession(); GmGoodsMapper gmGoodsMapper = sqlSession.getMapper(GmGoodsMapper.class); System.out.println("==============第一次查询==================");

2022-05-06 13:55:37 1728

原创 json参数解析--源码

示例:@Controllerpublic class TestController { @RequestMapping("/gmArea") @ResponseBody public GmArea gmArea(@RequestBody GmArea gmArea) { gmArea.setAreaName("@ResponseBody测试返回"); return gmArea;}那么json参数是如何解析的,接着上一篇说,spring

2022-05-02 21:57:34 1339

原创 springMVC请求的调用流程

先定义一个mvc的简单的配置类,定义一下视图解析:@Configuration@EnableWebMvc@ComponentScan(basePackages = "com.dongsq")public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void configureViewResolvers(ViewResolverRegistry registry) { reg

2022-05-01 19:51:15 1065

原创 springMVC零配置之MVC环境配置

先定义一个mvc的简单的配置类,定义一下视图解析:@Configuration@EnableWebMvc@ComponentScan(basePackages = "com.dongsq")public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void configureViewResolvers(ViewResolverRegistry registry) { reg

2022-04-30 20:37:57 331

原创 springMVC零配置之上下文配置

记得刚参加工作的时候,搭建springMVC框架还是需要手动配置web.xml文件,现在已经被渐渐淘汰了,在项目中几乎看不到有这种配置了,取而代之的是springMVC的零配置,原理就是tomcat的SPI的技术。通过spi机制,tomcat会扫描所有jar下的/META-INF/services/javax.servlet.ServletContainerInitializer文件。在SpringServletContainerInitializer中通过@HandlesTypes注解,将实现了

2022-04-30 10:06:38 1672

原创 @Transactional源码分析二:事务传播属性

当事务存在传播机制,又会重新进入以下代码:@Overridepublic final TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException { // Use defaults if no transaction definition given. TransactionDefinition def = (definition != nul

2022-04-23 17:29:53 843

原创 @Transactional源码分析一:事务的大致流程

spring中开启声明式事务@EnableTransactionManagement在TransactionManagementConfigurationSelector中,实现了ImportSelector接口,重写了selectImports方法,做了两件事情:1、注册事务的入口类;2、配置事务的切面信息TransactionAttributeSource是用于解析@Tranactional注解中的属性并封装成TransactionAttribute对象。事务切面在定义poincut的时候

2022-04-17 20:30:35 749

原创 jdk动态代理

举例:小明因为工作忙,没时间恋爱,父母比较着急,给小明介绍相亲对象,安排相亲…代码示例:public interface People { public void marry();}public class XiaoMing implements People{ @Override public void marry() { System.out.println("我是小明,我要结婚啦"); }}public class Parent imp

2022-04-09 12:29:55 611

原创 spring源码之代理生成

在收集完切面,当切面不为空,则生成代理对象。spring中有两种动态代理,一种是jdk动态代理,还有一种是cglib动态代理,默认采用的是jdk动态代理,看spring源码设计:在@EnableAspectJAutoProxy注解中,通过属性proxyTargetClass控制采用哪种动态代理,但jdk动态代理需要类实现接口,才能被代理,那如果没有实现接口怎么被代理?protected Object createProxy(Class<?> beanClass, @Nullable St

2022-04-05 22:54:11 510

原创 spring源码之切面收集

AOP中有三个重要的概念:advisor(切面)、切点(pointcut)、advice(通知)spring会对有切面的类生成代理@EnableAspectJAutoProxy开启切面功能在AspectJAutoProxyRegistrar中注册aop的入口类上图将AnnotationAwareAspectJAutoProxyCreator注册到BeanDefinitionRegistry中,看继承关系如图所示:所以AnnotationAwareAspectJAutoProxyCreato

2022-04-05 00:31:18 708

原创 spring中的循环依赖

示例:@Component@EnableTransactionManagementpublic class CircularRefA{ @Autowired CircularRefB circularRefB; @Override public String toString() { return "CircularRefA"; } @Transactional public void test(){ System.out.println("---------

2022-03-30 13:32:17 626

原创 Environment与占位符解析

示例:@Datapublic class StudentA { private String username; private String password;}<!--spring配置文件--><context:property-placeholder location="classpath:application.properties"/> <bean id = "studentA" class="com.study.dongsq.be

2022-03-26 16:18:47 327

原创 Bean生命周期

在bean完成实例化,依赖注入属性之后,接下来调用initializeBean方法protected Object initializeBean(String beanName, Object bean, @Nullable RootBeanDefinition mbd) { if (System.getSecurityManager() != null) { AccessController.doPrivileged((PrivilegedAction<Object>) () -&gt

2022-03-20 19:04:48 257

原创 spring源码之注解收集

实例化完成后接下来就需要对类中的属性进行依赖注入操作,类里面属性和方法的依赖注入一般用@Autowired或者@Resource 注解,核心方法为 applyMergedBeanDefinitionPostProcessors

2022-03-20 14:53:28 492

原创 spring源码之实例化

spring中bean的实例化:一、实例化factoryMethod方法对应的实例二、实例化带有@Autowired注解的构造函数三、实例化没有@Autowired注解的构造函数四、实例化无参构造函数一、实例化factoryMethod方法对应的实例protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) { // Make sure b

2022-03-20 01:51:20 262

原创 postProcessBeanDefinitionRegistry接口

实现BeanDefinitionRegistryPostProcessor接口,可以获得BeanDefinitionRegistry,BeanDefinitionRegistry可实现对BeanDefinition的增删改查操作,下面看一个对BeanDefinition的修改操作。

2022-03-14 19:55:31 1730

原创 spring源码之标签解析

AbstractApplicationContext类中refresh()方法为spring容器启动的核心方法,是spring容器启动的核心流程,是一个典型的父类模板设计模式,根据不同的上下文对象,会调用到不同的上下文对象子类方法中。核心的上下文子类有:1、ClassPathXmlApplicationContext2、FileSystemXmlApplicationContext3、AnnotationConfigApplicationContext4、EmbeddedWebApplicatio

2022-03-13 21:30:29 777

空空如也

空空如也

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

TA关注的人

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