文章

项目经历汇总。Projects I've made

THIS POST IS WORK-IN-PROGRESS

基础理论和算法

  • TCP 可靠传输协议实现,处理丢包、乱序、超时问题,用 C++。
  • 三维渲染管线实现,还原三维渲染过程,实现经典三维图形算法,如 Phong shading、SMAA 等,用 JavaScript。
  • 互斥锁的实现,实现四种经典算法,在浏览器 WebWorker 之间自行实现共享内存,用 Svelte。
  • 某算法比赛,实现了点云表面重建、多 Agent 遍历图等,用 C++。
  • 不围棋自动下棋程序,团队合作,负责文档和设计,用 C++。
  • 光线追踪渲染在一个周末,用 Go。
  • 某大学编译器课程,编写一个面向对象语言(COOL)的编译器,用 flex、bison 等工具,用 C++。

前端

  • 图书搜索、筛选、收藏功能演示,用 Svelte 图书搜索、筛选、收藏功能演示
  • 在线井字棋,设计了双人对战平台通信协议,用 React
  • FreeCodeCamp 前端开发证书要求的几个项目,着重前端业务逻辑和状态管理,用 Vanilla JS 和 Svelte
  • XML、XSL 编辑器,实用工具,网页编辑器,带实时渲染和本地保存,用 Vanilla JS
  • 公共留言板,数据库部署在 PocketHost,任何人可留言,管理员可验证身份, 用 Vanilla JS 后迁移至 Svelte。

Java

  • 聊天网站开发,用 Java EE、Spring Boot。
  • 直接使用 JDBC 驱动开发 CRUD 桌面应用,用 Swing
  • P2P 双人对战游戏桌面应用,用 Swing

团队协作

  • 基于 Git 的小型开发团队,撰写需求分析和架构设计等文档,测试驱动开发,模仿 Electron 架构开发一桌面 P2P 双人对战游戏

基本操作学习

  • 基于 libuv 服务器开发
  • 基于 Compose 的安卓开发流程

云服务和 CI/CD

  • 多个仓库都使用 GitHub Action 将站点自动部署到 GitHub Pages、腾讯云、Azure
  • 本博客在云端构建之后部署到 Azure
  • 用 PocketHost 部署 SQL 数据库,其他项目通过 RESTful API 使用
  • 熟悉 Linux 和 Bash 基本操作

笔者按:以下是旧的内容,仅作存档。

神机妙算算法竞赛 2021-07-31

为了锻炼自己解决陌生领域软件问题的能力,我参加了这一神机妙算算法竞赛。

竞赛主办方要我在 C++的运行环境下完成竞赛给出的三个题目。

这些题目的情景我很陌生,我尝试将题目抽象为学过的基本算法模型和基本的数据结构,在此基础上通过阅读相关的论文和查找并整合现有的函数库及工具包等尝试解决这些问题。

最终我剥离了一庞大代码库中的部分算法,用别的数据结构库中的代码补充其依赖以此解决了其中一个问题,另外两个问题则是根据论文的描述自己实现了算法。

社交平台系统模拟设计 2021-12-21

这是 C++程序设计课程的编程作业,为了锻炼自己设计和实现复杂系统的能力,我决定不仅要实现功能还要在前期仔细地设计,要实现自动化测试脚手架。

我被要求设计并模拟实现一个即时聊天软件,要具备一对一聊天、群聊、单平台多服务等功能。

我设计并实现了该平台的多个子系统,包括用户身份、聊天服务、数据存储、用户内容管理、用户交互等,给出了各子系统的功能要求和公共接口。后来就在此基础上进行了编码实现。在系统的用户交互界面子系统中,我还设计了基于文件流的自动测试脚手架。

从这个项目的编码过程中,我发现我的设计是远远不足够的,不够详细。并且我对软件开发工作流程也不掌握。常常一边编码一边修改设计、增加功能需求,导致工作越做越多。

番茄钟 2021-05-14

我刚开始学习前端开发,计划用 UML 课程中的概念和方法以及 Clean Architecture 来设计这一简单的应用。

这个应用的端到端测试已经给出,这是一个简单的单页应用,我计划使用 Svelte 框架进行开发。

我进行了简单的设计,规范了组件之间数据和事件的流向,给出了组件之间的公共接口。

这一项目顺利完成,我熟悉了 Svelte 框架的使用。

重构多人在线游戏演示程序 2021-06-12

为熟悉 Clean Architecture 设计原则,我尝试用此结构重构一多人在线游戏的演示程序。

我必须先读懂原程序的功能和结构,抽象出用例,再用目标结构的语义复现它们。

我设计并实现了领域模型类以及实现各用例的服务类,满足了预先的用例规约。

在此过程中我发现并修复一常见的导致无限循环的编码错误,即在一本应只读实体状态的函数内修改了这一实体状态,而这一实体状态的修改又会触发原先读这一实体状态的操作。

不围棋下棋程序 2022-04-18

组队开发不围棋游戏的自动下棋程序。

我的任务是在阅读文献和资料的基础上,综述计算机下棋程序的开发思路。并在开发的同时撰写设计报告。

我阅读了 MIT 的人工智能导论课程中有关计算机博弈的内容,并分析了 GitHub 上的常见计算机博弈算法的实现,最后我建议使用现有的 MCTS 框架来开发。

我在设计报告中给出了所开发的算法的描述和说明,并评估了这些策略在对局中表现。本组作品被教授评为优等。

互斥锁的软件实现的演示程序 2022-10-10

这是大学操作系统课程的编程作业,我选择这一题目因其简单明了。

我要开发一个具备图形化用户界面的互斥锁软件实现的演示程序,需给出各争抢进程的运行状态。

我采用 Svelte 开发。用 web worker 实现了程序的平行执行,为了避免在浏览器中使用SharedArrayBuffer,我借用一种分布式存储算法来实现了 web worker 之间的共享内存。

我进行了多次大规模重构,实现了具备较高可扩展性的软件系统。这一程序功能丰富,界面简单易用,被教授评为优等。

棋牌类多人在线对战手机游戏开发 2022-11-01

本项目是 H5 移动应用开发技术课程的作业,我们计划开发一个双人联机实时对战的棋牌类手机游戏。

我在此项目中负责系统设计和主要编码工作。

我决定用开发面向移动用户的 web 应用,给出了前端组件的功能设计和整体结构设计,并给出了后端 API 接口定义。

经过漫长的开发阶段,我们小组很多成员对我们的最终作品不太满意。我也认为这一项目非常失败。

本文由作者按照 CC BY 4.0 进行授权