update bonus doc

This commit is contained in:
2024-05-19 11:20:13 +00:00
parent 8e4ef6a2af
commit 0b66edf683
3 changed files with 53 additions and 3 deletions

View File

@ -35,8 +35,8 @@ add_definitions(-DZSTD_STATIC_LINKING_ONLY)
# 设置一个布尔类型的选项,用于控制是否启用高级功能,如日志(业务日志、程序日志、容错校验日志)、并发、快照等 # 设置一个布尔类型的选项,用于控制是否启用高级功能,如日志(业务日志、程序日志、容错校验日志)、并发、快照等
option(ENABLE_ADVANCED_FEATURE "Enable advanced features" OFF) option(ENABLE_ADVANCED_FEATURE "Enable advanced features" OFF)
option(OJ_TEST_BPT "Enable OJ test for B+ Tree" ON) option(OJ_TEST_BPT "Enable OJ test for B+ Tree" OFF)
option(OJ_TEST_BACKEND "Enable OJ test for backend" OFF) option(OJ_TEST_BACKEND "Enable OJ test for backend" ON)
# 如果 ENABLE_ADVANCED_FEATURE 选项为 ON则定义 ENABLE_ADVANCED_FEATURE 宏 # 如果 ENABLE_ADVANCED_FEATURE 选项为 ON则定义 ENABLE_ADVANCED_FEATURE 宏
if (ENABLE_ADVANCED_FEATURE) if (ENABLE_ADVANCED_FEATURE)

View File

@ -80,7 +80,7 @@
## 管理系统 ## 管理系统
### GUI 前端 *(1%)* ### GUI 前端 *(0.9%)*
提供一个用户友好的图形化前端Qt、Gtk、Web、Tcl/Tk 等均可)。基本要求为: 提供一个用户友好的图形化前端Qt、Gtk、Web、Tcl/Tk 等均可)。基本要求为:
@ -90,3 +90,33 @@
- (可选)提供更方便的操作,如查询后提供一键订票等。 - (可选)提供更方便的操作,如查询后提供一键订票等。
**注意:** 准备尝试此任务的同学请务必与助教联系并讨论自己的实现思路。 **注意:** 准备尝试此任务的同学请务必与助教联系并讨论自己的实现思路。
关于用户友好,这里有一些具体的要求:
- 查询车票后可以直接点击购票;
- 尽可能减少用户需要输入的内容;
- 除了对于普通用户友好,对于工作人员也要有友好的操作界面;
对于使用 Web 方式完成的前端包括使用Vue、React、Bootstrap、Electron 等框架),需要满足以下要求:
- 在不同电脑上应该可以同时运行多个前端(网页)并连接到同一后端(服务器),不会相互干扰,模拟现实情况下多用户场景;
- Web服务崩溃不能影响后端数据服务的正常运行
- 设计合理的方式来关闭或重启Web前端服务器或后端数据服务器而不是手动 kill 进程或者 Ctrl+C并保证处理完成已接收到的指令完成数据的保存。可以参考 `nginx -s restart`
- ~~不得使用 TesutoHime 作为模板~~
### 守护进程 *(0.1%)*
完成此任务需要先完成前置任务 GUI前端。
对于服务器来说,保证服务的稳定性是非常重要的。
在现代的linux系统中可以很容易地使用 systemd 等工具来管理服务,完成开机自动启动、崩溃自动重启、定时执行等任务。
在本任务中,你需要通过两个途径实现下面的几个功能:
- 在同一个数据目录下,能且仅能运行一个程序实例;
- 当程序崩溃时,能自动重启;
- 接受信号,如 `SIGTERM` 时,能够优雅关闭当前的程序实例。
途径分别是:
1. 在现代的linux中已经有一些工具发行版相关为我们提供了相关功能如 systemd。为你的程序编写 systemd service 文件,完成上面的功能。你也可以考虑使用其他的工具。
2. 手动实现一个简单的守护进程。参考 `fork` 等系统调用。

20
test/ojtest.py Executable file
View File

@ -0,0 +1,20 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import sys
import time
import json
import subprocess
import re
import shutil
import random
import string
import hashlib
import threading
# first, get the directory of the script
script_dir = os.path.dirname(os.path.realpath(__file__))
print("script_dir: " + script_dir)
path_to_exec_file = os.path.join(script_dir, "../build/code")
print("path_to_exec_file: " + path_to_exec_file)