设为首页
收藏本站
切换到窄版
登录
立即注册
找回密码
搜索
搜索
本版
帖子
用户
快捷导航
论坛
BBS
C语言
C++
NET
JAVA
PHP
易语言
数据库
IE盒子
»
论坛
›
IE盒子
›
JAVA
›
2022年大厂offer必备java面试题整理-Java基础(2) ...
返回列表
发帖
查看:
193
|
回复:
2
2022年大厂offer必备java面试题整理-Java基础(2)
[复制链接]
田吉锋
田吉锋
当前离线
积分
3
1
主题
4
帖子
3
积分
新手上路
新手上路, 积分 3, 距离下一级还需 47 积分
新手上路, 积分 3, 距离下一级还需 47 积分
积分
3
发消息
发表于 2022-9-23 21:08:37
|
显示全部楼层
|
阅读模式
上一篇:
Allen:2022年大厂offer必备java面试题整理-Java基础(1)
11、String s = "xyz" 和 String s = new String("xyz") 区别?
两个语句都会先去字符串常量池中检查是否已经存在 “xyz”,如果有则直接使⽤,如果没有则会在常量池中创建 “xyz” 对象。
另外,String s = new String("xyz") 还会通过 new String() 在堆⾥创建⼀个内容与 "xyz" 相同的对象实例。
所以前者其实理解为被后者的所包含。
12、== 和 equals 的区别是什么?
==:运算符,⽤于⽐较基础类型变量和引⽤类型变量。
对于基础类型变量,⽐较的变量保存的值是否相同,类型不⼀定要相同
对于引⽤类型变量,⽐较的是两个对象的地址是否相同。
equals:Object 类中定义的⽅法,通常⽤于⽐较两个对象的值是否相等。
equals 在 Object ⽅法中其实等同于 ==,但是在实际的使⽤中,equals 通常被重写⽤于⽐较两个对象的值是否相同。
13、两个对象的 hashCode() 相同,则 equals() 也⼀定为 true,对吗?
不对。hashCode() 和 equals() 之间的关系如下:
当有 a.equals(b) == true 时,则 a.hashCode() == b.hashCode() 必然成⽴,反过来,当 a.hashCode() == b.hashCode() 时,a.equals(b) 不⼀定为 true。
14、什么是反射?
反射是指在运⾏状态中,对于任意⼀个类都能够知道这个类所有的属性和⽅法;并且对于任意⼀个对象,都能够调
⽤它的任意⼀个⽅法;这种动态获取信息以及动态调⽤对象⽅法的功能称为反射机制。
反射涉及到四个核⼼类:
java.lang.
Class.java
:类对象;
java.lang.reflect.
Constructor.java
:类的构造器对象;
java.lang.reflect.
Method.java
:类的⽅法对象;
java.lang.reflect.
Field.java
:类的属性对象;
反射有什么⽤?
操作因访问权限限制的属性和⽅法;
实现⾃定义注解;
动态加载第三⽅jar包;
按需加载类,节省编译和初始化APK的时间;
反射⼯作原理
当我们编写完⼀个Java项⽬之后,每个java⽂件都会被编译成⼀个.class⽂件,这些Class对象承载了这个类的所有
信息,包括⽗类、接⼝、构造函数、⽅法、属性等,这些class⽂件在程序运⾏时会被ClassLoader加载到虚拟机中。当⼀个类被加载以后,Java虚拟机就会在内存中⾃动产⽣⼀个Class对象。
我们通过new的形式创建对象实际上就是通过这些Class来创建,只是这个过程对于我们是不透明的⽽已。
反射的⼯作原理就是借助Class.java、Constructor.java、Method.java、Field.java这四个类在程序运⾏时动态访 问和修改任何类的⾏为及状态。
15、深拷⻉和浅拷⻉区别是什么?
数据分为基本数据类型和引⽤数据类型。基本数据类型:数据直接存储在栈中;引⽤数据类型:存储在栈中的是对象的引⽤地址,真实的对象数据存放在堆内存⾥。
浅拷⻉:对于基础数据类型:直接复制数据值;对于引⽤数据类型:只是复制了对象的引⽤地址,新旧对象指向同⼀个内存地址,修改其中⼀个对象的值,另⼀个对象的值随之改变。
深拷⻉:对于基础数据类型:直接复制数据值;对于引⽤数据类型:开辟新的内存空间,在新的内存空间⾥复制⼀个⼀模⼀样的对象,新⽼对象不共享内存,修改其中⼀个对象的值,不会影响另⼀个对象。
深拷⻉相⽐于浅拷⻉速度较慢并且花销较⼤。
举个例⼦这就好⽐两兄弟⼤家买⾐服可以⼀⼈⼀套,然后房⼦⼤家住在⼀套房⼦⾥(浅拷⻉),当两个⼈成家⽴业了,房⼦分开了⼀⼈⼀套互不影响(深拷⻉)
16、并发和并⾏有什么区别?
并发:两个或多个事件在同⼀时间间隔发⽣。
并⾏:两个或者多个事件在同⼀时刻发⽣。
并⾏是真正意义上,同⼀时刻做多件事情,⽽并发在同⼀时刻只会做⼀件事件,只是可以将时间切碎,交替做多件事情。
并⾏在多处理器系统中存在,⽽并发可以在单处理器和多处理器系统中都存在,并发能够在单处理器系统中存在是
因为并发是并⾏的假象,并⾏要求程序能够同时执⾏多个操作,⽽并发只是要求程序假装同时执⾏多个操作(每个⼩时间⽚执⾏⼀个操作,多个操作快速切换执⾏)。
当系统有⼀个以上 CPU 时,则线程的操作有可能⾮并发。当⼀个 CPU 执⾏⼀个线程时,另⼀个 CPU 可以执⾏另
⼀个线程,两个线程互不抢占 CPU 资源,可以同时进⾏,这种⽅式我们称之为并⾏(Parallel)。
并发编程的⽬标是充分的利⽤处理器的每⼀个核,以达到最⾼的处理性能。
17、当⼀个对象被当作参数传递到⼀个⽅法后,此⽅法可改变这个对象的属性,并可返回变化后的结果,那么这⾥到底是值传递还是引⽤传递?
值传递。Java 中只有值传递,对于对象参数,值的内容是对象的引⽤。
18、重载(Overload)和重写(Override)的区别?
⽅法的重载和重写都是实现多态的⽅式,区别在于前者实现的是编译时的多态性,⽽后者实现的是运⾏时的多态性。
重载:⼀个类中有多个同名的⽅法,但是具有有不同的参数列表(参数类型不同、参数个数不同或者⼆者都不同)。
重写:发⽣在⼦类与⽗类之间,⼦类对⽗类的⽅法进⾏重写,参数都不能改变,返回值类型可以不相同,但是必须是⽗类返回值的派⽣类。即外壳不变,核⼼重写!重写的好处在于⼦类可以根据需要,定义特定于⾃⼰的⾏为。
19、构造器是否可被重写?
Constructor 不能被 override(重写),但是可以 overload(重载),所以你可以看到⼀个类中有多个构造函数的情况。
20、为什么不能根据返回类型来区分重载?
如果我们有两个⽅法如下,当我们调⽤:test(1) 时,编译器⽆法确认要调⽤的是哪个。
⽅法的返回值只是作为⽅法运⾏之后的⼀个“状态”,但是并不是所有调⽤都关注返回值,所以不能将返回值作为重载的唯⼀区分条件。
回复
使用道具
举报
新会陈皮茶业
新会陈皮茶业
当前离线
积分
20
4
主题
11
帖子
20
积分
新手上路
新手上路, 积分 20, 距离下一级还需 30 积分
新手上路, 积分 20, 距离下一级还需 30 积分
积分
20
发消息
发表于 2025-3-2 16:55:02
|
显示全部楼层
众里寻他千百度,蓦然回首在这里!
回复
使用道具
举报
三年小翻身
三年小翻身
当前离线
积分
12
2
主题
7
帖子
12
积分
新手上路
新手上路, 积分 12, 距离下一级还需 38 积分
新手上路, 积分 12, 距离下一级还需 38 积分
积分
12
发消息
发表于
5 天前
|
显示全部楼层
嘘,低调。
回复
使用道具
举报
返回列表
发帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
易语言
PHP
快速回复
返回顶部
返回列表