没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
2023 年 Java 面试题必备知识点
1、抽象工厂模式和原型模式之间的区别?
抽象工厂模式:通常由工厂方法模式来实现。但一个工厂中往往含有多
个工厂方法生成一系列的产品。这个模式强调的是客户代码一次保证只
使用一个系列的产品。当要切换为另一个系列的产品,换一个工厂类即
可。
原型模式:工厂方法的最大缺点就是,对应一个继承体系的产品类,要
有一个同样复杂的工厂类的继承体系。我们可以把工厂类中的工厂方法
放到产品类自身之中吗?如果这样的话,就可以将两个继承体系为一个。
这也就是原型模式的思想,原型模式中的工厂方法为 clone,它会返回
一个拷贝(可以是浅拷贝,也可以是深拷贝,由设计者决定)。为了保
证用户代码中到时可以通过指针调用 clone 来动态绑定地生成所需的具
体的类。这些原型对象必须事先构造好。
原型模式想对工厂方法模式的另一个好处是,拷贝的效率一般对构造的
效率要高。
2、在 Java 程序中怎么保证多线程的运行
安全?
出现线程安全问题的原因一般都是三个原因:
1、 线程切换带来的原子性问题 解决办法:使用多线程之间同步
synchronized 或使用锁(lock)。
2、 缓存导致的可见性问题 解决办法:synchronized、volatile、LOCK,
可以解决可见性问题
3、 编译优化带来的有序性问题 解决办法:Happens-Before 规则可以
解决有序性问题
3、volatile 修饰符的有过什么实践?
一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型
来读写。double 和 long 都是 64 位宽,因此对这两种类型的读是分为
两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过
程不是原子的,但 Java 中 volatile 型的 long 或 double 变量的读写
是原子的。volatile 修复符的另一个作用是提供内存屏障(memory
barrier),例如在分布式框架中的应用。简单的说,就是当你写一个
volatile 变量之前,Java 内存模型会插入一个写屏障(write barrier),
读一个 volatile 变量之前,会插入一个读屏障(read barrier)。意思就
是说,在你写一个 volatile 域时,能保证任何线程都能看到你写的值,
同时,在写之前,也能保证任何数值的更新对所有线程是可见的,因为
内存屏障会将其他所有写的值更新到缓存。
4、Java 中各种数据默认值
1、 Byte,short,int,long 默认是都是 0
2、 Boolean 默认值是 false
3、 Char 类型的默认值是’’
4、 Float 与 double 类型的默认是 0.0
5、 对象类型的默认值是 null
5、说说 Java 垃圾回收机制
在 Java 中,程序员是不需要显示的去释放一个对象的内存的,而是由
虚拟机自行执行。在 JVM 中,有一个垃圾回收线程,它是低优先级的,
在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,
才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回
收的集合中,进行回收。
6、有没有可能两个不相等的对象有有相同
的 hashcode?
有可能,两个不相等的对象可能会有相同的 hashcode 值,这就是为什
么在 hashmap 中会有冲突。相等 hashcode 值的规定只是说如果两个
剩余18页未读,继续阅读
资源评论
招风的黑耳
- 粉丝: 3705
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功