java⾯试题-线程-JC-垃圾回收等java基础
1、垃圾回收的优点和原理。
Java语⾔中⼀个显著的特点就是引⼊了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃
⽽解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对
象不再有“作⽤域”的概念,只有对象的引⽤才有“作⽤域”。垃圾回收可以有效的防⽌内存泄露,有效
的使⽤可以使⽤的内存。垃圾回收器通常是作为⼀个单独的低级别的线程运⾏,不可预知的情况下对内存
堆中已经死亡的或者长时间没有使⽤的对象进⾏清楚和回收,程序员不能实时的调⽤垃圾回收器对某个对
象或所有对象进⾏垃圾回收。
2、请说出你所知道的线程同步的⽅法。
wait():使⼀个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使⼀个正在运⾏的线程处于睡眠状态,是⼀个静态⽅法,调⽤此⽅法要捕捉
InterruptedException异常。
notify():唤醒⼀个处于等待状态的线程,注意的是在调⽤此⽅法的时候,并不能确切的唤醒某⼀
个等待状态的线程,⽽是由JVM确定唤醒哪个线程,⽽且不是按优先级。
Allnotity():唤醒所有处⼊等待状态的线程,注意并不是给所有唤醒线程⼀个对象的锁,⽽是让它
们竞争。
3、在java中⼀个类被声明为final类型,表⽰了什么意思?
表⽰该类不能被继承,是顶级类。
4、 Error与Exception有什么区别?
Error表⽰系统级的错误和程序不必处理的异常,
Exception表⽰需要捕捉或者需要程序进⾏处理的异常。
5、&和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
6、Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态⽅法。
Collection是个java.util下的接⼝,它是各种集合结构的⽗接⼝。
7、 HashMap和Hashtable的区别。
都属于Map接⼝的类,实现了将惟⼀键映射到特定的值上。
HashMap 类没有分类或者排序。它允许⼀个 null 键和多个 null 值。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也⽐ HashMap 慢,因为它是同步的。
8、GC是什么? 为什么要有GC? .
GC是垃圾收集器。Java 程序员不⽤担⼼内存管理,因为垃圾收集器会⾃动进⾏管理。要请求垃圾收
集,可以调⽤下⾯的⽅法之⼀:()
9、谈谈final, finally, finalize的区别。
final—修饰符(关键字)如果⼀个类被声明为final,意味着它不能再派⽣出新的⼦类,不能作
为⽗类被继承。因此⼀个类不能既被声明为 abstract的,⼜被声明为final的。将变量或⽅法声明为
final,可以保证它们在使⽤中不被改变。被声明为final的变量必须在声明时给定初值,⽽在以后的引⽤
中只能读取,不可修改。被声明为final的⽅法也同样只能使⽤,不能重载。
finally—再异常处理时提供 finally 块来执⾏任何清除操作。如果抛出⼀个异常,那么相匹配
的 catch ⼦句就会执⾏,然后控制就会进⼊ finally 块(如果有的话)。
finalize—⽅法名。Java 技术允许使⽤ finalize() ⽅法在垃圾收集器将对象从内存中清除出去
之前做必要的清理⼯作。这个⽅法是由垃圾收集器在确定这个对象没有被引⽤时对这个对象调⽤的。它是
在 Object 类中定义的,因此所有的类都继承了它。⼦类覆盖 finalize() ⽅法以整理系统资源或者执⾏
其他清理⼯作。finalize() ⽅法是在垃圾收集器删除对象之前对这个对象调⽤的。
10、String s = new String("xyz");创建了⼏个String Object?
两个对象,⼀个是"xyz",⼀个是指向"xyz"的引⽤对象s。
11、und(11.5)等於多少? und(-11.5)等於多少?
12、Java有没有goto?
Goto—java中的保留字,现在没有在java中使⽤。
13、 sleep() 和 wait() 有什么区别?
sleep()⽅法是使线程停⽌⼀段时间的⽅法。在sleep 时间间隔期满后,线程不⼀定⽴即恢复执⾏。
这是因为在那个时刻,其它线程可能正在运⾏⽽且没有被调度为放弃执⾏,除⾮(a)"醒来"的线程具有更
⾼的优先级 (b)正在运⾏的线程因为其它原因⽽阻塞。
wait()是线程交互时,如果线程对⼀个同步对象x 发出⼀个wait()调⽤,该线程会暂停执⾏,被调对
象进⼊等待状态,直到被唤醒或等待时间到。
数组有没有length()这个⽅法? String有没有length()这个⽅法?
在java⾥⾯数组没有length()这个⽅法,有length的属性。String有有length()这个⽅法。在c#数组和string只有length属性,没有⽅法.
14、 error和exception有什么区别?
1 Error表⽰系统级的错误和程序不必处理的异常,
Exception表⽰需要捕捉或者需要程序进⾏处理的异常。
2 error 表⽰恢复不是不可能但很困难的情况下的⼀种严重问题。⽐如说内存溢出。不可能指望程序能
处理这样的情况。
exception 表⽰⼀种设计或实现问题。也就是说,它表⽰如果程序运⾏正常,从不会发⽣的情况。
15、List, Set, Map是否继承⾃Collection接⼝?
List,Set是 ,Map不是
16、是否可以继承String类?
String类是final类故不可以继承。
17、 构造器Constructor是否可被override?
不能重写 Overriding,但可以被重载Overloading。
18、 try {}⾥有⼀个return语句,那么紧跟在这个try后的finally {}⾥的code会不会被执⾏,什么时候被
执⾏,在return前还是后?
会执⾏,在return前执⾏。
19、⽤最有效率的⽅法算出2乘以8等於⼏?
2 << 3
20、作⽤域public,private,protected,以及不写时的区别
区别如下:
作⽤域当前类同⼀package ⼦孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly
21、 abstract class和interface有什么区别?
声明⽅法的存在⽽不去实现它的类被叫做抽象类(abstract class),它⽤于要创建⼀个体现某些基本⾏
为的类,并为该类声明⽅法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然⽽可以
创建⼀个变量,其类型是⼀个抽象类,并让它指向具体⼦类的⼀个实例。不能有抽象构造函数或抽象静态
⽅法。Abstract 类的⼦类为它们⽗类中的所有抽象⽅法提供实现,否则它们也是抽象类为。取⽽代之,
在⼦类中实现该⽅法。知道其⾏为的其它类可以在类中实现这些⽅法。
接⼝(interface)是抽象类的变体。在接⼝中,所有⽅法都是抽象的。多继承性可通过实现这样
的接⼝⽽获得。接⼝中的所有⽅法都是抽象的,没有⼀个有程序体。接⼝只可以定义static final成员变
量。接⼝的实现与⼦类相似,除了该实现类不能从接⼝定义中继承⾏为。当类实现特殊接⼝时,它定义(
即将程序体给予)所有这种接⼝的⽅法。然后,它可以在实现了该接⼝的类的任何对象上调⽤接⼝的⽅法
。由于有抽象类,它允许使⽤接⼝名作为引⽤变量的类型。通常的动态联编将⽣效。引⽤可以转换到接⼝
类型或从接⼝类型转换,instanceof 运算符可以⽤来决定某对象的类是否实现了接⼝
22、ArrayList和Vector的区别,HashMap和Hashtable的区别
答:就ArrayList与Vector主要从⼆⽅⾯来说.
⼀.同步性:Vector是线程安全的,也就是说是同步的,⽽ArrayList是线程序不安全的,不是同步的
⼆.数据增长:当需要增长时,Vector默认增长为原来⼀培,⽽ArrayList却是原来的⼀半
就HashMap与HashTable主要从三⽅⾯来说。
⼀.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接⼝的⼀个实
现
⼆.同步性:Hashtable是线程安全的,也就是说是同步的,⽽HashMap是线程序不安全的,不是同步
的
三.值:只有HashMap可以让你将空值作为⼀个表的条⽬的key或value
23、 char型变量中能不能存贮⼀个中⽂汉字?为什么?
是能够定义成为⼀个中⽂的,因为java中以unicode编码,⼀个char占16个字节,所以放⼀个中⽂是没问题的
24、 float型float f=3.4是否正确?
答:不正确。精度不准确,应该⽤强制类型转换,如下所⽰:float f=(float)3.4
STRING与STRINGBUFFER的区别。
答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进⾏操
作,特别是内容要修改时,那么使⽤StringBuffer,如果最后需要String,那么使⽤StringBuffer的toStri
ng()⽅法.
25、 说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使⽤数组⽅式存储数据,此数组元素数⼤于实际存储的数据以便增加和插
⼊元素,它们都允许直接按序号索引元素,但是插⼊元素要涉及数组元素移动等内存操作,所以索引数据
快⽽插⼊数据慢, Vector由于使⽤了synchronized⽅法(线程安全),通常性能上较ArrayList差,⽽
LinkedList使⽤双向链表实现存储,按序号索引数据需要进⾏前向或后向遍历,但是插⼊数据时只需要记
录本项的前后项即可,所以插⼊速度较快。
继承时候类的执⾏顺序问题,以下代码显⽰什么结果。
⽗类:public class FatherClass {
public FatherClass() {
System.out.println("FatherClass Create"); }
}
⼦类: import FatherClass;
public class ChildClass extends FatherClass {
public ChildClass() {
System.out.println("ChildClass Create"); }
public static void main(String[] args) {
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass(); }
} //执⾏java ChildClass
jsp
1、jsp有哪些内置对象?作⽤分别是什么?
JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):
request ⽤户端请求,此请求会包含来⾃GET/POST请求的参数
response ⽹页传回⽤户端的回应
pageContext ⽹页的属性是在这⾥管理
session 与请求有关的会话期
application servlet 正在执⾏的内容
out ⽤来传送回应的输出
config servlet的构架部件
page JSP⽹页本⾝
exception 针对错误⽹页,未捕捉的例外
2.jsp有哪些动作?作⽤分别是什么?
答:JSP共有以下6种基本动作
jsp:include:在页⾯被请求的时候引⼊⼀个⽂件。
jsp:useBean:寻或者实例化⼀个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到⼀个新的页⾯。
jsp:plugin:根据浏览器类型为Java插件⽣成OBJECT或EMBED等标记
3.JSP中动态INCLUDE与静态INCLUDE的区别?
答:动态INCLUDE⽤jsp:include动作实现
<jsp:include page="included.jsp" flush="true" />它总是会检查所含⽂件中的变化,适合⽤于
包含动态页⾯,并且可以带参数
静态INCLUDE⽤include伪码实现,定不会检查所含⽂件的变化,适⽤于包含静态页⾯
<%@ include file="included.htm" %>
4.两种跳转⽅式分别是什么?有什么区别?
有两种,分别为:
<jsp:include page="included.jsp" flush="true">
<jsp:forward page= "nextpage.jsp"/>
前者页⾯不会转向include所指的页⾯,只是显⽰该页的结果,主页⾯还是原来的页⾯。执⾏完后还
javabean是干什么的会回来,相当于函数调⽤。并且可以带参数.后者完全转向新页⾯,不会再回来。相当于go to 语句。
5.Class.forName的作⽤?
调⽤该访问返回⼀个以字符串指定类名的类的对象。
6.Servlet
Servlet的⽣命周期是什么?
servlet有良好的⽣存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个⽣存期
由javax.servlet.Servlet接⼝的init,service和destroy⽅法表达。
7.servlet会话跟踪技术
⽤户认证,持久cookies,URL重写,隐藏表单字段,会话交换和持久
8.XML
xml有哪些解析技术?区别是什么?
答:主要有DOM,SAX等
DOM:处理⼤型⽂件时其性能下降的⾮常厉害。这个问题是由DOM的树结构所造成的,这种结构占⽤
的内存较多,⽽且DOM必须在解析⽂件之前把整个⽂档装⼊内存,适合对XML的随机访问
SAX:不同于DOM,SAX是事件驱动型的XML解析⽅式。它顺序读取XML⽂件,不需要⼀次全部装载整个⽂件。当遇到像⽂件开头,⽂档结束,或者标签开头与标签结束时,它会触发⼀个事件,⽤户通过在其回
调事件中写⼊处理代码来处理XML⽂件,适合对XML的顺序访问
9.项⽬中主要⽤到xml技术的哪些⽅⾯?如何实现的?
答:⽤到了数据存贮,信息配置两⽅⾯。在做数据交换平台时,将不同数据源的数据组装成XML⽂件,
然后将XML⽂件压缩打包加密后通过⽹络传送给接收者,接收解密与解压缩后再同XML⽂件中还原相关信息
进⾏处理。
在做软件配置时,利⽤XML可以很⽅便的进⾏,软件的各种配置参数都存贮在XML⽂件中。
10.EJB
EJB与JAVA 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必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,⽽是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论