首页 > 编程知识 正文

java常见面试题及答案(java 多线程面试题)

时间:2023-05-05 04:33:26 阅读:64458 作者:1887

2021年初,有很多朋友的问题,一些Java基础问题和解答问题吗? 最近抽出时间整理了Java问题。 这个问题可能还不足以涵盖所有的Java问题,但有了它,我认为它可以应对目前市面上大多数最新的Java面试。 为什么这么说,是因为这篇文章在深度和广度上囊括了非常多的问题和解答知识点。

总结了Java的常见问题和解答,整理了2021年最新版的全部解答。 直接下载吧。 其实,博主还在整理。 直接下载更多大型制造商的问题吧。 链接:高清172份,累计7701页大厂商问题PDF 1,抽象工厂模式和原型模式有什么区别? 抽象工厂模型:通常通过工厂方法模型来实现。 但是,一个工厂往往包含多种工厂方法生成一系列产品。 该模型强调客户代码一次只能使用一个系列的产品。 要切换到其他系列的产品,只需改变工厂的种类。

原型模式:工厂法最大的缺点是,一个继承体系对应的产品类,有同样复杂的工厂类继承体系。 可以把工厂类的工厂方法放在产品类自身中吗? 这样,两个继承体系就可以合二为一了。 这也就是原型模型的思想,原型模型中的工厂方法是clone,它返回一个副本(可以是浅副本,也可以是深副本,由设计者决定)。 这是为了在位于用户代码中时通过指针调用clone,以便动态绑定和生成所需的具体类。 这些原型对象必须预先生成。

原型模型赋予工厂方法模型的另一个优点是复制的效率一般结构效率更高。

2、如何让多线程在Java程序中运行安全? 线程安全问题的原因通常有三个。

1、线程切换原子问题解决方案:在多线程之间同步或使用锁定(lock )。

2、缓存解决可见性问题:可以解决同步、卷、锁定和可见性问题

3、优化编译解决规律性问题方法: Happens-Before规则解决规律性问题

3、volatile修饰符的实践是什么? 一个实践是用volatile修饰long变量和double变量,使之能够用原子型读写。 双精度和长整型都是64位宽。 因此,这两种读取分为两个部分。 第一次读取前32位,读取剩下的32位。 此过程不是原子,但在Java中,volatile类型的long或double变量的读取和写入是原子。 volatile修复人员的另一个作用是提供“内存屏障”(memory barrier ),包括分布式框架中的APP应用。 简单来说,在rrdfn写入volatile变量之前,Java内存模型插入写入屏障write barrier,在读取volatile变量之前插入读取屏障read barrier。 这意味着,在编写volatile域时,任何线程都可以看到你写的值,同时确保在写之前,任何数字更新对所有线程都是可见的。 因为内存屏障会将所有其他写入值更新到缓存中。

4、Java各种数据的默认值为1、Byte、short、int、long均为0

2、Boolean的默认值为false

3、Char类型的默认值为“”

4、Float和双精度类型的默认值为0.0

5、对象类型的默认值为null

5、谈谈Java垃圾回收的工作原理。 在Java中,程序员不需要显示来释放对象的内存,而是由虚拟机自己运行。 JVM具有低优先级的垃圾回收线程。 通常不执行。 只有在虚拟机空闲或当前堆内存不足时,才会触发执行,扫描未引用的对象,将其添加到要重用的集合中进行重用。

6、两个不相等的对方有可能有同样的hashcode吗? 有可能。 两个不同的对象可能具有相同的hashcode值。 因此,在hashmap中会发生冲突。 相等的hashcode值的规定只是如果两个对象相等,则必须具有相同的hashcode值,但没有关于不相等对象的规定。

7、同步和锁定有什么区别?1、首先,synchronized是Java内置关键字,在JVM级别Lock是Java类;

2、synchronized可以锁定类、方法和代码块; 锁定只能锁定在代码块上。

3、synchronized手动获取锁定,无需解锁,使用方便,出现异常时自动解锁,不发生死锁; 锁定需要自己进行锁定和解除锁定,如果使用不当而没有unLock ()进行解除锁定,则会发生死锁。

您可以在33558www.Sina.com/lock上知道密钥获取是否成功,但不能通过同步。

8、什么是Vector

Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,访问它比访问ArrayList慢很多

ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。ArrayList的缺点是每个元素之间不能有间隔。

9、对象的访问定位有哪几种方式?

建立对象就是为了使用对象,我们的Java程序通过栈上的 reference 数据来操作堆上的具体对象。对象的访问方式有虚拟机实现而定,目前主流的访问方式有使用句柄和直接指针2种:

句柄:如果使用句柄的话,那么Java堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。

直接指针:如果使用直接指针访问,那么 Java 堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,而reference 中存储的直接就是对象的地址。

这两种对象访问方式各有优势。使用句柄来访问的最大好处是 reference 中存储的是稳定的句柄地址,在对象被移动时只会改变句柄中的实例数据指针,而 reference 本身不需要修改。使用直接指针访问方式最大的好处就是速度快,它节省了一次指针定位的时间开销。

10、equals 和 == 的区别?#

通俗点讲:是看看左右是不是一个东西。equals是看看左右是不是长得一样。如何记住嘛。如果单纯是想记住,:等于。equals:相同。两个长得一样的人,只能说长的相同(equals),但是不等于他们俩是一个人。你只要记住equals,==就不用记了。

术语来讲的区别:

1、 ==是判断两个变量或实例是不是指向同一个内存空间 equals是判断两个变量或实例所指向的内存空间的值是不是相同

2、 ==是指对内存地址进行比较 equals()是对字符串的内容进行比较3.==指引用是否相同 equals()指的是值是否相同

11、Servlet中如何获取用户提交的查询参数或表单数据? 12、堆溢出的原因? 13、Java 中,怎么获取一个文件中单词出现的最高频率? 14、你知道哪些JVM性能调优 15、抽象类必须要有抽象方法吗? 16、串行(serial)收集器和吞吐量(throughput)收集器的区别是什么? 17、React的请求应该放在哪个生命周期中? 18、volatile关键字的作用 19、我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象? 20、什么是Java虚拟机 21、CMS 收集器(多线程标记清除算法) 22、接口和抽象类的区别是什么? 23、如何合理分配线程池大小? 24、什么是线程组,为什么在Java中不推荐使用? 25、类加载器 26、JVM 如何确定垃圾对象? 27、字符型常量和字符串常量的区别 28、G1 收集器 29、Java 中,直接缓冲区与非直接缓冲器有什么区别? 30、如何决定使用 HashMap 还是 TreeMap? 31、说一下 ArrayList 的优缺点 32、构造方法能不能重写?能不能重载? 33、什么是红黑树 34、什么是逃逸分析? 35、栈帧里面包含哪些东西? 36、Tomcat是怎么打破双亲委派机制的呢? 37、WeakHashMap 是怎么工作的? 38、java 中操作字符串都有哪些类?它们之间有什么区别? 39、什么是JVM?java虚拟机包括什么? 40、Java 的引用有哪些类型? 全部答案,整理好了,直接下载吧 下载链接:全部答案,整理好了 其实,博主还整理了,更多大厂面试题,直接下载吧 下载链接:高清172份,累计 7701 页大厂面试题 PDF

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。