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 发布项目的四种方式直接把项目文件夹放到webapps目录下 → 自动部署打war包放到webapps→ Tomcat 自动解压部署在server.xml中配置Context指定项目路径在conf/Catalina/localhost下添加 xml 配置文件访问路径格式http://主机:端口/项目名/资源路径5. HTTP 协议无状态协议服务器不记录客户端状态每次请求都是独立的解决无状态的方案Session、Cookie、Token 等会话跟踪技术三、数据库技术1. SQL 四大分类分类全称作用关键字DDL数据定义语言定义库、表、列结构CREATE、DROP、ALTER、TRUNCATEDML数据操作语言操作表中记录INSERT、UPDATE、DELETEDQL数据查询语言查询数据SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMITDCL数据控制语言管理权限、事务GRANT、REVOKE、COMMIT、ROLLBACK2. 常用数据类型分类类型说明字符串CHAR定长字符串查询快但可能浪费空间VARCHAR变长字符串节省空间最常用TEXT大文本存长文章内容数值INT/BIGINT整数类型DECIMAL定点数精确计算存金额必须用它日期DATE日期 YYYY-MM-DDDATETIME日期时间范围大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显示左表全部 右表匹配的不匹配补 nullSELECT * FROM A LEFT JOIN B ON 条件右外连接 RIGHT JOIN显示右表全部 左表匹配的SELECT * FROM A RIGHT JOIN B ON 条件子查询查询里嵌套另一个查询内层结果作为外层的条件或数据源。单行单列结果是一个值 → 用 比较多行单列结果是集合 → 用IN、ANY、ALL多行多列结果是虚拟表 → 放在FROM后面继续查四、JavaEE 核心技术1. JDBCJava DataBase ConnectivityJava 操作数据库的标准接口。标准六步走// 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 11 拼接后WHERE password or 11 → 条件恒成立直接登录解决方案用PreparedStatement预编译对象代替Statement参数用?占位SQL 语义不会被篡改。2. XML可扩展标记语言标签都是自定义的。对比XMLHTML标签自定义预定义语法严格松散用途存数据、做配置展示数据主要用途配置文件老框架常用、数据传输现在 JSON 更主流。XML 约束规定 XML 里能写什么标签、什么结构DTD 约束简单.dtd文件Schema 约束功能强大支持数据类型校验.xsd文件五、反射与注解1. 反射机制定义程序在运行期间动态获取任意类的信息成员变量、方法、构造器并且可以操作对象的属性和方法。框架的底层核心就是反射。正常流程反射流程知道类名 → new 对象 → 调用方法编译期确定拿到 Class 对象 → 获取方法/属性 → 调用运行期动态确定核心思想把类的各个组成部分字段、方法、构造器封装成对象Field、Method、Constructor这就是反射。.class字节码文件加载到内存后JVM 会创建一个Class对象通过它可以反推类的所有信息。2. 代理模式给目标对象提供一个代理对象由代理控制对目标的访问在不修改源码的前提下增强功能。AOP 的底层就是动态代理。3. 注解AnnotationJava 5 引入的代码级元数据可以标在类、方法、字段上用来做配置说明。现在框架基本都用注解替代 XML 配置了。自定义注解public interface 注解名 { // 属性列表 String value() default ; }元注解修饰注解的注解元注解作用Target注解能作用的位置TYPE 类、METHOD 方法、FIELD 字段等Retention保留阶段SOURCE 源码 / CLASS 字节码 /RUNTIME 运行时反射读取必须 RUNTIMEDocumented是否生成到文档Inherited是否被子类继承 小技巧只有一个value属性时赋值可以省略value直接写值。六、主流框架1. MyBatis半 ORM 持久层框架支持定制化 SQL、存储过程和高级映射帮你省去几乎所有 JDBC 样板代码和手动参数封装。延迟加载懒加载用到关联数据时才去查不用不查提升性能。配置lazyLoadingEnabledtrue、aggressiveLazyLoadingfalse只能在嵌套查询select属性方式下使用缓存策略缓存级别范围特点一级缓存SqlSession 级别同一个 SqlSession 内相同查询缓存默认开启二级缓存SqlSessionFactory 级别跨 SqlSession 共享需要手动开启cache标签⚠️ 执行增删改、commit、close、clearCache都会清空缓存。而且缓存存的是对象引用修改对象会影响缓存数据。2. Spring 框架核心概述两大核心IOC控制反转、AOP面向切面编程一站式框架表现层 SpringMVC、持久层 JdbcTemplate、业务层事务管理各层都有解决方案优点低耦合、可扩展、声明式事务、方便集成各种框架IOC控制反转底层原理XML 配置 工厂模式 反射BeanFactory vs ApplicationContextBeanFactory顶层接口懒加载getBean时才创建对象ApplicationContext子接口功能更多启动时就创建所有单例 Bean开发常用Bean 作用域singleton单例默认prototype多例request/session/applicationWeb 环境IOC 常用注解分类注解作用创建对象Component/Controller/Service/Repository四个功能一样只是语义分层表现层/业务层/持久层注入数据Autowired按类型自动注入Spring 自带Qualifier配合 Autowired按名称注入Resource先按名称再按类型JavaEE 注解Value注入基本类型/String支持${}读配置作用域Scopesingleton / prototype生命周期PostConstruct初始化 /PreDestroy销毁纯注解开发Configuration配置类、ComponentScan包扫描、Bean、PropertySource、ImportAOP面向切面编程定义通过预编译和运行期动态代理在不修改源码的情况下给程序添加额外功能。典型应用日志、事务、权限校验。3. SpringMVCMVC 模式Model模型数据 View视图 Controller控制器分离。前端控制器模式DispatcherServlet统一接收所有请求再分发到具体的处理器。请求参数绑定注解作用RequestParam指定参数名、是否必填、默认值PathVariableRESTful 风格路径变量绑定RequestBody接收 JSON 请求体自动转对象RequestHeader获取请求头CookieValue获取 Cookie 值常用注解速查注解作用Controller标记控制器类RequestMapping请求路径映射类方法组合使用GetMapping/PostMapping/PutMapping/DeleteMappingREST 风格快捷注解ResponseBody返回值直接作为响应体不走视图返回 JSON 常用RestControllerController ResponseBody组合整个类都返回 JSONControllerAdvice全局异常处理、全局数据绑定ExceptionHandler异常处理方法RESTful 风格URL 定位资源HTTP 动词描述操作GET查询、POST新增、PUT修改、DELETE删除路径传参/user/100用PathVariable获取前后端分离后端只返回 JSON前端负责渲染文件上传表单enctypemultipart/form-datamethodpost配置CommonsMultipartResolverid 必须是multipartResolverController 用MultipartFile接收transferTo()保存到磁盘4. SpringBoot核心特点起步依赖starter→ 不用自己凑 jar 包自动配置 → 很多配置默认就给你配好了内嵌容器 → 直接打 jar 包运行不用装 Tomcat无需 XML → 零配置开发Actuator → 应用监控一句话总结SpringBoot 不是新框架是快速开发 Spring 的脚手架约定大于配置。5. MyBatis-PlusMPMyBatis 的增强工具单表 CRUD 零 SQL开发效率拉满。核心特性内置通用BaseMapper和通用 Service单表不用写 SQL条件构造器QueryWrapper、UpdateWrapper链式拼接条件分页插件、主键策略、逻辑删除、自动填充、乐观锁、代码生成器支持 Lambda 写法字段名用方法引用防止写错常用注解TableName、TableId、TableField、TableLogic6. Redis高性能键值对内存数据库也叫数据结构服务器。特点内存存储读写速度极快缓存首选支持丰富数据类型String、Hash、List、Set、SortedSetZSet持久化RDB 快照 AOF 日志防止宕机丢数据单线程 多路 IO 复用模型典型应用场景缓存热点数据、会话存储、分布式锁、排行榜、计数器、消息队列、限流7. Spring Cloud 微服务一句话把单体应用拆成多个独立微服务Spring Cloud 提供整套分布式解决方案。Spring Cloud Alibaba 核心组件组件作用替代/补充Nacos注册中心 配置中心二合一替代 Eureka ConfigSentinel流量控制、熔断降级替代 HystrixDubbo高性能 RPC 远程调用比 Feign 性能更强Seata分布式事务解决方案解决跨服务数据一致性Gateway微服务网关路由转发、鉴权、限流微服务核心能力速览服务注册发现Nacos所有服务启动时注册进去调用方动态查地址服务调用 负载均衡OpenFeign LoadBalancer微服务之间像调本地方法一样互相调用自动负载均衡配置中心Nacos Config配置集中管理动态刷新不用重启熔断降级Sentinel防止某个服务故障引发连锁雪崩超时快速返回兜底结果网关Gateway统一入口路由转发、鉴权、限流、跨域链路追踪Sleuth SkyWalking追踪整条请求链路定位慢请求和异常总结JavaEE 这条线从 Web 基础 → 数据库 → JDBC → 反射注解 → SSM → SpringBoot → 微服务是层层递进的。面试重点抓 MyBatis 缓存、Spring IOC/AOP、SpringMVC 流程、Redis 数据结构和应用场景、微服务各组件作用这几块基本能覆盖大部分问题。