java软件工程师基本面试题

一、数据类型

1、八大基础数据类型
     整   型:byte    short    int    long
     浮点型:float   double
     字符型:char
     布尔型:boolean

2、int和Integer的区别
    int是java提供的8种原始数据类型之一,java为每个原始类型提供了封装类,Integer是java为int提供的封装类。
    Integer的默认值是null        int的默认值是0
    原始类                        封装类
    byte                            Byte
    short                           Short
    int                               Integer
    long                            Long
    float                            Float
    double                        Double
    char                            Character
    boolean                      Boolean

3、以下代码有什么错误
       short    s1=1;    s1=s1+1;( s1+1的运算结果为整型,需要强制转换类型
       short    s1=1;    s1+=1;      (可以正确编译)

4、String s=new String("XYZ");创建了几个对象
        2个

5、String、StringBuffer和StringBuilder的区别
    相同点:都是用来存储和操作字符串,即包含多个字符的字符数据。
    不同点:String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。
                 StringBuffer/StringBuilder表示的字符串对象可以直接进行修改。
                 StringBuilder是java 5中引用的,它和StringBuffer的方法完全相同,区别在于它是在单线程的条件下使用的,因为
                 它的所有方面都没有被synchronized修饰,因此它的效率要比StringBuffer高。
**************************************************************************************************************************** ****************************************************************************************************************************
二、集合

1、集合框架结构图
2、ArrayList、    Vector和LinkedList的存储性能和特性
     ArrayList:    使用数组方式存储数据,此数组元素数大于实际存储的数据以便于增加和插入元素,允许按序号索引元素。
                          但是插入元素涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。
    Vector    :    和ArraList一样,但用于Vector使用了synchronized方法(线程安全),通常性能上较ArrayList差。
    LinkedList:   使用双向链表实现存储,按序号索引数据需要进行前向或者后向遍历,但是插入数据只需要记录本向和前
                          后项即可,所以插入速度较快。

3、List、Set、Map是否都继承自同一个接口?
     不是

**************************************************************************************************************************** ****************************************************************************************************************************
3、线程

1、线程的状态
    
2、线程的两种实现方法
    A、实现Runable接口
    B、继承Thread类

3、当一个线程进入一个对象的synchronized方法后,其他线程是否可以进入此对象的其他方法?
     不能,一个对象的synchronized方法只能由一个线程访问。
********************************************************************************************************************************************************************************************************************************************************
四、JSP

1、九大内置对象及作用域

    page                            页面对象                                Page
    response                      响应对象                               Page
    request                        请求对象                                Request
    application                  应用程序对象                         Application
    out                               输出对象                               Page
    session                        会话对象                                Session
    pageContext               页面上下文对象                      Page
    config                          配置对象                                Page
    exception                    例外对象                                Page

2、servlet的生命周期
    

    1.当Servelt被装载到容器中后,创建一个Servlet实例,并调用init()方法进行初始化。

    2.初始化后的实例调用service()方法处理用户请求。

    3.调用destroy()方法,销毁Servlet实例。

3、Post和Get有什么区别
      Post:传递的参数隐藏了,长度更长,更安全。【文件上传只能用Post】
      Get:传递的参数在url后面,长度有限:255

4、什么情况下调用doGet()和doPost()?
        jsp 页面的 form 表签内的 method 属性为 get 时调用 doGet()    当 method 属性为 post 时调用 doPost()

5、EL和JSTL分别是什么
     EL:Expression    Language【表达式语言】   
            ${  }帮助我们方便使用表达式写法
     JSTL:Java    Standard    Tag    Library【Java标准标签库】   
               把Java代码从页面中分离出来,简化开发,类似于HTML风格

6、写出熟悉的JSTL标签
     <c:forEach>、<c:if>、 <c:choose>、<c:when>、<c:otherwise>、<c:set>

7、重定向和转发的区别
      响应次数、地址栏改变与否、是否带参数【两者都是用来跳转页面的方法】
      重定向:redirect——告诉浏览器请求另一个地址,地址栏url改变
      转   发:forward——请求不中断,转发到另一个资源,请求另一个地址后再把返回内容返回到客户端,地址栏url不改变

8、简述开发一个servlet的步骤【非工具生成】
        继承HttpServlet抽象类;可以实现:init(),doPost()/doGet(),destroy();在web.xml中配置servlet、servlet-mapping
**************************************************************************************************************************** ****************************************************************************************************************************
1、抽象类(abstract class)和接口(Interface)有什么异同
     抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用;一个类如果继承了某个抽象类或者实现了某个接口都需
     要对其中的抽象方法全部实现,否则该类仍然需要被声明为抽象类。
     接口比抽象类更抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器并且其中的方法
     全部都是抽象方法;抽象类中的成员可以是private、默认、protect、public的,但接口中的成员全都是public的;抽象类中
     可以定义成员变量,而接口中定义的成员变量实际上都是常量。
     有抽象方法的类必须要声明为抽象类,而抽象类却未必要有抽象方法。


2、重载(overload)和重写(overrid)的区别
     方法的重写和重载都是实现多态的方式,区别在于前者实现的是编译时的多态性,或者实现的是运行时的多态性。
     Overload:重载发生在一个类中,同名方法中如果有不同的参数列表(参数类型不同、参数个数不同或者两者都不同)则被视
     为重载,重载对返回类型没有特殊的要求。
     Overrid:重写发生在子类和父类之间,重写要求子类重写方法和父类被重写方法有相同的返回类型;子类重写方法比父类
     被重写方法更好访问,但不能比父类被重写方法声明更多异常(里式替换原则)。

3、静态变量与实例变量的区别
    静态变量属于类,不用实例化就已经存在,所有的实例共享同一个静态常量,可以通过类名和实例名来访问。(常量)
    实例变量属于实例,每个实例都有自己的这个变量,只能通过实例名来访问。(变量)

    static i = 10; //常量

    class A a;  a.i =10;//可变

    静态方法可以调用静态变量。

    实现方法可以调用静态变量、实例变量

4、接口是否可以继承接口?
        可以
        抽象类是否可以实现接口?
        可以
        抽象类是否可以继承实体类
        可以,但前提是实体类必须有明确的构造函数

5、数组有没有length()这个方法,String有没有length()这个方法
        数组没有length()这个方法,有length()属性
        String有length()这个方法。

6、switch的可用参数类型有哪些?
        java 5以前:  switch(expr1)中,expr1可用参数类型有byte,short,int,char
        从java5开始:switch(expr1)中,expr1可用参数类型有byte,short,int,char,enum
        从java7开始:switch(expr1)中,expr1可用的参数类型有byte,short,int,char,enum,String


**************************************************************************************************************************** ****************************************************************************************************************************

猜你喜欢

转载自blog.csdn.net/TANGBINDADA/article/details/80876232