Java面试题分享
通过网盘分享的文件:面试题等2个文件
链接: https://pan.baidu.com/s/1Xw0PzkfAmL8uesYBvrW2-A?pwd=pebt 提取码: pebt
一、Java基础篇
1. OOP面向对象
面向对象编程(OOP)是一种编程范式,它利用“类”和“对象”来设计程序结构。OOP具有三大特性:
继承:从已有类得到继承信息创建新类的过程。
封装:把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
多态性:允许不同子类型的对象对同一消息作出不同的响应。
2. 重载与重写
重载:发生在本类,方法名相同但参数列表不同。
重写:发生在父类与子类之间,方法名、参数列表和返回值类型都必须相同,且访问权限不能比父类中被重写的方法更低。
3. 接口与抽象类
接口:要被类实现,支持多继承,只能声明常量和方法签名。
抽象类:要被子类继承,支持单继承,可以有构造器、成员变量和方法实现。
4. 深拷贝与浅拷贝
浅拷贝:只拷贝基本数据类型的值和实例对象的引用地址。
深拷贝:拷贝基本数据类型的值以及实例对象所引用的对象。
5. sleep和wait
sleep:属于Thread类,释放CPU但不释放锁资源。
wait:属于Object类,释放CPU并释放锁资源,需与synchronized一起使用。
6. 自动拆装箱
装箱:将基本类型转换成包装类对象。
拆箱:将包装类对象转换成基本类型的值。
7. ==和equals
==:比较基本数据类型时比较值,比较引用数据类型时比较地址。
equals:默认比较对象地址,可重写以比较对象内容。
8. String的final修饰
String类被final修饰,不能被继承,以保证其不变性和安全性。
9. StringBuffer与StringBuilder
StringBuffer:线程安全,方法大多使用synchronized修饰。
StringBuilder:线程不安全,但效率更高。
10. final、finally、finalize
final:修饰类、变量和方法,表示不可继承、不可变和不可重写。
finally:用于try-catch语句块中,无论是否发生异常都会执行。
finalize:在对象被垃圾回收前调用的方法,用于资源清理。
二、Java高级篇
1. HashMap底层源码
HashMap在JDK 1.8中由数组+链表+红黑树实现,通过哈希表存储键值对,解决哈希冲突时使用链表或红黑树。
2. JVM内存结构
JVM内存分为方法区、虚拟机栈、本地方法栈、堆和程序计数器。
方法区:存储类信息、常量、静态变量等。
虚拟机栈:为每个方法执行创建栈帧,存储局部变量表、操作数栈等。
本地方法栈:为Native方法服务。
堆:存储对象实例,是垃圾回收的主要区域。
程序计数器:记录当前线程执行的字节码行号。
3. 垃圾收集方法
复制算法:用于年轻代,效率高但内存消耗大。
标记-清除:用于老年代,效率较低且可能产生碎片。
标记-整理:也是用于老年代,效率较低但不会产生碎片。
4. 线程池
线程池通过复用线程来降低资源消耗和提高响应速度,常用的线程池有CachedThreadPool、FixedThreadPool、SingleThreadExecutor和ScheduledThreadPool。
5. synchronized与Lock
synchronized:隐式锁,由JVM管理,可重入。
Lock:显式锁,提供灵活的锁机制,如超时锁和可中断锁。
6. ConcurrentHashMap
ConcurrentHashMap是线程安全的Map容器,在JDK 1.8中通过数组+链表+红黑树实现,采用CAS和synchronized保证线程安全。
三、Java框架篇
1. SpringMVC工作流程
用户请求通过DispatcherServlet分发到HandlerMapping,找到处理器后通过HandlerAdapter调用,处理完成后返回ModelAndView,最后通过ViewResolver渲染视图并响应用户。
2. Spring常用注解
@Component:标识受Spring管理的组件。
@Controller:标识表示层组件。
@Service:标识业务层组件。
@Repository:标识持久层组件。
@Autowired:自动装配。
@RequestMapping:完成请求映射。
3. Spring事务管理
Spring支持声明式事务管理和编程式事务管理,通过@Transactional注解实现声明式事务管理,通过TransactionTemplate实现编程式事务管理。
四、MySQL篇
1. MySQL事务
MySQL事务具有原子性、一致性、隔离性和持久性(ACID特性),支持四种隔离级别:读未提交、读提交、可重复读和串行化。
2. MyISAM与InnoDB
MyISAM:不支持事务,表级锁,读写互斥。
InnoDB:支持事务,行级锁,读写不互斥。
3. 索引优化
避免在索引列上使用函数和表达式。
使用合适的索引类型(B+树索引)。
对查询条件、排序和分组字段建立索引。
五、Redis篇
1. Redis数据类型
Redis支持多种数据类型,包括字符串、列表、集合、有序集合、哈希和位图等。
2. Redis持久化
Redis支持RDB和AOF两种持久化方式,RDB通过快照方式持久化数据,AOF通过记录写操作日志方式持久化数据。
3. Redis事务
Redis事务通过MULTI、EXEC、DISCARD等命令实现,事务中的命令要么全部执行,要么全部不执行。
4. 缓存策略
缓存击穿:通过分布式锁解决。
缓存雪崩:通过设置不同的过期时间避免。
缓存穿透:通过空结果缓存或布隆过滤器解决。
以上是对Java核心技术要点的详细解析,涵盖了Java基础、高级特性、框架使用、MySQL数据库以及Redis缓存等方面。希望这些内容能对大家的学习和工作有所帮助。