自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入学习JVM(Java虚拟机)

运行时数据区方法区:方法区只有一个,是线程共享的,生命周期和虚拟机一样。存储类信息,常量,静态变量和编译后的代码,常量池。方法区满了会OutOfMemoryError(OOM)。堆:堆也只有一个,是线程共享的,生命周期和虚拟机一样。存储的是对象。堆满了也会OOM.虚拟机栈:是线程私有的,生命周期和创建的线程一样。存储8种基本数据类型和对象的引用,每调用一个方法就会把一个栈帧压栈。栈满了会报错StackOverflowError。Java虚拟机栈,执行方法的时候,到底经历什么? ja...

2023-09-22 11:13:05 359

原创 面试被问:Mysql的InnoDB下RR是如何解决幻读问题的

Mysql的InnoDB下RR是如何解决幻读问题的,应该从多个方面开始回答

2023-09-19 18:20:20 452

原创 Java垃圾回收机制(GC)

1.垃圾回收算法1)标记清除算法:标记:先进行扫描,将已存活的对象进行标记;清楚:对堆内存进行遍历,回收没有标记的对象;缺点:清楚后会产生大量不连续的内存碎片,也就是碎片化问题;这个问题可能导致后续创建较大的对象时无法找到足够的连续空间继而再次触发垃圾回收。2)复制算法:将可用内存分为对象面和空闲面,在对象面上创建对象,若对象面满,就将还存活的对象复制到空闲面,然后将对象面的所有对象清楚。这个算法解决了碎片化的问题,特别使用Eden区,因为Eden区对象的存活率很低,所以所需复制的对

2022-03-30 22:35:38 2975

原创 MySQL的事务与锁

目录什么是事务事务的特性事务并发产生的问题事务隔离级别事务隔离级别的实现MVCCRead View(一致性视图)锁(LBCC)锁的算法什么是事务事务就是一条sql语句或者多条sql语句所组成的逻辑执行单元,要么全部执行成功要么全部执行失败,目的是保证数据的一致性。并不是所有的存储引擎都支持事务,InnoDB,NDB是支持事务的。事务的特性在Mysql中事务的四大特性主要包含:原子性(Atomicity)、一致性(Co...

2022-03-23 16:53:40 2286

原创 Redis进阶篇

1、掌握Redis的高级特性,例如发布订阅、事务、Lua脚本2、掌握Redis的底层工作原理,包括单线程工作机制、内存回收、持久化1.发布订阅模式publish 发布subscribe 订阅unsubscribe 取消订阅2.redis事务redis的单个命令是原子性的,但是多个命令我们该怎么保证原子性呢可以保证有序性和原子性。multi 开启一个事务 会把后续的操作命令放进队列exec 执行事务discard 取消事务watch 相当于cas乐观锁.

2022-03-17 13:23:11 1484

原创 Redis基础篇

Redis非关系型数据库关系型数据库基于行存储数据,二维的模式 存储结构化的数据,数据存储有固定的模式(schema) 表与表之间存在关联(Relationship) 大都支持SQL(结构化查询语言)的操作,支持复杂的关联查询 通过支持事务ACID,来提供严格或者实时的数据一致性关系型数据库的不足要实现扩容的话,只能向上(垂直)扩展,不支持动态的扩缩容 表结构修改困难,因此存储的数据格式也受到限制 高并发情况下,基于磁盘的读写压力比较大非关系型数据库的特点(nosql)存储非

2022-03-13 22:59:47 1427

原创 MySQL的索引

索引1.索引的数据结构B树多路平衡查找树B树减少了层高 所以buffer Pool可以放更多的数据。B树的问题:查询连续数据时(范围查找时)可能会发生多次的磁盘IO.比如我们想查找5~15的数据,我们就需要在磁盘块2查找完5数据后在返回磁盘块1然后再判断6应该再哪个磁盘块里,5~15需要多次的遍历多次的进行磁盘IO。这显然会降低我们的查找速度 而且存放data也会占用空间 树还是不够矮B+树非叶子不存放data只存放索引的值叶子节...

2022-03-06 15:44:38 545

原创 Java并发编程

一.何为并发我们先从生活场景中找个例子;大家有没有排队买过奶茶,往往会排很长很长的队伍,因为要做奶茶,做奶茶的速度赶不上买的人的速度。那么这个场景去其实就是并发。那么映射到我们的并发编程,就是一个接口假如同时有100个人访问,那么这个就属于并发。那么什么是高并发?高并发就是我系统能承受的并发数,所以,高并发其实是跟我们的系统有关的,比如一个小奶茶店,一个上午只能做500杯奶茶,那么如果有个3,400人排队,其实就是已经属于高并发了,那么500就是你系统能承受的...

2022-03-01 20:14:22 782 1

原创 线程池学习

目录为什么引入线程池自定义线程池线程池的执行流程为什么引入线程池创建过多线程带来的问题:消耗内存资源 CUP的开销(上下文切换)所以引入了线程池的概念线程池的逻辑就是提前创建好若干个线程,放进一个容器里(HashSet),如果有任务,就把这个任务分配给线程池中的线程来执行。线程执行完任务不会销毁,而是就是等待任务的分配。线程池的好处避免频繁创建销毁线程带来的性能开销(复用线程) 合理设置线程大小避免出现资源瓶颈(控制资源数量)Java中提供的线程池//

2022-03-01 20:13:03 346

原创 JUC源码学习

目录1.LockReentrantLock源码解析公平锁和非公平锁的区别什么是AQSSynchronized和Lock的区别2.Condition( 线程通信)3.BlockQueue阻塞队列4.CountDownLatch5.Semaphore(信号灯)6.Atomic原子类1.LockLock是JUC下控制锁的接口,它要比前面用到的Synchronized更加灵活。他有一些方法lock()加锁 unlock()释放锁,它与lock()配套使用

2022-02-23 14:58:31 986

原创 深入学习ThreadLocal

目录1.ThreadLoca的作用2.ThreadLocal源码get方法set方法扩容机制Hash冲突时3.ThreadLocal面试常问ThreadLocal怎么解决hash冲突的?ThreadLocal怎么解决内存泄漏的?value为什么不能用弱引用?1.ThreadLoca的作用ThreadLoca的作用:可以实现线程隔离简单案例了解一下ThreadLocapublic class ThreadLocalDemo { public

2022-02-21 00:31:22 389

原创 Java四大引用(强、软、弱、虚)

目录强引用软引用弱引用虚引用强引用也是我们平时用得最多的,new一个对象就是强引用,例如 Object obj = new Object(); 当JVM的内存空间不足时,宁愿抛出OutOfMemoryError使得程序异常终止 也不愿意回收具有强引用的存活着 的对象!记住是存活着,不可能是你new一个对象就永远不会被GC回收。 如果将引用赋值为null时,你的对象就表明不是存活着,这样就会可以被 GC回收了当内存不足的时候,jvm开始垃圾回收,对于强引用的对象,就算.

2022-02-19 23:43:47 278

原创 SpringBoot实现文件上传与下载

目录文件上传文件下载文件上传配置文件中配置文件上传相关参数application.yml配置#自定义属性file: path: D:/public/spring: servlet: multipart: #开启文件上传 enabled: true #单个文件最大限制 max-file-size: 100MB #单个文件最多请求文件 max-request-size: 100MB

2022-02-19 13:55:27 544 2

原创 SpringBoot整合Filter、Listener

Filter过滤器方式一:直接在过滤器中添加@WebFilter注解在启动器中添加@ServletCompoenentScan@WebFilter(urlPatterns = "/test2")public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.p

2022-02-18 22:24:45 380

原创 SpringBoot整合Servlet

方式一:加入web-staer<!-- spring boot web依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>创建servletDemo,继承HttpSevlet@

2022-02-18 20:06:28 476

原创 当面试被问:请你说说你对Spring Boot自动装配与条件装配的理解

我的回答是springboot的自动装配就是比如当我们在用redisTemplate这个对象的时候,我们明明没有手动的把这个bean注册spring容器中,但是我们却可以从spring容器中拿到这个对象,这就是在我们加入了redis-stater依赖的时候,springBoot帮我们实现了自动装配。自动装配的实现其实就是一种约定优于配置的思想,在我们springBoot的启动类上有@SpringBootApplication注解,它其实是有三个 注解组成,其中的@EnableAutoConfigu

2022-02-17 21:51:05 786 2

原创 手写 redisson starer组件

目录一.手写redisson starer组件创建项目编写RedissionAutoConfiguration编写RedissionProperties编写spring.factories文件编写additional-spring-configuration-metadata.json打包二.加入Spring Boot项目测试一.手写redisson starer组件项目结构redission-spring-boot-starter创建项目先加入sp.

2022-01-30 09:48:05 1646

原创 Spring Boot入门

一.为什么要使用Spring BootSpring虽然是个轻量级的框架,但是当我们业务复杂时,需要加入的组件也会增多,随之我们配置的bean也会增多,那么我们的配置会变的非常的繁杂。回想一下我们如何构建SpringMVC项目:创建一个项目结构( maven/gradle) spring的依赖,spring mvc . servlet api的依赖 web.xml,DispatcherServlet 启动一个Spring MVC的配置,Dispatcher-servlet.xml 创建一.

2022-01-29 20:39:08 481

原创 Spring Boot自动装配原理

目录什么是自动装配?自动装配是如何实现的?什么是自动装配?我们可以先看一段代码@RestControllerpublic class RedisContorller { @Autowired RedisTemplate<String, String> redisTemplate; @GetMapping("/get") public String getName() { return redisTemplate.opsF

2022-01-28 21:46:14 3355

原创 redis配置远程连接

redis开启远程连接需要配置redis.conf文件1.找到bind 127.0.0.1把这段注释掉,或着改成bind 0.0.0.0,但是这两种方式我试了对我都不好使。我用的方式是改成bind 虚拟机的ip2. protected-mode yes 改成protected-mode no3.requirepass foobroad打开 设置你自己的密码我把密码设为root 就可以这样写requirepass root这时候远程就可以连接上了但是我的li...

2022-01-28 19:20:14 6157

原创 Mybatis整合到Spring Boot

1.先创建Spring Boot项目略在spring boot的启动类上加入@MapperSacn注解扫描我们的mapper接口,或者在mapper接口上加@Mapper注解加上注解后spring就可以扫描到我们的mapper接口,然后mybatis自动帮我们生成代理类放入spriing容器.2.加入相关依赖<dependencies><!-- spring boot web依赖--> <dependency>

2022-01-27 16:12:27 1778

原创 单体架构到微服务的演变

单体架构单体架构的弊端:用户量增长后,单个服务器的性能难以支撑 业务越来越复杂越来越多时,耦合性也会越来越强 数据量增加后对数据库也带来了压力集群优点:高可用(一台服务器挂了另一个服务器一样可以工作) 提升性能垂直化把业务结构垂直的划分,以电商系统为例,它可能会垂直的分为用户系统、商品系统、订单系统;每个系统有自己对应的数据库,但如果用户系统想查看购买的商品信息就要去商品库查询,就会造成重复的代码。服务化(SOA)面向服务的体系结构S...

2022-01-26 19:17:25 666

原创 Mybatis整合Spring的原理以及整合一个案例

一.Mybatis整合Spring的好处Mybatis整合Spring给我们带来的好处Spring可以帮我们管理对象 简化方法的调用Mybatis利用Spring的扩展点,把自己与Spring进行了整合注册会话工厂(SqlSessionFactory),不用手动创建<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 配置主配置文件地址

2022-01-23 00:45:37 677 2

原创 Mybatis执行流程、缓存机制、插件

JDBC连接数据库延迟加载批量操作逻辑分页 Rowbounds物理分页 pagehelper逆向工程通用Mapper tkMyBatis-Plus通用CRUD 条件构造 代码生成 分页 批量操作

2022-01-20 22:55:04 1214 3

原创 Mybatis入门(实现简单的CRUD)

目录一.先配置Mybatis主配置文件二.实体类三.Dao层(mapper)四.CRUD查询所有学生信息根据ID查学生信息添加学生修改学生信息删除学生一.先配置Mybatis主配置文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/

2022-01-19 20:34:04 1024

原创 Mybatis逆向工程

1.先导入逆向工程依赖<!-- mybatis逆向工程 --><dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.6</version></dependency>2.generator-confi

2022-01-18 22:49:45 61

原创 Spring事务传播机制与失效场景

一.Spring事务传播机制 首先一定是基于嵌套事务来讨论的,如果是一个事务就没什么意义了 比如现在有一个这样的例子::test调用methodB,methodB有Transactional,methodB调用 methodA,methodA也有事务 ,这个就是我们的嵌套事务PROPAGATION_REQUIRED(必须的):支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择,也是Spring 默认的事务的传播。 PROPAGATION_REQUIRES_NEW(需要新的).

2022-01-17 20:57:33 566

原创 Spring面试常问的问题

目录spring作用BeanFactory和FactoryBean的区别Spring的钩子方法注册bean的方式Bean的生命周期Spring如何解决的循环依赖DI与Aop的执行顺序spring作用帮我们管理对象以及对象的依赖轻量级框架 减少代码侵入松耦合BeanFactory和FactoryBean的区别FactoryBean 他本身就是一个bean 他可以通过getObject放发去创建bean,所以他是创建bean的一种方式BeanFactory 是

2022-01-16 22:56:28 183

原创 Spring三级缓存解决循环依赖

目录一.普通依赖二.循环依赖一.普通依赖比如ClassA 依赖 ClassB@Component public class ClassA { @Autowired private ClassB classB; }流程:1.getBean(classA) -> doGetBean(classA)2.getSingleton(classA,true) singletonsCurrentlyInCreation也是空 返回null3.this.g

2022-01-15 19:04:16 249

原创 Spring中bean的生命周期流程

AnnotationConfigApplicationContex或者 ClassPathXmlApplicationContext都会进入AbstractApplicationContext 的 refresh方法1.obtainFreshBeanFactory()解析XML 封装成BeanDefinitionsBeanDefinitions里会存放beanName beanClass 是否单例 是否懒加载这些字段先会创建BeanFactory对象 调用refreshBeanFact..

2022-01-14 20:26:38 362

原创 常用设计模式与七大设计原则脑图

2022-01-12 20:07:58 202 2

原创 正则表达式

正则表达式的常见应用场景批量提取、替换有规律的字符串在各种高级文本编辑器中的使用在各类办公软件(Office等)中使用各种开发语言中的使用(C#、Java、JS、Perl、PHP等)用户输入的合法性验证(IP地址、特殊的订单号要求等)模板引擎的标签库开发网络爬虫(抓取机器人)的开发批量的文本高效处理...

2022-01-12 14:48:04 275

原创 Spring注册bean的方式

目录一.@Bean直接导入单个类二.@ComponentScan组件扫描三.@Import导入四.把需要注入的对象封装为FactoryBean一.@Bean直接导入单个类 //默认是方法名 //指定value 则以value为准 @Bean("stu") public Student stu() { return new Student("ws",100); }test@Test public void Tes

2022-01-11 14:30:02 1008

原创 Spring5赋值组件介绍

1.@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。组件可以被组件扫描器@ComponentScan扫描2.@Servicel用于标注业务层组件3.@Controller用于标注控制层组件4.@Repository用于标注数据访问组件,即DAO组件。5.@PropertySource读取配置文件6.@Value普通数据类型赋值Value赋值的三种方式普通赋值 @Value("zs") //创建完对象在进行赋

2022-01-10 20:00:07 216

原创 Spring5配置组件介绍

目录1.@Configuration2.@ComponentScan3.@Scope4.@Lazy5.@Conditional6.@Import7.给Ioc容器注册Bean的方式8.生命周期控制1.@Configuration说明:把一个类作为一个loC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。代码演示:Student实体类@Datapublic class Student { private S..

2022-01-10 18:08:41 405

原创 设计模式-建造者模式

目录一.什么是建造者模式二.代码演示一.什么是建造者模式建造者模式的优点:封装性好,创建和使用分离 扩展性好,建造类之间独立、一定程度上解耦建造者模式的缺点:产生多余的Builder对象 产品内部发生变化,建造者都要修改,成本较大建造者模式的适用场景:适用于创建对象需要很多步骤,但是步骤的顺序不一定固定。 如果一个对象有非常复杂的内部结构(很多属性) 把复杂对象的创建和使用分离二.代码演示用建造者的模式给一个学生类赋值Student类:@Datapu

2022-01-09 23:04:09 403 1

原创 设计模式-原型模式

目录一.什么是原型模式二.浅克隆三.序列化深克隆四.递归深克隆一.什么是原型模式原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。调用者不需要知道任何创建细节,不调用构造函数属于创建型模式优点:当对象的赋值过程比较繁琐时使用原型模式非常的方便缺点:必须配备克隆((或者可拷贝)方法 对克隆复杂对象或对克隆出的对象进行复杂改造时,易带来风险。 深拷贝、浅拷贝要运用得当原型模式的适用场景...

2022-01-09 11:20:54 686

原创 设计模式-策略模式

目录一.什么是策略模式二.代码演示一.什么是策略模式策略模式(Strategy Pattern)又叫也叫政策模式(PolicyPattern),它是将定义的算法家族、分别封装起来,让它们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户。可以避免多重分支的if...else...和switch语句属于行为型模式。比如当我们支付的时候一般会有两种选择一种是微信一种是支付宝,这就是一种策略策略模式的优点:策略模式符合开闭原则。 避免使用多重条件转移语句,...

2022-01-08 18:41:09 445

原创 设计模式-委派模式

目录一.什么是委派模式二.代码演示一.什么是委派模式委派模式(Delegate Pattern)又叫委托模式。它的基本作用就是负责任务的调度和任务分配,将任务的分配和执行分离开来。可以看做是一种特殊情况下的静态代理的全权代理。不属于GOF 23种设计模式之一。属于行为型模式。委派模式的优点:通过任务委派能够将一个大型的任务细化,然后通过统一管理这些子任务的完成情况实现任务的跟进,能够加快任务执行的效率。委派模式的缺点:任务委...

2022-01-08 14:02:35 693

原创 设计模式-代理模式

目录一.什么是代理模式二.代理模式的作用三.静态代理四.Jdk动态代理五.Cglib动态代理一.什么是代理模式代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客服端和目标对象之间起到中介作用。属于结构型设计模式。二.代理模式的作用设想这样的一个场景:我们想请杰伦演出,但是杰伦只唱歌别的琐碎的业务不想做,这时候还怎么办?这时候当然是需要找一个代理,来帮杰伦谈薪资,安排行程,买火车票。这就相相当与我们的代...

2022-01-06 22:50:41 1113

空空如也

空空如也

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

TA关注的人

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