[{"data":1,"prerenderedAt":1274},["ShallowReactive",2],{"post:\u002Fposts\u002Fswdesign\u002Fsw-design-notes-06":3,"posts:ordered":973},{"id":4,"title":5,"body":6,"category":954,"cover":955,"date":956,"description":957,"extension":958,"featured":959,"meta":960,"navigation":961,"path":962,"seo":963,"series":964,"seriesOrder":965,"stem":966,"tags":967,"__hash__":972},"posts\u002Fposts\u002FswDesign\u002Fsw-design-notes-06.md","软件分析与设计笔记 06：范围界定（数据侧）：用数据校验你的判断",{"type":7,"value":8,"toc":930},"minimark",[9,16,25,30,33,40,43,95,102,108,111,115,122,127,130,206,213,216,291,298,305,311,315,318,325,329,333,336,358,365,368,441,448,452,455,474,480,483,488,491,495,499,504,515,519,524,532,535,538,542,583,590,597,601,604,630,636,639,662,665,716,719],[10,11,12],"blockquote",{},[13,14,15],"p",{},"这是我在学习软件分析与设计时整理的系列笔记。概念部分是我按自己的理解写的，示例与图示都是自己编、自己画的。理解有偏差的地方欢迎指出。",[10,17,18],{},[13,19,20,24],{},[21,22,23],"strong",{},"贯穿案例","：片区家电维修派单系统。04 做了预习、05 界定了范围，这一篇用数据去校验前两篇里那些「假设」。",[26,27,29],"h2",{"id":28},"_0-当访谈结论和数字对不上","0 当访谈结论和数字对不上",[13,31,32],{},"先看一个和本项目结构一样的矛盾。",[13,34,35,36,39],{},"客服小林在访谈里说：「",[21,37,38],{},"最麻烦的是找不到工程师","，我一天有半天在打电话问他们有没有空。」听起来，核心需求就是「排期可见」。",[13,41,42],{},"但翻开她自己的 Excel 记录，统计一下 80 通来电的类型，会看到另一幅图景：",[44,45,46,59],"table",{},[47,48,49],"thead",{},[50,51,52,56],"tr",{},[53,54,55],"th",{},"来电类型",[53,57,58],{},"占比",[60,61,62,71,79,87],"tbody",{},[50,63,64,68],{},[65,66,67],"td",{},"客户问「几点到」",[65,69,70],{},"约 50%",[50,72,73,76],{},[65,74,75],{},"客户报新故障",[65,77,78],{},"约 25%",[50,80,81,84],{},[65,82,83],{},"客服打给工程师问排期（往外拨）",[65,85,86],{},"约 20%",[50,88,89,92],{},[65,90,91],{},"其他（改约、投诉）",[65,93,94],{},"约 5%",[13,96,97,98,101],{},"这不是谁在说谎。",[21,99,100],{},"「我认为我最头疼的是找不到工程师」和「我一半的时间在接客户的催促电话」可以同时成立","。访谈拿到的是自我认知，数据拿到的是实际时间分配。",[13,103,104,105],{},"两者的含义完全不同：如果照访谈做「排期看板」，小林自己那 20% 的问题解决了；但如果照数据做「客户自助查进度」，解决的是一半的电话量。",[21,106,107],{},"这两件事都得做，但优先级不一样了。",[13,109,110],{},"笔记 02 已经讲过：数据告诉你发生了什么，用户告诉你为什么。这一篇讲数据这一侧具体怎么用。",[26,112,114],{"id":113},"_1-分析的四个层次","1 分析的四个层次",[13,116,117],{},[118,119],"img",{"alt":120,"src":121},"分析的四个层次与业务目标的映射：四个层次从低到高是 descriptive 发生了什么、diagnostic 为什么发生、predictive 可能会发生什么、prescriptive 应该怎么做；下方给出三行业务目标到分析层次与所需数据的映射示例，并标出每一层比上一层多一个前提","\u002Fimages\u002Fsw-design-notes-06-analytics-layers.svg",[123,124,126],"h3",{"id":125},"_11-四个层次与它们的前提","1.1 四个层次与它们的前提",[13,128,129],{},"从低到高，分析（analytics）通常分四层：",[44,131,132,148],{},[47,133,134],{},[50,135,136,139,142,145],{},[53,137,138],{},"层次",[53,140,141],{},"回答的问题",[53,143,144],{},"需要的前提",[53,146,147],{},"典型手段",[60,149,150,164,178,192],{},[50,151,152,155,158,161],{},[65,153,154],{},"descriptive analytics",[65,156,157],{},"发生了什么",[65,159,160],{},"数据能采到、口径统一",[65,162,163],{},"报表、漏斗、分布统计",[50,165,166,169,172,175],{},[65,167,168],{},"diagnostic analytics",[65,170,171],{},"为什么发生",[65,173,174],{},"有可对比的维度或分组",[65,176,177],{},"分群对比、相关性分析",[50,179,180,183,186,189],{},[65,181,182],{},"predictive analytics",[65,184,185],{},"可能会发生什么",[65,187,188],{},"历史规律稳定、样本足够",[65,190,191],{},"回归、时间序列、分类模型",[50,193,194,197,200,203],{},[65,195,196],{},"prescriptive analytics",[65,198,199],{},"应该怎么做",[65,201,202],{},"各选项的成本可比较",[65,204,205],{},"优化模型、决策规则",[13,207,208,209,212],{},"关键在第三列：",[21,210,211],{},"每一层都比上一层多一个前提","。很多数据项目失败，不是因为模型不够好，而是基础没打牢就直接去做上一层 —— 比如口径都没统一，就急着建预测模型。",[13,214,215],{},"拿贯穿案例走一遍这四层：",[44,217,218,233],{},[47,219,220],{},[50,221,222,224,227,230],{},[53,223,138],{},[53,225,226],{},"本例的问题",[53,228,229],{},"本例的数据",[53,231,232],{},"本例的前提是否成立",[60,234,235,249,263,277],{},[50,236,237,240,243,246],{},[65,238,239],{},"descriptive",[65,241,242],{},"哪些配件经常缺？缺在哪个片区？",[65,244,245],{},"工单配件消耗记录、被拒的领料记录",[65,247,248],{},"✅ 记录已经在 Excel 里，能拿到",[50,250,251,254,257,260],{},[65,252,253],{},"diagnostic",[65,255,256],{},"缺货是集中在某类故障，还是领料习惯？",[65,258,259],{},"缺货记录 + 故障类型 + 当时库存",[65,261,262],{},"⚠️ 故障类型现在没有结构化字段，要先补",[50,264,265,268,271,274],{},[65,266,267],{},"predictive",[65,269,270],{},"下周哪些配件会缺？",[65,272,273],{},"上述历史 + 季节性 + 供应商交期",[65,275,276],{},"❌ 只有 8 个月数据，且没有季节性记录",[50,278,279,282,285,288],{},[65,280,281],{},"prescriptive",[65,283,284],{},"现在该补多少？",[65,286,287],{},"预测结果 + 当前库存 + 供应商可售量",[65,289,290],{},"❌ 依赖上一层",[13,292,293,294,297],{},"这张表本身就是个有价值的结论：",[21,295,296],{},"「提前预判哪些配件下周会短缺」这个诉求，在本例里做不到 Predictive 这一层","。数据只有 8 个月、且没有季节性标记，预测出来的东西不可信。",[13,299,300,301,304],{},"那怎么办？退一步做 diagnostic 加一条简单的规则 —— ",[21,302,303],{},"「某配件连续两周出库量上升且当前库存低于两周用量就提醒」","。这不是预测，是基于规则的处方，但它现在就能做。",[13,306,307,310],{},[21,308,309],{},"知道哪一层做不到，比硬做上一层更有价值","。这一点在考试里也是加分项：能说出「这一层的前提不成立，所以我退回到上一层」比硬写「用 AI 预测」强得多。",[123,312,314],{"id":313},"_12-处理文本的两类方法","1.2 处理文本的两类方法",[13,316,317],{},"除了这四层，还有一类方法处理的是非结构化的文本，而不是报表数字：sentiment mining（情感挖掘）从评价、客服记录里提取情绪倾向；big data analytics（大数据分析）面对的是数据量本身超出常规工具处理能力的场景。它们的共同点是：先解决「怎么把文本变成可统计的东西」，再谈分析。",[13,319,320,321,324],{},"本例里有一份现成的文本数据：",[21,322,323],{},"客服通话记录","。把 80 通电话按「问进度 \u002F 报故障 \u002F 催单 \u002F 投诉」分类，就是一次最朴素的情感挖掘 —— 不需要模型，人工标 200 条就能看出分布。",[26,326,328],{"id":327},"_2-数据准备搜集与应用地图","2 数据准备、搜集与应用地图",[123,330,332],{"id":331},"_21-三步写成一张表","2.1 三步，写成一张表",[13,334,335],{},"数据侧的工作可以归成三步：",[337,338,339,346,352],"ol",{},[340,341,342,345],"li",{},[21,343,344],{},"明确业务目标（business objective）"," —— 这件事是为了改什么？通常要落成可测量的 KPI（关键绩效指标）。",[340,347,348,351],{},[21,349,350],{},"选分析手段"," —— 对应上面四个层次里的哪一层。",[340,353,354,357],{},[21,355,356],{},"列出所需数据"," —— 需要哪些字段、从哪个系统来、能不能采到。",[13,359,360,361,364],{},"把这三步写成一张表，就是",[21,362,363],{},"应用地图（application map）","：每一行从「目标」推到「手段」再推到「数据」。它同时暴露两种问题：目标说不清的，以及数据拿不到的。",[13,366,367],{},"本例的应用地图：",[44,369,370,386],{},[47,371,372],{},[50,373,374,377,380,383],{},[53,375,376],{},"业务目标（KPI）",[53,378,379],{},"分析层次",[53,381,382],{},"所需数据",[53,384,385],{},"现在拿得到吗",[60,387,388,401,414,428],{},[50,389,390,393,395,398],{},[65,391,392],{},"把「问进度」来电从 50% 降到 20%",[65,394,239],{},[65,396,397],{},"来电分类、工单状态查询次数",[65,399,400],{},"❌ 需要新增：来电原因字段",[50,402,403,406,408,411],{},[65,404,405],{},"把「白跑一趟」从 11% 降到 3%",[65,407,253],{},[65,409,410],{},"缺料工单、当时的领料申请",[65,412,413],{},"✅ 纸质单上有，需录入",[50,415,416,419,422,425],{},[65,417,418],{},"缺货提前两天预警",[65,420,421],{},"prescriptive（规则）",[65,423,424],{},"连续两周出库量、当前库存",[65,426,427],{},"⚠️ 库存数据在仓管台账上，需打通",[50,429,430,433,435,438],{},[65,431,432],{},"月度报表从 3 天缩到实时",[65,434,239],{},[65,436,437],{},"工单、评价、时长",[65,439,440],{},"✅ 已有字段，只是散在 Excel",[13,442,443,444,447],{},"注意第一行那个 ❌：",[21,445,446],{},"「来访原因」这个字段现在不存在","。这意味着要实现这个目标，必须先把它加进系统 —— 而这本身就是一条需求。",[123,449,451],{"id":450},"_22-两个需要单独留意的动作","2.2 两个需要单独留意的动作",[13,453,454],{},"这张表里有两个动作需要单独留意：",[456,457,458,464],"ul",{},[340,459,460,463],{},[21,461,462],{},"data preparation（数据准备）"," —— 清洗、补全、统一口径。这一步通常占掉整个数据工作一半以上的时间；",[340,465,466,469,470,473],{},[21,467,468],{},"data collection（数据搜集）"," —— 有些数据现在根本没采，需要在系统里新增埋点。而新增埋点意味着这是",[21,471,472],{},"需求","，要写进需求文档。",[13,475,476,477],{},"第二点是数据侧最容易漏掉的产出：",[21,478,479],{},"「我们需要采集这些字段」本身就是一条需求。",[13,481,482],{},"本例里这条需求长这样：",[10,484,485],{},[13,486,487],{},"系统应记录每次客户来电的原因分类（报修 \u002F 问进度 \u002F 改约 \u002F 投诉 \u002F 其他），由客服在挂断时选择，用于后续分析。",[13,489,490],{},"写给开发看，这就是一个下拉框加一个字段；但如果没有这句，整个「把问进度来电降到 20%」的目标就无法验证。",[26,492,494],{"id":493},"_3-数据能做什么不能做什么","3 数据能做什么、不能做什么",[123,496,498],{"id":497},"_31-能做量化验证发现异常","3.1 能做：量化、验证、发现异常",[13,500,501],{},[21,502,503],{},"能做：",[456,505,506,509,512],{},[340,507,508],{},"量化规模 —— 到底是 5% 的工单白跑，还是 30%；",[340,510,511],{},"验证假设 —— 笔记 04 里那些「假设与理由」，靠数据推翻或确认。本例里「客服人力是瓶颈」这个假设，就被 20% 的往外拨号占比推翻了；",[340,513,514],{},"发现异常 —— 找出与预期不符的地方。比如某个片区的缺料率是其他片区的三倍，这就提示那里有没被理解的东西（可能是配件型号特殊）。",[123,516,518],{"id":517},"_32-不能做解释原因","3.2 不能做：解释原因",[13,520,521],{},[21,522,523],{},"不能做：",[456,525,526],{},[340,527,528,531],{},[21,529,530],{},"解释原因。"," 数据能告诉你缺料工单占 11%，但不会告诉你是因为仓管没看申请，还是因为供应商交期太长。",[13,533,534],{},"所以回到那个词：data-informed design。数据负责指出「哪里不对劲」，用户负责解释「为什么」。",[13,536,537],{},"本例里那条 11% 的缺料率，必须去问仓管小周才能定性 —— 她可能会说「申请是收到了，但那个型号供应商要等两周」。这句话数据里没有，但它决定了方案是「加库存」还是「换供应商」。",[26,539,541],{"id":540},"_4-数据最容易在哪几个地方骗你","4 数据最容易在哪几个地方骗你",[456,543,544,550,556,562,577],{},[340,545,546,549],{},[21,547,548],{},"样本偏差（sample bias）。"," 只统计了用了这个功能的人，没用过的人不在样本里，而后者往往才是重点。本例：只统计线上报修的用户，会漏掉那些「打过一次电话就再也不来了」的客户；",[340,551,552,555],{},[21,553,554],{},"幸存者偏差（survivorship bias）。"," 你看到的是留下来的用户，流失用户的行为轨迹在他们离开后就断了；",[340,557,558,561],{},[21,559,560],{},"指标口径不一致（metric definition）。"," 「完成率」在两张报表里定义不同 —— 是「当天完成」还是「一周内完成」？结论就会互相打架；",[340,563,564,567,568,572,573,576],{},[21,565,566],{},"数据质量（data quality）问题。"," 埋点漏报、字段缺失、时间戳时区错乱。本例：Excel 里的日期手填，有 ",[569,570,571],"code",{},"11\u002F3"," 也有 ",[569,574,575],{},"2026-11-03","，直接排序就乱；",[340,578,579,582],{},[21,580,581],{},"数据管道（data pipeline）中断。"," 中间某个环节停了几天，导致对比的两个时间段根本不可比。",[13,584,585,586,589],{},"这五条有个共同特征：",[21,587,588],{},"它们都不会报错，只会给出看起来正常的错结论","。所以在用数据下判断前，先花点时间确认数据本身可信。",[13,591,592,593,596],{},"本例里最该先做的是",[21,594,595],{},"口径统一","：「白跑一趟」到底算不算「到了现场但客户不在家」？如果不先定义，11% 这个数字每人数出来都不一样。",[26,598,600],{"id":599},"_5-数据侧的四个准备动作","5 数据侧的四个准备动作",[13,602,603],{},"把上面这些收成可执行的四步：",[337,605,606,612,618,624],{},[340,607,608,611],{},[21,609,610],{},"先写业务目标与 KPI","，再谈数据。目标不明确的报表，做出来也没人看；",[340,613,614,617],{},[21,615,616],{},"确定基线（baseline）"," —— 改动之前的数值是多少？本例的基线是：问进度来电 50%、缺料率 11%、月报耗时 3 天；",[340,619,620,623],{},[21,621,622],{},"检查数据质量"," —— 这个时间段的数据是全的，还是台账刚记了一半；",[340,625,626,629],{},[21,627,628],{},"最后才看数","，并且把结论写成可验证的假设，回到数据里确认（和笔记 02 的四步法同一个落点）。",[13,631,632,633],{},"第 2 步的基线很容易被跳过，但它决定了这个项目最后能不能证明自己有用。",[21,634,635],{},"没有基线，上线后无论数字是多少，都没法说「改善了」。",[26,637,638],{"id":638},"本节自测",[337,640,641,644,647,650,653,656,659],{},[340,642,643],{},"访谈说「最头疼找不到工程师」，数据说「一半时间在接催促电话」，这个矛盾怎么解释？它如何改变了优先级？",[340,645,646],{},"分析的四个层次里，为什么不能跳过前两层直接做预测？",[340,648,649],{},"本例「提前预判配件短缺」为什么做不到 Predictive 层？退而求其次的做法是什么？",[340,651,652],{},"什么是应用地图（application map）？它能暴露哪两类问题？",[340,654,655],{},"为什么「新增埋点」本身也是一条需求？举出本例中的一条。",[340,657,658],{},"举出一个「不会报错、但会给出错结论」的数据问题，用本例说明。",[340,660,661],{},"为什么必须先确定基线？本例的基线是什么？",[123,663,664],{"id":664},"参考答案",[337,666,667,674,679,686,697,703,710],{},[340,668,669,670,673],{},"因为",[21,671,672],{},"访谈拿到的是自我认知，数据拿到的是实际时间分配","，两者可以同时成立。它把优先级改了：按访谈只做「排期看板」，解决客服往外拨的 20%；按数据做「客户自助查进度」，解决的是一半电话量 —— 两件都做，但顺序不同（§0）。",[340,675,669,676,678],{},[21,677,211],{},"：预测要求历史规律稳定、样本足够，而这依赖口径统一（描述层）和可对比维度（诊断层）。基础没打牢直接建模，模型再好也无效（§1.1）。",[340,680,681,682,685],{},"因为数据只有 8 个月、且没有季节性记录，",[21,683,684],{},"Predictive 的前提不成立","。退法是做 diagnostic 加一条规则：「某配件连续两周出库量上升且库存低于两周用量就提醒」—— 不是预测，是规则，但现在就能做（§1.1）。",[340,687,688,689,692,693,696],{},"应用地图把「业务目标 \u002F 分析层次 \u002F 所需数据」三列对应起来。它暴露两类问题：",[21,690,691],{},"目标说不清的","，以及",[21,694,695],{},"数据拿不到的","（§2.1）。",[340,698,669,699,702],{},[21,700,701],{},"没有这个字段，目标就无法验证","。本例那条需求是「系统应记录每次客户来电的原因分类（报修\u002F问进度\u002F改约\u002F投诉\u002F其他）」，由客服挂断时选择 —— 这就是一个下拉框加一个字段，但缺了它，「把问进度来电降到 20%」永远无法度量（§2.2）。",[340,704,705,706,709],{},"数据质量里的",[21,707,708],{},"口径不一致","。本例「白跑一趟」若没有定义（算不算客户不在家？），11% 这个数字每人数出来都不一样，而且系统不会报错（§4）。",[340,711,669,712,715],{},[21,713,714],{},"没有基线就无法判断改进有没有效果","。本例基线是：问进度来电 50%、缺料率 11%、月报耗时 3 天（§5）。",[26,717,718],{"id":718},"术语表",[44,720,721,734],{},[47,722,723],{},[50,724,725,728,731],{},[53,726,727],{},"术语",[53,729,730],{},"中文",[53,732,733],{},"一句话解释",[60,735,736,747,757,767,777,787,798,809,820,831,842,853,864,875,886,897,908,919],{},[50,737,738,741,744],{},[65,739,740],{},"analytics",[65,742,743],{},"分析",[65,745,746],{},"从数据中提取结论的方法总称",[50,748,749,751,754],{},[65,750,154],{},[65,752,753],{},"描述性分析",[65,755,756],{},"回答发生了什么",[50,758,759,761,764],{},[65,760,168],{},[65,762,763],{},"诊断性分析",[65,765,766],{},"回答为什么发生",[50,768,769,771,774],{},[65,770,182],{},[65,772,773],{},"预测性分析",[65,775,776],{},"回答可能会发生什么",[50,778,779,781,784],{},[65,780,196],{},[65,782,783],{},"处方性分析",[65,785,786],{},"回答应该怎么做",[50,788,789,792,795],{},[65,790,791],{},"business objective",[65,793,794],{},"业务目标",[65,796,797],{},"做这件事要达成的业务结果",[50,799,800,803,806],{},[65,801,802],{},"KPI",[65,804,805],{},"关键绩效指标",[65,807,808],{},"用来衡量目标是否达成的可量化指标",[50,810,811,814,817],{},[65,812,813],{},"application map",[65,815,816],{},"应用地图",[65,818,819],{},"把业务目标、分析手段与所需数据对应起来的表",[50,821,822,825,828],{},[65,823,824],{},"data preparation",[65,826,827],{},"数据准备",[65,829,830],{},"清洗、补全、统一口径等前置工作",[50,832,833,836,839],{},[65,834,835],{},"data collection",[65,837,838],{},"数据搜集",[65,840,841],{},"采集原始数据的过程，常需要新增埋点",[50,843,844,847,850],{},[65,845,846],{},"data quality",[65,848,849],{},"数据质量",[65,851,852],{},"数据在完整性、准确性、一致性上的可靠程度",[50,854,855,858,861],{},[65,856,857],{},"data pipeline",[65,859,860],{},"数据管道",[65,862,863],{},"数据从产生端流到使用端所经过的环节",[50,865,866,869,872],{},[65,867,868],{},"metric definition",[65,870,871],{},"指标口径",[65,873,874],{},"一个指标具体怎么算的定义",[50,876,877,880,883],{},[65,878,879],{},"sample bias",[65,881,882],{},"样本偏差",[65,884,885],{},"样本不能代表整体而产生的偏差",[50,887,888,891,894],{},[65,889,890],{},"survivorship bias",[65,892,893],{},"幸存者偏差",[65,895,896],{},"只看到留存下来的对象，忽略已消失的",[50,898,899,902,905],{},[65,900,901],{},"baseline",[65,903,904],{},"基线",[65,906,907],{},"改动之前的数值，用于对比改进效果",[50,909,910,913,916],{},[65,911,912],{},"sentiment mining",[65,914,915],{},"情感挖掘",[65,917,918],{},"从文本中提取情绪倾向的分析方法",[50,920,921,924,927],{},[65,922,923],{},"big data analytics",[65,925,926],{},"大数据分析",[65,928,929],{},"面向超大规模数据的分析手段",{"title":931,"searchDepth":932,"depth":932,"links":933},"",3,[934,936,940,944,948,949,950,953],{"id":28,"depth":935,"text":29},2,{"id":113,"depth":935,"text":114,"children":937},[938,939],{"id":125,"depth":932,"text":126},{"id":313,"depth":932,"text":314},{"id":327,"depth":935,"text":328,"children":941},[942,943],{"id":331,"depth":932,"text":332},{"id":450,"depth":932,"text":451},{"id":493,"depth":935,"text":494,"children":945},[946,947],{"id":497,"depth":932,"text":498},{"id":517,"depth":932,"text":518},{"id":540,"depth":935,"text":541},{"id":599,"depth":935,"text":600},{"id":638,"depth":935,"text":638,"children":951},[952],{"id":664,"depth":932,"text":664},{"id":718,"depth":935,"text":718},"学习",null,"2026-10-28","访谈结论和数字对不上时该怎么办：分析的四个层次分别在回答什么问题、为什么不能跳级、数据准备与搜集怎么做成一张应用地图，以及数据最容易在哪几个地方骗你。","md",false,{},true,"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-06",{"title":5,"description":957},"软件分析与设计笔记",6,"posts\u002FswDesign\u002Fsw-design-notes-06",[968,969,970,971],"需求分析","数据分析","需求获取","学习笔记","-kbLWrMIaXF6xRxEuTdNABfQy2wB7Y45sRHqPzEa6sY",[974,980,986,992,998,1004,1010,1016,1022,1028,1034,1040,1046,1052,1058,1064,1070,1075,1081,1087,1093,1099,1105,1106,1112,1118,1123,1128,1134,1140,1144,1148,1152,1156,1160,1164,1168,1172,1176,1180,1184,1190,1194,1200,1204,1208,1212,1216,1220,1224,1228,1233,1237,1241,1246,1251,1257,1261,1266,1270],{"path":975,"title":976,"description":977,"date":978,"series":964,"seriesOrder":979},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-28","软件分析与设计笔记 28：draw.io 作图手册：五张图的符号位置、落笔顺序与自检","不模拟软件界面，只讲清三件事：每个 UML 符号在 draw.io 里搜什么词、一张图该按什么顺序落笔、画完拿什么标准自查。覆盖用例图、活动图、顺序图、类图、界面草图五种图纸，末尾附「最容易画反的十二笔」总检表。","2026-11-19",28,{"path":981,"title":982,"description":983,"date":984,"series":964,"seriesOrder":985},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-27","软件分析与设计笔记 27：Paper 1 应试：从读案例到交卷的一次完整演算","拿一份完整的案例，从头到尾走一遍：怎么读案例列角色、怎么在四个小问之间分配时间、每一张图从哪一句话推出来、两张表怎么填、交卷前拿什么清单自查。附 C25 真题与样卷的题型分值对照。","2026-11-18",27,{"path":987,"title":988,"description":989,"date":990,"series":964,"seriesOrder":991},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-26","软件分析与设计笔记 26：总结：把整条链路串起来","系列收尾：从需求到代码的完整链路回顾、每一环的产出与验收方式、六条贯穿全系列的原则，以及一份可以直接拿去做项目自查的清单。","2026-11-17",26,{"path":993,"title":994,"description":995,"date":996,"series":964,"seriesOrder":997},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-25","软件分析与设计笔记 25：代码重构：坏味道与手法","重构不改变外部行为、只改善内部结构：四种常见坏味道与对应手法、为什么动手之前必须先有测试、什么时候该重构，以及重构和前面那些设计模型是什么关系。","2026-11-16",25,{"path":999,"title":1000,"description":1001,"date":1002,"series":964,"seriesOrder":1003},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-24","软件分析与设计笔记 24：设计原则：内聚、耦合与多态","好设计怎么衡量：内聚与耦合分别在说什么、一次从「差设计」到「多态重设计」的完整对照、抽象类与接口的选择依据，以及复用为什么会从优势变成风险。","2026-11-15",24,{"path":1005,"title":1006,"description":1007,"date":1008,"series":964,"seriesOrder":1009},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-23","软件分析与设计笔记 23：设计建模：从对象模型到能实现的方案","分析模型能用但还不能直接开工：对象模型怎么映射到关系模型、继承映射的三种方案怎么选、数据访问层与 Data Broker 解决什么问题，以及三层架构与 MVC 的分工。","2026-11-14",23,{"path":1011,"title":1012,"description":1013,"date":1014,"series":964,"seriesOrder":1015},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-22","软件分析与设计笔记 22：分析建模：边界、实体与控制对象","不经过分析直接写代码会踩什么坑、三种分析对象各管一段、怎么用顺序图完成一次用例实现，以及从顺序图导出类的属性、操作与关系的方法。","2026-11-13",22,{"path":1017,"title":1018,"description":1019,"date":1020,"series":964,"seriesOrder":1021},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-21","软件分析与设计笔记 21：UML：类图与顺序图","为什么需要一种共同的画法：类符号三格怎么画、五种关系的符号与设计含义、每种关系落到 Java 是什么写法，顺序图的三要素怎么摆；以及这三种最容易找不到的符号在 draw.io 里各搜什么词。","2026-11-12",21,{"path":1023,"title":1024,"description":1025,"date":1026,"series":964,"seriesOrder":1027},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-20","软件分析与设计笔记 20：面向对象概念：对象、关系与多态","面向对象不是「用某个语言写代码」：对象与类的区别、封装真正在保护什么、五种关系（依赖、关联、聚合、组合、继承）各自何时用，以及多态为什么能减少条件判断。","2026-11-11",20,{"path":1029,"title":1030,"description":1031,"date":1032,"series":964,"seriesOrder":1033},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-19","软件分析与设计笔记 19：规范化与逻辑数据模型","一次改地址引发的数据不一致，讲清规范化的真正动机；UNF 到 3NF 每一步在解决什么问题，派生字段为什么不能存，优化为什么和规范化方向相反，以及逻辑数据模型在 3NF 之上补了什么。","2026-11-10",19,{"path":1035,"title":1036,"description":1037,"date":1038,"series":964,"seriesOrder":1039},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-18","软件分析与设计笔记 18：数据库分析：实体、关系与数据字典","为什么不能拿到需求就动手建表：实体与关系怎么判定、基数为什么必须由业务方确认、数据命名要遵守什么规则，以及数据字典四列里最容易被空着的那一列。","2026-11-09",18,{"path":1041,"title":1042,"description":1043,"date":1044,"series":964,"seriesOrder":1045},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-17","软件分析与设计笔记 17：用生成式 AI 做设计与开发：能用的场景与要防的坑","生成式 AI 在工作流里真正站得住的三个场景 —— 造示例数据、解释陌生代码、起草初稿；它为什么会复现社会偏见、为什么会编得像真的，以及哪些内容绝不能直接采用。","2026-11-08",17,{"path":1047,"title":1048,"description":1049,"date":1050,"series":964,"seriesOrder":1051},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-16","软件分析与设计笔记 16：从 persona 到 URS：一份交付物的完整骨架","把前面十几篇串成一份能交出去的东西：用户需求规格说明书的九个部分、每一章来自哪个环节、由谁确认，以及面向决策者的提案该讲清哪三件事。","2026-11-07",16,{"path":1053,"title":1054,"description":1055,"date":1056,"series":964,"seriesOrder":1057},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-15","软件分析与设计笔记 15：非功能需求：把「快、稳、安全」变成数字","为什么「系统要快」不是一条需求：非功能需求怎么量化，决定性能的用户量、交易量、数据量三张表怎么估，安全需求要写清什么，以及可靠性的「不可用」该怎么定义。","2026-11-06",15,{"path":1059,"title":1060,"description":1061,"date":1062,"series":964,"seriesOrder":1063},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-14","软件分析与设计笔记 14：软件测试：层级、方法与等价类划分","「我们测过了」这句话问题在哪：为什么静态评审和动态测试缺一不可，五个测试层级各自验证什么，白盒与黑盒的差别，以及用等价类划分和边界值把无限输入变成有限用例的方法。","2026-11-05",14,{"path":1065,"title":1066,"description":1067,"date":1068,"series":964,"seriesOrder":1069},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-13","软件分析与设计笔记 13：需求获取：五种调查方法与一场访谈","需求从哪里来：五种事实调查方法各自适合回答什么、代价是什么，访谈从准备到记录的全过程，问卷设计里最容易犯的错，以及访谈记录必须写下来的那几项信息。","2026-11-04",13,{"path":1071,"title":1072,"description":1073,"date":575,"series":964,"seriesOrder":1074},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-12","软件分析与设计笔记 12：前端设计：把流程变成屏幕","界面设计不是「画得好看」：从活动图走到屏幕的三步，CRUD 任务流怎么当检查表，界面必须回答的三个问题，信息架构与五种导航类型，视觉一致性与留白，以及移动端与 Web 端的差别。",12,{"path":1076,"title":1077,"description":1078,"date":1079,"series":964,"seriesOrder":1080},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-11","软件分析与设计笔记 11：Agentic AI 与业务流程自动化","AI agent 到底是什么：五项能力与四个核心组件，什么场景该用定时任务、什么该用程序、什么才值得用 agent，两种实现路径的差别，必须提前防住的四类失败模式，以及设计方法从提示词到编排的演进。","2026-11-02",11,{"path":1082,"title":1083,"description":1084,"date":1085,"series":964,"seriesOrder":1086},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-10","软件分析与设计笔记 10：精炼用例模型：include、extend 与泛化","三种精炼用例关系的判断标准：include 什么时候用、它和 extend 的区别到底在哪、参与者泛化与用例泛化各解决什么问题，以及精炼到什么程度就该停手。","2026-11-01",10,{"path":1088,"title":1089,"description":1090,"date":1091,"series":964,"seriesOrder":1092},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-09","软件分析与设计笔记 09：功能需求（二）：从流程到业务实体","活动图画完之后，怎么从流程里筛出真正的业务实体：三条判断标准、哪些名词其实不该建实体、属性从哪里来，以及领域模型和后面的数据模型分别负责什么。","2026-10-31",9,{"path":1094,"title":1095,"description":1096,"date":1097,"series":964,"seriesOrder":1098},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-08","软件分析与设计笔记 08：功能需求（一）：用例模型与活动图","从用户故事到用例的翻译过程：什么才算「好」的参与者，系统边界怎么划，用例描述必须写清哪四件事，活动图怎么把分支、并行与泳道画清楚，以及这两个图在 draw.io 里各用哪个形状、最容易画错哪一笔。","2026-10-30",8,{"path":1100,"title":1101,"description":1102,"date":1103,"series":964,"seriesOrder":1104},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-07","软件分析与设计笔记 07：用户故事：把需求写成可验收的一句话","用户故事的三段结构，怎么从用户画像和数据地图里把它提取出来，一条故事多大算合适、时序为什么也是需求的一部分，以及验收标准怎么写才算真的可验收。","2026-10-29",7,{"path":962,"title":5,"description":957,"date":956,"series":964,"seriesOrder":965},{"path":1107,"title":1108,"description":1109,"date":1110,"series":964,"seriesOrder":1111},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-05","软件分析与设计笔记 05：范围界定（用户侧）：用户画像与客户旅程图","为什么「所有用户」是一个陷阱，项目边界该怎么划，用户画像要写哪五个要素、最容易写成什么废纸，客户旅程图怎么把阶段、想法和情绪画在同一张纸上，以及怎么从这两样东西一步步推到可验证的需求。","2026-10-27",5,{"path":1113,"title":1114,"description":1115,"date":1116,"series":964,"seriesOrder":1117},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-04","软件分析与设计笔记 04：接手陌生案例的第一步：三问与一张表","拿到一个完全陌生的业务案例，怎么从零开始不跑偏：只问 Who、What、Why 三个问题，把「问题—事实—假设—理由」记成一张四列表，说清为什么假设必须写明理由，以及带着问题进访谈为什么比空手去有效得多。","2026-10-26",4,{"path":1119,"title":1120,"description":1121,"date":1122,"series":964,"seriesOrder":932},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-03","软件分析与设计笔记 03：Agile 与 Scrum：迭代、角色与产出物","从「三周做完交付，客户说这不是我要的」讲起，说清瀑布式与迭代式的根本差别，Scrum 的三个角色和三种产出物，一个 sprint 里四次固定活动各自在解决什么问题，以及敏捷里最常见的几个误解。","2026-10-25",{"path":1124,"title":1125,"description":1126,"date":1127,"series":964,"seriesOrder":935},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-02","软件分析与设计笔记 02：设计思维、用户驱动与数据驱动","从「客服要一个能一次看完所有排期的界面」这个翻车案例讲起，说清设计思维到底是什么、用户驱动与数据驱动各自能看见什么又看不见什么、为什么真正的落点是把两者合起来的 data-informed design，以及访谈中怎么问出有用的信息。","2026-10-24",{"path":1129,"title":1130,"description":1131,"date":1132,"series":964,"seriesOrder":1133},"\u002Fposts\u002Fswdesign\u002Fsw-design-notes-01","软件分析与设计笔记 01：课程地图与从需求到设计的主干","这一篇不写具体方法，先把整条链路铺开：软件分析与设计到底要解决什么问题，从需求到设计分成哪两段，中间有哪十几个环节，一份完整的交付物里应该有什么，以及后面 27 篇笔记怎么排、新人该按什么顺序读。","2026-10-23",1,{"path":1135,"title":1136,"description":1137,"date":1138,"series":1139,"seriesOrder":1133},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-01","Spring 学习笔记 01：IoC、依赖注入与第一个 Spring Boot 应用","从「手写 new 出来的三层结构」的痛点讲起，说清 IoC 容器、Bean 与依赖注入是怎么回事，再用 Maven 与 Spring Initializr 跑起第一个能返回 JSON 的应用。","2026-10-15","Spring 学习笔记",{"path":1141,"title":1142,"description":1143,"date":1138,"series":1139,"seriesOrder":935},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-02","Spring 学习笔记 02：Spring Data JPA 基础——实体映射与 Repository","用 ORM 把类映射到表：@Entity、@Id、@GeneratedValue 怎么用，CrudRepository 三层接口怎么选，H2 与 MySQL 怎么配，以及 ddl-auto 到底该写哪个值。",{"path":1145,"title":1146,"description":1147,"date":1138,"series":1139,"seriesOrder":932},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-03","Spring 学习笔记 03：JPA 查询——派生方法、JPQL 与分页排序","Repository 自带的方法只够按主键查，这篇讲三种自己造查询的方式：方法名派生、@Query 写 JPQL、原生 SQL，以及 Pageable 分页排序和投影返回。",{"path":1149,"title":1150,"description":1151,"date":1138,"series":1139,"seriesOrder":1117},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-04","Spring 学习笔记 04：JPA 关联映射与仓储测试","一对多、多对多怎么映射，谁负责维护外键，FetchType 与 CascadeType 该怎么选，顺带用 @DataJpaTest 与 AssertJ 把仓储层测起来。",{"path":1153,"title":1154,"description":1155,"date":1138,"series":1139,"seriesOrder":1111},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-05","Spring 学习笔记 05：Spring MVC 与 Thymeleaf 入门","一次页面请求在 Spring MVC 里走了哪几步，@Controller 怎么把数据交给模板，@PathVariable 与 @RequestParam 怎么取参数，以及控制器为什么必须是无状态的。",{"path":1157,"title":1158,"description":1159,"date":1138,"series":1139,"seriesOrder":965},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-06","Spring 学习笔记 06：表单绑定与服务端校验","把表单字段绑到对象上，用 Bean Validation 注解做服务端校验，把错误信息显示回用户刚填的那一页，再补上自定义校验注解与全局异常处理。",{"path":1161,"title":1162,"description":1163,"date":1138,"series":1139,"seriesOrder":1104},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-07","Spring 学习笔记 07：Thymeleaf 片段复用与国际化","用 th:fragment 与 th:insert\u002Fth:replace 把导航栏、页脚抽成片段，页面套用统一布局，再用 messages.properties 与 LocaleResolver 做中英文切换。",{"path":1165,"title":1166,"description":1167,"date":1138,"series":1139,"seriesOrder":1098},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-08","Spring 学习笔记 08：HTTP Session 与会话状态管理","HTTP 无状态带来的问题，Cookie 与 Session 怎么分工，Spring 里读写会话的几种方式，以及会话固定、超时、多实例共享这些必须想清楚的事。",{"path":1169,"title":1170,"description":1171,"date":1138,"series":1139,"seriesOrder":1092},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-09","Spring 学习笔记 09：拦截器 HandlerInterceptor","登录检查、权限判断、请求耗时统计这类横切逻辑该放哪：HandlerInterceptor 的三个回调各在什么时机执行，怎么注册与排除路径，以及它和过滤器的分工。",{"path":1173,"title":1174,"description":1175,"date":1138,"series":1139,"seriesOrder":1086},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-10","Spring 学习笔记 10：Service 层与事务","一组数据库操作要么全成功要么全失败，靠 @Transactional 怎么做到；传播行为、隔离级别、回滚规则怎么选，以及自调用失效、乐观锁悲观锁这些实战里的坑。",{"path":1177,"title":1178,"description":1179,"date":1138,"series":1139,"seriesOrder":1080},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-11","Spring 学习笔记 11：REST API 基础——把 Service 暴露成接口","同一套 Service 怎么同时服务页面和客户端：@RestController 的路由与方法语义、状态码怎么给、DTO 怎么定，以及 MockMvc 端到端和切片测试的两种写法与各自的坑。",{"path":1181,"title":1182,"description":1183,"date":1138,"series":1139,"seriesOrder":1074},"\u002Fposts\u002Fjavaspring\u002Fspring-notes-12","Spring 学习笔记 12：REST 进阶——版本、更新、跨域与文档化","接口能跑通之后要处理的几件事：URL 与响应结构怎么定、版本怎么演进、更新怎么做到可安全重试、CORS 怎么配、HATEOAS 与 Spring Data REST 该不该用。",{"path":1185,"title":1186,"description":1187,"date":1188,"series":1189,"seriesOrder":1117},"\u002Fposts\u002Fjava\u002Fjava-functionalprogramming-notes","Java 函数式编程笔记：Lambda、函数式接口与 Streams","学习 Java 函数式编程时的个人笔记：Lambda 表达式的五步简写与方法引用、常见函数式接口、Stream 流水线与惰性求值，以及创建流、中间操作、终止操作与收集器的用法。示例代码均为自写，运行结果来自本地实测。","2026-10-13","Java 学习笔记",{"path":1191,"title":1192,"description":1193,"date":1188,"series":1189,"seriesOrder":932},"\u002Fposts\u002Fjava\u002Fjava-generics-notes","Java 泛型笔记：泛型方法、有界类型与泛型类","学习 Java 泛型时的个人笔记：从重复的重载方法与多态尝试讲起，再到泛型方法与类型推断、有界泛型类型、Comparable 与 Number 边界，以及泛型类在集合中的用法。示例代码均为自写，运行结果来自本地实测。",{"path":1195,"title":1196,"description":1197,"date":1198,"series":1199,"seriesOrder":1117},"\u002Fposts\u002Fmysql\u002Fmysql-learning-04","MySQL 学习笔记 04：数据操纵（增删改）","MySQL 学习笔记第四篇：INSERT 插入（含批量插入与 INSERT ... SELECT）、UPDATE 更新、DELETE 删除，以及各自的坑。","2026-10-10","SQL 学习笔记",{"path":1201,"title":1202,"description":1203,"date":1198,"series":1199,"seriesOrder":1111},"\u002Fposts\u002Fmysql\u002Fmysql-learning-05","MySQL 学习笔记 05：DDL 概览","MySQL 学习笔记第五篇：数据定义语言概览——Schema、Table、View、Index、Constraints 这几类对象分别对应哪些 CREATE \u002F ALTER \u002F DROP 命令。",{"path":1205,"title":1206,"description":1207,"date":1198,"series":1199,"seriesOrder":965},"\u002Fposts\u002Fmysql\u002Fmysql-learning-06","MySQL 学习笔记 06：CREATE TABLE 与数据类型","MySQL 学习笔记第六篇：CREATE TABLE 的完整语法、常用数据类型的选型建议，以及外键的两种定义方式。",{"path":1209,"title":1210,"description":1211,"date":1198,"series":1199,"seriesOrder":1104},"\u002Fposts\u002Fmysql\u002Fmysql-learning-07","MySQL 学习笔记 07：索引","MySQL 学习笔记第七篇：索引的作用与 B+ 树结构、单列与复合索引的创建、索引的代价与适用场景。",{"path":1213,"title":1214,"description":1215,"date":1198,"series":1199,"seriesOrder":1098},"\u002Fposts\u002Fmysql\u002Fmysql-learning-08","MySQL 学习笔记 08：DROP 与 ALTER","MySQL 学习笔记第八篇：DROP 删除数据库对象、ALTER 修改表结构，以及常见的坑。",{"path":1217,"title":1218,"description":1219,"date":1198,"series":1199,"seriesOrder":1092},"\u002Fposts\u002Fmysql\u002Fmysql-learning-09","MySQL 学习笔记 09：约束与数据完整性","MySQL 学习笔记第九篇：SQL 约束——NOT NULL、CHECK、PRIMARY KEY、FOREIGN KEY 等如何保证数据完整性，以及它们的对比。",{"path":1221,"title":1222,"description":1223,"date":1198,"series":1199,"seriesOrder":1086},"\u002Fposts\u002Fmysql\u002Fmysql-learning-10","MySQL 学习笔记 10：视图","MySQL 学习笔记第十篇：视图（Views）的定义与特性、和表的对比、创建与使用，以及可更新视图的限制。",{"path":1225,"title":1226,"description":1227,"date":1198,"series":1199,"seriesOrder":1080},"\u002Fposts\u002Fmysql\u002Fmysql-learning-11","MySQL 学习笔记 11：存储过程","MySQL 学习笔记第十一篇：存储过程（Stored Procedures）的概念、创建与调用、带参数的写法，以及优缺点。",{"path":1229,"title":1230,"description":1231,"date":1232,"series":1199,"seriesOrder":1133},"\u002Fposts\u002Fmysql\u002Fmysql-learning-01","MySQL 学习笔记 01：MySQL 基础知识","MySQL 学习笔记第一篇：MySQL Server 与 Workbench 的安装，数据库与 DBMS 的基本概念，关系模型、ACID 事务、常见数据类型，以及后续的学习路线。","2026-10-09",{"path":1234,"title":1235,"description":1236,"date":1232,"series":1199,"seriesOrder":935},"\u002Fposts\u002Fmysql\u002Fmysql-learning-02","MySQL 学习笔记 02：SELECT 查询与过滤","MySQL 学习笔记第二篇：SELECT 的基本语法与逻辑执行顺序，WHERE 过滤（比较、LIKE、IN、BETWEEN、NULL）、各种 JOIN、UNION 与子查询。",{"path":1238,"title":1239,"description":1240,"date":1232,"series":1199,"seriesOrder":932},"\u002Fposts\u002Fmysql\u002Fmysql-learning-03","MySQL 学习笔记 03：聚合、分组与输出控制","MySQL 学习笔记第三篇：COUNT\u002FSUM\u002FAVG 等聚合函数、GROUP BY 分组、HAVING 过滤、ORDER BY 与 LIMIT，以及一条 SELECT 的完整逻辑执行顺序。",{"path":1242,"title":1243,"description":1244,"date":1245,"series":1189,"seriesOrder":935},"\u002Fposts\u002Fjava\u002Fjava-oop-notes","Java 面向对象笔记：类、继承、多态与异常","学习 Java 面向对象编程时的个人笔记：类与对象、封装与访问修饰符、继承与多态、集合、抽象类与接口、异常处理。示例代码均为自写，运行结果来自本地实测。","2026-10-06",{"path":1247,"title":1248,"description":1249,"date":1250,"series":1189,"seriesOrder":1133},"\u002Fposts\u002Fjava\u002Fjava-basics-notes","Java 基础语法笔记：从环境安装到方法与数组","学习 Java 基础语法时的个人笔记：JDK 安装、输入输出、变量与运算符、条件与循环、字符串、数组与方法。示例代码均为自写，运行结果来自本地实测。","2026-10-05",{"path":1252,"title":1253,"description":1254,"date":1255,"series":1256,"seriesOrder":1133},"\u002Fposts\u002Fgit\u002Fgit-install-and-basics","Git 安装与基本使用","从装好 Git 到跑通日常提交流程，把最常用的几条命令和它们背后的三个区域讲清楚。","2026-10-04","Git 入门",{"path":1258,"title":1259,"description":1260,"date":1255,"series":1256,"seriesOrder":935},"\u002Fposts\u002Fgit\u002Flocal-remote-repository","本地远程仓库的部署","用自己的机器当 Git 服务器：建一个裸仓库、走 SSH 连上去，把本地提交推上去。",{"path":1262,"title":1263,"description":1264,"date":1255,"series":1265,"seriesOrder":1133},"\u002Fposts\u002Fguide\u002Fguide-file-layout","文件都放在哪","文章、图片、封面分别放在仓库的什么位置，哪些目录可以放手改、哪些碰了会出问题。","博客使用指南",{"path":1267,"title":1268,"description":1269,"date":1255,"series":1265,"seriesOrder":935},"\u002Fposts\u002Fguide\u002Fguide-frontmatter","frontmatter 每个字段是什么意思","文章开头那段被横线包住的字段，逐个说明作用、默认行为和写错的后果。",{"path":1271,"title":1272,"description":1273,"date":1255,"series":1265,"seriesOrder":932},"\u002Fposts\u002Fguide\u002Fguide-markdown","正文怎么写 —— Markdown 与排版效果","标题、链接、图片、代码、表格分别怎么写，以及本站对它们做了哪些自定义处理。",1793268184986]