当前位置: 首页 > 编程日记 > 正文

Java项目:在线考试系统(java+springboot+vue+jsp+mysql+maven)

源码获取:博客首页 "资源" 里下载!

一、项目简述

本系统主要实现的功能有: 学生以及老师的注册登录,在线考试,错题查询,学生管理,问题管理,错题管理,错题查询,分数查询,试卷管 理,人工组卷。自动组卷,教师,班级,统计等等管理功能。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: VUE+Springboot+ SpringMVC + MyBatis + ThymeLeaf + JavaScript + JQuery + Ajax + maven等等

用户信息控制层:

@RestController
@Api(tags = "User APIs")
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/register")@ApiOperation("注册")ResultVO<User> register(@RequestBody RegisterDTO registerDTO) {ResultVO<User> resultVO;// 注册信息的完善,还有唯一性校验没(用户名、邮箱和手机号)已经在user表中通过unique来设置了User user = userService.register(registerDTO);if (user != null) {// 注册成功resultVO = new ResultVO<>(ResultEnum.REGISTER_SUCCESS.getCode(), ResultEnum.REGISTER_SUCCESS.getMessage(), user);} else {resultVO = new ResultVO<>(ResultEnum.REGISTER_FAILED.getCode(), ResultEnum.REGISTER_FAILED.getMessage(), null);}return resultVO;}@PostMapping("/login")@ApiOperation("根据用户名或邮箱登录,登录成功返回token")ResultVO<String> login(@RequestBody LoginQo loginQo) { // 这里不用手机号是因为手机号和用户名难以进行格式区分,而用户名和// 用户登录ResultVO<String> resultVO;String token = userService.login(loginQo);if (token != null) {// 登录成功resultVO = new ResultVO<>(ResultEnum.LOGIN_SUCCESS.getCode(), ResultEnum.LOGIN_SUCCESS.getMessage(), token);} else {// 登录失败resultVO = new ResultVO<>(ResultEnum.LOGIN_FAILED.getCode(), ResultEnum.LOGIN_FAILED.getMessage(), null);}return resultVO;}@GetMapping("/user-info")@ApiOperation("获取用户信息")ResultVO<UserVo> getUserInfo(HttpServletRequest request) {String userId = (String) request.getAttribute("user_id");UserVo userVo = userService.getUserInfo(userId);return new ResultVO<>(ResultEnum.GET_INFO_SUCCESS.getCode(), ResultEnum.GET_INFO_SUCCESS.getMessage(), userVo);}@GetMapping("/info")@ApiOperation("获取用户的详细信息,包括个人信息页面和操作权限")ResultVO<UserInfoVo> getInfo(HttpServletRequest request) {System.out.println("进入/user/info的获取用户信息的接口");String userId = (String) request.getAttribute("user_id");UserInfoVo userInfoVo = userService.getInfo(userId);return new ResultVO<>(ResultEnum.GET_INFO_SUCCESS.getCode(), ResultEnum.GET_INFO_SUCCESS.getMessage(), userInfoVo);}@GetMapping("/test")@ApiOperation("测试接口")String test(HttpServletRequest request) {// 下面这两个属性都是登录拦截器从token中解析地,当用户名不对或者token过期时是走不到接口内的String userId = (String) request.getAttribute("user_id");String username = (String) request.getAttribute("username");System.out.println("用户id:" + userId);System.out.println("用户名:" + username);return "用户id:" + userId + "\n用户名:" + username;}
}

文件上传下载的接口:

/************************************************************ @note      : 文件上传下载的接口,由于Swagger的问题导致在SwaggerUI*              里测试不成功,实际上前端是完全没有问题的*  * 为了支持Ajax请求和响应,最简单的解决方案返回一个ResponseEntity。*  * 以下示例演示了上传文件的三种可能方式:*  * 1. 单文件上传 - `MultipartFile`*  * 2. 多文件上传 - `MultipartFile []`*  * 3. 将文件上传到模型 - `@ModelAttribute`* @version   : V1.0 at 2018/7/16 20:43***********************************************************/
@RestController
@Api(tags = "Upload And Download APIs")
@RequestMapping("/file")
@Slf4j
public class UploadDownloadController {//    @Autowired
//    AITestConfig aiTestConfig;
//
//    @PostMapping("/upload/single")
//    @ApiOperation("单文件上传")
//    public String uploadFile(@RequestParam("file") MultipartFile uploadfile) {
//        return FileTransUtil.uploadFile(uploadfile, "/root/" + File.separator + uploadfile.getOriginalFilename());
//    }@ApiOperation("单文件上传,支持同时传入参数")@PostMapping("/api/upload/singleAndparas")public String uploadFileSingle(@RequestParam("dir") String dir, @RequestParam("file") MultipartFile uploadfile) {return FileTransUtil.uploadFile(uploadfile, dir);}@ApiOperation("单文件上传,支持同时传入参数,Model")@PostMapping("/upload/single/model")public String singleUploadFileModel(@ModelAttribute("model") UploadModel2 model) {return FileTransUtil.uploadFile(model.getFile(), model.getDir());}@ApiOperation("多文件上传,支持同时传入参数")@PostMapping("upload/multiAndparas")public String uploadFileMulti(@RequestParam("dir") String dir, @RequestParam("files") MultipartFile[] uploadfiles) {return FileTransUtil.uploadFiles(uploadfiles, dir);}@ApiOperation("多文件上传,支持同时传入参数")@PostMapping(value = "/upload/multi/model")public String multiUploadFileModel(@ModelAttribute(("model")) UploadModel model) {return FileTransUtil.uploadFiles(model.getFiles(), model.getDir());}@ApiOperation("Get下载文件")@GetMapping(value = "/download/get")public ResponseEntity<InputStreamResource> downloadFileGet(@RequestParam String filePath) throws IOException {return FileTransUtil.downloadFile(filePath);}@ApiOperation("Post下载文件")@PostMapping(value = "/download/post")public ResponseEntity<InputStreamResource> downloadFilePost(@RequestBody DownloadQo downloadQo) throws IOException {return FileTransUtil.downloadFile(downloadQo.getPath());}
}

在线问题控制器:

@RestController
@Api(tags = "Exam APIs")
@RequestMapping("/exam")
public class ExamController {@Autowiredprivate ExamService examService;@GetMapping("/question/all")@ApiOperation("获取所有问题的列表")ResultVO<List<QuestionVo>> getQuestionAll() {ResultVO<List<QuestionVo>> resultVO;try {List<QuestionVo> questionAll = examService.getQuestionAll();resultVO = new ResultVO<>(0, "获取全部问题列表成功", questionAll);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "获取全部问题列表失败", null);}return resultVO;}@PostMapping("/question/update")@ApiOperation("更新问题")ResultVO<QuestionVo> questionUpdate(@RequestBody QuestionVo questionVo) {// 完成问题的更新System.out.println(questionVo);try {QuestionVo questionVoResult = examService.updateQuestion(questionVo);return new ResultVO<>(0, "更新问题成功", questionVoResult);} catch (Exception e) {e.printStackTrace();return new ResultVO<>(-1, "更新问题失败", null);}}@PostMapping("/question/create")@ApiOperation("创建问题")ResultVO<String> questionCreate(@RequestBody QuestionCreateSimplifyVo questionCreateSimplifyVo, HttpServletRequest request) {QuestionCreateVo questionCreateVo = new QuestionCreateVo();// 把能拷贝过来的属性都拷贝过来BeanUtils.copyProperties(questionCreateSimplifyVo, questionCreateVo);// 设置创建者信息String userId = (String) request.getAttribute("user_id");questionCreateVo.setQuestionCreatorId(userId);System.out.println(questionCreateVo);try {examService.questionCreate(questionCreateVo);return new ResultVO<>(0, "问题创建成功", null);} catch (Exception e) {e.printStackTrace();return new ResultVO<>(-1, "创建问题失败", null);}}@GetMapping("/question/selection")@ApiOperation("获取问题分类的相关选项")ResultVO<QuestionSelectionVo> getSelections() {QuestionSelectionVo questionSelectionVo = examService.getSelections();if (questionSelectionVo != null) {return new ResultVO<>(0, "获取问题分类选项成功", questionSelectionVo);} else {return new ResultVO<>(-1, "获取问题分类选项失败", null);}}@GetMapping("/question/detail/{id}")@ApiOperation("根据问题的id获取问题的详细信息")ResultVO<QuestionDetailVo> getQuestionDetail(@PathVariable String id) {//  根据问题id获取问题的详细信息System.out.println(id);ResultVO<QuestionDetailVo> resultVO;try {QuestionDetailVo questionDetailVo = examService.getQuestionDetail(id);resultVO = new ResultVO<>(0, "获取问题详情成功", questionDetailVo);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "获取问题详情失败", null);}return resultVO;}@GetMapping("/all")@ApiOperation("获取全部考试的列表")ResultVO<List<ExamVo>> getExamAll() {// 需要拼接前端需要的考试列表对象ResultVO<List<ExamVo>> resultVO;try {List<ExamVo> examVos = examService.getExamAll();resultVO = new ResultVO<>(0, "获取全部考试的列表成功", examVos);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "获取全部考试的列表失败", null);}return resultVO;}@GetMapping("/question/type/list")@ApiOperation("获取问题列表,按照单选、多选和判断题分类返回")ResultVO<ExamQuestionTypeVo> getExamQuestionTypeList() {// 获取问题的分类列表ResultVO<ExamQuestionTypeVo> resultVO;try {ExamQuestionTypeVo examQuestionTypeVo = examService.getExamQuestionType();resultVO = new ResultVO<>(0, "获取问题列表成功", examQuestionTypeVo);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "获取问题列表失败", null);}return resultVO;}@PostMapping("/create")@ApiOperation("创建考试")ResultVO<Exam> createExam(@RequestBody ExamCreateVo examCreateVo, HttpServletRequest request) {// 从前端传参数过来,在这里完成考试的入库ResultVO<Exam> resultVO;String userId = (String) request.getAttribute("user_id");try {Exam exam = examService.create(examCreateVo, userId);resultVO = new ResultVO<>(0, "创建考试成功", exam);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "创建考试失败", null);}return resultVO;}@PostMapping("/update")@ApiOperation("更新考试")ResultVO<Exam> updateExam(@RequestBody ExamVo examVo, HttpServletRequest request) {// 从前端传参数过来,在这里完成考试的入库ResultVO<Exam> resultVO;String userId = (String) request.getAttribute("user_id");try {Exam exam = examService.update(examVo, userId);resultVO = new ResultVO<>(0, "更新考试成功", exam);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "更新考试失败", null);}return resultVO;}@GetMapping("/card/list")@ApiOperation("获取考试列表,适配前端卡片列表")ResultVO<List<ExamCardVo>> getExamCardList() {// 获取考试列表卡片ResultVO<List<ExamCardVo>> resultVO;try {List<ExamCardVo> examCardVoList = examService.getExamCardList();resultVO = new ResultVO<>(0, "获取考试列表卡片成功", examCardVoList);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "获取考试列表卡片失败", null);}return resultVO;}@GetMapping("/detail/{id}")@ApiOperation("根据考试的id,获取考试详情")ResultVO<ExamDetailVo> getExamDetail(@PathVariable String id) {// 根据id获取考试详情ResultVO<ExamDetailVo> resultVO;try {ExamDetailVo examDetail = examService.getExamDetail(id);resultVO = new ResultVO<>(0, "获取考试详情成功", examDetail);} catch (Exception e) {resultVO = new ResultVO<>(-1, "获取考试详情失败", null);}return resultVO;}@PostMapping("/finish/{examId}")@ApiOperation("根据用户提交的答案对指定id的考试判分")ResultVO<ExamRecord> finishExam(@PathVariable String examId, @RequestBody HashMap<String, List<String>> answersMap, HttpServletRequest request) {ResultVO<ExamRecord> resultVO;try {// 拦截器里设置上的用户idString userId = (String) request.getAttribute("user_id");// 下面根据用户提交的信息进行判分,返回用户的得分情况ExamRecord examRecord = examService.judge(userId, examId, answersMap);resultVO = new ResultVO<>(0, "考卷提交成功", examRecord);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "考卷提交失败", null);}return resultVO;}@GetMapping("/record/list")@ApiOperation("获取当前用户的考试记录")ResultVO<List<ExamRecordVo>> getExamRecordList(HttpServletRequest request) {ResultVO<List<ExamRecordVo>> resultVO;try {// 拦截器里设置上的用户idString userId = (String) request.getAttribute("user_id");// 下面根据用户账号拿到他(她所有的考试信息),注意要用VO封装下List<ExamRecordVo> examRecordVoList = examService.getExamRecordList(userId);resultVO = new ResultVO<>(0, "获取考试记录成功", examRecordVoList);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "获取考试记录失败", null);}return resultVO;}@GetMapping("/record/detail/{recordId}")@ApiOperation("根据考试记录id获取考试记录详情")ResultVO<RecordDetailVo> getExamRecordDetail(@PathVariable String recordId) {ResultVO<RecordDetailVo> resultVO;try {RecordDetailVo recordDetailVo = examService.getRecordDetail(recordId);resultVO = new ResultVO<>(0, "获取考试记录详情成功", recordDetailVo);} catch (Exception e) {e.printStackTrace();resultVO = new ResultVO<>(-1, "获取考试记录详情失败", null);}return resultVO;}
}

 源码获取:博客首页 "资源" 里下载!

相关文章:

写给自己的web开发资源

web开发给我的感觉就是乱七八糟&#xff0c;而且要学习感觉总是会有东西要学习&#xff0c;很乱很杂我也没空搞&#xff0c;&#xff08;其实学习这个的方法就是去用它&#xff0c;什么你直接用&#xff1f;学过js么学过jquery么&#xff1f;哈哈&#xff0c;我没有系统的看完过…

虚拟机VMWare“提示:软件虚拟化与此平台上的长模式不兼容”的解决方法

虚拟机VMWare“提示&#xff1a;软件虚拟化与此平台上的长模式不兼容”不少童鞋反映&#xff0c;在使用Windows7 64位操作系统时&#xff0c;无法运行VMWare或MS Virtual server等软件虚拟操作系统。提示为“提示&#xff1a;软件虚拟化与此平台上的长模式不兼容. 禁用长模式. …

如何在Vue项目中使用vw实现移动端适配(转)

有关于移动端的适配布局一直以来都是众说纷纭&#xff0c;对应的解决方案也是有很多种。在《使用Flexible实现手淘H5页面的终端适配》提出了Flexible的布局方案&#xff0c;随着viewport单位越来越受到众多浏览器的支持&#xff0c;因此在《再聊移动端页面的适配》一文中提出了…

Jsoncpp 在C++开发中的一些使用记录

jsoncpp 是一个C 语言实现的json库&#xff0c;非常方便得支持C得各种数据类型到json 以及 json到各种数据类型的转化。 一个json 类型的数据如下&#xff1a; {"code" : 10.01,"files" : "","msg" : "","uploadid&q…

Java项目:图书管理系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括(管理员和学生角色)&#xff1a; 管理员和学生登录&#xff0c;图书管理&#xff0c;图书添加删除修改&#xff0c;图书 借阅&#xff0c;图书归还&#xff0c;图书查看&#xff0c;学…

使用 Flash Builder 的 Apple iOS 开发过程

使用 Flash Builder 的 Apple iOS 开发过程 iOS 开发和部署过程概述 构建、调试或部署 iOS 应用程序前的准备工作 在测试、调试或安装 iOS 应用程序时选择的文件 将应用程序部署到 Apple App Store 时选择的文件 在使用 Flash Builder 开发 iOS 应用程序之前&#xff0c;必须…

grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)

2019独角兽企业重金招聘Python工程师标准>>> 1. 简单介绍 在用于查找子字符串的算法当中&#xff0c;BM&#xff08;Boyer-Moore&#xff09;算法是目前被认为最高效的字符串搜索算法&#xff0c;它由Bob Boyer和J Strother Moore设计于1977年。 一般情况下&#xf…

多线程threading

threading用于提供线程相关的操作&#xff0c;线程是应用程序中工作的最小单元。python当前版本的多线程库没有实现优先级、线程组&#xff0c;线程也不能被停止、暂停、恢复、中断。 1. threading模块提供的类&#xff1a; Thread, Lock, Rlock, Condition, [Bounded]Sem…

一个简单的程序来使用WiredTiger 存储引擎

前言 WiredTiger 自 mongodb3.0 集成进来之后为mongodb拉回了大量的口碑&#xff0c;从而在mongodb-3.2 版本直接代替了in-memory存储引擎&#xff0c;作为了mongodb的默认存储引擎。其 通过支持Append-only btree lsm-tree 以及 针对磁盘/内存数据结构上的多核和无锁优化&am…

Java项目:网上商城系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述功能 javaweb 网上商城系统&#xff0c;前台&#xff0b;后台管理&#xff0c;用户注册&#xff0c;登录&#xff0c;上哦展示&#xff0c;分组展示&#xff0c;搜索&#xff0c;收货地址管理&…

Linux 启动详解之init

1.init初探 init是Linux系统操作中不可缺少的程序之一。init进程&#xff0c;它是一个由内核启动的用户级进程&#xff0c;然后由它来启动后面的任务&#xff0c;包括多用户环境&#xff0c;网络等。 内核会在过去曾使用过init的几个地方查找它&#xff0c;它的正确位置&#x…

mysql 相关命令

mysqladmin versionmysqladmin statusmysqlshow -u帐号 -p密码 mysqlshow -u帐号 -p密码 库名mysql -u帐号 -p密码 -e SELECT Host,Db,User From db mysqlmysqldump --quick mysql | gzip > /root/mysql.gzmysqladmin create dbtestgunzip < /root/mysql.gz | mysql…

maven 添加数据库驱动

1.电脑上需要安装 apache maven2.下载oracle的jar包 例如我下载的是ojdbc7-12.jar3.cmd执行命令 mvn install:install-file -DgroupIdcom.oracle -DartifactIdojdbc7 -Dversion12 -Dpackagingjar -Dfiled:\jar\ojdbc7-12.jar-Dfile jar包所存放的位置4.pom文件添加&#xff1…

Rocksdb 的 BlobDB key-value 分离存储插件

前言 还是回到传统的 LSM-tree 中&#xff0c;我们key-value 写入时以append形态存放到一个data-block中&#xff0c;多个data-blockmetablock 之类的数据组织成一个sst。当我们读数据以及compaction的时候读到key 之后则很方便得读取到对应的value&#xff0c;一次I/O能够将k…

Java项目:(前端vue后台java微服务)在线考试系统(java+vue+springboot+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 考试流程&#xff1a; 用户前台注册成为学生 管理员后台添加老师&#xff0c;系统将该用户角色上升为老师 老师登录&#xff0c;添加考试,添加题目&#xff0c;发布考试 考生登录前台参加考试&#xff0c…

C++实现stack【栈】

要求&#xff1a; //****file: stack.h/*对stack进行初始化检查stack为空&#xff0c;或已满将整数压入到stack中从stack里弹出整数 不移除任何袁术&#xff0c;讲过stack的内容输出到标准输出Stack类的私有成员如下&#xff1a;一个用于打印错误信息的私有哦成员函数三个私有数…

c#操作Excel整理总结

大家好&#xff0c;这是我在工作中总结的关于C#操作Excel的帮助类&#xff0c;欢迎大家批评指正&#xff01; using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.IO; using Aspose.Cells;namespace MusicgrabTool {p…

C++ std::function<void(int)> 和 std::function<void()> 作为函数参数的注意事项

前言 std::function 作为标准库提供的函数指针&#xff0c;使用起来还是比较方便的&#xff0c;不过在使用过程中有一些需要注意的细节&#xff0c;这里做一个简单的记录。 基本使用 头文件: #include <functional>语法&#xff1a;std::function<return_type(args…

Java项目:网上电商系统(java+SSM+mysql+maven+tomcat)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a;本系统分用户前台和管理员后台。 前台展示后台管理&#xff0c;前台界面可实现用户登录&#xff0c;用户注 册&#xff0c;商品展示&#xff0c;商品明细展示&#xff0c;用户…

C# SQLiteHelper

1 public class SQLiteHelpers2 {3 /// <summary> 4 /// ConnectionString样例&#xff1a;DatasourceTest.db3;Poolingtrue;FailIfMissingfalse 5 /// </summary> 6 public static string ConnectionStri…

[Git] 拉开发分支的代码报错

Git拉开发分支的代码报错&#xff1a; fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed 解决办法&#xff1a; git config --global core.compression -1 转载于:https://www.cnblogs.com/MasterMonkInTemple/p/10754596.html

C++ 通过模版工厂实现 简单反射机制

前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射&#xff0c;比如http接口中 用户传入了url&#xff0c;我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C 并没有友好得支持这样的操作&#xf…

计算机世界的“十六进制”为什么如此重要

在计算机世界中,十六进制扮演着不可或缺的角色。它以其紧凑的表示形式、与二进制的天然对应关系以及在各个领域的广泛应用,成为了计算机科学中的一把重要工具。总体而言,计算机需要十六进制并非偶然,它是一种为了更好地满足人类理解和处理数据的需求而产生的工具,为计算机科学的发展和应用提供了便利和支持。

面试官:如何实现10亿数据判重?

以 Java 中的 int 为例,来对比观察 BitMap 的优势,在 Java 中,int 类型通常需要 32 位(4 字节*8),而 BitMap 使用 1 位就可以来标识此元素是否存在,所以可以认为 BitMap 占用的空间大小,只有 int 类型的 1/32,所以有大数据量判重时,使用 BitMap 也可以实现。所以数据库去重显然是不行的。而使用集合也是不合适的,因为数据量太大,使用集合会导致内存不够用或内存溢出和 Full GC 频繁等问题,所以此时我们的解决方案通常是采用布隆过滤器来实现判重。

Java项目:校园二手市场系统(java+SSM+mysql+maven+tomcat)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述&#xff08; IW文档&#xff09; 功能&#xff1a;本系统分用户前台和管理员后台。 本系统用例模型有三种&#xff0c;分别是游客、注册用户和系统管 理员。下面分别对这三个角色的功能进行描…

php中$_REQUEST、$_POST、$_GET的区别和联系小结

php中$_REQUEST、$_POST、$_GET的区别和联系小结 作者&#xff1a; 字体&#xff1a;[增加 减小] 类型&#xff1a;转载php中有$_request与$_post、$_get用于接受表单数据&#xff0c;当时他们有何种区别&#xff0c;什么时候用那种最好。1. $_REQUEST php中$_REQUEST可以获取以…

uva 315 (poj 1144 求割点)

题意&#xff1a;给你一张无向图&#xff0c;求割点的个数。 思路&#xff1a;输入稍微处理一下接着直接套模版。 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <cstdlib>5 #include <cmath>6 #include <algorit…

SQL学习之计算字段的用法与解析

一、计算字段 1、存储在数据库表中的数据一般不是应用程序所需要的格式。大多数情况下,数据表中的数据都需要进行二次处理。下面举几个例子。 (1)、我们需要一个字段同时显示公司名和公司地址&#xff0c;但这两个信息存储在不同表的列中。 (2)、省份、城市、邮政编码存储在不同…

手把手教你 用C++实现一个 可持久化 的http_server

前言 本文介绍一个有趣的 通过C实现的 持久化的http_server demo&#xff0c;这样我们通过http通信之后的数据可以持久化存储&#xff0c;即使server挂了&#xff0c;数据也不会丢失。我们的http_sever 也就能够真正得作为一个后端server了。 本身持久化这个能力是数据库提供…

【SVN多用户开发】代码冲突解决办法

SVN是一款集中式的代码存储工具&#xff0c;可以帮助多个用户协同开发同一应用程序。 但是SVN不能完全代替人工操作&#xff0c;有时也需要程序员自己进行沟通确认有效的代码。 下面就简单的看一下&#xff0c;常见的代码冲突以及解决方法。 总结起来&#xff0c;无非是&#x…