JAVA核心面试知识整理.pdf
《JAVA核心面试知识整理.pdf》由会员分享,可在线阅读,更多相关《JAVA核心面试知识整理.pdf(283页珍藏版)》请在咨信网上搜索。
1、1.目录目录 1.目录目录.1 2.JVM.19 2.1.线程.20 2.2.JVM 内存区域.21 2.2.1.程序计数器(线程私有).22 2.2.2.虚拟机栈(线程私有).22 2.2.3.本地方法区(线程私有).23 2.2.4.堆(Heap-线程共享)-运行时数据区.23 2.2.5.方法区/永久代(线程共享).23 2.3.JVM 运行时内存.24 2.3.1.新生代.24 2.3.1.1.Eden 区.24 2.3.1.2.ServivorFrom.24 2.3.1.3.ServivorTo.24 2.3.1.4.MinorGC 的过程(复制-清空-互换).24 1:eden、s
2、ervicorFrom 复制到 ServicorTo,年龄+1.25 2:清空 eden、servicorFrom.25 3:ServicorTo 和 ServicorFrom 互换.25 2.3.2.老年代.25 2.3.3.永久代.25 2.3.3.1.JAVA8 与元数据.25 2.4.垃圾回收与算法.26 2.4.1.如何确定垃圾.26 2.4.1.1.引用计数法.26 2.4.1.2.可达性分析.26 2.4.2.标记清除算法(Mark-Sweep).27 2.4.3.复制算法(copying).27 2.4.4.标记整理算法(Mark-Compact).28 2.4.5.分代收集算
3、法.29 2.4.5.1.新生代与复制算法.29 2.4.5.2.老年代与标记复制算法.29 2.5.JAVA 四中引用类型.30 2.5.1.强引用.30 2.5.2.软引用.30 2.5.3.弱引用.30 2.5.4.虚引用.30 2.6.GC 分代收集算法 VS 分区收集算法.30 2.6.1.分代收集算法.30 2.6.1.1.在新生代-复制算法.30 2.6.1.2.在老年代-标记整理算法.30 2.6.2.分区收集算法.31 2.7.GC 垃圾收集器.31 2.7.1.Serial垃圾收集器(单线程、复制算法).31 2.7.2.ParNew垃圾收集器(Serial+多线程).31
4、 2.7.3.Parallel Scavenge收集器(多线程复制算法、高效).32 2.7.4.Serial Old收集器(单线程标记整理算法).32 2.7.5.Parallel Old收集器(多线程标记整理算法).33 2.7.6.CMS收集器(多线程标记清除算法).33 2.7.6.1.初始标记.33 13/04/2018 Page 2 of 283 2.7.6.2.并发标记.34 2.7.6.3.重新标记.34 2.7.6.4.并发清除.34 2.7.7.G1收集器.34 2.8.JAVA IO/NIO.34 2.8.1.阻塞IO模型.34 2.8.2.非阻塞IO模型.35 2.8.
5、3.多路复用IO模型.35 2.8.4.信号驱动IO模型.36 2.8.5.异步IO模型.36 2.8.1.JAVA IO包.36 2.8.2.JAVA NIO.37 2.8.2.1.NIO 的缓冲区.38 2.8.2.2.NIO 的非阻塞.38 2.8.3.Channel.40 2.8.4.Buffer.40 2.8.5.Selector.40 2.9.JVM 类加载机制.41 2.9.1.1.加载.41 2.9.1.2.验证.41 2.9.1.3.准备.41 2.9.1.4.解析.41 2.9.1.5.符号引用.42 2.9.1.6.直接引用.42 2.9.1.7.初始化.42 2.9.1
6、.8.类构造器.42 2.9.2.类加载器.42 2.9.2.1.启动类加载器(Bootstrap ClassLoader).43 2.9.2.2.扩展类加载器(Extension ClassLoader).43 2.9.2.3.应用程序类加载器(Application ClassLoader):.43 2.9.3.双亲委派.43 2.9.4.OSGI(动态模型系统).44 2.9.4.1.动态改变构造.44 2.9.4.2.模块化编程与热插拔.44 3.JAVA 集合集合.45 3.1.接口继承关系和实现.45 3.2.LIST.47 3.2.1.ArrayList(数组).47 3.2.2
7、.Vector(数组实现、线程同步).47 3.2.3.LinkList(链表).47 3.3.SET.48 3.3.1.1.HashSet(Hash 表).48 3.3.1.2.TreeSet(二叉树).49 3.3.1.3.LinkHashSet(HashSet+LinkedHashMap).49 3.4.MAP.50 3.4.1.HashMap(数组+链表+红黑树).50 3.4.1.1.JAVA7 实现.50 3.4.1.2.JAVA8 实现.51 3.4.2.ConcurrentHashMap.51 3.4.2.1.Segment 段.51 3.4.2.2.线程安全(Segment
8、继承 ReentrantLock 加锁).51 3.4.2.3.并行度(默认 16).52 3.4.2.4.Java8 实现(引入了红黑树).52 13/04/2018 Page 3 of 283 3.4.3.HashTable(线程安全).53 3.4.4.TreeMap(可排序).53 3.4.5.LinkHashMap(记录插入顺序).53 4.JAVA 多线程并发多线程并发.54 4.1.1.JAVA并发知识库.54 4.1.2.JAVA线程实现/创建方式.54 4.1.2.1.继承 Thread 类.54 4.1.2.2.实现 Runnable 接口。.54 4.1.2.3.Exec
9、utorService、Callable、Future 有返回值线程.55 4.1.2.4.基于线程池的方式.56 4.1.3.4种线程池.56 4.1.3.1.newCachedThreadPool.57 4.1.3.2.newFixedThreadPool.57 4.1.3.3.newScheduledThreadPool.58 4.1.3.4.newSingleThreadExecutor.58 4.1.4.线程生命周期(状态).58 4.1.4.1.新建状态(NEW).58 4.1.4.2.就绪状态(RUNNABLE):.59 4.1.4.3.运行状态(RUNNING):.59 4.1
10、.4.4.阻塞状态(BLOCKED):.59 等待阻塞(o.wait-等待对列):.59 同步阻塞(lock-锁池).59 其他阻塞(sleep/join).59 4.1.4.5.线程死亡(DEAD).59 正常结束.59 异常结束.59 调用 stop.59 4.1.5.终止线程4种方式.60 4.1.5.1.正常运行结束.60 4.1.5.2.使用退出标志退出线程.60 4.1.5.3.Interrupt 方法结束线程.60 4.1.5.4.stop 方法终止线程(线程不安全).61 4.1.6.sleep与wait 区别.61 4.1.7.start与run区别.62 4.1.8.JAV
11、A后台线程.62 4.1.9.JAVA锁.63 4.1.9.1.乐观锁.63 4.1.9.2.悲观锁.63 4.1.9.3.自旋锁.63 自旋锁的优缺点.63 自旋锁时间阈值(1.6 引入了适应性自旋锁).63 自旋锁的开启.64 4.1.9.4.Synchronized 同步锁.64 Synchronized 作用范围.64 Synchronized 核心组件.64 Synchronized 实现.64 4.1.9.5.ReentrantLock.66 Lock 接口的主要方法.66 非公平锁.66 公平锁.67 ReentrantLock 与 synchronized.67 Reentra
12、ntLock 实现.67 Condition 类和 Object 类锁方法区别区别.68 tryLock 和 lock 和 lockInterruptibly 的区别.68 4.1.9.6.Semaphore 信号量.68 实现互斥锁(计数器为 1).68 代码实现.68 Semaphore 与 ReentrantLock.69 4.1.9.7.AtomicInteger.69 13/04/2018 Page 4 of 283 4.1.9.8.可重入锁(递归锁).69 4.1.9.9.公平锁与非公平锁.70 公平锁(Fair).70 非公平锁(Nonfair).70 4.1.9.10.Read
13、WriteLock 读写锁.70 读锁.70 写锁.70 4.1.9.11.共享锁和独占锁.70 独占锁.70 共享锁.70 4.1.9.12.重量级锁(Mutex Lock).71 4.1.9.13.轻量级锁.71 锁升级.71 4.1.9.14.偏向锁.71 4.1.9.15.分段锁.71 4.1.9.16.锁优化.71 减少锁持有时间.72 减小锁粒度.72 锁分离.72 锁粗化.72 锁消除.72 4.1.10.线程基本方法.72 4.1.10.1.线程等待(wait).73 4.1.10.2.线程睡眠(sleep).73 4.1.10.3.线程让步(yield).73 4.1.10.
14、4.线程中断(interrupt).73 4.1.10.5.Join 等待其他线程终止.74 4.1.10.6.为什么要用 join()方法?.74 4.1.10.7.线程唤醒(notify).74 4.1.10.8.其他方法:.74 4.1.11.线程上下文切换.75 4.1.11.1.进程.75 4.1.11.2.上下文.75 4.1.11.3.寄存器.75 4.1.11.4.程序计数器.75 4.1.11.5.PCB-“切换桢”.75 4.1.11.6.上下文切换的活动:.76 4.1.11.7.引起线程上下文切换的原因.76 4.1.12.同步锁与死锁.76 4.1.12.1.同步锁.
15、76 4.1.12.2.死锁.76 4.1.13.线程池原理.76 4.1.13.1.线程复用.76 4.1.13.2.线程池的组成.76 4.1.13.3.拒绝策略.78 4.1.13.4.Java 线程池工作过程.78 4.1.14.JAVA阻塞队列原理.79 4.1.14.1.阻塞队列的主要方法.80 插入操作:.80 获取数据操作:.81 4.1.14.2.Java 中的阻塞队列.81 4.1.14.3.ArrayBlockingQueue(公平、非公平).82 4.1.14.4.LinkedBlockingQueue(两个独立锁提高并发).82 4.1.14.5.PriorityBl
16、ockingQueue(compareTo 排序实现优先).82 4.1.14.6.DelayQueue(缓存失效、定时任务).82 4.1.14.7.SynchronousQueue(不存储数据、可用于传递数据).83 4.1.14.8.LinkedTransferQueue.83 13/04/2018 Page 5 of 283 4.1.14.9.LinkedBlockingDeque.83 4.1.15.CyclicBarrier、CountDownLatch、Semaphore的用法.84 4.1.15.1.CountDownLatch(线程计数器).84 4.1.15.2.Cycli
17、cBarrier(回环栅栏-等待至 barrier 状态再全部同时执行).84 4.1.15.3.Semaphore(信号量-控制同时访问的线程个数).85 4.1.16.volatile关键字的作用(变量可见性、禁止重排序).87 变量可见性.87 禁止重排序.87 比 sychronized 更轻量级的同步锁.87 适用场景.87 4.1.17.如何在两个线程之间共享数据.88 将数据抽象成一个类,并将数据的操作作为这个类的方法.88 Runnable 对象作为一个类的内部类.89 4.1.18.ThreadLocal作用(线程本地存储).90 ThreadLocalMap(线程的一个属性
18、).90 使用场景.91 4.1.19.synchronized和ReentrantLock的区别.91 4.1.19.1.两者的共同点:.91 4.1.19.2.两者的不同点:.92 4.1.20.ConcurrentHashMap并发.92 4.1.20.1.减小锁粒度.92 4.1.20.2.ConcurrentHashMap 分段锁.92 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成.93 4.1.21.Java中用到的线程调度.93 4.1.21.1.抢占式调度:.93 4.1.21.2.协同式调度:.93 4.1.21.3.
19、JVM 的线程调度实现(抢占式调度).94 4.1.21.4.线程让出 cpu 的情况:.94 4.1.22.进程调度算法.94 4.1.22.1.优先调度算法.94 4.1.22.2.高优先权优先调度算法.95 4.1.22.3.基于时间片的轮转调度算法.96 4.1.23.什么是CAS(比较并交换-乐观锁机制-锁自旋).96 4.1.23.1.概念及特性.96 4.1.23.2.原子包 java.util.concurrent.atomic(锁自旋).97 4.1.23.3.ABA 问题.98 4.1.24.什么是 AQS(抽象的队列同步器).98 Exclusive 独占资源-Reent
20、rantLock.99 Share 共享资源-Semaphore/CountDownLatch.99 同步器的实现是 ABS 核心(state 资源状态计数).100 ReentrantReadWriteLock 实现独占和共享两种方式.100 5.JAVA 基础基础.101 5.1.1.JAVA异常分类及处理.101 5.1.1.1.概念.101 5.1.1.2.异常分类.101 Error.101 Exception(RuntimeException、CheckedException).101 5.1.1.3.异常的处理方式.102 遇到问题不进行具体处理,而是继续抛给调用者(throw,
21、throws).102 try catch 捕获异常针对性处理方式.102 5.1.1.4.Throw 和 throws 的区别:.102 13/04/2018 Page 6 of 283 位置不同.102 功能不同:.102 5.1.2.JAVA反射.103 5.1.2.1.动态语言.103 5.1.2.2.反射机制概念(运行状态中知道类所有的属性和方法).103 5.1.2.3.反射的应用场合.103 编译时类型和运行时类型.103 的编译时类型无法获取具体方法.104 5.1.2.4.Java 反射 API.104 反射 API 用来生成 JVM 中的类、接口或则对象的信息。.104 5
22、.1.2.5.反射使用步骤(获取 Class 对象、调用对象方法).104 5.1.2.6.获取 Class 对象的 3 种方法.104 调用某个对象的 getClass()方法.104 调用某个类的 class 属性来获取该类对应的 Class 对象.104 使用 Class 类中的 forName()静态方法(最安全/性能最好).104 5.1.2.7.创建对象的两种方法.105 Class 对象的 newInstance().105 调用 Constructor 对象的 newInstance().105 5.1.3.JAVA注解.106 5.1.3.1.概念.106 5.1.3.2.4
23、 种标准元注解.106 Target 修饰的对象范围.106 Retention 定义 被保留的时间长短.106 Documented 描述-javadoc.106 Inherited 阐述了某个被标注的类型是被继承的.106 5.1.3.3.注解处理器.107 5.1.4.JAVA内部类.109 5.1.4.1.静态内部类.109 5.1.4.2.成员内部类.110 5.1.4.3.局部内部类(定义在方法中的类).110 5.1.4.4.匿名内部类(要继承一个父类或者实现一个接口、直接使用 new 来生成一个对象的引用).111 5.1.5.JAVA泛型.112 5.1.5.1.泛型方法()
24、.112 5.1.5.2.泛型类.112 5.1.5.3.类型通配符?.113 5.1.5.4.类型擦除.113 5.1.6.JAVA序列化(创建可复用的Java对象).113 保存(持久化)对象及其状态到内存或者磁盘.113 序列化对象以字节数组保持-静态成员不保存.113 序列化用户远程对象传输.113 Serializable 实现序列化.113 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化.113 writeObject 和 readObject 自定义序列化策略.113 序列化 ID.113 序列化并不保存静态变量.114
25、序列化子父类说明.114 Transient 关键字阻止该变量被序列化到文件中.114 5.1.7.JAVA复制.114 5.1.7.1.直接赋值复制.114 5.1.7.2.浅复制(复制引用但不复制引用的对象).114 5.1.7.3.深复制(复制对象和其应用对象).115 5.1.7.4.序列化(深 clone 一中实现).115 6.SPRING 原理原理.116 6.1.1.Spring 特点.116 6.1.1.1.轻量级.116 13/04/2018 Page 7 of 283 6.1.1.2.控制反转.116 6.1.1.3.面向切面.116 6.1.1.4.容器.116 6.1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 核心 面试 知识 整理
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。