专栏首页我要变牛叙利亚风格的在线编程系统

叙利亚风格的在线编程系统

参加过校园招聘机试的你, 在CSDN、牛客网上做过编程题目的你,

肯定都有过在一个web页面输入代码,得到执行结果的经历。聪明如你,有没有想过这种在线编程系统(OJ)是怎么实现的呢?

最近,笔者要做的一项工作是,编写各种demo程序、辅以各种JVM参数测试给出JDK1.8各种参数的建议值。要求给出在linux物理机、虚拟机和docker下的对比测试结果。

接到这个工作后,初步的计划是在windows上写程序,打个jar包,然后放在linux物理机、虚拟机和docker上分别测试。

完成两个demo后,发现这么做的工作量实在太大了,常用JVM参数就有数十个,每个参数都得测试,每个参数编译个jar包,不知道这个工作要做到何年何月。

于是,一个想法产生了, 能不能只编写一次程序,然后一直测试

很自然地想起了那些经历过的在线编程系统。这类系统是如何实现的呢?

其实,仔细想想很简单,Java代码得到结果不就是编译、运行两步么?简单设计下原型:

实现过程中基本没遇上什么难度,

关键代码:

第一步编译:

ProcessBuilder pb = new ProcessBuilder();
//编译文件
pb.command("javac", "-encoding" ,"UTF-8", programInfo.getFileName() + ".java");
pb.directory(new File(programInfo.getFilePath()));
Process compileProcess = pb.start();
int compileStatus = compileProcess.waitFor();
//编译出错
if (compileStatus != 0) {
    String insResult = getResult(compileProcess.getInputStream());
    String errorResult = getResult(compileProcess.getErrorStream());
    return insResult + errorResult;
}

第二步运行:

构造用户输入的运行参数

//构造运行时命令
List<String> commands = new ArrayList<>();
commands.add("java");
if (jvmparas != null) {
    String[] paras = jvmparas.toString().split("\n");
    for (String para : paras) {
        if (para != null) {
            commands.add(para.trim());
        }
    }
}

执行代码

commands.add("TestFile");
ProcessBuilder execPb = new ProcessBuilder();
execPb.command(commands);
execPb.directory(new File(programInfo.getFilePath()));
Process execProcess = execPb.start();
compileProcess.waitFor();
//把结果返回给界面
return  getResult(execProcess.getInputStream())+ getResult(execProcess.getErrorStream());

叙利亚风格UI界面:

运行结果:

构造出错场景

1.编译异常:

2、运行异常:

功能实现难度不大,但是过程还是挺有意思的,感兴趣的可以自行从github下载完整代码,如果你也觉得有点意思点赞、关注走一波。

本文分享自微信公众号 - 你呀不牛(notNiu),作者:不牛

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • VR战争题材影片盘点丨走进VR,原来“战争”离我们如此之近

    VRPinea
  • Anonymous前黑客充当FBI线人,带头攻击多国政府网站

    据新加坡联合早报网报道,一位知名网络黑客充当美国联邦调查局线人,带头指挥数百次网络袭击,入侵巴西、伊朗、巴基斯坦、叙利亚、土耳其等多国的政府网站。...

    安恒信息
  • 大疆,一个征战全球的军火贩子?

    大疆在消费级无人机领域出尽了风头:摄影发烧友把它当做拍照设备,汪峰把它当做泡妞神器,小孩子们把它当做遥控玩具…但在有些人看来,它更是一个让人恐惧的杀人武器! ?...

    机器人网
  • SQL 开发应有的一种思维

    故事主人公是 艾萨克·巴什维斯·辛格,美国犹太人,用希伯来语和意第绪语写作。在 The New York Times 和 Partisan Review 等重大...

    Lenis
  • “黑客”攻陷美联微博“炸毁”白宫诈坏股市

    一个“黑客”团体23日“劫持”美联社微博账户,发布白宫遭炸弹袭击、总统贝拉克·奥巴马受伤的假消息,吓坏投资人,美国股市一度下跌超过100点。 微...

    安恒信息
  • 世界十大黑客组织,来看看他们是如何“改变世界”

    在过去的几年中,网络攻击变得日益频繁、规模也与日俱增。从针对个人电脑的恶作剧逐渐发展为具有一定规模的“活动”,例如对大公司重要数据的盗窃或者使政府网站、非政府...

    哲洛不闹
  • 中国黑客侵入欧洲5国政府电脑系统

    用户1127987
  • 斯诺登称NSA安全项目或误伤普通网络用户

    美国国家安全局(NSA)前雇员爱德华·斯诺登(Edward Snowden)近期表示,美国政府正在推进一个名为“MonsterMind”的信息安...

    安恒信息
  • 12.7 VR扫描:苹果用户福利!冰冷的语言不及面对面地交谈的温暖,没有VR头显照样也能体验VR社交

    VRPinea
  • 零信任才是GPS安全的 “特效药”

    围绕大数据和人工智能时代GPS和地理信息系统GIS相关应用的重要性不断提升,安全问题日益突出,全球卫星定位系统竞争局势正在不断升温。种种迹象表明,GPS正面临一...

    网络安全观
  • [汇总]2013年度全球重、特大网络安全事件回顾

    小编P.S:转眼到了年根儿底下,这一年互联网上实在是不太平,以斯诺登事件为首,各类泄密,后门,监控,拖库事件层出不穷,可算是伤透了我等小白的心,现在让我们跟随g...

    FB客服
  • 前沿 | 国际可视化盛会PacificVis2017的十个精彩案例

    大数据文摘
  • 暮光女主发AI“论文”?维密超模学编程?女神跨界靠干货还是颜值?

    大数据文摘
  • 网站安全防护经验助你一臂之力 防止被黑客攻击

    从今年3月份全世界黑客攻击网站分析局势来看,黑客攻击的网站中中国占有了绝大多数。那麼作为一个公司或是开发公司,如何防止自身的网站黑客攻击,从企业网站建设之初,就...

    技术分享达人
  • 如何解决网站被黑客攻击等问题

    从今年3月份全世界黑客攻击网站分析局势来看,黑客攻击的网站中中国占有了绝大多数。那麼作为一个公司或是开发公司,如何防止自身的网站黑客攻击,从企业网站建设之初,就...

    网站安全专家
  • 用VR的视角让你看看,灾难和化学武器离我们有多近

    VRPinea
  • 黑客3次攻破微软员工邮箱

    微软作为全球最大的软件公司,在Twitter官方账号被攻破后,“叙利亚电子军”日前攻破了微软的员工邮箱系统,公开了多封盗取的邮件。 微软证实了这...

    安恒信息
  • 热点关注 | 疫情让3D博物馆火了,在家“云看展”有多爽?

    ? 博物馆和美术馆近年来已经成为文化产业的“领头羊”,但在疫情影响下,人们不得不待在家中,线下实体商业遭受重创,博物馆也是门庭清冷。好在国内外各大博物馆和美术...

    腾讯文旅
  • 本周AI热点回顾:给Deepfake 假脸做 X-Ray、飞桨助力打造肺炎筛查和预评估AI系统

    换脸,是滥用深度学习的结果之一。自从 Deepfakes、FaceSwap 等应用开源以后,开发者能自己生成各种换脸视频,网络上也开始流传层出不穷的「假视频」。...

    用户1386409

扫码关注云+社区

领取腾讯云代金券