java面经(面试总结)

1.String 、 StringBuffer 、StringBuilder三者的区别

1)String是字符串类型的常量,不可变;

StringBuffer和StringBuilder是字符串类型的变量,常用于拼接字符串;

StringBuffer是线程安全的,适用于多线程;

StringBuilder是线程不安全的,如果需要使用,需要写在方法内部,可保证单线程安全;

2)运行速度;

StringBuilder > StringBuffer > String

2.数组和集合的区别及用法

相同点:数组和集合都有索引;

不同点:数组具有维度,集合没有;数组大小固定,只能存储相同数据类型的数据;集合大小可动态扩展,可以存储各种类型的数据。

3.集合有哪几种,区别是什么

1)Map集合:键值对的形式,key不能为null和"",不能重复;

2)Set和List集合:简写为“三有三无”,即list集合有索引、可重复、有顺序;set集合无索引、无序、不可重复。

4.静态资源的执行顺序

静态代码块—>非静态代码块—>构造方法

5.instanceof运算符的作用

instanceof 是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

6.算法~~冒泡排序

public class Sort {
    public static void main(String[] args){
        int[] arr = {6,3,2,1,7};
        for(int i = 0;iarr[j+1]){//从第一个开始,往后两两比较大小,如果前面的比后面的大,交换位置
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

7.常见模式

1)工厂模式:一般为重量级,但Spring为轻量级;

2)单例模式:分为饿汉模式、饱汉模式(相关代码,问度娘);

3)代理模式:A和B之间通过代理完成相关代码的调用(理解和代码,问度娘);

8.class、abstract class、interface的区别

相同点:

A:两者都是抽象类,都不能实例化,

B:interface 实现类及abstract class 的子类都必须要实现已经声明的抽象方法。

不同点:

(1).interface 实现,要用implements,而abstract class的实现,要用extends.

(2).一个类可以实现多个interface,但一个类只能继承一个abstract class.

(3).interface强调特定功能的实现,而abstract class强调所属关系

(4).尽管interface实现类及abstract class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration,没有方法体),必须要实现。而子类如果被关键子abstract关键字修饰,可以有选择地实现。

抽象类的这个选择有两点含义:一是Abstract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract class的方法,在abstract class中必须定义方法体。二是abstract class的子类在继承它时,对非抽象方法即可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类,即是抽象类,当然也不能实例化。

interface是完全抽象的,只能声明方法,而且只能声明public的方法,不能声明private 及protected的方法,不能定义方法体,也不能声明实例变量。

9.数据库优化方案

A:选取最适用的字段属性;

B:使用连接(JOIN)来代替子查询 ;
C:使用联合(UNION)来代替手动创建的临时表 ;
D:事务 ;
E:锁定表 ;

F:使用外键;

G:使用索引;

H:优化的查询语句:
表与表之间通过一个冗余字段来关联,要比直接使用JOIN有更好的性能 ;select count(*) from table;这样不带任何条件的count会引起全表扫描 。

10.HTTP中的get、post方法的区别

A:GET产生一个TCP数据包;POST产生两个TCP数据包;

B:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据);

C:GET在浏览器回退时是无害的,而POST会再次提交请求;

D:GET产生的URL地址可以被Bookmark,而POST不可以;

E:GET请求会被浏览器主动cache,而POST不会,除非手动设置;

F:GET请求只能进行url编码,而POST支持多种编码方式;

G:GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留;

H:GET请求在URL中传送的参数是有长度限制的,而POST没有;

I:GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

11.servlet中的转发和重定向的区别

A:转发(服务器端跳转):  一次请求,

request.getRequestDispatcher("new.jsp").forward(request, response);

B:重定向(客户端跳转):  两次请求

response.sendRedirect("new.jsp");

C:转发是在服务器端完成,因此称为服务器端跳转 ,

  重定向是在客户端完成,因此称为客户端跳转 ;

D:转发后,地址栏不会改变,

  重定向后,地址栏会改变;

E:转发只能在同一个WEB项目范围内进行,

  重定向可以再同一个WEB项目内,也可以重定向到其他任意地方eg:response.sendRedirect("http://www.baidu.com")。

12.Java中面向对象的特点

封装、继承、多肽、抽象。

13.strurs2、spring MVC的区别

A:Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截;

B:SpringMVC的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量,而Struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个Action对象对应一个request上下文;

C:SpringMVC的入口是servlet,而Struts2是filter;

D:Spring MVC和Spring是无缝的;

E:SpringMVC开发效率和性能高于Struts2。

 

 

你可能感兴趣的:(java面经(面试总结))