分类目录归档:未分类

如何优雅的停止Java线程?

interrupt

package threadTest;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread a = new Thread(new Worker());
a.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
a.interrupt();
}
}
class Worker implements Runnable {
public void run() {
// TODO Auto-generated method stub
try {
while (true) {
System.out.println(new Date());
Thread.sleep(100);
}
} catch (InterruptedException e) {
System.out.println(“Exited!”);
}
}
}

深渊

裂缝深不见底,阿呆差点掉下去。史蒂夫说,离那里远一点,下面是虚空,掉下去的话会摔出这个宇宙,你就再也回不来了。

史蒂夫看看表,剩下的时间不多了,我们只能选择造一座桥过这个深渊或者造一间房子来保命。

如果造桥的话,过了深渊可能天已经黑了,我们要赶回村庄还有一段路程,如果遇上僵尸怪,我自己还能保命,但是恐怕你得自己跟紧我。

如果造保命屋的话,你要帮我一起造,这样才能造一个足够我们两人过夜的房子。

选择

  • 造桥
  • 造房子

村庄

来到山坡下的村庄,阿呆才发现,原来山坡上一层层的并不是有意开发的梯田。而是因为这个世界一切皆为方块,山坡上的斜面也都具有马赛克效果,远处看起来就像梯田一样。

村庄里的有各式各样的建筑,商店、酒馆、学校、教堂,当然还有居民楼。史蒂夫说,你想去我家里看看么,还是打算闲逛一下?

选择:

  • 去史蒂夫家
  • 去酒馆

迅雷弹窗服务传播色情信息被网信办关停

刚才在广播里听到这条新闻

http://www.wokeji.com/tupian/jrtj/201412/t20141208_888878.shtml

深感正能量

机房里上课最讨厌类似东西在刚一开机就把同学们本来不怎么集中的注意力给吸引跑了。(某山某霸你看看你那个首页里都是些啥垃圾消息)

应该出台法律,客户端软件通过弹出窗口进行内容推送,其内容应经过审查,采编方应具有广电总局批准的许可证。

解决华为手机内部sd卡满问题

领导的手机sd卡明明还很空有10G可用空间,却总被各种app吐槽空间不足。

用腾讯的应用宝自动识别装好驱动,在Program Files里面搜索tadb找到命令行tadb.exe位置。

开始运行cmd

cd C:\Program Files\Tencent\QQPCMgr\10.3.15564.218\plugins\QQPCB1AndroidJmp

tadb shell

df |grep sdcard

发现/storage下面有两个sdcard0和sdcard1,默认0是内置还有1M空间,1是外置尚且10G剩余。

想办法狸猫换太子

ls /system/etc

发现internal_sd.fstab,只读

mount -w -o remount /system后

编辑下,1、0对调,reboot

再进shell

df确认交换完成

来到sdcard1,du -s *|sort -n

把最大的cp -a去sdcard0

然后rm -r

交还领导试用

复习,穿越马里奥的魂斗罗

点我

俄罗斯方块告诉我们 犯下的错误会积累 获得的成功就会消失 超级玛丽告诉我们 成功看的不是你跳得多高 而是看你究竟跑得有多远 魂斗罗告诉我们 阻止你前进的往往不是前方的敌人而是背后的黑枪 贪吃蛇告诉我们 打败自己的不是糖衣炮弹 而是越来越膨胀的自己 战胜自己你就没有敌人 愤怒的小鸟告诉我们 当你失败时 总会有几只猪在笑 生活告诉我们 别放弃

 

[原]给HUSTOJ用户提供的源码阅读与修改建议

0、 准备知识

a)        最新系统源码可以用svn取得,或在下述地址直接浏览

i.  http://code.google.com/p/hustoj/source/browse/   墙外老版

ii.  https://github.com/zhblue/hustoj                         无墙新版

b)       系统分为Web和Core两个部分

c)        简化ER图

hustoj-db

d)       Web与core的连接方式有两种,实际运行可选其中一种

i.   数据库连接【默认】

1.        Web插入Solution表获得solution_id,result设为14

2.        插入source_code表准备需要评测的源码。

3.        更新solution的result为0,标志准备好进入评测阶段。

4.        judged轮询solution表( 或通过UDP端口得到有新任务的消息通知 ),发现新纪录,派生judge_client进程。

5.        judge_cliet判题时更新solution表result等字段

6.        Web端轮询soltuion显示result等字段。

ii.   HTTP方式

1.        Web插入Solution表,细节同上

2.        core访问Web端admin/problem_judge.php,发现新纪录

3.        core向Web端admin/problem_judge.php提交数据,problem_judge.php更新solution表result等字段

4.        Web端轮询soltuion显示result等字段。

  • 最新版本里,增加了UDP通知功能,提交记录插入后,通过UDP端口1536发送消息提醒判题机及时处理。

1、 Web部分

a)        阅读配置文件,弄清各设置含义

i.      参考

db_info.inc.php


static $DB_HOST="localhost"; 数据库的服务器地址
static $DB_NAME="jol"; 数据库名
static $DB_USER="root"; 数据库用户名
static $DB_PASS="root"; 数据库密码
// connect db
static $OJ_NAME="HUSTOJ"; OJ的名字,将取代页面标题等位置HUSTOJ字样。
static $OJ_HOME="./"; OJ的首页地址
static $OJ_ADMIN="root@localhost"; 管理员email
static $OJ_DATA="/home/judge/data"; 测试数据所在目录,实际位置。
static $OJ_BBS="discuss";//"bbs" 论坛的形式,discuss为自带的简单论坛,bbs为外挂论坛,参考bbs.php代码。
static $OJ_ONLINE=false; 是否使用在线监控,需要消耗一定的内存和计算,因此如果并发大建议关闭
static $OJ_LANG="en"; 默认的语言,中文为cn
static $OJ_SIM=true; 是否显示相似度检测的结果。
static $OJ_DICT=true; 是否启用在线英字典
static $OJ_LANGMASK=1008; //1mC 2mCPP 4mPascal 8mJava 16mRuby 32mBash 1008 for security reason to mask all other language 用掩码表示的OJ接受的提交语言,可以被比赛设定覆盖。
static $OJ_EDITE_AREA=true;// 是否启用高亮语法显示的提交界面,可以在线编程,无须IDE。
static $OJ_AUTO_SHARE=false;//true: 自动分享代码,启用的话,做出一道题就可以在该题的Status中看其他人的答案。
static $OJ_CSS="hoj.css"; 默认的css,可以选择dark.css和gcode.css,具有有限的界面制定效果。
static $OJ_SAE=false; //是否是在新浪的云平台运行web部分
static $OJ_VCODE=true; 是否启用图形登录、注册验证码。
static $OJ_APPENDCODE=false; 是否启用自动添加代码,启用的话,提交时会参考$OJ_DATA对应目录里是否有append.c一类的文件,有的话会把其中代码附加到对应语言的答案之后,巧妙使用可以指定main函数而要求学生编写main部分调用的函数。
static $OJ_MEMCACHE=false;是否使用memcache作为页面缓存,如果不启用则用/cache目录
static $OJ_MEMSERVER="127.0.0.1"; memcached的服务器地址
static $OJ_MEMPORT=11211; memcached的端口
static $OJ_RANK_LOCK_PERCENT=0; //比赛封榜时间的比率,如5小时比赛设为0.2则最后1小时封榜。
static $OJ_SHOW_DIFF=false; //显示WrongAnswer时的对比

b)       制定自己的前台模板(即改变页面效果)

i.      复制template/bs3目录,放置在template目录中,并改为新模板名。

ii.     在db_info.inc.php中修改$OJ_TEMPLATE变量为新模板名

iii.   浏览前台,打开要修改的页面,根据地址栏修改新目录中对应的php、css、images等文件,保存后刷新页面看修改效果。

c)        模板制定成功以后应该有足够的知识开始修改template目录以外的部分了

d)       论坛

i.    建议集成GPL的phpbb,参考。

ii.    集成Discuz

1.   建议购买商业许可。

2.   参考/web/include/login-discuz.php

e)        比赛根据数据通过率排名,而不只看AC数量

i.             数据库solution表pass_rate字段表示改条通过率。

ii.             把contestrank.php中的solved字段变成浮点对待。

iii.            这里,修改积分方式,按照希望的方式积分。可能需要给TM增加字段$p_wa_best_rate记录每题最大通过率。

f)        对有志于重写整个前台的勇士

i.             希望你选择一种魔法师编程语言(node.js/ror/python/go)。

ii.             如果做不到前面那条,请做好长时间开发的心理准备。

iii.             理论上任何现存web编程模型都可以,推荐JSP/SSH(前方高能坑……)。

iv.             建议实现admin/problem_judge.php的仿真,方便直接集成原版core。(get/post/ servlet-mapping)

2、 Core部分

a)        阅读配置文件,弄清各设置含义

i.    参考


judge.conf  不要复制下面的注释进入实际文件,judged和judge_client不能识别#注释。

OJ_HOST_NAME=127.0.0.1 #mysql host ip
OJ_USER_NAME=root #mysql host username
OJ_PASSWORD=root #mysql host password
OJ_DB_NAME=jol #mysql DB name
OJ_PORT_NUMBER=3306 #mysql port
OJ_RUNNING=4 #max concurrent threads number of judge_client
OJ_SLEEP_TIME=5 #judged work interval
OJ_TOTAL=1 #Deprecated: total number of judged (hosts/processes)
OJ_MOD=0 #Deprecated: the number of this judged(host)
OJ_JAVA_TIME_BONUS=2 #java's extral time
OJ_JAVA_MEMORY_BONUS=512 #java's extral memory
OJ_SIM_ENABLE=0 #using sim
OJ_HTTP_JUDGE=0 #using http link to database(if enabled,mysql is not used anymore)
OJ_HTTP_BASEURL=http://127.0.0.1/JudgeOnline #http link basedir
OJ_HTTP_USERNAME=admin #account in db that has http_judge privilege
OJ_HTTP_PASSWORD=admin #password of this account
OJ_OI_MODE=0 #using oi (Olympiad in Informatics) mode
OJ_SHM_RUN=0 #using /dev/shm for fast running & low harddisk wear
OJ_USE_MAX_TIME=0 #use the max time of all testcase rather than total time
OJ_LANG_SET=0,1,2,3,4 #selective judge solution of languagesOJ_HOST_NAME=127.0.0.1 如果用mysql连接读取数据库,数据库的主机地址
OJ_USER_NAME=root 数据库帐号
OJ_PASSWORD=root 数据库密码
OJ_DB_NAME=jol 数据库名称
OJ_PORT_NUMBER=3306 数据库端口
OJ_RUNNING=4 judged会启动judge_client判题,这里规定最多同时运行几个judge_client
OJ_SLEEP_TIME=5 judged通过轮询数据库发现新任务,轮询间隔的休息时间,单位秒
OJ_TOTAL=1 老式并发处理中总的judged数量
OJ_MOD=0 老式并发处理中,本judged负责处理solution_id按照TOTAL取模后余数为几的任务。
OJ_JAVA_TIME_BONUS=2 Java等虚拟机语言获得的额外运行时间。
OJ_JAVA_MEMORY_BONUS=512 Java等虚拟机语言获得的额外内存。
OJ_SIM_ENABLE=0 是否使用sim进行代码相似度的检测
OJ_HTTP_JUDGE=0 是否使用HTTP方式连接数据库,如果启用,则前面的HOST_NAME等设置忽略。
OJ_HTTP_BASEURL=http://127.0.0.1/JudgeOnline 使用HTTP方式连接数据库的基础地址,就是OJ的首页地址。
OJ_HTTP_USERNAME=admin 使用HTTP方式所用的用户帐号(HTTP_JUDGE权限),该帐号登录时不能启用VCODE图形验证码,但可以登录成功后启用。
OJ_HTTP_PASSWORD=admin 密码
OJ_OI_MODE=0 是否启用OI模式,即无论是否出错都继续判剩余的数据,在ACM比赛中一旦出错就停止运行。
OJ_SHM_RUN=0 是否使用/dev/shm的共享内存虚拟磁盘来运行答案,如果启用能提高判题速度,但需要较多内存。
OJ_USE_MAX_TIME=1 是否使用所有测试数据中最大的运行时间作为最后运行时间,如果不启用则以所有测试数据的总时间作为超时判断依据。
OJ_LANG_SET=0,1,2,3,4 #判哪些语言的题目

OJ_COMPILE_CHROOT=0  是否在编译时使用chroot环境,避免某些编译期攻击。

OJ_TURBO_MODE=0 是否放弃用户表和问题表的数据一致性,以在大型比赛中添加更多的判题机来提高判题速度。

ii.      源码https://github.com/zhblue/hustoj/blob/master/trunk/core/judge_client/

b)       查阅Linux文档中关于下述关键词的内容

i.  Ptrace

ii.  Chroot

iii. Setuid

iv.  Proc

v. shm

c)        所有API限定在okcalls.h

d)       代码查重工具sim

i.   https://github.com/zhblue/hustoj/tree/master/trunk/core/sim

e)        对于计划改造Core来适应你自己的OJ前台的朋友

i. 参考1.c.iv

ii. 在judge_client.cc中搜索关键词wget

f)        HUSTOJ的沙箱模型

i.  相对openjudge.net的sandbox libraries而言并不严谨

ii.  对于OJ而言,基本满足需求

iii.  容易理解、容易实现、容易修改

f) 莫名其妙的Runtime Error,请点击RuntimeError打开详细信息,并做英译汉。

对于okcalls23/64.h进行修改,请只修改符合你的操作系统架构(32位/64位)的那个,0只能在首位,末尾必须为0。非0callid请加在中间任意位置。

CSDN网友的源码注释

http://blog.csdn.net/legan/article/details/40746829

http://blog.csdn.net/legan/article/details/40789939