408公式、结论、常量总结
Jackie

408公式、结论、常量总结

根据26版王道书籍整理

数据结构

第1章、绪论

  • O(1)常数阶<O(log2n)对数阶<O(n)线性阶<O(nlog2n)线性对数阶<O(n2)平方阶<O(n3)立方阶<O(2n)指数阶<O(n!)阶乘阶<O(nn)[1]

第3章、栈、队列和数组

  • n个不同元素入栈时,出栈元素不同排列的个数为[2]

1n+1C2nn\frac{1}{n+1}C_{2n}^{n}

  • 循环队列[3]

初始时:Q.front=Q.rear=0

队首指针进1:Q.front=(Q.front+1)%MaxSize

队尾指针进1:Q.rear=(Q.rear+1)%MaxSize

队列长度:(Q.rear+MaxSize-Q.front)%MaxSize

牺牲一个单元来区分队空还是队满

约定以“队首指针在队尾指针的下一位置作为队满的标志”

队满条件:(Q.rear+1)%MaxSize==Q.front

队空条件:Q.front==Q.rear

队列中元素的个数:(Q.rear-Q.front+MaxSize)%MaxSize

  • 二维数组按行/列优先存储的下标对应关系[4]

    设二维数组的行下标与列下标的范围分别为[0,h1]与[0,h2],每个数组元素所占存储单元为L

    • 优先存储结构关系式:LOC(ai,j)=LOC(a0,0)+[i×(h2+1)+j]×L
    • 优先存储结构关系式:LOC(ai,j)=LOC(a0,0)+[j×(h1+1)+i]×L
  • 对称矩阵元素下标对应关系[5]

k={i(i1)2+j1,ij(下三角区和主对角线元素)j(j1)2+i1,i<j(上三角区元素ai,j=aj,i)k= \begin{cases} \frac{i(i-1)}{2} + j - 1,i \geq j(\text{下三角区和主对角线元素}) \\ \frac{j(j-1)}{2} + i - 1,i < j(\text{上三角区元素}a_{i,j}=a_{j,i}) \end{cases}

  • 三角矩阵元素下标对应关系

    • 下三角矩阵

      k={i(i1)2+j1,ij(下三角区和主对角线元素)n(n+1)2,i<j(上三角区元素)k= \begin{cases} \frac{i(i-1)}{2} + j - 1,i \geq j(\text{下三角区和主对角线元素}) \\ \frac{n(n+1)}{2},i < j(\text{上三角区元素}) \end{cases}

    • 上三角矩阵

      k={(i1)(2ni+2)2+(ji),ij(上三角区和主对角线元素)n(n+1)2,i>j(下三角区元素)k= \begin{cases} \frac{(i-1)(2n-i+2)}{2} + (j - i),i \le j(\text{上三角区和主对角线元素}) \\ \frac{n(n+1)}{2},i > j(\text{下三角区元素}) \end{cases}

  • 三对角矩阵

ai,j(1≤i,j≤n,|i-j|≤1)在一维数组B中存放的下标k=2i+j-3

三对角矩阵某个元素ai,j存放在一维数组B第k个位置,则

i=(k+1)/3+1j=k2i+3i=\left \lfloor (k+1)/3+1 \right \rfloor\\ j=k-2i+3

第5章、树与二叉树

  • 树的性质[6]

树的结点数n等于所有结点的度数k之和加1

n=i=1kini+1=i=1knin=\sum_{i=1}^{k}i\cdot n_i+1=\sum_{i=1}^{k}n_i

度为m的树中第i层上至多有mi-1个结点(i≥1)

高度为h的m叉树至多有(mh-1)/(m-1)个结点

  • 树结点与度之间关系[7]

总结点数=n0+n1+n2+…+nm

总分支数=1n1+2n2+…+mnm

总结点数=总分支树+1

  • 二叉树

满二叉树:对于编号为i的结点,若有双亲,则其双亲为

i=i/2i=\left \lfloor i/2 \right \rfloor

若有左孩子,则左孩子为2i,若有右孩子,则右孩子为2i+1

非空二叉树上的叶结点数等于度为2的结点数加1,即n0=n2+1

结点i所在层次(深度)为

log2i+1\left \lfloor log_2i \right \rfloor+1

具有n个(n>0)结点的完全二叉树的高度为

log2(n+1)orlog2n+1\left \lceil log_2(n+1) \right \rceil or \left \lfloor log_2n \right \rfloor +1

  • 含有n个结点的二叉链表中,含有n+1个空链域[8]
  • 前序序列和后序序列不能唯一确定一棵二叉树,但可以确定二叉树中结点的祖先关系:当两个结点的前序序列为XY与后序序列为YX时,则X为Y的祖先[9]
  • 如果是m叉哈夫曼树,需保证初始增加若干权值为0的结点,使得n-1是m-1的倍数[10]
  • 构造哈夫曼树过程中共新建了n-1个结点(双分支结点),因此哈夫曼树的结点总数为2n-1

第6章、图

  • 设图G的邻接矩阵为A,An的元素An[i][j]等于由顶点i到顶点j的长度为n的路径的数目[11]
  • 关键路径[12]

    • 事件vk的最早发生时间ve(k)

      ve(源点)=0

      ve(k)=Max{ve(j)+Weight(vj,vk)},vk为vj的任意后继,Weight(vj,vk)表示<vj,vk>上的权值

    • 事件vk的最迟发生时间vl(k)

      vl(汇点)=ve(汇点)

      vl(k)=Min{vl(j)-Weight(vk,vj)},vk为vj的任意前驱

    • 活动ai的最早开始时间e(i)=ve(k)

    • 活动ai的最迟开始时间l(i)=vj(j)-Weight(vk,vj)

    • 一个活动ai的最迟开始时间l(i)和其最早开始时间e(i)的差额d(i)=l(i)-e(i)

第7章、查找

  • 设nh表示深度h的平衡二叉树中含有的最少结点数,则nh=nh-1+nh-2+1[13]

根结点黑高为h的红黑树内部结点数(关键字)至少(h层黑结点的满树形态)至少有2h-1个

从根到叶结点的最长路径不大于最短路径的2倍

有n个内部结点的红黑树高度h≤2log2(n+1)

  • m阶B树:所有结点的平衡因子均等于0的m路平衡查找树[15]

根结点子树∈[2,m]、关键字数∈[1,m-1]

除根结点外的所有非叶结点子树∈

[m2,m][\left \lceil \frac{m}{2} \right \rceil,m]

关键字数∈

[m21,m1][\left \lceil \frac{m}{2} \right \rceil-1,m-1]

  • B树的高度

B树的高度不包括最后的不带任何信息的叶结点所处的那一层

若n≥1,对任意一棵包含n个关键字、高度为h、阶数为m的B树:

每个结点中的关键字个数达到最多,则容纳同样多关键字的B树的高度达到最小,有h≥logm(n+1)

让每个结点中的关键字个数达到最少,则容纳同样多关键字的B树的高度达到最大,对于关键字个数为n的B树,叶结点即查找不成功的结点为n+1,有

n+12(m2)h1,hence,hlogm2(n+12)+1n+1\ge 2(\left \lceil \frac{m}{2} \right \rceil)^{h-1}, \\ hence,h\le log_{\left \lceil \frac{m}{2} \right \rceil}(\frac{n+1}{2})+1

  • 在B+树中,每个结点(非根内部结点)的关键字个数n的范围是[16]

m2nm\left \lceil \frac{m}{2} \right \rceil \le n\le m

(非叶根结点:2≤n≤m);

而在B树中,每个结点(非根内部结点)的关键字个数n的范围是

m21nm1\left \lceil \frac{m}{2} \right \rceil-1 \le n\le m-1

(非叶根结点:1≤n≤m-1)

第8章、排序

  • 最佳归并树添加长度为0的“虚段”[17]

设度为0的结点有n0个,度为k的结点有nk个,归并树的结点总数为n,有

n=nk+n0(总结点数=度为k的结点数+度为0的结点数)

n=knk+1(总结点数=所有结点的度数之和+1)

因此,对严格k叉树有n0=(k-1)nk+1,由此得nk=(n0-1)/(k-1)

若(n0-1)%(k-1)=0,则这n0个叶结点正好可以构造k叉归并树。此时内结点有nk

若(n0-1)%(k-1)=u≠0,则对于这n0个叶结点有u个多余,不能包含在k叉归并树中,此时需要再加上k-u-1个空归并段才可以建立归并树

操作系统

第2章、进程与线程

  • 管道文件是一个固定大小的缓冲区,在Linux中该缓冲区的大小为4KB[18]
  • 调度的目标[19]

CPU的利用率=CPU有效工作时间CPU有效工作时间+CPU空闲等待时间\text{CPU的利用率}=\frac{\text{CPU有效工作时间}}{\text{CPU有效工作时间+CPU空闲等待时间}}

周转时间=作业完成时间-作业提交时间

平均周转时间=(作业1的周转时间+…+作业n的周转时间)/n

带权周转时间=作业周转时间作业实际运行时间\text{带权周转时间}=\frac{\text{作业周转时间}}{\text{作业实际运行时间}}

平均带权周转时间=(作业1的带权周转时间+…+作业n的带权周转时间)/n

响应比Rp=等待时间+要求服务时间要求服务时间\text{响应比}R_p=\frac{\text{等待时间+要求服务时间}}{\text{要求服务时间}}

  • 实现临界区互斥必须遵循的准则[20]

空闲让进、忙则等待、有限等待、让权等待

前V后P

实现互斥的P操作一定要在实现同步的P操作之后

为避免死锁,系统至少提供的资源量满足:A≥P×(M-1)+1

A:系统至少提供的资源量

P:进程数量

M:每个进程最大需求量

  • 银行家算法

Need=Max-Allocation

尝试将资源分配给P后修改下面的值:

Available=Available-Request

Allocation[i,j]=Allocation[i,j]+Request[i,j]

Need[i,j]=Need[i,j]-Request[i,j]

第4章、文件管理

一个m×n组成的位示图

假设找到值为“0”的二进制位揣位示图的第i行、第j列,其对应的盘块号b=n(i-1)+j

回收的盘块号转换为位示图的行号和列号:i=(b-1)DIV n+1、j=(b-1)MOD n+1

第5章、输入/输出管理

从设备将一块数据输入缓冲区的时间为T,操作系统将该缓冲区中的数据传送到工作区的时间为M,CPU对这一块数据进行处理的时间为C

单缓冲区中T可以和C并行,处理每块数据的平均时间为Max(C,T)+M

双缓冲区中C和M可以与T并行,处理每块数据的平均时间为Max(C+M,T)

磁盘地址用“柱面号·盘面号·扇区号”表示

寻道时间Ts:活动头磁盘在读/写信息前,将磁头移动到目的磁道所需的时间Ts=mn+s

每跨越一个磁道所需的时间为m,磁道数为n,启动磁头臂的时间为s

旋转延迟时间Tr:磁头定位到要读/写扇区所需的时间Tr=1/(2r)

磁盘旋转速度为r,找到目标扇区平均需要转半圈,所以为1/2

传输时间Tt:从磁盘读出或向磁盘写入数据所需的时间Tt=b/(rN)

每次所读/写的字节数为b,磁盘每秒转数为r,一个磁道上的字节数为N,b字节的数据需b/N个磁道

总平均存取时间Ta:Ta=Ts+1/(2r)+b/(rN)

计算机网络

第1章、计算机网络体系结构

  • 计算机网络性能指标[25]

    • 速率:b/s或bps、kb/s(k=103)、Mb/s(M=106)、Gb/s(G=109

    • 带宽(最高数据传输速率):b/s

    • 时延:发送时延、传播时延、处理时延、排队时延

      考试中通常不考虑处理时延和排队时延

      • 发送时延(传输时延):发送时延=分组长度/发送速率(带宽)

        传输时延是节点将分组推向网络所需的时间

      • 传播时延:传播时延=信道长度/电磁波在信道上的传播速率

        传播时延是一个比特从一个节点传播至另一节点所需的时间

      • 时延带宽积:时延带宽积=传播时延×信道带宽

        指发送端发送的第一个比特即将到达终点时,发送端已发出了多少比特,也称以比特为单位的链路长度

    • 往返时延(RTT):不包括发送方的发送时延

    • 信道利用率:信道利用率=有数据通过的时间/(有数据通过的时间+无数据通过的时间)

  • 传输m个分组所需时间t=2r+(m-1)r、链路带宽串行相加,并行取最小[26]

一条由多段链路组成的信道,其带宽(最大数据传输速率)取决于带宽最小的那段链路

  • 计算机网络分层结构

协议数据单元(PDU):各层PDU都分为服务数据单元和协议控制信息两部分

服务数据单元(SDU)

协议控制信息(PCI)

n-SDU+n-PCI=n-PDU=(n-1)-SDU

  • OSI参考模型[27]

物理层(比特Bit)

数据链路层(帧Frame):差错控制、流量控制

网络层(数据报Packet):路由选择、分组转发、拥塞控制、网际互联、差错控制、流量控制、连接建立与释放、可靠传输管理(TCP/IP的网络层没有后四个功能)

传输层(报文段Segment):差错控制、流量控制、连接建立与释放、可靠传输

数据链路层提供的是点到点通信,传输层提供的是端到端通信,两者不同

会话层

表示层:数据格式转换

应用层(报文Message)

网络接口层:功能类似于OSI参考模型的物理层和数据链路层

网际层:路由选择、分组转发、拥塞控制、网际互联

传输层:传输控制协议TCP——报文段Segment;用户数据报协议UDP——用户数据报

应用层

OSI模型在网络层支持无连接和面向连接的通信,但在传输层仅有面向连接的通信

TCP/IP参考模型在网际层仅有一种无连接的通信模式,但传输层支持无连接和面向连接两种模式

第2章、物理层

  • 码元:1T内出现K种信号,则

1码元=log2Kbit1\text{码元}=\left \lceil log_2K \right \rceil bit

  • 码元传输速率(波特率/调制速率):Baud波特[29]

若一个码元携带n比特的信息量,则波特率M Baud对应的比特率是Mn b/s

  • 奈奎斯特定理

理想低通(没有噪声、带宽有限)信道

极限码元传输速率为2W波特,其中W是信道的频率带宽(Hz),若用V表示每个码元的离散电平数量(码元的离散电平数量是指有多少种不同的码元),则极限数据传输速率为

理想低通信道的极限数据传输速率=2Wlog2V(单位为b/s)

  • 香农定理

带宽受限且有高斯噪声干扰的信道的极限数据传输速率

信道的极限数据传输速率=Wlog2(1+S/N)(单位为b/s)

W:信道的频率带宽(Hz)

S:信道内传输信号的平均功率

N:信道内的高斯噪声功率

S/N为信噪比

当采用分贝记法时,信噪比=10log10(S/N)(单位为dB)

若给出了码元与比特数之间的关系,则需受两个公式的共同限制

  • 数字数据编码[30]

非归零编码:低0高1中不变

归零编码:低0高1中归零

反向非归零编码:跳0不跳1看起点,中不变(遇0则变,中不变)

曼彻斯特编码:跳0反跳1看中间,中必变(上0下1)

差分曼彻斯特编码:跳0不跳1看起点,中必变(遇0不变,遇1翻转)

标准以太网使用曼彻斯特编码宽带高速网使用差分曼彻斯特编码

  • 正交幅度调制(QAM)[31]

设波特率为B,采用m个相位,每个相位有n种振幅,则QAM的数据传输速率R=Blog2(mn)

  • 中继器:仅支持半双工通信[32]

  • 集线器:物理上是星型拓扑,逻辑上是总线型拓扑

    集线器的N个端口对应N个网段,哥网段属于同一个“冲突域”

    集线器既不隔离广播域,又不隔离冲突域P211

    交换机不隔离广播域,但隔离冲突域

第3章、数据链路层

  • 海明码位数[33]

n为有限信息的位数,k为检验位的位数,则信息位n和检验位k应满足n+k≤2k-1

CRC检验码的位数等于生成多项式G(x)的最高次数

  • 滑动窗口机制[34]

    • 停止-等待协议(S-W):发送窗口WT=1,接收窗口WR=1

    • 后退N帧协议(GBN):发送窗口WT>1,接收窗口WR=1

    • 选择重传协议:发送窗口WT>1,接收窗口WR>1

      若采用n比特对帧编号,则后两种滑动窗口协议还需满足WT+WR≤2n

    • 多帧滑动窗口与选择重传协议(SR):WR≤WT;WT+WR≤2n

  • 信道利用率分析

    发送方发送分组的发送时延为TD(TD等于分组长度除以数据传输速率)

    接收方发送确认分组的发送时延为TA

    • 停止-等待协议(S-W):

      U=TDTD+RTT+TAU=\frac{T_D}{T_D+RTT+T_A}

    • 连续ARQ协议(采用流水线传输):

      nTD<TD+RTT+TA(在一个发送周期内可以发送完n个分组):

      U=nTDTD+RTT+TAU=\frac{nT_D}{T_D+RTT+T_A}

      nT≥TD+RTT+TA(在一个发送周期内发不完(或刚好发完)n个分组):U =1

信道平均(实际)数据传输速率=信道利用率×信道带宽(最大数据传输速率)

信道平均(实际)数据传输速率=发送周期内发送的数据量/发送周期

  • 码分多址(CDMA)[35]

向量S表示A站的码片向量,T表示B站的码片向量

不同站的码片序列相互正交,即向量S和T的规格化内积为0

ST1mi=1mSiTi=0S\cdot T\equiv \frac{1}{m}\sum_{i=1}^{m}S_iT_i=0

任何站的码片向量和该码片向量自身的规格化内积都是1

SS1mi=1mSi2=1mi=1m(±1)2=1S\cdot S\equiv \frac{1}{m}\sum_{i=1}^{m}S_i^2=\frac{1}{m}\sum_{i=1}^{m}(\pm 1)^2=1

任何站的码片向量和该码片反码的向量的规格化内积都是-1

SS1mi=1mSiSi=1mi=1mSi2=1S\cdot \overline{S}\equiv \frac{1}{m}\sum_{i=1}^{m}S_i\overline{S_i}=-\frac{1}{m}\sum_{i=1}^{m}S_i^2=-1

两个向量在公共信道上叠加,实际上是线性叠加

载波监听多路访问/冲突检测,适用于总线形网络或半双工网络

先听后发、边听边发、冲突停发、随机重发

最短帧长=最大单向传播时延×数据传输速率×2

以太网规定最短帧长为64B,最长帧长为1518B,帧间最小间隔为9.6μs

  • 截断二进制指数退避算法
  1. 确定基本退避时间2τ(争用期)
  2. 从离散的整数集合[0,1,…,(2k-1)]中随机取一个数记为r,重传所需推迟时间为2rτ,参数k=min[重传次数,10]
  3. 当重传达16次仍不成功时抛弃该帧并向高层报错
  • CSMA/CA协议

先听后发、忙则退避

802.11标准允许发送站对信道进行预约

源站在RTS帧中填写的所需占用信道的持续时间,是从收到RTS帧后到目的站最后发送完ACK帧为止的时间,即“SIFS+CTS+SIFS+数据帧+SIFS+ACK”

AP在CTS帧中填写的所需占用信道的持续时间,是从收到CTS帧后到目的站最后发送完ACK帧为止的时间,即“SIFS+数据帧+SIFS+ACK”

  • 以太网MAC帧[38]

首部和尾部为18B,662N4,收发协数验,N是46~1500

  • 802.11局域网的数据帧格式[39]

30 N 4首数验,首部3+1地址

九十比特表去来,帧的中转靠AP

去往AP中起止,来自AP止中起

地址1和地址2分别是无线通信中信道两端的接收地址发送地址

当主机发往AP时,接收地址不是实际的目的地址,因此用地址3来存放实际的目的地址

当AP发往主机时,发送地址不是实际的源地址,因此用地址3来存放实际的源地址

6642N4,收发V协数验

在干线链路上传送的帧是802.1Q帧

  • 设备隔离冲突域和广播域的总结[41]
设备 能否隔离冲突域 能否隔离广播域
集线器 不能 不能
中继器 不能 不能
交换机 不能
网桥 不能
路由器

第4章、网络层

  • IP数据报格式[42]

首部长度为20-60B,418,首总偏

(首部长度,总长度,片偏移)以4B为单位

IP首部前两个字节往往以0x45开头

以太网帧的最大传送单元(MTU)为1500B

许多广域网的MTU不超过576B

片偏移除了最后一个分片外,每个分片的长度一定是8B的整数倍(课后67题)

  • 特殊IP地址用途[43]
IP地址 是否可作为源地址 是否可作为目的地址
主机号全为0 × ×
主机号全为1 ×
127.x.x.x
0.0.0.0 ×
255.255.255.255 ×
网络号为0,主机号为Y
本网络中主机号为Y的主机
×
  • 最佳前缀匹配(最佳匹配):应当从匹配结果中选择具有最长网络前缀的路由

  • ARP工作在网络层、NAT路由器工作在传输层

  • DHCP是应用层协议,它基于UDP;RIP是应用层协议,使用UDP传送数据;OSPF是网络层协议,直接用IP数据报传送

  • MAC地址会随着数据发往不同的网络而改变,IP地址当且仅当数据在私有网络与外部网络传递时才会改变(课后64题)[44]

  • IPv6将地址从IPv4的32位增大到128位,只有源主机才能分片,是端到端的,不允许类似IPv4在中间路由器进行分片[45]

第5章、传输层

  • UDP首部:8B[46]
  • UDP一次发送一个报文,既不合并,又不拆分
  • 计算检验和时,UDP数据报前添加12B的伪首部(IP数据报检验和只检验IP数据报的首部,UDP的检验和要将首部和数据部分一起检验),最高位产生了进位要回卷
  • TCP首部:20B-60B、数据偏移以×4B为单位
  • seq表示发送的报文段中数据部分的第一个字节在A的发送缓存区中的编号,ack表示A期望收到的下一个报文段的数据部分的第一个字节在B的发送缓存区中的编号
  • 只有握手①的ACK=0;握手①②的SYN=1,其他所有TCP的报文段都是0;挥手①③的FIN=1[47]
  • 握手①②不能携带数据;握手③如果不携带数据就不消耗序号;握手①②固定消耗一个序号
  • 挥手①③即使不携带数据也要消耗一个序号;挥手②可以携带数据;挥手④不可以携带数据
  • 发送窗口上限值=min[rwnd,cwnd][48]
  • ssthresh不能小于2
  • TCP连接建立和网络出现超时时,采用慢开始和拥塞避免算法(ssthresh=cwnd/2,cwnd=1)
  • 发送方收到3个冗余ACK时,采用快重传和快恢复算法(ssthresh=cwnd/2,cwnd=ssthresh)

第6章、应用层

  • DNS协议运行在UDP上,53号端口;根域名、顶级域名、二级域名

  • FTP协议运行在TCP上,21号控制端口,20号数据端口,做题默认采用主动模式PORT(S主动向C发起连接)(C连接到S的21号端口,要读取数据时C随机开放一个端口并告知S,S通过20号端口和C连接并发送数据)

  • SMTP用Push的通信方式,POP3用Pull的通信方式;SMTP协议运行在TCP上,25号端口,POP3协议运行在TCP上,110号端口

  • 假设请求n-1个文件,加上Web请求共n个请求

    非持久连接:2n×RTT;持久连接、非流水线:(n+1)×RTT;持久连接、流水线:1×RTT

    如果题目中出现MSS字样需考虑TCP中的拥塞控制

计算机组成原理

第1章、


  1. P6 ↩︎

  2. P63 ↩︎

  3. P77 ↩︎

  4. P101 ↩︎

  5. P102 ↩︎

  6. P126 ↩︎

  7. P130 ↩︎

  8. P133 ↩︎

  9. P159 ↩︎

  10. P184 ↩︎

  11. P207 ↩︎

  12. P240 ↩︎

  13. P290 ↩︎

  14. P291 ↩︎

  15. P311 ↩︎

  16. P314 ↩︎

  17. P391 ↩︎

  18. P43 ↩︎

  19. P69 ↩︎

  20. P99、107 ↩︎

  21. P152 ↩︎

  22. P298 ↩︎

  23. P320 ↩︎

  24. P340 ↩︎

  25. P6 ↩︎

  26. P9 ↩︎

  27. P16 ↩︎

  28. P19 ↩︎

  29. P31 ↩︎

  30. P33 ↩︎

  31. P35 ↩︎

  32. P46 ↩︎

  33. P59 ↩︎

  34. P63 ↩︎

  35. P80 ↩︎

  36. P84 ↩︎

  37. P86 ↩︎

  38. P102 ↩︎

  39. P105 ↩︎

  40. P105 ↩︎

  41. P125 ↩︎

  42. P137 ↩︎

  43. P139 ↩︎

  44. P147-P150 ↩︎

  45. P179 ↩︎

  46. P226 ↩︎

  47. P234 ↩︎

  48. P240 ↩︎

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
总字数 164.3k