1,String 类可以被继承吗,为什么?
不可以,因为String类有final修饰符,而final不能被继承的,实现细节不允许改变。
String str = "a";
默认调用的String.valueOf()来返回String的实例对象,
2,String StringBuffer,StringBuilder的区别
String 字符串常量(final修饰,不可被继承),String 是常量,当创建之后即不能更改,
StringBuffer 是线程安全的,其toString的方法会对进行对象缓存,
public sybchronized String toString(){
if(toStringCache==null){
toStringCache = Arrays.copyOfRange(valuue,0,count);
}
return new String(toStringCache,true);
}
StringBuilder 是线程不安全的,其他的方法都没有synchronized修饰,toString方法也与StringBuffer不同,
,他是直接返回一个新的对象
public String toString(){
return new String(value,0,count);
}
3, ArrayList 和linkedList有什么区别
1,arrayList 是基于索引的数据接口,他的底层是数组,他可以以o(1)时间复杂度对元素急性随机访问,一次对应,LinkedList是以元素列表的形式存储的数据,每一个与元素都和他的前一个后一个元素连接在一起,在这种情况下,查找某个元素的时间复杂度是o(n);
2,相对于ArrayList ,LinkedList的插入,添加,删除操作更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样从新计算大小或者更新索引。
3,linkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
4,类的实例话顺序。
父类静态变量
父类静态代码块
子类静态变量
子类静态代码块
父类非静态变量(父类实例成员变量)
父类构造函数
子类非静态变量(子类实例成员变量)
子类构造函数
5,类加载的过程
遇到一个新的类时,首先会到方法区去找class文件,如果没有找到就会去硬盘中找class文件,找到后会返回,将class文件加载到方法区中,在类加载的时候,静态成员变量会被分配到方法区的静态区域,非静态成员变量分配到非静态区域,然后开始给静态成员变量初始化,赋默认值,赋完默认值后,会根据静态成员变量书写的位置赋显示值,然后执行静态代码,当所有的静态代码执行完,类加载才算完成。
6,抽象类和接口的区别
1,抽象类和接口都不能直接实例化,如果需要实例化,抽象类变量必须指向实现所有抽象方法的子类对象。接口变量必须指向所有实现所有接口方法的类对象。
2,抽象类要被子类继承,接口要被类实现
3,接口只能做方法声明,抽象类中的方法可以是声明的也可以是实现的方法
4,接口里定义的变量只能是公共的静态常量,抽象类中的变量是普通的变量
5,抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么改子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。
6,抽象方法只能声明,不能实现,abstract void abc();不能写成abstract void abc(){};
7,tomcat服务器优化(内存,并发连接数,缓存)
1,内存优化:主要是对tomcat启动参数进行优化,我们可以在tomcat启动脚本中修改他的最大内存数等。、
2,线程数优化:tomcat的并发连接参数,主要是在tomcat配置文件中server.xml中配置,比如修改最小空闲链接线程数,用于提高系统处理性能。
3,优化缓存:打开压缩功能,修改参数,比如压缩的输出内容大小默认为2KB,可以适当的修改
8,springMvc的执行流程
springMvc是由dispatchservlet为核心的分层控制框架,首先客户端发出一个请求web服务器解析请求url并去匹配dispatchservlet的映射ur,如果匹配上就将这个请求放入到dispatchservlet,dispatchservlet根据mapping映射配置去寻找相对应的handler,然后吧处理权交给handler,handler封装了处理业务逻辑的代码,当handler处理完后会返回一个逻辑视图,modelandview给dispatchservlet,此时的modelandview是一个逻辑视图不是一个正式试图,所有disoathcservlet会通过vierresource视图资源去解析modelandview,然后将解析后的参数放到view中返回到客户端并展现。
9,什么是值传递和引用传递
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递一般是对于对象型变量而言的,传递的是对该对象地址的一个副本,并不是原对象本身。
一般认为,Java内的传递都是值传递,Java中的实例对象的传递是引用传递。