原理分析

在线IDE是一种在线编译环境,它和传统编译环境最大的区别在于前者不需要复杂的客户端及复杂的库。在我们所学习的编程语言中比如Java、python等语言在本地编译是需要安装jdk的。在线编译器完全摆脱了传统的束缚,将所有的库和应用集成到云端的Web Server上面,实现了云计算。而在线IDE实现原理基本和本地开发的原理差不多,只是将所需要的环境集成到了服务器端,用户可以远程使用开发环境进行在线编译。但是在线编译由于开发环境集成到了服务器,像文件操作等一些操作就无法完美实现,这也是一个弊端,但是对于初学者来讲,使用在线编译远比去配置那些复杂的开发环境要方便许多。在线IDE的工作流程大致可以分为这几步,接收代码,编译代码,运行程序,返回结果。

接收代码

接收代码就主要是前端的任务,通过造作DOM元素,将代码整理好之后,将代码通过请求的方式提交给后台。

编译代码

后台接收代码之后,就是将代码转化为可执行的代码文件,不同的语言需要不同的做法,拿java举例,java在运行过程中,需要先将java源文件编译为class文件之后才能成功运行。因此就可以先将前端传来的代码数据保存为一个java文件,再编译成class文件。

// 编译为class文件
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager manager = compiler.getStandardFileManager(null,null,null);
List<File> files = new ArrayList<>();
files.add(new File(targetJavaOutputPath));
Iterable compilationUnits = manager.getJavaFileObjectsFromFiles(files);// 编译
// 设置编译选项,配置class文件输出路径
Iterable<String> options = Arrays.asList("-d",baseOutputDir);
JavaCompiler.CompilationTask task = compiler.getTask(null, manager, null, options, null, compilationUnits);
// 执行编译任务
task.call();

运行程序

当我们将代码编译好之后,就可以用脚本、docker等很多方式去运行代码文件,这里还是以java为例。

// 通过反射得到对象
// Class clazz = Class.forName("com.tommy.core.test.reflect.Test");
// 使用自定义的类加载器加载class
Class clazz = new MyClassLoader(baseOutputDir).loadClass("com.tommy.core.test.reflect.Test");
// 得到构造器
Constructor constructor = clazz.getConstructor(String.class);
// 通过构造器new一个对象
Object test = constructor.newInstance("jack.tsing");
// 得到sayHello方法
Method method = clazz.getMethod("sayHello", String.class);
// 调用sayHello方法
String result = (String) method.invoke(test, "jack.ma");
System.out.println(result);

这是使用代码去执行class文件,并返回结果,这个步骤最重要的就是保留输出结果。这是利用代码来完成,当然也可以使用docker技术去实现这一功能,docker需要的技术就很多了,这里就不做详细的介绍。

返回结果

返回结果还是就是将我们运行代码之后将控制台输出的结果返回给用户,不管是正确运行结果还是报错信息,我们都要一并返回给用户。后台将结果返回给前端,前端通过DOM操作为用户呈现输出结果。

设计思路


图一
关于在线IDE的设计思路如图一所示,总体而言可以分为三层,以下是对各部分进行详细介绍:
(1)、表面层:表面层是提供用户交互,接收用户提交信息以及呈现数据。
(2)、业务逻辑层:业务逻辑层根据语种不同分为不同的子流程,表面层会先判断用户选择的语种,再决定使用哪一个语言处理机。处理机会对表面层提供的代码进行编译运行,并且会返回运行结果传给数据连接层。
(3)、数据连接层:数据连接层接收业务逻辑层运行的结果,并将运行结果做一定的处理,数据库做好记录,并将处理好的数据返回给表面层呈现给用户。
在线IDE涉及到的技术很多,其中最为重要的还是各种语言的基础知识,因为在程序中我们要非常清楚代码运行的每一个步骤,才能通过编程的方式来实现程序文件的运行。

在线IDE的原理及设计思路 以Java为例相关推荐

  1. 自动投票器的原理及设计思路 http://blog.csdn.net/lkfstar/archive/2008/01/12/2039070.aspx

    自动投票器的原理及设计思路 ___________________________罗坤凡 2008-01-12 网络投票和平时浏览网页.登陆邮箱一样,都是客户端和网站服务器之间的通讯过程.客户端发出信 ...

  2. Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结

    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结 1. 微内核与插件的优点1 2. 插件的注册与使用2 2.1. Ioc容器中注册插件2 2.2. 启动器微内核启动3 ...

  3. 数据库连接池的设计思路及java实现

    2019独角兽企业重金招聘Python工程师标准>>> connectionPool.DBConnectionManager [java] view plain copy packa ...

  4. hive中实现行转列_漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

    全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别. 举一个具体的应用场景,来设计并实现一份拉链表,最后并通 ...

  5. 基于界面交互展开的用例设计思路

    测试用例是测试人员日常最重要的输出之一,对用例的评价标准一般有三个维度:结构清晰易读.可执行性强.覆盖度高.站在质量维度,最为重要的要属高覆盖度.如何写出高覆盖度的设计用例,离不开以下几个角度的分析. ...

  6. 基于Java的在线聊天APP系统分析及设计

    基于Java的在线聊天APP系统分析及设计 目录 基于Java的在线聊天APP系统分析及设计 1 一. 需求分析 3 核心用户分析 3 系统的主要功能的概述 3 项目操作流程图 4 功能详解 4 登录 ...

  7. 广西大学编译原理课程设计

    github地址:github地址 Curriculum-design-of-Compilers-Principles 简要介绍:这是由广西大学计算机科学与技术系的三位同学编写的编译原理课程设计.使用 ...

  8. 启动定时器t0的工作指令是_看门狗的工作原理、应用和设计思路

    看门狗(watchdog timer)是一个定时器电路.一般有一个输入叫喂狗,一个输出到MCU的RST端.MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给WDT清零.如果超过规定的时间不喂狗 ...

  9. 基于STM32、FreeRTOS低功耗设计思路和原理

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 如今电池供电的产品很多,电池供电通常设计到一个问题,那就是低功耗. 本文为大家讲讲基于STM32.F ...

  10. PWM模块原理及简单的设计思路

    PWM模块原理及简单的设计思路 1. 什么是PWM信号 PWM可以算是数字电路中的"独臂"神通,"独臂" - 只需一根线:"神通" - 在很 ...

最新文章

  1. OCS 2007 聊天记录查看工具 OCSMessage
  2. springMVC中Dispatcher中的/和/*的区别
  3. geotrellis使用(三十)使用geotrellis读取PostGIS空间数据
  4. 3个多月,近3000人参与的源码共读,诚邀加入~
  5. [置顶] Z-STACK之OSAL_Nv非易失性存储解读上
  6. Hadoop 信息集成平台,让大数据分析更简单!
  7. 用字母表中的位置替换每个字母。
  8. 电视、家庭影院、音响、电影院、中高端声卡测试多声道测试样片
  9. window xp 自动关机命令
  10. linux系统转移到另一个硬盘,(扩展根目录容量方法汇总)把Linux系统迁移到另一个分区或者硬盘...
  11. MVP前奏(二)MVC在Android的小短腿
  12. 震惊!没想到你居然是这样的for循环(UC打钱!)
  13. 免费思维导图软件,收藏
  14. [Linux Shell] su和sudo命令
  15. Java解析Excel 获取文本和图片信息
  16. navicat连接postgresql时报错:authentication method 10 not supported
  17. progress的高级过程调用以及全局变量
  18. 20180301.实现功能:取消关注,移除粉丝
  19. Windows Server 2012 新功能:IPAM 配置
  20. 【已解决】sftp命令没有反应

热门文章

  1. 计算机怎么安装最新系统,组装电脑后如何安装系统
  2. minimax算法(井子棋)
  3. vmware虚拟机安装win11系统教程
  4. 【vulhub】conference
  5. 讨教大学|ASQ黑带考试通关秘籍,纯知识干货分享
  6. 微信小程序转发到朋友圈
  7. 文件太多,台式电脑迁移数据到笔记本怎么操作?
  8. 计算机图片文档怎么着,【电脑知识】怎样将图片转换成word文档
  9. 微信.gif表情包保存到本地
  10. 如何修改域名DNS服务器?修改DNS服务器常见问题汇总