面试整理

1、java 应用中得类加载顺序?如和自定一个类加载器?对于一个加密的class类,应该怎样进行加载?

     a.Bootstrap ClassLoader/启动类加载器
       主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.
     b, Extension ClassLoader/扩展类加载器
       主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
    c, System ClassLoader/系统类加载器
        主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.
    b, User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)
        在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性.



2、如果出现同名的类会怎样?

1, 每个ClassLoader都维护了一份自己的名称空间, 同一个名称空间里不能出现两个同名的类。

2, 为了实现java安全沙箱模型顶层的类加载器安全机制, java默认采用了 "双亲委派的加载链" 结构. 

3、java 垃圾回收机制中,持久代存储一些什么信息,回收时,会回收那些东西

永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类。回收废弃常量与回收Java堆中的对象非常类似。以常量池中字面量的回收为例,假如一个字符串“abc”已经进入了常量池中,但是当前系统没有任何一个String对象是叫做“abc”的,换句话说是没有任何String对象引用常量池中的“abc”常量,也没有其他地方引用了这个字面量,如果在这时候发生内存回收,而且必要的话,这个“abc”常量就会被系统“请”出常量池。常量池中的其他类(接口)、方法、字段的符号引用也与此类似。

判定一个常量是否是“废弃常量”比较简单,而要判定一个类是否是“无用的类”的条件则相对苛刻许多。类需要同时满足下面3个条件才能算是“无用的类”:

该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例。

加载该类的ClassLoader已经被回收。

该类对应的java.lang.Class 对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

           被所有线程共享。垃圾收集也会清理方法区中的无用类型对象。

                a. 类型信息。类加载器加载类时,从类文件中提取出来。

                                类的完整有效名

                                父类的完整有效名(interface and java.lang.Object 除外,因为无父类)

                                类型的修饰符

                                类型直接接口列表

                b. 常量池。存储了一个类型所使用的常量所有类型、域和方法的符号引用。

                c. 域信息。jvm必须在方法区中保存类型的所有域的相关信息以及域的声明顺序,
                     域的相关信息包括:
              域名
              域类型
              域修饰符(public private protected static final volatile transient…)

       d.方法信息。

              方法名

              方法返回类型

              方法参数

              方法的修饰符

              方法的字节码(abstract and native 除外)(被PC寄存器指向)

              操作数栈和方法栈帧的局部变量区的大小

              异常表

       e. 类的静态变量(所有对象共享一分拷贝)

       f. 类的被声明为final的类变量(所有对象共享一分拷贝)

       g. 加载一个类的类加载器的引用

       h. Class类的引用           


4、final 这个标示符的作用,若果采用反射机制,是否可以修改final的属性

     final表示的变量,通过反射机制,是可以进行修改的,

     但是在非反射机制下,是无法对其进行修改的。

5、关于同步的问题,若果一个静态属性,如何实现并发的读写出来synchronized串行以外

6、算法:字符串的逆序算法举例:what are you doing 字符串,以空格分隔,无标点符号,经过处理后变为:doing you  are what.

      这个算法,其实挺简单的只需要两次遍历就可以完成,第一次遍历将整个字符串进行逆转,变成gniod  uoy era  tahw;

      然后再进行第二次逆转,从头开始,每读一个词,然后进行一次逆转,这次遍历之后,就变成了  doing you  are  what;

7、算法:将以文档中得指定的关键词进行飘红,实际意思就是如何以最快的速度,找到指定的文档中得含有的给定关键词的位置。

      方法1:KMP模式匹配的方式,但这种方式对于多次匹配这个文本的话,性能不好

      方法2:采用倒排索引的方式,遍历一遍文本,对每一个词简历一个索引,每个词对应一个该词在该文本中的位置,然后,再查关键词时,通过该索引去

获取数据。

      以上方法仅为个人观点,如有更好的方法,请大家回复讨论,多谢!!


8、try {1} catch(){2} finally{3} 异常从哪里抛出来,

       可以确认是从finally中抛出异常,因为finally是所有语句最后的出口。

9、switch(type) {default DDD ;case 1: XXX;case 2:YYY}  ;如果type=4 则执行那一句。

       则执行的结果为DDD   XXX   YYY 很奇怪为什么会这样执行。


10、单例模式的一个题目

class SingleTon{


private static SingleTon st=new SingleTon();
public static int count=1;
private SingleTon()
{
System.out.println(count);
}
public static SingleTon getInstance()
{
return st;
}
}

对于如上代码,如果执行一次SingleTon.getInstance(); 那么会打印出什么?共打印几次

会打印一次  0;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值