[{"data":1,"prerenderedAt":2104},["ShallowReactive",2],{"blog-taxonomies":3,"blog-stats":507,"post-2026\u002F2026-03-28-团队项目协作规范随记":1083},[4,11,16,21,25,29,36,39,44,47,52,58,63,66,71,76,80,84,87,93,96,101,105,110,113,117,122,127,132,136,141,143,146,151,155,157,162,165,169,173,176,179,183,186,190,193,197,200,205,208,211,214,219,222,228,234,237,239,245,249,253,256,260,266,271,276,281,283,287,290,293,298,301,304,306,308,311,314,316,318,321,327,332,337,342,347,352,354,356,358,361,365,367,369,371,374,376,378,381,386,390,393,396,400,404,407,411,413,415,417,421,423,425,428,431,433,435,437,439,441,443,446,448,450,454,456,459,461,463,465,467,469,471,473,477,483,486,488,491,493,495,497,499,501,503,505],{"category":5,"tags":6},"笔记",[7,8,9,10],"QQ","插件","LiteLoader","美化",{"category":12,"tags":13},"其他",[14,15,10],"博客","IP签名",{"category":17,"tags":18},"杂谈",[19,20],"互联网","观点",{"category":5,"tags":22},[14,23,24],"GitHub","数据可视化",{"category":5,"tags":26},[14,27,28],"访问统计","不蒜子",{"category":30,"tags":31},"工具",[32,33,34,35],"Python","爬虫","选课脚本","广州大学",{"category":5,"tags":37},[38,5],"数学分析",{"category":40,"tags":41},"算法",[42,40,43],"数据结构","线性表",{"category":40,"tags":45},[42,46],"复习",{"category":5,"tags":48},[49,50,51],"高等代数","线性代数","知识点",{"category":5,"tags":53},[14,54,55,56,57],"Typora","PicGo","图床","Markdown",{"category":30,"tags":59},[60,61,62],"Jupyter","工具配置","中文",{"category":30,"tags":64},[65,61,10],"VSCode",{"category":30,"tags":67},[68,69,70,35],"路由器","OpenWrt","校园网",{"category":12,"tags":72},[73,74,75],"网络协议","Wireshark","DEVP2P",{"category":5,"tags":77},[73,74,78,79],"Lua","解码器",{"category":5,"tags":81},[82,5,83],"常微分方程","数学",{"category":5,"tags":85},[86,5,83],"概率论",{"category":30,"tags":88},[89,90,91,92],"Docker","WSL","Windows","磁盘清理",{"category":30,"tags":94},[32,33,95,35],"课程表",{"category":5,"tags":97},[14,98,99,100],"Hexo","Gitalk","评论系统",{"category":5,"tags":102},[14,103,98,104],"Obsidian","写作工具",{"category":12,"tags":106},[107,108,109],"课题研究","泊松分布","参数估计",{"category":12,"tags":111},[107,108,109,112],"组会",{"category":12,"tags":114},[109,115,108,116],"IM模型","统计学",{"category":17,"tags":118},[119,120,121],"软考","网络规划","信息系统项目管理",{"category":30,"tags":123},[124,125,126],"Arch Linux","AppImage","Linux",{"category":5,"tags":128},[129,130,131],"编程语言","计算机科学","内存管理",{"category":5,"tags":133},[134,135],"Canvas","前端",{"category":5,"tags":137},[14,138,139,140],"GitHub Actions","Vite","部署",{"category":5,"tags":142},[135],{"category":5,"tags":144},[135,145],"系统设计",{"category":5,"tags":147},[135,148,149,150],"安全","XSS","CSRF",{"category":152,"tags":153},"项目",[134,154],"PixiJS",{"category":152,"tags":156},null,{"category":40,"tags":158},[42,159,160,161],"栈","队列","JavaScript",{"category":40,"tags":163},[42,164,161],"哈希表",{"category":5,"tags":166},[167,161,168],"ES6","Set",{"category":40,"tags":170},[40,171,172],"动态规划","背包问题",{"category":40,"tags":174},[40,175],"滑动窗口",{"category":40,"tags":177},[42,178,161],"链表",{"category":40,"tags":180},[40,181,161,182],"ACM","面试",{"category":40,"tags":184},[40,161,185],"数据类型转换",{"category":40,"tags":187},[42,188,178,189],"顺序表","TypeScript",{"category":5,"tags":191},[135,154,134,192],"渲染",{"category":5,"tags":194},[135,195,134,196],"富文本编辑","wangEditor",{"category":40,"tags":198},[199,40,178],"力扣",{"category":5,"tags":201},[202,203,204,91],"DNS","加密","网络安全",{"category":5,"tags":206},[135,207],"Axios",{"category":5,"tags":209},[135,207,189,210],"接口封装",{"category":5,"tags":212},[135,213,145],"JWT",{"category":152,"tags":215},[134,216,217,154,218],"画布","React","项目开发",{"category":17,"tags":220},[221],"日志",{"category":5,"tags":223},[224,225,226,227],"Neo4j","图数据库","中心度分析","PageRank",{"category":12,"tags":229},[230,231,232,233],"论文","机器学习","随机森林","保险欺诈",{"category":5,"tags":235},[236],"人工智能",{"category":5,"tags":238},[231,40,32],{"category":12,"tags":240},[241,242,243,244],"共识算法","最长链","区块链","算法设计",{"category":5,"tags":246},[161,247,248,135],"闭包","作用域",{"category":5,"tags":250},[14,138,251,252],"RSS","自动化",{"category":30,"tags":254},[89,90,91,255],"安装",{"category":30,"tags":257},[258,91,259],"MSYS2","开发环境",{"category":5,"tags":261},[262,263,264,265],"团队协作","Git","Commit规范","代码审查",{"category":30,"tags":267},[268,269,270],"oh-my-posh","终端美化","CLI",{"category":5,"tags":272},[273,274,275],"上下文工程","Agent","RAG",{"category":5,"tags":277},[278,279,280],"前端工程化","技术选型","工程基建",{"category":5,"tags":282},[275],{"category":5,"tags":284},[285,286],"SDD","规格驱动开发",{"category":5,"tags":288},[289],"neovim",{"category":5,"tags":291},[292],"技术写作",{"category":5,"tags":294},[295,32,296,89,297],"FastAPI","后端","工程实践",{"category":152,"tags":299},[274,300],"Harness Engineering",{"category":5,"tags":302},[303],"RFC",{"category":152,"tags":305},[274,300,275],{"category":152,"tags":307},[274],{"category":40,"tags":309},[199,40,161,310],"两数之和",{"category":40,"tags":312},[199,40,161,313],"双指针",{"category":40,"tags":315},[199,40,161,178],{"category":40,"tags":317},[199,40,161,175],{"category":40,"tags":319},[199,40,161,320],"回溯",{"category":5,"tags":322},[323,324,325,326],"分布式处理与计算","Spark","Scala","RDD",{"category":5,"tags":328},[323,329,330,331],"线性回归","逻辑回归","监督学习",{"category":5,"tags":333},[323,334,335,336],"数值优化","牛顿法","收敛性",{"category":5,"tags":338},[323,339,340,341],"PCA","数据降维","正则化",{"category":5,"tags":343},[323,344,345,346],"聚类","层次聚类","K-Means",{"category":5,"tags":348},[323,349,350,351],"随机模拟","统计推断","EM算法",{"category":5,"tags":353},[24],{"category":5,"tags":355},[24],{"category":5,"tags":357},[24],{"category":40,"tags":359},[42,360],"图论",{"category":40,"tags":362},[42,363,364],"树","二叉树",{"category":40,"tags":366},[42,160],{"category":40,"tags":368},[42],{"category":40,"tags":370},[42,159],{"category":40,"tags":372},[42,40,373],"复杂度分析",{"category":40,"tags":375},[42,43,178],{"category":40,"tags":377},[42,43,188],{"category":40,"tags":379},[42,380],"基础概念",{"category":17,"tags":382},[383,384,385],"随记","照片","高中",{"category":17,"tags":387},[383,388,389],"团建","战地",{"category":17,"tags":391},[383,392],"生活",{"category":17,"tags":394},[383,395],"文学",{"category":17,"tags":397},[383,398,399],"SCP","模因",{"category":17,"tags":401},[383,402,403],"画集","艺术",{"category":17,"tags":405},[14,406,383],"写作",{"category":17,"tags":408},[383,409,410],"音乐","摇滚",{"category":17,"tags":412},[383,392],{"category":17,"tags":414},[383,409],{"category":17,"tags":416},[383,35,392],{"category":17,"tags":418},[383,419,420],"同人","手书",{"category":17,"tags":422},[383,392],{"category":17,"tags":424},[383,392],{"category":17,"tags":426},[383,427],"植物",{"category":17,"tags":429},[383,430],"读书",{"category":17,"tags":432},[383,392],{"category":17,"tags":434},[383,392],{"category":17,"tags":436},[383,392],{"category":17,"tags":438},[383,392],{"category":17,"tags":440},[383,392],{"category":17,"tags":442},[383,392],{"category":17,"tags":444},[14,445,383],"一周年",{"category":17,"tags":447},[383,392],{"category":17,"tags":449},[383,392],{"category":17,"tags":451},[35,452,453],"开源组织","SITE-193",{"category":17,"tags":455},[383,392],{"category":17,"tags":457},[383,458],"年末",{"category":17,"tags":460},[383,392],{"category":17,"tags":462},[383,392],{"category":17,"tags":464},[14,17],{"category":17,"tags":466},[383,392],{"category":17,"tags":468},[383,392],{"category":17,"tags":470},[383,392],{"category":17,"tags":472},[383,392],{"category":17,"tags":474},[383,475,476],"游戏","Control",{"category":30,"tags":478},[479,480,481,482],"Quadim","图像处理","四叉树","Rust",{"category":17,"tags":484},[14,485],"上线纪念",{"category":17,"tags":487},[383,395],{"category":30,"tags":489},[203,490],"测试",{"category":17,"tags":492},[383],{"category":17,"tags":494},[383,392],{"category":17,"tags":496},[383],{"category":5,"tags":498},[40],{"category":5,"tags":500},[40],{"category":5,"tags":502},[40],{"category":5,"tags":504},[40],{"category":5,"tags":506},[40],[508,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,579,583,587,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738,742,746,750,754,758,762,766,770,774,778,782,786,790,794,798,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865,869,873,877,881,885,889,893,897,901,904,907,911,915,919,923,927,930,934,938,942,946,950,954,957,961,965,969,973,977,981,984,988,992,996,1000,1004,1007,1011,1015,1019,1023,1027,1031,1035,1039,1043,1047,1051,1055,1059,1063,1067,1071,1075,1079],{"path":509,"words":510,"published":511,"date":156},"\u002Fposts\u002F2024\u002F2024-06-25-liteloaderqqnt",1296,"2024-06-25 11:03:08",{"path":513,"words":514,"published":515,"date":156},"\u002Fposts\u002F2024\u002F2024-06-26-ip签名",0,"2024-06-26 22:53:53",{"path":517,"words":518,"published":519,"date":156},"\u002Fposts\u002F2024\u002F2024-06-29-何加盐中文互联网正在加速崩塌",4853,"2024-06-29 00:47:13",{"path":521,"words":522,"published":523,"date":156},"\u002Fposts\u002F2024\u002F2024-07-12-github-chart",270,"2024-07-12 20:02:50",{"path":525,"words":526,"published":527,"date":156},"\u002Fposts\u002F2024\u002F2024-07-14-访客数统计",192,"2024-07-24 01:34:28",{"path":529,"words":530,"published":531,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-广大选课脚本",110,"2024-07-26 01:34:28",{"path":533,"words":534,"published":535,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数学分析笔记其二",14,"2024-07-26 23:54:02",{"path":537,"words":538,"published":539,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习其二",12856,"2024-07-26 02:48:08",{"path":541,"words":542,"published":543,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习相关",32856,"2024-07-26 02:24:14",{"path":545,"words":546,"published":547,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-线性代数与空间解析几何知识点全汇总",6110,"2024-07-26 03:27:55",{"path":549,"words":550,"published":551,"date":156},"\u002Fposts\u002F2024\u002F2024-07-31-typora-picgo-兰空图床打造markdown写作环境",311,"2024-07-31 12:56:23",{"path":553,"words":554,"published":555,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-jupyter配置中文",441,"2024-09-02 23:49:05",{"path":557,"words":558,"published":559,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-自定义vscode背景图片",100,"2024-09-02 23:39:00",{"path":561,"words":562,"published":563,"date":156},"\u002Fposts\u002F2024\u002F2024-09-03-制作gzhu校园网路由器",1423,"2024-09-03 23:43:18",{"path":565,"words":566,"published":567,"date":156},"\u002Fposts\u002F2024\u002F2024-09-26-09-25-2024",136,"2024-09-26 00:49:26",{"path":569,"words":570,"published":571,"date":156},"\u002Fposts\u002F2024\u002F2024-11-04-创建一个网络包解码器分析devp2p协议",1943,"2024-11-04 16:45:19",{"path":573,"words":574,"published":575,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记常微分",16,"2024-12-09 22:51:00",{"path":577,"words":574,"published":578,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记概率论","2025-03-09 22:51:00",{"path":580,"words":581,"published":582,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-windows下释放docker占用的wsl空间",164,"2025-03-01 13:54:15",{"path":584,"words":585,"published":586,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-爬虫实战-爬取广州大学课程表",774,"2025-03-01 14:55:48",{"path":588,"words":530,"published":589,"date":156},"\u002Fposts\u002F2025\u002F2025-04-03-hexo集成gitalk的问题","2025-04-03 14:26:34",{"path":591,"words":592,"published":593,"date":156},"\u002Fposts\u002F2025\u002F2025-09-22-记一次配置obsidian配合hexo写博客",92,"2025-09-22 16:47:52",{"path":595,"words":596,"published":597,"date":156},"\u002Fposts\u002F2025\u002F2025-10-24-10-20课题",204,"2025-10-24 08:15:01",{"path":599,"words":600,"published":601,"date":156},"\u002Fposts\u002F2025\u002F2025-11-02-组会朝花夕拾",501,"2025-11-02 18:56:59",{"path":603,"words":604,"published":605,"date":156},"\u002Fposts\u002F2025\u002F2025-11-05-基于随机加权推断模型im的参数估计算法",481,"2025-11-05 20:51:41",{"path":607,"words":608,"published":609,"date":156},"\u002Fposts\u002F2025\u002F2025-11-09-关于软考高项网规",884,"2025-11-09 19:54:52",{"path":611,"words":612,"published":613,"date":156},"\u002Fposts\u002F2025\u002F2025-11-17-arch-linux运行appimage相关",365,"2025-11-17 09:59:59",{"path":615,"words":616,"published":617,"date":156},"\u002Fposts\u002F2025\u002F2025-11-19-相关概念",2058,"2025-11-19 11:06:20",{"path":619,"words":620,"published":621,"date":156},"\u002Fposts\u002F2025\u002F2025-11-21-web可视化实践canvas",6393,"2025-11-21 14:50:48",{"path":623,"words":624,"published":625,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-使用-github-actions-自动部署基于vite的项目到-github-pages",272,"2025-11-23 01:59:24",{"path":627,"words":628,"published":629,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-关于前端包管理器npmpnpmyarn和bun",4890,"2025-11-22 21:21:15",{"path":631,"words":632,"published":633,"date":156},"\u002Fposts\u002F2025\u002F2025-11-23-undo-redo-机制具体实现",7839,"2025-11-23 19:15:00",{"path":635,"words":636,"published":637,"date":156},"\u002Fposts\u002F2025\u002F2025-11-27-前端安全-关于xss与crsf",1866,"2025-11-28 02:05:25",{"path":639,"words":640,"published":641,"date":156},"\u002Fposts\u002F2025\u002F2025-12-05-现代协同-2d-画布编辑器pixijs-v8",4285,"2025-12-05 02:00:16",{"path":643,"words":644,"published":645,"date":156},"\u002Fposts\u002F2025\u002F2025-12-07-杂谈-课题组系统设计",3710,"2025-12-07 21:09:33",{"path":647,"words":648,"published":649,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-javascript中的数组方法与栈stack和队列queue的实现",474,"2025-11-29 16:58:15",{"path":651,"words":652,"published":653,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript-实现哈希表",189,"2025-11-27 11:31:39",{"path":655,"words":656,"published":657,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript的set方法",332,"2025-12-25 15:26:18",{"path":659,"words":660,"published":661,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于动态规划(背包问题为例)",1238,"2025-11-17 18:24:04",{"path":663,"words":664,"published":665,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于滑动窗口",712,"2025-11-20 15:04:40",{"path":667,"words":668,"published":669,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于链表(javascript)",500,"2025-11-25 13:00:48",{"path":671,"words":672,"published":673,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-面试算法acm模式构建构建输入输出模板",2051,"2025-12-25 23:09:45",{"path":675,"words":676,"published":677,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascript-数字数组字符串的处理",483,"2025-12-26 11:20:25",{"path":679,"words":680,"published":681,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascripttypescript-的顺序表链表实现",446,"2025-12-26 12:16:12",{"path":683,"words":684,"published":685,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-1-实现基础yuan素渲染和状态控制",2136,"2025-12-28 01:23:08",{"path":687,"words":688,"published":689,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-2-实现富文本编辑",1838,"2025-12-28 02:58:47",{"path":691,"words":692,"published":693,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-算法刷题-关于链表操作",2135,"2025-12-27 16:12:42",{"path":695,"words":696,"published":697,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-配置dnscrypt-proxy实现加密dns服务windows",1899,"2025-11-15 01:06:37",{"path":699,"words":700,"published":701,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-关于网络请求xhrajaxfetchaxios",7788,"2025-10-28 15:48:46",{"path":703,"words":704,"published":705,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-接口封装与请求规范axios为例",2373,"2025-12-29 01:01:18",{"path":707,"words":708,"published":709,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-身份验证管理-基于-jwt-token-的实现",2709,"2025-11-23 22:04:41",{"path":711,"words":712,"published":713,"date":156},"\u002Fposts\u002F2025\u002F2025-12-29-记canvas画布项目开发",6254,"2025-12-29 04:52:15",{"path":715,"words":716,"published":717,"date":156},"\u002Fposts\u002F2025\u002Fabout-site",116,"2025-03-31 16:44:24",{"path":719,"words":720,"published":721,"date":156},"\u002Fposts\u002F2025\u002F使用neo4j图数据科学库gds进行中心度分析",143,"2025-04-02 23:37:24",{"path":723,"words":724,"published":725,"date":156},"\u002Fposts\u002F2026\u002F2026-01-03-论文实训草稿",10445,"2026-01-03 14:10:49",{"path":727,"words":728,"published":729,"date":156},"\u002Fposts\u002F2026\u002F2026-01-06-人工智能导论",11461,"2026-01-07 03:25:49",{"path":731,"words":732,"published":733,"date":156},"\u002Fposts\u002F2026\u002F2026-01-07-机器学习相关算法",82,"2026-01-08 02:28:13",{"path":735,"words":736,"published":737,"date":156},"\u002Fposts\u002F2026\u002F2026-01-16-关于低复杂度最长链共识算法设计",4466,"2026-01-16 10:33:23",{"path":739,"words":740,"published":741,"date":156},"\u002Fposts\u002F2026\u002F2026-01-19-杂记2026-01-19",5754,"2026-01-20 01:03:26",{"path":743,"words":744,"published":745,"date":156},"\u002Fposts\u002F2026\u002F2026-01-22-github-action-自动同步博客到-github-主页",1069,"2026-01-22 16:31:47",{"path":747,"words":748,"published":749,"date":156},"\u002Fposts\u002F2026\u002F2026-03-01-windows-wsl安装docker",257,"2026-03-01 20:55:31",{"path":751,"words":752,"published":753,"date":156},"\u002Fposts\u002F2026\u002F2026-03-14-关于-msys2",701,"2026-03-15 03:05:04",{"path":755,"words":756,"published":757,"date":156},"\u002Fposts\u002F2026\u002F2026-03-28-团队项目协作规范随记",2419,"2026-03-29 05:33:50",{"path":759,"words":760,"published":761,"date":156},"\u002Fposts\u002F2026\u002F2026-03-29-oh-my-posh配置分享",104,"2026-03-29 16:34:43",{"path":763,"words":764,"published":765,"date":156},"\u002Fposts\u002F2026\u002F2026-06-13-从上下文工程到-agent-harness-engineering",8840,"2026-06-13 21:06:20",{"path":767,"words":768,"published":769,"date":156},"\u002Fposts\u002F2026\u002F2026-07-13-简谈前端基建质量标准与ai友好建设",3814,"2026-07-13 21:06:20",{"path":771,"words":772,"published":773,"date":156},"\u002Fposts\u002F2026\u002F2026-07-15-agentic-rag-系统实践",13357,"2026-07-15 21:06:20",{"path":775,"words":776,"published":777,"date":156},"\u002Fposts\u002F2026\u002F2026-07-18-简谈sdd规范驱动开发-copy",4476,"2026-07-18 11:06:20",{"path":779,"words":780,"published":781,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-个人neovim配置分享",366,"2026-07-22 13:46:50",{"path":783,"words":784,"published":785,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-关于技术写作-设计文档",6763,"2026-07-20 13:46:50",{"path":787,"words":788,"published":789,"date":156},"\u002Fposts\u002F2026\u002F2026-07-29-fastapi-工程实践随记",3417,"2026-07-29 04:58:34",{"path":791,"words":792,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-06-19-rfc-liskin_code_agent",3563,"2026-06-19 15:18:20",{"path":795,"words":796,"published":797,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-07-25-rfc-glushkov_ogas",13461,"2026-07-28 23:46:50",{"path":799,"words":800,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-08-03-adr-ogas-arkhiv",2698,{"path":802,"words":803,"published":804,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002Frag\u002F2026-08-12-arkhiv_rag-vol-1",4366,"2026-08-12 15:18:20",{"path":806,"words":807,"published":808,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-25-力扣百题速练javascripttypescriptvol-1",3108,"2025-12-25 13:57:08",{"path":810,"words":811,"published":812,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-26-力扣百题速练javascripttypescriptvol-2",3185,"2025-12-26 13:57:08",{"path":814,"words":815,"published":816,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-28-力扣百题速练javascripttypescriptvol-3",2533,"2025-12-29 02:15:44",{"path":818,"words":819,"published":820,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-17-力扣百题速练javascripttypescriptvol-4",3024,"2026-01-17 22:53:01",{"path":822,"words":823,"published":824,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-19-力扣百题速练javascripttypescriptvol-5",293,"2026-01-19 15:15:12",{"path":826,"words":827,"published":828,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算spark系统与scala语言",4320,"2026-07-06 14:10:49",{"path":830,"words":831,"published":832,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算分类与回归分析",2081,"2026-07-07 12:40:29",{"path":834,"words":835,"published":836,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数值优化方法",2182,"2026-07-07 13:50:29",{"path":838,"words":839,"published":840,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数据降维",1583,"2026-07-07 21:50:29",{"path":842,"words":843,"published":844,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算聚类分析",1882,"2026-07-07 16:50:29",{"path":846,"words":847,"published":848,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算随机模拟与统计推断",2433,"2026-07-06 22:40:29",{"path":850,"words":851,"published":852,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-基本图像",10011,"2026-06-14 20:18:20",{"path":854,"words":855,"published":856,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-概论",10030,"2026-06-14 15:18:20",{"path":858,"words":859,"published":860,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-15-数据可视化-可视化库",2032,"2026-06-15 20:18:20",{"path":862,"words":863,"published":864,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-图",5451,"2025-04-15 20:48:06",{"path":866,"words":867,"published":868,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-树",4211,"2025-04-30 02:19:06",{"path":870,"words":871,"published":872,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-队列",921,"2025-04-11 15:30:08",{"path":874,"words":875,"published":876,"date":156},"\u002Fposts\u002F数据结构\u002F关于数据结构的一些想法",456,"2025-04-04 19:13:49",{"path":878,"words":879,"published":880,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-栈",920,"2025-04-18 00:17:37",{"path":882,"words":883,"published":884,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-算法复杂度",2153,"2025-04-05 16:09:55",{"path":886,"words":887,"published":888,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表链表",4572,"2025-04-06 00:24:40",{"path":890,"words":891,"published":892,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表顺序表",4191,"2025-04-05 22:09:59",{"path":894,"words":895,"published":896,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-绪论",2881,"2025-04-05 11:31:22",{"path":898,"words":899,"published":156,"date":900},"\u002Fposts\u002F杂记\u002F2023-12-26-2023年12月26日",7,"2023-12-26 23:51:33",{"path":902,"words":899,"published":156,"date":903},"\u002Fposts\u002F杂记\u002F2024-01-01-2024团建","2024-01-01 01:51:27",{"path":905,"words":581,"published":156,"date":906},"\u002Fposts\u002F杂记\u002F2024-01-09-随记","2024-01-09 20:50:35",{"path":908,"words":909,"published":156,"date":910},"\u002Fposts\u002F杂记\u002F2024-03-12-花名",5275,"2024-03-12 16:04:23",{"path":912,"words":913,"published":156,"date":914},"\u002Fposts\u002F杂记\u002F2024-04-15-逆模因",1353,"2024-04-15 00:26:16",{"path":916,"words":917,"published":156,"date":918},"\u002Fposts\u002F杂记\u002F2024-05-03-艺作",27,"2024-05-03 00:01:00",{"path":920,"words":921,"published":156,"date":922},"\u002Fposts\u002F杂记\u002F2024-05-21-关于博客",1720,"2024-02-21 23:21:11",{"path":924,"words":925,"published":156,"date":926},"\u002Fposts\u002F杂记\u002F2024-06-20-dnvrc维克多崔专访-2023",2036,"2024-06-20 00:28:39",{"path":928,"words":760,"published":156,"date":929},"\u002Fposts\u002F杂记\u002F2024-06-25-6月25日随记","2024-06-25 12:46:36",{"path":931,"words":932,"published":156,"date":933},"\u002Fposts\u002F杂记\u002F2024-06-25-歌名-想見星星",148,"2024-06-25 22:47:59",{"path":935,"words":936,"published":156,"date":937},"\u002Fposts\u002F杂记\u002F2024-07-11-桂花岗",6,"2024-07-11 00:28:17",{"path":939,"words":940,"published":156,"date":941},"\u002Fposts\u002F杂记\u002F2024-07-15-rolling-bocci",9,"2024-07-15 21:25:56",{"path":943,"words":944,"published":156,"date":945},"\u002Fposts\u002F杂记\u002F2024-07-22-七月九日",34,"2024-07-09 17:54:23",{"path":947,"words":948,"published":156,"date":949},"\u002Fposts\u002F杂记\u002F2024-07-22-六月随记",1052,"2024-07-22 01:03:19",{"path":951,"words":952,"published":156,"date":953},"\u002Fposts\u002F杂记\u002F2024-07-22-石菖蒲",41,"2024-07-10 01:26:05",{"path":955,"words":514,"published":156,"date":956},"\u002Fposts\u002F杂记\u002F2024-07-23-新书","2024-07-23 01:05:49",{"path":958,"words":959,"published":156,"date":960},"\u002Fposts\u002F杂记\u002F2024-07-29-年前",74,"2024-07-29 23:59:07",{"path":962,"words":963,"published":156,"date":964},"\u002Fposts\u002F杂记\u002F2024-07-30-周边",138,"2024-07-30 02:03:23",{"path":966,"words":967,"published":156,"date":968},"\u002Fposts\u002F杂记\u002F2024-07-31-2024-7-31日",185,"2024-07-31 01:21:52",{"path":970,"words":971,"published":156,"date":972},"\u002Fposts\u002F杂记\u002F2024-08-02-八月",1710,"2024-08-30 00:31:02",{"path":974,"words":975,"published":156,"date":976},"\u002Fposts\u002F杂记\u002F2024-09-01-九月",1484,"2024-09-26 16:30:15",{"path":978,"words":979,"published":156,"date":980},"\u002Fposts\u002F杂记\u002F2024-09-08-2024年9月8日",97,"2024-09-08 13:59:36",{"path":982,"words":514,"published":156,"date":983},"\u002Fposts\u002F杂记\u002F2024-09-19-博客站的一周年","2024-09-18 23:36:24",{"path":985,"words":986,"published":156,"date":987},"\u002Fposts\u002F杂记\u002F2024-10-03-十月",1028,"2024-10-31 23:54:27",{"path":989,"words":990,"published":156,"date":991},"\u002Fposts\u002F杂记\u002F2024-11-04-十一月",2134,"2024-11-30 00:04:39",{"path":993,"words":994,"published":156,"date":995},"\u002Fposts\u002F杂记\u002F2024-11-10-gzhu-site-193",80,"2024-11-10 19:19:12",{"path":997,"words":998,"published":156,"date":999},"\u002Fposts\u002F杂记\u002F2024-12-01-十二月",455,"2024-12-30 23:13:47",{"path":1001,"words":1002,"published":156,"date":1003},"\u002Fposts\u002F杂记\u002F2024-12-21-年末",23,"2024-12-21 23:21:49",{"path":1005,"words":522,"published":156,"date":1006},"\u002Fposts\u002F杂记\u002F2025-01-30-一月","2025-01-30 23:44:41",{"path":1008,"words":1009,"published":156,"date":1010},"\u002Fposts\u002F杂记\u002F2025-03-01-二月",224,"2025-02-28 00:11:08",{"path":1012,"words":1013,"published":156,"date":1014},"\u002Fposts\u002F杂记\u002F2025-03-01-博客杂谈",344,"2025-03-01 16:03:18",{"path":1016,"words":1017,"published":156,"date":1018},"\u002Fposts\u002F杂记\u002F2025-03-05-三月",2090,"2025-03-05 19:17:28",{"path":1020,"words":1021,"published":156,"date":1022},"\u002Fposts\u002F杂记\u002F2025-07-10-七月",361,"2025-07-10 22:04:32",{"path":1024,"words":1025,"published":156,"date":1026},"\u002Fposts\u002F杂记\u002F2025-09-21-九月",781,"2025-09-21 20:53:37",{"path":1028,"words":1029,"published":156,"date":1030},"\u002Fposts\u002F杂记\u002F2025-10-09-十月",591,"2025-10-09 00:35:07",{"path":1032,"words":1033,"published":156,"date":1034},"\u002Fposts\u002F杂记\u002Fcontrol",13,"2023-09-25 13:03:59",{"path":1036,"words":1037,"published":156,"date":1038},"\u002Fposts\u002F杂记\u002Fquadim四叉树图像处理",1094,"2023-10-21 11:27:06",{"path":1040,"words":1041,"published":156,"date":1042},"\u002Fposts\u002F杂记\u002Fsuccess",24,"2023-09-22 15:59:07",{"path":1044,"words":1045,"published":156,"date":1046},"\u002Fposts\u002F杂记\u002F三光年",295,"2023-11-18 04:18:40",{"path":1048,"words":1049,"published":156,"date":1050},"\u002Fposts\u002F杂记\u002F加密测试",961,"2023-11-21 14:24:01",{"path":1052,"words":1053,"published":156,"date":1054},"\u002Fposts\u002F杂记\u002F啊啊啊啊啊啊啊",54,"2023-09-20 17:29:33",{"path":1056,"words":1057,"published":156,"date":1058},"\u002Fposts\u002F杂记\u002F杂谈",124,"2023-09-25 23:11:32",{"path":1060,"words":1061,"published":156,"date":1062},"\u002Fposts\u002F杂记\u002F艹",25,"2023-10-21 17:40:43",{"path":1064,"words":1065,"published":1066,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习卷积神经网络",3168,"2026-06-07 11:23:08",{"path":1068,"words":1069,"published":1070,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习循环神经网络",2348,"2026-06-07 11:33:08",{"path":1072,"words":1073,"published":1074,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习改进学习方法",3360,"2026-06-07 10:13:08",{"path":1076,"words":1077,"published":1078,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习深度生成模型",2727,"2026-06-07 11:43:08",{"path":1080,"words":1081,"published":1082,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习神经网络基础",3205,"2026-06-07 10:03:08",{"id":1084,"title":1085,"abbrlink":1086,"body":1087,"category":5,"cover":156,"date":156,"description":1098,"extension":2094,"mathjax":2095,"meta":2096,"navigation":2095,"path":755,"published":757,"readingMinutes":2099,"seo":2100,"stem":2101,"sticky":156,"swiper_index":156,"tags":2102,"updated":156,"words":756,"__hash__":2103},"posts\u002Fposts\u002F2026\u002F2026-03-28-团队项目协作规范随记.md","2026-03-28-团队项目协作规范随记","19959",{"type":1088,"value":1089,"toc":2071},"minimark",[1090,1095,1099,1104,1120,1131,1256,1260,1263,1268,1274,1279,1285,1289,1294,1299,1352,1357,1394,1399,1430,1501,1509,1517,1523,1529,1535,1541,1545,1604,1613,1620,1623,1631,1634,1637,1644,1652,1655,1658,1661,1663,1666,1669,1767,1770,1784,1787,1797,1803,1807,1810,1815,1835,1838,1844,1847,1853,1856,1862,1866,1869,1886,1891,1896,1902,1908,1914,1920,1926,1933,1939,1942,1956,1960,1970,1975,1982,1986,1989,1993,1997,2005,2009,2016,2024,2028,2035,2043,2046,2052,2058,2062,2068],[1091,1092,1094],"h1",{"id":1093},"一合作规范","一、合作规范",[1096,1097,1098],"p",{},"基于规范提供更丰富的提交历史信息，加速代码审查，和保持提交历史的整洁",[1100,1101,1103],"h3",{"id":1102},"_11-commit-结构","1.1 Commit 结构",[1096,1105,1106,1107,1111,1112,1115,1116,1119],{},"每个 commit 消息都包含三个部分：",[1108,1109,1110],"strong",{},"header",", ",[1108,1113,1114],{},"body",", 和 ",[1108,1117,1118],{},"footer","。",[1121,1122,1128],"pre",{"className":1123,"code":1125,"language":1126,"meta":1127},[1124],"language-Plain","\u003Ctype>(\u003Cscope>): \u003Csubject>\n\u003CBLANK LINE>\n\u003Cbody>\n\u003CBLANK LINE>\n\u003Cfooter>\n","Plain","",[1129,1130,1125],"code",{"__ignoreMap":1127},[1132,1133,1134,1241,1247],"ul",{},[1135,1136,1137,1140,1141,1144,1145,1148,1149,1152,1153],"li",{},[1108,1138,1139],{},"Header",": ",[1129,1142,1143],{},"type","、",[1129,1146,1147],{},"scope"," 和 ",[1129,1150,1151],{},"subject"," 是必需的。\n",[1132,1154,1155,1223,1236],{},[1135,1156,1157,1159,1160],{},[1108,1158,1143],{},": 必须是以下类型之一：\n",[1132,1161,1162,1168,1174,1180,1186,1192,1198,1204,1217],{},[1135,1163,1164,1167],{},[1129,1165,1166],{},"feat",": 引入一个新功能。",[1135,1169,1170,1173],{},[1129,1171,1172],{},"fix",": 修复一个 bug。",[1135,1175,1176,1179],{},[1129,1177,1178],{},"docs",": 只修改了文档。",[1135,1181,1182,1185],{},[1129,1183,1184],{},"style",": 不影响代码含义的改动（如格式化、删除空格等）。",[1135,1187,1188,1191],{},[1129,1189,1190],{},"refactor",": 代码重构，既不是修复 bug 也不是添加功能。",[1135,1193,1194,1197],{},[1129,1195,1196],{},"perf",": 提升性能的代码改动。",[1135,1199,1200,1203],{},[1129,1201,1202],{},"test",": 添加或修改测试。",[1135,1205,1206,1209,1210,1144,1213,1216],{},[1129,1207,1208],{},"build",": 影响构建系统或外部依赖的改动（如 ",[1129,1211,1212],{},"go.mod",[1129,1214,1215],{},"Makefile","）。",[1135,1218,1219,1222],{},[1129,1220,1221],{},"ci",": 对 CI 配置文件和脚本的改动。",[1135,1224,1225,1227,1228,1111,1231,1111,1234,1216],{},[1108,1226,1147],{}," (可选): 指明本次提交影响的范围（如 ",[1129,1229,1230],{},"model",[1129,1232,1233],{},"controller",[1129,1235,1221],{},[1135,1237,1238,1240],{},[1108,1239,1151],{},": 对变更的简洁描述，统一使用中文，不超过 50 个字符，结尾不加句号。",[1135,1242,1243,1246],{},[1108,1244,1245],{},"Body"," (可选): 对变更的更详细描述，解释变更的背景、动机和实现细节。",[1135,1248,1249,1252,1253],{},[1108,1250,1251],{},"Footer"," (可选): 用于存放关联的文档链接（如飞书文档、Meego），或标记 ",[1108,1254,1255],{},"BREAKING CHANGE",[1100,1257,1259],{"id":1258},"_12-commit-示例","1.2 Commit 示例",[1096,1261,1262],{},"一个好的 commit 应该清晰、简洁地描述其目的和内容，并提供必要的上下文",[1096,1264,1265],{},[1108,1266,1267],{},"示例 1：一个简单的新功能",[1121,1269,1272],{"className":1270,"code":1271,"language":1126,"meta":1127},[1124],"feat(api): 支持在搜索结果中展示用户头像\n\n在用户搜索接口的返回结构体中增加 `AvatarURL` 字段，\n并从用户中心服务获取对应的头像地址。\n该功能用于优化搜索结果页的用户体验。\n\n",[1129,1273,1271],{"__ignoreMap":1127},[1096,1275,1276],{},[1108,1277,1278],{},"示例 2：包含破坏性变更的重构",[1121,1280,1283],{"className":1281,"code":1282,"language":1126,"meta":1127},[1124],"refactor(auth): 重构认证模块以支持多点登录\n\n将原有的单点登录逻辑修改为基于 Token 的多点登录机制。\n调整了 `Login` 接口的返回结构，并废弃了 `Session` 相关表。\n\nBREAKING CHANGE:\n- `Login` 接口不再返回 `session_id`，改为返回 `access_token` 和 `refresh_token`。\n- 客户端需要适配新的登录流程，使用 `refresh_token` 刷新 `access_token`。\n- 相关的用户会话管理功能已移除。\n\nDoc: https:\u002F\u002Fbytedance.feishu.cn\u002Fwiki\u002Fwikcnxxxxxxxxxxxx\n",[1129,1284,1282],{"__ignoreMap":1127},[1091,1286,1288],{"id":1287},"二分支管理","二、分支管理",[1290,1291,1293],"h4",{"id":1292},"_12-分支命名模板","1.2 分支命名模板",[1096,1295,1296],{},[1108,1297,1298],{},"1.需求分支（Feature）",[1132,1300,1301,1314,1326],{},[1135,1302,1303,1306,1307,1310,1311],{},[1108,1304,1305],{},"前缀","：",[1129,1308,1309],{},"feature\u002F"," 或 ",[1129,1312,1313],{},"feat\u002F",[1135,1315,1316,1319,1320,1323,1324,1119],{},[1108,1317,1318],{},"用途","：用于开发新功能或需求，从开发分支（",[1129,1321,1322],{},"develop","）创建，完成后合并回",[1129,1325,1322],{},[1135,1327,1328,1331],{},[1108,1329,1330],{},"命名示例",[1132,1332,1333,1338,1343],{},[1135,1334,1335],{},[1129,1336,1337],{},"feature\u002Fuser-login_20250212_JIRA-123",[1135,1339,1340],{},[1129,1341,1342],{},"feature\u002F20250212_SSO-implementation",[1135,1344,1345,1348],{},[1129,1346,1347],{},"feat\u002Fpayment-integration",[1349,1350,1351],"em",{},"（功能描述 + 日期 + 任务ID，增强可追溯性）",[1096,1353,1354],{},[1108,1355,1356],{},"2.Bug修复分支",[1132,1358,1359,1370,1378],{},[1135,1360,1361,1364,1310,1367],{},[1108,1362,1363],{},"前缀：",[1129,1365,1366],{},"bugfix\u002F",[1129,1368,1369],{},"fix\u002F",[1135,1371,1372,1373,1375,1376,1119],{},"**用途：**从",[1129,1374,1322],{},"分支创建，修复后合并回",[1129,1377,1322],{},[1135,1379,1380,1382],{},[1108,1381,1330],{},[1132,1383,1384,1389],{},[1135,1385,1386],{},[1129,1387,1388],{},"bugfix\u002Flogin-error_20250212_JIRA-456",[1135,1390,1391],{},[1129,1392,1393],{},"fix\u002F404-page-redirect",[1096,1395,1396],{},[1108,1397,1398],{},"3.热修复分支（Hotfix）",[1132,1400,1401,1408,1419],{},[1135,1402,1403,1405],{},[1108,1404,1363],{},[1129,1406,1407],{},"hotfix\u002F",[1135,1409,1372,1410,1413,1414,1416,1417,1119],{},[1129,1411,1412],{},"master","分支创建，修复后需同时合并到",[1129,1415,1412],{},"和",[1129,1418,1322],{},[1135,1420,1421,1423],{},[1108,1422,1330],{},[1132,1424,1425],{},[1135,1426,1427],{},[1129,1428,1429],{},"hotfix\u002Fsecurity-patch_20250212",[1431,1432,1433,1454],"table",{},[1434,1435,1436],"thead",{},[1437,1438,1439,1443,1445,1448,1451],"tr",{},[1440,1441,1442],"th",{},"分支类型",[1440,1444,1305],{},[1440,1446,1447],{},"创建来源",[1440,1449,1450],{},"合并目标",[1440,1452,1453],{},"场景",[1455,1456,1457,1472,1486],"tbody",{},[1437,1458,1459,1463,1465,1467,1469],{},[1460,1461,1462],"td",{},"需求分支",[1460,1464,1309],{},[1460,1466,1322],{},[1460,1468,1322],{},[1460,1470,1471],{},"新功能开发",[1437,1473,1474,1477,1479,1481,1483],{},[1460,1475,1476],{},"Bug修复分支",[1460,1478,1366],{},[1460,1480,1322],{},[1460,1482,1322],{},[1460,1484,1485],{},"普通Bug修复",[1437,1487,1488,1491,1493,1495,1498],{},[1460,1489,1490],{},"热修复分支",[1460,1492,1407],{},[1460,1494,1412],{},[1460,1496,1497],{},"master + develop",[1460,1499,1500],{},"生产环境紧急修复",[1096,1502,1503,1506],{},[1108,1504,1505],{},"最高推荐（团队使用）",[1129,1507,1508],{},"\u003Ctype>\u002F\u003Cticket-id>-\u003Ckebab-case-description>",[1121,1510,1515],{"className":1511,"code":1513,"language":1514,"meta":1127},[1512],"language-text","feature\u002FJIRA-1234-add-social-login\nbugfix\u002FLINEAR-567-fix-mobile-navbar-overflow\nhotfix\u002Furgent-fix-2026-01-rce-vulnerability\nrefactor\u002Fremove-deprecated-auth-endpoint\n","text",[1129,1516,1513],{"__ignoreMap":1127},[1096,1518,1519,1522],{},[1108,1520,1521],{},"无 ticket 系统时的简化版","（个人\u002F小团队常用）",[1121,1524,1527],{"className":1525,"code":1526,"language":1514,"meta":1127},[1512],"feature\u002Fadd-dark-mode-toggle\nbugfix\u002Flogin-button-disabled-state\nhotfix\u002Fincrease-api-timeout-30s\n",[1129,1528,1526],{"__ignoreMap":1127},[1096,1530,1531,1534],{},[1108,1532,1533],{},"带日期的紧急 hotfix","（安全事件常用）",[1121,1536,1539],{"className":1537,"code":1538,"language":1514,"meta":1127},[1512],"hotfix\u002F2026-01-15-security-patch-jwt\n",[1129,1540,1538],{"__ignoreMap":1127},[1290,1542,1544],{"id":1543},"禁止-不推荐的命名方式","禁止 \u002F 不推荐的命名方式",[1132,1546,1547,1566,1575,1581,1587,1594],{},[1135,1548,1549,1144,1551,1144,1554,1144,1556,1144,1559,1144,1562,1565],{},[1129,1550,1202],{},[1129,1552,1553],{},"tmp",[1129,1555,1172],{},[1129,1557,1558],{},"new",[1129,1560,1561],{},"update",[1129,1563,1564],{},"bug","（太泛，无信息量）",[1135,1567,1568,1144,1571,1574],{},[1129,1569,1570],{},"feature123",[1129,1572,1573],{},"bug-456","（没有前缀分类）",[1135,1576,1577,1580],{},[1129,1578,1579],{},"Feature\u002FLoginPage","（大写 + 驼峰）",[1135,1582,1583,1586],{},[1129,1584,1585],{},"feature_user_profile","（下划线，排序不友好）",[1135,1588,1589,1590,1593],{},"超长名字：",[1129,1591,1592],{},"this-is-a-very-very-long-branch-name-for-testing-purposes-only","（阅读困难）",[1135,1595,1596,1597,1144,1600,1603],{},"只用数字：",[1129,1598,1599],{},"12345",[1129,1601,1602],{},"20260116","（完全看不懂）",[1100,1605,1607,1416,1610],{"id":1606},"git-rebase和git-merge",[1129,1608,1609],{},"git rebase",[1129,1611,1612],{},"git merge",[1096,1614,1615,1416,1617,1619],{},[1129,1616,1609],{},[1129,1618,1612],{},"一样都是用于从一个分支获取并且合并到当前分支，但工作方式不同",[1096,1621,1622],{},"假设当前你在feature分支上进行新功能的开发， 与此同时master分支上也合入了其他人提交的代码\n如果采用merge的方式将master上新的代码合并到本地的feature分支上：",[1121,1624,1629],{"className":1625,"code":1627,"language":1628,"meta":1127},[1626],"language-JSON","git merge master feature\n","JSON",[1129,1630,1627],{"__ignoreMap":1127},[1096,1632,1633],{},"此时git会在feature上自动产生一个新的commit（合并提交）\nmerge最大的好处就是它是安全的，现有的分支不会被更改，从而避免了接下来要讲的rebase潜在的缺点。当合并过程中遇到冲突时，仅需要修改后重新commit。虽然merge详尽记录了真实commit的详情（并不一定是坏处），但是当master非常活跃时，每次合并上游更改都将引入一个合并提交，会产生比较多的分叉，这多少会污染提交记录，不利于后续梳理分支历史。",[1096,1635,1636],{},"rebase则是采用了另外一种思路。当使用rebase时，git会找到feature和master两条分支的最近公共祖先（LCA），然后从master节点开始，重放从LCA到feature最近提交之间的所有提交，也就是把整个feature分支移动到master的后面，从而把master上新的提交合并进来",[1096,1638,1639,1640,1643],{},"rebase最大的好处就是项目历史会非常整洁，不会像merge那样引入自动生成的合并提交，从而使得项目历史呈现出完美的线性——可以从项目的终点浏览到起点而不会遇到任何分叉。但是由于rebase本质上是重写提交历史，因此rebase后重新push时往往需要带上",[1129,1641,1642],{},"--force","选项，即强制覆盖远端分支，如果使用不慎的话有可能会带来灾难性的后果。因此也引入了所谓rebase的黄金法则：",[1645,1646,1647],"blockquote",{},[1096,1648,1649],{},[1108,1650,1651],{},"绝对不要在公共分支上使用rebase。",[1096,1653,1654],{},"比如，如果把master分支rebase到feature分支上，rebase会将所有master分支的commit移动到你的feature分支的头部",[1096,1656,1657],{},"然而，由于其他人还在original master上开发，由于你使用了rebase移动了master，git会认为你的主分支的历史与其他人的有冲突，当其他人拉取master分支将不得不去重新合并提交。",[1659,1660],"hr",{},[1659,1662],{},[1100,1664,1665],{"id":1665},"分支命名规范",[1096,1667,1668],{},"为了使分支管理更加清晰有序，提高团队协作效率，建议遵循以下分支命名规范：",[1132,1670,1671,1691,1710,1729,1748,1756],{},[1135,1672,1673,1140,1676,1679,1680],{},[1108,1674,1675],{},"功能分支 (Feature Branch)",[1129,1677,1678],{},"feature\u002F功能名称","，适用于开发新功能的分支",[1132,1681,1682],{},[1135,1683,1684,1685,1111,1688],{},"示例：",[1129,1686,1687],{},"feature\u002Fuser-login",[1129,1689,1690],{},"feature\u002Fpayment-system",[1135,1692,1693,1140,1696,1699,1700],{},[1108,1694,1695],{},"修复分支 (Fix Branch)",[1129,1697,1698],{},"fix\u002Fbug描述","，用于修复 bug 的分支",[1132,1701,1702],{},[1135,1703,1684,1704,1111,1707],{},[1129,1705,1706],{},"fix\u002Flogin-error",[1129,1708,1709],{},"fix\u002Fmemory-leak",[1135,1711,1712,1140,1715,1718,1719],{},[1108,1713,1714],{},"热修复分支 (Hotfix Branch)",[1129,1716,1717],{},"hotfix\u002F紧急修复描述","，用于紧急修复生产环境问题的分支",[1132,1720,1721],{},[1135,1722,1684,1723,1111,1726],{},[1129,1724,1725],{},"hotfix\u002Fcritical-security-fix",[1129,1727,1728],{},"hotfix\u002Fpayment-bug",[1135,1730,1731,1140,1734,1737,1738],{},[1108,1732,1733],{},"发布分支 (Release Branch)",[1129,1735,1736],{},"release\u002F版本号","，用于准备发布的分支",[1132,1739,1740],{},[1135,1741,1684,1742,1111,1745],{},[1129,1743,1744],{},"release\u002Fv1.2.0",[1129,1746,1747],{},"release\u002F2023.12",[1135,1749,1750,1140,1753,1755],{},[1108,1751,1752],{},"开发分支 (Develop Branch)",[1129,1754,1322],{},"，作为日常开发的主要分支",[1135,1757,1758,1140,1761,1310,1764,1766],{},[1108,1759,1760],{},"主分支 (Master\u002FMain Branch)",[1129,1762,1763],{},"main",[1129,1765,1412],{},"，作为稳定版本的分支",[1096,1768,1769],{},"命名规则通用要求：",[1132,1771,1772,1775,1778,1781],{},[1135,1773,1774],{},"使用小写字母",[1135,1776,1777],{},"单词间使用连字符(-)分隔",[1135,1779,1780],{},"描述简洁明确，能准确反映分支用途",[1135,1782,1783],{},"避免使用无意义的数字或字母组合",[1100,1785,1786],{"id":1786},"分支落后及冲突处理方式",[1096,1788,1789,1790,1148,1793,1796],{},"当存在冲突时，可以通过 ",[1108,1791,1792],{},"Merge",[1108,1794,1795],{},"Rebase"," 两种方式进行解决",[1096,1798,1799,1800,1802],{},"如无特殊需求，推荐使用 ",[1108,1801,1792],{}," 方式。",[1290,1804,1806],{"id":1805},"merge-方式","Merge 方式",[1096,1808,1809],{},"使用 Merge，本地解决冲突并推送到集成分支。",[1096,1811,1812],{},[1108,1813,1814],{},"处理方式特点说明：",[1132,1816,1817,1823,1829],{},[1135,1818,1819,1822],{},[1108,1820,1821],{},"优点","：集成分支和 master 分支的 commit 不会发生变化，且解决冲突复杂性较低。",[1135,1824,1825,1828],{},[1108,1826,1827],{},"缺点","：会生成一个 Merge 节点，如果团队有线性提交记录的要求，将会破坏线性。",[1135,1830,1831,1834],{},[1108,1832,1833],{},"建议使用场景","：团队没有线性提交记录的要求时。",[1096,1836,1837],{},"进入对应的仓库，从当前发布单拉取对应的分支。",[1121,1839,1842],{"className":1840,"code":1841,"language":1514},[1512],"git fetch origin \u002F归档分支变量\u002F\ngit fetch origin \u002F集成分支变量\u002F\ngit checkout \u002F集成分支变量\u002F\n",[1129,1843,1841],{"__ignoreMap":1127},[1096,1845,1846],{},"将归档分支合并到集成分支，并在本地解决冲突",[1121,1848,1851],{"className":1849,"code":1850,"language":1514},[1512],"git merge \u002F归档分支变量\u002F\n",[1129,1852,1850],{"__ignoreMap":1127},[1096,1854,1855],{},"上传代码",[1121,1857,1860],{"className":1858,"code":1859,"language":1514},[1512],"git push origin \u002F集成分支变量\u002F\n",[1129,1861,1859],{"__ignoreMap":1127},[1290,1863,1865],{"id":1864},"rebase-方式","Rebase 方式",[1096,1867,1868],{},"使用 Rebase，本地解决冲突并推送到集成分支",[1132,1870,1871,1876,1881],{},[1135,1872,1873,1875],{},[1108,1874,1821],{},"：能够继续保持各分支提交记录的线性。",[1135,1877,1878,1880],{},[1108,1879,1827],{},"：当前工作分支上的 commit 节点将发生变化，所有未合入到该工作分支的开发任务需要再次进行分支同步。Rebase 过程中解决冲突次数会大于 Merge 方式。",[1135,1882,1883,1885],{},[1108,1884,1833],{},"：团队有强烈的线性提交记录要求，且当前工作分支提交合码的次数较少。",[1887,1888,1889],"ol",{},[1135,1890,1837],{},[1121,1892,1894],{"className":1893,"code":1841,"language":1514},[1512],[1129,1895,1841],{"__ignoreMap":1127},[1887,1897,1899],{"start":1898},2,[1135,1900,1901],{},"将归档分支同步到集成分支，并在本地解决冲突。",[1121,1903,1906],{"className":1904,"code":1905,"language":1514},[1512],"git rebase \u002F归档分支变量\u002F\n",[1129,1907,1905],{"__ignoreMap":1127},[1887,1909,1911],{"start":1910},3,[1135,1912,1913],{},"将本地已解决冲突的集成分支强制推送到远端。",[1121,1915,1918],{"className":1916,"code":1917,"language":1514},[1512],"git push origin \u002F集成分支变量\u002F -f\n",[1129,1919,1917],{"__ignoreMap":1127},[1887,1921,1923],{"start":1922},4,[1135,1924,1925],{},"根据团队规范，自行决定是否恢复保护策略。",[1100,1927,1929,1932],{"id":1928},"pnpm-lockyaml-冲突",[1129,1930,1931],{},"pnpm-lock.yaml"," 冲突",[1096,1934,1935,1936,1938],{},"在多人协同开发过程中，rebase 分支可能会带来 ",[1129,1937,1931],{}," 文件的冲突。",[1096,1940,1941],{},"处理方式如下：",[1887,1943,1944,1951],{},[1135,1945,1946,1947,1950],{},"通常情况下只需要再执行一次 ",[1129,1948,1949],{},"pnpm i","，让 pnpm 自动修复 lock 文件即可。",[1135,1952,1953,1954,1119],{},"如果无法解决，很可能是此时你的 lock 文件已经损坏，可以拉取主分支完好的 lock 文件覆盖后，再执行一次 ",[1129,1955,1949],{},[1091,1957,1959],{"id":1958},"三commit-规范自动化","三、Commit 规范自动化",[1096,1961,1962,1963,1148,1966,1969],{},"为了确保团队成员遵守统一的 commit 规范，可以借助 ",[1129,1964,1965],{},"commitlint",[1129,1967,1968],{},"husky"," 工具来自动化检查 commit 信息",[1971,1972,1974],"h2",{"id":1973},"_1-husky-介绍","1. Husky 介绍",[1096,1976,1977,1978,1981],{},"Husky 是一个 Git Hook 工具，它可以让你在 Git 的各个生命周期（如 commit、push、merge 等）中执行自定义脚本。通过 Husky，我们可以在开发者执行 ",[1129,1979,1980],{},"git commit"," 时自动检查 commit 信息是否符合规范。",[1971,1983,1985],{"id":1984},"_2-commitlint-介绍","2. Commitlint 介绍",[1096,1987,1988],{},"Commitlint 是一个专门用来检查 commit 信息是否符合约定规范的工具。它通过配置文件定义规则，验证提交信息的格式。",[1971,1990,1992],{"id":1991},"_3-安装与配置","3. 安装与配置",[1100,1994,1996],{"id":1995},"_31-安装依赖","3.1 安装依赖",[1121,1998,2003],{"className":1999,"code":2001,"language":2002,"meta":1127},[2000],"language-bash","# 安装 husky、@commitlint\u002Fcli 和 @commitlint\u002Fconfig-conventional\nnpm install --save-dev husky @commitlint\u002Fcli @commitlint\u002Fconfig-conventional\n# 或者使用 yarn\nyarn add --dev husky @commitlint\u002Fcli @commitlint\u002Fconfig-conventional\n","bash",[1129,2004,2001],{"__ignoreMap":1127},[1100,2006,2008],{"id":2007},"_32-配置-commitlint","3.2 配置 Commitlint",[1096,2010,2011,2012,2015],{},"创建 ",[1129,2013,2014],{},"commitlint.config.js"," 文件：",[1121,2017,2022],{"className":2018,"code":2020,"language":2021,"meta":1127},[2019],"language-js","module.exports = {\n    extends: [\"@commitlint\u002Fconfig-conventional\"],\n    rules: {\n        \"type-enum\": [\n            2,\n            \"always\",\n            [\n                \"feat\", \u002F\u002F 新功能\n                \"fix\", \u002F\u002F 修复bug\n                \"docs\", \u002F\u002F 文档\n                \"style\", \u002F\u002F 代码格式调整\n                \"refactor\", \u002F\u002F 代码重构\n                \"perf\", \u002F\u002F 性能优化\n                \"test\", \u002F\u002F 测试\n                \"build\", \u002F\u002F 构建相关\n                \"ci\", \u002F\u002F CI配置\n                \"chore\", \u002F\u002F 其他修改\n                \"revert\", \u002F\u002F 回退\n            ],\n        ],\n        \"type-case\": [0], \u002F\u002F 设置为0则禁用此规则\n        \"type-empty\": [0], \u002F\u002F 设置为0则禁用此规则\n        \"scope-empty\": [0],\n        \"subject-case\": [0], \u002F\u002F 设置为0则禁用此规则\n        \"subject-empty\": [0], \u002F\u002F 设置为0则禁用此规则\n        \"header-max-length\": [2, \"always\", 72], \u002F\u002F header最大长度为72\n    },\n};\n","js",[1129,2023,2020],{"__ignoreMap":1127},[1100,2025,2027],{"id":2026},"_33-配置-husky","3.3 配置 Husky",[1096,2029,2030,2031,2034],{},"在 ",[1129,2032,2033],{},"package.json"," 中添加 husky 配置：",[1121,2036,2041],{"className":2037,"code":2039,"language":2040,"meta":1127},[2038],"language-json","{\n    \"husky\": {\n        \"hooks\": {\n            \"commit-msg\": \"commitlint -E HUSKY_GIT_PARAMS\",\n            \"pre-commit\": \"npm run lint && npm run test\"\n        }\n    }\n}\n","json",[1129,2042,2039],{"__ignoreMap":1127},[1096,2044,2045],{},"或者通过命令行设置：",[1121,2047,2050],{"className":2048,"code":2049,"language":2002,"meta":1127},[2000],"# 添加 commit-msg hook\nnpx husky add .husky\u002Fcommit-msg 'npx --no-install commitlint --edit \"$1\"'\n# 添加 pre-commit hook\nnpx husky add .husky\u002Fpre-commit 'npm run lint && npm run test'\n",[1129,2051,2049],{"__ignoreMap":1127},[1096,2053,2054,2055,2057],{},"配置完成后，当开发者执行 ",[1129,2056,1980],{}," 时，如果提交信息不符合规范，commit 会被拒绝，并显示错误信息，信息符合规范则提交成功",[1091,2059,2061],{"id":2060},"四mr-准入检查","四、MR 准入检查",[1096,2063,2064,2065,2067],{},"为了保证代码质量和工程规范的有效执行，所有 MR都合入 ",[1129,2066,1412],{}," 分支前，须通过自动化检查",[1096,2069,2070],{},"这个什么的到时候直接发code review吧\n自动化有时间可以整",{"title":1127,"searchDepth":1922,"depth":1922,"links":2072},[2073,2074,2078,2080,2081,2085,2087,2088,2089],{"id":1102,"depth":1910,"text":1103},{"id":1258,"depth":1910,"text":1259,"children":2075},[2076,2077],{"id":1292,"depth":1922,"text":1293},{"id":1543,"depth":1922,"text":1544},{"id":1606,"depth":1910,"text":2079},"git rebase和git merge",{"id":1665,"depth":1910,"text":1665},{"id":1786,"depth":1910,"text":1786,"children":2082},[2083,2084],{"id":1805,"depth":1922,"text":1806},{"id":1864,"depth":1922,"text":1865},{"id":1928,"depth":1910,"text":2086},"pnpm-lock.yaml 冲突",{"id":1973,"depth":1898,"text":1974},{"id":1984,"depth":1898,"text":1985},{"id":1991,"depth":1898,"text":1992,"children":2090},[2091,2092,2093],{"id":1995,"depth":1910,"text":1996},{"id":2007,"depth":1910,"text":2008},{"id":2026,"depth":1910,"text":2027},"md",true,{"uuid":2097,"slots":2098},"cfc05460-2aed-11f1-bb97-5b99ede1e512",{},8,{"title":1085,"description":1098},"posts\u002F2026\u002F2026-03-28-团队项目协作规范随记",[262,263,264,265],"MjcpG-dyTkJ6gPbMW9av6X-M7IJ4x2qopaCLOSvEawg",1790443285559]