- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Java面试笔试题及答案
一、基础选择题(每题2分,共10分)
以下关于Java基本数据类型的说法,正确的是()
A.long类型占8个字节,默认值为0
B.float类型精度低于double,可直接赋值给double变量
C.boolean类型可参与算术运算(如true+1)
D.char类型只能存储单个字符,不能表示Unicode编码
下列关于String、StringBuilder、StringBuffer的描述,错误的是()
A.String是不可变对象,每次修改都会生成新对象
B.StringBuilder线程不安全,效率高于StringBuffer
C.StringBuffer的append方法返回void
D.频繁字符串拼接场景下,推荐使用StringBuilder而非String
关于Java继承,下列说法正确的是()
A.一个类可以继承多个父类(多继承)
B.子类重写父类方法时,访问权限不能低于父类方法
C.final修饰的类可以被继承,但方法不能被重写
D.子类构造方法必须显式调用父类构造方法(super())
二、进阶简答题(每题8分,共40分)
请说明ArrayList与LinkedList的核心区别,以及各自的适用场景。
什么是线程安全?HashMap和ConcurrentHashMap在线程安全方面有何差异?JDK1.8中ConcurrentHashMap做了哪些优化?
解释Java的“双亲委派模型”,并说明其作用。若需加载一个与JDK类重名的自定义类(如java.lang.String),会出现什么问题?
简述synchronized关键字与volatile关键字的区别,分别适用于什么场景?
说明CheckedException(受检异常)与UncheckedException(非受检异常)的区别,开发中如何选择自定义异常类型?
三、编程题(每题25分,共50分)
请实现一个方法,输入一个单向链表的头节点,反转该链表并返回反转后的头节点(要求:时间复杂度O(n),空间复杂度O(1))。
链表节点定义:
classListNode{
intval;
ListNodenext;
ListNode(intx){val=x;}
}
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。请找出那个只出现一次的元素(要求:不使用额外哈希表,时间复杂度O(n))。
四、答案解析
一、基础选择题
答案:B
A错误:long默认值为0L,而非0;
C错误:boolean不支持算术运算;
D错误:char占2字节,可存储Unicode字符(如charc=中)。
答案:C
StringBuffer的append方法返回自身对象(this),支持链式调用(如sb.append(a).append(b))。
答案:B
A错误:Java单继承,可通过接口实现多继承效果;
C错误:final类不可继承;
D错误:子类构造方法默认隐式调用父类无参构造(super()),无需显式写。
二、进阶简答题
ArrayList与LinkedList区别
底层结构:ArrayList基于动态数组(数组扩容),LinkedList基于双向链表;
操作效率:
查改(get(index)、set(index)):ArrayListO(1)(数组随机访问),LinkedListO(n)(链表遍历);
增删(add(0)、remove(0)):ArrayListO(n)(数组元素移位),LinkedListO(1)(链表节点调整);
适用场景:
频繁查改用ArrayList;
频繁首尾增删用LinkedList(如队列实现)。
线程安全与HashMap/ConcurrentHashMap
线程安全:多线程操作同一资源时,结果与单线程一致,无数据错乱/丢失;
差异:
HashMap线程不安全:多线程扩容可能触发死循环(JDK1.7),或数据覆盖(JDK1.8);
ConcurrentHashMap线程安全:JDK1.7用“分段锁(Segment)”,JDK1.8移除Segment,改用“CAS+synchronized”(只锁链表头/红黑树根节点),效率更高;
JDK1.8优化:支持红黑树存储(当链表长度8时),提升查询效率至O(logn)。
双亲委派模型
定义:类加载器加载类时,先委托父加载器加载,父加载器无法加载(找不到类)时,才由子加载器自行加载;
加载器层级(自顶向下):BootstrapC
文档评论(0)