VijosOJ:中文信息学竞赛领域的老牌开源在线判题系统

在中文编程教育与信息学竞赛的发展历程中,在线判题系统(OJ)扮演了至关重要的角色。它们不仅是选手训练的 “战场”,更是知识传递与社区交流的枢纽。VijosOJ(官网地址:vijos.org)作为国内最早的开源在线判题系统之一,自 2005 年诞生以来,见证了中国信息学竞赛的蓬勃发展,陪伴了数代竞赛选手的成长。本文将从历史沿革、功能特性、技术架构、社区生态等多个维度,全面解析 VijosOJ 的发展轨迹与核心价值,探讨其在中文信息学教育领域的独特地位与深远影响。

一、VijosOJ 的起源与发展:二十年的迭代之路

VijosOJ 的诞生与中国信息学竞赛的早期发展紧密相连。2000 年代初,随着 NOIP(全国青少年信息学奥林匹克联赛)的普及,国内对在线判题平台的需求日益迫切。当时,国际上已有 POJ(Peking University Online Judge)等知名平台,但中文资源匮乏、交互体验不足,难以满足国内选手的学习需求。正是在这一背景下,VijosOJ 应运而生。

(一)初创期(2005-2008):学生主导的开源尝试

2005 年,时任杭州学军中学学生的莫涛(网名 “Matrix67”,后成为清华大学计算机系博士,信息学竞赛金牌教练)与几位志同道合的爱好者共同发起了 Vijos 项目。“Vijos” 一词源于 “Virtual Judge System” 的缩写,寓意为虚拟判题系统,早期域名使用vijos.cn,后逐步迁移至vijos.org。

这一阶段的 Vijos 以 “服务信息学竞赛选手” 为核心目标,采用 PHP+MySQL 架构,功能相对简单:支持 C、C++ 语言的程序提交,提供基础的题目管理和判题功能。尽管界面简陋(类似早期论坛风格),但凭借开源免费、中文支持和针对性的题库(以 NOIP 真题为主),迅速吸引了一批核心用户。值得一提的是,Vijos 从诞生之初就坚持开源理念,代码托管于 SourceForge,鼓励用户参与开发,这种社区协作模式为其后续发展奠定了基础。

(二)成长期(2009-2015):功能完善与社区扩张

随着用户量的增长,Vijos 进入快速迭代期。2010 年,团队完成第一次重大重构,引入 Python 作为辅助开发语言,优化判题引擎,支持 Java 等更多编程语言。2012 年,Vijos 推出 “月赛” 机制,每月组织一次线上模拟赛,题目由资深选手或教练原创,难度对标 NOIP 提高组,这一举措极大提升了平台的活跃度。

此阶段,Vijos 的社区生态初步形成。平台增设 “讨论区” 和 “题解库”,用户可分享解题思路、提问答疑,甚至参与题目审核。许多后来的信息学竞赛大牛(如 IOI 金牌得主徐寅展)都曾是 Vijos 的活跃用户,这种 “以老带新” 的社区文化成为 Vijos 的鲜明特色。截至 2015 年,Vijos 注册用户突破 10 万,题库规模达 3000 余题,成为国内影响力仅次于 POJ、洛谷的中文 OJ 平台。

(三)转型期(2016-2020):技术重构与定位调整

2016 年后,随着洛谷、HydroOJ 等新兴 OJ 的崛起,Vijos 面临技术架构老化、用户体验滞后的挑战。为此,团队启动第二次重大重构,采用前后端分离架构(前端 Vue.js,后端 Node.js),优化判题沙箱,提升系统稳定性。2018 年,Vijos 推出 “教学版”,针对中小学信息学课程设计专属功能,如班级管理、作业布置、学情分析,从单纯的竞赛平台向 “竞赛 + 教学” 双轨模式转型。

这一时期,Vijos 与多所重点中学、培训机构达成合作,成为 NOIP 省级联赛的指定练习平台之一。2019 年,Vijos 开源社区迁移至 GitHub(仓库地址:github.com/vijos/vj4),吸引了更多开发者参与维护,累计贡献者超过 50 人。

(四)稳定期(2021 至今):生态深耕与品牌沉淀

近年来,Vijos 专注于生态优化而非大规模功能扩张。团队一方面持续更新题库,新增 NOI 系列赛事真题和国际竞赛(如 ICPC、IOI)的中文翻译版;另一方面强化社区互动,推出 “导师计划”,邀请金牌选手录制解题视频,为新手提供入门指导。截至 2025 年,Vijos 累计注册用户超 30 万,题库总量突破 8000 题,月活跃用户稳定在 5 万以上,仍是中文信息学领域不可或缺的老牌平台。

二、核心功能解析:从竞赛训练到教学辅助的全场景覆盖

VijosOJ 的功能设计始终围绕 “信息学竞赛” 这一核心场景,经过二十年迭代,形成了覆盖 “题目练习 - 竞赛参与 - 社区交流 - 教学管理” 的完整生态。

(一)题目体系:分层分类的题库资源

Vijos 的题库是其核心竞争力之一,具有 “数量多、分类细、针对性强” 的特点。

在题目来源上,涵盖四大类:一是官方赛事真题,包括 NOIP(2001-2024)、NOI(全国青少年信息学奥林匹克竞赛)、CTSC(冬令营)、IOI(国际信息学奥林匹克)的中文翻译题,且保持实时更新;二是原创题目,由 Vijos 社区用户(多为教练或资深选手)贡献,每月新增 10-20 题,侧重对特定算法的深度考察;三是国际 OJ 翻译题,如 Codeforces、AtCoder 的经典题目,由社区志愿者翻译并适配中文语境;四是教学练习题,针对入门选手设计,难度从 “普及 -” 到 “提高 +” 分级,覆盖语法基础、数据结构、算法入门等内容。

在分类方式上,Vijos 采用 “三维标签体系”:一是难度标签,从 1(入门)到 5(省选 / 国赛)星级划分,方便用户按能力选择;二是算法标签,如 “动态规划”“图论”“字符串处理” 等,支持按知识点筛选;三是来源标签,如 “NOIP2023”“Vijos 月赛”“IOI2022”,便于针对性训练。例如,准备 NOIP 提高组的选手可直接筛选 “难度 4 星 + 算法标签 = 动态规划 + 来源 = NOIP 真题” 的题目进行专项突破。

此外,Vijos 的题目详情页包含完整的题面描述(支持 LaTeX 公式和流程图)、输入输出格式样例数据提示与说明(部分题目提供解题思路引导),以及提交记录(显示所有用户的通过率和常见错误),为用户提供全方位的解题支持。

(二)判题系统:稳定兼容的自动化评判

判题系统是 OJ 的核心组件,Vijos 的判题引擎经过多次迭代,在兼容性和稳定性上表现突出。

语言支持方面,Vijos 兼容 C、C++、Java、Python 2/3、Pascal(历史遗留支持)等主流编程语言,其中 C++ 支持 GCC 9.3.0 编译器,Java 支持 JDK 11,Python 支持 3.8 版本,满足不同阶段选手的需求。对于 C++ 选手,系统还支持 STL 全库和 C++17 标准,适配竞赛中的高级语法需求。

判题模式上,Vijos 支持多种评判标准:一是传统模式(对比输出与标准答案的一致性),包括严格模式(完全一致)和模糊模式(忽略空格、换行差异);二是交互模式,用于需要程序与判题机实时交互的题目(如博弈类问题);三是SPJ(Special Judge)模式,通过自定义校验程序评判结果(如输出任意正确解即可),适用于答案不唯一的题目。

判题效率方面,单题平均响应时间为 2-5 秒,支持批量提交排队机制。对于大型竞赛(如同时提交量超 1000 次),系统会自动启用分布式判题节点,避免拥堵。判题结果反馈详细,包括 “Accepted(通过)”“Wrong Answer(答案错误)”“Time Limit Exceeded(超时)”“Memory Limit Exceeded(内存超限)” 等 12 种状态,并显示具体测试点的运行时间和内存占用,帮助用户定位问题。

安全性上,Vijos 采用 Linux 沙箱技术(早期使用 chroot,后期升级为 Namespace)隔离用户程序,限制系统调用和资源访问,防止恶意代码攻击。同时,系统会检测代码中的作弊行为(如硬编码答案),对违规用户进行警告或封号处理。

(三)竞赛系统:模拟实战的赛事平台

竞赛功能是 Vijos 的特色之一,其设计高度贴近正式赛事规则,成为选手赛前模拟的重要工具。

竞赛类型多样,包括:一是公开竞赛,如每月固定举办的 “Vijos 月赛”,面向所有用户开放,题目难度对标 NOIP 提高组,赛后提供题解和排名分析;二是私有竞赛,支持用户创建密码保护的赛事,适用于学校、培训机构的内部测试;三是同步赛,与国际赛事(如 Codeforces Round)同步举行,提供中文题面和独立排名,方便国内选手参与。

竞赛规则支持灵活配置:可设置竞赛时长(1-10 小时)、开始时间、报名方式(公开 / 邀请);支持 ACM 模式(错误提交罚时)和 IOI 模式(按测试点得分);可启用 “封榜”“实时排名”“禁止查看他人代码” 等功能。例如,某中学的信息学集训队使用 Vijos 组织模拟赛时,采用 “3 小时 ACM 模式 + 最后 1 小时封榜” 的规则,完全复刻 NOIP 比赛流程。

赛后分析功能完善,竞赛结束后自动生成排名表(按分数 / 解题数排序),并提供每位选手的提交记录、各题通过率统计、分数分布直方图等数据。教练可下载完整成绩单,分析团队整体表现,针对性调整训练计划。

(四)社区生态:互助共进的学习社群

Vijos 的社区功能是其区别于其他 OJ 的重要特征,形成了 “做题 - 讨论 - 分享” 的良性循环。

讨论区按主题分为 “题目讨论”“竞赛交流”“经验分享”“求助答疑” 等板块,用户可针对具体题目提问,或分享学习方法。例如,“如何高效学习动态规划” 的帖子曾引发数百条回复,汇聚了不同选手的经验总结。社区管理员会定期整理优质内容,形成 “精华帖” 合集,方便新用户查阅。

题解库是 Vijos 的核心资源之一,用户可提交解题报告,包含思路分析、代码实现、复杂度分析等内容。题解按 “通过人数” 和 “评分” 排序,优质题解会被标记为 “推荐”。许多新手表示,通过阅读高手的题解,能快速理解复杂算法的应用场景,如一位用户在题解中用 “倒水问题” 类比动态规划的状态转移,让抽象概念变得直观。

用户互动功能包括 “关注”“私信”“成就系统” 等。用户可关注优秀选手,实时查看其提交记录;通过私信交流解题思路;完成特定任务(如首次 AC、月赛排名前 10)可获得勋章,增强社区归属感。这种互动机制形成了 “师徒传承” 的氛围,老用户主动指导新人,新人成长后反哺社区,构成可持续的生态循环。

(五)教学管理:面向机构的辅助工具

2018 年后推出的 “教学版” 功能,使 Vijos 从单纯的竞赛平台延伸为教学辅助工具,满足学校和培训机构的需求。

班级管理功能允许教师创建班级,通过邀请码或链接招募学生,查看班级成员的学习数据。教师可分组管理学生(如按年级或水平),针对不同组别布置差异化任务。

作业系统支持教师从题库中选择题目,设置作业名称、截止时间、提交次数限制,系统自动统计完成情况。对于未按时完成的学生,教师可发送提醒;对于错误率高的题目,可集中讲解。某中学的信息学教师反馈:“以前布置编程作业需要手动检查,40 人的班级要花 3 小时,用 Vijos 后系统自动判题,我只需分析错误率,效率提升了 80%。”

学情分析模块通过数据可视化展示班级整体和个体的学习情况:班级层面包括平均通过率、各知识点掌握率、作业完成率;个体层面包括解题速度、薄弱环节、进步趋势。教师可根据这些数据调整教学重点,例如若 “图论” 题目通过率低于 30%,则安排专题复习。

三、技术架构:从单体应用到分布式系统的演进

Vijos 的技术架构反映了中文 OJ 的发展历程,从早期的简单单体应用,逐步演进为支持高并发的分布式系统。

(一)早期架构(2005-2015):PHP 单体与基础沙箱

2005 年上线的首个版本采用经典的 LAMP 架构(Linux+Apache+MySQL+PHP),所有功能模块(用户管理、题目管理、判题系统)集成在单一应用中,架构简单但扩展性差。

  • 前端:纯 PHP 模板渲染,界面风格简陋,仅支持 PC 端访问;
  • 后端:PHP 处理业务逻辑,MySQL 存储所有数据(用户信息、题目、提交记录等);
  • 判题系统:采用 chroot 创建隔离环境,运行用户代码并比对输出,判题逻辑与主应用耦合,并发处理能力弱(同时支持 50 次提交以内)。

这一架构在用户量较少时可满足需求,但随着题目和用户增长,逐渐暴露出性能瓶颈:页面加载缓慢、判题队列拥堵、数据库查询频繁超时。2012 年,团队尝试引入 Memcached 缓存热点数据(如题目列表、用户排名),暂时缓解了数据库压力,但未解决根本问题。

(二)中期重构(2016-2020):前后端分离与微服务

2016 年启动的重构是 Vijos 技术架构的重要转折点,核心目标是解耦功能模块,提升扩展性。

  • 前端:采用 Vue.js 2 框架重构界面,使用 Element UI 组件库,实现前后端分离。页面加载采用懒加载策略,静态资源(图片、CSS)部署至 CDN,加载速度提升 60%;支持响应式设计,适配手机、平板等设备。
  • 后端:拆分出 API 服务(Node.js+Express)、判题服务(Python+Celery)、用户服务(Node.js)三个微服务,通过 RESTful API 通信。引入 Redis 作为缓存和消息队列,判题任务通过队列分发,避免单点阻塞。
  • 数据存储:MySQL 仍用于存储结构化数据(用户、题目),但引入 MongoDB 存储非结构化数据(提交代码、讨论帖),减轻 MySQL 负担。
  • 判题沙箱:升级为基于 Linux Namespace 和 CGroup 的轻量级沙箱,支持资源限制和系统调用过滤,安全性和效率大幅提升。

重构后,系统的并发处理能力显著增强,支持同时 1000 + 次提交,页面响应时间缩短至 1 秒以内,为后续用户增长奠定了基础。

(三)当前架构(2021 至今):分布式与高可用优化

为应对 30 万用户的访问需求,Vijos 进一步优化架构,强化高可用和可扩展性。

  • 分布式部署:API 服务和判题服务部署在多台服务器,通过 Nginx 负载均衡分发请求;数据库采用主从复制,主库写入,从库读取,避免单点故障。
  • 弹性伸缩:基于 Kubernetes 容器化部署核心服务,根据负载自动调整实例数量(如竞赛高峰期增加判题节点)。
  • 监控与运维:引入 Prometheus+Grafana 监控系统指标(CPU、内存、提交量),设置告警机制;采用 ELK stack 收集日志,便于问题排查。

当前架构可支持日均提交量 5 万次以上,在月赛等高峰期可弹性扩展至 10 万次 / 日,系统可用性保持在 99.9% 以上。

四、使用场景与案例:二十年陪伴的成长故事

VijosOJ 的二十年历程中,积累了大量真实的使用案例,从个人成长到学校教学,从赛事组织到社区建设,其影响力渗透到信息学竞赛的方方面面。

(一)个人成长:从入门到金牌的训练轨迹

Vijos 陪伴了许多信息学选手的成长,其中最具代表性的是 IOI2018 金牌得主徐寅展。他在博客中回忆:“2012 年刚接触信息学时,Vijos 是我的主要练习平台。当时我每天刷 10 道题,从 1 星题开始,慢慢挑战到 5 星题。月赛的压力很大,但每次排名进步都让我更有动力。” 他特别提到 Vijos 的题解库帮助他突破了动态规划的瓶颈:“有一道‘最长上升子序列’的变式题,我卡了三天,直到看到一篇用树状数组优化的题解,才恍然大悟。”

类似的故事还有很多。2023 年 NOIP 全国一等奖获得者、某省重点中学学生李同学表示:“我喜欢 Vijos 的分类标签,准备联赛时,我按‘图论’‘数论’等标签集中刷题,效率很高。判题结果的详细反馈也很有用,比如超时题会显示每个测试点的运行时间,让我知道该从哪里优化。”

(二)学校教学:信息学课程的辅助工具

许多中小学将 Vijos 作为信息学校本课程的配套平台。杭州学军中学的信息学教练王老师介绍:“我们从 2010 年开始使用 Vijos,主要用于课后作业和阶段性测试。教师后台可以一键布置作业,查看全班的正确率,比如‘贪心算法’单元,发现同学们对‘区间调度’问题掌握较差,就专门加了一节课讲解。” 该校近五年有 12 名学生入选国家集训队,王老师认为:“Vijos 的题库和竞赛系统帮学生打下了扎实的基础。”

另一所县级中学的案例更具代表性。该校 2018 年前从未有学生参加 NOIP,引入 Vijos 后,教师通过 “教学版” 功能组织兴趣小组,从基础题开始训练,两年内有 3 名学生获得省级二等奖。教师刘老师说:“Vijos 的免费开源对我们这种资源有限的学校很友好,不需要花钱买系统,学生也能得到和大城市孩子一样的训练机会。”

(三)赛事组织:从校内选拔到区域联赛

Vijos 的竞赛系统被广泛用于各级赛事。例如,某省信息学奥林匹克协会自 2019 年起使用 Vijos 组织省级联赛的线上选拔赛,参赛人数从每年 500 人增至 2000 人。协会负责人表示:“Vijos 的分布式判题很稳定,从未出现过大规模延迟;私有竞赛功能可以设置密码,确保公平性;赛后的数据分析也很方便,我们能快速统计各地区的成绩分布。”

在学校层面,北京某重点中学的信息学教研组每年通过 Vijos 组织 10 次以上校内选拔赛,教练张老师说:“系统支持 ACM 模式和 IOI 模式切换,我们可以模拟不同赛事的规则;封榜功能很重要,避免学生因排名波动影响发挥。”

(四)社区建设:知识共享的协作网络

Vijos 的社区生态孕育了大量优质内容。用户 “小 A”(化名)从 2015 年开始在 Vijos 发布题解,累计撰写 200 余篇,其中 30 篇被标记为 “推荐”。他说:“写题解的过程也是自己梳理思路的过程,很多时候写着写着就发现了之前没注意的细节。有新人提问时,我也会尽量回复,就像当年别人帮助我一样。”

这种知识共享的氛围形成了良性循环。2024 年,Vijos 社区发起 “题解共创计划”,邀请 10 位金牌选手牵头,组织用户共同完善高频考题的题解,半年内新增优质题解 500 余篇,覆盖 80% 的 NOIP 真题。

五、VijosOJ 的优势与挑战:老牌平台的坚守与突围

作为运营二十年的老牌 OJ,Vijos 既有深厚的积累,也面临着新时代的挑战。

(一)核心优势

  1. 历史积淀与品牌影响力:二十年的运营使 Vijos 积累了庞大的用户群体和题库资源,在信息学竞赛领域具有较高的知名度和公信力。许多教练和选手表示,选择 Vijos 的重要原因是 “信任其专业性”。
  2. 社区生态的独特价值:与纯工具型 OJ 不同,Vijos 形成了活跃的讨论和分享氛围,题解库、经验帖等 UGC 内容构成了独特的知识体系,这种社区文化难以被新兴平台复制。
  3. 赛事适配的专业性:长期服务于 NOIP 等赛事,Vijos 的题目难度、判题标准、竞赛规则与正式赛事高度一致,成为选手赛前模拟的 “标准环境”。
  4. 开源与定制化优势:作为开源项目,Vijos 允许学校、机构根据需求二次开发,如某培训机构基于 Vijos 源码开发了专属判题系统,增加了 “代码质量评分” 功能。
  5. 对中文用户的深度适配:题面、讨论、帮助文档均为中文,避免了语言障碍;题库包含大量国内赛事真题,更贴合中文用户的训练需求。

(二)面临的挑战

  1. 技术架构的滞后性:尽管经过重构,Vijos 的部分底层代码仍延续了早期设计,与 HydroOJ 等新兴平台的现代化架构相比,在扩展性和性能上存在差距。
  2. 用户体验的代际差距:界面设计偏传统,交互逻辑不如新兴平台简洁直观,年轻用户(如小学生)可能更倾向于视觉效果更好的 OJ。
  3. 移动端支持不足:虽然支持响应式设计,但未开发专用 APP,在移动端的体验(如代码编辑)较差,难以满足用户随时随地刷题的需求。
  4. 生态扩张的局限性:过度依赖信息学竞赛场景,对编程入门、职业教育等领域的覆盖不足,用户群体相对单一。
  5. 运营资源的限制:作为开源社区项目,Vijos 缺乏商业平台的资金和人力投入,功能迭代速度较慢,难以快速跟进新技术趋势(如 AI 辅助编程)。

六、未来展望:老牌平台的创新之路

面对新兴 OJ 的竞争和用户需求的变化,Vijos 需要在坚守核心优势的同时,寻求突破与创新。

(一)技术升级:架构现代化与性能优化

计划引入微服务的最新技术(如 Service Mesh)进一步拆分系统模块,提升可扩展性;优化判题引擎,支持 WebAssembly 等新型执行环境,适配更多编程语言;开发专用移动端 APP,优化触屏代码编辑体验,满足碎片化学习需求。

(二)生态扩展:从竞赛向全场景编程教育延伸

在保持信息学竞赛优势的基础上,拓展题库类型,增加 CSP-J/S(非专业级软件能力认证)、计算机考研、企业笔试等场景的题目;开发 “编程入门” 专区,针对中小学生设计图形化编程与代码编程衔接的内容,扩大用户群体。

(三)社区活化:强化知识传递与互动体验

升级社区功能,引入 “直播解题”“在线答疑” 等实时互动形式;基于用户行为数据推荐个性化学习路径,如为入门用户推荐 “语法基础→简单算法→综合练习” 的渐进式题目序列;建立 “导师认证” 体系,鼓励资深用户提供付费指导,形成可持续的社区激励机制。

(四)教育融合:深化与教学场景的结合

加强与中小学信息学课程标准的对接,开发配套的教案和课件资源;优化教学管理功能,支持与学校教务系统对接,实现成绩自动同步;增加 “代码互评”“小组协作编程” 等功能,适配合作学习模式。

(五)开源生态:吸引更多开发者参与

完善开发文档,降低二次开发门槛;设立 “贡献者计划”,对活跃开发者提供物质奖励或荣誉认证;与高校计算机系合作,将 Vijos 作为开源实践项目,吸引学生参与开发,注入新鲜血液。

七、结语:传承与创新的平衡之道

VijosOJ 的二十年,是中国信息学竞赛发展的缩影。从学生自发的开源项目到服务三十万用户的成熟平台,它不仅提供了判题工具,更构建了一个知识共享的社区,见证了无数选手的成长与蜕变。

在技术快速迭代的今天,Vijos 面临着新兴平台的挑战,但也拥有不可替代的历史积淀和社区生态。未来,它需要在传承核心价值(专业性、社区性、开源性)的同时,积极拥抱变化(技术升级、场景扩展、体验优化),才能在竞争中保持活力。

对于信息学竞赛选手和教练而言,Vijos 不仅是一个训练平台,更是一段青春记忆的载体。正如一位老用户所说:“无论后来用过多少 OJ,总还是会回 Vijos 看看,那里有我第一次 AC 的激动,有和伙伴们讨论题目的夜晚,有成长的痕迹。”

访问 VijosOJ 官网(vijos.org)或 GitHub 仓库(github.com/vijos/vj4),即可加入这个拥有二十年历史的信息学社区,感受老牌平台的独特魅力。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QPainter::CompositionMode解析

基本概念目标(Destination):已经存在的像素。源(Source):要绘制的新像素。组合模式:决定源和目标如何混合。总结SourceOver:源绘制在目标之上。DestinationOver:目标绘制在源之上。Clear:二者重叠区域被清空…

对接钉钉审批过程记录(C#版本)

钉钉开放平台:API总览 - 钉钉开放平台 按照开放平台操作指引,进入到钉钉开发者后台:开发者后台统一登录 - 钉钉统一身份认证,进行应用创建。 按照开放平台指引下载钉钉SDK(新版)。 在vs引入钉钉dll文件。 获…

AFSIM入门教程03.03:更新所有依赖库版本

系列索引:AFSIM入门教程索引 上一篇中更新了tiff库版本,本文将更新所有使用到的依赖库版本。 失败了 依赖库 首先获取哪些库被使用了。打开源码目录,搜索# Configure the 3rd_party,可以看到调用第三方库的代码。 官方提供的…

完美解决hive external表中csv字段内容含“,“逗号的问题

为解决hive表中csv字段内容含","逗号的问题,网上几乎都是说要用org.apache.hadoop.hive.serde2.OpenCSVSerde。 使用方法为: 1、mysql导出时,加一个ENCLOSED BY ‘"’, 示例: mysql -h 10.16.0.10 -P …

【Git】修改本地和远程的分支名称

其原理是: 对于本地:可直接修改分支名称;对于远程:不可直接重命名分支,所以应该将修改好名称的分支以新分支的形式推送上远程仓库,之后将新分支与远程新分支关联,之后可选择删除旧分支# 例子&am…

ubuntu24.04安装selenium、chrome、chromedriver

实验环境:kaggle notebook、colab notebook1、安装chrome!wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb!sudo dpkg -i google-chrome-stable_current_amd64.deb!sudo apt-get install -f!export QT_QPA_PLATFORMoffscreen!sudo…

西门子PLC基础指令6:读取时钟指令、设置时钟指令、使能含义与注意

读/写指令 1. 读取时钟 指令 READ_RTCREAD_RTC (RTC 全称是 Real - Time Clock,即实时时钟 )指令的主要作用是将 CPU 内部实时时钟(RTC)的当前日期和时间信息读取出来,并存储到以指定字节地址(图…

GeoTools 结合 OpenLayers 实现缓冲区分析

前言❝ 缓冲区分析是地理信息系统(GIS)空间分析的核心功能之一。它通过围绕点、线或面等地理实体,自动生成指定距离(或宽度)的等距区域(缓冲区)。该功能为量化空间邻近度、评估影响范围、识别潜…

SpringBoot 接入SSE实现消息实时推送的优点,原理以及实现

SpringBoot 接入SSE实现消息实时推送的优点,原理以及实现 前言 上一篇文章 我写的关于SpringBoot整合t-io是websocket实时通信的文章中我们可以了解到 websocket是双向通信的,而且需要TCP连接的支持,今天在这里我要说的SSE(Server-Sent Events) 是一个单项通信的消息实时推…

创建型设计模式:对象诞生的艺术与智慧

🎭 创建型设计模式:对象诞生的艺术与智慧 💡 温馨提示:本文将以轻松有趣的方式带你探索设计模式的世界,就像在听一个关于"如何优雅地生孩子"的故事一样! 🚪 传送门:在开始…

如何解决pip安装报错ModuleNotFoundError: No module named ‘gensim’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘gensim’问题 摘要 在使用 PyCharm 2025 进行 Python 开发时,常常需要通过 pip install 安装第三方包以丰富项目功能。但在安装 gensim 等包时&…

【嵌入式电机控制#26】BLDC:三相模拟采集

之前有些网友试着用有刷的平均电流法采集三相,还搞了个闭环控制。求!结果直接把驱动板给干没了......做过仿真的朋友们都知道,无刷电机的相电流波形是介于方波和正弦波的。如果拿平均电流去测量,很不靠谱。这节内容为大家分享采集…

ref存储对象和reactive深度响应式递归地对对象的嵌套属性进行响应式处理

ref 不会递归地对 对象 或 数组 中的每个属性或元素进行深度响应式处理。如果你需要递归处理嵌套属性,reactive 是更适合的选择。让我通过具体的例子来展示这一点。 例子:ref 存储对象和嵌套对象 1. 使用 ref 存储嵌套对象: import { createA…

小鹏汽车前端面经

前端基础与浏览器机制 (Front-End Fundamentals & Browser Mechanics) 这些问题涵盖了Web工作的基本原理,包括网络、渲染和浏览器特性。 1. 浏览器渲染与性能 (Browser Rendering & Performance) URL输入发生什么?(What happens when you type a…

利用DeepSeek编写go语言按行排序程序

听说google出品的go语言也是系统开发中常用的,性能到底怎么样,还是老办法,让DeepSeek写个程序跑一下,基于以往的经验,直接让它同时编写有缓冲和无缓冲版本。 package mainimport ("bufio""fmt"&qu…

《解构Angular组件变化检测:从自动到手 动的效能突破》

为何有时数据更新后视图却无动于衷?为何看似简单的操作会引发连锁式的性能损耗?要解开这些疑问,需要穿透表层的API调用,深入到框架设计的底层逻辑中去。变化检测的核心使命,是确保视图层能够准确反映数据层的当前状态。这种"数据-视图"的同步关系,是所有前端框…

书单 | AI编程+Python+Go三大核心领域书单

这份书单聚焦AI编程、Python开发、Go语言三大核心领域,精选6本本月 最具前瞻性的技术图书,为你构建"工具链业务层系统层"的全栈能力。 1、人人皆可Vibe编程:玩转氛围编程 作者:池志炜,薛志荣 本书围绕Vibe编程这一AI驱…

Kali Linux 2025.2基于MITRE ATTCK框架

从彻底革新的菜单结构到新增的13款尖端工具,再到首次支持智能手表Wi-Fi注入,Kali Linux 2025.2为红队、蓝队以及安全研究人员提供了更高效、更直观的工具生态。菜单结构大变革:基于MITRE ATT&CK框架Kali Linux 2025.2最引人注目的变化之一…

javacc实现简单SQL解析器

文章目录前言本章节源码需求1:实现一个最简单的select sql要求实现jj文件编译测试需求2:理解Token及其他属性说明javajj文件需求3:实现解析得到SQL语法树 & 精确点位资料获取前言 博主介绍:✌目前全网粉丝4W,csdn…

Odoo OWL前端框架全面学习指南 (后端开发者视角)

核心理念: 将您熟悉的Odoo后端MVCORM架构思想,完整映射到前端OWL组件化开发中,让您在熟悉的概念体系下,快速掌握新的技术栈。第一部分:核心概念映射与环境搭建内容摘要: 本部分旨在建立后端与前端最核心的概…