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

面经-项目

项目

  • 项目(重点)
    • 问题1:描述在网页中题目点击提交后到题目结果出现的一系列后台反应
      • 【1】如何获取到用户提交的代码的?
      • 【2】_1. 题目细节都有哪些?
      • 【2】_2. 题目信息怎么存储的?
      • 【3】负载均衡算法的实现?
      • 【4】oj_server怎么连接对应的compile_server(编译主机)的?
      • 【5】oj_server怎么把最终结果返回给客户端?
    • 问题2:HTTP底层网络层是如何进行交互的?
    • 问题3:这个项目超时或者占用内存过多报错机制如何实现的?
    • 问题4:介绍一下这个项目
    • 问题5:做这个项目过程中遇到的挑战

项目(重点)

问题1:描述在网页中题目点击提交后到题目结果出现的一系列后台反应


先简要概述:

  1. 请求接收和处理
  • 用户的提交请求通过HTTP发送到oj_server服务器
  • OJ服务模块接收请求并获取到用户提交的代码【1】,调用控制模块进行处理
  1. 代码拼接
  • 控制模块调用model模块获取题目细节【2】,再将用户提交的代码和测试用例代码进行拼接(以JSON字符串进行拼接)
  1. 选择负载最低的主机编译运行代码
    使用RR轮询算法【3】选择负载最低的主机,连接对应主机进行编译运行服务【4】,得到结果后返回给oj_server,oj_server再返回给客户端【5

【1】如何获取到用户提交的代码的?

通过http的post请求拿到包含用户代码(body(josn字符串))的响应正文,响应正文实际上就是一个结构体,再直接用结构体对象直接访问对应的body【这里的body是json字符串】,将body反序列化后就能得到用户代码了
注:(httplib库的json就是string)

【2】_1. 题目细节都有哪些?

  • 题目的编号,唯一
  • 题目的标题
  • 难度:简单,中等,困难
  • 题目的描述
  • 题目预设给用户在线编辑器的代码
  • 题目的测试用例,需要和header拼接,形成完整代码
  • 题目的时间要求(s)
  • 题目的空间要求(kb)

【2】_2. 题目信息怎么存储的?

使用数据库进行存储的,是以题目的编号为主键(number)建的一个题目表


【3】负载均衡算法的实现?

算法类型:基于RR轮询算法

核心逻辑:

  • 遍历所有在线主机,找到当前负载最小的主机。

  • 将请求分配给负载最小的主机。

  • 更新主机的负载计数。

在oj_control.hpp文件中,负载均衡算法主要由LoadBlancer类实现。

LoadBlancer类

     // 可以给我们提供服务的所有主机
        // 每台主机都有自己的下标。充当当前主机的id
        std::vector<Machine> machines;//Machine是一个主机类
        // 所有在线的主机
        std::vector<int> online;
        // 所有离线的主机
        std::vector<int
http://www.dtcms.com/a/99709.html

相关文章:

  • 革新测试管理 2.0丨Storm UTP统一测试管理平台智能化升级与全流程优化
  • HCIP之VRRP
  • 晶晨S905L3A(B)-安卓9.0-开启ADB和ROOT-支持IPTV6-支持外置游戏系统-支持多种无线芯片-支持救砖-完美通刷线刷固件包
  • memtest86检测内存
  • Anaconda Jupyter 默认启动位置修改
  • 矩阵中对角线的遍历问题【C++】
  • JavaScript运算符与逻辑中断
  • 从零到前沿:2025年人工智能系统性学习路径与最新技术融合指南
  • LangChain 基础系列之文档加载与分割详解:从非结构化数据到知识图谱的关键一步
  • ubuntu24 部署vnc server 使用VNC Viewer连接
  • vLLM 实现加速的原理及举例; vLLM 与 TensorRT 的区别
  • C#里使用C#语言作为脚本运行的方法
  • HarmonyOS NEXT——鸿蒙神策埋点(二)
  • 了解遗传算法的Matlab程序的奥妙之处
  • 【记录自己第一个github 100星项目】采用flask框架构建一个前端页面,进行OpenManus的调用,对OpenManus生成的文件进行预览。
  • 使用Python的pytesseract进行网站模拟登录的脚本,主要针对古诗文网(gushiwen.cn)的登录功能。
  • 第十四届蓝桥杯真题(PWM输出)
  • 【Java/数据结构】二叉树(BinaryTree)(图文版)
  • Ubuntu 系统中安装 Nginx
  • 【study】嵌入式软件工程师学习规划
  • The selected directory is not a valid home for Go SDK
  • [C++] STL - string部分函数小合集
  • 晋升系列6:专项提升
  • PHP 包含:深入理解与最佳实践
  • 软件工程面试题(十二)
  • Redisson延迟队列实战:分布式系统中的“时间管理者“
  • day5_Flink基础
  • 前端快速系统学习Rust的路径
  • Python 状态模式
  • 在React中处理API请求和数据