练习题
Posted You295
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习题相关的知识,希望对你有一定的参考价值。
练习题(五)
1.java反射原理?在什么场景下使用反射?
1.反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。反射可以在一个类运行的时候获取类的信息的机制,可以获取在编译期不可能获得的类的信息。对于任意一个对象,都能调用它的任意一个方法和属性。因为类的信息是保存在Class对象中的,而这个Class对象是在程序运行时被类加载器(ClassLoader)动态加载的。当类加载器装载运行了类后,动态获取Class对象的信息以及动态操作Class对象的属性和方法的功能称为Java语音的反射机制。
2.使用场景举例:
1)jdbc连接数据库时使用的Class.forName()通过反射加载数据库的驱动程序。
2)spring框架中也用到很多:将程序内的所有XML或者properties配置文件加载到内存中。 java类解析xml或者properties中的内容,得到对应实体类的字节码字符串以及相关的属性信息。 使用反射机制,根据字符串获得某个类的class实例。
2.什么是泛型?编写一个泛型类
1.“参数化类型”,将类型由具体的类型参数化,把类型也定义成参数形式(称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
2.是 JDK 5 中引入的一个新特性,提供了编译时类型安全监测机制,该机制允许程序员在编译时监测非法的类型。
3.泛型的本质是把参数的类型参数化,也就是所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中。
public class Test<T> {
private T data;
public T getData() {
return data;
}
/** 这种写法是错误的,提示 T 未定义 */
/*public static T get() {
return null;
}*/
/** 正确写法,该方法上的 T 和类上的 T 虽然一样,但是是两个指代,可以完全相同,互不影响 */
public static <T> T get() {
return null;
}
public void setData(T data) {
this.data = data;
}
}
3.垃圾回收原理以及过程?具体的垃圾回收器
4.什么是二叉树?二叉树的特性?
二叉树的定义:二叉树是每个节点最多有两个子树结构。它有5中基本形态:二叉树可以是空集;根可以有空的左子树或者右子树;或者左右子数都为空
特性:
性质1:二叉树的第i层上的结点数目最多为2的 i-1 次方 (i>=1)
性质2:深度为k的二叉树至多有2的k次方-1个节点(k>=1)
性质3:包含n个节点的二叉树的高度至少为(log2n)+1
性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1
5.java的内存回收机制?
在java中,它的内存管理包含两个方面:内存分配(创建java对象的时候)和内存回收,这两个方面都是由JVM自动完成的。
当程勋运行起来后,它在内存中的状态分为三种:
1.可达状态:在一个对象创建后,有一个以上的引用变量引用它,在有向图中可以从起始顶点导航到该对象,那他就是出于可达状态。
2.可恢复状态:如果程序中某个对象不再有任何的引用变量引用它,他就将先进入可恢复状态,此时从有向图的起始顶点不能再导航到该对象。在这个状态下,系统的垃圾回收机制准备准备回收该对象所占用的内存,再回收之前,系统会调用finalize()方法进行资源的清理,如果在清理之后让一个以上的引用变量来引用该对象,则这个对象再次变为可达状态,否则就会进行不可达状态。
3.不可达状态:当对象的所有关联都被切断,且系统调用finalize()方法进行资源清理后依旧没有使该对象进入可达状态,则这个对象将永久性的失去引用并且变成不可达状态,系统才会真正的回收该对象所占用的资源。
6.双亲委派原则?
若果一个类加载器收到了类加载的请求,他并不会自己去加载,而是将这个请求委托给他的父类的加载器去执行。若果父类的加载器还有其父类的加载器存在,则依次向上委托,请求最终到达顶层的启动类加载器。(故类加载都会先到达启动类加载器)。如果父类加载器可以成功完成加载任务,就成功返回,倘若无法完成加载任务则委培给他的子加载器去完成。
优势:1.避免类的重复加载,一旦一个类被父类的加载器加载之后,就不会再委派给子类加载了。
2.保护程序的安全。
7.数据库中的索引如何设计?
索引就是加快检索表中数据的方法,就是为了不想扫描整个表。
索引可以加快查找数据的速度;建立唯一的索引,保证数据表中每一行数据的唯一性;进行分组和排序索引时,可以明显的减少时间。
索引按方法分:分为B+树索引和Hash索引;
按索引的类型分:1.主键索引—一般数据库设置主键,就会自动加上索引。
2.普通索引。3.唯一索引:保证唯一性,但是允许有空值。4.全文索引:用于全文搜索,索引类型选择Full Text。 5.组合索引:为了进一步榨取mysql的效率,就要考虑建立组合索引。
原则:
1.选择唯一性索引:唯一性索引的值是唯一的,可以更快加速通过该索引来确定某条记录。
2.为经常需要排序,分组和联合操作的字段建立索引:排序操作会浪费很多的时间,建立索引可以有效的避免排序操作。
3.为常作为查询条件的字段建立索引:如果某个字段经常用来做索引条件,那么该字段的查询速度会影响整个表的查询速度。因此为这样的表建立索引,可以提高整个表的查询速度。
4.限制索引的数目:索引的数目不是越多越好,建立索引也需要占用磁盘的空间,索引越多,需要的磁盘空间也就越多。修改表时,对索引的重构和更新很麻烦。索引越多,更新表越浪费时间。
5.尽量使用数据量少的索引:如果索引的值很长,那么查询的速度就会受到影响。
6.尽量使用前缀来索引:如果索引字段的值很长,最好使用值的前缀来索引。
7.删除不再使用或者使用很少的索引:表中数据别大量的更新后,或者数据的使用方式被改变后,原来的一些索引可能不在需要了,应该定期的将他们找出来并且删除掉,从而减少索引对更新操作的影响。
8.不建议加索引的情况:数据太少,只有几行数据时就不要加索引了;经常插入修改的数据,不建议加索引;重新分布平均的字段,就不要加索引。
8.在什么情况下索引会失效?
1.条件中有or,即使其中有条件带索引也不会使用索引(尽量少使用or)
要向使用or又想让索引生效,只能将or条件中的每个列都加上索引
2.对于多列索引,不是使用的第一部分,则索引会失效。
3.like查询是以 % 开头。
4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则索引会失效。
5.如果mysql估计使用全表扫描要比使用索引扫描速度快,则不会使用索引。
注意:handler_read_key:这个值越高越好,越高表示使用索引查询到的次数越多; handler_read_rnd_next:这个值越高,说明查询效率越低
9.Http接口用到了什么提交方式?
HTTP请求提交的主要方式有GET和POST
1.GET:向特定资源发出请求(请求指定页面信息,并返回实体主类)
2.POST:向指定资源提交数据进行处理请求(提交表单,上传文件),又可能导致新的资源建立或者原有资源的修改。
3.PUT:向指定资源位置上上传其最新内容(从客户端向服务端传送的数据取代指定文档的内容)
4.Delete:请求服务器删除request–URL所标示的资源(请求服务器删除页面)
10.GET/POST的区别?除了GET和POST还有那些?
get和post的本质就是tcp连接,并无差别,但是由于HTTP协议的规定以及浏览器和服务器的限制,导致他们在应用的过程中出现了差异。
区别1)get会产生一个tcp数据包,对于get方式的提交,浏览器会把http header和data一起发送出去,服务器响应200返回数据。 然而post产生两个数据包,浏览器会先发送header,服务器响应100,浏览器在继续发送data,之后服务器响应200结束。(并不是所有的浏览器在post提交时都会产生两个数据包)
2)get方法会将参数放在URL中,然而post方法是将参数放在HTTP打包的request body中。
3)get方法提交的数据大小有限制,因为浏览器对URL的长度有限制规定,但是post提交的数据大小是没有限制的。
4)安全性方面get比post更加的不安全,因为它是将数据放在URL中的,但是post提交的参数也可以通过F12来查看,故在安全方面的差别不是很大。
5)get是可以缓存的,但是post不能
6)get请求页面后退时,不会产生影响;post请求页面后退时,会重新提交请求。
除了get和post还有:PUT 和 DELECT
以上是关于练习题的主要内容,如果未能解决你的问题,请参考以下文章