随笔分类 -  八股文

摘要:什么是虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈。 每个栈由多个栈帧(frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈,对应着当前正在执行的那个方法。 垃圾回收是否涉及栈内存 垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就会释放。 栈内存分配越大越好吗 未必,默认 阅读全文
posted @ 2024-05-29 15:43 worshipone 阅读(18) 评论(0) 推荐(0) 编辑
摘要:作用 线程共享的区域:主要用来保存对象实例,数组等,内存不够则抛出OutOfMemoryError异常。 组成 年轻代+老年代。 年轻代被划分为三部分,Eden区和两个大小严格相同的Survivor区。 老年代主要保存生命周期长的对象,一般是一些老的对象。 Jdk1.7和1.8的区别 1.7中有有一 阅读全文
posted @ 2024-05-29 14:34 worshipone 阅读(6) 评论(0) 推荐(0) 编辑
摘要:hashMap寻址算法 计算对象的hashCode()。 再进行调用 hash()方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更为均匀。 最后(capacity-1)&hash 得到索引。 为何HashMap的数组长度一定是2的次幂 计算索引时效率更高:如果是2的n次幂可以使 阅读全文
posted @ 2024-05-16 23:33 worshipone 阅读(35) 评论(0) 推荐(0) 编辑
摘要:HashMap扩容原理 在添加元素或初始化的时候需要调用resize方法进行扩容,第一次添加数据初始化数组长度为16,以后每次每次扩容都是达到了扩容阈值(数组长度*0.75)。 每次扩容的时候,都是扩容之前容量的2倍。 扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中。 没有hash 阅读全文
posted @ 2024-05-16 22:56 worshipone 阅读(54) 评论(0) 推荐(0) 编辑
摘要:判断键值对数组table是否为空或为null,否则执行resize()进行扩容(初始化)。 根据键值key计算hash值得到数组索引。 判断table[i]==null,条件成立,直接新建节点添加。 如果table[i]==null,不成立 判断table[i]的首个元素是否和key一样,如果相同直 阅读全文
posted @ 2024-05-16 22:09 worshipone 阅读(35) 评论(0) 推荐(0) 编辑
摘要:HashMap的实现原理 底层使用hash表数据结构,即数组+(链表|红黑树)。 添加数据时,计算key的值确定元素在数组中的下标,key相同则替换,不同则存入链表或红黑树中。 获取数据通过key的hash计算数组下标获取元素。 HashMap的JDK1.7和JDK1.8有什么区别 JDK1.8之前 阅读全文
posted @ 2024-05-16 21:09 worshipone 阅读(12) 评论(0) 推荐(0) 编辑
摘要:底层数据结构 ArrayList是动态数组的数据结构实现。 LinkedList是双向链表的数据结构实现。 效率 下标査询 ArrayList按照下标査询的时间复杂度O(1)。 LinkedList不支持下标查询。 查找(未知索引) ArrayList需要遍历,链表也需要链表,时间复杂度都是O(n) 阅读全文
posted @ 2024-05-15 16:38 worshipone 阅读(16) 评论(0) 推荐(0) 编辑
摘要:数组转List 数组转List,使用JDK中java.util.Arrays工具类的asList方法。 import java.util.Arrays; import java.util.List; public class Main { public static void main(String 阅读全文
posted @ 2024-05-15 15:40 worshipone 阅读(46) 评论(0) 推荐(0) 编辑
摘要:ArrayList底层是用动态的数组实现的。 ArrayList初始容量为0,当第一次添加数据的时候才会初始化容量为10。 ArrayList在进行扩容的时候是原来容量的1.5倍,每次扩容都需要拷贝数组。 ArrayList在添加数据的时候: 确保数组已使用长度(size)加1之后足够存下下一个数据 阅读全文
posted @ 2024-05-15 15:26 worshipone 阅读(24) 评论(0) 推荐(0) 编辑
摘要:一级缓存 基于 PerpetualCache的HashMap 本地缓存,其存储作用域为Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存。 二级缓存 基于namespace和mapper的作用域起作用的,不是依赖于SQLses 阅读全文
posted @ 2024-05-12 23:50 worshipone 阅读(12) 评论(0) 推荐(0) 编辑
摘要:MyBatis是否支持延迟加载 延迟加载的意思是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。 MyBatis支持一对一关联对象和一对多关联集合对象的延迟加载。 在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=truel/false,默认是关闭的 阅读全文
posted @ 2024-05-12 22:40 worshipone 阅读(75) 评论(0) 推荐(0) 编辑
摘要:读取MyBatis配置文件:mybatis-config.xml加载运行环境和映射文件 构造会话工厂SqlSessionFactory会话工厂 创建SqlSession对象(包含了执行SQL语句的所有方法) 操作数据库的接口,Executor执行器,同时负责查询缓存的维护 Executor接口的执行 阅读全文
posted @ 2024-05-12 22:14 worshipone 阅读(7) 评论(0) 推荐(0) 编辑
摘要:Spring常见注解 注解 说明 @Component 使用在类上用于实例化Bean @Controller 使用在类上用于实例化Controller @Service 使用在类上用于实例化Service @Repository 使用在类上用于实例化Repository @Autowired 使用在 阅读全文
posted @ 2024-05-12 13:37 worshipone 阅读(65) 评论(0) 推荐(0) 编辑
摘要:在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是: @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 其中@EnableAutoCon 阅读全文
posted @ 2024-05-12 13:03 worshipone 阅读(26) 评论(0) 推荐(0) 编辑
摘要:视图执行流程 用户发送出请求到前端控制器DispatcherServlet。 DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。 HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServl 阅读全文
posted @ 2024-05-11 19:00 worshipone 阅读(17) 评论(0) 推荐(0) 编辑
摘要:Spring循环引用 循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。 比如A依赖于B,B依赖于A。循环依赖在spring中是允许存在,spring框架依据三级缓存已经解决了大部分的循环依赖。 一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bea 阅读全文
posted @ 2024-05-11 17:58 worshipone 阅读(23) 评论(0) 推荐(0) 编辑
摘要:Spring的bean的生命周期 通过BeanDefinition获取bean的定义信息。 调用构造函数实例化bean。 bean的依赖注入。 @Autowired或者@Value的set方法。 处理Aware接囗(BeanNameAware、BeanFactoryAware、Application 阅读全文
posted @ 2024-05-11 17:18 worshipone 阅读(5) 评论(0) 推荐(0) 编辑
摘要:Spring中事务失效的场景有哪些 异常捕获处理,抛出检查异常和非public方法。 异常捕获处理 原因:事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉。 解决:在catch块添加throw new RuntimeException(e)手动抛出。 阅读全文
posted @ 2024-05-11 11:47 worshipone 阅读(27) 评论(0) 推荐(0) 编辑
摘要:业务介绍 根据自己简历上的项目,想一个数据量较大业务(请求数多或业务累积大)。 达到了什么样的量级(单表1000万或超过20G)。 具体拆分策略 水平分库,将一个库的数据拆分到多个库中,解决海量数据存储和高并发的问题。 水平分表,解决单表存储和性能的问题。 需要中间件sharding-sphere, 阅读全文
posted @ 2024-05-10 11:37 worshipone 阅读(12) 评论(0) 推荐(0) 编辑
摘要:MySQL主从复制的核心就是二进制日志,二进制日志记录了所有的DDL语句和DML语句具体的主从同步过程大概的流程是这样的: Master主库在事务提交时,会把数据变更记录在二进制日志文件Binlog中。 从库读取主库的二进制日志文件Binlog,写入到从库的中继日志Relay Log中。 Slave 阅读全文
posted @ 2024-05-10 11:15 worshipone 阅读(12) 评论(0) 推荐(0) 编辑

more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示