09 2023 档案

摘要:Spring Boot 的启动流程包括以下几个步骤: 推荐这个 加载并且启动监听器 创建项目运行环境,加载配置 初始化 Spring 容器 执行 Spring 容器前置处理器 刷新 Spring 容器 执行 Spring 后置处理器 发布事件 执行自定义执行器 返回容器 载入 Spring Boot 阅读全文
posted @ 2023-09-26 14:10 xiuer211 阅读(153) 评论(0) 推荐(0) 编辑
摘要:Serial New(串行新生代收集器):这个收集器主要用于新生代,采用复制算法。它将新对象复制到一块干净的内存区域,并且在收集过程中会暂停应用程序的执行。 Parallel New(并行新生代收集器):与串行新生代收集器类似,也用于新生代,采用复制算法。不同之处在于它使用多线程来加速垃圾收集过程, 阅读全文
posted @ 2023-09-24 20:27 xiuer211 阅读(8) 评论(0) 推荐(0) 编辑
摘要:InnoDB MyISAM 事务 支持 不支持 外键 支持 不支持 存储结构 存储在一个文件里 分为三个文件存储frm文件存储表定义数据文件的扩展名为.MYD (MYData)索引文件的扩展名是.MYI (MYIndex) 锁 支持表锁,行锁 只支持表锁 总行数 遍历获取 读取变量 总结 MyISA 阅读全文
posted @ 2023-09-24 17:21 xiuer211 阅读(4) 评论(0) 推荐(0) 编辑
摘要:MVCC机制在读已提交级别下生效的。为了避免加锁导致的读写冲突导致性能下降的另外一套事务隔离机制。 MVCC需要提及以下概念 行的隐藏字段 trx_id:保存着对该条记录进行修改操作的事务id roll_ptr:指向历史版本的指针。(历史版本是指许多事务修改前的数据,类似链表的结构) read vi 阅读全文
posted @ 2023-09-24 13:39 xiuer211 阅读(29) 评论(0) 推荐(0) 编辑
摘要:加载,获取类的字节码,并且放到jvm的元空间中,生成Class对象链接 验证:验证字节码是否符合jvm的规范,是否安全等 准备:将静态变量赋默认值(不是自己的默认值,而是int是0这种) 解析:将符号引用转为直接引用 初始化:将静态变量赋初始值(自己写的初始值),执行静态代码块 使用 卸载:将Cla 阅读全文
posted @ 2023-09-23 20:05 xiuer211 阅读(5) 评论(0) 推荐(0) 编辑
摘要:new关键字 反射获取 Class#newInstance()方法 序列化 调用 ObjectInputStream 类的 readObject() 方法。 clone()方法 -Object内置的 阅读全文
posted @ 2023-09-23 18:34 xiuer211 阅读(4) 评论(0) 推荐(0) 编辑
摘要:假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是() boolean isOdd = false; for(int i=1;i<=2;++i){ if(i%2==1)isOdd = true; else is 阅读全文
posted @ 2023-09-22 19:02 xiuer211 阅读(54) 评论(0) 推荐(0) 编辑
摘要:expire (String key, long second) 设置n秒后过期 pexpire(String key, long milliseconds):设置 n 毫秒后过期。 expireAt(String key, long unixTime):设置某个时间戳后过期(精确到秒)。 pexp 阅读全文
posted @ 2023-09-22 14:28 xiuer211 阅读(1006) 评论(0) 推荐(0) 编辑
摘要:多态概念 多态意思是多种形态,在Java中,同一个行为有不同的表现叫做多态。例如,一个方法在不同的类中有不同的表现形势就是多态的一种。称为动态多态。 多态种类 多态有两种:静态多态和动态多态 静态多态 静态多态是在编译期确定下来的,通过方法的重载实现静态多态。 重载:一个类方法名字相同,参数不同。 阅读全文
posted @ 2023-09-21 19:21 xiuer211 阅读(30) 评论(0) 推荐(0) 编辑
摘要:为什么String是不可变的 字符串常量池 因为jvm设计了字符串常量池,将字符串缓存到字符串常量池。如果字符串是可变的,这样的缓存就变得效率低下了。 线程安全问题 如果字符串是可变的,假设有很多变量指向同一个字符串,如果这个字符串发生变化,从abc变为123,那么所有的变量指向的值发生变化,如果有 阅读全文
posted @ 2023-09-21 16:05 xiuer211 阅读(26) 评论(0) 推荐(0) 编辑
摘要:count(*) 和 count(1) 有什么区别?哪个性能最好? count(*) 和 count(1)没有区别,因为count(*)会优化为count(0) count(字段)的性能是最差的,因为要遍历一遍,并且还要比较是否是null 结论:count(*)=count(1)>count(字段) 阅读全文
posted @ 2023-09-13 22:32 xiuer211 阅读(34) 评论(0) 推荐(0) 编辑
摘要:MySQL 的数据存放在哪个文件? MySQL 的数据存放在哪个文件? 存放在idb文件中 表空间文件的结构是怎么样的? 段-区-页-行,四个等级 行:保存数据的最小单位 页:mysql按照页读取数据,默认页大小为16KB 区: B+ 树中每一层都是通过双向链表连接起来的,如果是以页为单位来分配存储 阅读全文
posted @ 2023-09-13 22:32 xiuer211 阅读(113) 评论(0) 推荐(0) 编辑
摘要:说一下索引覆盖,索引下推,回表 索引覆盖 是指在查询过程中,查询的数据都能在二级索引的树中找到,不用根据主键查覆盖索引 索引下推 没有索引下推:执行器发送查询条件给存储引擎查找,存储引擎找到一条之后就返回给执行器,执行器判断当前记录是否符合条件,符合保留,不符合丢弃。重复过程,直到存储引擎结束查找。 阅读全文
posted @ 2023-09-13 22:32 xiuer211 阅读(117) 评论(0) 推荐(0) 编辑
摘要:索引失效有哪些情况 模糊匹配使用左模糊或者左右模糊匹配 因为索引时按照从第一个字符开始排序,也就是按照前缀排序,左模糊查询的时候,符合查询条件的前缀是无规律的,并不能使用索引。 查询条件中对索引字段进行做了函数,类型转换,计算操作之后 因为索引保存的是原始值,并不是操作之后的数值,但是mysql8. 阅读全文
posted @ 2023-09-13 22:32 xiuer211 阅读(46) 评论(0) 推荐(0) 编辑
摘要:索引常见面试题 什么是索引? 索引是数据的目录,用来加快数据的搜索,类似书本的目录 使用的好处 加速数据查找 加速数据更新 加速排序 加速连接查询 优化数据库性能 分类 可以分为几个类型 数据结构 b+树索引,通过b+树存储索引,但是非叶子节点保存数据,叶子节点保存数据 hash索引:通过hash计 阅读全文
posted @ 2023-09-13 22:32 xiuer211 阅读(92) 评论(0) 推荐(0) 编辑
摘要:执行一条 SQL 查询语句,期间发生了什么? 连接器 :建立连接,身份验证 查询缓存:已经在mysql8.0被删除 解析sql 词法分析,解析关键词 语法分析,根据词法分析得出的关键词判断语法是否有问题 建立语法树 执行sql 预处理,检查表名和表字段是否存在,将select *的*转为全部字段 优 阅读全文
posted @ 2023-09-13 22:31 xiuer211 阅读(6) 评论(0) 推荐(0) 编辑
摘要:RDB相关问题 RDB 做快照时会阻塞线程吗? rdb提供两种命令来生成rdb文件,一个是save,一个是bgsave,save会阻塞线程,bgsave不会阻塞,可以通过save 参数一 参数二 设置rdb生成的时机,例如 save 60 1 表示在60秒内有修改一次数据,就会生成rdb RDB 在 阅读全文
posted @ 2023-09-12 17:13 xiuer211 阅读(18) 评论(0) 推荐(0) 编辑
摘要:Redis 持久化和aof Redis 如何实现数据不丢失? 有三种方式实行持久化 aof,将执行成功的写命令保存到aof文件中,如果aof文件过大会发生aof重写 rdb,保存内存数据的快照 混合模式,同时使用aof和rdb,提高性能 为什么aof要先执行命令再保存命令 不用检查命令合法,不会阻塞 阅读全文
posted @ 2023-09-12 17:12 xiuer211 阅读(11) 评论(0) 推荐(0) 编辑
摘要:Redis 过期删除与内存淘汰 Redis 使用的过期删除策略是什么? redis将有过期时间的key带上过期时间的时间戳保存到一个字典中。 主要分为两大类: 一个是惰性删除,不会主动检查key是否过期,cpu使用到的时候先检查是否过期,过期了删除,没有过期返回 一个是定期删除,会定期检查key是否 阅读全文
posted @ 2023-09-12 17:12 xiuer211 阅读(14) 评论(0) 推荐(0) 编辑
摘要:Redis是单线程的吗 工作线程是单线程的,但是后台还有和IO有关、aof刷盘,释放内存,处理关闭文件的线程 为什么Redis采用单线程还是很快 Redis的数据存储在内存中 没有多线程切换导致的性能损耗 IO多路复用机制,可以一个线程处理多个IO Redis 6.0 之前为什么使用单线程? 因为性 阅读全文
posted @ 2023-09-12 17:12 xiuer211 阅读(8) 评论(0) 推荐(0) 编辑
摘要:Redis五种数据类型 String 数据结构:SDS 应用类型:缓存数据,计数,互斥锁 List 数据结构:压缩列表或者双向链表 应用类型:缓存链表或者作为队列 Hash 数据结构:压缩列表或者哈希表 应用类型:缓存对象 Set 数据结构:整型集合或者哈希表 应用类型:缓存集合,例如好友关系 Zs 阅读全文
posted @ 2023-09-12 17:12 xiuer211 阅读(10) 评论(0) 推荐(0) 编辑
摘要:混合持久化相关问题 为什么会有混合持久化? 为了解决aof和rdb的缺点,混合模式结合了aof和rdb的优点 aof的优点是生成性能高,缺点是恢复时间慢,rdb的优点是恢复时间快,缺点是快照生成的时机不好把握,频率高影响性能,频率低会丢失很多数据。 为了解决aof和rdb的缺点,就有了混合模式。 混 阅读全文
posted @ 2023-09-12 17:11 xiuer211 阅读(4) 评论(0) 推荐(0) 编辑
摘要:内存淘汰机制,LFU和LRU的比较和优缺点以及实现方式 Redis 内存满了,会发生什么? 如果redis的内存达到了阈值,会发生内存淘汰,阈值通过配置文件的maxmemory设置 Redis 内存淘汰策略有哪些? 大概分为三类 报错 根据有过期时间淘汰 volatile-random,随机淘汰有过 阅读全文
posted @ 2023-09-12 17:11 xiuer211 阅读(360) 评论(0) 推荐(0) 编辑
摘要:如何避免缓存雪崩、缓存击穿、缓存穿透? 缓存雪崩是指很多key同一时间过期,可以让缓存不过期或者将失效时间打散 缓存击穿是指热点key过期,可以让缓存不过期或者添加互斥锁,这样只有一个线程访问数据库 缓存穿透是指访问在数据库和缓存都不存在的值,可以通过校验参数来限制非法请求,使用布隆过滤器,缓存空值 阅读全文
posted @ 2023-09-12 17:11 xiuer211 阅读(9) 评论(0) 推荐(0) 编辑
摘要:如何设计一个缓存策略,可以动态缓存热点数据呢? 热点数据动态缓存的策略总体思路:通过数据最新访问时间来做排名,并过滤掉不常访问的数据,只留下经常访问的数据。 以电商平台场景中的例子,现在要求只缓存用户经常访问的 Top 1000 的商品。具体细节如下: 先通过缓存系统做一个排序队列(比如存放 100 阅读全文
posted @ 2023-09-12 17:10 xiuer211 阅读(250) 评论(0) 推荐(0) 编辑
摘要:说说常见的缓存更新策略? 有cache aside,read/write through ,write back三种 cache aside 对于写操作,先更新数据库,后删除缓存,对于读操作,先访问缓存,有返回,没有查询数据库再保存到缓存中。 适用于读多写少的场景,不适合写多的场景,因为写多会频繁删 阅读全文
posted @ 2023-09-12 17:10 xiuer211 阅读(75) 评论(0) 推荐(0) 编辑
摘要:如何理解Spring Boot中的Starters Starters可以理解为启动器,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库,只要加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。 阅读全文
posted @ 2023-09-11 21:43 xiuer211 阅读(154) 评论(0) 推荐(0) 编辑
摘要:是@SpringBootApplication 由三个注解组成 @EnableAutoConfiguration :开启自动配置,推测导入的jar包中需要哪些配置,并且加载配置 @SpringBootConfiguration:和@Configuration作用类似,表明自己是一个配置类,不同的是@ 阅读全文
posted @ 2023-09-11 21:41 xiuer211 阅读(27) 评论(0) 推荐(0) 编辑
摘要:通过application.yml设置spring.profile.active来使用对应的文件。 例如: 通过application.yml设置spring.profile.active=dev 使用对应的application-dev.yaml配置文件,不过application.yml也是有效 阅读全文
posted @ 2023-09-11 21:35 xiuer211 阅读(17) 评论(0) 推荐(0) 编辑
摘要:官网的介绍 组件 说明 DispatcherServlet Spring MVC 的核心组件,是请求的入口,负责协调各个组件工作 MultipartResolver 内容类型( Content-Type )为 multipart/* 的请求的解析器,例如解析处理文件上传的请求,便于获取参数信息以及上 阅读全文
posted @ 2023-09-11 21:14 xiuer211 阅读(22) 评论(0) 推荐(0) 编辑
摘要:request发送给dispatcherservlet dispa~根据handlermapping找到handlerAdapter handlerAdapter调用handler处理,返回modelandview给dispa~ dispa~ 将viewname发送给viewResover找到vie 阅读全文
posted @ 2023-09-11 21:09 xiuer211 阅读(4) 评论(0) 推荐(0) 编辑
摘要:Spring 事务 Spring 事务实现方式有哪些 编程式 优点:灵活 缺点:麻烦,难以维护 声明式 加注解 Spring的事务管理有什么优点 支持声明式事务管理 提供跨不同事务api的一致事务模型 Spring事务隔离等级 一共五种 DEFAULT:根据数据库的隔离等级 READ_UNCOMMI 阅读全文
posted @ 2023-09-11 20:34 xiuer211 阅读(6) 评论(0) 推荐(0) 编辑
摘要:单例,spring的bean的scope默认就是单例 工厂,例如beanfactory,ApplicationContext创建对象 代理,aop使用了代理 模板,以xxxtemplate结尾的都是用到了模板模式,例如jdbc,redis,rabbit~ 剩下的 包装器设计模式 观察者模式 适配器模 阅读全文
posted @ 2023-09-11 17:39 xiuer211 阅读(6) 评论(0) 推荐(0) 编辑
摘要:spring aop 基于动态代理,只支持方法级别的切面 aspectj 基于静态代理,提供完全的 AOP 支持,支持属性级别的切面 阅读全文
posted @ 2023-09-11 17:34 xiuer211 阅读(14) 评论(0) 推荐(0) 编辑
摘要:分为两大类,一种是静态代理,一种是动态代理。 静态代理:在编译期间生成代理类 实现方式:编译时编制,加载时编制 动态代理:在运行时生成代理类 实现方式: JDK 动态代理: 特点: 核心是 InvocationHandler 接口和 Proxy 类 使用反射创建代理,创建效率高,执行效率低 缺点 被 阅读全文
posted @ 2023-09-11 17:31 xiuer211 阅读(14) 评论(0) 推荐(0) 编辑
摘要:切点:真正被增强的代码 连接点:可以被增强的代码 通知:实现增强功能的代码,包括前置,后置,异常,环绕,返回五种通知 切面:通知+切点 织入:将切面的通知应用到目标对象的过程 切点是连接点的子集 class Person{ void getA(){} void getB(){} void log() 阅读全文
posted @ 2023-09-11 17:17 xiuer211 阅读(17) 评论(0) 推荐(0) 编辑
摘要:是一种编程思想,面向切面编程,主要关注点不再是对象,而是切面。 阅读全文
posted @ 2023-09-11 17:10 xiuer211 阅读(21) 评论(0) 推荐(0) 编辑
摘要:线程安全问题是由静态变量引起的,如果只是对静态变量读取的话,没有线程安全问题,如果有写入的话,就会导致线程安全问题 bean可以分为两种,一种是有状态,一种没有状态 状态可以认为是实例变量,可以保存数据 如果没有状态,也就没有线程安全问题,使用sigleton范围,提高性能 如果有状态,使用prot 阅读全文
posted @ 2023-09-11 17:08 xiuer211 阅读(293) 评论(0) 推荐(0) 编辑
摘要:如果是构造器注入,无法解决,会抛出异常 如果是setter或者属性注入,可以解决 spring的循环依赖主要是创建对象和属性填充两部分 因为构造器注入是将创建对象和属性填充两部分合在一起,所以解决不了。 剩下的两种就可以解决 spring有三级缓存: 一级存放已经就绪的bean 二级存放已经初始化, 阅读全文
posted @ 2023-09-11 16:47 xiuer211 阅读(38) 评论(0) 推荐(0) 编辑
摘要:主要分为四个阶段,实例化,属性注入,初始化,销毁。 主要的流程集中在初始化和销毁两个阶段。 实例化 属性注入 初始化 aware接口的对应方法 init-method方法(@PostConstruct) initialingBean接口的方法 BeanPostProcessor的前置方法 BeanP 阅读全文
posted @ 2023-09-11 16:21 xiuer211 阅读(42) 评论(0) 推荐(0) 编辑
摘要:JVM有程序计数器,本地方法栈,虚拟机栈,堆,元空间 程序计数器,是线程私有的,作用是保存线程执行的下一行代码 虚拟机栈也是线程私有的,保存着一个个栈帧,栈帧代表着调用的方法,栈帧主要有局部变量表,操作数栈 ,返回地址,局部变量表存储着方法里边的变量的存放地址,操作数栈保存着运算过程的中间结果,返回 阅读全文
posted @ 2023-09-07 05:51 xiuer211 阅读(8) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示