`

Java程序员面试题之四

阅读更多

16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

 

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

 

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率

 

 

17abstract classinterface有什么区别?

 

有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。 

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。 

下面比较一下两者的语法区别: 
1.抽象类可以有构造方法,接口中不能有构造方法。 
2.抽象类中可以有普通成员变量,接口中没有普通成员变量 。

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。 
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。 
5. 抽象类中可以包含静态方法,接口中不能包含静态方法 。

6. 抽象类和接口中都可以包含静态成员变量抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。 
7. 一个类可以实现多个接口,但只能继承一个抽象类。 
 

 

 

18heapstack有什么区别。

 

栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。

 

堆是栈的一个组成元素

 

1.heap是,stack是

2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。

3.stack空间有限,heap的空间是很大的自由区

在Java中,

若只是声明一个对象,则先在栈内存中为其分配地址空间,

若再new一下,实例化它,则在堆内存中为其分配地址。

4.举例:

数据类型 变量名;这样定义的东西在栈区。

如:Object a =null; 只在栈内存中分配空间

new 数据类型();或者malloc(长度);    这样定义的东西就在堆区

如:Object b =new Object(); 则在堆内存中分配空间

 

 

19forward redirect的区别

 

forward是服务器请求资源服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再转发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址

 

redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。

 

 

效率:
Forward高, Redirect低。

因为Redirect的流程是这样的:

request 1 sent to server, server return back to client,

request 2 then sent to server。

 

But Forward 仅在server side处理, 对client side 是透明的. 由于Redirect 有两次传输, 所以效率低。

 

范围:
由于对request.setAttribute() 来说, 它携带的对象生存范围只在request内, 所以Redirect方式会导致request携带的对象丢失.

 

 

20EJBJAVA BEAN的区别?

 

Java Bean 可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean

但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器

另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。

Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。

 

Enterprise Java Bean 相当于DCOM,即分布式组件

它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。

EJB必须被布署在诸如WebspereWebLogic这样的容器中

EJB客户从不直接访问真正的EJB组件,而是通过其容器访问

EJB容器是EJB组件的代理,EJB组件由容器所创建和管理

客户通过容器来访问真正的EJB组件

 

 

 

21Static Nested Class Inner Class的不同。

 

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化

而通常的内部类需要在外部类实例化后才能实例化

 

 

 

22JSP中动态INCLUDE与静态INCLUDE的区别?

 

动态INCLUDEjsp:include动作实现,是行为元素

 <jsp:include page="included.jsp" flush="true" />

总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数

在请求处理阶段执行

 

静态INCLUDEinclude伪码实现,是指令元素不会检查所含文件的变化

适用于包含静态页面<%@ include file="included.htm" %>

在翻译阶段执行

 

 

23、什么时候用assert。  

 

assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。

在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。

 

 

 

24GC是什么? 为什么要有GC?

 

GC垃圾收集的意思(Garbage Collection,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的Java语言没有提供释放已分配内存的显示操作方法。

 

 

25short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

 

short s1 = 1; s1 = s1 + 1; s1+1运算结果是int型,需要强制转换类型

 

short s1 = 1; s1 += 1;可以正确编译

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics