java 基础面试题

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中的实例对象的传递是引用传递。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值