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