### Java后端技术面试基础汇总 #### 一、Java基础知识 **1.1 Java基础** - **面向对象的特征:** - 继承:子类可以继承父类的属性和方法。 - 封装:将数据和行为封装在一起,提高数据安全性。 - 多态:同一接口多种实现,提高程序的灵活性。 - **final, finally, finalize的区别:** - `final`:用于声明变量、方法或类不可被修改。 - `finally`:在try-catch-finally语句块中使用,确保无论是否发生异常都会执行某段代码。 - `finalize`:是Object类的一个方法,可以在对象被垃圾回收前进行一些清理工作,但不推荐使用。 - **Exception、Error与一般异常的区别:** - `Exception`:表示程序中可能发生错误,但还可以继续运行。 - `Error`:表示严重问题,通常无法恢复,如内存溢出。 - 运行时异常:如`NullPointerException`,在运行时发生的异常,通常是由编程错误导致的。 - **五种常见的RuntimeException:** - `NullPointerException` - `ArrayIndexOutOfBoundsException` - `ClassCastException` - `NumberFormatException` - `IllegalArgumentException` - **int和Integer的区别:** - `int`是基本类型,而`Integer`是其对应的包装类。 - `Integer`支持`null`值,而`int`不能。 - **Integer的值缓存范围:** - `-128`到`127`之间的整数会被缓存。 - **包装类、装箱和拆箱:** - 装箱:将基本类型转换为包装类类型。 - 拆箱:将包装类类型转换为基本类型。 - **String、StringBuilder、StringBuffer的区别:** - `String`是不可变的,适用于字符串常量。 - `StringBuilder`和`StringBuffer`用于构建字符串,后者是线程安全的。 - **重载和重写:** - 重载发生在同一个类内,方法名相同但参数列表不同。 - 重写发生在继承关系中,子类覆盖父类的方法。 - **抽象类和接口的区别:** - 抽象类可以有部分实现,而接口只能声明方法。 - 类只能继承一个抽象类,但可以实现多个接口。 - **反射的用途及实现:** - 用途:在运行时获取类的信息,动态创建对象。 - 实现:通过`Class`类和`Method`、`Constructor`等反射API。 - **自定义注解的场景及实现:** - 场景:元数据标记、代码生成等。 - 实现:定义注解接口,使用`@Target`、`@Retention`等注解控制。 - **HTTP请求的GET与POST方式的区别:** - GET用于查询数据,POST用于提交数据。 - GET的数据可见且有长度限制,POST的数据不可见且没有长度限制。 - **Session与Cookie的区别:** - Session存储在服务器端,Cookie存储在客户端。 - Session更安全,Cookie可用于跟踪用户信息。 - **常用的JDK包:** - `java.util`:集合框架。 - `java.io`:输入输出流。 - `java.lang`:核心类库。 - **MVC设计思想:** - Model:业务逻辑层。 - View:用户界面层。 - Controller:控制层,负责协调Model和View。 - **equals与==的区别:** - `==`比较两个对象的引用地址。 - `equals`比较两个对象的内容。 - **hashCode和equals方法的区别与联系:** - `hashCode`用于散列查找,`equals`用于对象相等性的比较。 - 如果两个对象相等(`equals`),它们的哈希码也必须相同。 - **Java序列化和反序列化的实现:** - 实现:实现`Serializable`接口。 - 作用:将对象的状态转换为字节流,便于持久化或传输。 - **Object类中常见的方法:** - `toString`:返回对象的字符串表示。 - `equals`:比较对象是否相等。 - `hashCode`:返回对象的哈希码值。 - `wait`、`notify`/`notifyAll`:线程间的同步。 - **Java的平台无关性:** - 通过字节码(.class文件)实现跨平台运行。 - JVM(Java虚拟机)解释执行字节码。 - **JDK和JRE的区别:** - JDK:Java开发工具包,包含编译器、文档等开发工具。 - JRE:Java运行环境,包含JVM和核心类库。 - **Java8的新特性:** - Lambda表达式。 - Stream API。 - Optional类型。 - Date/Time API改进。 #### 二、Java常见集合 **1.2 Java常见集合** - **List和Set的区别:** - List有序,允许重复;Set不允许重复。 - Set通常基于哈希表或树实现,不保证顺序。 - **Set和hashCode以及equals方法的关系:** - `hashCode`用于确定对象在Set中的位置。 - `equals`用于判断两个对象是否相等。 - **List和Map的区别:** - List是有序的元素集合,Map是键值对集合。 - **ArrayList与LinkedList的区别:** - `ArrayList`基于数组实现,随机访问效率高。 - `LinkedList`基于双向链表实现,插入和删除效率高。 - **HashMap和Hashtable的区别:** - `HashMap`允许`null`键和`null`值,`Hashtable`不允许。 - `HashMap`非线程安全,`Hashtable`线程安全。 - **HashSet和HashMap的区别:** - `HashSet`基于`HashMap`实现,内部存储了`null`值的`HashMap`。 - `HashSet`不允许重复元素。 - **HashMap和ConcurrentHashMap的区别:** - `ConcurrentHashMap`线程安全,支持并发操作。 - `HashMap`非线程安全。 - **HashMap的工作原理:** - 基于哈希表实现,通过散列函数计算键的索引。 - 当桶数量达到一定阈值时,可能会转化为红黑树。 - **多线程情况下HashMap死循环的问题:** - 在并发环境下,如果扩容时多个线程同时修改,可能导致环形链表,从而死循环。 - **ConcurrentHashMap的工作原理:** - 使用分段锁技术,将数据分成多个段,每个段都有自己的锁。 - 提高了并发性能。 - **线程池的实现原理:** - 创建固定数量的工作线程。 - 管理任务队列,按照策略调度任务。 - **线程池的几种实现方式:** - `newFixedThreadPool`:固定大小的线程池。 - `newCachedThreadPool`:根据需要创建新线程。 - `newSingleThreadExecutor`:单个后台线程。 - `newScheduledThreadPool`:定时任务。 - **锁机制:** - **线程安全问题**:多个线程共享资源时,避免竞争条件。 - **重入锁**:允许已经获得锁的线程再次获取该锁。 - **产生死锁的四个条件**:互斥、请求与保持、不剥夺、循环等待。 - **volatile关键字**:保证变量的可见性和有序性,不保证原子性。 - **synchronized关键字**:保证线程安全,通过对象监视器实现。 - **AQS(AbstractQueuedSynchronizer)**:提供了一种构造锁和同步器的框架。 - **CAS(Compare and Swap)**:无锁编程技术,用于实现乐观锁。 - **乐观锁和悲观锁**:乐观锁假设竞争不激烈,悲观锁总是假设最坏情况。 - **原子操作类**:如`AtomicInteger`,提供了原子更新操作。 - **ABA问题**:指两次检查之间值由A变为B再变回A的情况。 - **乐观锁的业务场景**:用于读多写少的场景,减少锁的竞争。 - **JVM:** - **内存区域划分**:年轻代、老年代、永久代(JDK8以后称为Metaspace)。 - **OOM和SOE的示例及原因**:内存分配失败、栈空间耗尽。 - **对象回收**:引用计数、可达性分析等。 - **GC回收算法**:标记-清除、复制、标记-整理等。 - **JVM监控工具**:jps、jstat、jmap、jinfo、jconsole。 - **类加载器**:Bootstrap、Extension、Application ClassLoader。 - **类加载过程**:加载、验证、准备、解析、初始化。 - **引用类型**:强引用、软引用、弱引用、虚引用。 - **设计模式:** - **常见的设计模式**:单例、工厂、建造者、适配器、观察者等。 - **六大原则**:单一职责、开放封闭、依赖倒置、接口隔离、里氏替换、迪米特法则。 - **单例模式的实现方式**:懒汉式、饿汉式、双重检查锁定等。 - **设计模式的应用**:在Spring框架中,如依赖注入使用了工厂模式;在MyBatis中,如配置解析使用了工厂模式。 - **数据结构:** - **树**:二叉查找树、平衡二叉树、红黑树、B树、B+树。 - **图算法**:深度优先搜索、广度优先搜索。 - **图算法**:克鲁斯卡尔算法、普林母算法、迪克斯特拉算法。 - **一致性Hash及其原理**:用于分布式系统中的负载均衡。 - **排序算法**:快速排序、堆排序等。 - **网络/IO基础:** - **BIO、NIO、AIO**:阻塞I/O、非阻塞I/O、异步I/O。 - **长连接和短连接**:长连接建立后持续使用,短连接每次请求重新建立。 - **HTTP1.0和2.0的区别**:二进制格式、多路复用、头部压缩等。 - **HTTPS的基本概念**:加密传输协议,基于SSL/TLS协议。 - **三次握手和四次挥手**:建立和断开TCP连接的过程。 - **从浏览器输入URL到页面加载的过程**:DNS解析、建立TCP连接、发送HTTP请求、服务器响应等。
剩余38页未读,继续阅读
- 粉丝: 53
- 资源: 15
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- redhat-lsb-core,安装磐维数据库,安装oracle数据库等常用的依赖包
- redhat-lsb-core,安装磐维数据库,安装oracle数据库等常用的依赖包
- 非常好的在线聊天系统源代码100%好用.zip
- libpng,安装磐维数据库,安装oracle数据库等常用的依赖包
- 飞机检测12-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- redhad-lsb,安装磐维数据库,安装oracle数据库等常用的依赖包
- 注册表监视器,时刻检查程序修改的地方,一切动作尽在掌控
- 飞机、森林、河、网球场检测16-YOLO(v8至v11)数据集合集.rar
- 飞机、桥、人、游泳池、车辆、风车检测13-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 燃料电池功率跟随cruise仿真模型 此模型基于Cruise2019版及Matlab2018a搭建调试而成,跟随效果很好,任务仿真结束起始soc几乎相同 控制模型主要包括燃料堆控制、DCDC控制