VijosOJ:中文信息學競賽的二十年開源之路

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組件化開發中,讓您在熟悉的概念體系下,快速掌握新的技術棧。第一部分:核心概念映射與環境搭建內容摘要: 本部分旨在建立后端與前端最核心的概…