Java 常见机试题(含详细答案解析)_第1页
Java 常见机试题(含详细答案解析)_第2页
Java 常见机试题(含详细答案解析)_第3页
Java 常见机试题(含详细答案解析)_第4页
Java 常见机试题(含详细答案解析)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java常见机试题(含详细答案解析)本套试题为企业校招、实习、社招高频机考题型,涵盖Java基础、面向对象、集合、异常、线程、语法细节及编程实操,答案解析通俗易懂,贴合真实笔试答题规范。一、单项选择题(10题)1.以下关于Java基本数据类型说法正确的是()A.Java中float类型默认小数类型

B.byte类型取值范围是0~255

C.long类型赋值需要加L/l后缀

D.boolean类型可以赋值为0和1答案:C解析:Java中小数默认是double类型;byte是有符号字节,范围-128~127;boolean只有true/false两个值,不支持数字赋值;long常量必须加L后缀,否则默认按int处理,数值过大会报错。2.下列关于==和equals()区别说法正确的是()A.基本类型可以用equals比较

B.==比较引用类型时,比较的是对象内容

C.equals()默认比较地址,重写后可比较内容

D.String对象只能用==比较答案:C解析:基本类型只有==比较;引用类型==比较的是内存地址;Object类的equals方法默认底层就是==,String、Integer等类重写了该方法,用来比较对象内容。3.Java中接口和抽象类的区别,说法错误的是()A.抽象类可以有构造方法

B.接口中可以有普通成员变量

C.抽象类可以包含普通方法

D.接口支持多实现,抽象类只能单继承答案:B解析:接口中变量默认是publicstaticfinal常量,不能定义普通成员变量;抽象类有构造方法、普通方法、成员变量;类只能单继承抽象类,但可以多实现接口。4.以下集合中,线程安全的是()A.ArrayList

B.HashMap

C.Vector

D.HashSet答案:C解析:ArrayList、HashMap、HashSet都是线程不安全集合;Vector、Hashtable是古老的线程安全集合,底层方法加了synchronized锁。5.try-catch-finally结构中,以下说法正确的是()A.finally代码块一定执行

B.return语句会终止程序,finally不会执行

C.System.exit(0)会让finally不执行

D.catch块必须存在,不能省略答案:C解析:正常情况下finally一定会执行,但若执行System.exit(0)直接退出JVM,finally不会执行;try可以只搭配finally,省略catch;方法内的return不会阻止finally执行。6.下列关于String、StringBuilder、StringBuffer说法正确的是()A.String可变,适合频繁拼接

B.StringBuilder线程安全

C.StringBuffer线程安全,效率略低

D.三者都是可变字符序列答案:C解析:String是不可变字符串,每次拼接都会生成新对象;StringBuilder线程不安全、效率高;StringBuffer方法加锁、线程安全、效率稍低,适合多线程场景。7.重写(Override)和重载(Overload)的区别,正确的是()A.重写方法参数列表可以修改

B.重载发生在父子类中

C.重写要求方法名、参数列表、返回值完全一致

D.重载方法返回值必须一致答案:C解析:重写发生在父子类,方法名、参数列表、返回值必须一致,权限不能严于父类;重载发生在同一个类中,方法名相同、参数列表不同,返回值无要求。8.HashMap的底层数据结构是()A.数组+链表+红黑树

B.纯数组

C.数组+队列

D.链表答案:A解析:JDK1.8及以上HashMap底层为数组+链表+红黑树,当链表长度大于8、数组容量大于64时,链表转为红黑树,提升查询效率。9.以下关键字中,不能修饰局部变量的是()A.final

B.static

C.int

D.double答案:B解析:static修饰的是类级别的静态变量,属于类,不属于方法局部作用域,局部变量只能用final、基本类型、引用类型修饰。10.Java中垃圾回收(GC)的说法正确的是()A.程序员可以手动立即回收垃圾

B.GC只会回收栈内存对象

C.GC回收没有引用指向的堆内存对象

D.垃圾回收会导致程序线程终止答案:C解析:程序员只能通过System.gc()建议GC,不能强制立即回收;GC只负责堆内存垃圾回收,栈内存方法结束自动释放;GC回收无有效引用的堆对象,不会终止线程。二、填空题(5题)1.Java中所有类的父类是________。

答案:Object2.接口中定义的方法,默认的修饰符是________。

答案:publicabstract3.实现多线程的两种核心方式:继承________类、实现________接口。

答案:Thread、Runnable4.数组的长度通过________获取,字符串长度通过________方法获取。

答案:数组名.length、length()5.泛型的作用是________、________。

答案:类型安全、避免强制类型转换三、简答题(4题,笔试高频)1.简述Java面向对象的四大特性答案解析:1)封装:将类的属性私有化,通过公开的方法访问和修改属性,隐藏内部实现细节,保证数据安全;

2)继承:子类继承父类的属性和方法,实现代码复用,减少冗余代码;

3)多态:父类引用指向子类对象,同一个方法在不同子类中有不同实现,分为编译多态(重载)和运行多态(重写);

4)抽象:抽取事物的核心共性特征,通过抽象类和接口定义规范,不关注具体实现。2.简述ArrayList和LinkedList的区别答案解析:1)底层结构:ArrayList基于动态数组,LinkedList基于双向链表;

2)查询效率:ArrayList支持随机访问,下标查询速度快;LinkedList只能遍历查询,速度慢;

3)增删效率:ArrayList增删会涉及数组扩容、元素移位,效率低;LinkedList只需修改节点指针,增删效率高;

4)内存占用:ArrayList会预留冗余容量,占用内存多;LinkedList每个节点包含前后指针,内存开销更大;

5)使用场景:大量查询用ArrayList,大量增删用LinkedList。3.什么是线程安全?如何解决线程不安全问题?答案解析:线程安全:多线程同时操作同一共享资源时,不会出现数据错乱、结果异常的情况。

解决方式:

1)使用synchronized同步锁,修饰方法或代码块,保证同一时间只有一个线程执行;

2)使用Lock锁(ReentrantLock),锁操作更灵活;

3)使用线程安全集合(Vector、ConcurrentHashMap);

4)尽量避免共享变量,使用局部变量。4.简述Java异常体系结构答案解析:所有异常和错误的父类是Throwable,分为两大分支:

1)Error(错误):系统级严重错误,如内存溢出、虚拟机异常,程序无法处理,只能终止;

2)Exception(异常):程序可处理的异常,分为编译时异常(受检异常)和运行时异常(非受检异常);

编译时异常:必须手动try-catch捕获或throws抛出,如IO异常、文件不存在异常;

运行时异常:程序运行时抛出,可不用主动捕获,如空指针、数组越界、类型转换异常。四、编程题(3道高频机考编程,带完整可运行代码+解析)编程题1:字符串反转(基础必考)题目:输入一个字符串,实现字符串反转,不使用自带反转方法。完整代码:java

importjava.util.Scanner;

publicclassReverseString{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

System.out.print("请输入字符串:");

Stringstr=sc.next();

Stringresult=reverse(str);

System.out.println("反转后字符串:"+result);

sc.close();

}

//自定义字符串反转方法

publicstaticStringreverse(Stringstr){

if(str==null||str.length()<=1){

returnstr;

}

char[]chars=str.toCharArray();

intleft=0;

intright=chars.length-1;

//双指针交换字符

while(left<right){

chartemp=chars[left];

chars[left]=chars[right];

chars[right]=temp;

left++;

right--;

}

returnnewString(chars);

}

}

解析:将字符串转为字符数组,通过左右双指针首尾交换,实现反转,时间复杂度O(n),效率高,兼容空字符串和单字符场景。编程题2:数组去重(机考高频)题目:给定一个int数组,去除重复元素,输出去重后的数组内容。完整代码:java

importjava.util.HashSet;

importjava.util.Set;

publicclassArrayDistinct{

publicstaticvoidmain(String[]args){

int[]arr={1,2,2,3,3,3,4,5,5};

//利用Set集合自动去重

Set<Integer>set=newHashSet<>();

for(intnum:arr){

set.add(num);

}

//遍历输出结果

System.out.println("数组去重结果:");

for(Integernum:set){

System.out.print(num+"");

}

}

}

解析:HashSet不允许存储重复元素,利用该特性快速去重,代码简洁、不易出错,是机考最优写法;也可通过双重循环遍历判断去重,适合零基础答题。编程题3:斐波那契数列(递归+迭代双解法)题目:输出前n项斐波那契数列(1,1,2,3,5,8...)迭代法(推荐,无栈溢出)完整代码:java

importjava.util.Scanner;

publicclassFibonacci{

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

System.out.print("请输入项数:");

intn=sc.nextInt();

getFib(n);

sc.close();

}

publicstaticvoidgetFib(intn){

if(n<=0){

System.out.println("输入不合法");

return;

}

inta=1;

intb=1;

System.out.print("斐波那契数列:");

for(inti=1;i<=n;i++){

System.out.print(a+"");

inttemp=a+b;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论