【java面试题】个人总结

目录

java中几种基本数据类型?

关于继承以下三点:

重载和重写区别:

==和equls的区别

为什么Java中只有值传递?

java中io流分几种?

BIO,NIO,AIO有什么区别?

java反射机制是什么

String类型不可变,为什么不可变

String 有哪些特性?

是否可以继承String类?

在使用HahMap的时候,用String做key有什么好处?

String,StringBuilder,StriingBuffer区别?

包装类相关

int 和 Integer区别

idk和jre的区别?

面向过程和面向对象(OOP)的区别?

面向对象的三大特征?

List 和Set的区别?

ArrayList 和LinkedList的区别?

如何保证集合的线程安全?

HashMap和HashTable的区别?

java中的异常

java创建对象的几种方式

什么是泛型?泛型的好处?

java中几种基本数据类型?

浮点型float,double 整型int byte short long 布尔值boollean 字符char

关于继承以下三点:

子类继承父类所有的方法,子类可以有自己的方法,子类可以用自己的方法去实现父类

从静态方法和实例方法开始到重写重载中间的部分。

重写和重载

构造器不能被继承,不能被继承自然不能被重写,但是可以被重载

重载和重写区别:

重载:发生在同一个类中,方法名相同,参数列表不同(自己想一下都能说出来)

重写:发生在父子类中,也就是子类继承父类的基础下,把父类的实现方法覆盖一遍,子类的方法名,参数列表必须相同

补充:重载对访问权限没啥要求,而子类重写方法的访问权限不能小于父类(就是说比如父类是public,则子类就不能是private)

重载对于返回值没有要求,而子类重写方法的返回值必须和父类的返回值相同或者是其子类

==和equls的区别

==数据类型比较的是值,equals引用类型比较的是对象的内存地址

hashcode的作用是获取哈希码,就是散列码

为什么Java中只有值传递?

【面试题精讲】为什么 Java 只有值传递?_java中为什么只有值传递面试题-CSDN博客

1 简单性

2 安全性

3 性能优化

4 值传递的示例

Java 中只有值传递一种参数传递方式,无论是基本数据类型还是引用数据类型。这是因为 Java 中的所有数据类型都可以分为基本数据类型和引用数据类型,而方法调用时只会将变量的值复制一份传递给方法。值传递使得代码更加简洁、安全,并且能够提高程序的执行效率。

值传递

指在调用函数时,将实际参数复制一份传递到函数中

引用传递

指在调用函数时,将实际参数的 地址 直接传递到函数中,那么在函数中对参数进行修改,将影响到实际参数

java中io流分几种?

按流的方向分,输入流和输出流

按操作单元分,字节流和字符流

按流的角色分,节点流和处理流

InputStream/Reader:所有输入流的基类,前者字节输入流,后者字符输入流

OutputStreamBIO/Writer:所有输出流的基类,前者字节输出流,后者字符输出流

BIO,NIO,AIO有什么区别?

BIO:Block IO同步阻塞式IO,就是外卖平常使用的传统IO,特点模式简单使用方便,并发处理能力低

NIO:Non IO同步非阻塞IO,是传统IO的升级,客户端和服务端

java反射机制是什么

在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法,对于任意一个对象,哦都能够调用它的任意一个方法和属性 就是反射

静态编译:在编译时确定类型,绑定对象

动态编译:在运行时确定类型,绑定对象

String类型不可变,为什么不可变

因为private final char value[];

String类类利用了final修饰的char类型数组存储字符

char前面有final

String 不是八个基本数据类型哦

String 有哪些特性?

不可变性

常量池优化

final :使用final来定义String类,表String类不能被继承,提高了系统安全性

通过反射是可以修改所谓的“不可变”对象

用反射可以访问私有成员,然后反射出String对象的value属性,进而改变通过获得的value引用改变数组

的 结构,md一般不会这么做随便提一下

是否可以继承String类?

不可以,因为是final类,不可变,不能被继承

将字符串反转:使用StringBuffer 或StringBuffer 的reverse()方法

数组没有length方法 有length的属性

在使用HahMap的时候,用String做key有什么好处?

HahMap内部实现是通过key的hashcode来确定value的存储位置,因为字符串是不可变的

线程安全性:String中对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串得到基本操作

StringBuilder并没有对方法进行加同步锁,所以是非线程安全的

性能:

每次对String 类型进行改变的时候都会重新生成一个新的String对象,既然改变了那就会生成,然后将指针指向新的String对象

对于三者的总结

如果要操作少量的数据用String

单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

多线程操作字符串缓冲区 下操作大量数据 = StriingBuffer

String,StringBuilder,StriingBuffer区别?

String是final的中介类,一旦创建后不可修改,也就是不可变的,另外这俩可变字符串,

StringBuilder不是线程安全的

StringBuffer是线程安全的

包装类相关

自动装箱和拆箱

装箱:就是把基本数据类型用它们对应的引用类型包装起来

拆箱:把包装类型转换为基本数据类型

int 和 Integer区别

为了能将这些基本数据类型当成对象操作,java为每一个基本数据类型都引入了对应的包装类型,int的包装类型就是 Integer

Integer a = 127和 Integer b = 127相等吗

对于对象引用类型 == 比较的是对象的内存地址

对于基本数据类型 == 比较的是值

idk和jre的区别?

jdk里面包含了jre,负责创建和编译软件,jre是拿来运行java程序的,交给jre去运行java程序

jre是运行时环境,里面包含了jvm,是Java程序运行时必须的软件环境。

面向过程和面向对象(OOP)的区别?

面向过程就是把问题分成一个一个的步骤,每个步骤使用函数进行实现,解决问题用函数之间的调用即可,最简单的实现就是写一个算法。

面向对象就是把这个问题抽象成不同的对象进行组合,建立对象的目的不是为了完成一个个步骤,而是为了描述解决这个问题的过程中发生的行为,

举个简单的例子,比如说造一辆车,车具有方向盘,轮胎等属性,跑起来,转弯这些行为,我们将这些属性和行为进行抽象并且组合成一个Car类,这就是面向对象编程。

面向对象的三大特征?

封装,继承,多态

封装:将属性私有,同时对外提供了set和get方法

继承:子类可以继承父类中属性和方法,父类中private的属性和方法不能呗继承

多态:父类中定义的方法可以被子类重写,同时在运行的时候根据实际类型调用子类中重写的方法

多态的实现满足这两种关系:

类之间有继承关系,子类重写了父类的方法

List 和Set的区别?

list是有序的集合,可以存储重复的元素,可以根据索引查询元素

set是无序的集合,不可存储重复的元素,

list通常用于 存储需要按照顺序访问的元素,如历史记录

set通常用于去重和判重操作

list支持添加,删除和修改操作,set不支持修改操作

ArrayList 和LinkedList的区别?

ArrayList底层是基于动态数组实现的

LinkedList底层基于双链表实现的

这两者都是线程不安全的

如何保证集合的线程安全?

使用的时候 优先在方法内使用,声明为局部变量

使用Collections.synchonizedList将其包装成线程安全的集合

使用线程安全的集合类,如ConcurrentHashMap这个在项目中好像就用到了

HashMap和HashTable的区别?

HashMap不是线程安全的

HashTable是线程安全的。因为他的每一个方法都用到了synchronized修饰

HashMap扩容是数组容量翻倍

HashTable扩容是数组容量翻倍+1

java中的异常

对于java中的异常,主要分两大类(检查型异常和非检查型异常)

常见的异常:空指针异常,类型转换异常,数组越界异常

java创建对象的几种方式

使用new关键字 最常见的

使用反射的方式创建对象,调用newInstance方法

使用class类的newInstance方法

使用constructor类的newInstance方法(这俩用到反射)

使用clone方法,这种方式不会调用任何构造方法,需要先实现Cloneable接口,并重写其定义的clone方法

反序列化

【面试题】Java中创建对象的方式有几种?_创建对象的方式有哪些 面试题-CSDN博客

什么是泛型?泛型的好处?

泛型是jdk5之后引入的一个新特性,它允许在定义类和接口的使用类型参数,咋使用时候再用具体的类型进行替换

最主要的用用是在集合类框架中

泛型好处:

方便:提高代码的复用性:比如将String类型和Integer类型放入List集合中,放String类型的时候需要定义一个List接口,而放Integer类型需要在定义一个接口,那么这样的化代码比较冗余,使用泛型很好的解决整个问题

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值