-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
383 lines (322 loc) · 52.9 KB
/
Copy pathindex.html
File metadata and controls
383 lines (322 loc) · 52.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
<!DOCTYPE html><html class="hide-aside" lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>narutozxp - Dr.z</title><meta name="keywords" content="student,narutozxp"><meta name="author" content="narutozxp"><meta name="copyright" content="narutozxp"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta name="description" content="任何的努力皆不会白费">
<meta property="og:type" content="website">
<meta property="og:title" content="narutozxp">
<meta property="og:url" content="https://www.narutozxp.top/index.html">
<meta property="og:site_name" content="narutozxp">
<meta property="og:description" content="任何的努力皆不会白费">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://www.narutozxp.top/img/myself.webp">
<meta property="article:author" content="narutozxp">
<meta property="article:tag" content="student">
<meta property="article:tag" content="narutozxp">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://www.narutozxp.top/img/myself.webp"><link rel="shortcut icon" href="/img/myself.webp"><link rel="canonical" href="https://www.narutozxp.top/"><link rel="preconnect" href="//cdn.jsdelivr.net"/><link rel="preconnect" href="//fonts.googleapis.com" crossorigin=""/><link rel="preconnect" href="//busuanzi.ibruce.info"/><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@6.1/dist/fancybox/fancybox.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Great%20Vibes" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: {"path":"/search.xml","preload":false,"languages":{"hits_empty":"找不到您查询的内容:${query}"}},
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":200},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
date_suffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: undefined,
source: {
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.css'
}
},
isPhotoFigcaption: true,
islazyload: false,
isAnchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'narutozxp',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2026-09-22 12:14:06'
}</script><noscript><style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style></noscript><script>(win=>{
win.saveToLocal = {
set: function setWithExpiry(key, value, ttl) {
if (ttl === 0) return
const now = new Date()
const expiryDay = ttl * 86400000
const item = {
value: value,
expiry: now.getTime() + expiryDay,
}
localStorage.setItem(key, JSON.stringify(item))
},
get: function getWithExpiry(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = url => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
document.head.appendChild(script)
})
win.activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css" integrity="sha384-AfEj0r4/OFrOo5t7NnNe46zW/tFgW6x/bCJG8FqQCEo3+Aro6EYUG4+cU+KJWu/X" crossorigin="anonymous"> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.js" integrity="sha384-g7c+Jr9ZivxKLnZTDUhnkOnsh30B4H0rpLUpJ4jAIKs4fnJI+sEnkvrMWph2EDg4" crossorigin="anonymous"></script> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/contrib/auto-render.min.js" integrity="sha384-mll67QQFJfxn0IYznZYonOWZ644AWYC+Pt2cHqMaRhXVrursRwvLnLaebdGIlYNa" crossorigin="anonymous"></script> <link rel="stylesheet" href="/css/custom.css"> <link rel="stylesheet" href="/css/font.css"> <script src="https://wavedrom.com/wavedrom.min.js" type="text/javascript"></script> <script src="https://wavedrom.com/skins/default.js" type="text/javascript"></script> <script src="https://wavedrom.com/skins/dark.js" type="text/javascript"></script> <script src="https://wavedrom.com/skins/narrow.js" type="text/javascript"></script> <script src="https://wavedrom.com/skins/lowkey.js" type="text/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js" type="text/javascript"></script> <script src="https://cdn.jsdelivr.net/npm/echarts-gl/dist/echarts-gl.min.js" type="text/javascript"></script> <script data-pjax src="https://cdn.jsdelivr.net/npm/abcjs/dist/abcjs-basic-min.js" type="text/javascript"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/abcjs/abcjs-audio.css"/> <script defer data-pjax src="https://cn.vercount.one/js" type="text/javascript"></script>
<script data-pjax type="text/javascript"> WaveDrom.ProcessAll(); mermaid.run(); </script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lxgw-wenkai-screen-webfont@1.5.0/style.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"> <script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script> <meting-js id="2217718183" server="netease" type="playlist" autoplay = "false" api = "https://api.qijieya.cn/meting/?server=:server&type=:type&id=:id" mini = "true" fixed = "true" loop = "all" order = 'random' list-folded = "true"> </meting-js><!-- hexo injector head_end start --><link rel="stylesheet" href="https://npm.elemecdn.com/hexo-butterfly-tag-plugins-plus@latest/lib/assets/font-awesome-animation.min.css" media="defer" onload="this.media='all'"><link rel="stylesheet" href="https://npm.elemecdn.com/hexo-butterfly-tag-plugins-plus@latest/lib/tag_plugins.css" media="defer" onload="this.media='all'"><script src="https://npm.elemecdn.com/hexo-butterfly-tag-plugins-plus@latest/lib/assets/carousel-touch.js"></script><!-- hexo injector head_end end --><meta name="generator" content="Hexo 6.3.0"></head><body><div id="loading-box"><div class="loading-left-bg"></div><div class="loading-right-bg"></div><div class="spinner-box"><div class="configure-border-1"><div class="configure-core"></div></div><div class="configure-border-2"><div class="configure-core"></div></div><div class="loading-word">加载中...</div></div></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/myself.webp" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"/></div><div class="sidebar-site-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">24</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">27</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">10</div></a></div><hr/><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> 链接</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/img/00.webp')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">narutozxp</a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fas fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/about/"><i class="fa-fw fas fa-heart"></i><span> 关于</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fas fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fas fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fas fa-archive"></i><span> 归档</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fas fa-link"></i><span> 链接</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">narutozxp</h1><div id="site-subtitle"><span id="subtitle"></span></div><div id="site_social_icons"><a class="social-icon" href="https://github.com/narutozxp" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:2915618454@qq.com" target="_blank" title="Email"><i class="fas fa-envelope"></i></a></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left"><a href="/2026/02/27/LLM-prompt-and-work-flow/" title="大语言模型提示词与工作流"><img class="post_bg" src="/img/17.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="大语言模型提示词与工作流"></a></div><div class="recent-post-info"><a class="article-title" href="/2026/02/27/LLM-prompt-and-work-flow/" title="大语言模型提示词与工作流">大语言模型提示词与工作流</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2026-02-27T14:23:02.000Z" title="发表于 2026-02-27 14:23:02">2026-02-27</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2026-02-27T09:48:52.000Z" title="更新于 2026-02-27 09:48:52">2026-02-27</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/AI/">AI</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/LLM/">LLM</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/Prompt/">Prompt</a></span></div><div class="content">绘图提示词
科研绘图提示词
gemini顶会绘图提示词
总体观感:画面留白充分、模块化分块清晰、阅读路径严格(左→右或上→下),用轻微投影/2.5D 等距视角表达层级关系;颜色采用低饱和、高明度的莫兰迪色做语义编码(同类模块同色),整体素净克制,但通过少量“柔和强调色”突出论文贡献点与关键对比结果。细节要求如下:1) 核心视觉风格(Visual Style & Aesthetics) Flat 2.0(扁平 + 微立体) 主体扁平:无复杂高光、无渐变大面积铺陈、无强烈材质纹理。 层级表达:仅在需要区分前后关系时使用: 轻微投影(非常淡、短距离、软边缘) 或 2.5D / Isometric(用于张量、特征图、堆叠层) 强调点:论文贡献模块用“同一强调色 + 加粗描边/标题标签”突出,但不喧宾夺主。 线条与边框(Vector-first) 全部元素保持矢量锐利边缘(SVG/PDF 输出),避免截图拼贴。 连接线以直线/圆角折线为主,曲线仅用于表达“反馈/循环”且走线克制。 线宽分级明确:主流程 > 次流程 > ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2025/12/10/Python%E7%9A%84%E5%8C%85%E5%AF%BC%E5%85%A5%E6%9C%BA%E5%88%B6/" title="Python包导入机制"><img class="post_bg" src="/img/21.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Python包导入机制"></a></div><div class="recent-post-info"><a class="article-title" href="/2025/12/10/Python%E7%9A%84%E5%8C%85%E5%AF%BC%E5%85%A5%E6%9C%BA%E5%88%B6/" title="Python包导入机制">Python包导入机制</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2025-12-10T17:22:02.000Z" title="发表于 2025-12-10 17:22:02">2025-12-10</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2025-12-12T09:12:59.000Z" title="更新于 2025-12-12 09:12:59">2025-12-12</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/CS/">CS</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/python/">python</a></span></div><div class="content">本文的主要参考文献为python的官方文档,针对的python版本为3.14.2
首先一个语言的导入系统是很重要的,因为它决定了代码的模块化以及可复用性,一个好的模块系统可以让开发者更方便地组织和管理代码,提高代码的可维护性和可读性。而我之所以写这么一篇文章,就是因为一直被python的导入系统折磨,因此才下定决定来搞清楚python的模块系统与导入机制。
对于python来说,我们最常用的导入方式是使用import语句,但是其实除了import语句之外,还有很多其他的导入方式,比如importlib.import_module()以及内置的__import__()函数等。
而import语句主要做了两件事情:
搜索指定名称的模块(就是调用__import__())。
将搜索的结果绑定到一个local的名称上面。
Example
import spam会产生如下的字节码:
1spam = import('spam', globals(), locals(), [], 0)
import spam.ham会产生如下的字节码:
1spam = import('spam.ham', g ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2025/11/26/%E5%AD%A6%E6%9C%AF%E8%AE%BA%E6%96%87%E5%86%99%E4%BD%9C/" title="论文写作的一些技巧与经验"><img class="post_bg" src="/img/2.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="论文写作的一些技巧与经验"></a></div><div class="recent-post-info"><a class="article-title" href="/2025/11/26/%E5%AD%A6%E6%9C%AF%E8%AE%BA%E6%96%87%E5%86%99%E4%BD%9C/" title="论文写作的一些技巧与经验">论文写作的一些技巧与经验</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2025-11-26T18:22:32.000Z" title="发表于 2025-11-26 18:22:32">2025-11-26</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2026-09-22T12:13:13.000Z" title="更新于 2026-09-22 12:13:13">2026-09-22</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/OTHERS/">OTHERS</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/latex/">latex</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/%E5%86%99%E4%BD%9C/">写作</a></span></div><div class="content">图片相关
这部分主要介绍在论文写作过程中,如何绘图、图片中使用的字体与字号、以及如何对图片进行后处理。
绘图
pyplot绘图
图片的宽度,对于单栏的图片来说,建议设置为3.5英寸(约8.89厘米);对于双栏的图片来说,建议设置为7.16英寸(约18.19厘米),图片的分辨率建议设置为600dpi。
最终保存图片的时候,可以使用如下的代码:
1234567891011121314# "tight"可以让生成的图片删除多余的空白,# "pad_inches=0"可以让图片的边缘不留空白# (pad_inches默认时0.1英寸,也就是说即使使用了tight,图片的边缘还是会留0.1英寸的空白)fig.savefig("figure.png", dpi=600, bbox_inches="tight", pad_inches=0)fig.savefig("figure.pdf", bbox_inches="tight", pad_inches=0)# 或者也可以使用如下的 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2025/11/17/Memory-consistency-model-and-Cache-coherence/" title="Memory consistency model and Cache coherence"><img class="post_bg" src="/img/11.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Memory consistency model and Cache coherence"></a></div><div class="recent-post-info"><a class="article-title" href="/2025/11/17/Memory-consistency-model-and-Cache-coherence/" title="Memory consistency model and Cache coherence">Memory consistency model and Cache coherence</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2025-11-17T14:22:02.000Z" title="发表于 2025-11-17 14:22:02">2025-11-17</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2025-12-25T08:02:53.000Z" title="更新于 2025-12-25 08:02:53">2025-12-25</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/CS/">CS</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/">体系结构</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/%E5%86%85%E5%AD%98%E4%B8%80%E8%87%B4%E6%80%A7%E6%A8%A1%E5%9E%8B/">内存一致性模型</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/%E7%BC%93%E5%AD%98%E4%B8%80%E8%87%B4%E6%80%A7/">缓存一致性</a></span></div><div class="content">内存一致性模型与缓存一致性的关系
刚开始接触缓存一致性以及内存一致性模型的时候,时常会对其产生误解,对两者的概念比较模糊,在这里借用《A Primer on Memory Consistency and Cache Coherence》中的介绍来对其进行区分。
该书中使用SWMR(Single Writer Multiple Reader)不变量以及数据值(Data Value)不变量来定义缓存一致性,前者指的是对于同一时刻,同一个内存地址,要么只有一个核心对其拥有读写权限,要么有零个或者多个对于该地址只有只读权限。而后者则指的是,任何对于内存的修改都会被传播给其他副本,以至于副本保存的总是其最新的值。
而内存一致性(模型)则是定义在缓存一致性之上的,程序员需要依据内存一致性模型来编写出正确的多线程程序,而缓存一致性主要是为处理器流水线提供一个存储系统的抽象层,对于程序员来说时透明的,如下图所示:
Summary
Cache coherence于Memory consistency并不等效
Memory consistency的具体实现可以将Cache coherence作为一个 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2025/05/28/SpinalHDL/" title="SpinalHDL"><img class="post_bg" src="/img/18.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="SpinalHDL"></a></div><div class="recent-post-info"><a class="article-title" href="/2025/05/28/SpinalHDL/" title="SpinalHDL">SpinalHDL</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2025-05-28T13:23:02.000Z" title="发表于 2025-05-28 13:23:02">2025-05-28</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2025-06-07T06:32:58.000Z" title="更新于 2025-06-07 06:32:58">2025-06-07</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/IC/">IC</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/SpinalHDL/">SpinalHDL</a><span class="article-meta-link">•</span><a class="article-meta__tags" href="/tags/Scala/">Scala</a></span></div><div class="content">SCALA语法介绍
</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2025/05/22/SystemVerilog-For-Design/" title="SystemVerilog For Design"><img class="post_bg" src="/img/32.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="SystemVerilog For Design"></a></div><div class="recent-post-info"><a class="article-title" href="/2025/05/22/SystemVerilog-For-Design/" title="SystemVerilog For Design">SystemVerilog For Design</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2025-05-22T13:23:02.000Z" title="发表于 2025-05-22 13:23:02">2025-05-22</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2025-06-07T07:39:55.000Z" title="更新于 2025-06-07 07:39:55">2025-06-07</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/IC/">IC</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/SystemVerilog/">SystemVerilog</a></span></div><div class="content">声明空间
在verilog中,reg 、wire、task、function等的定义都必须在module之内,这些声明都是局部的,因此只能在模块内部使用,无法跨模块使用。如果希望在多个模块中使用某个function,则需要在每一个模块内都重新定义。特别是使用user-defined type,需要在每一个模块内都重复进行typedef,非常的冗余,且容易出错。
为此system verilog拓展了声明空间。
package
package的定义
package是一个独立的声明空间,因此不能嵌入在module内部。
package是通过两个关键字进行定义的——package与endpackage。可综合的package可以包含如下的内容:
parameter和localparam定义的常数(在package中,两个是一样的,都不能在外部被修改)。
const定义的变量。
typedef定义的自定义类型。
automatic task和automatic function。
import导入其他package。
操作符重载。
package还可以包含全局变量声明、静态任务定义和静态函 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2025/05/08/RL%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80/" title="RL理论基础"><img class="post_bg" src="/img/18.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="RL理论基础"></a></div><div class="recent-post-info"><a class="article-title" href="/2025/05/08/RL%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80/" title="RL理论基础">RL理论基础</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2025-05-08T10:23:02.000Z" title="发表于 2025-05-08 10:23:02">2025-05-08</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2025-12-25T08:08:15.000Z" title="更新于 2025-12-25 08:08:15">2025-12-25</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/AI/">AI</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/RL/">RL</a></span></div><div class="content">强化学习基础
强化学习概述
强化学习(reinforcement learning,RL) 讨论的问题是智能体(agent)怎么在复杂、不确定的环境(environment)中最大化它能获得的奖励。如图 1.1 所示,强化学习由两部分组成:智能体和环境。在强化学习过程中,智能体与环境一直在交互。智能体在环境中获取某个状态后,它会利用该状态输出一个动作 (action),这个动作也称为决策(decision)。然后这个动作会在环境中被执行,环境会根据智能体采取的动作,输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中获取奖励。
强化学习与监督学习
我们可以把强化学习与监督学习做一个对比。以图片分类为例,如图 1.2 所示,监督学习(supervised learning)假设我们有大量被标注的数据,比如汽车、飞机、椅子这些被标注的图片,这些图片都要满足独立同分布,即它们之间是没有关联关系的。假设我们训练一个分类器,比如神经网络。为了分辨输入的图片中是汽车还是飞机,在训练过程中,需要把正确的标签信息传递给神经网络。当神经网络做出错误的预测时,比如输入汽车的图片, ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2024/09/12/TLS%E6%8F%A1%E6%89%8B%E8%BF%87%E7%A8%8B/" title="TLS握手流程"><img class="post_bg" src="/img/20.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="TLS握手流程"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/09/12/TLS%E6%8F%A1%E6%89%8B%E8%BF%87%E7%A8%8B/" title="TLS握手流程">TLS握手流程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2024-09-12T16:07:02.000Z" title="发表于 2024-09-12 16:07:02">2024-09-12</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2025-12-25T08:16:14.000Z" title="更新于 2025-12-25 08:16:14">2025-12-25</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/CS/">CS</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/TLS/">TLS</a></span></div><div class="content">TLS握手过程
HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。
所以安全上存在以下三个风险:
窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
冒充风险,比如冒充淘宝网站,用户钱容易没。
HTTPS 在 HTTP 与 TCP 层之间加入了 TLS 协议,来解决上述的风险。
TLS 协议是如何解决 HTTP 的风险的呢?
信息加密:HTTP 交互信息是被加密的,第三方就无法被窃取。
校验机制:校验信息传输过程中是否有被第三方篡改过,如果被篡改过,则会有警告提示。
身份证书:证明淘宝是真的淘宝网。
上图简要概述来 TLS 的握手过程,其中每一个「框」都是一个记录(record),记录是 TLS 收发数据的基本单位,类似于 TCP 里的 segment。多个记录可以组合成一个 TCP 包发送,所以通常经过「四个消息」就可以完成 TLS 握手,也就是需要 2个 RTT 的时延,然后就可以在安全的通信环境里发送 HTTP 报文,实现 HTT ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2024/07/31/CRC%E6%A0%A1%E9%AA%8C%E8%AF%A6%E8%A7%A3/" title="CRC校验详解"><img class="post_bg" src="/img/34.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="CRC校验详解"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/07/31/CRC%E6%A0%A1%E9%AA%8C%E8%AF%A6%E8%A7%A3/" title="CRC校验详解">CRC校验详解</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2024-07-31T15:51:02.000Z" title="发表于 2024-07-31 15:51:02">2024-07-31</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2025-12-25T08:02:53.000Z" title="更新于 2025-12-25 08:02:53">2025-12-25</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/CRC/">CRC</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/CRC/">CRC</a></span></div><div class="content">摘要
本文首先阐述了错误检测的目的以及纠错复杂度,然后以此引出了CRC背后的基础思想。为了能够充分理解CRC运算所基于的运算系统,本文还介绍了抽象代数中的相关概念(多项式环、素域、扩域)。然后描述了如何选取CRC的多项式。有了这些基本概念之后,本文介绍了三种CRC的实现,对于同一个CRC算法,其中SIMPLE于TABLE ALGORITHM所使用的寄存器初值是一样的,只是后者更高效一点,而DIRECT TABLE ALGORITHM则更高效,而且寄存器初值也与前两种不一样(通常CRC算法所说的初值就是指的这个算法的寄存器初值),因此需要进行初值转换。在此之后还介绍了一些决定CRC算法的其他参数,并且以此定义一个名为Rocksoft™的参数化模型,用以精确描述CRC算法。最后本文还包含了CRC算法的C实现。
本文很大程度上参考了A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS,在其中加入了一些自己的理解。因此非常感谢Ross N. Williams.大佬
错误检测的目的
发射机产生的数据,在经过带有噪声的信道之后,会被噪声所污染,从而导 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2024/07/29/WaveDrom/" title="WaveDrom教程"><img class="post_bg" src="/img/15.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="WaveDrom教程"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/07/29/WaveDrom/" title="WaveDrom教程">WaveDrom教程</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time class="post-meta-date-created" datetime="2024-07-29T15:51:02.000Z" title="发表于 2024-07-29 15:51:02">2024-07-29</time><span class="article-meta-separator">|</span><i class="fas fa-history"></i><span class="article-meta-label">更新于</span><time class="post-meta-date-updated" datetime="2024-07-30T06:35:57.000Z" title="更新于 2024-07-30 06:35:57">2024-07-30</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/Plot/">Plot</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/Plot/WaveDrom/">WaveDrom</a></span><span class="article-meta tags"><span class="article-meta-separator">|</span><i class="fas fa-tag"></i><a class="article-meta__tags" href="/tags/WaveDrom/">WaveDrom</a></span></div><div class="content">WaveDrom 可以根据特定指令生成时序 / 波形图(SVG/PNG),并且也可以在浏览器中运行。同时也提供了在线编辑器和教程、教程 2。
信号(signal)
名称(name)和波形(wave)
绘制信号时,需要向 WaveDrom 传递键为 signal,值为 WaveLanes 的数组,WaveLane 一般至少需要包含两个属性:名称(name)和波形(wave),例如(在官方在线编辑器中打开):
1{ "signal" : [{ "name": "clk", "wave": "P..........." }] }
{ "signal" : [{ "name": "clk", "wave": "P..........." }] }
波形的名称将显示在波形左侧,波形由一个字符串指定,每个字符都代表了一个周期的波形,每个字符代表的意义如下:
符号
含义
样例
渲染结果
.
与上一周期状态相同
{ signal ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><a class="page-number" href="/page/3/#content-inner">3</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/myself.webp" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">narutozxp</div><div class="author-info__description">任何的努力皆不会白费</div></div><div class="card-info-data site-data is-center"><a href="/archives/"><div class="headline">文章</div><div class="length-num">24</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">27</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">10</div></a></div><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/narutozxp" target="_blank" title="Github"><i class="fab fa-github"></i></a><a class="social-icon" href="mailto:2915618454@qq.com" target="_blank" title="Email"><i class="fas fa-envelope"></i></a></div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/2026/02/27/LLM-prompt-and-work-flow/" title="大语言模型提示词与工作流"><img src="/img/17.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="大语言模型提示词与工作流"/></a><div class="content"><a class="title" href="/2026/02/27/LLM-prompt-and-work-flow/" title="大语言模型提示词与工作流">大语言模型提示词与工作流</a><time datetime="2026-02-27T14:23:02.000Z" title="发表于 2026-02-27 14:23:02">2026-02-27</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2025/12/10/Python%E7%9A%84%E5%8C%85%E5%AF%BC%E5%85%A5%E6%9C%BA%E5%88%B6/" title="Python包导入机制"><img src="/img/21.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="Python包导入机制"/></a><div class="content"><a class="title" href="/2025/12/10/Python%E7%9A%84%E5%8C%85%E5%AF%BC%E5%85%A5%E6%9C%BA%E5%88%B6/" title="Python包导入机制">Python包导入机制</a><time datetime="2025-12-10T17:22:02.000Z" title="发表于 2025-12-10 17:22:02">2025-12-10</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2025/11/26/%E5%AD%A6%E6%9C%AF%E8%AE%BA%E6%96%87%E5%86%99%E4%BD%9C/" title="论文写作的一些技巧与经验"><img src="/img/2.webp" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="论文写作的一些技巧与经验"/></a><div class="content"><a class="title" href="/2025/11/26/%E5%AD%A6%E6%9C%AF%E8%AE%BA%E6%96%87%E5%86%99%E4%BD%9C/" title="论文写作的一些技巧与经验">论文写作的一些技巧与经验</a><time datetime="2025-11-26T18:22:32.000Z" title="发表于 2025-11-26 18:22:32">2025-11-26</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>分类</span>
<a class="card-more-btn" href="/categories/" title="查看更多">
<i class="fas fa-angle-right"></i></a>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/AI/"><span class="card-category-list-name">AI</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/CAD/"><span class="card-category-list-name">CAD</span><span class="card-category-list-count">3</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/CRC/"><span class="card-category-list-name">CRC</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/CS/"><span class="card-category-list-name">CS</span><span class="card-category-list-count">6</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/IC/"><span class="card-category-list-name">IC</span><span class="card-category-list-count">4</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/ML/"><span class="card-category-list-name">ML</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/OTHERS/"><span class="card-category-list-name">OTHERS</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/Plot/"><span class="card-category-list-name">Plot</span><span class="card-category-list-count">1</span></a></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/CRC/" style="font-size: 1.1em; color: #999">CRC</a> <a href="/tags/LLM/" style="font-size: 1.1em; color: #999">LLM</a> <a href="/tags/ML-Theory/" style="font-size: 1.1em; color: #999">ML Theory</a> <a href="/tags/OPENFPGA/" style="font-size: 1.1em; color: #999">OPENFPGA</a> <a href="/tags/Poem/" style="font-size: 1.1em; color: #999">Poem</a> <a href="/tags/Prompt/" style="font-size: 1.1em; color: #999">Prompt</a> <a href="/tags/PyTorch/" style="font-size: 1.1em; color: #999">PyTorch</a> <a href="/tags/RL/" style="font-size: 1.1em; color: #999">RL</a> <a href="/tags/STA/" style="font-size: 1.5em; color: #99a9bf">STA</a> <a href="/tags/Scala/" style="font-size: 1.1em; color: #999">Scala</a> <a href="/tags/SpinalHDL/" style="font-size: 1.1em; color: #999">SpinalHDL</a> <a href="/tags/SystemVerilog/" style="font-size: 1.1em; color: #999">SystemVerilog</a> <a href="/tags/TLS/" style="font-size: 1.1em; color: #999">TLS</a> <a href="/tags/VTR/" style="font-size: 1.5em; color: #99a9bf">VTR</a> <a href="/tags/WaveDrom/" style="font-size: 1.1em; color: #999">WaveDrom</a> <a href="/tags/bash/" style="font-size: 1.1em; color: #999">bash</a> <a href="/tags/c/" style="font-size: 1.1em; color: #999">c++</a> <a href="/tags/latex/" style="font-size: 1.1em; color: #999">latex</a> <a href="/tags/python/" style="font-size: 1.1em; color: #999">python</a> <a href="/tags/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/" style="font-size: 1.1em; color: #999">体系结构</a> <a href="/tags/%E5%86%85%E5%AD%98%E4%B8%80%E8%87%B4%E6%80%A7%E6%A8%A1%E5%9E%8B/" style="font-size: 1.1em; color: #999">内存一致性模型</a> <a href="/tags/%E5%86%99%E4%BD%9C/" style="font-size: 1.1em; color: #999">写作</a> <a href="/tags/%E6%8A%BD%E8%B1%A1%E4%BB%A3%E6%95%B0/" style="font-size: 1.1em; color: #999">抽象代数</a> <a href="/tags/%E6%95%B0%E5%80%BC%E8%A1%A8%E7%A4%BA/" style="font-size: 1.1em; color: #999">数值表示</a> <a href="/tags/%E6%95%B0%E5%80%BC%E8%AE%A1%E7%AE%97/" style="font-size: 1.1em; color: #999">数值计算</a> <a href="/tags/%E6%B5%8B%E8%AF%95/" style="font-size: 1.1em; color: #999">测试</a> <a href="/tags/%E7%BC%93%E5%AD%98%E4%B8%80%E8%87%B4%E6%80%A7/" style="font-size: 1.1em; color: #999">缓存一致性</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span><a class="card-more-btn" href="/archives/" title="查看更多">
<i class="fas fa-angle-right"></i></a></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2026/02/"><span class="card-archive-list-date">二月 2026</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2025/12/"><span class="card-archive-list-date">十二月 2025</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2025/11/"><span class="card-archive-list-date">十一月 2025</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2025/05/"><span class="card-archive-list-date">五月 2025</span><span class="card-archive-list-count">3</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/09/"><span class="card-archive-list-date">九月 2024</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/07/"><span class="card-archive-list-date">七月 2024</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/05/"><span class="card-archive-list-date">五月 2024</span><span class="card-archive-list-count">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/11/"><span class="card-archive-list-date">十一月 2022</span><span class="card-archive-list-count">1</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">24</div></div><div class="webinfo-item"><div class="item-name">本站总字数 :</div><div class="item-count">462.6k</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2026-09-22T12:14:05.161Z"></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span> 数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"/></div></div><hr/><div id="local-search-results"></div></div></div><div id="search-mask"></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@6.1/dist/fancybox/fancybox.umd.js"></script><script src="/js/search/local-search.js"></script><script>var preloader = {
endLoading: () => {
document.body.style.overflow = 'auto';
document.getElementById('loading-box').classList.add("loaded")
},
initLoading: () => {
document.body.style.overflow = '';
document.getElementById('loading-box').classList.remove("loaded")
}
}
window.addEventListener('load',preloader.endLoading())</script><div class="js-pjax"><script>function subtitleType () {
if (true) {
window.typed = new Typed("#subtitle", {
strings: ["未来可期、莫要放弃","当我们失去的时候,才知道自己曾经拥有","理想的路总是为有信心的人预备着","爱的力量大到可以使人忘记一切,却又小到连一粒嫉妒的沙石也不能容纳","上天不会无缘无故做出莫名其妙的决定,它让你放弃和等待,是为了给你最好的","醉了就去山顶吹吹风,困了就靠在你的肩头"],
startDelay: 300,
typeSpeed: 150,
loop: true,
backSpeed: 50
})
} else {
document.getElementById("subtitle").innerHTML = '未来可期、莫要放弃'
}
}
if (true) {
if (typeof Typed === 'function') {
subtitleType()
} else {
getScript('https://cdn.jsdelivr.net/npm/typed.js/lib/typed.min.js').then(subtitleType)
}
} else {
subtitleType()
}</script><script>(() => {
const $mermaidWrap = document.querySelectorAll('#article-container .mermaid-wrap')
if ($mermaidWrap.length) {
window.runMermaid = () => {
window.loadMermaid = true
const theme = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'default'
Array.from($mermaidWrap).forEach((item, index) => {
const mermaidSrc = item.firstElementChild
const mermaidThemeConfig = '%%{init:{ \'theme\':\'' + theme + '\'}}%%\n'
const mermaidID = 'mermaid-' + index
const mermaidDefinition = mermaidThemeConfig + mermaidSrc.textContent
mermaid.mermaidAPI.render(mermaidID, mermaidDefinition, (svgCode) => {
mermaidSrc.insertAdjacentHTML('afterend', svgCode)
})
})
}
const loadMermaid = () => {
window.loadMermaid ? runMermaid() : getScript('https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js').then(runMermaid)
}
window.pjax ? loadMermaid() : document.addEventListener('DOMContentLoaded', loadMermaid)
}
})()</script><script type="text/javascript" id="maid-script" src="https://unpkg.com/mermaid@11.12.1/dist/mermaid.min.js"></script><script>if (window.mermaid) {
var options = JSON.parse(document.getElementById('maid-script').getAttribute('mermaidoptioins'));
mermaid.initialize(options);
}</script></div><script src="https://cdn.jsdelivr.net/gh/narutozxp/live2d-widget@latest/autoload.js"></script><script defer="defer" id="ribbon" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-ribbon.min.js" size="150" alpha="0.6" zIndex="-1" mobile="false" data-click="false"></script><script src="https://cdn.jsdelivr.net/npm/pjax/pjax.min.js"></script><script>let pjaxSelectors = ["head > title","#config-diff","#body-wrap","#rightside-config-hide","#rightside-config-show",".js-pjax"]
var pjax = new Pjax({
elements: 'a:not([target="_blank"])',
selectors: pjaxSelectors,
cacheBust: false,
analytics: false,
scrollRestoration: false
})
document.addEventListener('pjax:send', function () {
// removeEventListener scroll
window.tocScrollFn && window.removeEventListener('scroll', window.tocScrollFn)
window.scrollCollect && window.removeEventListener('scroll', scrollCollect)
typeof preloader === 'object' && preloader.initLoading()
document.getElementById('rightside').style.cssText = "opacity: ''; transform: ''"
if (window.aplayers) {
for (let i = 0; i < window.aplayers.length; i++) {
if (!window.aplayers[i].options.fixed) {
window.aplayers[i].destroy()
}
}
}
typeof typed === 'object' && typed.destroy()
//reset readmode
const $bodyClassList = document.body.classList
$bodyClassList.contains('read-mode') && $bodyClassList.remove('read-mode')
})
document.addEventListener('pjax:complete', function () {
window.refreshFn()
document.querySelectorAll('script[data-pjax]').forEach(item => {
const newScript = document.createElement('script')
const content = item.text || item.textContent || item.innerHTML || ""
Array.from(item.attributes).forEach(attr => newScript.setAttribute(attr.name, attr.value))
newScript.appendChild(document.createTextNode(content))
item.parentNode.replaceChild(newScript, item)
})
GLOBAL_CONFIG.islazyload && window.lazyLoadInstance.update()
typeof chatBtnFn === 'function' && chatBtnFn()
typeof panguInit === 'function' && panguInit()
// google analytics
typeof gtag === 'function' && gtag('config', '', {'page_path': window.location.pathname});
// baidu analytics
typeof _hmt === 'object' && _hmt.push(['_trackPageview',window.location.pathname]);
typeof loadMeting === 'function' && document.getElementsByClassName('aplayer').length && loadMeting()
// prismjs
typeof Prism === 'object' && Prism.highlightAll()
typeof preloader === 'object' && preloader.endLoading()
})
document.addEventListener('pjax:error', (e) => {
if (e.request.status === 404) {
pjax.loadUrl('/404.html')
}
})</script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div><!-- hexo injector body_end start --><script async src="//at.alicdn.com/t/font_2032782_8d5kxvn09md.js"></script><!-- hexo injector body_end end --></body></html>