网站首页 > 文章精选 正文
Java基础
1. Java的特点
- 面向对象
- 平台无关性(JVM实现)
- 健壮性(自动内存管理、异常处理)
- 多线程支持
- 安全性
2. Java基本数据类型
- 8种基本类型:
- 整型:byte(1), short(2), int(4), long(8)
- 浮点:float(4), double(8)
- 字符:char(2)
- 布尔:boolean(1)
3. ==和equals的区别
- ==:比较基本类型值或引用类型的内存地址
- equals:Object类的方法,默认比较地址,可重写(如String重写为比较内容)
4. String、StringBuilder、StringBuffer
- String:不可变,线程安全
- StringBuilder:可变,非线程安全,性能高
- StringBuffer:可变,线程安全(方法加synchronized)
5. 自动装箱与拆箱
- 装箱:基本类型 → 包装类(Integer.valueOf())
- 拆箱:包装类 → 基本类型(intValue())
- 注意:Integer缓存-128~127
集合框架
1. List、Set、Map区别
- List:有序可重复(ArrayList、LinkedList)
- Set:无序不可重复(HashSet、TreeSet)
- Map:键值对(HashMap、TreeMap)
2. HashMap原理
- 数组+链表+红黑树(JDK8)
- 初始容量16,负载因子0.75
- 哈希冲突解决:拉链法
- put过程:计算hash→定位桶→遍历链表/树→插入
3. ConcurrentHashMap
- JDK7:分段锁(Segment)
- JDK8:CAS+synchronized(锁单个桶)
- 并发度更高
多线程
1. 线程创建方式
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口(有返回值)
- 线程池创建
2. 线程状态
- NEW:新建
- RUNNABLE:可运行
- BLOCKED:阻塞
- WAITING:等待
- TIMED_WAITING:限时等待
- TERMINATED:终止
3. synchronized和Lock
- synchronized:JVM实现,自动释放锁
- Lock:API层面,需手动释放,更灵活(可尝试获取锁、可中断等)
4. volatile关键字
- 保证可见性
- 禁止指令重排序
- 不保证原子性
5. 线程池参数
- corePoolSize:核心线程数
- maximumPoolSize:最大线程数
- keepAliveTime:空闲线程存活时间
- workQueue:任务队列
- threadFactory:线程工厂
- handler:拒绝策略
JVM
1. 内存区域
- 方法区:类信息、常量、静态变量
- 堆:对象实例
- 虚拟机栈:局部变量表、操作数栈
- 本地方法栈:Native方法
- 程序计数器:当前线程执行的字节码行号
2. 垃圾回收算法
- 标记-清除:产生碎片
- 复制算法:无碎片,空间利用率低
- 标记-整理:无碎片,效率较低
- 分代收集:新生代(复制)、老年代(标记-清除/整理)
3. GC Roots对象
- 虚拟机栈引用的对象
- 方法区静态属性引用的对象
- 方法区常量引用的对象
- 本地方法栈JNI引用的对象
4. 类加载过程
- 加载:获取二进制字节流
- 验证:格式、语义等检查
- 准备:分配内存并设初始值
- 解析:符号引用转直接引用
- 初始化:执行<clinit>方法
设计模式
1. 单例模式
// 双重检查锁
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
2. 工厂模式
- 简单工厂:一个工厂类创建所有产品
- 工厂方法:每个产品对应一个工厂
- 抽象工厂:产品族概念
3. 观察者模式
- 主题(Subject)维护观察者列表
- 观察者(Observer)实现更新接口
- 主题状态变化时通知所有观察者
Spring框架
1. IOC和AOP
- IOC:控制反转,对象创建交给Spring容器
- AOP:面向切面编程,通过动态代理实现
2. Bean生命周期
- 实例化
- 属性赋值
- 初始化(InitializingBean、init-method)
- 使用
- 销毁(DisposableBean、destroy-method)
3. Spring事务传播行为
- REQUIRED(默认):有则加入,无则新建
- REQUIRES_NEW:新建事务
- SUPPORTS:有则加入,无则非事务
- NOT_SUPPORTED:非事务执行
- MANDATORY:必须存在事务
- NEVER:必须不存在事务
- NESTED:嵌套事务
数据库
1. 事务特性(ACID)
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
2. 隔离级别
- 读未提交:可能脏读
- 读已提交:解决脏读,可能不可重复读
- 可重复读(MySQL默认):解决不可重复读,可能幻读
- 串行化:解决所有问题,性能最低
3. 索引类型
- 普通索引
- 唯一索引
- 主键索引
- 组合索引
- 全文索引
4. 索引失效场景
- 使用不等于(!=或<>)
- 使用函数操作列
- 类型转换
- like以通配符开头
- or条件未全部索引
- 违反最左前缀原则
Redis
1. 数据类型
- String:字符串
- Hash:键值对集合
- List:双向链表
- Set:无序集合
- ZSet:有序集合
- Bitmaps:位图
- HyperLogLog:基数统计
- Geospatial:地理位置
2. 持久化方式
- RDB:定时快照,恢复快
- AOF:记录写命令,数据更安全
- 混合持久化(Redis4.0+)
3. 缓存问题
- 缓存穿透:查询不存在数据(解决方案:布隆过滤器)
- 缓存击穿:热点key过期(解决方案:互斥锁)
- 缓存雪崩:大量key同时过期(解决方案:随机过期时间)
分布式
1. CAP理论
- 一致性(Consistency)
- 可用性(Availability)
- 分区容错性(Partition tolerance)
- 只能同时满足其中两项
2. BASE理论
- Basically Available(基本可用)
- Soft state(软状态)
- Eventually consistent(最终一致性)
3. 分布式锁实现
- 数据库唯一索引
- Redis(SETNX)
- Zookeeper(临时顺序节点)
算法与数据结构
1. 排序算法
- 冒泡排序:O(n^2)
- 选择排序:O(n^2)
- 插入排序:O(n^2)
- 快速排序:O(nlogn)
- 归并排序:O(nlogn)
- 堆排序:O(nlogn)
2. 查找算法
- 顺序查找:O(n)
- 二分查找:O(logn)
- 哈希查找:O(1)
3. 常用数据结构
- 数组:随机访问快,插入删除慢
- 链表:插入删除快,查找慢
- 栈:FILO
- 队列:FIFO
- 树:二叉树、AVL树、红黑树
- 图:邻接矩阵、邻接表
以上内容是Java面试中常见的基础知识点,实际面试中可能会根据岗位需求有所侧重。建议在掌握这些基础的同时,结合项目经验进行深入理解。
#java# #java面试# #java面试#
猜你喜欢
- 2025-06-28 java 9新特性 模块化系统(java新版本新特性)
- 2025-06-28 JAVA大集群下的负载均衡之道(java负载均衡是什么意思)
- 2025-06-28 Java Lambda表达式详解(java的lambada表达式)
- 2025-06-28 Java 中的 volatile 关键字(java volatile 例子)
- 2025-06-28 java ArrayList类详解及Vector类简介
- 2025-06-28 Java对比学习Pyton之高级特性:函数式编程
- 2025-06-28 仓颉、Java、Golang性能测试——数组扩容
- 2025-06-28 怎么求第K大的数,topK 问题(快排的应用)java
- 2025-06-28 轻松掌握 Java 变量:编程世界的存储小能手
- 2025-06-28 java采用int32作为hashcode,会不会出现更高的碰撞概率?
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)