当前位置:首页 » 操作系统 » 打分系统源码

打分系统源码

发布时间: 2025-08-01 14:07:22

1. 微信在线考试系统自己能做吗

当然能自己做,而且操作非常简单!

在线考试系统平台相对于微信来说是一个独立的软件,二者本没有什么关联。但是在完成在线考试系统的试卷后,能够自动生成考试二维码以及网页链接,将二维码或链接在微信中进行转发,考生就可以直接通过微信扫一扫功能或直接访问该链接来完成在线考试。这样使得微信作为一个纽带,将考生与在线考试系统关联在一起。

使用任意一个在线考试系统平台即可达成这个目标,为了方便起见,这里我们以轻速云在线考试系统为例,介绍一下手机微信在线考试系统怎么制作。

1、注册并登录到轻速云在线考试系统后台,使用管理后台的各项考试管理功能来创建在线考试试卷。

2、使用“我的题库”功能来创建题库,将考试所需要使用的题目保存在题库中,留待后续使用。

3、使用“我的试卷”进行在线考试试卷创建操作。如果需要创建仅针对于内部考试的非公开试卷,那么需要进行步骤4的内容来创建成员,否则可以跳过步骤4。

4、在系统管理菜单下找到“成员管理”,通过在线添加或者导入的方式来完成考试成员的信息录入。之后,每个成员都有独立的账号密码用来登录考试系统来完成考试。也可以不进行成员信息添加,而是在学员设置管理中开启微信登录直接注册功能,让系统拉取学员的微信信息来完成自助注册。

5、从步骤2中创建的题库里选择具体的题目添加到试卷中,然后进行分值设定以及题目的排序操作。

6、通过“考试设置”来完成在线考试的环境配置,可以根据需求来调整多项内容。

7、公开试卷需要配置采集信息,让考生填写个人信息;而非公开试卷则需要确定考生名单,邀请需要考试的成员来参加考试。

8、发布试卷后系统自动生成多项考试入口,保存考试入口,在微信中进行传播。

9、考生可以在微信信息中直接借由访问考试入口参加考试,也可以通过扫描或识别二维码的方式来参加考试。

10、考试结束后考生答卷会自动上传,管理员仍旧通过在线考试系统的管理后台来完成答卷的批阅、回收以及统计分析等工作。

以上就是轻速云微信在线考试系统的制作方法,过程还是很简单的。多使用几次熟悉了信息的导入操作,创建试卷还会更快一些。

2. 有免费的在线考试系统推荐吗

嗯,这个我知道,我们集团在用的优考试在线考试系统就不错。优考试局域网和在线的我们集团都有用。那跟大家说一下使用感受吧!
1、优考试局域网就是,一个出题者端和一个考试者端,能在局域网里面用的。
1.1 快速导入试题,形成试题库:优考试支持Excel文件导入试题,只需要经过简单的编辑,就能从原有的word 文档或者Excel表格中编辑成优考试可导入的Excel格式,能快速的导入试题, 一次导入就能导入几百题,上千题的题库导入仅需要一分钟。
2、说一下在线的吧。操作更方便。
出题者身份在使用系统的时候,可以创建题库,直接EXCEL表导入试题,方便快捷,然互用来组卷,试卷组织好后,添加学生的信息,大致包括学生的姓名以及联系方式等等,添加信息的目的是为了通过系统来通知学生只老师设置好的试卷范围进行试卷作答。学生身份在使用系统时,除了可以完成老师布置的试卷题目,也可以自己在系统的题库中搜索想要练习的题目来作答,作答结束后,也会有相应的分数和题目解析!考试的组织可以随时随地!考试的作答在设定的时间范围内,随时随地!
3、最大的亮点就是可以手机微信考试,扫码考试,打开试卷链接就可以考试。
4、可以试用30天,什么功能都可以试,还可以定制。很赞

3. linux系统的OOM Killer处理机制

最近有位 VPS 客户抱怨 Mysql 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题。这通常是因为某时刻应用程序大量请求内存导致系统内存不足造成的,这通常会触发 Linux 内核里的 Out of Memory (OOM) killer,OOM killer 会杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。如果检查相关的日志文件(/var/log/messages)就会看到下面类似的 Out of memory: Kill process 信息:
...
Out of memory: Kill process 9682 (mysqld) score 9 or sacrifice child
Killed process 9682, UID 27, (mysqld) total-vm:47388kB, anon-rss:3744kB, file-rss:80kB
httpd invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0
httpd cpuset=/ mems_allowed=0
Pid: 8911, comm: httpd Not tainted 2.6.32-279.1.1.el6.i686 #1
...
21556 total pagecache pages
21049 pages in swap cache
Swap cache stats: add 12819103, delete 12798054, find 3188096/4634617
Free swap = 0kB
Total swap = 524280kB
131071 pages RAM
0 pages HighMem
3673 pages reserved
67960 pages shared
124940 pages non-shared
Linux 内核根据应用程序的要求分配内存,通常来说应用程序分配了内存但是并没有实际全部使用,为了提高性能,这部分没用的内存可以留作它用,这部分内存是属于每个进程的,内核直接回收利用的话比较麻烦,所以内核采用一种过度分配内存(over-commit memory)的办法来间接利用这部分 “空闲” 的内存,提高整体内存的使用效率。一般来说这样做没有问题,但当大多数应用程序都消耗完自己的内存的时候麻烦就来了,因为这些应用程序的内存需求加起来超出了物理内存(包括 swap)的容量,内核(OOM killer)必须杀掉一些进程才能腾出空间保障系统正常运行。用银行的例子来讲可能更容易懂一些,部分人取钱的时候银行不怕,银行有足够的存款应付,当全国人民(或者绝大多数)都取钱而且每个人都想把自己钱取完的时候银行的麻烦就来了,银行实际上是没有这么多钱给大家取的。
内核检测到系统内存不足、挑选并杀掉某个进程的过程可以参考内核源代码 linux/mm/oom_kill.c,当系统内存不足的时候,out_of_memory() 被触发,然后调用 select_bad_process() 选择一个 “bad” 进程杀掉,如何判断和选择一个 “bad” 进程呢,总不能随机选吧?挑选的过程由 oom_badness() 决定,挑选的算法和想法都很简单很朴实:最 bad 的那个进程就是那个最占用内存的进程。
/**
* oom_badness - heuristic function to determine which candidate task to kill
* @p: task struct of which task we should calculate
* @totalpages: total present RAM allowed for page allocation
*
* The heuristic for determining which task to kill is made to be as simple and
* predictable as possible. The goal is to return the highest value for the
* task consuming the most memory to avoid subsequent oom failures.
*/
unsigned long oom_badness(struct task_struct *p, struct mem_cgroup *memcg,
const nodemask_t *nodemask, unsigned long totalpages)
{
long points;
long adj;
if (oom_unkillable_task(p, memcg, nodemask))
return 0;
p = find_lock_task_mm(p);
if (!p)
return 0;
adj = (long)p-signal-oom_score_adj;
if (adj == OOM_SCORE_ADJ_MIN) {
task_unlock(p);
return 0;
}
/*
* The baseline for the badness score is the proportion of RAM that each
* task's rss, pagetable and swap space use.
*/
points = get_mm_rss(p-mm) + p-mm-nr_ptes +
get_mm_counter(p-mm, MM_SWAPENTS);
task_unlock(p);
/*
* Root processes get 3% bonus, just like the __vm_enough_memory()
* implementation used by LSMs.
*/
if (has_capability_noaudit(p, CAP_SYS_ADMIN))
adj -= 30;
/* Normalize to oom_score_adj units */
adj *= totalpages / 1000;
points += adj;
/*
* Never return 0 for an eligible task regardless of the root bonus and
* oom_score_adj (oom_score_adj can't be OOM_SCORE_ADJ_MIN here).
*/
return points 0 ? points : 1;
}
上面代码里的注释写的很明白,理解了这个算法我们就理解了为啥 MySQL 躺着也能中枪了,因为它的体积总是最大(一般来说它在系统上占用内存最多),所以如果 Out of Memeory (OOM) 的话总是不幸第一个被 kill 掉。解决这个问题最简单的办法就是增加内存,或者想办法优化 MySQL 使其占用更少的内存,除了优化 MySQL 外还可以优化系统(优化 Debian 5,优化 CentOS 5.x),让系统尽可能使用少的内存以便应用程序(如 MySQL) 能使用更多的内存,还有一个临时的办法就是调整内核参数,让 MySQL 进程不容易被 OOM killer 发现。
我们可以通过一些内核参数来调整 OOM killer 的行为,避免系统在那里不停的杀进程。比如我们可以在触发 OOM 后立刻触发 kernel panic,kernel panic 10秒后自动重启系统。
# sysctl -w vm.panic_on_oom=1
vm.panic_on_oom = 1
# sysctl -w kernel.panic=10
kernel.panic = 10
# echo "vm.panic_on_oom=1" /etc/sysctl.conf
# echo "kernel.panic=10" /etc/sysctl.conf
从上面的 oom_kill.c 代码里可以看到 oom_badness() 给每个进程打分,根据 points 的高低来决定杀哪个进程,这个 points 可以根据 adj 调节,root 权限的进程通常被认为很重要,不应该被轻易杀掉,所以打分的时候可以得到 3% 的优惠(adj -= 30; 分数越低越不容易被杀掉)。我们可以在用户空间通过操作每个进程的 oom_adj 内核参数来决定哪些进程不这么容易被 OOM killer 选中杀掉。比如,如果不想 MySQL 进程被轻易杀掉的话可以找到 MySQL 运行的进程号后,调整 oom_score_adj 为 -15(注意 points 越小越不容易被杀):
# ps aux | grep mysqld
mysql 2196 1.6 2.1 623800 44876 ? Ssl 09:42 0:00 /usr/sbin/mysqld
# cat /proc/2196/oom_score_adj
0
# echo -15 /proc/2196/oom_score_adj
当然,如果需要的话可以完全关闭 OOM killer(不推荐用在生产环境):
# sysctl -w vm.overcommit_memory=2
# echo "vm.overcommit_memory=2" /etc/sysctl.conf
我们知道了在用户空间可以通过操作每个进程的 oom_adj 内核参数来调整进程的分数,这个分数也可以通过 oom_score 这个内核参数看到,比如查看进程号为981的 omm_score,这个分数被上面提到的 omm_score_adj 参数调整后(-15),就变成了3:
# cat /proc/981/oom_score
18
# echo -15 /proc/981/oom_score_adj
# cat /proc/981/oom_score
3
下面这个 bash 脚本可用来打印当前系统上 oom_score 分数最高(最容易被 OOM Killer 杀掉)的进程:
# vi oomscore.sh
#!/bin/bash
for proc in $(find /proc -maxdepth 1 -regex '/proc/[0-9]+'); do
printf "%2d %5d %sn"
"$(cat $proc/oom_score)"
"$(basename $proc)"
"$(cat $proc/cmdline | tr '' ' ' | head -c 50)"
done 2/dev/null | sort -nr | head -n 10
# chmod +x oomscore.sh
# ./oomscore.sh
18 981 /usr/sbin/mysqld
4 31359 -bash
4 31056 -bash
1 31358 sshd: root@pts/6
1 31244 sshd: vpsee [priv]
1 31159 -bash
1 31158 sudo -i
1 31055 sshd: root@pts/3
1 30912 sshd: vpsee [priv]
1 29547 /usr/sbin/sshd -D

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:585
制作脚本网站 发布:2025-10-20 08:17:34 浏览:881
python中的init方法 发布:2025-10-20 08:17:33 浏览:574
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:761
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:677
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1005
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:250
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:108
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:799
python股票数据获取 发布:2025-10-20 07:39:44 浏览:705