必威体育Betway必威体育官网
当前位置:首页 > IT技术

java软件工程师基本面试题

时间:2019-09-28 12:45:33来源:IT技术作者:seo实验室小编阅读:57次「手机版」
 

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;      (可以正确编译,s1+=1等同于s1=(short)(s1+1))

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

2个,一个是静态区的”xyz”,一个是用new创建在堆上的对象。

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是否都继承自同一个接口?

   不是,List和Set都继承自Collection接口,而Map并不是继承自Collection接口。

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

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

7、java中会存在内存泄漏的问题吗,请简单描述。

   理论上java有垃圾回收机制(GC),不会存在内存泄漏问题(这也是java被广泛应用于服务端编程的一个重要原因)。

   然而实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄漏的发生。

   例如Hibernate的Session(一级缓存)中的对象持久态,垃圾回收器是不会回收这些对象的,然而这些对象中也可能存在无用

   的垃圾对象,如果不及时关闭(close)或清空(flush)一级缓存就可能导致内存泄漏。

8、finalfinallyfinalize的区别

   final:修饰符(关键字)有三种用法:

       a、如果有一个类被声明为final,意味着它不能再派生出子类,即不能被继承,所以它也是abstract的反义词。

       b、如果有一个变量被声明为final,可以保证它在使用中不被改变,被声明为final的变量必须在声明时给定初始值,

            而且在以后的引用中只能被读取不能被修改。

       c、如果一个方法被声明为final,那么这个方法同样只能使用,不能被子类重写。

finally:通常放在try...catch...后面构造总是执行的代码块,这就意味着程序不论是正常执行还是发生异常,这里的代码块只

   要JVM不关闭都能执行,可以将释放外部资源的代码放在finally块中。

finalize:Object类中定义的方法,java中允许使用finalize()方法在垃圾回收器将对象从内存中清理出去之前做必要的清理工

      作。这个方法是由垃圾回收器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工

           作。

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

相关阅读

java中的常见异常

1、java中异常分为哪些种类? 2、举例说明 3、error 和 exception 的区别? 4、java 异常处理机制 5、请写出你最常见的 RuntimeExcep

JavaScript高级程序设计之设计模式

工厂模式:此种模式是软件工程领域中的一个广为认知的设计模式,抽象了创建具体对象的过程,利用函数来封装以特定接口创建对象的细节。

制作视频用什么软件好?

做视频用什么软件最好?随着网络的发展,特别是微博、微信、视频网站这几年飞速发展,人们对网络视频越来越青睐,因此越来越多的人投入

Apple Final Cut Pro x专业视频剪辑软件安装教程

Final Cut Pro X 是Mac OS平台上最好的视频剪辑软件,Final Cut Pro X为原生64位软件,基于Cocoa编写,支持多路多核心处理器,支持GPU加

Java中Map集合及其子类

Collection集合的特点是每次进行单个对象的保存,如果现在要进行一对对象的保存,就只能用Map集合来完成,即Map集合中会一次性保存两个

分享到:

栏目导航

推荐阅读

热门阅读