在线OJ项目

news2024/12/22 19:39:32

1.在线OJ-背景介绍

在线的网页版的编程平台.,打开一个网站,上面就能看到很多的算法题.,在线做题,在线提交.立即就能看到运行结果,是否通过.

leetcode 牛客等

一个在线OJ平台,核心功能:

  1. 能够管理题目(保存很多的题目信息:题干+测试用例)
  2. 题目列表页:能够展示题目列表
  3. 题目详情页:能够展示某个题的详细信息+代码编辑框~
  4. 提交并运行题目:详情页中有一个"提交”按钮.点击按钮网页就会把当前的代码给提交到服务器上.服务器就会执行代码,并且就会给出一些是否通过用例的结果
  5. 查看运行结果:有另外一个结果页面,能展示上次提交的是否通过,以及错误的用例信息~这里也会提供一些历史提交记录就更好了~ 

2.项目效果演示

3.创建项目(项目配置)

4.IO流对象

IO流操作文件的代码.在Java 中,操作文件(读写)通过IO流相关的类来实现的Java标准库中,对于IO的操作提供了很多现成的类.这些类放在java.io这个包里~:标准库中的这些类,大概可以分成两大类~

  • —大类是操作字节的(以字节为单位进行读写的)
  • —大类是操作字符的(以字符为单位进行读写的)

字节8个bit位.(表示存储空间的基本单位了)字符表示一个"文字符号",一个字符可能是由多个字节构成的.因此就需要根据文件类型,来决定是按照字节操作还是字符操作.有的文件是二进制文件(这种就需要按照字节来操作)有的文件是文本文件(这种就需要按照字符来操作)怎么去区分一个文件是文本,还是二进制呢?(简单的办法,使用记事本打开,看看是不是乱码.如果是乱码,二进制文件.如果不乱码,就是文本文件)因为记事本是默认按照文本的方式来打开解析文件的. 

  • 针对字节为单位进行读写的类,统称为“字节流"字节流: InputStream, FilelnputStream, OutputStream, FileOutputStream
  • 针对字符为单位进行读写的类,统称为“字符流"字符流: Reader,FileReader, Writer,FileWriter 

5.读写文件简单示例 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestFile {
    public static void main(String[] args) throws IOException {
        String srcPath = "C:\\Users\\Administrator\\Desktop\\project_test\\online_oj_servlet\\test1.txt";
        String destPath = "C:\\Users\\Administrator\\Desktop\\project_test\\online_oj_servlet\\test2.txt";

        FileInputStream fileInputStream = new FileInputStream(srcPath);
        FileOutputStream fileOutputStream = new FileOutputStream(destPath);

        while (true) {
            int ch = fileInputStream.read();
            if(ch == -1){
                break;
            }
            fileOutputStream.write(ch);
        }

        fileInputStream.close();
        fileOutputStream.close();
    }
}

当在main方法上加上IOException的声明的时候, FileNotFoundException就不见了~因为FileNotFoundException 也是一种IOException (is-a,FileNotFoundException就是IOException的子类)使用throws lOException,就能涵盖FileNotFoundException .一个进程能够同时打开的文件个数是存在上限的!!(受限于操作系统内核里面的实现.对Linux.来说,进程PCB中存在一个属性,文件描述符表.大小是存在上限的)Linux中可以通过ulimit命令来查看/修改进程能够支持的最大文件个数.)

6.进程和线程

进程也可以称为是"任务",操作系统要想执行一个具体的"动作"就需要创建出一个对应的进程.一个程序没有运行的时候,仅仅是一个"可执行文件"一个程序跑起来了,就变成一个进程了。为了实现"并发编程"(同时执行多个任务)就引入了"多进程编程",把一个很大的任务,拆分成若干个很小的任务,创建多个进程,每个进程分别负责其中的一部分任务也带来一个问题:创建/销毁进程,比较重量(比较低效),就又引入了线程~每个线程都是一个独立的执行流.一个进程包含了一个或者多个线程~创建线程/销毁线程比创建进程/销毁进程更高效.因此, Java圈子里,大部分的并发编程都是通过多线程的方式来实现的~~进程相比于线程的优势:进程的"独立性"操作系统上,同一时刻运行着很多个进程~
如果某个进程挂了,不会影响到其他进程. (每个进程有各自的地址空间)相比之下,由于多个线程之间,共用着同一个进程的地址空间,某个线程挂了,就很可能会把整个进程带走.
在线OJ:
有一个服务器进程.(运行着Servlet,接收用户的请求,返回响应...)用户提交的代码,其实也是一个独立的逻辑~这个逻辑是使用多线程执行好,还是多进程呢?对于这里用户提交的代码,一定是要通过"多进程"的方式来执行的!!!因为我们无法控制用户到底提交了啥代码!!!代码很可能是存在问题的,很可能一运行就崩溃的!!如果使用多线程,就会导致用户代码直接把整个服务器进程都给带走了的糟糕情况~

7.java多进程编程(1)-进程创建

Java中进行多进程编程.多进程编程主要要做的事情:站在操作系统的角度(以Linux为例)提供了很多的和多进程编程相关的接口.进程创建,进程终止,进程等待,进程程序替换,进程间通信.....(C++方向要学习的内容)谈到多进程,经常会涉及到"父进程,子进程"但是对于多线程,就没有"父线程,子线程"这种说法.

而在Java中对系统提供的这些操作进行了限制,最终给用户只提供了两个操作

  • 进程创建:创建出一个新的进程.让这个新的进程来执行一系列的任务.~被创建出来的进程,称为"子进程",创建子进程的进程,称为“父进程"咱们的服务器进程,就相当于父进程.根据收到的用户发送过来的代码,再创建出子进程.一个父进程,可以有多个子进程.但是一个子进程,只能有一个父进程.
  • 进程等待.

8.java多进程编程(2)-环境变量

装jdk的时候,因该配置好了.出不来以下界面,配置一下jdk的环境变量

 

 

 

 

 

9.java多进程编程(3)-获取标准输出和标准错误

一个进程在启动的时候,就会自动打开三个文件:

  • 标准输入对应到键盘.
  • 标准输出对应到显示器.
  • 标准错误对应到显示器.

虽然子进程启动后同样也打开了这三个文件,但是由于子进程没有和IDEA的终端关联.因此在IDEA中是看不到子进程的输出的.要想获取到输出,就需要在代码中手动获取到.~ 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/726356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA软核调试方法

软核工程创建步骤 创建如下工程目录 bin目录:存放SDK工程生成的elf文件(Release编译模式) hdf目录:存放fpga工程师提供的的hdf文件 prj目录:工程目录(包含SDK工程源码) doc目录:文档目录 基于2018.2版本SDK建立工程 打开Xil…

Spring Boot中的CSRF攻击及预防

Spring Boot中的CSRF攻击及预防 什么是CSRF攻击? CSRF(Cross-site Request Forgery)跨站请求伪造,也称为“one-click attack”或“session riding”,是一种网络攻击方式,攻击者通过在受害者浏览器上欺骗或…

【redis】生产级部署

目录 环境部署 redis环境部署 redis多实例配置 构建redis cluster集群 cluster生产集群部署 Cluster集群故障切换 环境部署 1 、关闭防火墙 2 、准备两台虚拟机配置内容如下 redis-master 192.168.108.67 7000 redis-master01 7001 redis-master02 7002 redis-ma…

Vue2.0-3.0 入门到实战 - 初始及插件安装

1 创建view实例,初始化渲染 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><div id"app">{{ msg }} </div><script type&…

第123天:内网安全-域防火墙入站出站规则不出网隧道上线组策略对象同步

#知识点&#xff1a; 0、防火墙组策略对象 1、OSI七层协议模型 2、正反向监听器说明 3、隧道技术分层协议 4、CS&MSF&控制上线-隧道技术&#xff1a;解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; -代理技术&#xff1a;解决网络通讯不通…

arduino平台控制直流电机PID速度闭环控制编程实现

PID&#xff08;Proportional-Integral-Derivative&#xff0c;比例-积分-微分&#xff09;控制是一种常用的控制算法&#xff0c;可以用于实现直流有刷电机的速度闭环控制。PID控制器根据当前的误差&#xff08;期望速度与实际速度之差&#xff09;来计算输出&#xff0c;以调…

RabbitMQ系列(15)--死信队列的简介与死信队列和死信消费者的实现

1、死信的概念 死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;一般来说producer&#xff08;生产者&#xff09;将消息投递到broker或直接放到queue&#xff08;队列&#xff09;中&#xff0c;consumer&#xff08;消费者&#xff09;从queue&#xff08;队列&am…

Css基础:盒子模型

1.盒子模型的构成&#xff1a; 边框 外边距 内边距 实际内容 2.table表格的单元格之间的线太粗需要border-collapse:collapse;合并一下边框宽度 3.内边距 padding 4.外边距 margin 块元素水平居中的做法&#xff0c;margin:0 auto; 行内元素和行内块元素 水平居中做…

FreeRTOS ~(五)队列的常规使用 ~ (2/5)队列解决互斥缺陷

前情提要 FreeRTOS ~&#xff08;四&#xff09;同步互斥与通信 ~ &#xff08;2/3&#xff09;互斥的缺陷 举例子说明&#xff1a;利用队列解决前述的"互斥的缺陷"问题 static QueueHandle_t xQueueUARTHandle;/* 利用队列的写数据和读数据来做类似标志位的工作,类…

C++笔记之数组拷贝和vector拷贝

C笔记之数组拷贝和vector拷贝 code review! 文章目录 C笔记之数组拷贝和vector拷贝一.C数组拷贝1.使用循环2.使用std::copy算法3.使用std::array 二.C语言数组拷贝1.使用循环2.使用memcpy函数3.使用for循环和指针 三.CVector拷贝四.公众号&#xff1a;三戒纪元 博文摘抄——C…

Dynamsoft 条形码阅读器 10.0.0 Crack

Dynamsoft 条形码阅读器 10.0.0 将来自不同来源的图像数据转换为标准输入图像数据。 7月 06&#xff0c; 2023 - 10&#xff1a;32新版本 特征 SDK经过重构&#xff0c;与DynamsoftCaptureVision&#xff08;DCV&#xff09;架构集成&#xff0c;该架构包括&#xff1a; ImageS…

提升车道运行效率——远眺智慧可变车道控制系统

精细科学的交通组织是提升道路通行效率的有效途径。可变导向车道&#xff08;后文简称可变车道&#xff09;作为精细化交通组织的重要手段&#xff0c;能够有效地利用现有道路空间资源、提高道路通行效率。在交通拥堵日趋严重的情况下&#xff0c;其在保障交通畅通方面起着重要…

Cisco AnyConnect Secure Mobility Client 4.10.07062 (macOS, Linux, Windows)

Cisco AnyConnect Secure Mobility Client 4.10.07062 (macOS, Linux, Windows) Cisco Secure Client&#xff08;包括 AnyConnect&#xff09; 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-anyconnect-4/&#xff0c;查看最新版。原创作品&#xff0c;转载请保…

warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library

1>LINK : warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突&#xff1b;请使用 /NODEFAULTLIB:library 1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突&#xff1b;请使用 /NODEFAULTLIB:library 知识背景&#xff1a; VC中有4个CRT链接库版…

java项目之九宫格日志网站(ssm+jsp+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的九宫格日志网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&#x…

读发布!设计与部署稳定的分布式系统(第2版)笔记21_实例层之配置

1. 导致运维失误的两大因素 1.1. 隐秘的连锁反应 1.2. 暗藏的高复杂度 1.3. 影响着配置属性 2. 配置 2.1. 配置属性是系统用户接口的一部分&#xff0c;供支持其开发和运维的人员使用 2.1.1. 最易被忽视 2.2. 生产级别的软件都有大量可配置的属性 2.2.1. 主机名 2.2.2…

el-breadcrumb面包屑详解

el-breadcrumb面包屑详解 封装面包屑组件 <template><div class"crumb"><el-breadcrumb separator"/"><template v-for"(item,index) in levelList"><el-breadcrumb-item :key"item_ index">{{item.na…

SQL Server 2012数据库允许远程连接设置

1、打开 SQL Server Management Studio 2、打开 Security 按照如下设置&#xff0c;然后点确定 3、打开SQL Server Configuration ManagerMent 4、如下图都设置为Enabled 6、sql server重启

寻找最佳同步云盘:如何选择适合您的高效、可靠的云端存储方案?

同步云盘是集备份、同步、共享于一体的软件&#xff0c;备受用户青睐。在这个信息化的时代&#xff0c;我们经常需要在不同的设备之间共享文件&#xff0c;而同步云盘正可以帮助我们在多台设备之间同步文件。不过目前市面上同步云盘众多&#xff0c;我们该如何选择同步云盘呢&a…

JMeter常用业务知识和组件(5)

这里写目录标题 一、信息头管理器1案例、测试开发平台登录接口2案例、测试平台获取测试用例接口 二、HTTP请求默认值案例1&#xff1a;实现登录接口测试 三、Cookie管理器&#xff08;有问题&#xff09;案例1&#xff1a;开源项目TPshop商城登录案例案例2&#xff1a;(有问题)…