软件工程与计算机科学中多个核心知识领域,包括**面向对象技术、网络与信息安全、程序设计语言原理**三大板块
软件工程与计算机科学中多个核心知识领域,包括面向对象技术、网络与信息安全、程序设计语言原理三大板块。以下是对各模块的简明梳理与关键要点提炼,便于系统化复习或教学参考:
🔹【面向对象技术】
- 封装:隐藏内部实现细节,通过访问控制(
private/protected/public)暴露有限接口;提升安全性与可维护性。 - 继承:子类复用父类属性与方法,支持代码重用和层次建模;注意避免过度继承导致的紧耦合。
- 多态:同一接口不同实现(编译时多态:重载;运行时多态:重写 + 动态绑定),依赖于虚函数表(C++)或JVM方法表(Java)。
- 类 vs 对象:类是抽象模板(静态蓝图),对象是类的实例(动态实体,有状态与行为)。
- 抽象类 vs 接口:
- 抽象类可含构造器、字段、部分实现,支持单继承;
- 接口仅声明(Java 8+ 可含
default/static方法),支持多实现,强调“能做什么”。
- UML类图关系(由强到弱):
- 组合(实心菱形+实线):整体与部分同生共死(如
Car与Engine); - 聚合(空心菱形+实线):部分可独立存在(如
Department与Employee); - 关联(实线,可标角色/多重性):一般结构关系(如
Teacher与Course); - 依赖(虚线+箭头):临时使用(如方法参数、局部变量);
- 泛化(空心三角+实线):继承关系;
- 实现(空心三角+虚线):类实现接口。
- 组合(实心菱形+实线):整体与部分同生共死(如
- SOLID 原则:
- SRP(单一职责):一个类只负责一个功能域;
- OCP(开闭原则):对扩展开放,对修改关闭(常靠抽象/策略/模板实现);
- LSP(里氏替换):子类必须能完全替代父类(违反常因重写破坏契约);
- ISP(接口隔离):客户端不应依赖它不需要的接口(避免“胖接口”);
- DIP(依赖倒置):依赖抽象(接口/抽象类),而非具体实现。
- GoF 23种设计模式(重点9种):
- 创建型:单例(线程安全双重检查+volatile)、工厂方法/抽象工厂(解耦对象创建);
- 行为型:观察者(松耦合事件通知)、策略(算法族可互换)、模板方法(骨架算法+钩子)、责任链(请求逐级处理)、命令(请求封装为对象)、状态(对象行为随状态改变);
- 结构型:装饰器(动态添加职责,符合开闭)、代理(控制访问,如远程/虚拟/保护代理)、适配器(兼容不兼容接口)。
- MVC:分离关注点——Model(数据+业务逻辑)、View(展示)、Controller(协调输入/更新);现代演进为 MVP/MVVM。
- AOP(面向切面编程):将横切关注点(日志、事务、权限)模块化为切面(Aspect),通过织入(Weaving)在连接点(Join Point)插入增强(Advice),降低耦合(Spring AOP / AspectJ)。
- 反射机制(Java/C#):运行时获取类信息、动态调用方法/构造器、操作字段(
Class.forName(),Type.GetMethod());性能开销大,需谨慎使用。 - 序列化与反序列化:对象 ↔ 字节流转换(Java
Serializable/ JSON/XML;C#DataContractSerializer/System.Text.Json);注意安全风险(反序列化漏洞如 Java Commons Collections)。
🔹【网络与信息安全】
- OSI七层(自下而上):物理→数据链路→网络→传输→会话→表示→应用;
- TCP/IP四层:网络接口→网际(IP)→传输(TCP/UDP)→应用(HTTP/DNS/FTP);
- TCP三次握手:SYN → SYN-ACK → ACK(同步序号,建立可靠连接);
- TCP四次挥手:FIN → ACK → FIN → ACK(双方独立关闭,确保数据发送完毕);
- HTTP/HTTPS:HTTP 明文无状态;HTTPS = HTTP + SSL/TLS 加密(握手含密钥交换、证书验证、对称加密通信);
- DNS解析:浏览器缓存 → 系统缓存 → 路由器缓存 → ISP DNS → 根服务器 → 顶级域 → 权威DNS(递归+迭代结合);
- 子网划分 & CIDR:用子网掩码(如
/24)划分网络位/主机位;CIDR 消除传统A/B/C类限制; - 防火墙类型:
- 包过滤(基于IP/端口);
- 应用网关(代理服务,深度检测);
- 状态检测(跟踪连接状态,更安全高效);
- 加密算法:
- 对称:AES(主流,128/256位)、DES(已淘汰);
- 非对称:RSA(大数分解)、ECC(椭圆曲线,同等安全下密钥更短);
- 哈希:SHA-256(防篡改,不可逆);
- 数字签名 & 证书:私钥签名 → 公钥验签;X.509 证书含公钥+身份+CA签名;CA(证书颁发机构)作为可信第三方;
- 安全协议:
- TLS(Web加密)、IPSec(网络层VPN)、SSH(远程安全登录)。
🔹【程序设计语言】
- 编译过程:源码 → 词法分析(Token流)→ 语法分析(AST)→ 语义分析(类型检查等)→ 中间代码(三地址码)→ 优化 → 目标代码(汇编/机器码);
- 文法与正则表达式:正则描述词法规则(如标识符
[a-zA-Z_][a-zA-Z0-9_]*);上下文无关文法(CFG)描述语法结构; - 有限自动机:NFA(非确定性,ε转移)→ DFA(确定性,最小化后用于词法分析器生成);
- 递归下降分析:手工编写的自顶向下语法分析器,对应LL(1)文法;
- 静态绑定 vs 动态绑定:编译期确定(重载、final/static/private方法)vs 运行期确定(虚函数/重写方法);
- 垃圾回收(GC):
- 引用计数(Python,循环引用问题);
- 标记-清除(Java早期,碎片化);
- 分代收集(HotSpot:Young/Old/Metaspace,Minor GC / Full GC);
- 内存布局:
- 栈(局部变量、函数调用帧,自动管理);
- 堆(动态分配对象,GC管理);
- 全局/静态区(全局变量、静态变量);
- 常量区(字符串字面量、final常量);
- 异常处理:
try-catch-finally保证资源清理(Java 7+try-with-resources更优);区分 checked(编译强制处理)与 unchecked(RuntimeException)异常; - 函数式编程:纯函数(无副作用、相同输入恒得相同输出)、不可变数据(如
String,ImmutableList)、高阶函数(接受/返回函数,如map/filter/reduce); - 泛型编程:
- Java:类型擦除(运行时无泛型信息,桥接方法解决多态);
- C++:模板实例化(编译期生成多份代码,支持特化与元编程)。
以上内容既可作为高级工程师面试速查清单,也适合作为高校《软件工程》《编译原理》《网络安全》课程的知识地图。如需任一子主题的代码示例、UML图示、协议流程图、GC算法动图详解或真题解析(如LeetCode设计题/系统设计题),欢迎随时指定,我可立即展开。
