-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
369 lines (283 loc) · 31.2 KB
/
index.html
File metadata and controls
369 lines (283 loc) · 31.2 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
<!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>羽殇之舞的个人博客 - 010</title><meta name="author" content="羽殇之舞"><meta name="copyright" content="羽殇之舞"><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="羽殇之舞的个人博客">
<meta property="og:url" content="http://gg2002.github.io/index.html">
<meta property="og:site_name" content="羽殇之舞的个人博客">
<meta property="og:description" content="大三上开始摸鱼的博客,不会真的有人看吧,不会吧不会吧">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="http://gg2002.github.io/img/avatar.jpg">
<meta property="article:author" content="羽殇之舞">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http://gg2002.github.io/img/avatar.jpg"><link rel="shortcut icon" href="/img/favicon.png"><link rel="canonical" href="http://gg2002.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"><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: undefined,
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlight.js","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
dateSuffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: undefined,
infinitegrid: {
js: 'https://cdn.jsdelivr.net/npm/@egjs/infinitegrid/dist/infinitegrid.min.js',
buttonText: '加载更多'
},
isPhotoFigcaption: false,
islazyload: false,
isAnchor: false,
percent: {
toc: true,
rightside: false,
},
autoDarkmode: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: '羽殇之舞的个人博客',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2026-01-09 16:45:13'
}</script><script>(win=>{
win.saveToLocal = {
set: (key, value, ttl) => {
if (ttl === 0) return
const now = Date.now()
const expiry = now + ttl * 86400000
const item = {
value,
expiry
}
localStorage.setItem(key, JSON.stringify(item))
},
get: key => {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = Date.now()
if (now > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = (url, attr = {}) => 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()
}
Object.keys(attr).forEach(key => {
script.setAttribute(key, attr[key])
})
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 = () => {
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 = () => {
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><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">28</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">25</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</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> Tags</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('/img/home_img.jpg')"><nav id="nav"><span id="blog-info"><a href="/" title="羽殇之舞的个人博客"></a></span><div id="menus"><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> Tags</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">羽殇之舞的个人博客</h1><div id="site_social_icons"><a class="social-icon" href="https://github.com/GG2002" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:feathercyc@163.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #24292e;"></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="recent-post-info no-cover"><a class="article-title" href="/2025/08/18/%E9%9D%A2%E7%BB%8F%E7%89%B9%E4%BE%9B/interview-hr-roleplay/" title="HR 面角色扮演话术">HR 面角色扮演话术</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="2025-08-18T06:54:27.000Z" title="发表于 2025-08-18 14:54:27">2025-08-18</time></span></div><div class="content"> 个人评价
我是一个注重责任心和执行力的人,具备较强的学习能力和适应能力。在技术方面,我擅长运用现代化工具提升工作效率,具备扎实的编程基础和系统性思维。通过参与开源项目和多人协作开发,我积累了丰富的团队合作经验,能够在复杂项目中承担相应职责。在学生时代担任社团主席的经历,培养了我的组织管理能力和服务意识。我相信凭借踏实的工作态度和持续学习的精神,能够在银行信息科技岗位上稳步发展,为金融科技建设贡献自己的力量。
优点与缺点
笔者具有下列优点与缺点:
优点:
执行力强,当天给自己规划的任务,即使熬夜要完成
擅长使用大模型辅助编程,掌握大模型工作流编程,对大模型有比较深刻的理解
有两段开源经历,与开源社区有过密切的接触,深入参与过多人协作开发的企业级项目
善于自我反思与自我改善,追求自我实现
缺点:
有时对细枝末节过分在意导致拖慢项目整体进度
在团队协作时,会想着自己多考虑一些场景但有时会忘记与团队中其他人对齐信息导致白白做了无用功
特长
爱好唱歌和编程。
社会及校园活动经历
简略版:
在本科阶段担任了数统学院科学与技术协会的主席一职,组织举办了华中科技大学数学建模大赛 ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/07/16/orm-parser-design/" 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="2025-07-16T07:03:37.000Z" title="发表于 2025-07-16 15:03:37">2025-07-16</time></span></div><div class="content"> Gorm
gorm 身为 orm 框架,本身提供相当多的数据库操作函数,并会在底层自动将它们转成符合相应数据库 SQL 格式的 SQL。
gorm 重写(或者说转译)SQL 的类称为 Dialector。在具体执行方面可以复用 mysql 和 postgresql 的 Dialector,但是 mysql 语法转成 postgresql 语法这部分工作需要自行完成。
clause.OnConflict
mysql 与 pg 的 UPSERT 操作语法不一致:
1234-- MySQLINSERT INTO `users` *** ON DUPLICATE KEY UPDATE `name`=VALUES(name),`age`=VALUES(age); -- PostgreSQLINSERT INTO "users" *** ON CONFLICT ("id") DO UPDATE SET "name"="excluded"."name", "age"=" ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/04/30/%E9%9D%A2%E7%BB%8F%E7%89%B9%E4%BE%9B/interview-my-handwritten-data-structure/" title="为面试疯狂,C++ 面试手写数据结构大全">为面试疯狂,C++ 面试手写数据结构大全</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="2025-04-29T20:54:48.000Z" title="发表于 2025-04-30 04:54:48">2025-04-30</time></span></div><div class="content"> 前言
校招 C++ 大概学习到什么程度
写明白下面这几个代码 +能讲明白几个 C++11/14/17 的特性
MyString
MyVector
MyLRU
MySingleton
MyHashTable
MySharedPtr
MyUniquePtr
MyWeakPtr
MyThreadPool
MyRingbuffer
MyReadWriteMutex
MyForward
MyMove
MyString
展开代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465class MyString {private: char* data; size_t len;public: // 默认构造函数 MyString() : data(nullptr), len(0) {} // 构造函数 MyString(const ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/04/28/tree-map-compare/" title="The Difference Between B-Tree, B+Tree, Red-Black Tree, LSM Tree and SkipList">The Difference Between B-Tree, B+Tree, Red-Black Tree, LSM Tree and SkipList</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="2025-04-28T08:23:50.000Z" title="发表于 2025-04-28 16:23:50">2025-04-28</time></span></div><div class="content">人们总会争论 B-Tree 族、红黑树与跳表的互换性,已知 Java 与 C++ 的 Map 都使用了红黑树作为底层结构,围绕此问题,人们总会在一个缓存结构出现后问道:那为什么不使用跳表/B树呢?
rust 的 TreeMap 为什么采用 B-tree 而不是红黑树?
为啥 redis 使用跳表 (skiplist) 而不是使用 red-black?
抛开明明最有可能的个人作者喜好不谈(参与过开源的人都知道,项目最开始的走向极大概率取决于维护者个人喜好与品味,而后续的更改却需要拿出一个完善的 PR 与相当多的证据证明优越性才可能被维护者合入,简言之维护者乐意怎么写就怎么写,用哪个都有理,毕竟哪个都没有绝对优势),笔者在此总结一下这些 Tree 的特点。
名字
缓存友好性
调参友好性
并发友好性
实现 scan 操作友好性
insert/delete 实现难度
AVL Tree
不太友好,每个节点都 new 一遍太伤了
无参可调
不甚友好,旋转操作发生很频繁,要锁的节点太多
中序遍历,没 B+Tree 和 SkipList 友好
easy,谁都写过吧
Red-Bla ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/04/27/Program%20Language%20Design/smart-pointer/" 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="2025-04-27T08:45:10.000Z" title="发表于 2025-04-27 16:45:10">2025-04-27</time></span></div><div class="content"> RAII 与 unique_ptr
资源取得时机就是初始化时机(Resource Acquisition Is Intiallization,RAII)是 C++ 内存管理的第一课。
auto_ptr 自 C98 提出,直到 C17 被标准抛弃。后续被 unique_ptr 代替。auto_ptr 是历史遗留问题,是 C++ 的一处败笔,当然现在也已经被摈弃。
auto_ptr 对拷贝的处理方式是:隐式转移所有权。这不好,C++ 又不是有 GC 的语言,这种隐式容易导致程序员丧失对资源生命周期的掌控。
unique_ptr 自 C++11 提出,代替 auto_ptr,有效解决隐式转移所有权导致悬空的问题。对拷贝的处理方式是:不允许隐式转移所有权,必须显式移动语句才能转移所有权。
unique_ptr 在现代编译器的优化下基本是零开销(Zero Cost)的,换言之使用 unique_ptr 不仅可以享受到编译器单一所有权检查的功能,使用开销更是与裸指针无异。
unique_ptr 有什么特性,底层实现是怎样的,是怎么保证无法赋值构造的
shared_ptr 与 weak_ptr ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/04/21/gdb-note/" title="如何假装自己是 GDB 糕手">如何假装自己是 GDB 糕手</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="2025-04-21T09:18:43.000Z" title="发表于 2025-04-21 17:18:43">2025-04-21</time></span></div><div class="content">GDB 是好的,笔者偶尔使用 GDB 调试大部分时间使用 Vscode/Clion 的按钮调试也是好的,只有说你平时用GDB吗?用IDE自带的?你基础不扎实啊。的面试官是坏的。
几句牢骚:抛开少数编译和启动时间就老长的大型项目不谈,校招生常见项目运行环境用个图形化界面怎么了?图形化界面本来每个按钮就和 gdb 命令一一对应,用熟了不是半斤八两?会个 gdb attach 就高贵了?
下面笔者尝试伪装自己平时对 vim 与 GDB 爱不释手,日常工作都是在没有图像化界面的 ArchLinux 上完成的,喜欢用萌萌哒语气,twitter 账号头像是粉蓝旗。
GDB 多线程调试小连招
命令
描述
示例
info threads
查看所有线程及状态
info threads
thread <线程ID> / t <ID>
切换到目标线程
thread 3
thread apply all bt
所有线程打印堆栈(排查死锁)
thread apply all bt
set scheduler-locking on
锁定当前线程,其他线程暂停
...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/04/21/Program%20Language%20Design/os-and-pl-mutex/" title="OS 与 PL Mutex 之三两事">OS 与 PL Mutex 之三两事</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="2025-04-21T00:15:27.000Z" title="发表于 2025-04-21 08:15:27">2025-04-21</time></span></div><div class="content">仍然是面试速记。
死锁的 408 八股
考研 408 必背八股,谁都会问,但笔者全都以举例的方式逃过去了,不过还是记一下。
死锁的四大条件与预防死锁的四大方法(一一对应)
资源互斥,最不可能取消的条件,不互斥的资源自然也不会有同步需求,各管各的就好
持有并等待,反义词是检测到死锁就回退并重新获取锁,抛开极端情况不谈(时机恰恰好到无论怎么回退,两个资源争夺方都会以相同的顺序抢夺资源然后失败),这种方式比较好实现
不可剥夺,反义词是按某种规则检测到死锁后就老杀新或者新杀老,这样能保证同一时间一定有一个任务能被推进下去,被杀死的任务自动回退即可
环路等待,反义词是保持资源申请顺序一致,比如数据库给数据加行锁,无论是给哪条数据加,都要从第一条数据开始加,然后给每条数据依次加,不如直接加个大表锁,性能肯定更好,因此实践中其实比较难保证资源申请顺序一致。当然也有 B-tree 的 crabbing 协议这样的精巧的数据结构上锁方式。这个条件是基于持有并等待与不可剥夺才能成立的条件,一般来说无论是不满足持有并等待还是不满足不可剥夺,环路等待都将不成立。
避免死锁
预防死锁是设计静态的系统规 ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/04/20/Program%20Language%20Design/design-mode-note-md/" 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="2025-04-20T06:50:40.000Z" title="发表于 2025-04-20 14:50:40">2025-04-20</time></span></div><div class="content">笔者是从所谓 组合优于继承 的 Golang、Rust 以及 Modern C++ 学起的,因此在不知不觉中跳过了 OOP 的相当部分学习,导致笔者在 OOP 的基础几乎不如刚经过期末考的大二学生,比如 OOP 的三大特性笔者就说不上来。
设计模式作为 OOP 的良好实践,笔者在没有学习之前已经看过了不少大型项目代码,因此也许能触类旁通罢。虽然从菜鸟教程来看,设计模式有多达数十种之多,但大家都知道 CS 最会造生词以增加初学者的学习门槛,常用的设计模式不超过十种。
对于 Javaer 的普遍技术水平不能报以太多期望,笔者在此对常用设计模式归纳总结一番以防 SB 面试官偷袭。
六大原则
开闭原则(Open Closed Principle,OCP),不要想着用子类修改父类,要改就用子类继承一套然后重写方法
单⼀职责原则(Single Responsibility Principle, SRP),一个类里写所有逻辑直接梦回面向过程
⾥⽒替换原则(Liskov Substitution Principle,LSP),保守的鸭子类型思想
依赖倒置原则(Dependency Inversio ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/03/30/%E9%9D%A2%E7%BB%8F%E7%89%B9%E4%BE%9B/interview-exp-os/" 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="2025-03-30T07:44:40.000Z" title="发表于 2025-03-30 15:44:40">2025-03-30</time></span></div><div class="content"> 进程间通信方式
IPC Benchmark
Method
100 Byte Messages
1 Kilo Byte Messages
Unix Signals
–broken–
–broken–
ZeroMQ (TCP)
24,901 msg/s
22,679 msg/s
Internet sockets (TCP)
70,221 msg/s
67,901 msg/s
Domain sockets
130,372 msg/s
127,582 msg/s
Pipes
162,441 msg/s
155,404 msg/s
Message Queues
232,253 msg/s
213,796 msg/s
FIFOs (named pipes)
265,823 msg/s
254,880 msg/s
Shared Memory
4,702,557 msg/s
1,659,291 msg/s
Memory-Mapped Files
5,338,860 msg/s
1,701,759 msg/s
goldsborough/ipc-b ...</div></div></div><div class="recent-post-item"><div class="recent-post-info no-cover"><a class="article-title" href="/2025/03/22/%E9%9D%A2%E7%BB%8F%E7%89%B9%E4%BE%9B/interview-distributed-id-generator/" title="分布式唯一 ID 生成算法笔记">分布式唯一 ID 生成算法笔记</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="2025-03-21T22:42:04.000Z" title="发表于 2025-03-22 06:42:04">2025-03-22</time></span></div><div class="content"> 雪花算法
格式(64bit)
1bit 不用:因为二进制中最高位是符号位,1 表示负数,0 表示正数,生成的 id 一般都是用整数,所以最高位固定为 0
41bit 时间戳:这里采用的就是当前系统的具体时间,单位为毫秒
10bit 工作机器 ID(workerId):每台机器分配一个 id,这样可以标示不同的机器,但是上限为 1024,标示一个集群某个业务最多部署的机器个数上限
12bit 序列号(自增域):表示在某一毫秒下,这个自增域最大可以分配的 bit 个数,在当前这种配置下,每一毫秒可以分配 2^12 = 4096 个数据
特点
全局唯一性:雪花算法可以保证集群系统的 ID 全局唯一
趋势递增:由于强依赖时间戳,所以整体趋势会随着时间递增
单调递增(×):不满足单调递增,在不考虑时间回拨的情况下,虽然在单机中可以保持单调递增,但在分布式集群中无法做到单调递增,只能保证总体趋势递增
信息安全指的是 ID 生成不规则,无法猜测下一个
时间回拨
简单说就是时间被调整回到了之前的时间,由于雪花算法重度依赖机器的当前时间,所以一旦发生时间回拨,将有可能导致生成的 ID ...</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/avatar.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info__name">羽殇之舞</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">28</div></a><a href="/tags/"><div class="headline">标签</div><div class="length-num">25</div></a><a href="/categories/"><div class="headline">分类</div><div class="length-num">0</div></a></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/GG2002"><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/GG2002" target="_blank" title="Github"><i class="fab fa-github" style="color: #24292e;"></i></a><a class="social-icon" href="mailto:feathercyc@163.com" target="_blank" title="Email"><i class="fas fa-envelope" style="color: #24292e;"></i></a></div></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">This is my Blog</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 no-cover"><div class="content"><a class="title" href="/2025/08/18/%E9%9D%A2%E7%BB%8F%E7%89%B9%E4%BE%9B/interview-hr-roleplay/" title="HR 面角色扮演话术">HR 面角色扮演话术</a><time datetime="2025-08-18T06:54:27.000Z" title="发表于 2025-08-18 14:54:27">2025-08-18</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/07/16/orm-parser-design/" title="数据库适配迁移方案设计">数据库适配迁移方案设计</a><time datetime="2025-07-16T07:03:37.000Z" title="发表于 2025-07-16 15:03:37">2025-07-16</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/04/30/%E9%9D%A2%E7%BB%8F%E7%89%B9%E4%BE%9B/interview-my-handwritten-data-structure/" title="为面试疯狂,C++ 面试手写数据结构大全">为面试疯狂,C++ 面试手写数据结构大全</a><time datetime="2025-04-29T20:54:48.000Z" title="发表于 2025-04-30 04:54:48">2025-04-30</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/04/28/tree-map-compare/" title="The Difference Between B-Tree, B+Tree, Red-Black Tree, LSM Tree and SkipList">The Difference Between B-Tree, B+Tree, Red-Black Tree, LSM Tree and SkipList</a><time datetime="2025-04-28T08:23:50.000Z" title="发表于 2025-04-28 16:23:50">2025-04-28</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/04/27/Program%20Language%20Design/smart-pointer/" title="智能指针之说">智能指针之说</a><time datetime="2025-04-27T08:45:10.000Z" title="发表于 2025-04-27 16:45:10">2025-04-27</time></div></div></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/2025/08/"><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/07/"><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/04/"><span class="card-archive-list-date">四月 2025</span><span class="card-archive-list-count">6</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2025/03/"><span class="card-archive-list-date">三月 2025</span><span class="card-archive-list-count">8</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">2</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2024/08/"><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/06/"><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/05/"><span class="card-archive-list-date">五月 2024</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">28</div></div><div class="webinfo-item"><div class="item-name">本站总字数 :</div><div class="item-count">97.7k</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="2026-01-09T08:45:13.347Z"><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">©2020 - 2026 By 羽殇之舞</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"></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>