- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
JavaSE高频面试题及参考答案
一、基础语法与数据类型
问题:Java中基本数据类型和引用数据类型的区别?
答案:基本类型(byte/short/int/long/float/double/char/boolean)直接存储值,存放在栈内存;引用类型(类、接口、数组等)存储对象的内存地址,栈存地址、堆存实际对象。基本类型默认值固定(如int默认0),引用类型默认值是null。
问题:int和Integer有什么区别?什么时候用Integer?
答案:int是基本类型,Integer是包装类(引用类型)。Integer提供了数值转换、比较等方法(如parseInt()、compareTo()),还能处理null值场景(比如数据库查询结果可能为null,用Integer接收避免空指针)。另外,Integer有常量池缓存(-128~127),超出范围会新建对象,int则直接赋值。
问题:String为什么是不可变的?
答案:String类被final修饰,不能被继承;内部存储字符的char[]数组也是privatefinal的,既不能修改数组引用,也不能通过外部访问修改数组内容。不可变的好处是线程安全、能复用常量池中的对象,减少内存开销。
二、面向对象(OOP)
问题:封装、继承、多态的含义和作用?
答案:
封装:隐藏对象内部细节,通过getter/setter控制属性访问,比如实体类的私有属性,避免外部随意修改,保证数据安全性。
继承:子类继承父类的非私有属性和方法,减少代码冗余,比如Animal类的eat()方法,Dog类继承后可直接使用,还能扩展自己的bark()方法。
多态:同一行为的不同表现形式,核心是方法重写和向上转型,比如父类引用指向子类对象(Animaldog=newDog()),调用eat()时执行子类重写的方法,提高代码灵活性。
问题:final、finally、finalize的区别?
答案:
final:修饰类不能被继承,修饰方法不能被重写,修饰变量(基本类型值不变,引用类型地址不变)。
finally:try-catch-finally中,无论是否抛出异常,finally块都会执行(除非用System.exit(0)终止程序),常用来关闭资源(流、数据库连接)。
finalize:Object类的方法,垃圾回收器回收对象前会调用该方法,程序员不能主动调用,且JDK9后已被标记为过时,不推荐使用。
问题:抽象类和接口的区别?
答案:
维度
抽象类
接口
继承/实现
单继承(extends)
多实现(implements)
方法修饰
可含普通方法和抽象方法
JDK8+可含默认方法/静态方法,抽象方法无实现
属性修饰
可含各种访问修饰符的属性
只能是publicstaticfinal常量
构造方法
有构造方法(不能实例化)
无构造方法
设计目的
体现“is-a”关系,复用代码
体现“has-a”关系,定义行为规范
三、集合框架
问题:ArrayList和LinkedList的区别?
答案:
底层实现:ArrayList基于动态数组(Object[]),LinkedList基于双向链表。
访问效率:ArrayList支持随机访问(get(intindex)时间复杂度O(1)),LinkedList需遍历链表(O(n))。
增删效率:LinkedList在链表首尾或指定节点增删(O(1)),ArrayList增删需移动数组元素(O(n))。
内存占用:LinkedList每个节点需存储前后指针,内存开销更大;ArrayList存在数组扩容预留空间。
问题:HashMap的底层实现(JDK8前后区别)?
答案:
JDK7:数组+链表(哈希表),通过key的hashCode()计算数组索引,哈希冲突时用链表存储相同索引的元素(拉链法)。
JDK8:数组+链表+红黑树,当链表长度超过阈值(默认8)且数组长度=64时,链表转为红黑树(查询时间复杂度从O(n)降为O(logn));数组长度不足64时会先扩容。
核心逻辑:put时先计算key的哈希值,扰动处理后得到数组索引,判断该位置是否为空,为空则直接插入,不为空则判断key是否相同(equals()),相同则覆盖值,不同则链表/红黑树插入。
问题:HashMap和ConcurrentHashMap的区别?
答案:
线程安全:HashMap非线程安全,多线程操作可能出现数据不一致;ConcurrentHashMap是
您可能关注的文档
最近下载
- QTTXB001-2021 金属材料-不锈钢棒.pdf VIP
- 基于51单片机的电子密码锁设计.docx VIP
- (76页PPT)西式面点技术第四章蛋糕的制作.pptx VIP
- 小学体育--立定跳远公开课教案.docx VIP
- 2024年中考英语语法复习:一般现在时和现在进行时120题练习题(含答案).pdf VIP
- 大班语言《妈妈发火了》微课件.pptx VIP
- 2024年江苏省普通高中学业水平合格性考试调研学生物试题(解析版).docx VIP
- 1基于RS和GIS的青岛市近十年来土地利用动态变化的研究与分析.ppt VIP
- 部编三年级语文上册 富饶的西沙群岛 课后练习(含答案).doc VIP
- 20S517- 排水管道出水口.pdf VIP
原创力文档


文档评论(0)