Java面试11-15
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面试11-15相关的知识,希望对你有一定的参考价值。
11、类加载过程,如何获得当前对象的ClassLoader
类加载的过程分为:加载、连接、初始化、使用和卸载。其中连接又可以分为:验证、准备和解析
获取当前对象的ClassLoader通过如下代码:
this.getClass().getClassLoader() // 获取当前对象的类对象,然后调用getClassLoader
类加载器可以进行类层次的划分、OSGi、热部署和代码加密等。那么用户如何自定义类加载器呢?
要创建用户自己的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定类的名字,返回对应的Class对象的引用。
findClass protected Class<?> findClass(String name) throws ClassNotFoundException
使用指定的二进制名称查找类。此方法应该被类加载器的实现重写,该实现按照委托模型来加载类。在通过父类加载器检查所请求的类后,此方法将被 loadClass 方法调用。默认实现抛出一个 ClassNotFoundException。
12、关于ConcurrentHashMap相关的问题
(1)ConcurrentHashMap的锁分段技术。
(2)ConcurrentHashMap的读是否要加锁,为什么。
(3)ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器。
13、假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
把相互独立的计算任务包含在一个工作单元内,无需为每个单元启动新的线程。这样处理多线程代码通常效率更高。因为不用去为每个计算单元单独启动Thread线程。执行代码的线程是重用的。
(1)任务
Callable代表了一段可以调用并返回结果的代码
Future接口用来表示异步任务,是还没有完成的任务给出的未来结果。主要方法有get()、cancel()和isDone()
FutureTask是Future接口的常用实现类
(2)执行者 通过Executors类的工厂方法获取众多执行者之一
以上是关于Java面试11-15的主要内容,如果未能解决你的问题,请参考以下文章