首页 > 编程语言 >5道大厂的JAVA经典面试题-初中级

5道大厂的JAVA经典面试题-初中级

时间:2024-10-24 10:22:21浏览次数:1  
标签:面试题 JAVA 对象 初中级 Java 引用 str 泛型 new

前言

本来想着给自己放松一下,刷刷博客,慕然回首,Java的四种引用,强弱软虚?泛型常用特点?Java创建对象有几种方式? 有没有可能两个不相等的对象有相同的hashcode?深拷贝和浅拷贝的区别是什么? 似乎有点模糊了,那就大概看一下5道Java基础面试题吧。好记性不如烂键盘~

*** 12万字的java面试题整理 ***

Java的四种引用,强弱软虚

  • 强引用
    强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式:
String str = new String("str");
System.out.println(str);
  • 软引用
    软引用在程序内存不足时,会被回收,使用方式:
// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,
// 这里的软引用指的是指向new String("str")的引用,也就是SoftReference类中T
SoftReference<String> wrf = new SoftReference<String>(new String("str"));

可用场景: 创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。

  • 弱引用
    弱引用就是只要JVM垃圾回收器发现了它,就会将之回收,使用方式:
WeakReference<String> wrf = new WeakReference<String>(str);

可用场景: Java源码中的 java.util.WeakHashMap 中的 key 就是使用弱引用,我的理解就是,一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。

  • 虚引用
    虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入 ReferenceQueue 中。注意哦,其它引用是被JVM回收后才被传入 ReferenceQueue 中的。由于这个机制,所以虚引用大多被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有 ReferenceQueue ,使用例子:
PhantomReference<String> prf = new PhantomReference<String>(new String("str"),new ReferenceQueue<>());

可用场景: 对象销毁前的一些操作,比如说资源释放等。 Object.finalize() 虽然也可以做这类动作,但是这个方式即不安全又低效

上诉所说的几类引用,都是指对象本身的引用,而不是指Reference的四个子类的引用(SoftReference等)

泛型常用特点

是Java SE 1.5之后的特性, 《Java 核心技术》中对泛型的定义是:

"泛型” 意味着编写的代码可以被不同类型的对象所重用。

“泛型”,顾名思义,“泛指的类型”。我们提供了泛指的概念,但具体执行的时候却可以有具体的规则来约束,比如我们用的非常多的ArrayList就是个泛型类,ArrayList作为集合可以存放各种元素,如Integer, String,自定义的各种类型等,但在我们使用的时候通过具体的规则来约束,如我们可以约束集合中只存放Integer类型的元素,如

List<Integer> iniData = new ArrayList<>()

使用泛型的好处?
以集合来举例,使用泛型的好处是我们不必因为添加元素类型的不同而定义不同类型的集合,如整型集合类,浮点型集合类,字符串集合类,我们可以定义一个集合来存放整型、浮点型,字符串型数据,而这并不是最重要的,因为我们只要把底层存储设置了Object即可,添加的数据全部都可向上转型为Object。 更重要的是我们可以通过规则按照自己的想法控制存储的数据类型。

Java创建对象有几种方式?

java中提供了以下四种创建对象的方式:

  • new创建新对象
  • 通过反射机制
  • 采用clone机制
  • 通过序列化机制

有没有可能两个不相等的对象有相同的hashcode

有可能.在产生hash冲突时,两个不相等的对象就会有相同的 hashcode 值.
当hash冲突产生时一般有以下几种方式来处理:

  • 拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以用这个单向链表进行存储.
  • 开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入
  • 再哈希:又叫双哈希法,有多个不同的Hash函数.当发生冲突时,使用第二个,第三个….等哈希函数计算地址,直到无冲突.

深拷贝和浅拷贝的区别是什么?

  • 浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.
  • 深拷贝:被复制对象的所有变量都含有与原来的对象相同的值.而那些引用其他对象的变量将指向被复制过的新对象.而不再是原有的那些被引用的对象.换言之.深拷贝把要复制的对象所引用的对象都复制了一遍.

标签:面试题,JAVA,对象,初中级,Java,引用,str,泛型,new
From: https://www.cnblogs.com/xswz/p/18499042

相关文章

  • JavaWeb开发实战详解
    JavaWeb开发在现代应用程序中有广泛的应用场景。以下是一些常见的JavaWeb应用类型及其示例:1.企业级应用特点:通常需要处理大量的数据和用户,具有复杂的业务逻辑,常用于企业内部。示例:客户关系管理(CRM)系统、企业资源计划(ERP)系统。技术栈:SpringFramework、Hibernate、JPA、Th......
  • JAVA宠物用品网络商城的设计与实现2516源码论文
    JAVA宠物用品网络商城的设计与实现2516源码论文摘要随着生活和工作方面的压力逐渐增加,人们对宠物的依赖和需求也就变得越来越大。宠物用品商城是一个能使得繁忙的或者不喜欢出门的人,足不出户而又很方便地购得宠物的日用品,这样也不会影响到工作或者浪费了休息的时间。如今......
  • 基于Java的学业帮扶管理系统设计与实现(2024-2025年度精选计算机毕设项目推荐)
    文章目录1.前言2.详细视频演示3.程序运行示例图4.文档参考5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue5.3程序操作流程6.选题推荐7.原创毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 前端开发必须了解的javascript知识
    defer和async的区别script是会阻碍HTML解析的,只有下载好并执行完脚本才会继续解析HTML相同点:都是异步加载,用于解决加载脚本时造成页面阻塞的问题都只适用于外部脚本不同点:defer脚本加载与html的解析并行,待html解析完后再运行脚本在DOMContentLoaded事件处理程序之前执行d......
  • Java基础day03---循环,数组,杨辉三角
    Java基础day03接day02----流程控制---3、循环一、循环循环语法结构执行逻辑通用for循环for(初始化;条件判断;步长设置){//循环体}第一次循环:初始化,条件判断,循环体,步长设置;第2-n次循环:条件判断,循环体,while循环while(判断条件){//循环体}先条件判断再执行循环体do.............
  • Java-继承与多态-下篇
    ......
  • Java的继承概念
    在Java中,继承是一种重要的面向对象编程概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。使用继承可以提高代码的复用性和可维护性。继承的基本语法使用extends关键字来声明一个类继承自另一个类。classParent{//父类的属性和方法}classChildextendsPar......
  • 【JAVA毕设】基于JAVA的酒店管理系统
    一、项目介绍 本系统前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router实现动态路由,Ajax实现前后端通信,Element-plus组件库使页面快速成型。后端部分:采用SpringBoot作为开发框架,同时集成MyBatis、Redis、阿里云oss对象存储等相关技术。酒店管理系统,可前......
  • Java强制类型转换:深入理解与实践
    在Java编程中,类型转换是一个常见的操作,它允许我们将一个数据类型的值转换为另一个数据类型的值。Java提供了两种类型转换:自动类型转换(隐式类型转换)和强制类型转换(显式类型转换)。在这篇文章中,我们将重点探讨强制类型转换,包括它的使用场景、语法、以及在实际编程中的应用。什么......
  • Java Springboot 接收前端上传图片,并返回路径让前端显示图片
    一、接收前端图片并保存并为前端返回一个图片路径. @RestController@RequestMapping("/upload")publicclassUploadImgController{@Autowired(required=false)privateResourceLoaderresourceLoader;@Value(value="/Users/user/Java/Upload/Serve......