没有合适的资源?快使用搜索试试~ 我知道了~
首页JAVAEE精选面试题.docx
JAVAEE精选面试题.docx
需积分: 50 2 下载量 143 浏览量
更新于2023-03-03
评论
收藏 65KB DOCX 举报
资源内容包含: 1、java基础; 2、javaWEB; 3、java数据库; 4、javaEE。 HashMap和Hashtable的区别? 1).hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。 2).hashMap允许空键值,而hashTable不允许。 3).hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
资源详情
资源评论
资源推荐
面试题精选
一. 基础
1. ==和 equals 方法究竟有什么区别?
方法比较两个对象的内容
比较两个对象是否是同一对象,或者说对象在内存中的首地址是否相同
应用:对于基本数据类型,“比较的是两者的值是否相等
对于引用数据类型,比较的是引用的地址是否相同,对象默认的 方法和一样
对于 等包装类都重写了 方法,比较的是内容是否相同
静态变量和实例变量的区别?
静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。
实例变量属于该类的对象,必须产生该类对象,才能调用实例变量。
和 的区别?
中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相
对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆
盖者可能不会限制它所覆盖的方法的访问。
和 有什么区别?
提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方
法, 当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
接口中声明的变量默认都是 的。抽象类可以包含非 的变量。
接口中的成员函数默认是 !" 的。抽象类的成员函数可以是 , #"$ 或者是 !"。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含 % 方法的话是可
以被调用的
与 的区别?
是字符串常量 修饰&'( 字符串变量线程安全&'$字符串变量线程不安全
和 '(
和 '( 主要区别是性能) 是不可变对象每次对 类型进行操作都等同于产生了一个
新的 对象然后指向新的 对象所以尽量不在对 进行大量的拼接操作否则会产生很多临时
对象导致 *+ 开始工作影响系统性能
'( 是对对象本身操作而不是产生新的对象因此在通常在有大量拼接的情况下我们建议使用
'(
但是需要注意现在 , 会对 拼接做一定的优化)-./#01% 1会被虚拟机直
接优化成 -./#0% 此时就不存在拼接过程
'( 和 '$
'( 是线程安全的可变字符串 其内部实现是可变数组'$ 是 2 新增的其功能和
'( 类似但是非线程安全因此在没有多线程问题的前提下使用 '$ 会取得更好的性能
运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,
是一种常见运行错误。 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声
明抛出未被捕获的运行时异常
深拷贝和浅拷贝的区别是什么?
浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原
来的对象。换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。
深拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而那些引用其他对象的变量将指向被
复制过的新对象,而不再是原有的那些被引用的对象。换言之,深拷贝把要复制的对象所引用的对象都复
制了一遍。
!和 "" !的联系?
//+#$是 3!" 类的一个方法返回一个哈希值如果两个对象根据 方法比较相等那么调用这两个
对象中任意一个对象的 //+#$方法必须产生相同的哈希值如果两个对象根据 方法比较不相等那
么产生的哈希值不一定相等碰撞的情况下还是会相等的
# $ 和 $ 的区别?
+#"4# 是集合类的上级接口,继承与他的接口主要有 和 5
+#"4# 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全
化等操作。
%& 和 的区别?
5 都是继承自 +#"4# 接口
5 特点:元素有放入顺序,元素可重复 , 特点:元素无放入顺序,元素不可重复(注意:元素虽
然无放入顺序,但是元素在 中的位置是有该元素的 6/+#$ 决定的,其位置其实是固定的)
5 接口有 三个 实现 类: 57$5,05 , "# , 接口 有两 个实 现类 : 6/底 层由
6/, 实现,57$6/
%% '() 和 * 的区别?
05 在内存不够时默认是扩展 281 个,"# 是默认扩展 倍。
"# 提供 $93:#!接口,05 没有。
"# 属于线程安全级别的,但是大多数情况下不使用 "#,因为线程安全需要更大的系统开销。
% '()*)+) 的存储性能和特性?
05和 "# 是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都
允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据
慢,"# 由于使用了 0"/#;$ 方法(线程安全)所以性能上比 05 要差,57$5 使用双向链
表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,
所以插入数度较快!
% ,"-. 和 ," 的区别?
//.! 同步的,而 6/, 是非同步的,效率上比 //.! 要高。
//, 允许空键值,而 //.! 不允许。
//, 去掉了 6/.!的 "# 方法,但是加上了 "#()和 "#<0()方法。
% 集合如何保证不重复?
主要是要判断 集合中是否有重复的元素,规则如下:
、判断两个对象的 //+#$ 是否相等 。
如果不相等,认为两个对象也不相等,完毕
如果相等,转入
(这一点只是为了提高存储效率而要求的,其实理论上没有也可以,但如果没有,实际使用时效率会大大
降低,所以我们这里将其做为必需的。后面会重点讲到这个问题。)
、判断两个对象用 运算是否相等 。
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等(是判断两个对象是否相等的关键)
% ,"-. 的实现原理?
6/, 基于 // 原理,我们通过 和 方法储存和获取对象。当我们将键值对传递给 方法
时,它调用键对象的 //+#$方法来计算 //"#$,让后找到 !"7 位置来储存值对象。当获取对象
时,通过键对象的 方法找到正确的键值对,然后返回值对象。6/, 使用 57$5 来解决碰撞
问题,当发生碰撞了,对象将会储存在 57$5 的下一个节点中。 6/, 在每个 57$5 节点中储存
键值对对象。
当两个不同的键对象的 //"#$ 相同时会发生什么? 它们会储存在同一个 !"7 位置的 57$5 中。键
对象的 方法用来找到键值对
% / 的原理以及使用?
.是使用二叉树的原理对新 $$的对象按照指定的顺序排序(升序、降序),每增加一个对象
都会进行排序,将对象插入的二叉树指定的位置。
和 对象都可以进行默认的 . 排序,而自定义类的对象是不可以的,自己定义的类必
须实现 +#% ! 接口,并且覆写相应的 "#% .#函数,才可以正常使用。
% 进程和线程的区别?
一个进程是一个独立:"#$的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程
中执行的一个任务。 运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进
程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源
% 创建线程的方式?
进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻
量级进程
%# 线程有哪些状态?
线程在执行过程中,可以处于下面几种状态:
就绪=!)线程准备运行,不一定立马就能开始执行。
运行中=:进程正在执行线程的代码。
等待中>4)线程处于阻塞的状态,等待外部的处理结束。
睡眠中 :线程被强制睡眠。
?3 阻塞'#"7$#?3:等待 ?3 操作完成。
同步阻塞'#"7$#0"/#;4#:等待获取锁。
死亡@$:线程完成了执行。
& 线程同步的方式有哪些?
0"/#;$ 关键字修饰的方法
0"/#;$ 关键字修饰的语句块
使用重入锁 5#"7 类实现线程同步
A使用 ./$5#" 管理变量实现线程同步
2使用阻塞队列实现线程同步
B使用原子变量实现线程同步
% 如何保证几个线程线程有序执行?
共享对象锁,可以保证每个方法只能同时有一个线程进入,配合 C 和 #4:0 方法,可以启动或者唤
醒线程
通过主线程 #
0 中 1 和 . 方法有何不同?
这两个方法来自不同的类分别是 ./$ 和 3!"
最主要是 方法没有释放锁,而 C 方法释放了锁,使得其他线程可以使用同步控制块或者方法
C,#4:0 和 #4:0 只能在同步控制方法或者同步控制块里面使用,而 可以在任何地方使用
A 必须捕获异常,而 C,#4:0 和 #4:0 不需要捕获异常
线程之间是如何通信的?
当线程间是可以共享资源时,线程间通信是协调它们的重要的手段。 3!" 类中 CD#4:0D#4:0方
法可以用于线程间通信关于资源的锁的状态
同步方法和同步块,哪个是更好的选择?
同步块是更好的选择,因为它不会锁住整个对象(当然也可以让它锁住整个对象)。同步方法会锁住整个
对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的
锁
线程中同步和异步的区别?
同步: 线程要请求某个资源,但是此资源正在被 ' 线程使用中,因为同步机制存在, 线程请求不到,怎
么办, 线程只能等待下去
异步: 线程要请求某个资源,但是此资源正在被 ' 线程使用中,因为没有同步机制存在, 线程仍然请求
的到, 线程无需等待
简述 *$ 变量?
用来确保将变量的更新操作通知到其他线程保证了新值能立即同步到主内存以及每次使用前立即从主内存
刷新。换句话说)#4变量在各个线程中是一致的
简述线程局部变量 /")?
./$5#" 变量线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享,是一
种实现线程安全的方式
简述 2 多线程中死锁、活锁、饥饿?
死锁:死锁发生在一个线程需要获取多个资源的时候,这时由于两个线程互相等待对方的资源而被阻塞
活锁:的是线程不断重复执行相同的操作,但每次操作的结果都是失败的。尽管这个问题不会阻塞线程,
但是程序也无法继续执行
饥饿)指的线程无法访问到它需要的资源而不能继续执行时,引发饥饿最常见资源就是 +EF 时钟周期
# 简述 2 多线程的悲观锁与乐观锁?
悲观锁)就是不管是否发生多线程冲突,只要存在这种可能,就每次访问都加锁,加锁就会导致锁之间的争
夺,有争夺就会有输赢,输者等待。
乐观锁)获得锁后一直持有锁以防本线程再次申请该锁造成无谓的解锁再加锁开销
& 简述 0 垃圾回收机制?
垃圾回收机制最基本的做法是分代回收。内存中的区域被划分成不同的世代,对象根据其存活的时间
被保存在对应世代的区域中。一般的实现是划分成 个世代:年轻、年老和永久。内存的分配是发生在年
轻世代中的。当一个对象存活时间足够长的时候,它就会被复制到年老世代中。对于不同的世代可以使用
不同的垃圾回收算法。进行世代划分的出发点是对应用中对象存活时间进行研究之后得出的统计规律。一
般来说,一个应用中的大部分对象的存活时间都很短。比如局部变量的存活时间就只在方法的执行过程
中。基于这一点,对于年轻世代的垃圾回收算法就可以很有针对性
% 如何判断一个对象是否应该被回收?
这就是所谓的对象存活性判断常用的方法有两种)引用计数法&)对象可达性分析由于引用计数法存在互相
引用导致无法进行 *+ 的问题所以目前 , 虚拟机多使用对象可达性分析算法
剩余17页未读,继续阅读
李粲^-^
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0