天天看点

面试问题1、 类加载的三种方式2、获取Class对象的三种方式JAVA反射机制3 如何判断对象已死

1、 类加载的三种方式

1:命令行启动应用时由JVM初始化加载

2:通过Class.forName() 方式动态加载

3:通过ClassLoder.loadClass() 方法动态加载

2、获取Class对象的三种方式

1.1 Object ——> getClass();

1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性

1.3 通过Class类的静态方法:forName(String  className)(常用)

  Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。 
        Class stuClass = stu1.getClass();//获取Class对象 
        System.out.println(stuClass.getName());  
 //第二种方式获取Class对象 
        Class stuClass2 = Student.class;  
        System.out.println(stuClass == stuClass2);//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个 
 //第三种方式获取Class对象 
 try {  
            Class stuClass3 = Class.forName(”fanshe.Student”);//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名 
            System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象 
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        }             

复制

JAVA反射机制

是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

3 如何判断对象已死

(1:引用计数法(java中没用,因为,没办法解决循环引用:A引用B,B也引用A,但是没有其他引用去引用A和B,这时AB都是垃圾,但是引用计数法无法判断)。2:可达性分析算法:通过GC Roots为起始点向下搜索,说白了就是通过你已知的活对象,去找这对象里的引用,再找引用对象里的引用,一直这样下去,找的到的就是活的。那么哪些对象可以作为GC Roots呢:1虚拟机栈中引用的对象。2方法区静态属性引用的对象。3方法区中常量引用的对象。4本地方法栈中JNI(一般说的是Native方法)引用的对象)

4 常见的垃圾回收算法(1标记清除:通过可达性分析算法标记好活对象,然后清除掉没标记得对象,有个缺点:空间很零碎所以有了标记整理算法。2复制算法:同样是可达性分析后,活对象呢就直接复制到一片新内存中,之前的内存中所有对象直接清除,优点是没有零碎空间产生,但是消耗了很大内存。3标记整理算法:先标记清除再整理。4分代算法:这里分代是将堆里的对象进行分代,比如蚂蚁爷爷属于老年代,刚出生的蚂蚁孩子属于新生代等,分完代后呢 其实没有自己的算法,用的都是前面说的算法,但是分代特点是:不同的代,用合适自己的算法 比如:新生代很多对象都是很快消亡所以用复制算法,老年代里的对象都是存活率高的用:标记清除或标记整理)

5 JVM常见的命令工具包括(jps用于查询正在运行的JVM进程。 jstat可以实现显示本地或远程JVM进程中类加载、内存、垃圾回收、JIT编译等数据。 jinfo用于查询当前运行着的JVM属性和参数的值。 jmap用于显示当前堆永久代的详细信息。 jhat 用于分析使用jmap生成的dump文件,是JDK自带的。 jstack用于生成当前线程的所有快照,用于定位线程长时间出现停顿的原因)

6 重写equals方法要遵循哪些通用的约定(自反性:x.equals(x)要成立。对称性:x.equals(y) 和y.equals(x)要成立。传递性:x、y、z x.equals(y) 和y.equals(z)成立 那x.equals(z)要成立。一致性:说白点就是只要进行equals的对象不变,那么结果就一直不能变。非空性:对于任意非空引用x,x.equals(null)应该返回false)

7 关键字transient(简单地说,就是让某些被修饰的成员属性变量不被序列化。transient不能修饰类和方法,被transient关键字修饰的变量不能被序列化,一个静态变量不管是否被transient修饰均不能被序列化。)

8 redis的持久化方式中 RDB方式优缺点(RDB:是指用数据集快照的方式记录redis数据库的所有键值对 优点:1.只有一个文件 dump.rdb 方便持久化。2.容灾性好,一个文件可以保存到安全磁盘。3.性能最化,fork子进程来完成写操作,让主进程继续处理命令。4.相对于数据集大时,比AOF启动效率高。缺点:数据安全性较低)

9 redis的持久化方式中AOF方式优缺点(AOF:是指所有的命令行记录以redis,命令请求协议的格式保存为aof文件 优点:数据安全,通过append模式写文件,即使中途服务器宕机可以通过redis-check-aof工具解决数据一致性问题。3AOF机制的rewrite模式。缺点:1文件比RDB形式文件大。2数据集大比RDB启动效率低)

10 讲解一下HTTP请求里的Header有什么作用(accept:浏览器端可以接受的媒体类型。Accept-Encoding: 浏览器申明自己接收的编码方法。Accept-Language:浏览器申明自己接收的语言。Connection:连接状态,close 的话就要新开连接。Host:请求报头域主要用于指定被请求资源的Internet主机和端口号。User-Agent:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。)

11 linux中grep的使用(用于过滤/搜索的特定字符、如:grep "qqq\|aaa" abc.txt 是把qqq和aaa从abc.txt中筛选出来,grep "q" abc.txt 把小q筛选出来 ,如grep -i "q" abc.txt这样就不区分大小写了 ,还有很多参数以及正则表达式,不太明白的童鞋百度哦)