小项目
晶凌玄夜
这个作者很懒,什么都没留下…
展开
-
在线oj之工具模块
工具模块用于提供一些整个项目需要使用的接口里面用到了boost库,需要自己安装,boost库介绍里面用到了url解码,我们采用了网上一套通用的代码,简单修改下就能使用,ulrencode链接#pragma once#include "oj_log.hpp"#include <boost/algorithm/string.hpp>#include <fstream&g...原创 2020-04-29 17:58:48 · 255 阅读 · 0 评论 -
在线oj之编译运行模块
编译运行模块主要负责用户代码的编译和运行,在此过程中我们会定义五个文件,他们分别是:源代码、程序、编译错误文件、运行错误文件、标准输出在编译和运行方法中,我们会进行程序替换,并使用重定向分别将编译结果和运行结果写入文件然后返回给前台。最后删除临时文件。我们还运用了json数据格式,需要安装一个文件yum install jsoncpp-devel简单介绍一下json数据格式:具体参考博...原创 2020-04-29 17:58:34 · 483 阅读 · 1 评论 -
在线oj之页面渲染模块
页面渲染模块的作用是将我们从后台获取到的数据渲染到html页面上。为此,我们采用了geogle的开源html模板库ctemplate,具体介绍可以百度。我使用的是码云上大神编译好的(只支持centOS7),其他环境需要自己编译。centos7版本,可以直接用其他环境就需要自己在github上下载源码自己编译#pragma once#include "ctemplate/template...原创 2020-04-29 17:58:18 · 267 阅读 · 1 评论 -
在线oj之试题模块
试题模块用于保存试题信息(编号,题目,保存路径,难度),提供接口用于server端调用。保存题目的数据结构我们采用unordered_map,因为其底层采用hash结构,所以我们在查找题目的时候更快<k, v> 对应 <题目id, 整个题目信息(question类)>先介绍下一个具体的题目包含哪几个部分desc.txt:题目描述header.cpp:给出的头文件...原创 2020-04-29 17:58:00 · 268 阅读 · 0 评论 -
在线oj之server模块
oj_server.cpp模块是整个在线oj项目与外界沟通的桥梁,负责项目后台与外界的通信。在这个模块中使用了github上一个http开源库(上一篇博客我提到过),模板填充技术以及Json数据格式,里面有些可能看不懂,后面的博客我会详细介绍。Server:httplib中的一个Server类Get:Server中的Get请求方法Post:Server中的Post方法set_content...原创 2020-04-29 17:57:33 · 245 阅读 · 0 评论 -
在线oj之日志模块
日志模块用于打印日志信息#pragma once#include <string.h>#include <sys/time.h>#include <iostream>#include <cstdio>//当前实现的log服务也是在控制台进行输出//格式//[时间 日志等级 文件:行号] 具体的日志信息class LogTim...原创 2020-04-29 17:56:58 · 162 阅读 · 0 评论 -
在线oj项目框架和前期准备工作
整体框架1.目标:实现一个在线判题系统(类似于leetcode)2.前台工作流程:①请求题目列表 ②获取题目详细信息 ③作答 ④提交代码 ⑤获取结果3.后台工作流程:①启动服务 ②监听,等待客户端连接 ③返回题目列表 ④返回题目详细信息 ⑤编译和判题 ⑥返回结果4.服务端模块server模块:主要负责客户端和服务端的通信,提供http服务,串联试题模块和判题模块。试题模块...原创 2020-04-23 14:00:41 · 472 阅读 · 0 评论 -
直接采用huffman压缩思想的缺陷及改进
上一篇我们对自己实现的基于GZIP的压缩算法进行测试,对于有些文件压缩效率还是可观的,不过,直接采用huffman压缩思想却存在一定缺陷。缺陷:①需要创建huffman树,如果不同种类字节出现比较多的情况下,huffman树会很大。比如:待压缩文件中有250个不同字符种类(一个字节能表示最多256个不同的字节),该250个字节都在huffman树叶子节点的位置,那么将来会有(250 + 24...原创 2020-03-12 00:02:19 · 2837 阅读 · 0 评论 -
基于GZIP压缩算法的模拟实现
ZIP压缩的历史1977年,两位以色列人Jacob Ziv和Abraham Lempel,发表了一篇论文《A Universal Algorithm forSequential Data Compression》,一种通用的数据压缩算法,所谓通用压缩算法指的是这种压缩算法没有对数据的类型有什么限定,该算法奠基了今天大多数无损数据压缩的核心,为了纪念两位科学家,该算法被称为LZ77,过了一年他们...原创 2020-03-11 23:49:32 · 561 阅读 · 0 评论