☰
Java实训阶段查漏补缺复习笔记1
2026/10/7 8:32:44 网站建设 项目流程

第一部分: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算到\0
  • strncpy不一定补\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,子返回0
  • exec替换进程映像;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

对象方法说明
RequestgetParameter()取值
setAttribute()转发数据
ResponsegetWriter().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-webWeb开发全家桶,自动配好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用于异步解耦。流程为生产者发送至交换机,再路由至队列由消费者处理。适用于秒杀系统等流量削峰场景,需处理消息丢失和重复消费问题。
MyBatisPlusMyBatis增强工具,内置通用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网关。目前仅了解基本概念,尚未进行实际开发操作。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询