Java java 常见问题

约翰 · 2020年12月29日 · 1508 次阅读

1.接口和抽象类区别;
https://testerhome.com/topics/27323

2.string 和 stringbuffer 的区别?
String 是只读字符串,意味着字符串内容无法被修改;
StringBuffer 是可以直接进行修改的;
其中 StringBuffer 比 StringBuilder 的效率低,因为 StringBuffer 被 synchronized 修饰;

3.String,StringBuffer,StringBuilder 区别
String 声明的是不可变的对象,每次操作必然产生一个新的对象;
StringBuffer 和 StringBuilder 都继承抽象类:AbstractStringBuilder;
StringBuffer 具备线程安全性;
在使用场景上,并发使用 StringBuffer,迭代使用 StringBuilder,普通场景选 String,避免途中不必要的类型转换开销;

3.String 是最基本的数据类型吗?
不是,java 最基本的数据类型一共 8 种,包含:int byte char float double boolean short long
String 是引用类型
另外还有枚举类型 enumeration type

1 字节:byte(字节型),boolean(布尔型)
2 字节:short(短整型),char(字符型)
4 字节:int(整型) float(单精度浮点型)
8 字节:long(长整型)double(双精度浮点型)

补充:
long 是长整型。
byte: 八位整数 -128——127,可用来节省内存的使用。
short: 16 位整数 -32768——32,767,也比较省内存。
int: 32 位整数 -2,147,483,648——2,147,483,647,一般来说整数都够用了
long: 64 位整数 -9,223,372,036,854,775,808—— 9,223,372,036,854,775,807,一般不需要用
float: 32 位浮点,如果浮点需要节省内存用这个。
Double: 64 位浮点,一般非整数浮点可用这个。

但是必须要记住 float 和 double 都不是精确的,如果要储存钱一类的必须精确的,用 java.math.BigDecimal

4.int 和 Integer 的区别?
https://www.cnblogs.com/guodongdidi/p/6953217.html

5.解释内存中的栈、堆和静态区的用法?
栈空间很小,一般存储的是:变量,一个对象的引用,以及函数调用现场
堆:存储的是对象;堆的空间很大,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当作堆空间使用。
常量存储在静态区;

6.数组有没有 length() 方法?String 有没有 length() 方法?
数组没有 length() 方法,有 length 属性;
String 有 length()方法。

7.重载和重写的区别?
重载是同一个类中同名函数,参数类型或是参数个数不同或是两者都不同,返回值无要求;(编译时多态)
重写是子类继承父类,需要对父类方法进行重写,参数类型或是参数个数以及返回值要求是一样的。(运行时多态)

8.创建线程的方法:
1)继承 Thread 类;
2)implements Runnable 接口;
3)通过线程池创建线程;
4)使用 Callable 和 Future 创建

9.克隆如何实现?
1)实现 Cloneable 接口并重写 Object 类中的 clone() 方法;
2)实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆;

10.静态变量和实例变量的区别
静态变量是被 static 修饰的,也叫类变量,它属于一个类,不属于任何一个对象,一个类无论创建多少个对象,静态变量在内存中有且仅有一个拷贝;
实例变量必须依赖于一个实例,需要先创建对象然后通过对象才能访问到它。
静态变量可以实现让多个对象共享内存;

11.接口是否可以继承 extends 接口?抽象类是否可以实现 implements 接口?抽象类是否可以继承具体类?
接口可以继承接口,而且支持多重继承;
抽象类可以实现接口;
抽象类可以继承具体类也可以继承抽象类;

12.java 中 final 关键字有那些用法?
1)修饰类:表示该类不能被继承;
2)修饰方法:表示该方法不能被重写;
3)修饰变量:表示变量只能一次赋值,之后不允许修改,即定义常量;

13.float f = 3.4 正确吗?
不正确

3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换 float f =(float) 3.4; 或者写成 float f =3.4F;。

14.Math.round(11.5)=12 Math.round(-11.5)=-11
四舍五入原理是在参数上加 0.5 向下取整

15.构造器不能被继承,因此不能被重写,但可以被重载
16.抽象的方法是否可同时是静态的?是否可同时是本地方法?是否可同时被 synchronized 修饰?
抽象的方法需要子类重写,而静态的方法是无法被重写的,故二者矛盾。
本地方法是由本地代码实现的,而抽象方法是没有实现的,故也是矛盾的。
synchronized 和方法的实现细节有关,抽象方法不涉及细节,故矛盾

17.是否可以从一个静态方法内部调用非静态方法?
NO,静态方法只能访问静态成员,非静态方法的调用需要先创建对象,在调用静态方式可能对象并没有被初始化。

18.数据类型转换:
调用基本数据类型对应的包装类中的方法 parseXXX(String) 或 valueOf(String) 即可返回相应基本类型;
基本数据类型转换为字符串:一种是将基本数据类型与空字符串 + 即可获得对应字符串;另一种是:调用 String 类中的 valueOf() 方法返回相应字符串。

19.如何实现字符串反转和替换?
20.Error 和 Exception 区别:
Error 表示系统级别的错误和程序不必处理的异常;
Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题,换句话而言:表示如果程序运行正常,从不会发生的情况。

21.运行时异常和受检异常有何异同?
22.阐述:final finally finalize 的区别
23.Collection 和 Collections 区别
Collection 是一个接口,是 Set、list 等容器的父接口;
Collections 是一个工具类,提供了一系列的静态方法来辅助容器操作,这些方法包括对容器的搜索、排序、线程安全化等等。

24.Thread 类的 sleep() 方法和对象的 wait() 方法都可以让线程暂停执行,有何区别?
sleep 是线程类的静态方法,调用此方法会让当前线程暂停执行指定的时间,将执行机会 CPU 让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复。
wait() 是 object 类的方法,调用对象的 wait() 方法导致当前线程放弃对象的锁,进入对象的等待池,只有调用对象的 notify() 方法时才能唤醒等待池中的线程进入到等锁池,如果线程重新获得对象的锁即进入到就绪状态。

25.线程同步以及线程调用相关的方法
26.编写多线程的方法;
27.什么是线程池?
28.Java 中有几种类型的流?
字节流和字符流;
字节流继承于 InputStream OutputStream
字符流继承于 Reader Writer

29.获取一个目录下所有文件?
30.数据库连接池的作用?
创建和释放连接都有很大开销,若服务器不在本地时,每次建立连接需要 TCP 三次握手,释放连接需要进行 TCP 四次握手,开销相当大。
数据库连接池典型的空间换取时间的策略,池化技术。

31.事务 ACID
32.如何通过反射创建对象?
1)调用 newInstance() 方法;
2)通过类对象的 getConstructor() 或 getDeclareConstructor() 方法获得构造器对象并调用其 newInstance() 方法创建对象;

33.设计模式
34.synchronized 官方解释
https://www.cnblogs.com/songgj/p/14403523.html

35.序列化和反序列化
https://www.zhihu.com/question/47794528/answer/672095170

36.深拷贝&浅拷贝
浅拷贝是对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝;而深拷贝是对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容

https://www.html.cn/qa/other/22850.html

37.

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册