项目名称
山东大学RISC-V公共开放平台。
平台简介
学习平台背景
受互联网+概念的催化, 按照市场领域细分为:学前教育、K12教育、高等教育、留学教育、职业教育、语言教育、兴趣教育以及综合平台,其中,职业教育和语言教育的市场优势突出。 根据Analysys易观发布的数据显示,预计2019年中国互联网教育市场交易规模将达到3718亿元人民币,未来三年互联网教育市场规模保持高速增长。
目前为打破x86或ARM构建的民用生态堡垒,需要选择合适指令集开发,经比较RISC-V(读risk-five)指令集可能是最适合中国国情的,它的方针与我国秉持的开放共享、互利共赢的发展理念完美贴合。国外的巨头如谷歌、高通、三星等现在都已经加入RISC-V Foundation基金会并开始布局RISC-V处理器架构的开发了,国内公司跟进的却不多(目前已知的仅有中天微、华为、高云、乐鑫、华米、中科院计算所等),情况令人担忧。在如今国家倡导创新型经济的时代,国内公司应该抛弃短视与急功近利的被动跟随者模式,以积极的方式加入基金会并主动引领技术发展以为将来获得更多话语权
项目开发目的
受互联网+概念的催化,当今中国在线教育市场的发展可谓是百花齐放、如火如荼。本平台将基于在线学习的思想,提供RISC-V专业在线学习的开放平台和资源整合一站式服务。
开发团队介绍
本平台将由李卓航,李明浩,宋欣鹏,杨传祥,李牧霖和王永帅等项目成员进行开发,目的为山东大学开发出面向本科生的RISC-V自主学习平台,为学生提供RISC-V国内外资源搜集整理,相关新闻,知识图谱和热力图,并支持学生在线运行RISC-V代码并及时输出结果和详细运行细节。
核心功能
模块 | 功能描述 |
---|---|
RISC-V资源知识库 | 整理国内外主要的RISC-V开源资源,包括源代码、工具软件等,形成国内首个RISC-V知识库 |
RISC-V在线模拟器 | 基于QEMU设计和实现RISC-V的模拟器,支持RISC-V程序的在线编译,在线模拟运行 |
RISC-V代码特点分析 | 利用机器学习算法对RISC代码进行智能分析 |
业务描述
工作情况
个人分工
- 平台后端开发
- 数据库表设计
- 前端界面开发(一小部分)
三月工作内容
- 实现文章数据接口
- 实现知识图谱后端数据返回
- 前后端交互接口说明、记录
- 设计后端方法测试注解用于测试运行效果
- 完善部分数据库设计
- 学一下Postman的使用
代码相关
相关实体类设计
统一接口返回Result:
用于前后端的数据统一
/**
* @Description: 统一结果返回
* @Author: lmh
* @Date: 2022/3/6 21:35
*/
@Data
@AllArgsConstructor
public class Result {
private boolean success;
private Integer code;
private String msg;
private Object data;
public static Result success(Object data) {
return new Result(true,200,"success",data);
}
public static Result fail(Integer code, String msg) {
return new Result(false,code,msg,null);
}
public static Result failupload(Integer code,String msg,Object data){return new Result(false,code,msg,data);}
}
文章实体类BlogVo(由于不需要标签,所以后续不再使用):
@Data
public class BlogVo {
/**
* @Description: 作为展示文章列表的一个小标签
* @Author: lmh
* @Date: 2022/3/6 22:30
*/
private Long id;
private String title;
private String author;
private Date createTime;
private String introduction;
private int views;
private String cover;
private int collect;
//标签列表
private List<TagVo> tags;
//文章类型列表
private List<TypeVo> types;
}
知识图谱实体类RoleVo:
/**
* @Description: (起点Entity,终点Entity,关系)
* @Author: lmh
* @Date: 2022/3/25 14:35
*/
@Data
public class RoleVo {
private String source;
private String target;
private RelationVo relation;
}
分页查询实体类:
@Data
@AllArgsConstructor
public class PageParams {
/**
* @Description: 数据暂定
* @Author: lmh
* @Date: 2022/3/6 22:22
*/
private int pageNum;
private int pageSize;
public PageParams(int pageNum){
this.pageNum = pageNum;
this.pageSize = 20;
}
public PageParams(){
this.pageSize = 20;
this.pageNum = 1;
}
}
部分数据返回逻辑示例
以返回博客内容为例:
Controller层:
/**
* @Description: 查询所有的blog,首页展示文章列表,展示除正文以外的内容(作者、标签、等)
* @Author: lmh
* @Date: 2022/3/6 21:34
*/
@PostMapping("blogslist")
public Result blogs(PageParams pageParams){
List<BlogVo> blogs = iBlogService.listBlogsPage(pageParams);
return Result.success(blogs);
}
Service层;
@Override
public List<BlogVo> listBlogsPage(PageParams pageParams) {
QueryWrapper<Blog> queryWrapper = new QueryWrapper<>();
Page<Blog> page = new Page<>(pageParams.getPageNum(),pageParams.getPageSize());
Page<Blog> blogPage = blogMapper.selectPage(page, queryWrapper);
//填充内容
List<BlogVo> blogVoList = copyList(blogPage.getRecords());
return blogVoList;
}
private List<BlogVo> copyList(List<Blog> records) {
List<BlogVo> blogVoList = new ArrayList<>();
for (Blog blog : records) {
//根据需求判断是否带标签、类型等数据
BlogVo blogVo = copy(blog,true,true);
blogVoList.add(blogVo);
}
return blogVoList;
}
前后端接口文档
用于前后端的接口对接,便于交流:
第一次总结
- 和后端队友完成了一部分的基础后端搭建
- 部分简单的业务逻辑已经写好了:分页返回Blog、知识图的后台接口等
- 撰写了前后端接口说明