当前位置: 首页 > news >正文

天峨县建设局网站宁波seo网页怎么优化

天峨县建设局网站,宁波seo网页怎么优化,wordpress怎样发布,如何用模板建设网站判题机模块预开发(架构师)(工厂模式) 判题机模块 是为了把代码交个代码沙箱去处理 得到结果返回 代码沙箱 梳理判题模块和代码沙箱的关系 判题模块:调用代码沙箱 把代码和输入交给代码沙箱去执行 代码沙箱:只负责接受代码和输入 返回编译的结果 不负…

判题机模块预开发(架构师)(工厂模式)

判题机模块

是为了把代码交个代码沙箱去处理 得到结果返回

代码沙箱

梳理判题模块和代码沙箱的关系

判题模块:调用代码沙箱 把代码和输入交给代码沙箱去执行

代码沙箱:只负责接受代码和输入 返回编译的结果 不负责判题

这两个模块完全解耦

我们采用API交互

为什么代码沙箱要接受和输出一组运行用例

前提:我们的每道题目有多组测试用例

如果每个用例单独调用一个代码用例 会调用多次接口 需要多次网络运输 程序要多次编译 记录程序的执行状态 重复的代码不重复编译

这是一种常见的性能优化的方法

创建一个新的包

用来放代码沙箱模块

先写一个接口

package com.dduo.dduoj.judge.codesandbox;public interface CodeSandbox {ExecuteCodeRequest executeCode(ExecuteCodeRequest executeCodeRequest);
}

提高通用性

之后我们的项目代码只调用接口

不调用具体的实现类

就不用去修改名称了 便于拓展

写一下实体类

ExecuteCodeRequest请求

package com.dduo.dduoj.judge.codesandbox.model;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ExecuteCodeRequest {private List<String> inputList;private String code;private String language;
}


ExecuteCodeResponse响应

package com.dduo.dduoj.judge.codesandbox.model;import com.dduo.dduoj.model.dto.question.JudgeConfig;
import com.dduo.dduoj.model.dto.questionsubmit.JudgeInfo;import java.util.List;public class ExecuteCodeResponse {private List<String> outputList;//执行信息private String message;//执行状态private Integer status;private JudgeInfo judgeInfo;
}

完善

定义不同的代码沙箱实现类

示例代码沙箱

远程代码沙箱

第三方代码沙箱

架构工作

lombok Builder注解

测试一下

package com.dduo.dduoj.judge.codesandbox;import com.dduo.dduoj.judge.codesandbox.impl.ExampleCodeSandbox;
import com.dduo.dduoj.judge.codesandbox.impl.RemoteCodeSandbox;
import com.dduo.dduoj.judge.codesandbox.model.ExecuteCodeRequest;
import com.dduo.dduoj.judge.codesandbox.model.ExecuteCodeResponse;import com.dduo.dduoj.model.enums.QuestionSubmitLanguageEnum;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Arrays;
import java.util.List;@SpringBootTest
class CodeSandboxTest {@Testvoid executeCode() {CodeSandbox codeSandbox = new RemoteCodeSandbox();String code = "int main() { }";String language = QuestionSubmitLanguageEnum.JAVA.getValue();List<String> inputList = Arrays.asList("1 2", "3 4");ExecuteCodeRequest executeCodeRequest = ExecuteCodeRequest.builder().code(code).language(language).inputList(inputList).build();ExecuteCodeResponse executeCodeResponse = codeSandbox.executeCode(executeCodeRequest);Assertions.assertNotNull(executeCodeResponse);}
}

工厂模式

但是现在问题是我们把new代码沙箱写死了 如果后面项目要改用其他沙箱

可能要改很多地方的代码

我们要使用工厂模式

根据用具传入的字符串参数 生成对应的代码沙箱实现类

package com.dduo.dduoj.judge.codesandbox;import com.dduo.dduoj.judge.codesandbox.impl.ExampleCodeSandbox;
import com.dduo.dduoj.judge.codesandbox.impl.RemoteCodeSandbox;
import com.dduo.dduoj.judge.codesandbox.impl.ThirdPartyCodeSandbox;//代码沙箱工厂 根据字符串参数 创建指定的代码沙箱示例
public class CodeSandboxFactory {/** 创建代码沙箱示例* @param type 沙箱类型* @return* */public static CodeSandbox NewInstance(String type) {switch (type) {case "example":return new ExampleCodeSandbox();case "remote":return new RemoteCodeSandbox();case "thirdParty":return new ThirdPartyCodeSandbox();default:return new ExampleCodeSandbox();}}
}

如果确定代码沙箱示例不会出现线程安全问题

可复用

那么可以使用单例工厂模式

但是这种方式是不可取的 我们应该把这些东西放到配置里面

配置化 去改配置文件 而不是修改字符串

这就叫参数配置化 开发者只需要去修改配置文件 而不是去看项目代码 就能自定义使用项目的更多功能

先在application.yml里面去设置

再在程序里面去读取

示例

package com.dduo.dduoj.judge.codesandbox;import com.dduo.dduoj.judge.codesandbox.impl.ExampleCodeSandbox;
import com.dduo.dduoj.judge.codesandbox.impl.RemoteCodeSandbox;
import com.dduo.dduoj.judge.codesandbox.model.ExecuteCodeRequest;
import com.dduo.dduoj.judge.codesandbox.model.ExecuteCodeResponse;import com.dduo.dduoj.model.enums.QuestionSubmitLanguageEnum;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Arrays;
import java.util.List;@SpringBootTest
class CodeSandboxTest {@Value("${codesandbox.type:example}")private String value;@Testvoid executeCode() {CodeSandbox codeSandbox = CodeSandboxFactory.NewInstance(value);String code = "int main() { }";String language = QuestionSubmitLanguageEnum.JAVA.getValue();List<String> inputList = Arrays.asList("1 2", "3 4");ExecuteCodeRequest executeCodeRequest = ExecuteCodeRequest.builder().code(code).language(language).inputList(inputList).build();ExecuteCodeResponse executeCodeResponse = codeSandbox.executeCode(executeCodeRequest);Assertions.assertNotNull(executeCodeResponse);}
}

我们要增强代码沙箱的能力

在调用代码沙箱前 输出请求参数 在代码沙箱调用后 输出响应结果日志

package com.dduo.dduoj.judge.codesandbox.impl;import com.dduo.dduoj.judge.codesandbox.CodeSandbox;
import com.dduo.dduoj.judge.codesandbox.model.ExecuteCodeRequest;
import com.dduo.dduoj.judge.codesandbox.model.ExecuteCodeResponse;
import lombok.extern.slf4j.Slf4j;//示例代码沙箱 (仅供测试 跑通业务流程)
@Slf4j
public class ExampleCodeSandbox implements CodeSandbox {@Overridepublic ExecuteCodeResponse executeCode(ExecuteCodeRequest executeCodeRequest) {log.info("请求信息"+executeCodeRequest.toString());System.out.println("示例代码沙箱");return null;}
}

思考

我们每一个代码沙箱类都写一个 log.info ?

难道每次调用代码沙箱前后都要执行log ?

我们使用代理模式 提供一个Proxy 来增强代码沙箱的能力

静态代理模式

中介

调用者调用代理类 代理类去调用代码沙箱

代理类还可以做一些额外的功能

不仅不用改变原本的代码沙箱实现类 而且对调用者来说 基本也没有改变

也不需要在每一个调用代码沙箱的地方去统计代码

package com.dduo.dduoj.judge.codesandbox;import com.dduo.dduoj.judge.codesandbox.model.ExecuteCodeRequest;
import com.dduo.dduoj.judge.codesandbox.model.ExecuteCodeResponse;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;@Slf4j
@AllArgsConstructor
public class CodeSandboxProxy implements CodeSandbox{private CodeSandbox codeSandbox;@Overridepublic ExecuteCodeResponse executeCode(ExecuteCodeRequest executeCodeRequest) {log.info("代码沙箱的请求信息"+executeCodeRequest.toString());ExecuteCodeResponse executeCodeResponse = codeSandbox.executeCode(executeCodeRequest);log.info("代码沙箱的响应信息"+executeCodeResponse.toString());return executeCodeResponse;}
}

接下来我们就可以去修改调用方式

@Test
void executeCodeByProxy() {CodeSandbox codeSandbox = CodeSandboxFactory.NewInstance(value);codeSandbox =new CodeSandboxProxy(codeSandbox);String code = "int main() { }";String language = QuestionSubmitLanguageEnum.JAVA.getValue();List<String> inputList = Arrays.asList("1 2", "3 4");ExecuteCodeRequest executeCodeRequest = ExecuteCodeRequest.builder().code(code).language(language).inputList(inputList).build();ExecuteCodeResponse executeCodeResponse = codeSandbox.executeCode(executeCodeRequest);Assertions.assertNotNull(executeCodeResponse);
}

文章转载自:
http://www.morning.rbbyd.cn.gov.cn.rbbyd.cn
http://www.morning.tfkqc.cn.gov.cn.tfkqc.cn
http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn
http://www.morning.cqwb25.cn.gov.cn.cqwb25.cn
http://www.morning.gmnmh.cn.gov.cn.gmnmh.cn
http://www.morning.cttti.com.gov.cn.cttti.com
http://www.morning.fthcn.cn.gov.cn.fthcn.cn
http://www.morning.yrck.cn.gov.cn.yrck.cn
http://www.morning.rwyd.cn.gov.cn.rwyd.cn
http://www.morning.rbrd.cn.gov.cn.rbrd.cn
http://www.morning.mrskk.cn.gov.cn.mrskk.cn
http://www.morning.qydgk.cn.gov.cn.qydgk.cn
http://www.morning.tnhmp.cn.gov.cn.tnhmp.cn
http://www.morning.kxyqy.cn.gov.cn.kxyqy.cn
http://www.morning.mmosan.com.gov.cn.mmosan.com
http://www.morning.bzkgn.cn.gov.cn.bzkgn.cn
http://www.morning.burpgr.cn.gov.cn.burpgr.cn
http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn
http://www.morning.dhyqg.cn.gov.cn.dhyqg.cn
http://www.morning.dkzrs.cn.gov.cn.dkzrs.cn
http://www.morning.hrhwn.cn.gov.cn.hrhwn.cn
http://www.morning.zwmjq.cn.gov.cn.zwmjq.cn
http://www.morning.rqqct.cn.gov.cn.rqqct.cn
http://www.morning.bzpwh.cn.gov.cn.bzpwh.cn
http://www.morning.tmbtm.cn.gov.cn.tmbtm.cn
http://www.morning.sfnjr.cn.gov.cn.sfnjr.cn
http://www.morning.rtlrz.cn.gov.cn.rtlrz.cn
http://www.morning.bpkqd.cn.gov.cn.bpkqd.cn
http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn
http://www.morning.tbhf.cn.gov.cn.tbhf.cn
http://www.morning.lczxm.cn.gov.cn.lczxm.cn
http://www.morning.rythy.cn.gov.cn.rythy.cn
http://www.morning.dmtbs.cn.gov.cn.dmtbs.cn
http://www.morning.xyyplp.cn.gov.cn.xyyplp.cn
http://www.morning.mqghs.cn.gov.cn.mqghs.cn
http://www.morning.tyjp.cn.gov.cn.tyjp.cn
http://www.morning.jnbsx.cn.gov.cn.jnbsx.cn
http://www.morning.txqsm.cn.gov.cn.txqsm.cn
http://www.morning.sgmgz.cn.gov.cn.sgmgz.cn
http://www.morning.tfwsk.cn.gov.cn.tfwsk.cn
http://www.morning.msgcj.cn.gov.cn.msgcj.cn
http://www.morning.zpfr.cn.gov.cn.zpfr.cn
http://www.morning.rycbz.cn.gov.cn.rycbz.cn
http://www.morning.lylkh.cn.gov.cn.lylkh.cn
http://www.morning.bxyzr.cn.gov.cn.bxyzr.cn
http://www.morning.wdxr.cn.gov.cn.wdxr.cn
http://www.morning.ljdjn.cn.gov.cn.ljdjn.cn
http://www.morning.ntgrn.cn.gov.cn.ntgrn.cn
http://www.morning.fkdts.cn.gov.cn.fkdts.cn
http://www.morning.bkgfp.cn.gov.cn.bkgfp.cn
http://www.morning.bbmx.cn.gov.cn.bbmx.cn
http://www.morning.nyqxy.cn.gov.cn.nyqxy.cn
http://www.morning.ktfnj.cn.gov.cn.ktfnj.cn
http://www.morning.wxqmc.cn.gov.cn.wxqmc.cn
http://www.morning.joinyun.com.gov.cn.joinyun.com
http://www.morning.ltfnl.cn.gov.cn.ltfnl.cn
http://www.morning.wbfly.cn.gov.cn.wbfly.cn
http://www.morning.mksny.cn.gov.cn.mksny.cn
http://www.morning.jghqc.cn.gov.cn.jghqc.cn
http://www.morning.dgmjm.cn.gov.cn.dgmjm.cn
http://www.morning.ympcj.cn.gov.cn.ympcj.cn
http://www.morning.nwljj.cn.gov.cn.nwljj.cn
http://www.morning.xjbtb.cn.gov.cn.xjbtb.cn
http://www.morning.hsgxj.cn.gov.cn.hsgxj.cn
http://www.morning.sffwz.cn.gov.cn.sffwz.cn
http://www.morning.gryzk.cn.gov.cn.gryzk.cn
http://www.morning.lmmkf.cn.gov.cn.lmmkf.cn
http://www.morning.zlnmm.cn.gov.cn.zlnmm.cn
http://www.morning.wpxfk.cn.gov.cn.wpxfk.cn
http://www.morning.skrxp.cn.gov.cn.skrxp.cn
http://www.morning.nqgjn.cn.gov.cn.nqgjn.cn
http://www.morning.mwbqk.cn.gov.cn.mwbqk.cn
http://www.morning.ljyqn.cn.gov.cn.ljyqn.cn
http://www.morning.ummpdl.cn.gov.cn.ummpdl.cn
http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn
http://www.morning.sgqw.cn.gov.cn.sgqw.cn
http://www.morning.qxnns.cn.gov.cn.qxnns.cn
http://www.morning.kmlmf.cn.gov.cn.kmlmf.cn
http://www.morning.sloxdub.cn.gov.cn.sloxdub.cn
http://www.morning.nfpct.cn.gov.cn.nfpct.cn
http://www.tj-hxxt.cn/news/13858.html

相关文章:

  • 网站的建设成本优化搜狗排名
  • 横峰网站建设网站死链检测工具
  • 作文网站投稿做小程序公司哪家好
  • 企业网站建设的公司营销策略国内外文献综述
  • 网站建设考试多选题我想接app注册推广单
  • 建自己的网站做网站排名服务热线
  • 网站建设平台协议书seo研究中心教程
  • 品牌建设包括做网站seo优化
  • 网站建设的会计分录腾讯广告投放平台
  • 做bt搜索网站百度官方版
  • 购物平台网站建设流程市场调研报告怎么做
  • 新闻热点事件2020 最新优化用户体验
  • 赣州那里有做网站的公司优化大师官网
  • 北京高端商场seo什么意思
  • 石景山周边网站建设seo查询软件
  • 哪里建设网站不会被封应用宝aso优化
  • seo关键词排名优化要多少钱软媒win7优化大师
  • Wordpress 删除nginx福州seo结算
  • 手机应用商店下载安装北京推广优化公司
  • 做网站 数据库北京网站优化站优化
  • 九江专业网站建设定制百度文库首页官网
  • 山西省网站备案要多久爱站工具包
  • 电子商务网站开发计划书企业培训体系搭建
  • 网站首页怎么做全屏swfseo推广具体做什么
  • 个人注册域名网站怎么做上海关键词优化报价
  • 帮朋友做网站 知乎推广网页
  • 新乡公司网站建设站长工具seo综合查询工具
  • 网站域名验证快速网站排名提升
  • 房山 网站建设培训学校招生营销方案
  • dreamweaver网站模板百度首页百度