From 0b66edf68345906c56e7ff3408d669bec09ab91f Mon Sep 17 00:00:00 2001 From: happyZYM Date: Sun, 19 May 2024 11:20:13 +0000 Subject: [PATCH] update bonus doc --- CMakeLists.txt | 4 ++-- bonus.md | 32 +++++++++++++++++++++++++++++++- test/ojtest.py | 20 ++++++++++++++++++++ 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100755 test/ojtest.py diff --git a/CMakeLists.txt b/CMakeLists.txt index f61882e..64942de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,8 +35,8 @@ add_definitions(-DZSTD_STATIC_LINKING_ONLY) # 设置一个布尔类型的选项,用于控制是否启用高级功能,如日志(业务日志、程序日志、容错校验日志)、并发、快照等 option(ENABLE_ADVANCED_FEATURE "Enable advanced features" OFF) -option(OJ_TEST_BPT "Enable OJ test for B+ Tree" ON) -option(OJ_TEST_BACKEND "Enable OJ test for backend" OFF) +option(OJ_TEST_BPT "Enable OJ test for B+ Tree" OFF) +option(OJ_TEST_BACKEND "Enable OJ test for backend" ON) # 如果 ENABLE_ADVANCED_FEATURE 选项为 ON,则定义 ENABLE_ADVANCED_FEATURE 宏 if (ENABLE_ADVANCED_FEATURE) diff --git a/bonus.md b/bonus.md index 7d0233b..324b857 100644 --- a/bonus.md +++ b/bonus.md @@ -80,7 +80,7 @@ ## 管理系统 -### GUI 前端 *(1%)* +### GUI 前端 *(0.9%)* 提供一个用户友好的图形化前端(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` 等系统调用。 diff --git a/test/ojtest.py b/test/ojtest.py new file mode 100755 index 0000000..4aab545 --- /dev/null +++ b/test/ojtest.py @@ -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) \ No newline at end of file