Java高频笔试刷题题库(含详细答案解析)_第1页
Java高频笔试刷题题库(含详细答案解析)_第2页
Java高频笔试刷题题库(含详细答案解析)_第3页
Java高频笔试刷题题库(含详细答案解析)_第4页
Java高频笔试刷题题库(含详细答案解析)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

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

文档简介

Java高频笔试刷题题库(含详细答案解析)本套题库精选企业校招、社招高频Java笔试真题,覆盖Java基础、面向对象、集合框架、异常机制、多线程、JDK新特性、基础算法等核心考点,题目贴合真实笔试场景,答案解析详细通俗,适合刷题巩固知识点。一、Java基础语法(单选题)1、以下关于Java基本数据类型说法正确的是?()A、boolean类型占用1个字节B、char类型可以存储中文汉字C、float类型赋值可以直接写3.14D、byte类型取值范围是0~255答案:B详细解析:A错误:boolean类型没有明确固定字节大小,虚拟机规范中boolean底层按1bit存储,并非1字节;B正确:char类型为16位Unicode字符,占用2字节,可存储汉字、字母、符号等所有Unicode字符;C错误:Java中小数默认是double类型,float赋值必须加f/F,正确写法为3.14f;D错误:byte是有符号字节类型,取值范围是-128~127,0~255是无符号字节范围。2、shorts=1;s=s+1;会编译报错吗?原因是什么?()A、不报错,正常运行B、报错,类型不匹配,int无法赋值给shortC、报错,变量未初始化D、不报错,自动类型转换答案:B详细解析:Java中进行数值运算时,存在自动类型提升规则:byte、short、char参与运算时,会自动提升为int类型。s+1运算后结果是int类型,直接赋值给short类型的变量s,属于高精度转低精度,会丢失精度,编译器直接报错。修正方式:s=(short)(s+1);强制类型转换。3、以下关于final关键字说法错误的是?()A、final修饰的类不能被继承B、final修饰的方法不能被重写C、final修饰的变量必须初始化且只能赋值一次D、final修饰的变量值绝对不能修改答案:D详细解析:final修饰基本数据类型变量:数值不可修改;final修饰引用类型变量:引用地址不可修改,但对象内部的属性值可以修改。例如:finalListlist=newArrayList();可以执行list.add()操作,只是不能再给list赋值新对象。因此D选项说法绝对,错误。二、面向对象(OOP)4、Java面向对象的三大特性不包括以下哪项?()A、封装B、继承C、多态D、重载答案:D详细解析:Java面向对象三大核心特性:封装、继承、多态。重载是多态的实现形式之一(编译期多态),不属于三大特性的独立范畴,重写是运行期多态的核心实现。5、重载和重写的区别,以下说法正确的是?()A、重写发生在同类中,重载发生在父子类中B、重载方法参数列表必须不同,返回值可以不同C、重写方法可以扩大父类的访问权限D、重写方法可以抛出更广的异常答案:C详细解析:1、重载(Overload):发生在同一个类中,方法名相同,参数列表(个数、类型、顺序)不同,返回值、访问修饰符无要求;2、重写(Override):发生在父子类中,方法名、参数列表、返回值必须完全一致;3、重写规则:访问权限只能相等或扩大(父类protected,子类可以public);异常只能缩小或不抛出,不能抛出更广的受检异常。A、B、D说法均错误,C正确。6、接口和抽象类的区别,描述错误的是?()A、抽象类可以有构造方法,接口没有构造方法B、抽象类可以包含普通方法,JDK8之前接口只能有抽象方法C、一个类只能继承一个抽象类,可以实现多个接口D、抽象类和接口都可以定义成员变量答案:D详细解析:抽象类:可以定义普通成员变量、常量、普通方法、抽象方法、构造方法,单继承;接口:JDK8之前只能定义全局常量(publicstaticfinal),不能定义普通变量;JDK8及以后支持默认方法、静态方法,JDK9支持私有方法。接口无构造方法、多实现。接口中不存在普通成员变量,所有变量默认被publicstaticfinal修饰,因此D错误。三、集合框架7、ArrayList和LinkedList的区别,说法错误的是?()A、ArrayList底层是数组,LinkedList底层是双向链表B、ArrayList查询速度快,增删速度慢C、LinkedList适合频繁增删,不适合随机查询D、两者都是线程安全的集合答案:D详细解析:ArrayList、LinkedList、HashMap等常用集合都是非线程安全的,多线程环境下会出现并发修改异常、数据覆盖等问题。线程安全的对应集合:Vector、Hashtable、ConcurrentHashMap、CopyOnWriteArrayList等。8、HashMap的底层结构及特点,以下说法正确的是?()A、JDK1.8HashMap底层是数组+单向链表B、HashMap允许key和value为nullC、HashMap是有序集合D、HashMap默认初始容量是16,扩容因子0.5答案:B详细解析:A错误:JDK1.7底层是数组+单向链表;JDK1.8优化为数组+单向链表+红黑树,链表长度大于8、数组容量大于64时转为红黑树;B正确:HashMap允许一个key为null,多个value为null;C错误:HashMap无序,LinkedHashMap可以保证插入有序;D错误:默认初始容量16,负载因子0.75,扩容阈值=容量*0.75。9、Iterator迭代器遍历集合时,能否直接调用集合的remove方法?为什么?答案:不能,会抛出ConcurrentModificationException并发修改异常详细解析:迭代器遍历过程中,集合会维护一个修改次数modCount,迭代器会记录当前遍历的expectedModCount。如果遍历中直接使用集合的remove/add方法,会修改modCount值,导致modCount!=expectedModCount,触发并发修改异常。正确做法:使用迭代器自身的iterator.remove()方法,该方法会同步更新expectedModCount,避免异常。四、异常机制10、Java中异常的分类,以下属于运行时异常的是?()A、IOExceptionB、SQLExceptionC、NullPointerExceptionD、FileNotFoundException答案:C详细解析:Java异常分为两大类:1、受检异常(编译期异常):继承自Exception,必须手动捕获或抛出,如IO异常、SQL异常、文件不存在异常;2、运行时异常:继承自RuntimeException,编译不报错,运行时抛出,如空指针、数组越界、类型转换异常等。ABD均为编译期异常,C为运行时异常。11、try-catch-finally中,finally代码块是否一定会执行?简述原因答案:不一定详细解析:大部分场景下finally都会执行,以下两种特殊场景不会执行:1、try代码块执行前,程序终止(如系统退出System.exit(0));2、程序所在线程死亡、虚拟机崩溃。即使try、catch中有return语句,finally依然会在方法返回前执行。五、多线程基础12、Java中创建线程的方式不包括?()A、继承Thread类B、实现Runnable接口C、实现Callable接口D、重写start()方法答案:D详细解析:Java三种标准创建线程方式:1、继承Thread类,重写run()方法;2、实现Runnable接口,重写run()方法(无返回值);3、实现Callable接口,重写call()方法(有返回值、可抛异常)。start()是启动线程的方法,底层由虚拟机实现,不能重写,重写后只是普通方法,无法开启新线程。13、synchronized和Lock锁的区别?(简答高频)详细答案解析:1、底层机制:synchronized是JVM底层内置锁,自动加锁释放锁;Lock是Java代码层面的锁,需要手动lock()加锁、unlock()释放锁;2、锁特性:synchronized属于悲观锁、独占锁,不可中断;Lock(ReentrantLock)可中断、可超时、可实现公平锁;3、锁粒度:synchronized修饰方法、代码块;Lock锁粒度更灵活,可精准控制;4、条件等待:Lock可以绑定多个Condition条件,精准唤醒指定线程;synchronized只能随机唤醒或全部唤醒。六、JDK新特性(8/11高频)14、JDK8Lambda表达式的特性,说法正确的是?()A、Lambda可以简化所有接口的实现B、Lambda依赖函数式接口(仅有一个抽象方法的接口)C、Lambda可以修改外层局部变量D、Lambda方法体必须写大括号答案:B详细解析:Lambda表达式的使用前提:必须是函数式接口(@FunctionalInterface修饰,且只有一个抽象方法);A错误:仅支持函数式接口,不支持多抽象方法接口;C错误:Lambda中外层局部变量默认隐式final,不能二次修改;D错误:单行代码方法体可以省略大括号、return关键字。七、编程基础代码题(笔试手写高频)15、手写代码:判断一个字符串是否为回文字符串(正反读取一致)参考答案(可直接笔试默写):java

publicclassPalindromeTest{

publicstaticbooleanisPalindrome(Stringstr){

if(str==null||str.length()==0){

returnfalse;

}

intleft=0;

intright=str.length()-1;

while(left<right){

if(str.charAt(left)!=str.charAt(right)){

returnfalse;

}

left++;

right--;

}

returntrue;

}

publicstaticvoidmain(String[]args){

System.out.println(isPalindrome("12321"));//true

System.out.println(isPalindrome("abc123"));//false

}

}解析:采用双指针法,首尾指针逐个比对字符,效率高于字符串反转比对,时间复杂度O(n)。16、手写代码:遍历HashMap的四种方式参考答案:java

importjava.util.HashMap;

importjava.util.Map;

importjava.util.Set;

publicclassHashMapIterTest{

publicstaticvoidmain(String[]args){

Map<String,Integer>map=newHashMap<>();

map.put("张三",20);

map.put("李四",22);

//方式1:遍历key集合

Set<String>keySet=map.keySet();

for(Stringkey:keySet){

System.out.println(key+":"+map.get(key));

}

//方式2:遍历entry键值对(推荐,效率最高)

for(Map.Entry<String,Integer>entry:map.entrySet()){

System.out.println(entry.

温馨提示

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

评论

0/150

提交评论