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的主要内容,如果未能解决你的问题,请参考以下文章

Java工程师面试题,二级java刷题软件

面试常用的代码片段

面向面试编程代码片段之GC

经验总结:Java高级工程师面试题-字节跳动,成功跳槽阿里!

前端面试题之手写promise

一道经典面试题:字符串在Java中如何通过“引用”传递