JavaEE 核心知识

JavaEE 核心知识点复习笔记

承接上篇 JavaSE,这篇把 JavaEE 从前端基础、数据库、JDBC、反射注解到 SSM 全家桶、SpringBoot、微服务整条线串一遍,面试复习速查专用。


一、前端基础(JavaWeb 必备)

1. 前端三件套 + jQuery

技术 作用
HTML 构建网页结构和内容
CSS 控制网页样式和布局
JavaScript 实现网页动态交互效果
jQuery 封装了 JS 常用功能,简化 DOM 操作

2. Ajax 异步请求

作用 :不刷新整个网页的情况下,与服务器交换数据并局部更新页面内容。

原生 Ajax 五步走

复制代码
// 1. 创建核心对象
var xhr = new XMLHttpRequest();

// 2. 设置请求行(请求方式、url、是否异步)
xhr.open("GET/POST", "url", true);

// 3. 设置请求头(POST 才需要)
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

// 4. 注册状态变化回调
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        // 处理响应数据
        console.log(xhr.responseText);
    }
};

// 5. 发送请求
xhr.send(params);

💡 readyState == 4 表示请求完成,status == 200 表示响应成功,两个条件都满足才处理。


二、服务器技术

1. C/S 与 B/S 架构

架构 特点 优点 缺点
C/S 需要安装专用客户端 体验好、性能高、功能丰富 更新维护成本高、跨平台差
B/S 浏览器直接访问,免安装 升级方便、跨平台、部署简单 体验受限、依赖网络

2. 静态网页 vs 动态网页

  • 静态网页 :内容固定,所有人看到的都一样,.html/.htm 后缀,浏览器直接解析
  • 动态网页:内容根据条件动态变化(如登录后显示用户名),需要服务器端程序处理(Servlet/JSP 等)

3. Web 项目目录结构

复制代码
项目根目录(WebContent / src/main/webapp)
├── HTML/CSS/JS/JSP 等可直接访问的资源
└── WEB-INF(受保护目录,浏览器不能直接访问)
    ├── web.xml      # Web 应用配置文件
    ├── classes/     # 编译后的 .class 字节码
    └── lib/         # 项目依赖的 jar 包

⚠️ 重点WEB-INF 下的资源外界访问不到,必须通过服务器内部转发才能访问,这也是安全设计。

4. Tomcat 发布项目的四种方式

  1. 直接把项目文件夹放到 webapps 目录下 → 自动部署
  2. war 包放到 webapps → Tomcat 自动解压部署
  3. server.xml 中配置 <Context> 指定项目路径
  4. conf/Catalina/localhost 下添加 xml 配置文件

访问路径格式http://主机:端口/项目名/资源路径

5. HTTP 协议

  • 无状态协议:服务器不记录客户端状态,每次请求都是独立的
  • 解决无状态的方案:Session、Cookie、Token 等会话跟踪技术

三、数据库技术

1. SQL 四大分类

分类 全称 作用 关键字
DDL 数据定义语言 定义库、表、列结构 CREATEDROPALTERTRUNCATE
DML 数据操作语言 操作表中记录 INSERTUPDATEDELETE
DQL 数据查询语言 查询数据 SELECTFROMWHEREGROUP BYHAVINGORDER BYLIMIT
DCL 数据控制语言 管理权限、事务 GRANTREVOKECOMMITROLLBACK

2. 常用数据类型

分类 类型 说明
字符串 CHAR 定长字符串,查询快但可能浪费空间
VARCHAR 变长字符串,节省空间,最常用
TEXT 大文本,存长文章内容
数值 INT/BIGINT 整数类型
DECIMAL 定点数,精确计算,存金额必须用它
日期 DATE 日期 YYYY-MM-DD
DATETIME 日期时间,范围大
TIMESTAMP 时间戳,自动更新,范围 1970-2038
其他 BLOB 二进制大对象(实际开发一般存路径不存文件)

3. 单表约束

作用:限制表中数据,保证数据的正确性、有效性、完整性。

约束 作用 特点
主键约束 PRIMARY KEY 唯一标识每行记录 值唯一且不为空,一张表只能一个主键,常配合 AUTO_INCREMENT 自增
唯一约束 UNIQUE 该列值不能重复 可以为 null
非空约束 NOT NULL 该列值不能为空 ---
默认约束 DEFAULT 设置默认值 不赋值时用默认值
外键约束 FOREIGN KEY 建立两表关联 保证数据一致性

4. 多表外键约束

外键:从表中引用主表主键的列,用来建立两表关联,保证数据一致性。

复制代码
-- 语法
CONSTRAINT 外键名 FOREIGN KEY (从表外键列) REFERENCES 主表(主键列)

级联操作

  • ON UPDATE CASCADE:主表主键更新时,从表外键同步更新
  • ON DELETE CASCADE:主表记录删除时,从表关联记录同步删除

⚠️ 级联删除慎用! 一不小心可能删光整张关联表的数据,生产环境一般用逻辑删除代替。

5. 聚合函数

函数 作用
COUNT(*) 统计行数
COUNT(列名) 统计该列非空的数量
SUM() 求和
AVG() 求平均值
MAX() / MIN() 最大/最小值

聚合函数常配合 GROUP BY 分组使用,分组后筛选用 HAVING

6. 多表查询

内连接

只显示两表中满足连接条件的交集数据。

复制代码
-- 隐式内连接
SELECT * FROM A, B WHERE A.id = B.aid;

-- 显式内连接(推荐,语义清晰)
SELECT * FROM A INNER JOIN B ON A.id = B.aid;
外连接
类型 效果 语法
左外连接 LEFT JOIN 显示左表全部 + 右表匹配的,不匹配补 null SELECT * FROM A LEFT JOIN B ON 条件
右外连接 RIGHT JOIN 显示右表全部 + 左表匹配的 SELECT * FROM A RIGHT JOIN B ON 条件
子查询

查询里嵌套另一个查询,内层结果作为外层的条件或数据源。

  • 单行单列 :结果是一个值 → 用 = > < 比较
  • 多行单列 :结果是集合 → 用 IN、ANY、ALL
  • 多行多列 :结果是虚拟表 → 放在 FROM 后面继续查

四、JavaEE 核心技术

1. JDBC

Java DataBase Connectivity,Java 操作数据库的标准接口。

标准六步走
复制代码
// 1. 导入驱动 jar 包(mysql-connector-java)

// 2. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");

// 3. 获取连接对象
Connection conn = DriverManager.getConnection(url, username, password);

// 4. 获取执行 SQL 的对象
Statement stmt = conn.createStatement();

// 5. 执行 SQL
ResultSet rs = stmt.executeQuery(sql);  // 查询,返回结果集
int count = stmt.executeUpdate(sql);    // 增删改,返回影响行数

// 6. 释放资源(倒着关)
rs.close();
stmt.close();
conn.close();
SQL 注入问题

原理:用户输入的内容拼接到 SQL 里,恶意输入特殊字符串改变 SQL 语义,绕过验证。

复制代码
经典注入:密码输入 ' or '1'='1
拼接后:WHERE password='' or '1'='1' → 条件恒成立,直接登录

解决方案 :用 PreparedStatement(预编译对象)代替 Statement,参数用 ? 占位,SQL 语义不会被篡改。

2. XML

可扩展标记语言,标签都是自定义的。

对比 XML HTML
标签 自定义 预定义
语法 严格 松散
用途 存数据、做配置 展示数据

主要用途:配置文件(老框架常用)、数据传输(现在 JSON 更主流)。

XML 约束:规定 XML 里能写什么标签、什么结构

  • DTD 约束 :简单,.dtd 文件
  • Schema 约束 :功能强大,支持数据类型校验,.xsd 文件

五、反射与注解

1. 反射机制

定义 :程序在运行期间 动态获取任意类的信息(成员变量、方法、构造器),并且可以操作对象的属性和方法。框架的底层核心就是反射。

正常流程 反射流程
知道类名 → new 对象 → 调用方法(编译期确定) 拿到 Class 对象 → 获取方法/属性 → 调用(运行期动态确定)

核心思想 :把类的各个组成部分(字段、方法、构造器)封装成对象(FieldMethodConstructor),这就是反射。

💡 .class 字节码文件加载到内存后,JVM 会创建一个 Class 对象,通过它可以反推类的所有信息。

2. 代理模式

给目标对象提供一个代理对象,由代理控制对目标的访问,在不修改源码的前提下增强功能。AOP 的底层就是动态代理。

3. 注解(Annotation)

Java 5 引入的代码级元数据,可以标在类、方法、字段上,用来做配置说明。现在框架基本都用注解替代 XML 配置了。

自定义注解
复制代码
public @interface 注解名 {
    // 属性列表
    String value() default "";
}
元注解(修饰注解的注解)
元注解 作用
@Target 注解能作用的位置(TYPE 类、METHOD 方法、FIELD 字段等)
@Retention 保留阶段(SOURCE 源码 / CLASS 字节码 / RUNTIME 运行时)反射读取必须 RUNTIME
@Documented 是否生成到文档
@Inherited 是否被子类继承

💡 小技巧:只有一个 value 属性时,赋值可以省略 value=,直接写值。


六、主流框架

1. MyBatis

半 ORM 持久层框架,支持定制化 SQL、存储过程和高级映射,帮你省去几乎所有 JDBC 样板代码和手动参数封装。

延迟加载(懒加载)

用到关联数据时才去查,不用不查,提升性能。

  • 配置:lazyLoadingEnabled=trueaggressiveLazyLoading=false
  • 只能在嵌套查询(select 属性)方式下使用
缓存策略
缓存级别 范围 特点
一级缓存 SqlSession 级别 同一个 SqlSession 内相同查询缓存,默认开启
二级缓存 SqlSessionFactory 级别 跨 SqlSession 共享,需要手动开启(<cache> 标签)

⚠️ 执行增删改、commitcloseclearCache 都会清空缓存。而且缓存存的是对象引用,修改对象会影响缓存数据。

2. Spring 框架

核心概述
  • 两大核心:IOC(控制反转)、AOP(面向切面编程)
  • 一站式框架:表现层 SpringMVC、持久层 JdbcTemplate、业务层事务管理,各层都有解决方案
  • 优点:低耦合、可扩展、声明式事务、方便集成各种框架
IOC(控制反转)

底层原理:XML 配置 + 工厂模式 + 反射

BeanFactory vs ApplicationContext

  • BeanFactory:顶层接口,懒加载,getBean 时才创建对象
  • ApplicationContext:子接口,功能更多,启动时就创建所有单例 Bean(开发常用)

Bean 作用域

  • singleton 单例(默认)
  • prototype 多例
  • request / session / application(Web 环境)
IOC 常用注解
分类 注解 作用
创建对象 @Component / @Controller / @Service / @Repository 四个功能一样,只是语义分层(表现层/业务层/持久层)
注入数据 @Autowired 按类型自动注入(Spring 自带)
@Qualifier 配合 @Autowired,按名称注入
@Resource 先按名称再按类型(JavaEE 注解)
@Value 注入基本类型/String,支持 ${} 读配置
作用域 @Scope singleton / prototype
生命周期 @PostConstruct 初始化 / @PreDestroy 销毁

纯注解开发@Configuration 配置类、@ComponentScan 包扫描、@Bean@PropertySource@Import

AOP(面向切面编程)

定义 :通过预编译和运行期动态代理,在不修改源码的情况下给程序添加额外功能。典型应用:日志、事务、权限校验。

3. SpringMVC

MVC 模式:Model(模型数据)+ View(视图)+ Controller(控制器) 分离。

前端控制器模式DispatcherServlet 统一接收所有请求,再分发到具体的处理器。

请求参数绑定
注解 作用
@RequestParam 指定参数名、是否必填、默认值
@PathVariable RESTful 风格路径变量绑定
@RequestBody 接收 JSON 请求体,自动转对象
@RequestHeader 获取请求头
@CookieValue 获取 Cookie 值
常用注解速查
注解 作用
@Controller 标记控制器类
@RequestMapping 请求路径映射,类+方法组合使用
@GetMapping/@PostMapping/@PutMapping/@DeleteMapping REST 风格快捷注解
@ResponseBody 返回值直接作为响应体,不走视图,返回 JSON 常用
@RestController @Controller + @ResponseBody 组合,整个类都返回 JSON
@ControllerAdvice 全局异常处理、全局数据绑定
@ExceptionHandler 异常处理方法
RESTful 风格
  • URL 定位资源,HTTP 动词描述操作
  • GET 查询、POST 新增、PUT 修改、DELETE 删除
  • 路径传参:/user/100,用 @PathVariable 获取
  • 前后端分离:后端只返回 JSON,前端负责渲染
文件上传
  • 表单 enctype="multipart/form-data"method="post"
  • 配置 CommonsMultipartResolver(id 必须是 multipartResolver
  • Controller 用 MultipartFile 接收,transferTo() 保存到磁盘

4. SpringBoot

核心特点

  • 起步依赖(starter)→ 不用自己凑 jar 包
  • 自动配置 → 很多配置默认就给你配好了
  • 内嵌容器 → 直接打 jar 包运行,不用装 Tomcat
  • 无需 XML → 零配置开发
  • Actuator → 应用监控

一句话总结:SpringBoot 不是新框架,是快速开发 Spring 的脚手架,约定大于配置。

5. MyBatis-Plus(MP)

MyBatis 的增强工具,单表 CRUD 零 SQL,开发效率拉满。

核心特性

  • 内置通用 BaseMapper 和通用 Service,单表不用写 SQL
  • 条件构造器 QueryWrapperUpdateWrapper,链式拼接条件
  • 分页插件、主键策略、逻辑删除、自动填充、乐观锁、代码生成器
  • 支持 Lambda 写法,字段名用方法引用,防止写错

常用注解@TableName@TableId@TableField@TableLogic

6. Redis

高性能键值对内存数据库,也叫数据结构服务器。

特点

  • 内存存储,读写速度极快(缓存首选)
  • 支持丰富数据类型:String、Hash、List、Set、SortedSet(ZSet)
  • 持久化:RDB 快照 + AOF 日志,防止宕机丢数据
  • 单线程 + 多路 IO 复用模型

典型应用场景:缓存热点数据、会话存储、分布式锁、排行榜、计数器、消息队列、限流

7. Spring Cloud 微服务

一句话:把单体应用拆成多个独立微服务,Spring Cloud 提供整套分布式解决方案。

Spring Cloud Alibaba 核心组件
组件 作用 替代/补充
Nacos 注册中心 + 配置中心二合一 替代 Eureka + Config
Sentinel 流量控制、熔断降级 替代 Hystrix
Dubbo 高性能 RPC 远程调用 比 Feign 性能更强
Seata 分布式事务解决方案 解决跨服务数据一致性
Gateway 微服务网关 路由转发、鉴权、限流
微服务核心能力速览
  1. 服务注册发现(Nacos):所有服务启动时注册进去,调用方动态查地址
  2. 服务调用 & 负载均衡(OpenFeign + LoadBalancer):微服务之间像调本地方法一样互相调用,自动负载均衡
  3. 配置中心(Nacos Config):配置集中管理,动态刷新不用重启
  4. 熔断降级(Sentinel):防止某个服务故障引发连锁雪崩,超时快速返回兜底结果
  5. 网关(Gateway):统一入口,路由转发、鉴权、限流、跨域
  6. 链路追踪(Sleuth + SkyWalking):追踪整条请求链路,定位慢请求和异常

总结:JavaEE 这条线,从 Web 基础 → 数据库 → JDBC → 反射注解 → SSM → SpringBoot → 微服务,是层层递进的。面试重点抓 MyBatis 缓存、Spring IOC/AOP、SpringMVC 流程、Redis 数据结构和应用场景、微服务各组件作用这几块,基本能覆盖大部分问题。

相关推荐
weixin_446729161 小时前
java实现发送邮件
java·开发语言
QCoding1 小时前
Java转AI第三课:Spring AI如何把100行HTTP代码缩减到10行?
java·人工智能
振宇i1 小时前
Java集成openfeign远程RPC调用教程
java·rpc·openfeign
wear工程师1 小时前
volatile 这题别只答「可见性」:面试官真正想听的是这条 happens-before
java·jvm
摇滚侠2 小时前
Java 全栈开发实战教程 01 课程简介
java
王九思2 小时前
对称加密与非对称加密详解
java·网络·数据库
SimonKing2 小时前
Spring Boot 4.0 + gRPC 极简集成:4步搞定,比REST还丝滑
java·后端·程序员
C++、Java和Python的菜鸟2 小时前
第3章 后端Web基础 (Maven)
java
小小编程路2 小时前
Java super 关键字详解:用法、场景与常见误区
java·开发语言