- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Java高频面试题及实战答案
一、Java基础语法
问:==和equals()的区别是什么?
答:==是运算符,比较的是变量的“实际值”——如果是基本类型(int、String、boolean这些),比的就是字面量是否相等;如果是引用类型(比如自己定义的User类、List集合),比的是两个对象在堆内存里的地址是否一样(是不是同一个对象)。equals()是Object类的方法,默认实现其实就是==,但很多类(比如String、Integer)都重写了它,改成了“内容比较”。比如Stringstr1=abc;Stringstr2=newString(abc);这里str1==str2是false(地址不同),但str1.equals(str2)是true(内容相同)。实际开发中,比较字符串、包装类这些,优先用equals(),避免踩地址坑。
问:final、finally、finalize()的区别?
答:这三个是完全不同的东西,记的时候别混了。final是修饰符,能修饰类、方法、变量:修饰类的话,这个类不能被继承(比如String类);修饰方法不能被重写;修饰变量(基本类型)就是常量,值不能改,修饰引用类型的话,引用地址不能改,但对象里的属性能改(比如finalListlist=newArrayList();list能add元素,但不能再让list=newLinkedList())。finally是异常处理里的关键字,和try、catch搭配用,不管try里的代码有没有抛异常,finally里的代码一定执行(除非JVM直接退出,比如System.exit(0)),一般用来关流、释放资源(比如关闭数据库连接、文件流)。finalize()是Object类的方法,是JVM垃圾回收前会调用的方法,用来做资源清理,但这个方法不靠谱——JVM不一定啥时候回收对象,甚至可能不调用,现在已经被标记为过时了,实际开发中不用,要清理资源就用try-with-resources或者finally。
二、Java集合框架
问:ArrayList和LinkedList的区别,怎么选?
答:核心是底层数据结构不一样。ArrayList是基于动态数组的,查询快(通过索引get元素,时间复杂度O(1)),但增删慢(尤其是中间位置,要移动数组元素,O(n));LinkedList是基于双向链表的,增删快(改前后节点的指针就行,O(1)),但查询慢(要从头或尾遍历,O(n))。选的时候看场景:如果主要是查数据、遍历,用ArrayList;如果主要是频繁在中间插、删元素(比如队列操作),用LinkedList。另外,ArrayList初始化有默认容量(10),满了会扩容(默认扩到1.5倍),如果知道大概数据量,提前指定容量能减少扩容开销;LinkedList不用考虑扩容,因为链表是节点按需创建的。
问:HashMap的底层实现,JDK1.8和之前有啥区别?
答:HashMap底层是“数组+链表/红黑树”的结构,数组叫哈希桶,每个桶里存的是key-value的Entry节点。工作原理是:先通过key的hashCode()计算哈希值,再通过哈希算法得到数组索引,把节点放到对应桶里;如果两个key的哈希值相同、索引也相同,就会形成链表(哈希冲突)。JDK1.8的主要优化是:当链表长度超过8,并且数组长度大于64时,会把链表转成红黑树,这样查询、插入的效率从O(n)提升到O(logn);另外,1.8之前链表是头插法,1.8之后改成尾插法,避免多线程下出现链表循环的问题(不过HashMap本身不是线程安全的,多线程还是要用ConcurrentHashMap)。还有,1.8的hash算法更简单,减少了哈希冲突的概率,并且扩容时节点的迁移逻辑也优化了,不用重新计算哈希值。
三、多线程
问:线程和进程的区别是什么?
答:进程是操作系统资源分配的最小单位,比如我们打开的一个浏览器、一个IDE,都是一个进程,每个进程有自己独立的内存空间(代码段、数据段、堆)。线程是进程里的执行单元,是CPU调度的最小单位,一个进程可以有多个线程,这些线程共享进程的内存空间,只拥有自己的程序计数器、栈和本地方法栈。简单说,进程是“独立的运行实例”,线程是“进程里的干活的”。比如一个电商网站的后台服务是一个进程,里面处理用户下单、查询库存、发送短信的就是不同线程。线程切换的开销比进程小(因为不用切换内存空间),所以多线程
您可能关注的文档
最近下载
- 2025年数字化农场管理方案研究项目可行性研究报告.docx
- 幼儿园社会治安最小应急单元管理制度.docx VIP
- PPT《建筑电气与智能化通用规范》GB 55024-2022 解读(OCR).pdf VIP
- 2025下半年教师资格考试新版试卷真题附答案(高中信息技术).docx VIP
- 生理学基础第十章-神经系统.ppt VIP
- ABB ACS180 drives User interface guide 手册(英语)说明书.pdf
- 驳岸工程施工方案.pdf VIP
- 股权激励变成股权纠纷通用.pdf VIP
- 南芯产品规格书SC8886.pdf VIP
- 胃食管反流病中西医结合诊疗专家共识(2025年).pptx VIP
原创力文档


文档评论(0)