首页 >行情 > > 正文

环球速读:Java基础面试题

来源:哔哩哔哩 2023-02-09 04:10:31

一、面向对象和集合专题

1. 面向对象和面向过程的区别

面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发

面向对象:是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象有封装、继承、多态的特性,所以易维护、易复用、易扩展。可以设计出低耦合的系统。 但是性能上来说,比面向过程要低。


(相关资料图)

OOP和AOP

2. 介绍下Java中的基本数据类型

boolean: int 4个字节

需要注意:

int是基本数据类型,Integer是int的封装类,是引用类型。int默认值是0,而Integer默认值是null,所以Integer能区分出0和null的情况。一旦java看到null,就知道这个引用还没有指向某个对象,再任何引用使用前,必须为其指定一个对象,否则会报错。

基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间,必须通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象,将一个数组赋值给另一个数组时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看的见。虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。

3. 标识符的命名规则

标识符的含义: 是指在程序中,我们自己定义的内容,譬如,类的名字,方法名称以及变量名称等等,都是标识符。

命名规则:(硬性要求) 标识符可以包含英文字母0-9的数字$以及_标识符不能以数字开头,标识符不是关键字 命名规范:(非硬性要求) 类名规范:首字符大写,后面每个单词首字母大写(大驼峰式)。 变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。 方法名规范:同变量名。

4. instanceof关键字的作用

instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法 为:

其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。 注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。

5.重载和重写的区别

重写(Override)从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。

重写 总结:

发生在父类与子类之间

方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同

访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常

重载(Overload)

在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。

重载 总结:

重载Overload是一个类中多态性的一种表现

重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)

重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准

6.介绍下内部类

目的:提高安全性

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这三种:成员内部类、局部内部类、匿名内部类,如下图所示:

7.介绍下Java中的四种引用

强引用强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用 方式:

软引用软引用在程序内存不足时,会被回收,使用方式:

// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,// 这里的软引用指的是指向new String("str")的引用,也就是SoftReference类中TSoftReference<String> wrf = new SoftReference<String>(new String("str"));

可用场景: 创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。 弱引用弱引用就是只要JVM垃圾回收器发现了它,就会将之回收,使用方式:

可用场景: Java源码中的 java.util.WeakHashMap 中的 key 就是使用弱引用,我的理解就是,一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。 虚引用虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入 ReferenceQueue 中。注意哦,其它引用是被JVM回收后才被传入 ReferenceQueue 中的。由于这个机制,所以虚引用大多被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有 ReferenceQueue ,使用例子:

可用场景: 对象销毁前的一些操作,比如说资源释放等。 Object.finalize() 虽然也可以做这类动作,但是这个方式即不安全又低效   上诉所说的几类引用,都是指对象本身的引用,而不是指Reference的四个子类的引用(SoftReference等)。

8.HashCode的作用

java的集合有两类,一类是List,还有一类是Set。前者有序可重复,后者无序不重复。当我们在set中插入的时候怎么判断是否已经存在该元素呢,可以通过equals方法。但是如果元素太多,用这样的方法就会比较满。于是有人发明了哈希算法来提高集合中查找元素的效率。 这种方式将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个对象的哈希码就可以确定该对象应该存储的那个区域。hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。

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

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

拉链法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链 表,被分配到同一个索引上的多个节点可以用这个单向链表进行存储.

开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总 能找到,并将记录存入

再哈希:又叫双哈希法,有多个不同的Hash函数.当发生冲突时,使用第二个,第三个….等哈希函数 计算地址,直到无冲突

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

原型模式:设计模式 --> Spring bean的Scope

浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指 向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.

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

11.static都有哪些用法?

所有的人都知道static关键字这两个基本的用法:静态变量和静态方法.也就是被static所修饰的变量/ 方法都属于类的静态资源,类实例所共享.   除了静态变量和静态方法之外,static也用于静态块,多用于初始化操作:

此外static也多用于修饰内部类,此时称之为静态内部类.   最后一种用法就是静态导包,即 import static .import static是在JDK 1.5之后引入的新特性,可以用 来指定导入某个类中的静态资源,并且不需要使用类名,可以直接使用资源名,比如:

12. 介绍下Object中的常用方法

clone 方法保护方法,实现对象的浅复制,只有实现了 Cloneable 接口才可以调用该方法,否则抛出 CloneNotSupportedException 异常,深拷贝也需要实现 Cloneable,同时其成员变量为引用类型 的也需要实现 Cloneable,然后重写 clone 方法。

finalize 方法

该方法和垃圾收集器有关系,判断一个对象是否可以被回收的最后一步就是判断是否重写了此方 法。

equals 方法该方法使用频率非常高。一般 equals 和 == 是不一样的,但是在 Object 中两者是一样的。子类一 般都要重写这个方法。

hashCode 方法该方法用于哈希查找,重写了 equals 方法一般都要重写 hashCode 方法,这个方法在一些具有哈 希功能的 Collection 中用到。   一般必须满足 obj1.equals(obj2)==true 。可以推出 obj1.hashCode()==obj2.hashCode() ,但是 hashCode 相等不一定就满足 equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

JDK 1.6、1.7 默认是返回随机数;

JDK 1.8 默认是通过和当前线程有关的一个随机数 + 三个确定值,运用 Marsaglia’s xorshift scheme 随机数算法得到的一个随机数。

wait 方法

配合 synchronized 使用,wait 方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait() 方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。 调用该方法后当前线程进入睡眠状态,直到以下事件发生。

其他线程调用了该对象的 notify 方法;

其他线程调用了该对象的 notifyAll 方法;

其他线程调用了 interrupt 中断该线程;

时间间隔到了。 此时该线程就可以被调度了,如果是被中断的话就抛出一个 InterruptedException 异常。

notify 方法配合 synchronized 使用,该方法唤醒在该对象上等待队列中的某个线程(同步队列中的线程是给抢占 CPU 的线程,等待队列中的线程指的是等待唤醒的线程)。 notifyAll 方法配合 synchronized 使用,该方法唤醒在该对象上等待队列中的所有线程。 总结只要把上面几个方法熟悉就可以了,toString 和 getClass 方法可以不用去讨论它们。该题目考察的是对 Object 的熟悉程度,平时用的很多方法并没看其定义但是也在用,比如说:wait() 方法,equals() 方法等。

大致意思:Object 是所有类的根,是所有类的父类,所有对象包括数组都实现了 Object 的方法。

13.Java 创建对象有几种方式?

new 关键字

平时使用的最多的创建对象方式

反射方式

使用 newInstance(),但是得处理两个异常 InstantiationException、IllegalAccessException:

clone方法

Object对象中的clone方法来完成这个操作

反序列化操作

调用 ObjectInputStream 类的 readObject() 方法。我们反序列化一个对象,JVM 会给我们创建一个单独的对象。JVM 创建对象并不会调用任何构造函数。一个对象实现了 Serializable 接口,就可以把对象写入到文中,并通过读取文件来创建对象。

总结创建对象的方式关键字:new、反射、clone 拷贝、反序列化。

14.有了数组为什么还要再搞一个ArrayList呢?

通常我们在使用的时候,如果在不明确要插入多少数据的情况下,普通数组就很尴尬了,因为你不知道需要初始化数组大小为多少,而 ArrayList 可以使用默认的大小,当元素个数到达一定程度后,会自动扩容。   可以这么来理解:我们常说的数组是定死的数组,ArrayList 却是动态数组。

15. 说说什么是 fail-fast?

fail-fast机制是 Java 集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生 fail-fast 事件。   例如:当某一个线程 A 通过 iterator 去遍历某集合的过程中,若该集合的内容被其他线程所改变了,那么线程 A 访问集合时,就会抛出 ConcurrentModificationException 异常,产生 fail-fast 事件。这里的操作主要是指 add、remove 和 clear,对集合元素个数进行修改。 解决办法:建议使用“java.util.concurrent 包下的类”去取代“java.util 包下的类”。可以这么理解:在遍历之前,把 modCount 记下来 expectModCount,后面 expectModCount 去和 modCount 进行比较,如果不相等了,证明已并发了,被修改了,于是抛出ConcurrentModificationException 异常。

16.介绍下你对Java集合的理解

集合是我们在工作中使用频率非常高的组件了。下面的两张图是集合框架的类图结构。

TreeSet的本质是TreeMap

HashSet的本质是HashMap

17.介绍下你对红黑树的理解

红黑树的特点:

红黑色的本质:2-3-4树

红黑树保证黑节点平衡的方式:左旋/右旋+变色 来保证

18. try-finally中的return关键字

return语句的本质:

return语句获取到变量的地址

return将获取的地址返回,也就是return本质是传地址

测试案例代码:

输出结果:

19.异常处理影响性能吗

异常处理的性能成本非常高,每个 Java 程序员在开发时都应牢记这句话。创建一个异常非常慢,抛出一个异常又会消耗1~5ms,当一个异常在应用的多个层级之间传递时,会拖累整个应用的性能。   仅在异常情况下使用异常;在可恢复的异常情况下使用异常;尽管使用异常有利于 Java 开发,但是在应用中最好不要捕获太多的调用栈,因为在很多情况下都不需要打印调用栈就知道哪里出错了。因此,异常消息应该提供恰到好处的信息。

20.介绍下try-with-resource语法

try-with-resources 是 JDK 7 中一个新的异常处理机制,它能够很容易地关闭在 try-catch 语句块中使用的资源。所谓的资源(resource)是指在程序完成后,必须关闭的对象。try-with-resources 语句确保了每个资源在语句结束时关闭。所有实现了 java.lang.AutoCloseable 接口(其中,它包括实现了 java.io.Closeable 的所有对象),可以使用作为资源。

关闭单个资源

查看编译后的代码

关闭多个资源

编译后的代码

处理规则

凡是实现了AutoCloseable接口的类,在try()里声明该类实例的时候,在try结束后,close方法都会被调用

try结束后自动调用的close方法,这个动作会早于finally里调用的方法。

不管是否出现异常(int i=1/0会抛出异常),try()里的实例都会被调用close方法

越晚声明的对象,会越早被close掉。

JDK9中的改进

在 JDK 9 已得到改进。如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中直接使用该变量,而无需在 try-with-resources 语句中声明一个新变量。

上一篇: 下一篇:
x
推荐阅读

环球速读:Java基础面试题

2023-02-09

观看电影焦裕禄心得体会800字

2023-02-09

【搬运】めいど・うぃず・どらごんず 注音假名+中文歌词

2023-02-08

丁威迪归来 重返篮网或激发他斗志 这是他梦开始的地方 全球快讯

2023-02-08

转变工作作风心得体会范文

2023-02-08

全球快讯:无法打开文件normal.dotm_normal dotm修复

2023-02-08

十八里河街道开展消防安全知识培训

2023-02-08

【天天快播报】宏远吴迪图片_广东宏远吴迪个人资料

2023-02-08

2017北京一带一路峰会时间安排表 环球最新

2023-02-08

世界速读:2月8日河南宝鑫聚丙烯酰胺价格基本平稳

2023-02-08

hectic

2023-02-08

《送上人》的原文注释及赏析

2023-02-08

温州个税综合所得汇算清缴计算公式 焦点速讯

2023-02-08

世界今日讯!释然的意思解释一下_释然什么意思解释一下

2023-02-08

托班幼儿育儿知识

2023-02-08

环球今头条!香农芯创:公司合并报表范围内主体累计担保额度为30亿元

2023-02-08

沉重哀叹!奥运冠军张常宁之父、中国排球的功勋脊梁张友生病逝! 天天精选

2023-02-08

郑州一高校:举报翻墙外出者奖五千 新规定引起热议!

2023-02-08

注意!这些地区大范围雨雪来袭→

2023-02-08

珠三角包括哪些城市

2023-02-08

当前要闻:安顺的律师费用一般多少钱?

2023-02-07

瑞穗银行:重申PPG Indus(PPG.US)买入评级-最新资讯

2023-02-07

亟须什么意思-每日视讯

2023-02-07

股票行情快报:申联生物(688098)2月7日主力资金净买入59.37万元

2023-02-07

时讯:蛋黄酥的做法视频教程_蛋黄酥的做法

2023-02-07

【环球播资讯】启航是什么意思_启是什么意思

2023-02-07

虎刺红的演员-世界简讯

2023-02-07

观天下!中钞国鼎金条价格今天多少一克(2023年02月07日)

2023-02-07

YTC2571数字接地电阻测试仪

2023-02-07

奔波2000公里只为旅客出行平安-天天速读

2023-02-07

世界快资讯:穿越后的悲剧人生

2023-02-07

全州工信系统全力以赴推动工业加快赶超步伐|天天微速讯

2023-02-07

今日播报!参股券商板块2月6日跌0.84%,中航产融领跌,主力资金净流出5.44亿元

2023-02-07

如何收看高清电视直播_如何收看高清电视

2023-02-07

梅州特产柚子_梅州特产

2023-02-06

【快播报】今日争字加偏旁组成新字_争字加偏旁

2023-02-06

天天新动态:草字头家加青_草字头加青

2023-02-06

杭州重启烟花秀,3万发烟花点亮夜空!璀璨之夜,温暖人心 环球热头条

2023-02-06

天天日报丨我的爸爸作文300字范文_我的爸爸作文300字三年级

2023-02-06

环球新动态:石家庄电话区号是多少_石家庄电话区号到底是多少

2023-02-06

云海金属:子公司巢湖云海和合资公司安徽宝镁白云石自给

2023-02-06

屏幕更大、物理按键回归,改款高尔夫谍照曝光,预计明年正式上市

2023-02-06

环球快消息!正月十五闹元宵 文乡枞阳猜灯谜

2023-02-06

惊悚

2023-02-06

不可思议的印度_焦点滚动

2023-02-06

车检|焦点快看

2023-02-06

世纪老人的话:张中行_世界新视野

2023-02-05

世界球精选!杭州东站 杭州火车东站_杭州东站火车站官网

2023-02-05

同时,高利贷者要求一磅肉。|天天播报

2023-02-05

东村村村民委员会

2023-02-05

世界快看:东陵廨舍营房

2023-02-05

聊城推进二手房“带押过户”新模式 每日时讯

2023-02-05

当前消息!小度在哪里设置还原出厂模式

2023-02-05

中勘石油天然气成都有限公司

2023-02-05

中国交通

2023-02-05

中国古典名剧:墙头马上 世界观热点

2023-02-05

中国戏曲文物图谱

2023-02-04

“萧规曹随”做投资

2023-02-04

窗帘盒的材料和设计要点是什么?智能窗帘盒与普通窗帘盒有什么区别呢?

2023-02-04

香港中银国际

2023-02-04

适合在家做的兼职有哪些

2023-02-04

天天观点:今天最新消息 第三次中国与克罗地亚警务联巡启动

2023-02-04

环球报道:中广·宜景湾

2023-02-04

口交技巧 焦点热闻

2023-02-04

牛肉炖柿子做法_做牛肉炖柿子步骤 世界头条

2023-02-04

由的笔顺的读法 全球聚看点

2023-02-04

天天最资讯丨劣迹艺人认定是什么情况_劣迹艺人认定是怎么回事

2023-02-03

主角他爹[快穿] 天天百事通

2023-02-03

新春走基层|满“棚”春色遮不住 草莓上市好时节

2023-02-03

药明康德:摩根大通持股比例从7.91%增至8.06%|世界讯息

2023-02-03

银行板块跌0.81% 中国银行工商银行涨幅居首

2023-02-03

蚌埠快捷酒店

2023-02-03

鸟语花香天常蓝!徐汇青少年在这里培养生态环境保护意识

2023-02-03

当前通讯!安徽庐江:春风送岗 新春招聘忙

2023-02-03

南通中院出台八项措施 为建筑企业纾困解难

2023-02-03

微速讯:房产权第一持有人是什么意思

2023-02-03

穿越火线怎么改名字在哪里_穿越火线怎么改名字

2023-02-03

2023年2月中国水利水电科学研究院招聘信息一览(附报名邮箱)

2023-02-03

全球快播:英特尔将停产傲腾 Optane SSD DC P4800X 固态硬盘

2023-02-02

#(社会)元宵将至氛围浓(3)

2023-02-02

江夏区义贞小学组织参观廉政书画摄影展 热点在线

2023-02-02

全新大 Y 标志,联想拯救者 Y9000P 系列 2023 款游戏本亮相

2023-02-02

环球新动态:康冠科技董秘回复:公司主要业务为智能显示产品的研发、生产以及销售

2023-02-02

孙颖莎即将获得世界级荣誉,不仅刷新记录,而且能与刘国梁齐名!_焦点

2023-02-02

中国十大名酒排行_关于中国十大名酒排行的基本情况说明介绍

2023-02-02

多部门联合印发《中华老字号示范创建管理办法》—— 培育壮大一批“百年老店”

2023-02-02

广州多个首发团线路满员_天天短讯

2023-02-02

科技快讯:曝小米MIX4目前无量产消息 焦点快报

2023-02-01

佟丽娅现身三亚冲浪,水温冷到膝盖青紫,穿泳衣露腹部大块赘肉_全球百事通

2023-02-01

通讯!迎新春促消费 助力乡村振兴

2023-02-01

社区老年健康教育服务规范征求意见,老年健康咨询每年不少于4场_全球热头条

2023-02-01

【全球报资讯】科兴制药:长效GC产品启动I期临床

2023-02-01

《你是我的永恒星辰》感情线

2023-02-01

每日简讯:男子路边摊买水果被瞬间调包丨农民卖粮,粮贩子也有套路,要小心

2023-02-01

世界球精选!什么属相的人不宜养貔貅 什么属相不适合戴貔貅

2023-01-31

31省份政府工作报告如何应对“超预期因素”?

2023-01-31

讯息:北京一季度计划开工160项重大项目 总投资近2700亿元

2023-01-31

realme这回稳了?真我GT Neo5发布时间确定, 240瓦秒充惊人_环球今日报

2023-01-31

上海老庙铂金多少钱一克(2023年01月31日)参考价格

2023-01-31

【全球新要闻】1月31日生意社多晶硅基准价为170000.00元/吨

2023-01-31