- 博客(50)
- 收藏
- 关注
原创 【文献翻译】Select-Storage: A New Oracle Design Pattern on Blockchain
选择-存储:一个新的区块链上的预言机设计模式
2022-05-18 17:04:10
3655
原创 【sduoj】记录访问日志
2021SC@SDUSC 在 sduoj 项目的开发中,日志是一个难以回避的存在。虽然就算没有日志的记录系统也能运行,但是当系统出现异常的时候,我们便可以通过查看日志来寻找异常出现的地点,以便于达到快读定位、快速解决异常的目的。我们需要对每个访问都进行记录,这时我们可以编写一个中间件,每个请求到来的时候,都会通过这个中间件。这样的话,我们便可比较容易的获取它的请求方法、响应码、方法调用开始时间、方法调用结束时间等信息。
2021-11-05 09:33:45
256
原创 【sduoj】导入 Excel
2021SC@SDUSC 学生管理是 sduoj 项目中不可或缺的一部分,系统中的许多功能都需要用户在完成学生认证后才能进行。学生认证就是建立虚拟账号与现实身份的一对一对应关系,创建账号的工作可以由学生自己完成,而现实身份的数据可能就需要教师或管理员来上传。为了尽可能简化管理员或教师的操作流程,在能够上传单个学生数据的同时,这些角色应该也能通过上传 Excel 文件的方式来实现快速批量上传。
2021-11-03 22:17:44
383
原创 【sduoj】RPC应用
2021SC@SDUSC 在 oj 项目中,服务端并不是一个不可分割的整体,而是可以根据职责划分为成多个子服务,比如能够处理前端请求的服务、能进行判题的服务等。那么这些服务之间要如何进行通信呢?这里我们选用 RPC。相比于 Restful,RPC 更加轻量级,也更加高效,适合系统内的服务通信。
2021-11-02 09:37:56
275
原创 【笔记】云原生
云原生是近年来一个很火的词,它并不是一个全新的概念,而是云计算发展的一个阶段,云计算是分布式计算的一种,指的是通过网络将巨大的数据计算处理程序分解成无数个小程序,然后通过多部服务器组成的系统进行处理和分析这些小程序得到的结果并返回给用户。云原生则是云计算的下半场,它是基于分布式部署和统一运营的分布式云,以容器、微服务、DevOps 等技术为基础建立的一套云技术产品体系。
2021-11-01 18:46:15
177
原创 【笔记】微服务架构
微服务架构设计早在 2014 年就被提出,其理念是将单体应用转化为多个可以独立开发、独立部署、独立运行和独立维护的服务或者应用的集合,从而满足业务快速变化以及多团队并行开发的需求。
2021-10-31 21:14:51
261
原创 【sduoj】用 validator 进行接口校验
2021SC@SDUSC 在 sduoj 项目中,服务端需要接收来自前端的请求,根据不同的请求来进行不同的业务处理。如果没有一个规范化的约束的话,服务端就有可能接收到不合理的请求。为了避免参数的错误导致业务逻辑的混乱,我们需要一种接口校验机制,来退回这些不合理的请求。
2021-10-26 15:29:24
363
原创 【sduoj】身份认证与获取令牌
2021SC@SDUSC 在上一篇文章中我们提到了如何生成和解析 JWT,接下来我们逐步分析如何去使用它。首先,在我们的系统中,对于每个用户来说,他们的账号和密码是不同的,我们要根据这些信息,来生成一个 Token 令牌,以后进行接口调用的时候,只需要出示令牌即可,不需要重新输入账号密码。
2021-10-25 21:04:57
312
原创 【sduoj】生成和解析 JWT
2021SC@SDUSC 在sduoj项目中,我们有四种角色:管理员、教师、学生、普通用户。如果仅仅是通过调用的接口路径的不同来区分这些角色的话,容易引发一些危险的行为。比如,当一个普通用户知道了该项目的管理员接口,那他的行为就有可能造成系统的混乱。因此,我们需要给项目加一点防御,对接口进行访问控制。
2021-10-20 11:01:44
809
原创 【sduoj】开启文件服务
2021SC@SDUSC引言上一期提到,我们可以向服务器发送文件,那我们怎么从服务器获取到这些文件呢?func NewRouter() *gin.Engine { r := gin.New() r.StaticFS("/static", http.Dir(global.AppSetting.UploadSavePath)) ...}源码分析r.StaticFS方法对relativePath禁用了:和*,使得该方法不能接收 URL 参数,然后它调用createStaticHandler获得
2021-10-17 16:36:31
276
原创 【sduoj】实现文件上传功能
2021SC@SDUSC 在sduoj项目中,文件上传是必不可少的,上传用户头像需要提交图片,上传测试点文件需要提交压缩文件,那么我们的服务器是如何接收来自用户的上传文件请求呢?
2021-10-16 22:38:23
231
原创 【sduoj】后端框架的引入
2021SC@SDUSC sduoj是一个web应用,为了提高该项目的开发效率,我们可以选用一个后端框架。这里选用的是gin框架,它具有高性能、小巧、易用的优点,并深受gopher的喜爱。
2021-10-11 21:09:14
397
原创 【sduoj】打造命令行应用
2021SC@SDUSC 作为一个oj系统,它往往不能只判断一种语言的提交结果,它甚至可能支持所有常见的语言类型。但是,不同的语言所需要的编译运行命令是不同的,如果把判断语言类型的工作交给判题机来完成的话,当新增一门新的支持语言或移除一门过时的语言时,我们可能需要修改判题机的源码,这无疑不利于系统的维护。 这时,我们需要一个能够连接判题机和不同语言的编译器的桥梁,来满足我们的需求。
2021-10-07 23:01:29
152
原创 【sduoj】让程序执行外部命令
2021SC@SDUSC 与选择题、填空题不同的是,编程题很难用比较字符串是否相同的方式来判断正误。对于某些稍微复杂点的题目,一千个人可能提交一千份不同的代码。评判某份代码是否是正确的,只要看它能不能跑出正确的结果就行了。 那么如何让计算机来执行判题操作呢?
2021-10-06 21:01:13
375
3
原创 【sduoj】深入理解缓冲区
2021SC@SDUSC 在一个oj系统中,最核心的内容是判题部分。无论是现实中的用户,还是一台判题机,要检测用户写出的代码是否是正确,只需要编译运行代码所在的源文件,然后比较程序输出结果与标准答案是否相同。 在不同的题目中,程序读取的值的数量不同,在某些比较复杂的题目中,程序读取的值可能多得难以想象。这时,我们需要一个存储这些数据的结构,这里选用的是缓冲区。
2021-10-04 22:11:46
298
1
原创 【sduoj】系统综述
2021SC@SDUSC 本项目名称为学生程序设计能力提升平台,是山东大学软件学院学生开发的一套程序在线评测系统。 开发该系统的目的是丰富教学活动。在一些编程相关的课程中,教师可以通过该系统为学生布置一系列编程题目,让整个教学活动不再局限于过去死板的教学方式,使得学生能在实践中加深对知识的理解。
2021-09-29 19:57:44
1151
原创 【Golang】使用Iris
官方文档:https://www.iris-go.com/docs安装Iris首先,创建一个项目文件夹——hello-server,在文件夹中输入以下命令。E:\hello-server>go mod init hello-serverE:\hello-server>go get github.com/kataras/iris/v12@master如果遇到网络错误,就输入以下命令。E:\hello-server>go env -w GOPROXY=https://gopr.
2021-07-28 11:25:14
764
原创 【Golang】函数
定义与调用我们以一个求两数之和的函数例子,比较一下Java和Go在函数定义方面的不同之处。Java代码:int add(int a, int b) { return a + b}Go代码:func add(a int, b int) int { return a + b}我们可以看到,Java把返回值的类型放在函数名前,而Go则将它放在了后面,除此之外,参数列表中形参名称和形参类型的前后顺序也不同。而在函数调用时,Go与Java的语法差不多。var sum = add(1, 2)
2021-07-27 22:32:44
130
原创 【Golang】变量
变量的声明在Java中我们声明变量的方式为:int a = 16;而在Go中,变量的数据类型在变量名后面。var a int = 16当然,变量定义和赋值可以放在不同的行。var a int // 相当于 var a int = 0a = 32在一行中,我们也可以声明多个变量。var a, b int = 3, 2如果不指定具体类型,系统会判断变量的值,从而给这个变量一个默认类型。var a = 3 // 相当于 var a int = 3var b = 0.1 // 相当于
2021-07-27 16:47:57
229
原创 【Golang】Hello World
第一个Go程序建一个main文件夹,在里面创建main.go文件,写入如下代码:package mainimport "fmt"func main() { fmt.Println("Hello World!")}然后我们需要在命令行窗口中对该文件进行编译(需要提前配置好环境变量)。E:\GoCode\main> go build .\main.go这时,在main目录下,系统会生成一个main.exe文件,然后我们运行它。E:\GoCode\main> .\main.
2021-07-26 17:29:12
332
原创 【笔记】面向对象技术
基本概念类:对事物进行分类,把具有相同属性和相同服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。对象:从问题域中客观存在的事物出发来构造软件系统,用对象作为对这些事物的抽象表示,并作为系统的基本构成单位。方法:xxxx消息:对象之间通过消息进行通讯,以实现对象之间的动态联系。继承:通过在不同程度上运用抽象的原则可以得到较一般的类和较特殊的类,特殊类继承一般类的属性与服务,从而简化系统的构造过程及其文档。...
2021-07-04 22:05:25
757
原创 【笔记】操作系统概念
概述导论操作系统是资源分配器,管理计算机系统中的资源。面对许多甚至冲突的资源请求,操作系统必须决定如何为各个程序和用户分配资源,以便计算机系统能有效而公平地运行。操作系统是控制程序,管理用户程序的执行以防止计算机资源的错误使用或使用不当。操作系统的基本目的是执行用户程序并能更好地解决用户问题。计算机系统由一个或多个CPU和若干设备控制器通过共同的总线相连。总线提供对共享内存的访问;每个设备控制器负责一种特定类型的设备;CPU与设备控制器可以并发工作,并竞争内存周期。计算机在启动时会运行
2021-06-30 21:57:58
420
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人