第一部分:C语言核心
1.1 指针
| 类型 | 写法 | 说明 |
|---|---|---|
| 指针数组 | int *p[10] |
数组里存10个int指针 |
| 数组指针 | int (*p)[10] |
指向含10个int的数组 |
| 函数指针 | int (*f)(int) |
指向参数和返回值为int的函数 |
const修饰区别:
const int *p:值不能改(指向常量的指针)int * const p:指针不能改(常量指针)
二级指针:要改指针本身时才用。
野指针 :定义就置NULL,free后也置NULL。
1.2 内存
| 区域 | 说明 |
|---|---|
| 堆 | malloc/calloc/realloc/free,必须配对 |
| 栈 | 局部变量、函数参数;别返回局部数组或局部变量地址 |
| 全局/静态 | static延长生命周期,限制文件作用域 |
常见坑:越界、泄漏、重复free、strcpy不检查长度。
1.3 字符串
char a[] = "abc"; // 可改(栈上数组)
char *p = "abc"; // 不能改(指向常量区)
sizeof算数组大小,strlen算到\0strncpy不一定补\0,用的时候手动补
1.4 结构体
- 内存对齐 :按最大成员对齐,
#pragma pack可改 typedef struct Node { ... } Node;- 指针用
->,变量用.
1.5 关键字
| 关键字 | 说明 |
|---|---|
static |
函数内静态变量只初始化一次;全局/函数限制本文件 |
extern |
声明外部变量/函数 |
volatile |
防编译器优化,硬件寄存器、中断、多线程共享会用到 |
register |
建议放寄存器,现在基本编译器自己决定 |
1.6 预处理与文件
#define SQ(x) ((x)*(x)) // 宏加括号,防副作用
#ifndef ... #define ... #endif // 头文件保护
fopen模式 :r/w/a/r+/w+/a+
1.7 易错点
i++和++i;短路求值;运算符优先级- 数组传参退化成指针,sizeof变小
- 函数返回局部指针 = 悬空
第二部分:数据结构
2.1 线性表
| 结构 | 随机访问 | 插删 |
|---|---|---|
| 顺序表 | O(1) | O(n) |
| 链表 | O(n) | O(1)(前提是找到前驱) |
- 单链表带头结点边界少
- 双链表删除要改前驱后继
- 循环链表尾next指头
2.2 栈和队列
| 结构 | 特点 | 应用 |
|---|---|---|
| 栈 | 后进先出 | 括号匹配、表达式求值、DFS、函数调用 |
| 队列 | 先进先出 | BFS、缓冲 |
循环队列:
front==rear空(rear+1)%N==front满- 也可以加size标记
2.3 树
| 树 | 关键点 |
|---|---|
| 遍历 | 前中后序、层次;前+中或后+中可还原 |
| BST | 左小右大;中序有序;删除分叶子、单子、双子 |
| AVL | 平衡因子,旋转LL/RR/LR/RL |
| 堆 | 完全二叉树,大顶/小顶;插入上浮,删除下沉 |
| 哈夫曼 | 带权路径最短 |
| 并查集 | 路径压缩 + 按秩合并 |
2.4 图
| 算法 | 说明 |
|---|---|
| 存储 | 邻接矩阵适合稠密,邻接表适合稀疏 |
| DFS | 栈/递归 |
| BFS | 队列 |
| Dijkstra | 非负权最短路 |
| Floyd | 多源最短路 |
| Bellman-Ford | 负权,可判负环 |
| Prim | 最小生成树,看点 |
| Kruskal | 最小生成树,看边+并查集 |
| 拓扑排序 | 入度0入队 |
| 关键路径 | AOE,找最早/最晚开始时间 |
2.5 查找与排序
查找:
- 二分:必须有序,注意mid和边界
- 哈希:除留余数、开放定址、链地址;装填因子
排序稳定性:
| 稳定 | 不稳定 |
|---|---|
| 冒泡、插入、归并、基数 | 选择、快排、希尔、堆 |
复杂度:
- 快排:分治,最坏O(n²),平均O(nlogn)
- 归并:稳定,需额外空间
- 堆排:O(nlogn),原地
第三部分:算法
| 算法 | 要点 |
|---|---|
| 复杂度 | 大O、均摊、空间换时间 |
| 递归 | 出口、重复计算、栈深度;分治:拆-治-合 |
| 贪心 | 局部最优推全局,要能证明;区间调度、霍夫曼 |
| DP | 状态、转移、初始化、遍历顺序;背包、LIS、LCS、编辑距离、区间DP、状压 |
| 回溯 | 路径、选择、撤销;N皇后、全排列、子集、组合 |
| 二分 | 找边界,左闭右开/左闭右闭统一 |
| 双指针 | 有序数组、链表环、滑动窗口 |
| 位运算 | 异或找单数、lowbit、状态压缩 |
刷题坑:边界、空输入、溢出、重复元素、递归爆栈。
第四部分:Linux
4.1 常用命令
ls/cd/pwd/cp/mv/rm
grep/find/awk/sed
tar -zxvf / -zcvf
ps/top/kill/kill -9
netstat/ss/lsof
df/du/free
4.2 权限
chmod 755/644;chown;umask
rwx对文件和目录含义不同。
4.3 进程线程
fork一次调用两次返回;父返回子pid,子返回0exec替换进程映像;wait/waitpid收僵尸- 孤儿进程被init收养;僵尸进程占PCB
pthread_create/join;mutex锁;条件变量
4.4 文件IO与网络
open/read/write/close;fd是小整数- 重定向
> >> 2>&1;管道| - 缓冲:全缓冲、行缓冲、无缓冲
网络:
- TCP三次握手、四次挥手;TIME_WAIT
- socket/bind/listen/accept/connect
- select/poll/epoll;epoll水平触发LT、边沿触发ET
- TCP粘包:定长、分隔符、长度字段
4.5 调试
- gdb:break/run/next/step/print/bt
- makefile:目标、依赖、命令;变量、模式规则
- valgrind:查内存泄露
第五部分:Java Web核心基础
5.1 Servlet生命周期
init() → service() → destroy()
- 单例模式,注意线程安全
web.xml配置 vs@WebServlet注解,注解更方便
5.2 Request & Response
| 对象 | 方法 | 说明 |
|---|---|---|
| Request | getParameter() |
取值 |
setAttribute() |
转发数据 | |
| Response | getWriter().write() |
输出流 |
sendRedirect() |
重定向 |
5.3 会话管理
| 技术 | 说明 |
|---|---|
| Cookie | 存客户端,不安全,一般只存JSESSIONID |
| Session | 存服务器,依赖Cookie,登录状态全靠它 |
| ServletContext | 全局共享,整个应用就一个,别存大数据 |
5.4 Filter & Listener
- Filter:过滤器,拦截请求做登录校验、统一编码
- Listener:监听器,监听对象创建销毁或属性变化
第六部分:IDEA与Maven
6.1 IDEA安装配置
- 安装路径严禁中文和空格
- JDK配置:
Project Structure → SDKs,选对版本 - Maven配置:
Settings → Build Tools → Maven,修改本地仓库路径(settings.xml)
6.2 常用快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl+Shift+F10 |
运行当前类 |
Alt+Enter |
万能修复键,自动导包、补全方法 |
Ctrl+Alt+L |
格式化代码 |
Shift+F6 |
重构改名,变量类名同步修改 |
6.3 调试技巧
| 快捷键 | 功能 |
|---|---|
F8 (StepOver) |
单步执行不进入方法 |
F7 (StepInto) |
进入方法内部查看逻辑 |
Alt+F8 |
计算表达式,实时查看变量值 |
6.4 Maven核心概念
| 概念 | 说明 |
|---|---|
| POM.xml | 项目对象模型,所有依赖在此配置 |
| 坐标 | groupId + artifactId + version,唯一标识jar包 |
| 仓库 | 本地仓库(.m2),远程仓库必须配阿里云镜像 |
依赖管理:
dependency:引入jar包scope:compile(默认)、test(junit专用)、provided(servlet api专用)- 依赖传递:A依赖B,B依赖C,则A自动拥有C,冲突时遵循就近原则
生命周期:
clean → compile → package → install
第七部分:Spring Boot
7.1 核心优势
- 约定大于配置,起步依赖Starter自动引入所需jar包
- 自动配置AutoConfiguration,省去大量xml配置
- 内嵌Tomcat ,打jar包直接
java -jar运行,不用部署war包
7.2 配置文件
# application.yml/properties
@Value("${key}"):读取单个配置值@ConfigurationProperties:批量映射配置到Bean对象
7.3 整合其他框架
| Starter | 说明 |
|---|---|
spring-boot-starter-web |
Web开发全家桶,自动配好SpringMVC+Tomcat |
spring-boot-starter-test |
单元测试神器,自带MockMvc |
7.4 注解开发
@RestController:直接返回JSON,省去视图解析器@GetMapping/@PostMapping:替代@RequestMapping指定请求方式- 参数接收 :简单类型直接接,POJO自动封装,
@RequestBody接JSON
第八部分:MyBatis
8.1 核心概念
ORM:对象关系映射,Java对象与数据库记录对应。
SqlSessionFactoryBuilder → SqlSessionFactory → SqlSession
SqlSession线程不安全,需及时关闭。
8.2 Mapper代理开发
- 接口名等于XML的
namespace - 方法名等于
id - 参数类型等于
parameterType #{}是占位符防注入,${}是字符串拼接有注入风险,仅排序时使用
8.3 动态SQL
<if>条件判断,自动去除多余AND/OR<foreach>批量删除插入神器,处理id in场景
8.4 缓存
| 级别 | 说明 |
|---|---|
| 一级缓存 | SqlSession级别,默认开启 |
| 二级缓存 | Mapper级别,需手动配置,分布式环境易脏数据慎用 |
第九部分:未学技术速览
| 技术 | 核心概念 |
|---|---|
| Nginx | 反向代理服务器,用于负载均衡和动静分离。配置文件nginx.conf结构复杂,upstream块用于配置集群。静态资源处理性能优于Tomcat,部署时通常置于前端。 |
| Redis | 内存数据库,主要用作缓存。采用Key-Value结构,支持String/List/Hash/Set/ZSet数据类型。持久化机制包含RDB和AOF,分布式锁功能也依赖此技术。 |
| Docker | 容器化技术,通过镜像生成容器。Dockerfile编写构建指令,docker-compose编排多容器服务。作为部署工具可免除环境配置步骤。 |
| RabbitMQ | 用于异步解耦。流程为生产者发送至交换机,再路由至队列由消费者处理。适用于秒杀系统等流量削峰场景,需处理消息丢失和重复消费问题。 |
| MyBatisPlus | MyBatis增强工具,内置通用CRUD接口免去简单SQL编写。条件构造器Wrapper支持链式拼接条件,代码生成器可自动创建实体类减少手写工作量。 |
| Git | 分布式版本控制系统。基本流程为git add、git commit、git push。分支管理涉及branch创建、merge合并及冲突解决,代码托管平台常用GitHub或Gitee。 |
| Spring | 核心是IOC控制反转和AOP面向切面。IOC通过Bean容器管理对象生命周期,AOP将日志、事务、权限从业务代码中剥离。动态代理分JDK代理(基于接口)和CGLIB(基于子类继承)。声明式事务用@Transactional注解,传播行为有REQUIRED和REQUIRES_NEW等。 |
| SpringCloud | 微服务架构全家桶。核心组件包括Nacos注册中心、Sentinel限流熔断、Gateway网关。目前仅了解基本概念,尚未进行实际开发操作。 |