百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Java面试必备八股文(java面试必备八股文pdf下载)

mhr18 2025-06-29 17:37 3 浏览 0 评论

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. 线程创建方式

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口(有返回值)
  4. 线程池创建

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. 类加载过程

  1. 加载:获取二进制字节流
  2. 验证:格式、语义等检查
  3. 准备:分配内存并设初始值
  4. 解析:符号引用转直接引用
  5. 初始化:执行<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生命周期

  1. 实例化
  2. 属性赋值
  3. 初始化(InitializingBean、init-method)
  4. 使用
  5. 销毁(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面试#

相关推荐

如何检查 Linux 服务器是物理服务器还是虚拟服务器?

在企业级运维、故障排查和性能调优过程中,准确了解服务器的运行环境至关重要。无论是物理机还是虚拟机,都存在各自的优势与限制。在很多场景下,尤其是当你继承一台服务器而不清楚底层硬件细节时,如何快速辨识它是...

第四节 Windows 系统 Docker 安装全指南

一、Docker在Windows上的运行原理(一)架构限制说明Docker本质上依赖Linux内核特性(如Namespaces、Cgroups等),因此在Windows系统上无法直...

C++ std:shared_ptr自定义allocator引入内存池

当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低。当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分...

Activiti 8.0.0 发布,业务流程管理与工作流系统

Activiti8.0.0现已发布。Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎。Activiti可以...

MyBatis动态SQL的5种高级玩法,90%的人只用过3种

MyBatis动态SQL在日常开发中频繁使用,但大多数开发者仅掌握基础标签。本文将介绍五种高阶技巧,助你解锁更灵活的SQL控制能力。一、智能修剪(Trim标签)应用场景:动态处理字段更新,替代<...

Springboot数据访问(整合Mybatis Plus)

Springboot整合MybatisPlus1、创建数据表2、引入maven依赖mybatis-plus-boot-starter主要引入这个依赖,其他相关的依赖在这里就不写了。3、项目结构目录h...

盘点金州勇士在奥克兰13年的13大球星 满满的全是...

见证了两个月前勇士与猛龙那个史诗般的系列赛后,甲骨文球馆正式成为了历史。那个大大的红色标志被一个字母一个字母地移除,在周四,一切都成为了过去式。然而这座,别名为“Roaracle”(译注:Roar怒吼...

Mybatis入门看这一篇就够了(mybatis快速入门)

什么是MyBatisMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为M...

Springboot数据访问(整合druid数据源)

Springboot整合druid数据源基本概念SpringBoot默认的数据源是:2.0之前:org.apache.tomcat.jdbc.pool.DataSource2.0及之后:com.z...

Linux 中的 &quot;/etc/profile.d&quot; 目录有什么作用 ?

什么是/etc/profile.d/目录?/etc/profile.d/目录是Linux系统不可或缺的一部分保留配置脚本。它与/etc/profile文件相关联,这是一个启动脚本,该脚...

企业数据库安全管理规范(企业数据库安全管理规范最新版)

1.目的为规范数据库系统安全使用活动,降低因使用不当而带来的安全风险,保障数据库系统及相关应用系统的安全,特制定本数据库安全管理规范。2.适用范围本规范中所定义的数据管理内容,特指存放在信息系统数据库...

Oracle 伪列!这些隐藏用法你都知道吗?

在Oracle数据库中,有几位特殊的“成员”——伪列,它们虽然不是表中真实存在的物理列,但却能在数据查询、处理过程中发挥出意想不到的强大作用。今天给大家分享Oracle伪列的使用技巧,无论...

Oracle 高效处理数据的隐藏神器:临时表妙用

各位数据库搬砖人,在Oracle的代码世界里闯荡,处理复杂业务时,是不是总被数据“搅得头大”?今天给大家安利一个超实用的隐藏神器——临时表!当你需要临时存储中间计算结果,又不想污染正式数据表...

Oracle 数据库查询:多表查询(oracle多表关联查询)

一、多表查询基础1.JOIN操作-INNERJOIN:返回两个表中满足连接条件的匹配行,不保留未匹配数据。SELECTa.emp_id,b.dept_nameFROMempl...

一文掌握怎么利用Shell+Python实现多数据源的异地备份程序

简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...

取消回复欢迎 发表评论: