分享
2020最新Java面试题及答案V2.0.pdf
下载文档

ID:2353875

大小:10.65MB

页数:283页

格式:PDF

时间:2023-05-08

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2020 最新 Java 试题 答案 V2
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、servicorFrom 复制到 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.分代收集算法.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 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.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.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.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 继承 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.ExecutorService、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.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.JAVA后台线程.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 ReentrantLock 实现.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.ReadWriteLock 读写锁.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.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.同步锁.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.PriorityBlockingQueue(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.CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行).84 4.1.15.3.Semaphore(信号量-控制同时访问的线程个数).85 4.1.16.volatile关键字的作用(变量可见性、禁止重排序).87 变量可见性.87 禁止重排序.87 比 sychronized 更轻量级的同步锁.87 适用场景.87 4.1.17.如何在两个线程之间共享数据.88 将数据抽象成一

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开