没有合适的资源?快使用搜索试试~ 我知道了~
首页Java面试精华:简洁模板+高频问题解析
《Java面试必知必会2.0》Pixyll主题.pdf是一本针对Java求职者准备面试的重要参考资料。这本书不仅涵盖了简历制作的实用建议,如强调简历的朴素性和内容精炼,推荐使用公众号“代码界的小白”获取简历模板和修改服务,还深入解析了Java的基础面试知识。 其中,Java语言的三大特性是本书的核心内容。首先,封装是Java的关键概念,它通过将对象的属性私有化,提供公共方法供外部访问,保护了数据的安全性。继承则允许子类继承父类的属性和方法,同时子类还可以扩展自身的特性和功能,但父类的私有属性和方法在子类中是不可直接访问的。 多态性是Java中的重要概念,表示同一种行为可以在不同的对象上表现出不同的形式。在Java中,有两种方式实现多态:一是子类重写父类的方法(即单继承中的多态),二是接口实现,通过覆盖接口中相同的方法(接口支持多继承)。重载则特指在同一个类中,由于方法名相同但参数列表不同而导致的不同方法定义,这主要涉及到方法的调用规则。 此外,书中还分享了面试中常见的基础知识高频问题,如Java语言的三大特性解释以及重载与重写之间的区别。这些问题旨在帮助求职者掌握面试官可能关注的核心知识点,从而提升面试成功率。 对于那些寻求更全面的Java面试指南和资源的读者,公众号“代码界的小白”提供了更多内容,包括Java后端实战项目、互联网招聘信息以及完整的电子版资料。通过与公众号互动,求职者可以获取更多的实战经验和策略,提高求职竞争力。 《Java面试必知必会2.0》是一本实用的面试准备工具,对于Java开发者来说,无论是简历制作还是技术复习,都能从中找到有价值的指导。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/87959806/bg10.jpg)
6.HashMap和TreeMap的区别?
参考答案参考答案:
1、HashMap是通过hash值进⾏快速查找的;HashMap中的元素是没有顺序的;TreeMap
中所有的元素都是有某⼀固定顺序的,如果需要得到⼀个有序的结果,就应该使⽤
TreeMap;
2、HashMap和TreeMap都是线程不安全的;
3、HashMap继承AbstractMap类;覆盖了hashcode() 和equals() ⽅法,以确保两个相等
的映射返回相同的哈希值;
TreeMap继承SortedMap类;他保持键的有序顺序;
4、HashMap:基于hash表实现的;使⽤HashMap要求添加的键类明确定义了hashcode()
和equals() (可以重写该⽅法);为了优化HashMap的空间使⽤,可以调优初始容量和负
载因⼦;
TreeMap:基于红⿊树实现的;TreeMap就没有调优选项,因为红⿊树总是处于平衡的状
态;
5、HashMap:适⽤于Map插⼊,删除,定位元素;
TreeMap:适⽤于按⾃然顺序或⾃定义顺序遍历键(key)
!
更多
Java
⾯试⼋股、
Java
后端实战项⽬、更多互联⽹春招、实习、秋招等经验分享,可
以上微信搜索公众号:代码界的⼩⽩,和⼩⽩⼀起学编程!
!
多线程与并发编程⾼频⾯试问题
![](https://csdnimg.cn/release/download_crawler_static/87959806/bg11.jpg)
1.说说什么是线程安全?如何实现线程安全?
参考答案参考答案:当多个线程同时访问⼀个对象时,如果不⽤考虑这些线程在运⾏时环境下的调度
和交替执⾏,也不需要进⾏额外的同步,或者在调⽤⽅进⾏任何其他的协调操作,调⽤这个
对象的⾏为都可以获得正确的结果,那就称这个对象是线程安全的。【摘⾃深⼊理解Jvm虚
拟机】
实现线程安全的⽅式有三⼤种⽅法,分别是互斥同步、⾮阻塞同步和⽆同步⽅案。
互斥同步:同步是指多个线程并发访问共享数据时,保证共享数据在同⼀各时刻只被⼀条
(或⼀些,当使⽤信号量的时候)线程使⽤。⽽互斥是实现同步的⼀种⼿段,临界去、互斥
量和信号量都是常见的互斥实现⽅式。Java中实现互斥同步的⼿段主要有synchronized关键
字或ReentrantLock等。
⾮阻塞同步类似是⼀种乐观并发的策略,⽐如CAS。
⽆同步⽅案,⽐如使⽤ThreadLocal。
追问1:synsynchronized和ReentLock的区别是什么?
参考答案参考答案:
相同点:
(1)都是可重⼊锁
![](https://csdnimg.cn/release/download_crawler_static/87959806/bg12.jpg)
(2)都保证了可见性和互斥性
(3)都可以⽤于控制多线程对共享对象的访问
不同点:
(1)ReentrantLock等待可中断
(2)synchronized中的锁是⾮公平的,ReentrantLock默认也是⾮公平的,但是可以通过
修改参数来实现公平锁。
(3)ReentrantLock绑定多个条件
(4)synchronized是Java中的关键字是JVM级别的锁,⽽ReentrantLock是⼀个Lock接⼜
下的实现类,是API层⾯的锁。
(5)synchronized隐式获取锁和释放锁,ReentrantLock显⽰获取和释放锁,在使⽤时避
免程序异常⽆法释放锁,需要在finally控制块中进⾏解锁操作。
追问2:syn和volatile的区别?
参考答案参考答案:synchronized 关键字和 volatile关键字是两个互补的存在,⽽不是对⽴的存
在!
volatile关键字是线程同步的是线程同步的轻量级实现,所以,所以volatile性能肯定⽐synchronized关
键字要好。但是。但是volatile关键字只能⽤于变量⽽ synchronized 关键字可以修饰⽅法以
及代码块。
volatile 关键字能保证数据的可见性,但不能保证数据的原⼦性。synchronized关键
字两者都能保证。
volatile关键字主要⽤于解决变量在多个线程之间的可见性,⽽ synchronized关键字
解决的是多个线程之间访问资源的同步性。
追问3:synchronized锁升级的过程说⼀下?
参考答案参考答案:在jdk1.6后Java对synchronize锁进⾏了升级过程,主要包含偏向锁、轻量级锁
和重量级锁,主要是针对对象头MarkWord的变化。
(1)偏向锁:
为什么要引⼊偏向锁?
因为经过HotSpot的作者⼤量的研究发现,⼤多数时候是不存在锁竞争的,常常是⼀个线程
多次获得同⼀个锁,因此如果每次都要竞争锁会增⼤很多没有必要付出的代价,为了降低获
取锁的代价,才引⼊的偏向锁。
偏向锁的升级
![](https://csdnimg.cn/release/download_crawler_static/87959806/bg13.jpg)
当线程1访问代码块并获取锁对象时,会在java对象头对象头和栈帧栈帧中记录偏向的锁的threadID,
因为偏向锁不会主动释放锁,因此以后线程1再次获取锁的时候,需要⽐较当前线程的
threadID和Java对象头中的threadID是否⼀致,如果⼀致(还是线程1获取锁对象),则⽆
需使⽤CAS来加锁、解锁;如果不⼀致(其他线程,如线程2要竞争锁对象,⽽偏向锁不会主
动释放因此还是存储的线程1的threadID),那么需要查看Java对象头中记录的线程1是否存
活,如果没有存活,那么锁对象被重置为⽆锁状态,其它线程(线程2)可以竞争将其设置为
偏向锁;如果存活,那么⽴刻查找该线程(线程如果存活,那么⽴刻查找该线程(线程1)的栈帧信息,如果还是需要继续持有)的栈帧信息,如果还是需要继续持有
这个锁对象,那么暂停当前线程这个锁对象,那么暂停当前线程1,撤销偏向锁,升级为轻量级锁,如果线程,撤销偏向锁,升级为轻量级锁,如果线程1 不再使⽤不再使⽤
该锁对象,那么将锁对象状态设为⽆锁状态,重新偏向新的线程。该锁对象,那么将锁对象状态设为⽆锁状态,重新偏向新的线程。
(2)轻量级锁
为什么要引⼊轻量级锁?
轻量级锁考虑的是竞争锁对象的线程不多,⽽且线程持有锁的时间也不长的情景。因为阻塞
线程需要CPU从⽤户态转到内核态,代价较⼤,如果刚刚阻塞不久这个锁就被释放了,那这
个代价就有点得不偿失了,因此这个时候就⼲脆不阻塞这个线程,让它⾃旋这等待锁释放。
轻量级锁什么时候升级为重量级锁?
线程1获取轻量级锁时会先把锁对象的对象头MarkWord复制⼀份到线程1的栈帧中创建的⽤
于存储锁记录的空间(称为DisplacedMarkWord),然后使⽤CAS把对象头中的内容替换
为线程1存储的锁记录(DisplacedMarkWord)的地址;
如果在线程1复制对象头的同时(在线程1CAS之前),线程2也准备获取锁,复制了对象头到
线程2的锁记录空间中,但是在线程2CAS的时候,发现线程1已经把对象头换了,线程线程2的的
CAS失败,那么线程失败,那么线程2就尝试使⽤⾃旋锁来等待线程就尝试使⽤⾃旋锁来等待线程1释放锁释放锁。
但是如果⾃旋的时间太长也不⾏,因为⾃旋是要消耗CPU的,因此⾃旋的次数是有限制的,
⽐如10次或者100次,如果⾃旋次数到了线程1还没有释放锁,或者线程1还在执⾏,线程线程2还还
在⾃旋等待,这时又有⼀个线程在⾃旋等待,这时又有⼀个线程3过来竞争这个锁对象,那么这个时候轻量级锁就会膨过来竞争这个锁对象,那么这个时候轻量级锁就会膨
胀为重量级锁胀为重量级锁。重量级锁把除了拥有锁的线程都阻塞,防⽌CPU空转。【来⾃⽹络来⾃⽹络】
追问4:synchronize锁的作⽤范围
参考答案参考答案:
(1)synchronize作⽤于成员变量和⾮静态⽅法时,锁住的是对象的实例,即this对象。
(2)synchronize作⽤于静态⽅法时,锁住的是Class实例
(3)synchronize作⽤于⼀个代码块时,锁住的是所有代码块中配置的对象。
追问5: 什么时候 Java 程序会产⽣死锁?如何定位和修复?
![](https://csdnimg.cn/release/download_crawler_static/87959806/bg14.jpg)
追问5: 什么时候 Java 程序会产⽣死锁?如何定位和修复?
参考答案参考答案: 死锁是⼀种程序状态,由于循环依赖循环依赖导致彼此⼀直处于等待之中,没有任何个体
可以继续运⾏。死锁不仅是在线程之间会发⽣,存在资源独占的进程之间同样也可能出现死
锁。在多线程场景中的死锁,指两个或多个线程之间,由于互相持有对⽅需要的锁,⽽永久
处于阻塞的状态。
定位死锁经常利⽤ jstack 等⼯具获取线程栈线程栈,然后定位互相之间的依赖关系,进⽽找到死
锁。
⽐较明显的死锁, jstack 等就能直接定位,类似 JConsole 甚⾄可以在图形界⾯进⾏有限的
死锁检测。
如果程序运⾏时发⽣了死锁如果程序运⾏时发⽣了死锁,绝⼤多数情况下都是⽆法在线解决的绝⼤多数情况下都是⽆法在线解决的,只能重启、修正程序
本⾝问题。所以,代码开发阶段互相审查,或者利⽤⼯具进⾏预防性排查,往往也是很重要
的。
2.Java中线程的状态有哪些?线程间的通信⽅式有哪些?
参考答案参考答案:Java中线程⽣命周期分为新建(New)、运⾏(Runnable)、阻塞
(Blocked)、⽆限期等待(Waiting)、限期等待(Time Waiting)和结束
(Terminated)这6种状态。
Java中线程间通信⽅式有:
互斥量互斥量(Mutex):采⽤互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。
因为互斥对象只有⼀个,所以可以保证公共资源不会被多个线程同时访问。⽐如 Java 中的
synchronized 关键词和各种 Lock 都是这种机制。
信号量(Semphares) :它允许同⼀时刻多个线程访问同⼀资源,但是需要控制同⼀时刻访问
此资源的最⼤线程数量
事件(Event) :Wait/Notify:通过通知操作的⽅式来保持多线程同步,还可以⽅便的实现多
线程优先级的⽐较操
追问1:sleep后进⼊什么状态,wait后进⼊什么状态?
剩余120页未读,继续阅读
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![jar](https://img-home.csdnimg.cn/images/20210720083455.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/1c18c47465b9426d85f2175a9d03d536_wanghongpu9305.jpg!1)
梦想是坚持
- 粉丝: 71
- 资源: 233
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 岩石滑动与断层冲击地压:声发射特征分析
- 新时代煤炭工业八大战略新取向剖析
- 开采强度对华亭矿区冲击地压危险性的影响分析
- 新安煤矿探采对比:影响安全生产的关键因素与技术支撑
- 210MW循环流化床锅炉引风机变频改造优化与节能效果
- 浅埋煤层开采沉陷预测:方法应用与影响分析
- 优化巷道过陷落柱支护方案:数值模拟与现场试验
- 坚硬顶板定向断裂爆破技术:安全高效采煤新方案
- 北航2019算法课作业解析:投资策略与凸子多边形优化
- 断层破碎带垮冒下堆积体边界抗力分布关键影响因素
- 哈拉沟选煤厂优化末煤系统提高效率与处理能力
- 瓦斯涌出影响下采动煤体蠕变失稳研究
- 提升煤矿装载效率的可控箕斗定量装载设备设计
- 水分调控下烟煤瓦斯吸附特性对比研究
- 重介质悬浮液密度控制硬件设计与选型探讨
- 坚硬顶板巷道支护参数设计:现场测试与数值分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)