随笔分类 -  Java面经

摘要:基础篇 ArrayList扩容规则 如果调用无参arrayList构造方法,则初始长度为0;如果构造带参的构造方法,则初始容量为指定长度。 1.调用add()方法 1.第一次扩容为10(从0到9)。 2.后续扩容都是前一次的1.5倍(创建一个新数组(0-14),将旧数组的元素拷贝到新数组中去,用新数 阅读全文
posted @ 2022-10-24 09:30 临易 阅读(94) 评论(0) 推荐(0) 编辑
摘要:(详细版请按照问题查找面经系列) arrayList扩容:无参、有参add、addaAll(复制) 多线程读写:failFast(并发修改异常)、failSafe(一致性,读写分离) LinkList、ArrayList:连续内存,随机访问快(下标)、尾插性能好、缓存,读写快(局部性原理){占用空间 阅读全文
posted @ 2022-10-24 09:28 临易 阅读(39) 评论(0) 推荐(0) 编辑
摘要:数据类型 基本数据类型 byte short int long float double char boolean (字节)1 2 4 8 4 8 2 1 自动类型转换:byte-short-int-long-float-double 引用数据类型 String,数组等 switch,String, 阅读全文
posted @ 2022-10-24 09:26 临易 阅读(92) 评论(0) 推荐(0) 编辑
摘要:springMVC执行流程 初始化阶段 在 Web 容器第一次用到 DispatcherServlet 的时候,会创建其对象并执行 init 方法 init 方法内会创建 Spring Web 容器,并调用容器 refresh 方法 refresh 过程中会创建并初始化 SpringMVC 中的重要 阅读全文
posted @ 2022-08-30 18:09 临易 阅读(24) 评论(0) 推荐(0) 编辑
摘要:事务失效的几种场景 1.抛出检查异常导致事务无法正确回滚。 原因:Spring 默认只会回滚非检查异常 解法:配置 rollbackFor 属性 @Transactional(rollbackFor = Exception.class) 2. 业务方法内自己 try-catch 异常导致事务不能正确 阅读全文
posted @ 2022-08-30 17:40 临易 阅读(295) 评论(0) 推荐(0) 编辑
摘要:Spring Bean生命周期 1.处理名称,检查缓存 一级缓存:放单例成品对象;二级缓存:放单例工厂的产品;三级缓存:放单例工厂。 2.检查父工厂 如果父子容器名称重复,优先子容器bean。 3.检查DependsOn 有依赖关系的bean创建次序有保障。无依赖关系时,A dependsOn B, 阅读全文
posted @ 2022-08-30 10:19 临易 阅读(33) 评论(0) 推荐(0) 编辑
摘要:Spring refresh 流程 Spring refresh 概述 refresh 是 AbstractApplicationContext 中的一个方法,负责初始化 ApplicationContext 容器,容器必须调用 refresh 才能正常工作。它的内部主要会调用 12 个方法,我们把 阅读全文
posted @ 2022-08-29 16:44 临易 阅读(63) 评论(0) 推荐(0) 编辑
摘要:当重写了finalize方法的对象,在构造方法调用时,jvm会将其包装成一个finalizer对象,并加入unfinalized队列中(双向链表)。当进行垃圾回收时,将这些对象对应的finalizer对象加入一个空的队列ReferenceQueue(单向链表)。真正的回收时机:即时对象无人引用,由于 阅读全文
posted @ 2022-08-29 11:47 临易 阅读(33) 评论(0) 推荐(0) 编辑
摘要:# 对象引用类型## 1.强引用内存空间不足时不会被GC回收。当没有任何引用指向它或者指向它的对象为null的时候会被GC垃圾回收。## 2.软引用适用于缓存。第一次回收时不会被回收,而后当内存满,进行GC回收时会被回收。防止内存溢出。当空间充足时不会被回收。## 3.弱引用垃圾回收时直接被回收。# 阅读全文
posted @ 2022-08-29 10:58 临易 阅读(19) 评论(0) 推荐(0) 编辑
摘要:类加载 类加载过程 1.加载 ①将类的字节码载入方法区,并创建.class对象。 ②如果此类的父类没有加载,先加载父类。 ③加载是懒惰执行。 2.链接 ①验证-验证类是否符合字节码规范,合法性、安全性检测。 ②准备-为static变量分配空间,设置默认值。 ③解析-将常量池的符号引用解析为直接引用。 阅读全文
posted @ 2022-08-26 17:23 临易 阅读(18) 评论(0) 推荐(0) 编辑
摘要:java创建对象的过程主要分为一下五个步骤: (1)类加载检查 Java虚拟机(jvm)在读取一条new指令时候,首先检查能否在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否被加载、解析和初始化。如果没有,则会先执行相应的类加载过程。 (2)内存分配 在通过(1)后,则开始为新生的 阅读全文
posted @ 2022-08-26 16:54 临易 阅读(58) 评论(0) 推荐(0) 编辑
摘要:内存溢出 项目中什么情况下会内存溢出,怎么解决的 1.误用固定大小线程池 当前线程任务超时后,其余任务将被加入任务队列中,任务对象所耗费的内存会导致整个堆内存耗尽,导致内存溢出异常。 解决方法: 不要用工具类提供的线程池来创建线程池。而是使用线程池时自己使用线程池的构造方法,根据实际情况设置一个有大 阅读全文
posted @ 2022-08-26 14:48 临易 阅读(24) 评论(0) 推荐(0) 编辑
摘要:JVM垃圾回收 GC和分代回收算法 GC的目的: 实现无用对象内存自动释放,减少内存碎片,加快分配速度。 GC要点: 1.回收区域是堆内存,不包括虚拟机栈,在方法调用结束会自动释放方法占用的内存。 2.判断无用对象,使用可达性分析算法,三色表记法标记存活对象,回收未标记对象。 3.GC具体的实现称为 阅读全文
posted @ 2022-08-26 11:54 临易 阅读(41) 评论(0) 推荐(0) 编辑
摘要:JVM垃圾回收算法 标记:找到不能被作为垃圾回收的对象并标记。标记的对象保留,未被标记的对象作为垃圾释放。 标记清除法 标记:将一定不能被回收的根对象作为GC Root对象,从根对象出发,沿着它的引用链找当前对象有没有被根对象引用到。若是则不能被回收,加标记。若否,则不加标记,GC时释放掉。 清除: 阅读全文
posted @ 2022-08-25 16:21 临易 阅读(23) 评论(0) 推荐(0) 编辑
摘要:JVM堆内存参数: 对于JVM内存配置参数:-Xmx10240m -Xms10240m -Xmn5120m -XX:SurvivorRatio=3 其最小内存值和Survivor区总大小分别是? -Xmx10240m Xmx:Java虚拟机最大内存10G m:单位,兆字节 -Xms10240m Xm 阅读全文
posted @ 2022-08-25 15:55 临易 阅读(240) 评论(0) 推荐(0) 编辑
摘要:虚拟机-jvm内存结构 方法区:存放类加载时的方法 堆:存放new出来的对象 虚拟机栈:记录方法内的局部变量和方法参数等信息。 程序计数器:记录main线程执行中执行其他线程,回到主线程时从哪里开始执行。 本地方法栈:调用本地方法接口实现由操作系统实现的功能(本地库) GC:内存不足时将不再使用的地 阅读全文
posted @ 2022-08-25 15:12 临易 阅读(24) 评论(0) 推荐(0) 编辑
摘要:ThreadLocal作用: 1.线程隔离。线程间:ThreadLocal可实现资源对象的线程隔离,让每个线程各用各的资源对象,避免争用引发的线程安全问题。 2.资源共享。线程内:ThreadLocal同时实现了线程内的资源共享。 ThreadLocal原理:关联资源 每个线程中都有一个独立的Thr 阅读全文
posted @ 2022-08-24 23:49 临易 阅读(233) 评论(0) 推荐(0) 编辑
摘要:HashTable与ConcurrentHashMap比较 1.HashTable与ConcurrentHashMap都是线程安全的Map集合。 2.HashTable与ConcurrentHashMap的键和值都不能为空。 3.HashTable并发度低,整个HashTable对应一把锁,同一时刻 阅读全文
posted @ 2022-08-24 22:43 临易 阅读(64) 评论(0) 推荐(0) 编辑
摘要:1.悲观锁的代表是synchronized和Lock锁。 1.核心思想:线程只有占有了锁,才能去操作共享变量,每次只有一个线程占锁成功,获取锁失败的线程都得停下来等待。 2.线程从运行到阻塞、再从阻塞到唤醒,涉及线程上下文切换,如果频繁会影响性能。 3.实际上,线程在获取synchronized和L 阅读全文
posted @ 2022-08-24 21:34 临易 阅读(22) 评论(0) 推荐(0) 编辑
摘要:volatitle能否保证线程安全? 线程安全要考虑三个方面:可见性,有序性,原子性。 1.可见性:一个线程对共享变量修改,另一个线程能看到最新结果。 2.有序性:一个线程内代码按照编写顺序执行。 3.原子性:一个线程内多行代码以一个整体运行,期间不能有其他线程代码插队。 volatile能够保证共 阅读全文
posted @ 2022-08-24 16:44 临易 阅读(20) 评论(0) 推荐(0) 编辑

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