- 博客(21)
- 收藏
- 关注
原创 Online OJ项目
项目地址:https://gitee.com/Wsj123789/oj-online-judge本项目是一个功能完善的在线判题系统(Online Judge),采用前后端分离架构,支持代码提交、自动判题、AI辅助判题、竞赛管理、题组管理等功能。系统集成了先进的AI技术,实现了AI判题、错误分析、智能提示等创新功能。
2026-03-22 15:52:30
399
原创 关于开源代码沙箱judge0部署的一些问题
沙盒环境,是为传统的 cgroup v1 设计的,而现代 Linux 系统(如 Ubuntu 21.10+、RHEL 9+、Amazon Linux 2023 等)默认启用的是 cgroup v2。这两者的核心差异导致 Judge0 无法正常工作。这时再重新启动容器进行测试,就可以正确获取到测试结果了。但是结果却是这样的:显示无法找到文件。按照官网配置好进行数据的测试。造成这个错误的根本原因就是。这里主要讲一下我遇到的问题。Judge0 底层依赖的。发送请求获取token。根据token查询结果。
2026-03-15 18:44:16
55
原创 Redis学习
在释放锁的过程中,判断和释放是分开进行的,如果在判断之后线程在释放锁的时候宕机,锁过期释放,这时其他线程进入,重新设置锁,线程苏醒后继续执行释放锁的操作,这样就会误删其他线程的锁,造成并发问题。如果线程A枷锁后遇到了阻塞,锁自动过期,这时其他线程进入,加锁执行业务逻辑,这时线程A恢复,也执行业务逻辑,最后把线程B的锁释放,这时其他线程会涌入,导致并发问题。原先逻辑:查询优惠券信息,判断是否过期,库存是否充足,通过redissonClient对象指定锁名并设置锁,获取创建订单,库存删减的代理对象,执行方法。
2026-02-09 21:18:18
355
原创 RocketMQ知识点梳理
启动时先跟 NameServer 集群中的其中一台建立长连接,并从 NameServer 中获取当前发送的 Topic存在于哪些 Broker 上,轮询从队列列表中选择一个队列,然后与队列所在的 Broker建立长连接从而向 Broker发消息。在实际开发中我们往往遇到这样的情况:用户在下单时会经过一系列有顺序的过程:获取订单状态,修改订单,这些顺序是不能颠倒的,但是消息在发送时会随机向一个主题的多个队列中填充,不能保证消息的顺序,而且消费者在消费时默认是多线程,消费的顺序也不一样。启动 Broker。
2026-01-03 21:47:49
1060
原创 红黑树主要功能实现
int data;// 或 typedef rb_treeNode* Rb_treeNode;由于是初始模板,暂且定义数据类型为int,后续会通过泛型进行优化。
2026-01-03 21:45:21
821
原创 手写Spring框架(3):实现MVC
对于一个Web应用程序来说,启动时,应用程序本身只是一个war包,并没有main()方法,因此,启动时执行的是Server的main()方法。main()xyz.warxyz.warxyz.war详细流程:Tomcat启动,创建ServletContext,解析web.xml文件,找到ServletContextListener,调用里面的方法在contextInitialized(ServletContextEvent sce);
2025-12-02 15:22:50
791
原创 手写Spring(1):IOC容器创建
但是如果我们按照名字查找Bean的话,只能返回一个实例或者无实例,使用上存在一定的局限,但如果按照类查询的话,无法定义以class为键的Map类型,因为可能声明类型和实际类型不一定相符,如果不进行标注,可能返回多个实例。我们可以定义BeanDefinitiin这样一个类来管理Bean的信息,包括:名称,声明类型,构造器方法,工厂方法名称,工厂方法,声明类型,Bean的实例,Bean的顺序,对外提供工厂方法和构造器方法的有参构造。如果遇到重复的Bean,说明之前的Bean还没创建完成,也就说明有了循环依赖。
2025-12-01 17:49:46
834
原创 SpringMVC
浏览器发送请求,请求地址符合url-pattern,请求会被DispatcherServlet处理,前端控制器读取核心配置文件,扫描组件找到控制器,将请求地址和控制器的value属性进行匹配,如果匹配成功,视图名称被视图解析器解析,加上前缀和后缀组成路径,转发到视图对应页面。内存储和共享数据的对象。若配置多个拦截器,prehandle()执行顺序为在配置文件中的顺序,底层将自定义的拦截器和SpringMVC自带的拦截器按照顺序放在一个数组中,依靠循环输出拦截器中的prehandle()方法,
2025-11-24 17:05:24
467
原创 Vue以及ElementPlus学习
javascript// 方法定义// 事件绑定<el-button @click="remove(index)">- 删除</el-button>ES6+ 语法:箭头函数、解构赋值、模板字符串模块化:import/export 模块导入导出Promise 和异步编程:async/await 错误处理数组方法对象操作:属性访问、方法调用条件判断:if/else、三元运算符函数作用域:闭包、this 指向事件循环:宏任务、微任务执行顺序。
2025-11-09 21:36:20
794
原创 Docker学习
镜像结构linux环境安装JDK,配置JDK环境变量拷贝jar包设置启动脚本java应用每次操作形成新的一层Dockerfile文件用固定的指令描述镜像的结构和构建过程//配置ping工具# 添加 JDK 到镜像中# 设置环境变量# 创建应用目录# 复制应用 JAR 文件到容器# 暴露端口# 运行命令构建镜像docker build -t 镜像名 Dockerfile目录。
2025-11-09 21:34:13
998
原创 贪心算法练习
在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n−1 次合并之后, 就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。
2025-11-01 20:16:59
262
原创 Spring初识
例如统计一个方法的执行时间,如果没有Aop,我们必须在每个方法执行前后记录时间,最后相减,这样不仅工程量巨大,而且可。执行流程:用户登陆后获取Token,存储用户的id和姓名,再次请求访问进行操作时,拦截器拦截。描到Aop类以及目标类,创建动态代理,IOC容器中放入代理类,程序运行过程中,控制层中会注。事务是一组操作的集合,是一个不可分割的工作单位,这组操作要么全部成功,要么全部失败。入代理类的依赖,目标类执行完后,继续返回Aop类中执行下一步操作。位置:业务层的方法上,类上,接口上(主要是方法上)
2025-11-01 20:11:21
664
原创 BFS题目
呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 ii层楼(1≤i≤N1≤i≤N)上有一个数字 KiK**i(0≤Ki≤N0≤K**i≤N电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如: 3,3,1,2,53,3,1,2,5 代表了 KiK**i(K1=3K1=3,K2=3K2=3,……),从 11 楼开始。
2025-05-26 17:03:07
384
原创 编程判断主机字节序
1.1 超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题。按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储,下面是具体的概念:大小端描述的对象是低位字节 ⼤端(存储)模式:是指数据的内容保存在内存的,⽽数据的高位字节内容,保存在内存的低地址处。(低位数——高地址)小端(存储)模式:是指数据的内容保存在内存的处,⽽数据的内容,保存在内存的处。(低位数——低地址)如图所示,44属于低位字节,所以在小端模式中被保存在低地址中,从左到右依次以低地址到高地址的顺序保存33,22,11;
2024-11-19 16:35:26
412
原创 VA,IMAGEBase,RVA,FA初步了解
原因在于,PE文件(主要是DLL(DLL,Dynamic Linked Library))加载到进程虚拟内存的特定位置时,该位置可能已经加载了其它PE文件(DLL)。此时必须通过重定位(Relocation)将其加载到其它空白的位置,若PE头信息使用的是VA,则无法正常访问。因此,使用RVA来定位信息,即使发生了重定位,只要相对于基准位置的相对地址没有变化,就能正常访问到指定信息,不会出现任何问题。FA(File Address,文件地址):指的是可执行文件在存储设备(如硬盘)上的地址。
2024-11-19 15:50:34
339
原创 pe文件系统初步学习
DOS头中声明用的寄存器(我们可以看到e_ss、e_sp、e_ip、e_cs还是16位的寄存器),所以在32位/64为系统中用到的只有两个成员了(第一个和最后一个): ①:判断一个文件是不是PE文件;②:相对于文件首的偏移量,用于找到PE头;64字节(共4行)的DOS头,第一个成员2个字节是可执行文件的标志信息;最后一个成员4字节是PE头的偏移地址为00000100H。
2024-11-17 11:07:51
304
原创 逆向部分题目初步了解
打开ida,找到main函数,看到sub加密函数,点开发现base编码表顺序颠倒,直接使用python中的maketrans()函数进行转换,再对main函数中的字符串进行解密。由strcmp函数得s1,s2需要相同才能正确输出,点击s2,得到字符串,发现是base64加密,且编码表顺序正确,所以只需对其进行解密即可。解密时为enc = urllib.parse.unquote(enc) # 有关key的一大串直接放进来,然后对flag进行异或,得出答案。脱壳成功,打开ida,找到flag。
2024-11-17 10:31:13
232
原创 NSSCTF题目操作
查壳发现无壳,打开ida,找到main函数,用‘R’替换ASCLL码值可知flag 为循环加密,解密时需把e,3;a,4位置互换得到flag。
2024-11-10 13:50:21
343
原创 C语言函数调用栈/Linux命令初步学习
此时被调函数帧基指针指向被调函数的栈底。以该地址为基准,向上(栈底方向)可获取主调函数的返回地址、参数值,向下(栈顶方向)能获取被调函数的局部变量值,而该地址处又存放着上一层主调函数的帧基指针值。在函数完成现场保护之类的初始化工作后,ESP会始终指向当前函数栈帧的栈顶,此时,若当前函数又调用另一个函数,则会将此时的EBP视为旧EBP压栈,而与新调用函数有关的内容会从当前ESP所指向位置开始压栈。此外,被调函数必须保持寄存器%ebp和%esp,并在函数返回后将其恢复到调用前的值,亦即必须恢复主调函数的栈帧。
2024-10-29 20:50:56
1067
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅