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

第一部分: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

对象 方法 说明
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网关。目前仅了解基本概念,尚未进行实际开发操作。
相关推荐
事圆则缓1 小时前
Kotlin 泛型方差实战:out、in、星投影与类型擦除
android·开发语言·kotlin
陈卫军老师1 小时前
陈卫军谈商业底线:营销是术,产品是道
经验分享·笔记·流量运营
Code_Solitude1 小时前
c语言:二分法的完整补充
c语言·开发语言·算法
智鸟科技GemeOpen开发者智能设备1 小时前
MQTT智能通断器GSCW1M2P · 开发者实战指南
开发语言·物联网·智能家居
智者知已应修善业1 小时前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构
vx-程序开发2 小时前
【计算机毕设】51300童装超市管理系统的设计与实现
java·vue.js·spring boot·源码·课程设计·毕设·大作业
青柠之夏cc2 小时前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
ym hyd 1112 小时前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
risc1234562 小时前
什么是码点?
java