Java软件开发工程师入职测试题及参考解答第2部分.docx
- 文档编号:1979792
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:12
- 大小:125.82KB
Java软件开发工程师入职测试题及参考解答第2部分.docx
《Java软件开发工程师入职测试题及参考解答第2部分.docx》由会员分享,可在线阅读,更多相关《Java软件开发工程师入职测试题及参考解答第2部分.docx(12页珍藏版)》请在冰豆网上搜索。
Java软件开发工程师入职测试题及参考解答第2部分
Java软件开发工程师入职测试题及参考解答(第2部分)
基础知识
1、接口是否可继承接口?
抽象类是否可实现(implements)接口?
抽象类是否可继承实体类(concreteclass)?
classBase{
publicvoidfun){}
}
classDerivedextendsBase
{
publicvoidfun){}
abstractpublicvoidother();
}
接口可以继承接口。
抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
2,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。
这并不意味着线程就会立即运行。
run()方法是线程体方法。
3、构造器(方法)Constructor是否可被override(重写)?
理解:
什么是构造方法?
为什么要提出构造方法?
在什么场合要提供构造方法?
如何设计(编程)构造方法?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
classMyClass{
publicMyClass(){
}
}
classMyClass{
privateMyClass(){
}
publicstaticvoidmain(Stringargs[]){
MyClassobj=newMyClass();
}
}
4,是否可以继承String类?
String类是final类,故不可以继承。
5,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
6,try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行?
什么时候被执行,在return前还是后?
会执行,在return前执行。
7,编程题:
用最有效率的方法算出2乘以8等於几?
2*8
有C背景的程序员特别喜欢问这种问题。
2<<3&|<<>>
8,两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?
理解:
对象相同的含义是什么?
对象引用?
hashcode是什么含义?
不对,有相同的hashcode。
9,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
理解:
什么是值传递调用?
什么是引用传递调用?
理解:
什么是对象拷贝?
(基本数据类型和字符串)什么是对象引用(非字符串以外的其他类型的对象)?
对象拷贝和对象引用之间有什么差别?
本题的答案是:
引用传递。
packagecom.px1987.javaexample;
publicclassUserInfoVO{
StringuserName;
intuserAge;
publicUserInfoVO(){
}
publicvoidsetUserAge(intnewAge){
userAge=newAge;
newAge=1;
}
publicvoidsetUserName(StringnewUserName){
userName=newUserName;
newUserName="新的用户名称";
}
publicStringgetUserName(){
returnuserName;
}
publicvoidsetUserInfo(UserInfoVOoneUserInfoVO){
oneUserInfoVO.setUserName("新的用户名称");
}
publicstaticvoidmain(Stringargs[]){
UserInfoVOoneUserInfoVO=newUserInfoVO();
intuserAge=23;
oneUserInfoVO.setUserAge(userAge);
System.out.println("userAge="+userAge);
StringuserName="张三";
oneUserInfoVO.setUserName(userName);
System.out.println("userName="+userName);
oneUserInfoVO.setUserInfo(oneUserInfoVO);
System.out.println("UserInfoVO对象中的userName="+oneUserInfoVO.getUserName());
}
}
注意:
正确理解下面的Java中的对象创建语句的含义!
List
someOneList=newArrayList
当List
而someOneList就是对这个对象实例的引用,也就是指向这个对象在内存中的地址。
对someOneList操作时,会通过它持有的对象地址去内存操作该对象。
注意:
正确区分Java语言中的“==”和“eauals()”的不同!
publicstaticvoidmain(Stringargs[]){
StringsomeOneString="字符串中的内容";
StringsomeTwoString="字符串中的内容";
System.out.println("==的结果:
"+someOneString==someTwoString);
System.out.println("equals()方法的结果:
"+someOneString.equals(someTwoString));
}
因为“==”比较内存地址,而“equals方法”比较值。
10、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。
因此传递给switch和case语句的参数应该是int、short、char或者byte。
Long和String都不能作用于swtich。
代码示例如下:
publicstaticvoidmain(Stringargs[]){
intsomeOneDigit=1;
bytesomeTwoDigit=1;
longsomeThreeDigit=1;
StringsomeFourDigit="1";
switch(someOneDigit){
case1:
break;
}
switch(someTwoDigit){
case1:
break;
}
switch(someThreeDigit){
case1:
break;
}
switch(someFourDigit){
case1:
break;
}
}
11,编程题:
写一个单例(Singleton)模式的程序
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
(1)第一种形式
定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
publicclassSingleton{
privateSingleton(){
}
privatestaticSingletoninstance=newSingleton();
publicstaticSingletongetInstance(){
returninstance;
}
}
(2)第二种形式
这个方法比上面有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率!
publicclassSingleton{
privatestaticSingletoninstance=null;
privateSingleton(){
}
publicstaticsynchronizedSingletongetInstance(){
if(instance==null){
instance=newSingleton();
}
returninstance;
}
}
(3)其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
12、描述一下JVM加载class文件的原理机制?
请见下文的说明。
13、试举例说明一个典型的垃圾回收算法?
依靠垃圾收集机制可大大缩短时间。
其次是它保卫程序的完整性,垃圾收集是Java语言安全性策略的一个主要部份。
垃圾收集的一个潜在的缺点是它的开销影响程序性能。
Java虚拟机必须追踪运行程序中有用的对象,并且最后释放没用的对象。
这一个流程须要花费处理器的时间。
大多数垃圾回收算法运用了根集(RootSet)这个观点;所谓根集就量正在执行的Java程序能够访问的引用变量的集合(包含局部变量、参数、类变量),程序能够运用引用变量访问对象的属性和调用对象的要领。
垃圾收集首选须要确定从根开始哪些是可达的和哪些是不可达的,从根集可达的对象都是活动对象,它们无法作为垃圾被回收,这也包含从根集间接可达的对象。
而根集解决随意路径不可达的对象契合垃圾收集的条件,应该被回收。
(1)引用计数法(ReferenceCountingCollector)
引用计数法是独一没有运用根集的垃圾回收的法,该算法运用引用计数器来区分存活对象和不再运用的对象。
通常来说,堆中的每个对象对应一个引用计数器。
当每一次建立一个对象并赋给一个变量时,引用计数器置为1。
当对象被赋给随意变量时,引用计数器每次加1当对象出了作用域后(该对象丢弃不再运用),引用计数器减1,一旦引用计数器为0,对象就满足了垃圾收集的条件。
基于引用计数器的垃圾收集器运行较快,不会长时间中断程序执行,适宜地必须及时运行的程序。
但引用计数器添加了程序执行的开销,因为每次对象赋给新的变量,计数器加1,而每次现有对象出了作用域生,计数器减1。
(2)tracing算法(TracingCollector)
tracing算法是为了处理引用计数法的疑问而提出,它运用了根集的观点。
基于tracing算法的垃圾收集器从根集开始扫描,识别出哪些对象可达,哪些对象不可达,并用某种形式标记可达对象,比方对每个可达对象配置一个或多个位。
在扫描识别流程中,基于tracing算法的垃圾收集也称为标记和清理(m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 软件 开发 工程师 测试 参考 解答 部分