DataStructure项目总结

版权声明:本文为博主原创文章,转载请注明出处,谢谢 https://blog.csdn.net/LLittleF/article/details/78116797

DataStructure是一个在线编程的网站,主要针对的是c语言。这个项目的框架目前已经搭好,基本功能(注册登录-提交代码-服务器编译运行-查看结果)已经实现,只是题库太小。在开发过程中也碰到了许多头疼的问题,现在一一列出,做个小总结。

适合web的编辑器

我一开始做这个项目的时候,最先想到的就是用户体验。因为技术有限,不可能做的面面俱到,但能做的还是尽量去做。既然是在线编程,肯定要有一个看得过去的编辑器,在这里我使用了CodeMirror编辑器,性能方面很不错,用起来也很舒服,还有各种漂亮的主题。配置起来也很容易,还有一些不知道怎么配置的地方,直接去修改了源文件的css,总之用起来很方便。这里写图片描述

死循环的代码

所有的代码都要在服务器中跑,因为技术有限,所以暂时做了个单线程的,同一时刻只有一个程序在跑。但是这样就有一个非常头疼的问题,如果有哪个同学提交的代码中有死循环,那么就会造成阻塞。暂时用了一个看上去有点笨的法子:服务器的程序是由java调用Linux命令来编译运行的,在运行程序的时候,另起一个线程,该线程用来记录程序运行的时间,如果超过一定的时间还没结束,就会终止命令的执行。(这个地方有个坑,因为服务器太渣,所以某些递归程序偶尔也会被当成死循环kill掉)

爆内存的jvm

服务器端的程序持续的读取数据库,如果发现有新提交的代码,就会提出来生成c文件然后编译运行,所以java程序是一直跑着的。那么问题就来了,不知道为什么,程序每运行一定的时间就会崩溃,后台查看了一下内存使用情况,发现应该是jvm的内存被程序占满了导致程序崩溃这里写图片描述

经过仔细的排查,终于发现是因为PreparedStatement和ResultSet两个类实例化的对象在使用完后没有被关闭(有的时候不能太依靠gc了),加上close()之后,成功解决。

遗留的问题

  • c语言的指针过于灵活,使得在服务器端运行c程序很不安全,这里暂时没找到合适的解决方法
  • 网站在维护的时候需要手动添加一些文件,比较麻烦且不优雅。
  • 没有做个人中心一类的页面。

猜你喜欢

转载自blog.csdn.net/LLittleF/article/details/78116797