常见Java基础面试题目分享二

简介: 自动拆箱与自动装箱自动拆箱、自动装箱是JDK1.5开始提供的功能,自动拆箱可以把一个包装类型的对象赋值给对应的基本类型,自动装箱则相反。因为Java是一门面向对象的语言,而基本数据类型不具备对象的特点,所以提供了装箱与拆箱。比如某个方法需要传入object类的参数,但实际传入的是数字,如果没有自动拆、装箱就需要特殊处理

自动拆箱与自动装箱


自动拆箱、自动装箱是JDK1.5开始提供的功能,自动拆箱可以把一个包装类型的对象赋值给对应的基本类型,自动装箱则相反。因为Java是一门面向对象的语言,而基本数据类型不具备对象的特点,所以提供了装箱与拆箱。比如某个方法需要传入object类的参数,但实际传入的是数字,如果没有自动拆、装箱就需要特殊处理


Java的异常处理机制


Java的异常机制可以分为异常处理,异常抛出,异常跟踪栈问题。处理异常的语句是try、catch、finally三部分组成。try块用于包裹业务代码,catch用来捕获某个异常并处理,finally一般是用来关闭资源。如果业务代码出现异常,JVM就会创建一个Exception对象找对应的catch进行处理,在finally中可以用来关闭资源。我们也可以手动抛出异常。抛出异常可以用throws与throw,throws只能在方法签名中使用,可以抛出多个异常,throw可以单独使用,但是每次抛出的是一个对应的实例对象。finally中代码不被执行的情况:1、当一个线程执行try或者catch时候被打断。2、在try、catch块中使用System.exit(1)


面向对象的理解


面向对象与面向过程的区别

假如把一头大象装进冰箱

面向过程

1、 打开冰箱 2、人把大象放进冰箱 3、关闭冰箱

面向对象

冰箱:打开,关闭

人:放大象到冰箱面向对象比面向过程更加易维护,易拓展

面向对象的三大特性

封装: 1、封装是指将对象的状态信息隐藏在对象内部,不允许外部直接调用 2、规范使用者的行为,让使用者只能通过预定的方法访问 3、便于修改,提高代码的可维护性

继承: 面向对象实现代码复用的重要手段。优点:1、代码共享,减少创建类的工作量,提高代码复用 2、提高代码的可拓展性 缺点: 1、增加了耦合性,当父类的被修改时子类也会被修改2、降低了代码灵活性,子类中拥有父类全部的方法

多态: 多态的实现离不开继承,在实现某个方法的时候我们可以设置参数类型为父类,,调用时传入子类就可以实现多态 1、多态提高了代码的扩展性 实现多态的必要条件 需要有继承关系,需要有方法的重写需要有父类的引用指向子类的引用。


重载与重写的区别


重载是发生在一个类中的,多个方法之间方法名相同且参数列表不同,重载与方法的返回值与访问修饰符无关。重写发生在父类与子类之间,若子类方法想要和父类方法构成重写关系,则方法名、参数列表必须与父类相同。返回值要小于等于父类方法,抛出异常要小等于父类异常,但是访问修饰符要大等于父类。


泛型与泛型擦除


Java在1.5版本之前没有引入泛型,每次从集合中取出对象就要进行类型转换,假如有人不小心插入了类型错误的对象,那么在运行时转换就会出错。在提出泛型之后,我们可以告诉编译器集合中接受那些对象类型,编译器会自动为你的插入进行转化,并在编译时告知是否插入了类型错误的对象。Java在1.5版本之前没有引入泛型,每次从集合中取出对象就要进行类型转换,假如有人不小心插入了类型错误的对象,那么在运行时转换就会出错。在提出泛型之后,我们可以告诉编译器集合中接受那些对象类型,编译器会自动为你的插入进行转化,并在编译时告知是否插入了类型错误的对象。


为什么要使用多线程


优点

提高响应程序: 耗时的操作使用另一个线程

提高CPU利用率

提高程序运行效率

缺点

线程切换降低效率: 如果线程过多,操作系统需要切换线程

更多的内存空间

可能导致死锁

编码困难


线程创建方式


继承Thread类实现Runnable接口实现Callable接口

实现Callable接口的优点在于可以获取到线程的返回值

线程创建方式就是继承类与实现接口

实现接口的优点是还可以继承其它类,但是编程稍微麻烦一点

继承类的优点是编程简单但是不能继承其它类了

所以通常情况下还是使用实现接口的方式

线程的生命状态


NEW: 新建但是还没有调用start()方法

RUNABLE: 可运行状态,线程正在运行或者等待CPU调度运行

BLOCKED: 阻塞,线程正在等待获取监视器锁

WAITING: 等待状态,线程正在等待其它线程唤醒

TIMED_WAITING: 超时等待,在waiting上基础上增加了超时

TERMINATED: 终止状态,线程已经执行完毕


wati与sleep的区别


所属类不同:wait是Object类的,sleep是Thread类的

对锁的依赖不同:wait依赖于synchronized锁,它必须通过监视器进行调用,在调用后会释放锁,而sleep不会返回的条件不同:调用wait进入等待的线程需要由notify()/notifyAll()唤醒,调用sleep的超时就可以返回,wait也可以使用超时


怎么保证线程安全


原子类、volatile、锁

方案一:使用CAS+volatile 比如AtomicInteger

volatile 保证了有序性与可见性

使用CAS来判断当前值是否被修改过

方案二:使用加锁 比如synchronized、Lock



相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
23天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
57 14
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
28天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
31 6
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
58 4
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
117 4
|
2月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
118 1
Java面试题之Java集合面试题 50道(带答案)
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
90 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)