Java基础面试

Java基础面试题

面向对象三大特征

封装:是指把对象的属性进行私有化,同时提供方法供外界调用

继承:是使用已存在的类作为基础建立新的类,新的类继承父类的所有属性和方法,也可以添加新的属性和方法,优点是提高代码重用、提高程序维护性、提高开发效率

多态:在程序运行时才决定引用变量是哪个具体类,实现方式有继承和接口

String类的常用方法

indexOf():返回指定字符的索引

charAt():返回指定索引处的字符

replace():字符串替换

trim():去除字符串两侧的空白

split():分割字符串

getBytes():返回字符串的byte类型数组

length():长度

substring():截取字符串

equals():比较相等

基本数据类型

四类八种,整形(byte、short、int、long)、浮点型(float、double)、字符型(char)、布尔型(boolean)

==和equals的区别

基本数据类型的比较的是值,引用数据类型的比较的是内存地址

equals是方法,基本数据类型没有方法,对于引用类型,若没有重写该方法,比较的就是地址,若重写了,一般就是比较值,常用的String已经重写了

常见的运行时异常

类转换异常、算术异常、下标越界异常、空指针异常、参数非法异常

成员变量与局部变量的区别

属于类/只是变量参数、修饰符不同、有默认值/无

接口和抽象类的区别

抽象类可以有非抽象方法,接口可以有默认实现

接口中不能有除了static和final变量之外的变量,抽象类可以有

一个类可以实现多个接口,但只能实现一个抽象类

接口的方法默认是public,抽象类不限制

接口是行为规范,抽象类是设计模板

final关键字的作用

修饰类,表示类不能被继承

修饰方法,表示方法不能被重写

修饰变量,表示常量

hashcode和equals

这两个方法常用于判断两个对象是否相等,hashcode效率高,hashcode不相等则两对象不相等,相等再判断equals

hashcode默认用的是对象地址,equals用的也是对象地址,对于堆内存中的对象来说,一般比较对象的属性值,而不是地址,所以要重写这两个方法

重载与重写

重载是同一个类中多个同名方法根据不同的传参执行不同的逻辑

重写是子类对父类方法的重写编写

自动装箱与拆箱

自动装箱是指将基本数据类型用对应的包装类包起来,拆箱相反

HashMap

数据结构:数组+链表+红黑树,链表长度超过8时转换为红黑树

工作原理:hash数组和单向链表

两个对象的hashcode相同时:两个对象不一定相等,使用equals比较后,相等则覆盖,不相等则存储到链表

hash的实现:高16位异或低16位

table数组:长度默认16,装载因子默认0.75,达到12就扩容,扩容是翻倍扩容

为什么使用红黑树:红黑树属于平衡二叉树,查找效率较高

HashMap和HashTable的区别

HashTable是线程安全的,HashMap不是

HashMap的效率更高

HashTable不允许null键和null值

HashMap有链表转红黑树的机制

List、Set、Map三者区别

List有序可重复

Set无序不重复

Map存储键值对,键无序不重复

ArrayList和LinkedList区别

ArrayList底层使用对象数组,LinkedList则使用链表

Spring中bean的作用域

单例模式(默认),原型模式,request,session,application

线程死锁

产生死锁的条件:互斥条件、请求与保持条件、不剥夺条件、循环等待条件

sleep()和wait()区别

主要区别是sleep()没有释放锁,而wait()释放了锁

wait需要notify唤醒,sleep执行完自动苏醒

wait常用于线程间通信,sleep常用于暂停执行

使用多线程的问题

内存泄漏、上下文切换、死锁

synchronized关键字

保证被它修饰的方法或代码块在任意时刻只能有一个线程执行

线程、程序、进程的概念与关系

进程是程序的一次执行过程,是系统运行程序、资源分配的基本单位

线程是进程中执行任务的单位,操作系统调度的最小资源单位

程序是包含指令和数据的文件,是静态的

程序加载到内存中由CPU执行产生进程,进程中执行最少有一个主线程

创建线程的两种方式及区别

实现Runnable接口、继承Thread类

Java不支持多继承,继承了Thread类就不能继承其它的类,而实现Runnable接口还能继承其它类,相对较灵活;继承Thread类后开销较大

String对象的intern()

首先从常量池中查找是否存在该常量值的字符串,若不存在则创建,否则直接返回常量池中字符串的引用

不可变对象

指对象一旦被创建,状态就不能改变,任何修改都会创建一个新的对象,如String和包装类

好处是线程安全

访问修饰符

public:任何地方

private:当前类

protected:当前类、当前包、子类

default(默认):当前类、当前包

BIO、NIO、AIO

BIO:同步阻塞式IO,单线程一次只对应一个连接,数据读写阻塞在一个线程内完成,适用于单机低并发

NIO:同步非阻塞式IO,线程在等待IO时可以执行其他连接请求,适用于高并发

AIO:异步非阻塞式IO,进制接收请求后直接返回,处理完后再发送结果

Java8的新特性

lambda表达式、Stream接口、Comparator接口、Filter过滤、Sort排序、Date API

this与super

this执行当前对象本身,super指向父类

break、continue和return

break跳出循环,continue跳出本次循环继续执行下个循环,return结束方法

获取反射的三个方法

  1. 对象.getClass()
  2. Class.forName(“包名.类名”)
  3. 类名.Class

四种引用生存空间

回收用途生存时间
强引用从不对象的一般状态JVM停止运行
软引用内存不足时对象缓存内存不足时
弱引用正常垃圾回收对象缓存垃圾回收
虚引用正常垃圾回收跟踪对象的垃圾回收垃圾回收

数组与链表

数组在内存中连续存放,查找快,增加删除慢

链表通过元素存储前后元素的地址,增加删除快,查找慢S

String str="i"和String str=new String(“i”)一样吗

不一样,第一个是从常量池中查找引用,没有就在常量池中创建,第二个会在堆内存中开辟新空间

方法参数的传递方式

值传递,基本类型就是其值,引用类型是地址值

BigDecimal

不会像float等出现精度丢失的问题

比较用compareTo,保留用setScale

&和&&

&:按位与、逻辑与

&&:短路与,左边为false时右边就不运算了,直接输出false,|与||同理

static

静态,不创建对象也能使用类的属性或方法

反射概念

Java反射机制是程序运行过程中,对于任意一个类或对象,都能够知道并使用这个类的所有属性和方法

优点:灵活,缺点:有性能瓶颈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值