-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
484 lines (340 loc) · 47.3 KB
/
index.html
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
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
<!DOCTYPE html><html 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,viewport-fit=cover"><title>Joohwan</title><meta name="author" content="Joohwan."><meta name="copyright" content="Joohwan."><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="Joohwan">
<meta property="og:url" content="https://piwriw.github.io/index.html">
<meta property="og:site_name" content="Joohwan">
<meta property="og:description" content="该知道的都知道,不知道的慢慢了解">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://piwriw.github.io/img/avatar.jpg">
<meta property="article:author" content="Joohwan.">
<meta property="article:tag" content="Joohwan">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://piwriw.github.io/img/avatar.jpg"><link rel="shortcut icon" href="/img/favicon.png"><link rel="canonical" href="https://piwriw.github.io/index.html"><link rel="preconnect" href="//cdn.jsdelivr.net"/><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/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.min.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: {"path":"/search.xml","preload":false,"top_n_per_article":1,"unescape":false,"languages":{"hits_empty":"找不到您查询的内容:${query}","hits_stats":"共找到 ${hits} 篇文章"}},
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":false,"highlightHeightLimit":false},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: undefined,
source: {
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery/dist/fjGallery.min.css'
}
},
isPhotoFigcaption: false,
islazyload: false,
isAnchor: false,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'Joohwan',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2024-05-07 19:13:55'
}</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.getCSS = (url,id = false) => new Promise((resolve, reject) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.href = url
if (id) link.id = id
link.onerror = reject
link.onload = link.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
link.onload = link.onreadystatechange = null
resolve()
}
document.head.appendChild(link)
})
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><script src="/js/welcome.js"></script><script src="https://npm.elemecdn.com/echarts@4.9.0/dist/echarts.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src="/img/avatar.jpg" 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">116</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">37</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">27</div></a></div><hr class="custom-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="/archives/"><i class="fa-fw fas fa-archive"></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="/charts/"><i class="fa-fw fas fa-folder-open"></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 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="/wish/"><i class="fa-fw fas fa-tags"></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/background.jpg')"><nav id="nav"><span id="blog-info"><a href="/" title="Joohwan"><span class="site-name">Joohwan</span></a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search" href="javascript:void(0);"><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="/archives/"><i class="fa-fw fas fa-archive"></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="/charts/"><i class="fa-fw fas fa-folder-open"></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 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="/wish/"><i class="fa-fw fas fa-tags"></i><span> 许愿墙</span></a></div></div><div id="toggle-menu"><a class="site-page" href="javascript:void(0);"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">Joohwan</h1><div id="site-subtitle"><span id="subtitle"></span></div><div id="site_social_icons"><a class="social-icon" href="https://github.com/piwriw" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:piwriw@163.com" target="_blank" title="Email"><i class="fas fa-envelope-open-text"></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="/2023/02/28/web/go/piwriw-blog/" title="piwriw_blog"><img class="post-bg" src="/img/go.png" onerror="this.onerror=null;this.src='/img/404.png'" alt="piwriw_blog"></a></div><div class="recent-post-info"><a class="article-title" href="/2023/02/28/web/go/piwriw-blog/" title="piwriw_blog">piwriw_blog</a><div class="article-meta-wrap"><span class="article-meta"><i class="fas fa-thumbtack sticky"></i><span class="sticky">置顶</span><span class="article-meta-separator">|</span></span><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2023-02-28T02:16:31.000Z" title="发表于 2023-02-28 10:16:31">2023-02-28</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/web/">web</a></span></div><div class="content">Piwriw Blog
基于Gin的个人博客系统
一个后端使用了Gin、数据库ORM使用Sqlx,前端使用了Vue2.X的个人博客系统
探索本项目的文档 »
本篇README.md面向开发者
目录
项目概述
页面演示
用户端
管理端
快速启动
文件目录说明
作者
鸣谢
项目概述Piwriw_blog是一个博客系统,前端基于Vue2构建了用户端和管理员系统,后端基于Gin和Sqlx构建。
页面演示用户端
首页
详情
管理端
文章编辑
文章列表
评论管理
分类列表
用户列表
个人设置
快速启动
克隆项目到本地git clone git@github.com:Piwriw/piwriw_blog.git
下载后端依赖(前提:你已经开启了go modules 并且设置了国内镜像代理)cd piwriw_blog go mod tidy
下载前端依赖
...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2024/05/07/cloud/k8s/K8s-%E8%87%AA%E5%8A%A8%E4%BC%B8%E7%BC%A9/" title="K8s-自动伸缩"><img class="post-bg" src="/img/k8sLogo.png" onerror="this.onerror=null;this.src='/img/404.png'" alt="K8s-自动伸缩"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/05/07/cloud/k8s/K8s-%E8%87%AA%E5%8A%A8%E4%BC%B8%E7%BC%A9/" title="K8s-自动伸缩">K8s-自动伸缩</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 datetime="2024-05-07T10:57:55.000Z" title="发表于 2024-05-07 18:57:55">2024-05-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/cloud/">cloud</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/cloud/k8s/">k8s</a></span></div><div class="content">K8s-自动伸缩Pod的横向伸缩(水平拓展HPA)Pod的横向伸缩是通过控制器管理Pod的副本数实现的,由Horizontal控制器负责,通过HPA资源管理,调整Pod的数量
自动伸缩过程
获取被伸缩的对象的Pod度量
计算需要达到的Pod数量
更新replicas字段
基于CPU使用率进行自动伸缩CPU需要进行CPU高峰使用,进行HPA
SHELL
# CPU使用率到30的时候 进行伸缩 kubectl autoscale deploymengt kubia --cpu-percent=30 --min=l --max=5
YAML
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: php-apachespec: # 指定的目标资源 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: php-apache minReplicas: 1 maxReplicas: 10 # 要求每个Po ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2024/05/06/cloud/k8s/K8s-%E9%9B%86%E7%BE%A4%E5%86%85%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/" title="K8s-集群内网络安全"><img class="post-bg" src="/img/k8sLogo.png" onerror="this.onerror=null;this.src='/img/404.png'" alt="K8s-集群内网络安全"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/05/06/cloud/k8s/K8s-%E9%9B%86%E7%BE%A4%E5%86%85%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/" title="K8s-集群内网络安全">K8s-集群内网络安全</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 datetime="2024-05-06T15:08:55.000Z" title="发表于 2024-05-06 23:08:55">2024-05-06</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/cloud/">cloud</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/cloud/k8s/">k8s</a></span></div><div class="content">K8s-集群内网络安全在Pod中使用宿主节点的Linux命名空间Pod中的容器一般都在分开的Linux命名空间中,他们通过不同IPC和PID命名空间,彼此隔离
Pod使用宿主机网络命名空间Pod需要使用主机网络,使用宿主机的网络适配器,而不是虚拟网络设备。
通过设置hostNetwork=true实现
绑定宿主机端口号而不是使用宿主机网络命名空间Pod映射到到主机上的端口,但是不设置共享主机的网络命名空间
设置Pod的spec.containers.ports的hostPort实现
hostPort的Pod流量转发过程:
到达宿主机的端口连接直接转发到Pod 的对应的端口
与NodePort不同,NodePort会给所有的节点绑定上端口,即使Node没有对应Pod
Pod hostPort案例:
使用宿主机的PID和IPC命名空间当使用spec中hostPID=true 和 hostIPC=true之后,pod容器就可以看到所有宿主机上的进程
配置节点的安全上下文通过 security Context 边项配置其他与安全性相关的特性
配置安全上下文 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2024/05/06/cloud/k8s/K8s-%E8%AE%A4%E8%AF%81%E6%9C%BA%E5%88%B6%EF%BC%9AServiceAcccounts/" title="K8s-认证机制:ServiceAccounts"><img class="post-bg" src="/img/k8sLogo.png" onerror="this.onerror=null;this.src='/img/404.png'" alt="K8s-认证机制:ServiceAccounts"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/05/06/cloud/k8s/K8s-%E8%AE%A4%E8%AF%81%E6%9C%BA%E5%88%B6%EF%BC%9AServiceAcccounts/" title="K8s-认证机制:ServiceAccounts">K8s-认证机制:ServiceAccounts</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 datetime="2024-05-06T09:08:55.000Z" title="发表于 2024-05-06 17:08:55">2024-05-06</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/cloud/">cloud</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/cloud/k8s/">k8s</a></span></div><div class="content">K8s-认证机制:ServiceAccountsK8s的认证方式
客户端证书
传入HTTP头中的token
基础的HTTP认证
其他
用户和组用户就是通过单个的SA的认证
组别用户和SA可以属于一个或者多个组。
内置的用户组:
system unauthenticated 组用于所有认证插件都不会认证客户端身份的 请求
system authent cated 组会自动分配给一个成功通过认证的用户
system:serviceaccounts 组包含所有在系统中的 Serv iceAccount
system serviceaccounts <口 amespace >组包含了所有在特定命名空 间中的 Serv ceAccount
什么是SA一个SA的用户名格式如下:
system: serviceaccount:<namespace >:
Pod中sa的位置: /var/run/secrets/kube netes io/serv ceaccount/token
每一个Namespace都有一个默认的 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2024/04/23/cloud/k8s/%E8%B7%A8%E5%85%AC%E7%BD%91%E8%A7%A3%E5%86%B3K8s%E7%BB%84%E7%BD%91/" title="跨公网解决K8s组网"><img class="post-bg" src="/img/k8sLogo.png" onerror="this.onerror=null;this.src='/img/404.png'" alt="跨公网解决K8s组网"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/04/23/cloud/k8s/%E8%B7%A8%E5%85%AC%E7%BD%91%E8%A7%A3%E5%86%B3K8s%E7%BB%84%E7%BD%91/" title="跨公网解决K8s组网">跨公网解决K8s组网</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 datetime="2024-04-23T12:08:55.000Z" title="发表于 2024-04-23 20:08:55">2024-04-23</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/cloud/">cloud</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/cloud/k8s/">k8s</a></span></div><div class="content">跨公网解决K8s组网需要开放安全组工作节点开放组
开放端口号
开放端口类型
备注
8472
UDP
Flannel vxlan 模式下的Overlay 网络通信
10250
TCP
kubelet log exec 等端口
控制面开放组
开放端口号
开放端口类型
备注
8472
UDP
Flannel vxlan 模式下的Overlay 网络通信
10250
TCP
kubelet log exec 等端口
6443
TCP
apiserver端口
2380
TCP
etcd端口
安装部署Master创建虚拟网卡# 公网ippublic_ip=xxxsudo ip link add dummy-pub type dummysudo ip addr add $public_ip/32 dev dummy-pub
公网IP启动apiserver参考:https://piwriw.github.io/2024/01/08/cloud/k8s/K8s%E5%85%AC%E7%BD%91%E9%83%A8%E7%BD%B2/
通过输出的master ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2024/04/21/basic/meeting/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E8%99%9A%E6%8B%9F%E4%B8%93%E7%94%A8%E7%BD%91%E5%92%8C%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2/" title="计算机网络-虚拟专用网和网络地址转换"><img class="post-bg" src="/img/basic.jpg" onerror="this.onerror=null;this.src='/img/404.png'" alt="计算机网络-虚拟专用网和网络地址转换"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/04/21/basic/meeting/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E8%99%9A%E6%8B%9F%E4%B8%93%E7%94%A8%E7%BD%91%E5%92%8C%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2/" 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 datetime="2024-04-21T14:10:55.000Z" title="发表于 2024-04-21 22:10:55">2024-04-21</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/basic/">basic</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/basic/%E9%9D%A2%E8%AF%95/">面试</a></span></div><div class="content">计算机网络-虚拟专用网和网络地址转换虚拟专用网(VPC)
因为这看起来像是点对点的通信,所以也称之为IP隧道技术。
网络地址转换(NAT)在NAT路由器上将其内部专用地址,转化为IP
基本的NAT方法
这种模式下,弊端是需要主机轮番使用转换器上的 全球地址
网络地址与端口号转换这种模式,全程为网络地址与端口号转换(Network Address and Port Translation/NAPT)
</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2024/04/20/basic/meeting/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-IP%E5%A4%9A%E6%92%AD/" title="计算机网络-IP多播"><img class="post-bg" src="/img/basic.jpg" onerror="this.onerror=null;this.src='/img/404.png'" alt="计算机网络-IP多播"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/04/20/basic/meeting/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-IP%E5%A4%9A%E6%92%AD/" title="计算机网络-IP多播">计算机网络-IP多播</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 datetime="2024-04-20T14:10:55.000Z" title="发表于 2024-04-20 22:10:55">2024-04-20</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/basic/">basic</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/basic/%E9%9D%A2%E8%AF%95/">面试</a></span></div><div class="content">计算机网络-IP多播多播(Muliticast),也称为组播,是实现了“一对多”通信技术。
IP多播地址和多播组IP多播地址依赖于IP多播地址,D类地址,一般称呼为多播地址。
前面固定为:1110
范围是:224.0.0.0-239.255.255.255
局域网的硬件多播局域网支持硬件多播:
实现:IPV4地址映射为硬件多播地址
但是多播MAC是25bit相同,而IPV4只有23bit,所以可能出现相同的
因特网上IP多播IP多播在因特网上实现, 就需要经过多个路由器的转发。多播路由器必须按照IP多播地址转发到多播组的局域网下。
所以出现了IGMP来实现IP的路由多播
网际组管理协议IGMPIGMP有三种报文类型:
成员报告报文
成员查询报文
离开组报文
工作原理1.加入多播组
IGMP成员报告报文中包含加入多播组的地址
IP多播数据报的目的地址也是加入IP多播组的地址
在这个过程中,多播路由器通过维护多播组列表,记录该路由器已知道的直连的各个网络中多播组成员的多播组地址,多播路由器只关心自己网络的多播地址
2.监视多播组的成员变化多播路由器默认125s发送查询IGMP成 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2024/04/20/basic/meeting/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E9%98%9F%E5%88%97/" title="数据结构-队列"><img class="post-bg" src="/img/basic.jpg" onerror="this.onerror=null;this.src='/img/404.png'" alt="数据结构-队列"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/04/20/basic/meeting/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E9%98%9F%E5%88%97/" 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 datetime="2024-04-20T02:10:55.000Z" title="发表于 2024-04-20 10:10:55">2024-04-20</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/basic/">basic</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/basic/%E9%9D%A2%E8%AF%95/">面试</a></span></div><div class="content">数据结构-队列队列(queue)是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断加入队列尾部,而位于队列头部的人逐个离开
基于链表的队列package queueimport "container/list"type linkedQueue struct { data *list.List}func NewLinkedQueue() *linkedQueue { return &linkedQueue{ data: list.New(), }}func (q linkedQueue) push(value int) { q.data.PushBack(value)}func (q linkedQueue) pop(value int) any { if q.isEmpty() { return nil } e := q.data.Front() q.data.Remove(e) return e.Value ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2024/04/19/basic/meeting/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%BD%91%E9%99%85%E6%8E%A7%E5%88%B6%E6%8A%A5%E6%96%87%E5%8D%8F%E8%AE%AE/" title="计算机网络-网际控制报文协议"><img class="post-bg" src="/img/basic.jpg" onerror="this.onerror=null;this.src='/img/404.png'" alt="计算机网络-网际控制报文协议"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/04/19/basic/meeting/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%BD%91%E9%99%85%E6%8E%A7%E5%88%B6%E6%8A%A5%E6%96%87%E5%8D%8F%E8%AE%AE/" 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 datetime="2024-04-19T14:10:55.000Z" title="发表于 2024-04-19 22:10:55">2024-04-19</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/basic/">basic</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/basic/%E9%9D%A2%E8%AF%95/">面试</a></span></div><div class="content">计算机网络-网际控制报文协议主要是为了有效的转发IP数据报已经提高IP数据报交付成功
ICMP差错报文的种类
终点不可达
源点抑制
时间超时
参数问题
重定向
ICMP的应用1.分组网间探测(PING)使用ping来测试主机或者路由器的连通性
2.跟踪路由traceroute和tracert:探测IP数据报从源主机到目的主机需要经过哪些路由器
UNIX版中,具体使用traceroute,其在运输层使用UDP协议,在网际层使用ICMP。报文类型只有差错报告报文
Windows版中,具体使用tracert,其在应用层直接使用网际层ICMP,使用了回答请求和回答报文和差错报告报文
</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2024/04/19/basic/meeting/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E6%A0%88/" title="数据结构-栈"><img class="post-bg" src="/img/basic.jpg" onerror="this.onerror=null;this.src='/img/404.png'" alt="数据结构-栈"></a></div><div class="recent-post-info"><a class="article-title" href="/2024/04/19/basic/meeting/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E6%A0%88/" 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 datetime="2024-04-19T02:10:55.000Z" title="发表于 2024-04-19 10:10:55">2024-04-19</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/basic/">basic</a><i class="fas fa-angle-right article-meta-link"></i><a class="article-meta__categories" href="/categories/basic/%E9%9D%A2%E8%AF%95/">面试</a></span></div><div class="content">数据结构-栈栈(stack)是一种遵循先入后出逻辑的线性数据结构
基于链表的栈package stacktype arrayStack struct { data []int}/* 初始化栈 */func newArrayStack() *arrayStack { return &arrayStack{ // 设置栈的长度为 0,容量为 16 data: make([]int, 0, 16), }}/* 栈的长度 */func (s *arrayStack) size() int { return len(s.data)}/* 栈是否为空 */func (s *arrayStack) isEmpty() bool { return s.size() == 0}/* 入栈 */func (s *arrayStack) push(value int) { s.data = append(s.data, value)}/* 出栈 */func (s *array ...</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><span class="space">…</span><a class="page-number" href="/page/12/#content-inner">12</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-map"><div class="card-content"><div class="item-headline"><i class="fas fa-globe-asia" aria-hidden="true"></i><span>访客地图</span></div><script id="clstr_globe" type="text/javascript" defer="defer" src="//clustrmaps.com/globe.js?d=YyoMMHBiWFLjoLGTWWty-KlZJ1LcgGpGR22unnbKzaE"></script></div></div><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src="/img/avatar.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">Joohwan.</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">116</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">37</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">27</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/piwriw"><i class="fab fa-github"></i><span>Follow Me</span></a><div class="card-info-social-icons is-center"><a class="social-icon" href="https://github.com/piwriw" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:piwriw@163.com" target="_blank" title="Email"><i class="fas fa-envelope-open-text"></i></a></div></div><div class="card-widget"><div class="item-headline"><i class="iconfont icat-visitor"></i><span>来访者</span></div><div class="item-content"><div id="welcome-info"></div></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="/2024/05/07/cloud/k8s/K8s-%E8%87%AA%E5%8A%A8%E4%BC%B8%E7%BC%A9/" title="K8s-自动伸缩"><img src="/img/k8sLogo.png" onerror="this.onerror=null;this.src='/img/404.png'" alt="K8s-自动伸缩"/></a><div class="content"><a class="title" href="/2024/05/07/cloud/k8s/K8s-%E8%87%AA%E5%8A%A8%E4%BC%B8%E7%BC%A9/" title="K8s-自动伸缩">K8s-自动伸缩</a><time datetime="2024-05-07T10:57:55.000Z" title="发表于 2024-05-07 18:57:55">2024-05-07</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2024/05/06/cloud/k8s/K8s-%E9%9B%86%E7%BE%A4%E5%86%85%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/" title="K8s-集群内网络安全"><img src="/img/k8sLogo.png" onerror="this.onerror=null;this.src='/img/404.png'" alt="K8s-集群内网络安全"/></a><div class="content"><a class="title" href="/2024/05/06/cloud/k8s/K8s-%E9%9B%86%E7%BE%A4%E5%86%85%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/" title="K8s-集群内网络安全">K8s-集群内网络安全</a><time datetime="2024-05-06T15:08:55.000Z" title="发表于 2024-05-06 23:08:55">2024-05-06</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2024/05/06/cloud/k8s/K8s-%E8%AE%A4%E8%AF%81%E6%9C%BA%E5%88%B6%EF%BC%9AServiceAcccounts/" title="K8s-认证机制:ServiceAccounts"><img src="/img/k8sLogo.png" onerror="this.onerror=null;this.src='/img/404.png'" alt="K8s-认证机制:ServiceAccounts"/></a><div class="content"><a class="title" href="/2024/05/06/cloud/k8s/K8s-%E8%AE%A4%E8%AF%81%E6%9C%BA%E5%88%B6%EF%BC%9AServiceAcccounts/" title="K8s-认证机制:ServiceAccounts">K8s-认证机制:ServiceAccounts</a><time datetime="2024-05-06T09:08:55.000Z" title="发表于 2024-05-06 17:08:55">2024-05-06</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2024/04/23/cloud/k8s/%E8%B7%A8%E5%85%AC%E7%BD%91%E8%A7%A3%E5%86%B3K8s%E7%BB%84%E7%BD%91/" title="跨公网解决K8s组网"><img src="/img/k8sLogo.png" onerror="this.onerror=null;this.src='/img/404.png'" alt="跨公网解决K8s组网"/></a><div class="content"><a class="title" href="/2024/04/23/cloud/k8s/%E8%B7%A8%E5%85%AC%E7%BD%91%E8%A7%A3%E5%86%B3K8s%E7%BB%84%E7%BD%91/" title="跨公网解决K8s组网">跨公网解决K8s组网</a><time datetime="2024-04-23T12:08:55.000Z" title="发表于 2024-04-23 20:08:55">2024-04-23</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2024/04/21/basic/meeting/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E8%99%9A%E6%8B%9F%E4%B8%93%E7%94%A8%E7%BD%91%E5%92%8C%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2/" title="计算机网络-虚拟专用网和网络地址转换"><img src="/img/basic.jpg" onerror="this.onerror=null;this.src='/img/404.png'" alt="计算机网络-虚拟专用网和网络地址转换"/></a><div class="content"><a class="title" href="/2024/04/21/basic/meeting/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E8%99%9A%E6%8B%9F%E4%B8%93%E7%94%A8%E7%BD%91%E5%92%8C%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2/" title="计算机网络-虚拟专用网和网络地址转换">计算机网络-虚拟专用网和网络地址转换</a><time datetime="2024-04-21T14:10:55.000Z" title="发表于 2024-04-21 22:10:55">2024-04-21</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/basic/"><span class="card-category-list-name">basic</span><span class="card-category-list-count">16</span></a><ul class="card-category-list child"><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/basic/go/"><span class="card-category-list-name">go</span><span class="card-category-list-count">7</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/basic/%E9%9D%A2%E8%AF%95/"><span class="card-category-list-name">面试</span><span class="card-category-list-count">9</span></a></li></ul></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/cloud/"><span class="card-category-list-name">cloud</span><span class="card-category-list-count">60</span></a><ul class="card-category-list child"><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/cloud/Harbor/"><span class="card-category-list-name">Harbor</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/cloud/Istio/"><span class="card-category-list-name">Istio</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/cloud/crio/"><span class="card-category-list-name">crio</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/cloud/devops/"><span class="card-category-list-name">devops</span><span class="card-category-list-count">1</span></a></li></ul></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/%E7%83%AD%E5%8A%A0%E8%BD%BD/" style="font-size: 1.1em; color: #999">热加载</a> <a href="/tags/%E9%9D%A2%E8%AF%95/" style="font-size: 1.34em; color: #99a3b0">面试</a> <a href="/tags/client-go/" style="font-size: 1.18em; color: #999ca1">client-go</a> <a href="/tags/zap/" style="font-size: 1.14em; color: #999b9d">zap</a> <a href="/tags/poem/" style="font-size: 1.22em; color: #999ea4">poem</a> <a href="/tags/web/" style="font-size: 1.38em; color: #99a4b4">web</a> <a href="/tags/cookies/" style="font-size: 1.1em; color: #999">cookies</a> <a href="/tags/Linux%E9%83%A8%E7%BD%B2Go/" style="font-size: 1.1em; color: #999">Linux部署Go</a> <a href="/tags/cloud/" style="font-size: 1.46em; color: #99a7bb">cloud</a> <a href="/tags/kubeedge/" style="font-size: 1.3em; color: #99a1ac">kubeedge</a> <a href="/tags/prometheus/" style="font-size: 1.1em; color: #999">prometheus</a> <a href="/tags/%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B8%9A%E5%8A%A1%E7%8A%B6%E6%80%81%E7%A0%81/" style="font-size: 1.1em; color: #999">自定义业务状态码</a> <a href="/tags/swagger/" style="font-size: 1.1em; color: #999">swagger</a> <a href="/tags/argo/" style="font-size: 1.1em; color: #999">argo</a> <a href="/tags/validation/" style="font-size: 1.1em; color: #999">validation</a> <a href="/tags/crio/" style="font-size: 1.1em; color: #999">crio</a> <a href="/tags/Gin/" style="font-size: 1.14em; color: #999b9d">Gin</a> <a href="/tags/sql/" style="font-size: 1.1em; color: #999">sql</a> <a href="/tags/private/" style="font-size: 1.22em; color: #999ea4">private</a> <a href="/tags/k8s/" style="font-size: 1.5em; color: #99a9bf">k8s</a> <a href="/tags/jwt/" style="font-size: 1.1em; color: #999">jwt</a> <a href="/tags/%E5%BE%AE%E6%9C%8D%E5%8A%A1/" style="font-size: 1.26em; color: #999fa8">微服务</a> <a href="/tags/Harbor/" style="font-size: 1.1em; color: #999">Harbor</a> <a href="/tags/docker/" style="font-size: 1.14em; color: #999b9d">docker</a> <a href="/tags/Istio/" style="font-size: 1.1em; color: #999">Istio</a> <a href="/tags/go/" style="font-size: 1.42em; color: #99a6b7">go</a> <a href="/tags/grafana/" style="font-size: 1.14em; color: #999b9d">grafana</a> <a href="/tags/sqlx/" style="font-size: 1.1em; color: #999">sqlx</a> <a href="/tags/%E5%88%86%E5%B8%83%E5%BC%8F/" style="font-size: 1.34em; color: #99a3b0">分布式</a> <a href="/tags/viper/" style="font-size: 1.1em; color: #999">viper</a> <a href="/tags/devops/" style="font-size: 1.1em; color: #999">devops</a> <a href="/tags/%E9%99%90%E6%B5%81%E7%AD%96%E7%95%A5/" style="font-size: 1.1em; color: #999">限流策略</a> <a href="/tags/tools/" style="font-size: 1.3em; color: #99a1ac">tools</a> <a href="/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" style="font-size: 1.18em; color: #999ca1">数据结构</a> <a href="/tags/session/" style="font-size: 1.1em; color: #999">session</a> <a href="/tags/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/" style="font-size: 1.26em; color: #999fa8">计算机网络</a> <a href="/tags/%E4%B8%AD%E9%97%B4%E4%BB%B6/" 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/2024/05/"><span class="card-archive-list-date">五月 2024</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/04/"><span class="card-archive-list-date">四月 2024</span><span class="card-archive-list-count">11</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/03/"><span class="card-archive-list-date">三月 2024</span><span class="card-archive-list-count">10</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/02/"><span class="card-archive-list-date">二月 2024</span><span class="card-archive-list-count">11</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/01/"><span class="card-archive-list-date">一月 2024</span><span class="card-archive-list-count">4</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/12/"><span class="card-archive-list-date">十二月 2023</span><span class="card-archive-list-count">12</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/11/"><span class="card-archive-list-date">十一月 2023</span><span class="card-archive-list-count">11</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2023/10/"><span class="card-archive-list-date">十月 2023</span><span class="card-archive-list-count">16</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">116</div></div><div class="webinfo-item"><div class="item-name">本站总字数 :</div><div class="item-count">103.9k</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"><i class="fa-solid fa-spinner fa-spin"></i></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastPushDate="2024-05-07T11:13:54.816Z"><i class="fa-solid fa-spinner fa-spin"></i></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2023 - 2024 By Joohwan.</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div></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="回到顶部"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox/fancybox.umd.min.js"></script><div class="js-pjax"><script>window.typedJSFn = {
init: (str) => {
window.typed = new Typed('#subtitle', Object.assign({
strings: str,
startDelay: 300,
typeSpeed: 150,
loop: true,
backSpeed: 50,
}, null))
},
run: (subtitleType) => {
if (true) {
if (typeof Typed === 'function') {
subtitleType()
} else {
getScript('https://cdn.jsdelivr.net/npm/typed.js/dist/typed.umd.min.js').then(subtitleType)
}
} else {
subtitleType()
}
}
}
</script><script>function subtitleType () {
if (true) {
typedJSFn.init(["我们登上并非我们所选择的舞台,演出并非我们所选择的剧本","该知道的都知道,不知道的慢慢了解","偶尔怀念一下就好了,脚下的路更重要"])
} else {
document.getElementById("subtitle").textContent = "我们登上并非我们所选择的舞台,演出并非我们所选择的剧本"
}
}
typedJSFn.run(subtitleType)</script></div><script id="click-show-text" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/dist/click-show-text.min.js" data-mobile="false" data-text="Fighting,Joohwan,666" data-fontsize="15px" data-random="false" async="async"></script><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><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 class="no-result" id="local-search-results"></div><div id="local-search-stats-wrap"></div></div></div><div id="search-mask"></div><script src="/js/search/local-search.js"></script></div></div><!-- hexo injector body_end start -->
<script data-pjax src="undefined"></script>
<script data-pjax>
function GithubCalendarConfig(){
var git_githubapiurl ="undefined?piwriw";
var git_color =undefined;
var git_user ="piwriw";
var parent_div_git = document.getElementById('recent-posts');
var git_div_html = '<div class="recent-post-item" style="width:100%;height:auto;padding:10px; display: flex; align-items: center; justify-content: center;"> <img src="https://ghchart.rshah.org/piwriw" alt="piwriw" style="width: 100%; height: auto; max-width: 100%;"> </div> ';
if(parent_div_git && location.pathname =='/'){
console.log('已挂载github calendar')
// parent_div_git.innerHTML=git_div_html+parent_div_git.innerHTML // 无报错,但不影响使用(支持pjax跳转)
parent_div_git.insertAdjacentHTML("afterbegin",git_div_html) // 有报错,但不影响使用(支持pjax跳转)
};
GithubCalendar(git_githubapiurl,git_color,git_user)
}
if(document.getElementById('recent-posts')){
GithubCalendarConfig()
}
</script>
<style>#github_container{min-height:undefined}@media screen and (max-width:650px) {#github_container{background-image:;min-height:undefined}}</style>
<style>undefined</style><!-- hexo injector body_end end --></body></html>