程序设计 | 开发项目 | 专业实践 | 数据科学
Github 地址 ifrozenwhale
程序设计
共享网络画板
一个网络画板,支持本地或者联机同步绘图,多种图形(任意曲线、圆点、直线、矩形、三角形),支持套索工具,样式填充、修改,形状调整、移动,支持 undo 与 redo,支持保存和导出图片等。
文件管理器
使用 Java 实现,支持文件树和文件列表,支持文件夹创建、删除、复制、粘贴、加密解密、压缩解压。
经典小游戏
扫雷
贪吃蛇
五子棋
计算器
ATM 模拟
初学面向对象时,使用 C++ 完成的,基于命令行的ATM模拟程序的设计。
实现了分类账户(存款、取款),转账,交易记录,限额,未读消息等功能,实现了接口分离。
基于 CAS 的单点登录系统
基于 CAS (统一认证服务)流程,设计了自己的单点登录、登出系统。
基于 servlet 的 MVC 框架实现
通过实现 IOC 容器,管理 Java Bean,使用 servlet 实现 GET/PUT 请求处理控制器,并提供 ModelView 模式或 Json 对象。
https://github.com/ifrozenwhale/myspringmvc
使用自己的 MVC 框架,编写应用程序。
返回 JSP 页面的示例:
@MyController
@MyRequestMapping("/app")
public class AppController {
// 自动依赖注入
@MyAutowired
private AppService appService;
@MyAutowired
private BookService bookService;
@MyRequestMapping(value = "/bookpage", method="POST") // POST 方法
@ResponseView
public MyModelView addBook(@MyRequestParam("id") String id, @MyRequestParam("title") String title, @MyRequestParam("author") String author){
MyModelView mv = new MyModelView();
// Model And View 模式
bookService.addBook(Integer.parseInt(id), title, author);
// Jsp view name
mv.setView("bookinfo");
mv.addModel("bookList", bookService.getAllBooks());
return mv;
}
@MyRequestMapping(value = "/bookpage", method = "GET") // GET 方法
@ResponseView
public MyModelView showBookPage(){
MyModelView modelView = new MyModelView();
List<Book> bookList = bookService.getAllBooks();
modelView.setView("bookinfo");
modelView.addModel("bookList", bookList);
return modelView;
}
}
提供 Restful API,返回 Json 对象的示例:
@MyController
@MyRequestMapping("/api")
public class RestController {
@MyAutowired
private BookService bookService;
@MyRequestMapping(value = "/book", method = "GET")
@ResponseBody
public Book getBook(@MyRequestParam("id") String sid){
int id = Integer.parseInt(sid);
return bookService.getBookById(id);
}
@MyRequestMapping(value = "/book", method = "POST")
@ResponseBody
public RestModel addBook(@MyRequestParam("id") String id, @MyRequestParam("title") String title, @MyRequestParam("author") String author){
bookService.addBook(Integer.parseInt(id), title, author);
return new RestModel(200, "ok", null);
}
}
科创与开发项目
基于数据挖掘的编程助手研究
基于开源项目搭建OJ系统,收集用户编程练习数据,二次开发,利用Java进行数据统计、用户行为分析,并使用微信小程序作为移动前端,进行数据可视化和互动,提供包括编程打卡、错题收集、习惯记录、任务计划等功能。
基于树莓派的生活垃圾智能分类系统
整个项目由机械结构、电控、识别和展示四个部分构成,自己主要负责识别和展示,以及和电控的通信。电控部分主要是基于arduino,识别和展示基于树莓派4。
使用 keras 做了InceptionV3/mobile_net 的迁移学习,冻结了全连接层之前的所有层,主要基于华为云垃圾分类大赛的数据集重新训练全连接层。事实上,因为比赛涉及的垃圾种类并不多,也比较正常,这样的训练效率、准确率都挺高的。
考虑到树莓派的性能以及比赛的需求,并没有采用对视频流实时进行识别,而是手动设置视频采样频率,定时拍照分析。
做了较多的交互式展示:
- 宣传视频播放和自动切换
- 视频照片采集可视化
- 垃圾分类结果显示
- 历史识别记录
- 垃圾桶满载显示
启动web并启动摄像头后,摄像头会实时进行照片采集,并请求后端的图像识别分类 API,得到分类结果,如果结果非空,表示有垃圾待分类。如果此时位于宣传片播放界面,则切换到垃圾分类界面;否则直接显示垃圾分类结果。
后端将web服务、分类算法、电控通信集成在了一起。
- 通过 socketio 和浏览器建立长连接,用于推送结束信号/满载信号;
- 提供垃圾分类 API,返回垃圾分类结果和当前垃圾数量
- 使用多线程,监听和 arduino 的串口 USB 通信
- 使用内存数据库 Redis,解决global 变量在多线程中的不一致问题。
基于百度API的人脸分析和轻社交
基于百度API的人脸检测与分析,并语音播报。支持图片上传/即时拍照人脸特征分析展示,分析报告分享、发现、点赞、评论,用户关注、收藏等, 历史记录查询和编辑, 登录/未登录身份权限控制等。
课程实践
组成原理/体系结构 | 5级流水线多周期 CPU 的实现
使用Verilog实现了一个拥有五级流水线的MIPS CPU,包含基本指令和异常处理在内的57条
指令。实现了写回策略,四路组相连、伪LRU替换策略的cache缓存。
计算机网络 | 网络(隧道)协议实现
在Linux上使用C语言在数据链路层上通信,实现Ethernet、IPv4和UDP协议以及应用层封装。包括各层数据的校验,IP 分片与重组,最后为两个用户聊天的形式。
编译原理 | 简单 C 语言子集的玩具编译器]
目标实现一个简单 C 语言子集的编译器,生成汇编指令并运行,目前到语义分析阶段。
已经实现的语法分析,支持全局变量声明定义,函数调用等常见的语法,语法分析基于 LL(1) 方案,自顶向下使用栈进行分析,生成一棵语法分析树。
完成了部分语义分析,定义了包括函数在内的 7 种常见的语义错误,以及表达式计算。
数字逻辑 | 实验和课程设计
大数据与机器学习
基于 Spark 的电影推荐和分析系统
- 收集 MovieLens 数据集,包含16万个电影,2400万条评分,67万条评价标签,将csv文件上传到完全分布式HDFS文件系统
- scala、spark 读取 HDFS 文件,整理导入 MongoDB 数据库
- MongoDB中加载数据,利用 sparkRdd 统计热门电影、高分电影,统计分年月、分类别的热门、高分电影数据
- 基于 ALS 协同过滤算法,得到用户电影推荐和相似电影推荐
- 通过 TF-IDF算法对标签的权重进行调,计算电影的内容特征向量,实现基于内容的电影推荐
- 使用 python、pymongo 和 matplotlib,读取 MongoDB 数据并进行可视化
- 使用 python 实现 SVD 奇异值分解进行电影推荐
- Python flask 构建后端数据服务,vue 构建前端页面,交互式展示数据。
- 使用 VUE 前端框架与 Flask 后端框架进行结果可视化平台搭建
机器学习与优化方法
- 二分类与多分类 Logistics 回归
- 离散和连续 决策树 |分类树与回归树
- 单纯形法(大 M 法,对偶单纯形)
- PHR 算法(PHR 算法、无约束混合优化问题的 dfp 算法,一维搜索优化问题的黄金分割法)
大数据处理实验
数学建模
网络建模 音乐影响网络
元胞自动机 | 计算机模拟 卢浮宫计算模拟
不等圆的不重叠随机排列
不等圆的packing问题,基于概率策略化的随机游走。在缝隙处可额外进行补充,使更加丰满。
自定义轮廓的随机纹路生成
体现了数学中的随机美。可以给出图形,在图形内基于 Voronoi 图生成随机纹路,可以进行颜色填充。