Java实训阶段查漏补缺复习笔记2

第一部分: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包直接运行
相关推荐
Wang's Blog1 小时前
Java框架 SpringCloud 快速入门: Feign 的性能优化
java·spring cloud·性能优化
无忧.芙桃1 小时前
C++ 并查集详解:原理、实现与应用
c语言·c++·算法·leetcode
蛋蛋的就会顺顺的2 小时前
hot100——二叉树
java·数据结构·算法·leetcode·力扣
打工仔折腾 AI2 小时前
System Prompt 替代 Few-shot:用规则约束大模型输出的省钱实践
java·人工智能·python·spring·langchain·prompt·ai agent 实战
一号弯2 小时前
Hyperv的LINUX虚拟机扩容
linux·运维·服务器
CarIise2 小时前
Java实训阶段查漏补缺复习笔记1
java·开发语言·笔记
缘友一世2 小时前
银河护卫队在steam(linux Proton GE-Proton10-34)上启动无窗口问题修复
linux·ubuntu·steam·proton
wunaiqiezixin2 小时前
MIT 6.S081 util 实验篇(lab1):primes (moderate/hard)
linux·unix·os·xv6·mit6.s081
Code_Solitude2 小时前
c语言:二分法的完整补充
c语言·开发语言·算法