# Programming-essays **Repository Path**: yezhening/Programming-essays ## Basic Information - **Project Name**: Programming-essays - **Description**: 编程随笔 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-18 - **Last Updated**: 2025-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 编程随笔(Programming-essays) 记录日常编程的随笔 只为记录一路走来的脚印👣 有精炼的内容,但也是“垃圾桶” # 一、注意必看 - **代码请勿用作商业用途,代码来源未用作商业用途** - 代码仅供参考学习,部分不能直接运行,请自行搭建环境~ - - **课程的内容过多,整理时难免有疏漏,若有不合适内容(版权或敏感信息等)非常抱歉,提醒会删除!** - **课程的部分内容非个人所有版权,仅展示部分效果图片,不开放代码** - 课程年份是代码编写的真实年份,除修改少量内容(版权或敏感信息等)外均无改动,为个人学习编写并有大量详细注释! - 2019-2023 年份课程(除《高级算法设计与分析》课程)的代码,都不包含 AI 辅助! - 课程的部分 C 或 C++ 代码使用 Microsoft Visual Studio 推荐的“更安全函数”如“scanf_s()”,可能需要修改为“scanf()” - 课程的部分 Java 、PHP 或 HTML 代码可能需要使用“GB2312”字符编码 # 二、高质量内容 - 《Web 前端开发》课程/期末大作业/index.html、个人爱好页.html 和最爱课程页.html - 《程序设计基础》课程/课程设计/销售业绩管理系统.c - 《数据结构 A》课程/课程设计/美团餐馆预定管理信息系统.cpp - - 《操作系统 A》课程/实验/实验一/基于优先数的进程调度算法C代码.cpp - 《操作系统 A》课程/实验/实验三/分区管理C代码.cpp - 《操作系统 A》课程/实验/实验二/生产者与消费者(综合性实验)C代码.cpp - 《操作系统 A》课程/课程设计/实习代码:文件系统(C语言).cpp - - 《Java 程序设计》课程/在线授课/课程设计/MeituanMIS/:美团餐馆菜品预定系统 - - 《UNIX 系统编程》课程/作业/two.c:查看函数、(使用递归)函数激活空间(栈帧)的地址和大小和赋值语句的大小 - 《UNIX 系统编程》课程/作业/five.c:不读文件只用 printf() 实现输出自身程序内容 - 《UNIX 系统编程》课程/实验/实验一/:实现简单“U语言”解释器(C) - 《UNIX 系统编程》课程/实验/实验三/:破解/实现(简单的)命令解释程序(参考《UNIX 系统编程》的第 11 章 项目:破解命令解释程序)(C) - 《UNIX 系统编程》课程/实验/实验二/:进程令牌环的通信(分布式斐波那契数列计算和信息检索)(C) - 《UNIX 系统编程》课程/实验/实验四/:基于网络编程 C/S 模型、守护进程和多线程的套接字通信(C) - - 《网络工程中期专业实践》课程/:基于 Libpcap 的 WLAN 帧 HTTP 载荷分析系统的设计与实现(Django、MySQL、C、Echats、Bootstrap、JavaScript、CSS、HTML) - 《数据库系统》课程/基础实践/基础实践二/Ex3/:将关系型数据库向面向对象程序转换并使用 DAO 技术构建朴素数据库持久层(Python) - 《数据库系统》课程/课程设计/过程.png(Django、MySQL、Bootstrap、JavaScript、CSS、HTML) - 《传输网络》课程/实验一/a.c:基带信道加解扰编程 - - 《算法基础》课程/实验/实验一/:实现通用图灵机(C) - 《算法基础》课程/实验/实验三/:实现自适应统计编解码(C++) - 《算法基础》课程/实验/实验二/:实现哈夫曼编解码(C) - 《算法基础》课程/课程设计/:网络编程 C/S 模型数据传输压缩算法的性能分析(实现增量编解码)(C) - - 《网络管理》课程/作业/作业三/:网络编程 C/S 模型获取服务端信息并模拟 TLV 编解码(C) - 《网络管理》课程/作业/作业九/:基于 SNMP 获取/监控服务端指标、存储并显示(Memcached、PHP) - 《网络管理》课程/作业/作业五/:网络编程 C/S 模型获取服务端信息并模拟 TLV 编解码改进二(C) - 《网络管理》课程/作业/作业六/:基于 SNMP 获取/监控服务端指标、显示并存储(MySQL、PHP) - 《网络管理》课程/作业/作业四/:网络编程 C/S 模型获取服务端信息并模拟 TLV 编解码改进一(C) - 《网络管理》课程/实验/实验一/:基于 SNMP 库轮询异步获取/监控服务端指标、在内外存存储并定时刷新页面显示(Memcached、MySQL、PHP、C、ECharts) - - 《网络编程》课程/作业/ftp/:网络编程 C/S 模型模拟实现 FTP 通信(C) - 《网络编程》课程/作业/irc/:网络编程 C/S 模型基于 io_uring 模拟实现 IRC 通信(C) - 《网络编程》课程/期末大作业/*.png:网络编程 C/S模型基于 RPC 的键值存取系统(C) - - 《校级第八届中国国际“互联网+”大学生创新创业大赛》项目/*.png:《“i 语植”——基于 Nakatadia 模式的园艺疗法本土化康复训练计划》项目的前端展示网页(jQuery、Bootstrap、JavaScript、CSS、HTML) - - DES/:数据加密标准(DES)密码算法 - DH/:Diffie-Hellman密钥交换算法 - RSA/:RSA密码算法 - 《计算机网络安全》课程/实验实验一/:DES 密码算法的加解密(C++) - 《计算机网络安全》课程/实验实验三/:RSA 密码算法的加解密(C++) - 《计算机网络安全》课程/实验实验二/:DES 密码算法的加解密和支持部分工作模式(C++) - 《计算机网络安全》课程/实验实验四/:DH 密码算法的加解密(C++) - - 《网络工程综合专业实践》课程/*.png:野外数据监测系统(Django、MySQL、Bootstrap、JavaScript、CSS、HTML、Node.js) - - C++/simple_combination/:组合数简单生成工具 - C++/simple_digital/:进制数简单生成工具 - C++/simple_disjointset/:并查集简单创建工具 - C++/simple_permutation/:排列数简单生成工具 - C++/simple_polynomial/:多项式除法简单计算工具 - C++/其他/ - C++/可变参数/ - C++/模板特化/ - C++/类/ - C++/约束与概念/ - C++/线程/ - C++/迭代器/ - - Go/network_file_transfer/:网络文件传输 - Go/workflow5_interface/:工作流项目中,处理日志、数据库、JSON 和 HTTP 的服务端接口 - - Node.js/simple_Web_server/:简单Web服务端 - - Project/todolist/: todolist/ 前端:React(JavaScript;CSS;HTML) 后端:Gin;Gorm(Go) 数据库:MySQL(Docker;Linux) 涉及前后端分离、HTTP 接口交互、MVC 架构和跨域/CORS 等知识的简单综合项目 - - React/home_demo/:使用 React、React Router、Redux、Ant Design、Axios和 ECharts 的稍复杂首页例子 - - Rust/web_server/:基于线程池的 Web 服务器 - - Vue.js/mall_demo/:使用 Vue.js、Vue Router、Pinia 和 Element Plus 的复杂商城例子 - - 数据结构/sequence_list/:顺序表 - 数据结构/link_list/:单链表 - 数据结构/static_link_list/:静态链表 - 数据结构/stack/:栈 - 数据结构/queue/:队列 - 数据结构/string_pattern_matching/:串的模式匹配 - 数据结构/binary_tree/:二叉树 - 数据结构/graph/:图 - 数据结构/linear_search/:线性查找 - 数据结构/binary_sort_tree_search/:二叉排序树查找 - 数据结构/sort/:排序 - - 环境和网络编程/IPC/:进程间通信(IPC) - 环境和网络编程/load_ZF2/:加/卸载” Zend Framework 2 - 环境和网络编程/TCP_simple/:传输控制协议(TCP)简单版 - 环境和网络编程/multiprocess/:多进程版 - 环境和网络编程/IO_multiplexing/:IO复用版 - 环境和网络编程/daemon_process/:守护进程版 - 环境和网络编程/UDP_simple/:用户数据报协议(UDP)简单版 - - 设计模式/singleton/singleton_eager/:单例(饿汉式) - 设计模式/singleton/singleton_lazy/:单例(懒汉式) - 设计模式/simple_factory/:简单工厂 - 设计模式/actory_method/:工厂方法 - 设计模式/abstract_factory/:抽象工厂 - 设计模式/prototype/:原型 - 设计模式/builder/:建造者 - 设计模式/proxy/:代理 - 设计模式/adapter/adapter_class/:适配器(类适配器式) - 设计模式/adapter/adapter_object/:适配器(对象适配器式) - 设计模式/facade/:外观 - 设计模式/decorator/:装饰 - 设计模式/composite/:组合 - 设计模式/bridge/:桥接 - 设计模式/flyweight/:享元 - 设计模式/template_method/:模板方法 - 设计模式/strategy/:策略 - 设计模式/chain_of_responsibility/:职责链 - 设计模式/state/:状态 - 设计模式/command/:命令 - 设计模式/observer/:观察者 - 设计模式/memento/memento_unnested/:备忘录(基于非嵌套类/接口的实现) - 设计模式/memento/memento_nest/:备忘录(基于嵌套类的实现) - 设计模式/iterator/:迭代器 - 设计模式/interpreter/:解释器 - 设计模式/mediator/:中介者 - 设计模式/visitor/:访问者 # 三、主要内容 ## 《C++ 程序设计》课程/ 实验一/ - 图书类.cpp - 计算圆面积.cpp - 评分程序.cpp - 过道和栅栏的造价.cpp 实验七/ - Counting words.cpp:记录不重复单词的数量 - Point cloud.cpp:读取、处理并写入.csv文件的点集数据 - Reading papers.cpp:统计输入字符串中的单词数量和标点符号数量 实验三/ - Penson和Student类.cpp - TableTennisPlayer类.cpp - Vehicle类.cpp - 图书商品类.cpp - 求表面积和体积的多立体图形类.cpp 实验二/ - Person类.cpp - 学生类是选课类的友元类.cpp - 名单类.cpp - 旅馆类人数统计.cpp - 日期类.cpp 实验五/ - MyQueueClassTemplate(选做)未做完.cpp - SearchFunctionTemplate.cpp - SortFunctionTemplate.cpp - StackClassTemplate.cpp - SwapFunctionTemplate.cpp - TVector3ClassTemplate.cpp 实验八/ - AdvancedInheritance.cpp:使用继承和多态的动物类 - Composite.cpp:组合CPU类和磁盘类的计算机类 - Ellipse.cpp:椭圆类 - InputOutput.cpp:个人信息类 - Line.cpp:线条类 - 有理数类.cpp:重载运算符的有理数类 - 铁轨.cpp:模拟火车车厢进站和出站的过程并判断是否所有车厢都按照顺序进入车站 - 静态成员.cpp:使用静态成员的旅馆类 实验六/ - CardGame.cpp:操作queue容器 - Marble.cpp:对输入数据从小到大排序后查找 - SimpleList.cpp:操作list容器 - StringSort1.cpp:使用sort算法对一个字符串降序排序并输出 - StringSort2.cpp:使用sort算法对多个字符串排序并输出 实验四/ - bign(选做)未做完.cpp:操作大数字类 - CheckedPtr.cpp:操作数组首尾指针类 - Complex类.cpp:操作复数类 - Sales_data类.cpp:操作书籍销售数据类 - Singer类.cpp:歌手类 - String类.cpp:操作字符串类 ## 《Java 程序设计》课程/ 在线授课/实验一/ - TestStudent.java:学生类 在线授课/实验三/ - 学生链表排序时树映射的第一个泛型不是封装类/ - 学生链表排序时树映射的第一个泛型是封装类/ 在线授课/实验二/ - 学生类一/ - 学生类二/ 在线授课/实验五/ - 图形用户界面一/ - 图形用户界面二/ 在线授课/实验六/ - RWthread.java 在线授课/实验四/ - Test1.java 和 Test2.java:使用输入流和输出流 在线授课/课程设计/ - **MeituanMIS/:美团餐馆菜品预定系统** 慕课作业/:第一至八章作业 ## 《UNIX 系统编程》课程/ 作业/ - one.c:查看不同数据类型变量的首地址、数值和类型长度 - **two.c:查看函数、(使用递归)函数激活空间(栈帧)的地址和大小和赋值语句的大小** - three.c:查看程序的环境变量 - four.c:查看当前进程的 uid、gid、euid 和 egid - **five.c:不读文件只用 printf() 实现输出自身程序内容** - sixServer.c 和 sixClient.c:使用有名管道 FIFO 实现进程间通信 - seven.c:查看该会话进程的 pid、pgid 和 sid 实验/ - **实验一/:实现简单“U语言”解释器(C)** - **实验三/:破解/实现(简单的)命令解释程序(参考《UNIX 系统编程》的第 11 章 项目:破解命令解释程序)(C)** - **实验二/:进程令牌环的通信(分布式斐波那契数列计算和信息检索)(C)** - **实验四/:基于网络编程 C/S 模型、守护进程和多线程的套接字通信(C)** ## 《Web 系统与设计模式》课程/ - 实验二/:使用 JavaScript 和 Ajax 实现点击按钮获取随机数并局部刷新页面 ## 《Web 前端开发》课程/ 作业一/ - homework1.html:介绍C语言 实验一/ - cook.html:介绍咖啡器具 - menu.html:介绍咖啡类型 实验三/ - exp3.html:点击按钮求和 实验二/ - index1.html:介绍图书 实验四/ - exp4.png:介绍《炉石传说》 **期末大作业/** - 1.html:点击按钮切换背景颜色 - 2.html:点击按钮生成验证码 - 3.html:菜单和菜单项 - - index.html:介绍个人主页 - 个人爱好页.html:介绍个人爱好 - 最爱课程页.html:介绍个人最爱课程 ## 《传输网络》课程/实验一/ - **a.c:基带信道加解扰编程** ## 《操作系统 A》课程/ 实验/实验一/ - **基于优先数的进程调度算法C代码.cpp** 实验/实验三/ - **分区管理C代码.cpp** 实验/实验二/ - **生产者与消费者(综合性实验)C代码.cpp** 课程设计/ - **实习代码:文件系统(C语言).cpp** ## 《数据库系统》课程/ 基础实践/基础实践二/ - **Ex3/:将关系型数据库向面向对象程序转换并使用 DAO 技术构建朴素数据库持久层(Python)** 基础实践/基础实践二/Ex2/ - example1.py 和 example2.py:使用 pymssql 连接 SQL Server 的示例 - two1.py、two2.py 和 two3.py:使用 pymssql 连接 SQL Server 并操作 - three1.py、three2.py 和 three3.py:构建朴素的数据库连接池并操作 - four.py 和 four1.py:使用 DBUtils 构建数据库连接池并操作 基础实践/基础实践四/ - education/:使用 Django 编写 Web 系统 - mysite/:学习 Django 编写 Web 系统 课程设计/ - **过程.png(Django、MySQL、Bootstrap、JavaScript、CSS、HTML)** ## 《数据结构 A》课程/ OJ/OJ1链表/ - 双向循环链表中结点的交换.cpp - 基于链表的两个非递减有序序列的合并.cpp - 查找链表中倒数第k个结点.cpp - 查找链表中的最大值.cpp - 链表的逆转.cpp OJ/OJ2栈和队列 - Ackermann函数的递归求值.cpp - 双栈的基本操作.cpp - 基于循环链表的队列的基本操作.cpp - 基于栈的回文字符序列判断.cpp - 递归求解单链表中的平均值.cpp 作业/homework5/ - 基于二叉链表的二叉树叶子结点到根结点的路径的求解.cpp - 基于二叉链表的二叉树最大宽度的计算.cpp - 基于二叉链表的二叉树的双序遍历.cpp 作业/ - homework1.c:在已排序的两个列表中找出所有相同元素的算法 - homework2.cpp:创建并反转单链表 - homework3.1.cpp:将一个整数数组中的奇数和偶数分别移动到数组的两端但并不保持原序 - homework3.2.cpp:单链表的基本操作 - homework3.3.cpp:单链表的基本操作和切割操作 - homework4.cpp:二维数组的动态规划 实验/ - 实验一/:基于线性表的图书信息管理(C++) - 实验三/:基于哈夫曼树的数据压缩算法(C++) - 实验二/:基于栈的算术表达式求值算法(C++) - 实验四/:基于Dijsktra算法的最短路径求解(C++) 课程设计/ - **美团餐馆预定管理信息系统.cpp** ## 《校级第八届中国国际“互联网+”大学生创新创业大赛》项目/ - **./*.png:《“i 语植”——基于 Nakatadia 模式的园艺疗法本土化康复训练计划》项目的前端展示网页(Bootstrap、jQuery、JavaScript、CSS、HTML)** ## 《程序设计基础》课程/ 实验/ - 实验任务1.1.c:判断三个数能否构成一个等腰三角形 - 实验任务1.2.c:输出菱形状的“*”符号 - 实验任务2.c:统计每个整数的个数并从大到小排序(使用了桶排序) - 实验任务4.c:定义函数实现对两个字符串进行交叉连接 课程设计/ - **销售业绩管理系统.c** ## 《算法基础》课程/ 实验/ - **实验一/:实现通用图灵机(C)** - **实验三/:实现自适应统计编解码(C++)** - **实验二/:实现哈夫曼编解码(C)** 课程设计/ - **/:网络编程 C/S 模型数据传输压缩算法的性能分析(实现增量编解码)(C)** ## 《网络工程中期专业实践》课程/ - **/:基于 Libpcap 的 WLAN 帧 HTTP 载荷分析系统的设计与实现(Django、MySQL、C、Echats、Bootstrap、JavaScript、CSS、HTML)** ## 《网络工程综合专业实践》课程/ - **/*.png:野外数据监测系统(Django、MySQL、Bootstrap、JavaScript、CSS、HTML、Node.js)** ## 《网络服务》课程/ 作业/ - PHP收集数据存储文件/ - Telnet远程登陆显示命令/(PHP) - 作业主页/(HTML + Bootstrap2) - 模仿mysql编写rsync启动脚本/(Shell) - 爱好匹配人/:优化爱好和用户内容匹配(HTML + PHP) - 简单的PHP实现/:发送 HTTP 的 GET 和 POST 请求(HTML + PHP) - 脚本语言操作数据库(面向对象)/(HTML + PHP + MySQL) - 脚本语言操作数据库(面向过程)/(HTML + PHP + MySQL) ## 《网络管理》课程/ 作业/ - 作业七/:基于 SNMP 获取/监控服务端指标并使用单链表存储(PHP) - **作业三/:网络编程 C/S 模型获取服务端信息并模拟 TLV 编解码(C)** - **作业九/:基于 SNMP 获取/监控服务端指标、存储并显示(Memcached、PHP)** - 作业二/:将图片进行 Base64 编解码并显示(PHP) - **作业五/:网络编程 C/S 模型获取服务端信息并模拟 TLV 编解码改进二(C)** - 作业八/:操作 Memcached(C) - **作业六/:基于 SNMP 获取/监控服务端指标、显示并存储(MySQL、PHP)** - 作业十/:学习并修改 基于 SNMP TLV 编解码的获取/监控服务端指标程序(C) - **作业四/:网络编程 C/S 模型获取服务端信息并模拟 TLV 编解码改进一(C)** 实验/ - **实验一/:基于 SNMP 库轮询异步获取/监控服务端指标、在内外存存储并定时刷新页面显示(Memcached、MySQL、PHP、C、ECharts)** - 实验十/:网络拓扑结构图绘制(vis.js、JavaScript、HTML) ## 《网络编程》课程/ 作业/ - **ftp/:网络编程 C/S 模型模拟实现 FTP 通信(C)** - http/:网络编程 C/S 模型模拟实现 HTTP 通信(C) - **irc/:网络编程 C/S 模型基于 io_uring 模拟实现 IRC 通信(C)** 期末大作业/ - **/*.png:网络编程 C/S模型基于 RPC 的键值存取系统(C)** ## 《计算机网络安全》课程/ 作业一/ - caesarCode.cpp:凯撒密码算法的加解密 实验/ - **DES/:数据加密标准(DES)密码算法** **纯**C++语言 **基于对象**编程范式 使用高级特性 考虑性能优化 相对规范和整洁 提示易错点 **解析数据加密标准(DES)步骤** - **DH/:Diffie-Hellman密钥交换算法** **纯**C++语言 **基于对象**编程范式 使用高级特性 考虑性能优化 相对规范和整洁 提示易错点 **解析Diffie-Hellman步骤(网络上大部分实现代码的含义不明确,本代码相对明确)** - **RSA/:RSA密码算法** **纯**C++语言 **基于对象**编程范式 使用高级特性 考虑性能优化 相对规范和整洁 提示易错点 **解析RSA步骤(网络上大部分实现代码的含义不明确,本代码相对明确)** **未使用大(素)数,但提供大(素)数实现的讨论** - **实验一/:DES 密码算法的加解密(C++)** - **实验三/:RSA 密码算法的加解密(C++)** - **实验二/:DES 密码算法的加解密和支持部分工作模式(C++)** - **实验四/:DH 密码算法的加解密(C++)** ## 《高级数据库技术》课程/ 实验三/MySQL 并发测试/ - demand_two.go 实验三/往 MySQL 插入千万级数据/ - demand_one.go 实验二/ - yzndb_client_star.sql - yzndb_create_db_table.sql - yzndb_insert_data.sql demand_one.sql ## 《高级算法设计与分析》课程/ 作业/one/ - one.cpp:组合工具 - three.cpp:进制工具 - two.cpp:排列工具 - two2.cpp:排列工具(使用递归;待办) - two3.cpp:排列工具(使用 std 的生成排列函数;待办) 作业/three/ - three.cpp:最大子数组工具 作业/two/ - disjointset/:并查集(C++) - polynomial/:多项式除法(C++) 实验/ - busSimulator.cpp:模拟求取等待公交车的时间 ## 《高级软件测试》课程/实验二/ - 找零钱.go ## C++/ simple_combination/ - **/:组合数简单生成工具** 简单地生成组合数 **有详细的步骤解析** simple_digital/ - **/:进制数简单生成工具** 简单地生成进制数 **有详细的步骤解析** simple_disjointset/ - **/:并查集简单创建工具** 简单地创建并查集 **注释有详细的步骤解析** simple_permutation/ - **/:排列数简单生成工具** 简单地生成排列数 **有详细的步骤解析** simple_polynomial/ - **/:多项式除法简单计算工具** 简单地计算多项式除法 **注释有详细的步骤解析** 其他/ 可变参数/ 模板特化/ 类/ 约束与概念/ 线程/ 迭代器/ ## Go/ client_server_model/ - /:客户端/服务端(C/S)模型 实现服务端和客户端的简单通信:服务端接收,并原样发送所接收的数据给客户端 服务端使用多协程处理与多客户端的连接 客户端使用多协程处理终端用户输入和接收服务端数据 > 相比于C、C++和其他语言,使用Go实现网络编程的逻辑很简单 **有详细的步骤解析** network_file_transfer/ - **/:网络文件传输** 使用服务端/客户端(C/S)模型 实现发送方(客户端)和接收方(服务端)的简单网络文件传输:发送方发送文件名,接收方回复响应,发送方再发送文件内容,接收方接收文件内容并保存在当前目录 > 网络传输文件的形式和本地传输文件类似,**本质是写读文件** 接续上一份代码实例“客户端/服务端(C/S)模型”,本章将传输的用户输入数据改为传输文件 **有详细的步骤解析** > 注意:关于网络编程的代码,上一份代码实例“客户端/服务端(C/S)模型”有详细的注释,本代码不再过多注释,只注释新增的网络文件传输相关内容 producer_consumer_model/ - /:生产者消费者模型 使用go关键字开启多协程goroutine,而不是多进程和多线程,实现并发 使用管道channal,而不是锁,实现同步互斥和数据通信 > 可联想进程间通信(IPC)中的管道pipe()、共享内存等方式 使用select{}语句,实现监听输入/输出(I/O)操作 > 可联想网络编程中的监听文件描述符select()函数 > 相比于C、C++和其他语言,使用Go实现并发编程的逻辑很简单 **有详细的步骤解析** workflow5_interface/ - **/:工作流项目中,处理日志、数据库、JSON 和 HTTP 的服务端接口** 自带包/ - CGO.go - context.go - syncPool.go - unsafe.go - 其他包.go - 反射.go 语法/ - 其他语法.go - 基础语法.go - 并发语法.go - 高级语法.go ## Node.js/ simple_Web_server/ - **/:简单Web服务端** **详细解析创建http服务端的流程、URL的组成、请求消息的结构和响应消息的结构** 通过网络传输,浏览器客户端向该Web服务端发送“GET”请求,服务端依据URL响应本地相应的HTML、CSS和JavaScript文件,并在客户端渲染显示页面 ## Project/ todolist/: - /:待办清单 前端:React(JavaScript;CSS;HTML) 后端:Gin;Gorm(Go) 数据库:MySQL(Docker;Linux) 涉及前后端分离、HTTP 接口交互、MVC 架构和跨域/CORS 等知识的简单综合项目 ## React/ cdn_demo.html:使用 CDN 方式引入 React 的简单例子 home_demo/ - **/:使用 React、React Router、Redux、Ant Design、Axios和 ECharts 的稍复杂首页例子** cli_demo/ - /:使用脚手架方式引入 React 的语法例子 ## Rust/ advanced_grammar/ - /:高级语法的学习 basic_grammar/ - /:基础语法的学习 guessing_game/ - /:猜数游戏 minigrep/ - /:搜索文件内容 web_server/ - **/:基于线程池的 Web 服务器** ## Vue.js/ mall_demo/ - **/:使用 Vue.js、Vue Router、Pinia 和 Element Plus 的复杂商城例子** ## 数据结构/ (1)**顺序表:sequence_list** - C语言,C++语言 - 顺序表的实现模板 - **有详细的步骤解析和使用示例** (2)**单链表:link_list** - C语言,C++语言 - 单链表的实现模板 - **有详细的步骤解析和使用示例** (3)**静态链表:static_link_list** - C语言,C++语言 - 静态链表的实现模板 - **有详细的步骤解析和使用示例** (4)**栈:stack** - C语言,C++语言 - 顺序栈的实现模板 - 链栈的实现模板 - **有详细的步骤解析和使用示例** (5)**队列:queue** - C语言,C++语言 - 顺序循环队列的实现模板 - 链队列的实现模板 - **有详细的步骤解析和使用示例** (6)**串的模式匹配:string_pattern_matching** - C语言,C++语言 - 暴力/简单/朴素算法的实现模板 - KMP算法的实现模板 - KMP改进算法的实现模板 - **有详细的步骤解析和使用示例** (7)**二叉树:binary_tree** - C语言,C++语言 - 二叉树的实现模板 - 线索二叉树的实现模板 - **有详细的步骤解析和使用示例** (8)**图:graph** - C语言,C++语言 - 图邻接矩阵的实现模板 - 图邻接表的实现模板 - **有详细的步骤解析和使用示例** (9)**线性查找:linear_search** - C语言,C++语言 - 线性查找的实现模板 - **有详细的步骤解析和使用示例** (10)**二叉排序树查找:binary_sort_tree_search** - C语言,C++语言 - 二叉排序树查找的实现模板 - **有详细的步骤解析和使用示例** (11)**排序:sort** - C语言,C++语言 - 排序的实现模板 - **有详细的步骤解析和使用示例** ## 环境和网络编程/ 一、说明 - 均使用Linux操作系统环境(其他环境会额外说明) - 均使用网际协议版本4(IPv4) 二、环境编程内容(2例) (1)**进程间通信(IPC):IPC** 内容:对大部分总结的进程间通信机制提供简单实现:12种 - 头文件全局变量:glov_h - 源文件全局变量:glov_s - 文件,PV操作:file_pv - 管道:pipe - 命名管道:fifo - 信号:sig - XSI信号量:sem_XSI - POSIX信号量:sem_POSIX - 消息队列:mq - 共享内存:shm - 套接字:socket(使用代码仓库中,“传输控制协议(TCP)简单版:TCP_simple”) - 内存映射:mmap 说明 - 有详细步骤解析 - 只简单演示基础的操作,未考虑深层次的问题 - 对相关函数获取返回值进行错误处理,不相关函数不进行错误处理 持续更新 - 当前内容总结于代码仓库作者和《UNIX环境高级编程(第3版)》的一部分 - ~~在《UNIX网络编程(第3版)卷2:进程间通信》中,还有其他的进程间通信机制,在后面有时间阅读后,持续更新代码仓库和博客~~ (2)**“加/卸载” Zend Framework 2:load_ZF2** 现状:已存在旧生产项目,系统使用 Zend Framework 2(基于 PHP 的 Web MVC 框架,简称 ZF2) 目标:简化 ZF2 的配置 内容 1. 将 ZF2 的供应镜像可执行文件加载到内存,并**映射/解映射**到虚拟设备的一个分区 2. 将虚拟设备的文件系统**挂/卸载**到目录 实现 - 环境:**FreeBSD**(服务器) - 语言:C/C++(程序) - 核心:执行 Shell 命令(程序使用 UNIX -> FreeBSD 的系统调用) - 要求:可靠(尽可能地考虑并处理错误情况) 说明 - 注释有详细解析 文件结构 - 文件夹:load_ZF2 - 源文件:main.cpp - 可执行文件:main - 说明文件:readme.txt - 配置文件:setupvendor.conf - ZF2 的供应镜像文件:ZF2VendorImage.bin(**因为是生产项目,未将该文件开源在代码仓库**) 拓展 - 该份实例实际上是在 UNIX/FreeBSD/Linux 环境使用 C/C++ 程序执行 Shell 命令的**特例**版本 - 看懂代码后,稍加修改,该份实例可以成为**通用**版本 三、网络编程内容(5例) 1.迭代改进内容 (1)**传输控制协议(TCP)简单版:TCP_simple** - 使用传输控制协议(TCP) - 一个服务端连接一个客户端 - 一次自动通信 (2)**多进程版:multiprocess** - 使用传输控制协议(TCP) - 一个服务端可连接多个客户端——增加 - 多次手动通信——增加 (3)**IO复用版:IO_multiplexing** - 使用传输控制协议(TCP) - 服务端多进程,一个服务端可连接多个客户端 - 用户在客户端终端输入,可多次手动通信 - 服务端可获取客户端地址的逻辑;更新部分函数使用、错误处理、注释和Makefile文件;为保证代码简洁,部分输入输出和字符串处理函数未进行错误检测——增加 - 3个客户端代码实例分别使用IO复用的select、poll和epoll技术,同时监听用户输入和网络接收,可即时接收服务端进程终止和服务端主机关机消息——增加 - 客户端使用shutdown()而不是close()关闭连接,当客户端主动关闭写半部连接后,服务端仍能够接收而不是丢弃批量输入的缓冲区数据——增加 (4)**守护进程版:daemon_process** - 使用传输控制协议(TCP) - 检测recv()返回值,遇到信号或网络中断会重启 - 为保证代码简洁,部分输入输出和字符串处理函数未获取返回值进行错误检测 - 服务端作为守护进程启动,设置无缓冲IO,标准输入、输出和错误重定向并实时记录到日志文本文件。在main()开头注释不调用create_daemon(),可不作为守护进程启动——增加 - 服务端使用signal()注册SIGCHLD信号处理函数(signal()函数对信号处理一次后,信号恢复默认行为,需要在信号处理函数中重新注册)。信号处理函数中使用可重入函数和保存并恢复旧errno方案,避免重入错误。父进程接收SIGCHLD信号后调用循环非阻塞waitpid()可处理同时终止的多个子进程,避免子进程成为僵尸进程——增加 - 服务端检测accept()慢系统调用的返回值,遇到信号中断会重启。在三次握手后且accept()返回前的时序,收到客户端RST重新连接,依据POSIX标准重启——增加 - 服务端设置套接字选项:SO_KEEPLIVE。客户端不发送数据也可以检测到服务端主机崩溃、主机崩溃后重启或网络不可达——增加 - 服务端设置套接字选项:SO_REUSEADDR。服务端Ctrl+C或意外中止后,不会经过TIME_WAIT状态,bind()不会报错:Address already in use,可立即重启服务端。连接套接字子进程正常运行,监听套接字父进程可立即重启。允许多个IP地址绑定同一个端口——增加 - 服务端多进程,一个服务端可并发连接多个客户端 - 服务端使用getpeername()而不是传递客户端sockaddr_in{}参数获取客户端地址——修改 - 用户在客户端终端输入,可多次手动通信 - 3个客户端代码实例分别使用IO复用的select、poll和epoll技术,同时监听用户输入和网络接收,可即时检测到服务端进程终止和服务端主机关机 - Makefile文件增加注释和生成.o目标文件逻辑——增加 2.其他内容 (1)**用户数据报协议(UDP)简单版:UDP_simple** - 使用用户数据报协议(UDP) - 一个服务端连接一个客户端 - 一次自动通信 ## 设计模式/ > 24 + 3 = 27例 (1.1)**单例(饿汉式):singleton/singleton_eager** - **纯** C++ 语言 - 现代 C++ 标准 - 详细注释 (1.2)**单例(懒汉式):singleton/singleton_lazy** - **纯** C++ 语言 - 现代 C++ 标准 - 详细注释 (2)**简单工厂:simple_factory** - **纯** C++ 语言 - 面向对象编程范式 - 现代 C++ 标准 (3)**工厂方法:factory_method** - **纯** C++ 语言 - 面向对象编程范式 - 现代 C++ 标准 (4)**抽象工厂:abstract_factory** - **纯** C++ 语言 - 面向对象编程范式 - 现代 C++ 标准 (5)**原型:prototype** - **纯** C++ 语言 - 面向对象编程范式 - 现代 C++ 标准 (6)**建造者:builder** - **纯** C++ 语言 - 面向对象编程范式 - 现代 C++ 标准 (7)**代理:proxy** - **纯** C++ 语言 - 面向对象编程范式 (8.1)**适配器(类适配器式):adapter/adapter_class** - **纯** C++ 语言 - 面向对象编程范式 (8.2)**适配器(对象适配器式):adapter/adapter_object** - **纯** C++ 语言 - 面向对象编程范式 (9)**外观:facade** - **纯** C++ 语言 - 面向对象编程范式 (10)**装饰:decorator** - **纯** C++ 语言 - 面向对象编程范式 (11)**组合:composite** - **纯** C++ 语言 - 面向对象编程范式 (12)**桥接:bridge** - **纯** C++ 语言 - 面向对象编程范式 (13)**享元:flyweight** - **纯** C++ 语言 - 面向对象编程范式 (14)**模板方法:template_method** - **纯** C++ 语言 - 面向对象编程范式 (15)**策略:strategy** - **纯** C++ 语言 - 面向对象编程范式 (16)**职责链:chain_of_responsibility** - **纯** C++ 语言 - 面向对象编程范式 (17)**状态:state** - **纯** C++ 语言 - 面向对象编程范式 (18)**命令:command** - **纯** C++ 语言 - 面向对象编程范式 (19)**观察者:observer** - **纯** C++ 语言 - 面向对象编程范式 (20.1)**备忘录(基于非嵌套类/接口的实现):memento/memento_unnested** - **纯** C++ 语言 - 面向对象编程范式 (20.2)**备忘录(基于嵌套类的实现):memento/memento_nest** - **纯** C++ 语言 - 面向对象编程范式 (21)**迭代器:iterator** - **纯** C++ 语言 - 面向对象编程范式 (22)**解释器:interpreter** - **纯** C++ 语言 - 面向对象编程范式 (23)**中介者:mediator** - **纯** C++ 语言 - 面向对象编程范式 (24)**访问者:visitor** - **纯** C++ 语言 - 面向对象编程范式 # 四、课程年份 2019 - 《程序设计基础》 2020 - 《C++ 程序设计》 - 《Web 前端开发》 - 《数据结构 A》 2021 - 《操作系统 A》 - 《Java 程序设计》 - 《网络服务》 - 《UNIX 系统编程》 - 《网络工程中期专业实践》 - 《数据库系统》 - 《传输网络》 - 《Web 系统与设计模式》 - 《算法基础》 2022 - 《网络管理》 - 《网络编程》 - 《校级第八届中国国际“互联网+”大学生创新创业大赛》项目 - 《计算机网络安全》 - 《网络工程综合专业实践》 2023 - 《高级算法设计与分析》 2024 - 《高级数据库技术》 - 《高级软件测试》 # 五、未记录内容 - 更琐碎练习的代码 - 多人合作完成的代码 《Web 前端开发》课程的实验四 《数据库系统》课程的的课程设计(使用 Django、MySQL、Bootstrap、JavaScript、CSS、HTML) 《算法基础》课程的的课程设计的其他内容(使用 C) 《网络编程》课程的的期末大作业(使用 C) 《网络工程综合专业实践》课程(使用 Django、MySQL、Bootstrap、JavaScript、CSS、HTML、Node.js) - 大部分非个人完成的代码 《计算机组成原理 A》课程的课程设计(使用 Verilog) - 非个人所有版权的内容: 《数据结构 A》课程的课程设计的数据集 《Java 程序设计》课程的课程设计的数据集 《网络工程中期专业实践》课程的数据集 《网络管理》课程实验一的参考代码 《校级第八届中国国际“互联网+”大学生创新创业大赛》项目的代码 - 与编程相对无关的内容: 《计算机网络》课程的实验(使用 Wireshark、GNS3) 《数字通信》课程的实验(使用 MATLAB) 《传输网络》课程的大部分实验 《综合布线》课程的课程设计(使用 AutoCAD) 《交换与路由》课程的作业和实验(使用 Wireshark、Cisco Packet Tracer、GNS3) 《无线网络》课程(使用 MATLAB、NS2) 《计算机网络安全》课程的部分实验(使用 OpenSSL、Wireshark) - 相对繁杂的内容: 《网络服务》课程的部分作业和实验(Linux 运维相关) 《数据库系统》课程的实验和部分基础实践(SQL Server 相关) 《Web 系统与设计模式》课程的部分作业和大部分实验(使用 Zend Framework、PHP) 《网络管理》课程的部分作业和实验(Linux 运维相关) - 与编程无关的内容... # 六、部分参考资料 ## 《计算机网络安全》课程 - 《密码编码学与网络安全——原理与实践(第五版)》作者:William Stallings ## C++ - 学校《高级算法设计与分析》课程课件的算法思路 ## Node.js - [Node.js (nodejs.org)](https://nodejs.org/en) - [Node.js 中文网 (nodejs.cn)](https://nodejs.cn/) - [黑马程序员Node.js全套入门教程,nodejs新教程含es6模块化+npm+express+webpack+promise等_Nodejs实战案例详解_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1a34y167AZ/?spm_id_from=333.337.search-card.all.click&vd_source=9ac1c0a6d496218112b60d49bc768cd7) - [尚硅谷Node.js零基础视频教程,nodejs新手到高手_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1gM411W7ex/?spm_id_from=333.1369.0.0) ## Go - [20个小时快速入门go语言(中)_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1UW411x7Ve/?spm_id_from=333.337.search-card.all.click&vd_source=9ac1c0a6d496218112b60d49bc768cd7) - [黑马程序员20个小时快速入门go语言(下)_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV17W411W7hm/?spm_id_from=333.337.search-card.all.click) ## 数据结构 - 《2023版数据结构高分笔记》主编:率辉 - 《2023年计算机组成原理考研复习指导》组编:王道论坛 - 《大话数据结构》作者:程杰 ## 环境和网络编程 - 《UNIX环境高级编程(第3版)》作者:W.Richard Stevens,Stephen A.Rago - 《UNIX网络编程(第3版)》作者:W.Richard Stevens,Bill Fenner,Andrew M.Rudoff ## 设计模式 - [设计模式_夜悊的博客-CSDN博客](https://blog.csdn.net/m0_62083249/category_11757923.html?spm=1001.2014.3001.5482)