第一部分:JavaSE基础
1.1 数据类型
| 类型 | 说明 |
|---|---|
| 基本类型8种 | byte、short、int、long、float、double、char、boolean |
| 引用类型 | 类、接口、数组 |
- 自动转换:小到大
- 强制转换:大到小,可能丢精度
Integer缓存-128~127,该区间==可以,超过用equals
1.2 IDEA基础
环境变量 :JAVA_HOME、Path,java -version能跑就行
常用快捷键:
| 快捷键 | 功能 |
|---|---|
psvm / sout / fori / iter |
快速生成代码 |
Alt+Insert |
生成构造、get/set |
Ctrl+Alt+L |
格式化 |
Ctrl+D |
复制行 |
Ctrl+Y |
删除行 |
Alt+Enter |
提示 |
Debug :F7步入、F8步过、F9恢复、Shift+F8跳出
1.3 语法基础
- 标识符 :字母、数字、下划线、
$,不能数字开头 - 进制 :
0b二进制、0八进制、0x十六进制 - 运算符 :算术、赋值、比较、逻辑、三元、位运算(
>>带符号、>>>无符号) - 流程控制:if-else,switch注意case穿透,循环while/do-while/for
- 方法:static类级别,final不能重写,访问控制private/public/protected/default
- 数组:一维二维,注意越界和空指针
1.4 面向对象
- 封装、继承、多态
- 内部类、匿名内部类
- 抽象类
abstract、接口interface - 向上转型自动,向下转型强转,先
instanceof - Object:equals、hashCode、toString、getClass、wait、notify
1.5 基础工具API
| 类别 | 内容 |
|---|---|
| 包装类 | 基本类型的对象形式 |
| String | 不可变,常量池,拼接用StringBuilder |
| 日期 | Date、Calendar、SimpleDateFormat,JDK8后用LocalDateTime |
| 集合 | List(ArrayList/LinkedList)、Set(HashSet/TreeSet)、Map(HashMap/TreeMap) |
| File | 文件操作 |
| Random | 随机数,RandomAccessFile随机读写,seek指针 |
HashMap重点:put过程、扩容、线程不安全
1.6 IO流
| 流类型 | 说明 |
|---|---|
| 字节流 | InputStream/OutputStream |
| 字符流 | Reader/Writer |
| 缓冲流 | 提高效率 |
| 转换流 | 字节字符 |
| 对象流 | 序列化/反序列化 |
1.7 异常
- Throwable:Error和Exception
- 运行时异常 vs 编译时异常
- try-catch-finally,finally一定执行
1.8 多线程
- 创建方式:Thread、Runnable、Callable
- 生命周期
- 同步:synchronized、Lock
- 线程池
1.9 网络编程
- TCP:Socket/ServerSocket
- UDP:DatagramSocket/DatagramPacket
- 粘包拆包
第二部分:JavaEE全栈
2.1 前端基础
| 技术 | 要点 |
|---|---|
| HTML/CSS | 标签语义化,div/span区别,块级vs行内 |
| CSS选择器 | 类选择器、ID、伪类(hover) |
| 布局 | Flex布局必须熟(justify-content、align-items) |
| JavaScript | DOM操作:获取元素、修改内容、事件监听 |
| ES6 | let/const、箭头函数、Promise(异步回调地狱解法) |
| JSON | 前后端交互数据格式,parse/stringify转换 |
| jQuery | 选择器$()搞定一切 |
| AJAX封装 | $.get/$.post,比原生XMLHttpRequest好用 |
| 链式编程 | 一行代码改样式+加动画 |
2.2 AJAX与异步交互
原理:
- 异步刷新:不重新加载整个页面,局部更新数据
- XMLHttpRequest对象:核心
JSON交互:
- 后端返回JSON字符串→前端解析成JS对象
Content-Type: application/json别忘设
跨域问题:
- 同源策略:协议+域名+端口必须一致
- 解决:CORS(后端配
Access-Control-Allow-Origin)、JSONP(老技术)
2.3 Tomcat与服务器部署
Tomcat配置:
server.xml:改端口(8080容易冲突,改成80或8088)webapps目录:放war包或项目文件夹的地方
IDEA集成:
- Artifacts配置:打包方式(exploded vs archive)
- Deployment:部署路径
/还是/projectname
HTTP协议速记:
- GET vs POST:参数放URL还是Body,安全性,长度限制
- 状态码:200(OK)、302(重定向)、404(找不到)、500(服务器炸了)
2.4 JavaWeb核心(Servlet/JSP)
Servlet生命周期:
init() → service() → destroy()
- 单例模式!线程安全问题要注意
web.xml配置 vs@WebServlet注解(注解方便)
Request & Response:
- Request:
getParameter()、setAttribute()(转发用) - Response:
getWriter().write()(输出流)、sendRedirect()(重定向)
会话管理:
- Cookie:存在客户端,不安全,存个JSESSIONID就行
- Session:存在服务器,依赖Cookie,用户登录状态全靠它
- ServletContext:全局共享,整个应用就一个,别乱存大数据
2.5 数据库技术(MySQL+JDBC)
SQL语句复习:
- DDL:CREATE/ALTER/DROP(建表改表删表)
- DML:INSERT/UPDATE/DELETE(增删改数据)
- DQL:SELECT...WHERE...GROUP BY...HAVING...ORDER BY(查询最复杂,多练)
- 多表查询:内连接(INNER JOIN)、左外连接(LEFT JOIN,以左表为准)
事务控制:
- ACID特性:原子性、一致性、隔离性、持久性
- 隔离级别:读未提交→读已提交→可重复读(MySQL默认)→串行化
- 脏读、幻读概念要分清
JDBC编程:
- 步骤:加载驱动→获取连接→创建Statement→执行SQL→处理结果→释放资源
- PreparedStatement:预编译,防SQL注入!别用Statement拼接字符串
- 连接池:Druid/HikariCP,复用连接
2.6 XML与解析
用途:
- 配置文件:以前Spring/MyBatis全用xml,现在被注解替代了不少
- 数据传输:现在基本被JSON取代
解析方式:
- DOM:一次性加载到内存,树结构,适合小文件,增删改查方便
- SAX:逐行读取,事件驱动,适合大文件,只能读不能改
2.7 反射与注解(框架基石)
反射:
Class.forName():动态加载类getDeclaredMethod/Field:获取私有方法/属性,setAccessible(true)暴力破解- 框架底层全靠反射实例化对象(解耦)
注解:
- 元注解:
@Target、@Retention(生命周期) - 自定义注解:配合反射使用,解析器读取注解信息做逻辑
2.8 MyBatis框架
核心概念:
- ORM:对象关系映射,Java对象数据库记录
SqlSessionFactoryBuilder → SqlSessionFactory → SqlSession(线程不安全,用完就关)
Mapper代理开发:
- 接口名 = XML namespace,方法名 = id,参数类型 = parameterType
#{}是占位符(安全),${}是字符串拼接(有注入风险,排序时用)
动态SQL:
<if>条件判断,自动去掉多余的AND/OR<foreach>批量删除/插入神器(id in ...)
缓存:
- 一级缓存:SqlSession级别,默认开
- 二级缓存:Mapper级别,得手动配,分布式下容易脏数据,慎用
2.9 Spring框架
IOC(控制反转):
- Bean容器:ApplicationContext
- 注入方式:
@Autowired(按类型)、@Resource(按名称) - 作用域:singleton(默认单例)、prototype(多例)
AOP(面向切面):
- 解耦:把日志、事务、权限从业务代码里剥离出来
- 术语:切面、切入点(Pointcut)、通知(Before/After/Around)
- 动态代理:JDK代理(基于接口)vs CGLIB(基于子类继承)
事务管理:
@Transactional:加在Service层,声明式事务- 传播行为:REQUIRED(默认,有就加入没有就新建)、REQUIRES_NEW(挂起旧的开新的)
2.10 SpringMVC框架
流程:
DispatcherServlet(前端控制器)→ HandlerMapping → Controller → ViewResolver
注解开发:
@Controller/@RestController(直接返回JSON,不用视图解析器)@RequestMapping/@GetMapping/@PostMapping- 参数接收:简单类型直接接,POJO自动封装,
@RequestParam指定名字,@RequestBody接JSON
拦截器:
HandlerInterceptor:preHandle(登录校验)、postHandle、afterCompletion- 比Filter更细粒度,能访问Controller上下文
2.11 SpringBoot
核心优势:
- 约定大于配置:起步依赖(Starter),自动配置(AutoConfiguration)
- 内嵌Tomcat :打成jar包直接
java -jar运行,不用部署war包
配置文件:
application.yml/properties:端口、数据库连接、日志级别@Value("${key}"):读取配置值@ConfigurationProperties:批量映射配置到Bean
整合其他框架:
spring-boot-starter-web:Web开发全家桶spring-boot-starter-test:单元测试神器
2.12 未学部分速览
| 技术 | 说明 |
|---|---|
| MyBatisPlus | 内置通用CRUD,不用写简单SQL。条件构造器Wrapper能链式拼条件。代码生成器省得手写实体类。 |
| Redis | 内存数据库,主要做缓存。Key-Value结构,支持String/List/Hash/Set/ZSet。持久化机制(RDB/AOF)还没看。分布式锁好像也靠它。 |
| SpringCloud(Alibaba) | 微服务全家桶。Nacos(注册中心+配置中心)、Sentinel(限流熔断)、Gateway(网关)。目前只听过名词,完全没上手,感觉是后面大项目的重点。 |
附录:核心易错点速查表
| 类别 | 易错点 | 正确理解 |
|---|---|---|
| Integer缓存 | 所有值都用== | -128~127区间可用==,超过用equals |
| 数组传参 | 用sizeof算数组长度 | 退化成指针,sizeof变小 |
| String | 用+频繁拼接 |
用StringBuilder |
| HashMap | 以为线程安全 | 线程不安全,多线程用ConcurrentHashMap |
| finally | 以为可以不执行 | finally一定执行 |
| Servlet | 以为每次请求都新建 | 单例模式,注意线程安全 |
| Cookie vs Session | 混淆两者 | Cookie存客户端,Session存服务器 |
| Statement | 用Statement拼SQL | 用PreparedStatement防注入 |
#{} vs ${} |
混用 | #{}防注入,${}仅排序用 |
| AOP代理 | 混淆JDK和CGLIB | JDK基于接口,CGLIB基于子类继承 |
| SpringBoot | 以为要部署war包 | 内嵌Tomcat,打jar包直接运行 |